From 2937a4e43c7865372f16b991ff013ccb686a2455 Mon Sep 17 00:00:00 2001 From: Kai Volland Date: Thu, 12 Sep 2024 16:18:21 +0200 Subject: [PATCH] feat: add support for lyrx lyrx can only be written --- .commitlintrc.js => .commitlintrc.cjs | 0 .github/workflows/commitlint.yml | 2 +- .github/workflows/on-pull-request.yml | 30 +++---------- .github/workflows/on-push-main.yml | 29 +++++++++++++ .github/workflows/on-push-master.yml | 46 -------------------- .github/workflows/release.yml | 8 ++-- .gitignore | 4 +- README.md | 60 +++++--------------------- bun.lockb | Bin 348892 -> 332403 bytes package.json | 26 ++++------- src/index.ts | 32 +++++++------- test.js | 8 ++-- 12 files changed, 82 insertions(+), 163 deletions(-) rename .commitlintrc.js => .commitlintrc.cjs (100%) create mode 100644 .github/workflows/on-push-main.yml delete mode 100644 .github/workflows/on-push-master.yml diff --git a/.commitlintrc.js b/.commitlintrc.cjs similarity index 100% rename from .commitlintrc.js rename to .commitlintrc.cjs diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index 0981731..f868838 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -10,4 +10,4 @@ jobs: fetch-depth: 0 - uses: wagoid/commitlint-github-action@v4 with: - configFile: .commitlintrc.js + configFile: .commitlintrc.cjs diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index 4d9f0fc..adba2b5 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -6,37 +6,21 @@ jobs: build: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x, 20.x] - steps: - name: Checkout sources uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Cache Node.js modules 💾 - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.OS }}-node- - ${{ runner.OS }}- + - name: Use bun + uses: oven-sh/setup-bun@v1 - name: Install dependencies ⏬ - run: npm install + run: bun install - name: Lint code 💄 - run: npm run lint - - - name: Build artifacts 🏗️ - run: npm run build + run: bun run lint - name: Test code ✅ - run: npm run test + run: bun run test + - name: Build artifacts 🏗️ + run: bun run build diff --git a/.github/workflows/on-push-main.yml b/.github/workflows/on-push-main.yml new file mode 100644 index 0000000..715a068 --- /dev/null +++ b/.github/workflows/on-push-main.yml @@ -0,0 +1,29 @@ +name: Test Push to main + +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Use bun + uses: oven-sh/setup-bun@v1 + + - name: Install dependencies ⏬ + run: bun install + + - name: Lint code 💄 + run: bun run lint + + - name: Test code ✅ + run: bun run test + + - name: Build artifacts 🏗️ + run: bun run build diff --git a/.github/workflows/on-push-master.yml b/.github/workflows/on-push-master.yml deleted file mode 100644 index cce93d9..0000000 --- a/.github/workflows/on-push-master.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Test Push to Master - -on: - push: - branches: - - master - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x, 20.x] - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Cache Node.js modules 💾 - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.OS }}-node- - ${{ runner.OS }}- - - - name: Install dependencies ⏬ - run: npm install - - - name: Lint code 💄 - run: npm run lint - - - name: Build artifacts 🏗️ - run: npm run build - - - name: Test code ✅ - run: npm run test - - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 98c14ed..d6972ea 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,13 +11,11 @@ jobs: - name: Checkout sources 🔰 uses: actions/checkout@v4 - - name: Setup Node.js 18 👷🏻 - uses: actions/setup-node@v4 - with: - node-version: 18 + - name: Use bun + uses: oven-sh/setup-bun@v1 - name: Install dependencies ⏬ - run: npm ci + run: bun install - name: Release 🚀 uses: cycjimmy/semantic-release-action@v4.1.0 diff --git a/.gitignore b/.gitignore index a3e7371..d334dda 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,4 @@ dist binaries output-bulk -output.map -output.qml -output.sld +TEST_OUTPUT.* diff --git a/README.md b/README.md index a87a344..11bf183 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ between various formats for styling of geographic data. ## tl;dr ``` -npx geostyler-cli --output new-qgis-style.qml my-existing.sld +bunx geostyler-cli --output new-qgis-style.qml my-existing.sld ``` ## Requirements @@ -15,7 +15,7 @@ npx geostyler-cli --output new-qgis-style.qml my-existing.sld ## Standalone application -Binaries are available for Linux, MacOS, and Windows on the +Binaries are available for Linux, MacOS, and Windows on the [Releases](https://github.com/geostyler/geostyler-cli/releases) page. Download the zip file for your operating system, unzip, navigate to the folder and run the `geostyler` command: @@ -26,50 +26,13 @@ geostyler-cli --output new-qgis-style.qml my-existing.sld ## Usage without installation ⚡ -`Node.js` includes [npx](https://docs.npmjs.com/cli/v10/commands/npx), this +`Bun` includes [bunx](https://bun.sh/docs/cli/bunx), this allows you to run commands from an npm package without having to install it. ``` -npx geostyler-cli -s sld -t qgis -o output.qml input.sld +bunx geostyler-cli -s sld -t qgis -o output.qml input.sld ``` -## Global installation - -### Installation 💾 - -`Node.js` includes [npm](https://docs.npmjs.com/cli/v10/commands/npm) - the -JavaScript package manager. To install the `geostyler` command globally: - -``` -npm install -g geostyler-cli -``` - -You can then use the new `geostyler-cli` command, e.g.: - -``` -geostyler-cli -s sld -t qgis -o output.qml input.sld -``` - -To process a folder of files: - -``` -geostyler-cli -s sld -t qgis -o /outputdir /inputdir -``` - - -### Update 🚀 - -``` -npm update -g geostyler-cli -``` - -### Uninstalling 😔 - -``` -npm uninstall -g geostyler-cli -``` - - ## Syntax and examples To convert a single file: @@ -106,12 +69,12 @@ geostyler-cli -t sld testdata/point_simple.qml * `-h` / `--help` Display the help and exit. * `-o` / `--output` Output filename or directory. Required when the source is a directory. For a file leave this empty to write to `stdout`. [string] -* `-s` / `--source` Source parser, either `mapbox`, `mapfile` or `map`, +* `-s` / `--source` Source parser, either `mapbox` (`maplibre`), `lyrx`, `mapfile` or `map`, `sld` or `se` for SLD - the parser will read the version from the file, -and `qgis` or `qml` for QGIS QML files. If not given, it will be guessed from the extension of the input file. +and `qgis` (`qml`) for QGIS QML files. If not given, it will be guessed from the extension of the input file. Mandatory if the the target is a directory. -* `-t` / `--target` Target parser, either `mapbox`, `sld` (for SLD 1.0), `se` (for SLD 1.1), -and `qgis` or `qml` for QGIS QML files. If not given, it will be guessed from +* `-t` / `--target` Target parser, either `mapbox` (`maplibre`), `sld` (for SLD 1.0), `se` (for SLD 1.1), +and `qgis` (`qml`) for QGIS QML files. If not given, it will be guessed from the extension of the output file. Mapfiles are not currently supported as target. Mandatory if the the target is a directory. * `-v` / `--version` Display the version of the program. @@ -121,10 +84,10 @@ Mandatory if the the target is a directory. In your clone of the repo, in the root directory: ```bash -npm install # get dependencies -npm run build # build from possibly changed source +bun install # get dependencies +bun run build # build from possibly changed source # now you can call your build like this: -npm start -- -s sld -t qgis -o output.qml testdata/point_simplepoint.sld +bun run start -- -s sld -t qgis -o output.qml testdata/point_simplepoint.sld ``` ## Funding & financial sponsorship @@ -133,4 +96,3 @@ Maintenance and further development of this code can be funded through the [GeoStyler Open Collective](https://opencollective.com/geostyler). All contributions and expenses can transparently be reviewed by anyone; you see what we use the donated money for. Thank you for any financial support you give the GeoStyler project 💞 - diff --git a/bun.lockb b/bun.lockb index a7cbddae07dbdd6146a7cd2517671880b56dd429..3b496314338c331a8c843630e22214ae667702f2 100755 GIT binary patch delta 62183 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 diff --git a/package.json b/package.json index 60cb15d..4497567 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,12 @@ "version": "4.0.0", "description": "", "type": "module", - "main": "dist/src/index.js", + "main": "src/index.js", "files": [ "dist" ], "bin": { - "geostyler-cli": "dist/src/index.js" + "geostyler-cli": "src/index.js" }, "scripts": { "build": "bun run build-clean && bun run build-only", @@ -26,14 +26,6 @@ "prepublishOnly": "bun run build", "postpublish": "bun run package-binaries" }, - "pkg": { - "targets": [ - "node18-linux-x64", - "node18-macos-x64", - "node18-win-x64" - ], - "outputPath": "./binaries" - }, "repository": { "type": "git", "url": "git+https://github.com/geostyler/geostyler-cli.git" @@ -51,31 +43,31 @@ }, "homepage": "https://github.com/geostyler/geostyler-cli#readme", "engines": { - "node": ">=18.0.0", - "npm": ">=6.0.0" + "bun": ">=1.0.0", + "node": ">=20.0.0", + "npm": ">=10.0.0" }, "devDependencies": { - "@commitlint/cli": "^17.6.5", - "@commitlint/config-conventional": "^17.6.5", + "@commitlint/cli": "^19.5.0", + "@commitlint/config-conventional": "^19.5.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@terrestris/eslint-config-typescript": "^3.1.0", "@types/gradient-string": "^1.1.2", + "@types/minimist": "^1.2.5", "@types/node": "^20.0.0", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "adm-zip": "^0.5.10", "eslint": "^8.39.0", - "pkg": "^5.8.1", "rimraf": "^5.0.0", "typescript": "^5.0.4" }, "dependencies": { - "geostyler-lyrx-parser": "^1.0.0", + "geostyler-lyrx-parser": "^1.0.1", "geostyler-mapbox-parser": "^6.0.0", "geostyler-mapfile-parser": "^4.0.1", - "geostyler-openlayers-parser": "^5.0.0", "geostyler-qgis-parser": "^3.0.0", "geostyler-sld-parser": "^6.1.2", "geostyler-style": "^9.1.0", diff --git a/src/index.ts b/src/index.ts index 8bc8ecc..01f26f2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,9 +2,11 @@ import SLDParser from 'geostyler-sld-parser'; import QGISParser from 'geostyler-qgis-parser'; -// import OpenLayersParser from "geostyler-openlayers-parser"; import MapfileParser from 'geostyler-mapfile-parser'; import MapboxParser from 'geostyler-mapbox-parser'; +import ArcGISParser from 'geostyler-lyrx-parser'; +import { StyleParser } from 'geostyler-style'; + import { existsSync, lstatSync, @@ -13,7 +15,6 @@ import { readdirSync } from 'fs'; import minimist from 'minimist'; -import { StyleParser } from 'geostyler-style'; import ora, { Ora } from 'ora'; import { logHelp, @@ -33,10 +34,10 @@ const getParserFromFormat = (inputString: string): StyleParser | undefined => { throw new Error('No input'); } switch (inputString.toLowerCase()) { - // case 'openlayers': - // case 'ol': - // return new OpenLayersParser(); + case 'lyrx': + return new ArcGISParser(); case 'mapbox': + case 'maplibre': return new MapboxParser(); case 'mapfile': case 'map': @@ -62,9 +63,10 @@ const getParserFromFilename = (fileName: string): StyleParser | undefined => { return undefined; } switch (fileEnding.toLowerCase()) { - // case 'ol': - // return new OpenLayersParser(); + case 'lyrx': + return new ArcGISParser(); case 'mapbox': + case 'maplibre': return new MapboxParser(); case 'map': return new MapfileParser(); @@ -82,9 +84,6 @@ const getExtensionFromFormat = (format: string): string => { return ''; } switch (format.toLowerCase()) { - case 'openlayers': - case 'ol': - return 'ts'; case 'mapfile': return 'map'; case 'qgis': @@ -159,12 +158,16 @@ function collectPaths(basePath: string, isFile: boolean): string[] { async function writeFile( sourceFile: string, sourceParser: StyleParser, - targetFile: string, targetParser: StyleParser | undefined, + targetFile: string, targetParser: Exclude | undefined, oraIndicator: Ora ) { const inputFileData = await promises.readFile(sourceFile, 'utf-8'); const indicator = oraIndicator; // for linter. + if (targetParser instanceof ArcGISParser || targetParser instanceof MapfileParser) { + throw new Error('ArcGIS (lyrx) and MapFile are not supported as target.'); + } + try { indicator.text = `Reading from ${sourceFile}`; const { @@ -259,7 +262,7 @@ async function main() { // Check source path arg. if (!sourcePath) { indicator.fail('No input file or folder specified.'); - return; + return Promise.reject('No input file or folder specified.'); } // Check source exists, is a dir or a file ? @@ -271,12 +274,11 @@ async function main() { // Try to define type of target (file or dir). // Assume the target is the same as the source let targetIsFile = sourceIsFile; - const outputExists = existsSync(outputPath); // Dir to file is not possible if (!sourceIsFile && targetIsFile) { indicator.fail('The source is a directory, so the target must be directory, too.'); - return; + return Promise.reject('The source is a directory, so the target must be directory, too.'); } // Get source and target parser. @@ -285,7 +287,7 @@ async function main() { const targetParser = targetFormat && getParserFromFormat(targetFormat) || getParserFromFilename(outputPath); if (!sourceParser) { indicator.fail('No sourceparser was specified.'); - return; + return Promise.reject('No sourceparser was specified.'); } if (!targetParser) { indicator.info('No targetparser was specified. Output will be a GeoStyler object.'); diff --git a/test.js b/test.js index 0e0013a..0bdcf44 100644 --- a/test.js +++ b/test.js @@ -13,7 +13,7 @@ function checkFileCreated(outputFile) { } function runTest(args, outputFile) { - const cmd = 'npm'; + const cmd = 'bun'; const result = spawnSync(cmd, args, { shell: true }); /* eslint-disable no-console */ console.log(`Status: ${result.status.toString()}`); @@ -26,7 +26,7 @@ function runAllTests() { let success = true; // test sld to qgis - let outputFile = 'output.qml'; + let outputFile = 'TEST_OUTPUT.qml'; let args = ['start', '--', '-s', 'sld', '-t', 'qgis', '-o', outputFile, 'testdata/sld/point_simplepoint.sld']; runTest(args, outputFile); @@ -35,7 +35,7 @@ function runAllTests() { } // test qgis to sld - outputFile = 'output.sld'; + outputFile = 'TEST_OUTPUT.sld'; args = ['start', '--', '-s', 'qgis', '-t', 'sld', '-o', outputFile, 'testdata/point_simple.qml']; runTest(args, outputFile); @@ -44,7 +44,7 @@ function runAllTests() { } // test mapfile to geostyler - outputFile = 'output.map'; + outputFile = 'TEST_OUTPUT.geostyler'; args = ['start', '--', '-s', 'mapfile', '-o', outputFile, 'testdata/point_simplepoint.map']; runTest(args, outputFile);