From 79f7ea316257ddeb2db8a2fb14cd39f420f7fc0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 15:09:04 +0100
Subject: [PATCH 1/8] Update and added git workflows.
---
.../os-git-actions/manual-commit/action.yml | 2 +-
.../os-git-actions/signed-commit/action.yml | 4 +-
.github/workflows/AddInnerSourcingLabel.yml | 13 ++
.github/workflows/{dev-pr.yml => DevPR.yml} | 12 +-
.github/workflows/PreRelease.yml | 123 ++++++++++++++++++
.github/workflows/Release.yml | 78 +++++++++++
.github/workflows/ValidatePRLabels.yml | 9 ++
.github/workflows/ValidatePRTitle.yml | 11 ++
.github/workflows/main-push.yml | 86 ------------
9 files changed, 238 insertions(+), 100 deletions(-)
create mode 100644 .github/workflows/AddInnerSourcingLabel.yml
rename .github/workflows/{dev-pr.yml => DevPR.yml} (76%)
create mode 100644 .github/workflows/PreRelease.yml
create mode 100644 .github/workflows/Release.yml
create mode 100644 .github/workflows/ValidatePRLabels.yml
create mode 100644 .github/workflows/ValidatePRTitle.yml
delete mode 100644 .github/workflows/main-push.yml
diff --git a/.github/os-git-actions/manual-commit/action.yml b/.github/os-git-actions/manual-commit/action.yml
index 0aa04e76..895e35c7 100644
--- a/.github/os-git-actions/manual-commit/action.yml
+++ b/.github/os-git-actions/manual-commit/action.yml
@@ -19,7 +19,7 @@ runs:
steps:
- name: Add new files (if needed)
shell: bash
- if: ${{ inputs.newFiles }}
+ if: ${{ inputs.newFiles == 'true' }}
run: |
git add .
diff --git a/.github/os-git-actions/signed-commit/action.yml b/.github/os-git-actions/signed-commit/action.yml
index a997e72b..f200b112 100644
--- a/.github/os-git-actions/signed-commit/action.yml
+++ b/.github/os-git-actions/signed-commit/action.yml
@@ -26,13 +26,13 @@ runs:
using: composite
steps:
- name: Setup GPG to sign commits
- uses: ./.github/setup-gpg/
+ uses: ./.github/os-git-actions/setup-gpg/
with:
gpgPriv: ${{ inputs.gpgPriv }}
gpgPassPhrase: ${{ inputs.gpgPassPhrase }}
- name: Perform git commit
- uses: ./.github/manual-commit/
+ uses: ./.github/os-git-actions/manual-commit/
with:
branch: ${{ inputs.branch }}
message: ${{ inputs.message }}
diff --git a/.github/workflows/AddInnerSourcingLabel.yml b/.github/workflows/AddInnerSourcingLabel.yml
new file mode 100644
index 00000000..f4b96925
--- /dev/null
+++ b/.github/workflows/AddInnerSourcingLabel.yml
@@ -0,0 +1,13 @@
+name: Add Inner Sourcing Label
+
+on:
+ pull_request:
+ types:
+ - opened
+
+jobs:
+ inner_sourcing:
+ uses: OutSystems/rd.github-reusable-workflows/.github/workflows/add-inner-sourcing-label.yaml@v2.0.2
+ with:
+ codeowners-path: .github/CODEOWNERS
+ secrets: inherit
diff --git a/.github/workflows/dev-pr.yml b/.github/workflows/DevPR.yml
similarity index 76%
rename from .github/workflows/dev-pr.yml
rename to .github/workflows/DevPR.yml
index 18432f30..2c23ab68 100644
--- a/.github/workflows/dev-pr.yml
+++ b/.github/workflows/DevPR.yml
@@ -1,11 +1,9 @@
-name: DEV_PR
+name: PullRequest into Dev branch
on:
# Triggers the workflow on push events but only for the "dev" branch.
pull_request:
branches: ['dev']
- workflow_dispatch:
-
jobs:
eslint:
runs-on: ubuntu-latest
@@ -16,10 +14,6 @@ jobs:
- name: Checkout branch dev
uses: actions/checkout@v2
- - uses: actions/setup-node@v1
- with:
- node-version: '16.x'
-
- name: Install project dependencies
run: npm install
@@ -33,10 +27,6 @@ jobs:
- name: Checkout branch dev
uses: actions/checkout@v2
- - uses: actions/setup-node@v1
- with:
- node-version: '16.x'
-
- name: Install project dependencies
run: npm install
diff --git a/.github/workflows/PreRelease.yml b/.github/workflows/PreRelease.yml
new file mode 100644
index 00000000..516514ab
--- /dev/null
+++ b/.github/workflows/PreRelease.yml
@@ -0,0 +1,123 @@
+name: Pre-Release
+
+on:
+ workflow_dispatch:
+ inputs:
+ new-version:
+ description: 'New version to be set. (1.0.1)'
+ type: string
+ required: true
+ release-date:
+ description: 'Release date. (YYYY-MM-DD)'
+ type: string
+ required: true
+ new-dev-release:
+ description: 'Set the new dev version. (1.0.1)'
+ type: string
+ required: false
+
+jobs:
+ run-lint-on-dev:
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version }}
+ steps:
+ - name: Checkout into dev
+ uses: actions/checkout@v4
+ with:
+ ref: dev
+ token: ${{ secrets.PAT }}
+
+ - name: Install project dependencies
+ run: npm install
+
+ - name: Run build
+ run: npm run build
+
+ create-rc:
+ needs: run-lint-on-dev
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version }}
+ steps:
+ - name: Checkout into dev
+ uses: actions/checkout@v4
+ with:
+ ref: dev
+ token: ${{ secrets.PAT }}
+
+ - name: Create branch rc${{ inputs.new-version }}
+ run: |
+ git checkout -b rc${{ inputs.new-version }}
+ git push -u origin rc${{ inputs.new-version }}
+
+ set-tag:
+ needs: create-rc
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version }}
+ steps:
+ - name: Checkout into rc${{ inputs.new-version }}
+ uses: actions/checkout@v4
+ with:
+ ref: rc${{ inputs.new-version }}
+ fetch-depth: 0
+ token: ${{ secrets.PAT }}
+
+ - name: Set tag
+ run: |
+ git tag v${{ inputs.new-version }} HEAD
+ git push origin --tags
+
+ set-pre-release:
+ needs: set-tag
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version }}
+ steps:
+ - name: Create Release
+ id: create_release
+ uses: softprops/action-gh-release@v2.0.5
+ with:
+ tag_name: v${{ inputs.new-version }}
+ name: Release of version ${{ inputs.new-version }} (${{ inputs.release-date }})
+ body: |
+ ### What's New
+ - First
+ - ...
+
+ ### Fixed Issues and Improvements
+ - First
+ - ...
+
+ draft: false
+ prerelease: true
+ token: ${{ secrets.PAT }}
+
+ update-dev-version:
+ needs: create-rc
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version && inputs.new-dev-release }}
+ steps:
+ - name: Checkout into dev
+ uses: actions/checkout@v4
+ with:
+ ref: dev
+ token: ${{ secrets.PAT }}
+
+ - name: Install project dependencies
+ run: npm install
+
+ - name: Update dev version into v${{ inputs.new-dev-release }}
+ run: |
+ npm run gta-update-version --newVersion=${{ inputs.new-dev-release }}
+
+ - name: Sign and Commit version increment to branch dev
+ uses: ./.github/os-git-actions/signed-commit/
+ with:
+ branch: dev
+ message: 'Updated into v${{ inputs.new-dev-release }} [skip ci]'
+ newFiles: true
+ gpgPriv: ${{ secrets.GPG_SIGN_KEY }}
+ gpgPassPhrase: ${{ secrets.GPG_PASSPHRASE }}
diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml
new file mode 100644
index 00000000..9eb738f9
--- /dev/null
+++ b/.github/workflows/Release.yml
@@ -0,0 +1,78 @@
+name: Release
+
+on:
+ workflow_dispatch:
+ inputs:
+ new-version:
+ description: 'Version to be released.'
+ type: string
+ required: true
+ update-prerelease-into-latest:
+ description: 'Update pre-release into latest.'
+ type: boolean
+ default: true
+ delete-rc-branch:
+ description: 'Delete rc* branch at the end of process.'
+ type: boolean
+ default: true
+
+jobs:
+ run-lint-on-rc:
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version }}
+ steps:
+ - name: Checkout into rc${{ inputs.new-version }}
+ uses: actions/checkout@v4
+ with:
+ ref: rc${{ inputs.new-version }}
+ token: ${{ secrets.PAT }}
+
+ - name: Install project dependencies
+ run: npm install
+
+ - name: Run build
+ run: npm run build
+
+ merge-rc-into-main:
+ needs: run-lint-on-rc
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.new-version }}
+ steps:
+ - name: Merge rc${{ inputs.new-version }} into main
+ uses: everlytic/branch-merge@1.1.5
+ with:
+ github_token: ${{ secrets.PAT }}
+ source_ref: rc${{ inputs.new-version }}
+ target_branch: 'main'
+ commit_message_template: 'Merged rc${{ inputs.new-version }} into main. [skip ci]'
+
+ set-pre-release-as-lts:
+ needs: merge-rc-into-main
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Update v${{ inputs.new-version }} Tag Release from pre-release into latest
+ if: ${{ inputs.new-version && inputs.update-prerelease-into-latest == true }}
+ uses: softprops/action-gh-release@v2.0.5
+ with:
+ tag_name: v${{ inputs.new-version }}
+ prerelease: false
+ token: ${{ secrets.PAT }}
+
+ delete-rc-branch:
+ needs: merge-rc-into-main
+ runs-on: ubuntu-latest
+
+ if: ${{ inputs.delete-rc-branch == true }}
+ steps:
+ - name: Checkout branch dev
+ uses: actions/checkout@v4
+ with:
+ ref: dev
+
+ - name: Delete branch rc${{ inputs.new-version }}
+ shell: bash
+ run: |
+ git push origin -d rc${{ inputs.new-version }}
diff --git a/.github/workflows/ValidatePRLabels.yml b/.github/workflows/ValidatePRLabels.yml
new file mode 100644
index 00000000..ebdfd039
--- /dev/null
+++ b/.github/workflows/ValidatePRLabels.yml
@@ -0,0 +1,9 @@
+name: Validate pull request labels
+
+on:
+ pull_request:
+ types: [opened, reopened, labeled, unlabeled]
+
+jobs:
+ check-label:
+ uses: OutSystems/rd.github-reusable-workflows/.github/workflows/validate-pr-labels.yaml@v2.0.2
diff --git a/.github/workflows/ValidatePRTitle.yml b/.github/workflows/ValidatePRTitle.yml
new file mode 100644
index 00000000..bab64f95
--- /dev/null
+++ b/.github/workflows/ValidatePRTitle.yml
@@ -0,0 +1,11 @@
+name: Validate pull request title
+
+on:
+ pull_request:
+ types: [opened, reopened, edited]
+
+jobs:
+ build:
+ uses: OutSystems/rd.github-reusable-workflows/.github/workflows/validate-pr-title.yaml@v2.0.2
+ with:
+ validate-semVer: false
diff --git a/.github/workflows/main-push.yml b/.github/workflows/main-push.yml
deleted file mode 100644
index e62c5e03..00000000
--- a/.github/workflows/main-push.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-# This is a basic workflow to help you get started with Actions
-
-name: MAIN_PUSH
-
-# Controls when the action will run.
-on:
- # Triggers the workflow on push or pull request events but only for the dev branch
- push:
- branches: ['main']
-
- # Allows you to run this workflow manually from the Actions tab
- workflow_dispatch:
-
-# A workflow run is made up of one or more jobs that can run sequentially or in parallel
-jobs:
- eslint:
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: ./
- steps:
- - name: Checkout branch main
- uses: actions/checkout@v2
-
- - uses: actions/setup-node@v1
- with:
- node-version: '16.x'
-
- - name: Install project dependencies
- run: npm install
-
- - name: Run lint
- run: npm run lint
-
- compile-code:
- needs: eslint
- runs-on: ubuntu-latest
- steps:
- - name: Checkout branch dev
- uses: actions/checkout@v2
-
- - uses: actions/setup-node@v1
- with:
- node-version: '16.x'
-
- - name: Install project dependencies
- run: npm install
-
- - name: Compile code
- run: npm run build
-
- documentation:
- needs: compile-code
- runs-on: ubuntu-latest
-
- # Steps represent a sequence of tasks that will be executed as part of the job
- steps:
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- - name: Checkout branch main
- uses: actions/checkout@v3
- with:
- ref: dev
- token: ${{ secrets.PAT }}
-
- - name: Install graphviz
- run: sudo apt install -y graphviz
-
- - uses: actions/setup-node@v3
- with:
- node-version: 16
- cache: 'npm'
-
- - name: Install project dependencies
- run: npm install
-
- - name: Generate documentation
- run: npm run docs
-
- - name: Sign and commit documentation to branch dev
- uses: ./.github/os-git-actions/signed-commit/
- with:
- branch: main
- message: 'Update documentation [skip ci]'
- newFiles: true
- gpgPriv: ${{ secrets.GPG_SIGN_KEY }}
- gpgPassPhrase: ${{ secrets.GPG_PASSPHRASE }}
From f8abc8203e815de0e8e4ca51008d9cd4edf78fe3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 15:23:17 +0100
Subject: [PATCH 2/8] fixed lint issues
---
src/OSFramework/Maps/OSMap/AbstractMap.ts | 2 +-
src/Providers/Maps/Google/Shape/AbstractProviderShape.ts | 2 +-
src/Providers/Maps/Leaflet/Shape/AbstractProviderShape.ts | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/OSFramework/Maps/OSMap/AbstractMap.ts b/src/OSFramework/Maps/OSMap/AbstractMap.ts
index 82c90928..1780b1dd 100644
--- a/src/OSFramework/Maps/OSMap/AbstractMap.ts
+++ b/src/OSFramework/Maps/OSMap/AbstractMap.ts
@@ -10,7 +10,7 @@ namespace OSFramework.Maps.OSMap {
private _heatmapLayersSet: Set;
private _isReady: boolean;
private _mapEvents: Event.OSMap.MapEventsManager;
- private _mapRefreshRequest: number;
+ private _mapRefreshRequest: number | NodeJS.Timeout;
private _mapType: Enum.MapType;
private _markers: Map;
private _markersSet: Set;
diff --git a/src/Providers/Maps/Google/Shape/AbstractProviderShape.ts b/src/Providers/Maps/Google/Shape/AbstractProviderShape.ts
index 43dc24db..7d888e64 100644
--- a/src/Providers/Maps/Google/Shape/AbstractProviderShape.ts
+++ b/src/Providers/Maps/Google/Shape/AbstractProviderShape.ts
@@ -6,7 +6,7 @@ namespace Provider.Maps.Google.Shape {
T extends OSFramework.Maps.Configuration.IConfigurationShape,
W extends google.maps.MVCObject,
> extends OSFramework.Maps.Shape.AbstractShape {
- private _shapeChangedEventTimeout: number;
+ private _shapeChangedEventTimeout: number | NodeJS.Timeout;
private _resetShapeEvents(): void {
// Make sure the listeners get removed before adding the new ones
diff --git a/src/Providers/Maps/Leaflet/Shape/AbstractProviderShape.ts b/src/Providers/Maps/Leaflet/Shape/AbstractProviderShape.ts
index 4abb5901..e30ee9be 100644
--- a/src/Providers/Maps/Leaflet/Shape/AbstractProviderShape.ts
+++ b/src/Providers/Maps/Leaflet/Shape/AbstractProviderShape.ts
@@ -6,7 +6,7 @@ namespace Provider.Maps.Leaflet.Shape {
T extends OSFramework.Maps.Configuration.IConfigurationShape,
W extends L.Path,
> extends OSFramework.Maps.Shape.AbstractShape {
- private _shapeChangedEventTimeout: number;
+ private _shapeChangedEventTimeout: number | NodeJS.Timeout;
/** Checks if the Shape has associated events */
public get hasEvents(): boolean {
From 72a04cf118eefb19bb840f439486a37f6b461173 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 15:23:53 +0100
Subject: [PATCH 3/8] Added gulp scripts
---
gulp/DefaultSpecs.js | 31 +++++
gulp/README.md | 35 +++++
gulp/Tasks/TsTanspile.js | 205 ++++++++++++++++++++++++++++++
gulp/Tasks/UpdateVersion.js | 102 +++++++++++++++
gulp/Template/index.html | 123 ++++++++++++++++++
gulpfile.js | 75 +++++++++++
src/OSFramework/Maps/Constants.ts | 7 +
7 files changed, 578 insertions(+)
create mode 100644 gulp/DefaultSpecs.js
create mode 100644 gulp/README.md
create mode 100644 gulp/Tasks/TsTanspile.js
create mode 100644 gulp/Tasks/UpdateVersion.js
create mode 100644 gulp/Template/index.html
create mode 100644 gulpfile.js
diff --git a/gulp/DefaultSpecs.js b/gulp/DefaultSpecs.js
new file mode 100644
index 00000000..0a619110
--- /dev/null
+++ b/gulp/DefaultSpecs.js
@@ -0,0 +1,31 @@
+/*
+ * Global constants info
+ **/
+const constants = {
+ fileName: 'OutSystemsMaps',
+ gitUrl: 'https://github.com/OutSystems/outsystems-maps',
+ websiteUrl: 'hhttps://outsystemsui.outsystems.com/OutSystemsMapsSample/',
+ envType: {
+ development: 'dev',
+ production: 'prod',
+ },
+ // list of files to be excluded from a specific platform
+ excludeFromTsTranspile: {},
+ // list of platforms to compile and create scss files.
+ platformTarget: {
+ default: '',
+ },
+};
+
+// Store the default project specifications
+const specs = {
+ version: '1.8.0',
+ name: 'OutSystems Maps',
+ description: '',
+ url: 'Website:\n • ' + constants.websiteUrl,
+ gitHub: 'GitHub:\n • ' + constants.gitUrl,
+};
+
+// Expose sections info!
+exports.info = specs;
+exports.globalConsts = constants;
diff --git a/gulp/README.md b/gulp/README.md
new file mode 100644
index 00000000..87b565d0
--- /dev/null
+++ b/gulp/README.md
@@ -0,0 +1,35 @@
+# Gulp
+
+
+
+
+
+
Our streaming build system
+
+
+
+## This folder contains:
+
+
+
+## Project Structure
+
+Bellow there is some comments about the application structure.
+
+ .
+ |
+ ├── gulpfile.js # gulp orchestrator
+ ├── ...
+ ├── gulp # Contains gulp specific tasks and templates
+ | └── Tasks
+ | ├── TsTranspile.js # TypeScript transpile task definition
+ | └── UpdateVersion.js # Task used to update the repository task dynamically
+ |
+ ├── ...
diff --git a/gulp/Tasks/TsTanspile.js b/gulp/Tasks/TsTanspile.js
new file mode 100644
index 00000000..10d925a4
--- /dev/null
+++ b/gulp/Tasks/TsTanspile.js
@@ -0,0 +1,205 @@
+const gulp = require('gulp');
+const { series } = require('gulp');
+const fs = require('fs');
+const sourcemaps = require('gulp-sourcemaps');
+const ts = require('gulp-typescript');
+
+const distFolder = './dist';
+const project = require('../DefaultSpecs');
+
+let defaultTsConfigText = '';
+let filesPath = {};
+
+// Method that will check if platformType has been defined through npm inline variable. If yes, that's the one to be tackled
+function getDefaultPlatformType(platformType) {
+ const pt = {
+ error: false,
+ shouldCreateAll: true,
+ type: '',
+ };
+
+ // Check if a platformType has been passed as an npm inline script value
+ if (process.env.npm_config_target !== undefined) {
+ if (project.globalConsts.platformTarget[process.env.npm_config_target] === undefined) {
+ pt.error = true;
+ pt.errorMessage = `Given platform '${
+ process.env.npm_config_target
+ }' does not exist. Plaforms availabe:\n • ${Object.keys(project.globalConsts.platformTarget).join(
+ '\n • '
+ )}`;
+ } else {
+ pt.type = process.env.npm_config_target;
+ pt.shouldCreateAll = false;
+ }
+ } else {
+ pt.type = platformType !== undefined ? platformType : Object.keys(project.globalConsts.platformTarget)[0];
+ }
+
+ return pt;
+}
+
+// Method that will handle the end of tsCompilation
+function onTsCompileFinish(platformType, cb, shouldCreateAll) {
+ const pts = project.globalConsts.platformTarget;
+ if (shouldCreateAll === false || platformType === pts[Object.keys(pts)[Object.keys(pts).length - 1]]) {
+ cb();
+ }
+}
+
+// Update tsConfig after the compilation in order to ensure it will not be changed dynamically
+function rollBackTsConfigFile() {
+ // Update file with the default text!
+ fs.writeFileSync('tsconfig.json', defaultTsConfigText, 'utf8');
+ defaultTsConfigText = '';
+}
+
+// Compile TypeScript
+function tsTranspile(cb, envMode, platformType) {
+ // Store the default platformType
+ const pt = getDefaultPlatformType(platformType);
+ // Check if platformTye exist and it's valid
+ if (pt.error) {
+ console.log(`\n⛔️ ERROR: ${pt.errorMessage}\n`);
+ return;
+ }
+ // Set filesPath accordingly as well
+ filesPath[pt.type] = `${distFolder}/${envMode === project.globalConsts.envType.production ? '' : envMode + '.'}${
+ project.globalConsts.platformTarget[pt.type] !== '' ? project.globalConsts.platformTarget[pt.type] + '.' : ''
+ }${project.globalConsts.fileName}.js`;
+ // Update tsConfig file and do the Ts compilation accordingly
+ updateTsConfigFile(cb, envMode, project.globalConsts.platformTarget[pt.type], pt.shouldCreateAll);
+ // Check if there is still any pending platform to tackle
+ if (
+ pt.shouldCreateAll &&
+ pt.type !==
+ Object.keys(project.globalConsts.platformTarget)[
+ Object.keys(project.globalConsts.platformTarget).length - 1
+ ]
+ ) {
+ tsTranspile(
+ cb,
+ envMode,
+ Object.keys(project.globalConsts.platformTarget)[
+ Object.keys(project.globalConsts.platformTarget).indexOf(pt.type) + 1
+ ]
+ );
+ }
+}
+
+// Method that will trigger the transpile of Ts according if it's development or production mode and platform type (O11 or ODC)
+async function tsTranspileBasedOnPlatform(cb, envMode, platformType, shouldCreateAll) {
+ let tsProject = ts.createProject('tsconfig.json', {
+ outDir: distFolder,
+ declaration: envMode === project.globalConsts.envType.production ? true : false,
+ outFile: `${envMode === project.globalConsts.envType.production ? '' : envMode + '.'}${
+ platformType !== '' ? platformType + '.' : ''
+ }${project.globalConsts.fileName}.js`,
+ });
+
+ if (envMode === project.globalConsts.envType.development) {
+ tsProject
+ .src()
+ .pipe(sourcemaps.init())
+ .pipe(tsProject())
+ .js.pipe(sourcemaps.write('.'))
+ .pipe(gulp.dest(distFolder))
+ .on('finish', () => {
+ onTsCompileFinish(platformType, cb, shouldCreateAll);
+ });
+ } else {
+ tsProject
+ .src()
+ .pipe(tsProject())
+ .pipe(gulp.dest(distFolder))
+ .on('finish', () => {
+ onTsCompileFinish(platformType, cb, shouldCreateAll);
+ });
+ }
+
+ // Rollback tsconfig file to the default state
+ if (defaultTsConfigText !== '') {
+ rollBackTsConfigFile();
+ }
+}
+
+// Set as Development Mode
+function tsTranspileDev(cb) {
+ tsTranspile(cb, project.globalConsts.envType.development);
+}
+
+// Set as Production Mode
+function tsTranspileProd(cb) {
+ tsTranspile(cb, project.globalConsts.envType.production);
+}
+
+// Add section info to the compiled files.
+function updateFwkAndPlatformInfo(cb) {
+ for (const pt in filesPath) {
+ // Set the Specifications text info
+ let specsInfo = '';
+
+ specsInfo += `/*!\n`;
+ specsInfo += `${project.info.name} ${project.info.version} ${
+ project.globalConsts.platformTarget[pt] !== ''
+ ? '• ' + project.globalConsts.platformTarget[pt] + ' Platform'
+ : ''
+ }\n`;
+ if (project.info.description !== '') {
+ specsInfo += `${project.info.description}\n`;
+ }
+ specsInfo += `${project.info.url}\n`;
+ specsInfo += `${project.info.gitHub}\n`;
+ specsInfo += `*/ \n`;
+
+ // Read file code
+ let jsCode = fs.readFileSync(filesPath[pt], 'utf8');
+ // Set *.d.ts file path
+ const dtsFilePath = filesPath[pt].replace('.js', '.d.ts');
+ // Check if the *.d.ts file exist
+ let dtsCode = fs.existsSync(dtsFilePath) ? fs.readFileSync(dtsFilePath, 'utf8') : null;
+
+ // Set platformType to the src/OSFramework/DataGrid/Constants.ts
+ jsCode = jsCode.replace('<->platformType<->', project.globalConsts.platformTarget[pt]);
+ dtsCode =
+ dtsCode !== null ? dtsCode.replace('<->platformType<->', project.globalConsts.platformTarget[pt]) : null;
+
+ // Update code
+ let updatedCode = specsInfo + jsCode;
+ let updatedDtsCode = dtsCode !== null ? specsInfo + dtsCode : null;
+
+ // Ensure code will be set properly before set the update.
+ setTimeout(() => {
+ // Update the existing file info with the new one!
+ fs.writeFileSync(filesPath[pt], updatedCode, 'utf8');
+ if (updatedDtsCode !== null) {
+ fs.writeFileSync(dtsFilePath, updatedDtsCode, 'utf8');
+ }
+ }, 0);
+ }
+
+ cb();
+}
+
+// Method that will update the tsConfig file in order to set the exclude files under given platformType
+function updateTsConfigFile(cb, envMode, platformType, shouldCreateAll) {
+ // Check if there are anything that should be ignored
+ if (project.globalConsts.excludeFromTsTranspile[platformType] !== undefined) {
+ // Get the text from tsConfig file
+ let code = fs.readFileSync('tsconfig.json', 'utf8');
+ // Store tsConfig text before updating it!
+ defaultTsConfigText = code;
+
+ // Create the new exclude text block
+ const replaceInto = `"exclude": ${JSON.stringify(project.globalConsts.excludeFromTsTranspile[platformType])},`;
+ // Replace the text from the default one into the updated one!
+ code = code.replace('"exclude": [],', replaceInto);
+ // Update file!
+ fs.writeFileSync('tsconfig.json', code, 'utf8');
+ }
+
+ tsTranspileBasedOnPlatform(cb, envMode, platformType, shouldCreateAll);
+}
+
+// TypeScript Transpile Task
+exports.transpileDev = series(tsTranspileDev, updateFwkAndPlatformInfo);
+exports.transpileProd = series(tsTranspileProd, updateFwkAndPlatformInfo);
diff --git a/gulp/Tasks/UpdateVersion.js b/gulp/Tasks/UpdateVersion.js
new file mode 100644
index 00000000..0cfde907
--- /dev/null
+++ b/gulp/Tasks/UpdateVersion.js
@@ -0,0 +1,102 @@
+const prompts = require('prompts');
+const fs = require('fs');
+
+// Get the default specs
+const defaultSpecs = require('./../DefaultSpecs');
+
+// Store the new version
+let newVersionToBeSet = '';
+
+// List of files path to be updated
+let filesList = {
+ constants: './src/OSFramework/Charts/Constants.ts',
+ package: './package.json',
+ readme: './README.md',
+ specs: './gulp/Tasks/DefaultSpecs.js',
+};
+
+// Prompt question about the new version to be set
+function askForNewVersion(cb) {
+ (async () => {
+ const answer = await prompts([
+ {
+ message: 'Set the new version',
+ name: 'newVersion',
+ type: 'text',
+ initial: 'v' + defaultSpecs.info.version,
+ },
+ {
+ active: 'yes',
+ inactive: 'no',
+ initial: true,
+ message: (prev) => 'Do you confirm the new version will be set is: ' + prev + '?',
+ name: 'confirm',
+ type: (prev) => (prev ? 'toggle' : null),
+ },
+ ]);
+
+ if (answer.newVersion && answer.confirm === true) {
+ newVersionToBeSet = answer.newVersion.replace('v', '');
+ getFilesList(cb);
+ } else {
+ console.warn(`\n ❌ Process has been canceled! \n \n`);
+ cb();
+ }
+ })();
+}
+
+// Get the list of file where the version must be updated!
+function getFilesList(cb) {
+ // Go through all files to be updated!
+ for (const path in filesList) {
+ // Find for text
+ let findFor = '';
+ let replaceTo = '';
+
+ switch (filesList[path]) {
+ case filesList.constants:
+ findFor = `OSChartsVersion = '${defaultSpecs.info.version}';`;
+ replaceTo = `OSChartsVersion = '${newVersionToBeSet}';`;
+ break;
+
+ case filesList.package:
+ findFor = `"version": "${defaultSpecs.info.version}",`;
+ replaceTo = `"version": "${newVersionToBeSet}",`;
+ break;
+
+ case filesList.specs:
+ findFor = `version: '${defaultSpecs.info.version}',`;
+ replaceTo = `version: '${newVersionToBeSet}',`;
+ break;
+
+ case filesList.readme:
+ findFor = `# OutSystems Charts · v${defaultSpecs.info.version}`;
+ replaceTo = `# OutSystems Charts · v${newVersionToBeSet}`;
+ break;
+ }
+
+ // Read file code
+ let code = fs.readFileSync(filesList[path], 'utf8');
+ // Update code
+ let updatedCode = code.replace(findFor, replaceTo);
+ // Update the existing file info with the new one!
+ fs.writeFileSync(filesList[path], updatedCode, 'utf8');
+ }
+
+ cb();
+}
+
+// Set the new version script triggered by the GitHub Action, where the new verion will be passed by script variable --newVersion
+function gtaSetNewVersion(cb) {
+ // Check if version exist
+ if (process.env.npm_config_newversion === undefined) {
+ console.log(`\n⛔️ ERROR: --newVersion is missing at the script!\n`);
+ return;
+ }
+ // Store the version to be set
+ newVersionToBeSet = process.env.npm_config_newversion.replace('v', '');
+ getFilesList(cb);
+}
+
+exports.setVersion = askForNewVersion;
+exports.gtaSetVersion = gtaSetNewVersion;
diff --git a/gulp/Template/index.html b/gulp/Template/index.html
new file mode 100644
index 00000000..b96428f5
--- /dev/null
+++ b/gulp/Template/index.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+ _asset-name_ Dev Mode
+
+
+
+
+
+
+
+
+
+ _asset-name_ • --platform--
+
+ Development mode...
+
+
+
+
+
Welcome to the development mode of _asset-name_.
Here you can find links to the generated files from
+ our repository.
+
+
+
Below are the links to the generated files:
+
+ -
+
Javascript file generated by the TypeScript compilation
+
+
+ - jsListItemToBeReplaced
+
+
+
+
+
+
More info about the repository, here.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 00000000..d06f7dd7
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,75 @@
+const gulp = require('gulp');
+const { watch, series, parallel } = require('gulp');
+const browser = require('browser-sync');
+const clean = require('gulp-clean');
+const fs = require('fs');
+
+// Get dependencies tasks
+const project = require('./gulp/DefaultSpecs');
+const tsTranspile = require('./gulp/Tasks/TsTanspile');
+const updatetVersion = require('./gulp/Tasks/UpdateVersion');
+
+// Local configs
+const distFolder = './dist';
+const serverPort = 3000;
+const watchTsFiles = 'src/**/*.ts';
+
+// Clean Dist Folder
+function cleanOldFiles(cb) {
+ if (fs.existsSync(distFolder)) {
+ gulp.src(distFolder + '/*', { read: false }).pipe(clean());
+ }
+ cb();
+}
+
+// Starts a Browser instance
+function initServer() {
+ updateIndexTemplateFile();
+ setTimeout(() => {
+ browser.init({ server: distFolder, port: serverPort, cors: true });
+ }, 0);
+}
+
+// Method to update development template code
+function updateIndexTemplateFile() {
+ // Get the index.html base file
+ let code = fs.readFileSync('./gulp/Template/index.html', 'utf8');
+
+ let jsLinks = '';
+
+ if (
+ process.env.npm_config_target !== undefined &&
+ project.globalConsts.platformTarget[process.env.npm_config_target] !== undefined
+ ) {
+ const platformType = project.globalConsts.platformTarget[process.env.npm_config_target];
+ code = code.replace(' • --platform--', platformType !== '' ? ' • ' + platformType : '');
+ jsLinks = `${platformType !== '' ? platformType + '.' : ''}${project.globalConsts.fileName}.js
`;
+ } else {
+ code = code.replace(' • --platform--', '');
+ const pts = project.globalConsts.platformTarget;
+ for (const pt in pts) {
+ jsLinks += `${pts[pt] !== '' ? pts[pt] + '.' : ''}${project.globalConsts.fileName}.js
\n`;
+ }
+ }
+ code = code.replace('jsListItemToBeReplaced', jsLinks);
+ code = code.replaceAll('_asset-name_', project.globalConsts.fileName);
+ code = code.replace('_more-info-repo-link_', project.globalConsts.gitUrl);
+
+ // Create the new index.html at the dist folder!
+ fs.writeFileSync(`${distFolder}/index.html`, code, 'utf8');
+}
+
+// Watch files changed
+function watchFiles() {
+ watch(watchTsFiles, series(tsTranspile.transpileDev));
+}
+
+// Gulp tasks
+exports.startDevelopment = series(cleanOldFiles, tsTranspile.transpileDev, parallel(watchFiles, initServer));
+exports.createProduction = series(cleanOldFiles, tsTranspile.transpileProd);
+exports.updateVersion = updatetVersion.setVersion;
+exports.gtaSetVersion = updatetVersion.gtaSetVersion;
diff --git a/src/OSFramework/Maps/Constants.ts b/src/OSFramework/Maps/Constants.ts
index 4cd52b34..aafcf9d2 100644
--- a/src/OSFramework/Maps/Constants.ts
+++ b/src/OSFramework/Maps/Constants.ts
@@ -2,4 +2,11 @@
namespace OSFramework.Maps.Constants {
/* OutSystems Maps Version */
export const OSMapsVersion = '1.8.0';
+
+ /**
+ * DataGrid Set platform in use.
+ * - This value will be set dynamically at the compilation momment!
+ * - Do not change default string value!
+ */
+ export const OSPlatform = '<->platformType<->';
}
From e493e475a883166df6f4e68c1a2682e4e7f5bba4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 15:24:21 +0100
Subject: [PATCH 4/8] Update scripts to use gulp and devDependencies
---
package.json | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/package.json b/package.json
index 238b2317..1c8bfde1 100644
--- a/package.json
+++ b/package.json
@@ -5,13 +5,15 @@
"author": "UI Components Team",
"license": "BSD-3-Clause",
"scripts": {
- "build": "tsc && npm run lint",
+ "build": "gulp createProduction && npm run lint",
+ "dev": "gulp startDevelopment",
+ "docs": "npx typedoc",
"lint": "eslint . --ext .ts",
- "lintfix": "eslint . --fix --ext .ts",
+ "lintfix": "eslint . --ext .ts",
"prettier": "prettier --config ./.prettierrc.json --write \"**/*.+(js|ts|css)\"",
- "setup": "npm i && tsc",
"test": "echo \"Error: no test specified\" && exit 1",
- "docs": "npx typedoc"
+ "update-version": "gulp updateVersion",
+ "gta-update-version": "gulp gtaSetVersion --from"
},
"repository": {
"type": "git",
@@ -24,20 +26,28 @@
"devDependencies": {
"@googlemaps/markerclusterer": "^2.5.3",
"@types/google.maps": "^3.46.0",
- "@types/leaflet": "^1.7.5",
"@types/leaflet-routing-machine": "^3.2.3",
+ "@types/leaflet": "^1.7.5",
"@typescript-eslint/eslint-plugin": "^6.19.1",
"@typescript-eslint/parser": "^6.19.1",
- "eslint": "^8.56.0",
+ "browser-sync": "^3.0.2",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
+ "eslint": "^8.56.0",
+ "fancy-log": "^2.0.0",
+ "gulp-clean": "^0.4.0",
+ "gulp-confirm": "^1.0.8",
+ "gulp-sourcemaps": "^3.0.0",
+ "gulp-typescript": "^6.0.0-alpha.1",
+ "gulp": "^4.0.2",
"prettier-eslint": "^16.3.0",
- "stylelint": "^14.16.1",
+ "prompts": "^2.4.2",
"stylelint-config-prettier": "^9.0.5",
"stylelint-order": "^6.0.4",
- "typedoc": "^0.23.9",
+ "stylelint": "^14.16.1",
"typedoc-plugin-merge-modules": "^4.0.1",
"typedoc-umlclass": "^0.7.0",
+ "typedoc": "^0.23.9",
"typescript": "^4.5.0"
}
-}
+}
\ No newline at end of file
From 1a2638b49878c23ef57178e6fa4943b0b40784f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 17:04:09 +0100
Subject: [PATCH 5/8] Fixed files path where version will be changed.
---
gulp/Tasks/UpdateVersion.js | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/gulp/Tasks/UpdateVersion.js b/gulp/Tasks/UpdateVersion.js
index 0cfde907..6239fa62 100644
--- a/gulp/Tasks/UpdateVersion.js
+++ b/gulp/Tasks/UpdateVersion.js
@@ -9,9 +9,8 @@ let newVersionToBeSet = '';
// List of files path to be updated
let filesList = {
- constants: './src/OSFramework/Charts/Constants.ts',
+ constants: './src/OSFramework/Maps/Constants.ts',
package: './package.json',
- readme: './README.md',
specs: './gulp/Tasks/DefaultSpecs.js',
};
From 0f76a1c6eb496047c89d3939494df0ba7bb64b81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 17:19:18 +0100
Subject: [PATCH 6/8] fixed file path
---
gulp/Tasks/UpdateVersion.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gulp/Tasks/UpdateVersion.js b/gulp/Tasks/UpdateVersion.js
index 6239fa62..b2f89c7a 100644
--- a/gulp/Tasks/UpdateVersion.js
+++ b/gulp/Tasks/UpdateVersion.js
@@ -11,7 +11,7 @@ let newVersionToBeSet = '';
let filesList = {
constants: './src/OSFramework/Maps/Constants.ts',
package: './package.json',
- specs: './gulp/Tasks/DefaultSpecs.js',
+ specs: './gulp/DefaultSpecs.js',
};
// Prompt question about the new version to be set
From b9b86a49a9e475c92d9a8a241f0ac1da1d166898 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 17:39:41 +0100
Subject: [PATCH 7/8] Update README.md
---
README.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index bfe848d5..85f58257 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,7 @@
-# OutSystems Maps · [![GitHub license](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/OutSystems/outsystems-maps/blob/master/LICENSE) ![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)
+# OutSystems Maps · v1.8.0
+
+![GitHub License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg) ![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)
+
Add maps to your applications **OutSystems Reactive Web apps** with a single or multiple locations. Fully customizable and adaptable, allows you to change map behaviors, customize your map, add markers and customize each of them, according to your use case.
From 841b723b20dac2e98226be3bc650444308c87e1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Rio?=
Date: Thu, 9 May 2024 17:42:23 +0100
Subject: [PATCH 8/8] Fixed naming and files path
---
gulp/Tasks/UpdateVersion.js | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gulp/Tasks/UpdateVersion.js b/gulp/Tasks/UpdateVersion.js
index b2f89c7a..8e239485 100644
--- a/gulp/Tasks/UpdateVersion.js
+++ b/gulp/Tasks/UpdateVersion.js
@@ -11,6 +11,7 @@ let newVersionToBeSet = '';
let filesList = {
constants: './src/OSFramework/Maps/Constants.ts',
package: './package.json',
+ readme: './README.md',
specs: './gulp/DefaultSpecs.js',
};
@@ -54,8 +55,8 @@ function getFilesList(cb) {
switch (filesList[path]) {
case filesList.constants:
- findFor = `OSChartsVersion = '${defaultSpecs.info.version}';`;
- replaceTo = `OSChartsVersion = '${newVersionToBeSet}';`;
+ findFor = `OSMapsVersion = '${defaultSpecs.info.version}';`;
+ replaceTo = `OSMapsVersion = '${newVersionToBeSet}';`;
break;
case filesList.package:
@@ -69,8 +70,8 @@ function getFilesList(cb) {
break;
case filesList.readme:
- findFor = `# OutSystems Charts · v${defaultSpecs.info.version}`;
- replaceTo = `# OutSystems Charts · v${newVersionToBeSet}`;
+ findFor = `# OutSystems Maps · v${defaultSpecs.info.version}`;
+ replaceTo = `# OutSystems Maps · v${newVersionToBeSet}`;
break;
}