diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 551d6a4ee..a9a722a07 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -15,9 +15,13 @@ permissions: checks: write concurrency: preview-${{ github.ref }} jobs: - deploy-preview: + build-preview: runs-on: ubuntu-latest steps: + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x - name: Checkout Main Branch 🛎️ uses: actions/checkout@v3 with: @@ -38,10 +42,6 @@ jobs: echo "EOF" >> $GITHUB_ENV - name: Checkout PR Branch 🛎️ uses: actions/checkout@v3 - - name: Use Node.js 18.x - uses: actions/setup-node@v3 - with: - node-version: 18.x - name: Install and Build 🔧 # TODO: when we move shieldlib to its own repo, move shieldlib docs CI also run: | @@ -70,7 +70,7 @@ jobs: mkdir -p pr echo '${{ env.MAIN_STATS }}' echo '${{ env.PR_STATS }}' - npm exec ts-node scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > pr/stats-difference.md + npm exec tsx scripts/stats_compare '${{ env.MAIN_STATS }}' '${{ env.PR_STATS }}' > pr/stats-difference.md - name: Save PR artifacts env: PR_NUMBER: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/s3-cleanup.yml b/.github/workflows/s3-cleanup.yml index 2e2f0b3ab..5d5b45acc 100644 --- a/.github/workflows/s3-cleanup.yml +++ b/.github/workflows/s3-cleanup.yml @@ -11,11 +11,8 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Set up AWS CLI - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.mocharc.yml b/.mocharc.yml index 98314b919..2a41056a3 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -4,7 +4,4 @@ extension: spec: - test/**/*.js - test/**/*.spec.ts -require: ts-node/register -node-option: - - loader=ts-node/esm - - experimental-specifier-resolution=node +import: tsx diff --git a/icons/poi_fuel.svg b/icons/poi_fuel.svg new file mode 100644 index 000000000..319fc60b0 --- /dev/null +++ b/icons/poi_fuel.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/poi_supermarket.svg b/icons/poi_supermarket.svg new file mode 100644 index 000000000..561510454 --- /dev/null +++ b/icons/poi_supermarket.svg @@ -0,0 +1,3 @@ + + + diff --git a/package-lock.json b/package-lock.json index 4bfb1df98..7833bdf99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "tokenfield": "^1.5.2" }, "devDependencies": { - "@basemaps/sprites": "^6.41.0", + "@basemaps/sprites": "^7.0.0", "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", "@playwright/test": "^1.38.1", @@ -45,12 +45,11 @@ "prettier": "^2.3.2", "shx": "^0.3.4", "svgo": "^2.8.0", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", + "tsx": "^4.6.2", "typescript": "^4.9.5" }, "engines": { - "node": ">=16", + "node": ">=18", "npm": ">=8.3.0" } }, @@ -59,14 +58,14 @@ "link": true }, "node_modules/@basemaps/sprites": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-6.41.0.tgz", - "integrity": "sha512-ktuEo8ulXffVPR/dJMYHGBHjdcolbng67j7J5y8rN+1A8gMV+MxVCJYKeJ7lip6nsmgRHb8/xUueyuIGlCxc/Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@basemaps/sprites/-/sprites-7.0.0.tgz", + "integrity": "sha512-9OwguPrnw51zBfadG5U2xN9pEtm4hMZ9gI0Su/uAVjCh5gdjGZfrdcJp0VP8xb98KACTjN0GFpZ1VOu9FfUaHA==", "dev": true, "dependencies": { "@mapbox/shelf-pack": "^3.2.0", "cmd-ts": "^0.12.1", - "sharp": "^0.30.7" + "sharp": "^0.32.6" }, "bin": { "basemaps-sprites": "bin/basemaps-sprites.mjs" @@ -75,18 +74,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -535,31 +522,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", @@ -700,30 +662,6 @@ "node": ">=10.13.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, "node_modules/@types/chai": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", @@ -747,13 +685,6 @@ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "optional": true - }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", @@ -802,27 +733,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -902,12 +812,6 @@ "node": ">=10" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -946,15 +850,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -982,6 +877,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1090,12 +991,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1368,12 +1263,6 @@ "iconv-lite": "^0.4.8" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -1899,6 +1788,12 @@ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, "node_modules/file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", @@ -2219,6 +2114,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -2865,19 +2772,6 @@ "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", "dev": true }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "optional": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -3001,12 +2895,6 @@ "semver": "bin/semver.js" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, "node_modules/maplibre-gl": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", @@ -3385,9 +3273,9 @@ "dev": true }, "node_modules/node-abi": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", - "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -3397,9 +3285,9 @@ } }, "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "dev": true }, "node_modules/node-fetch": { @@ -4020,6 +3908,12 @@ "node": ">=10" } }, + "node_modules/prebuild-install/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "node_modules/prebuild-install/node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -4072,6 +3966,34 @@ "simple-concat": "^1.0.0" } }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", @@ -4102,6 +4024,12 @@ "once": "^1.3.1" } }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "node_modules/quickselect": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", @@ -4232,6 +4160,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve-protobuf-schema": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", @@ -4411,23 +4348,23 @@ "dev": true }, "node_modules/sharp": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "dev": true, "hasInstallScript": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.1", - "semver": "^7.3.7", + "semver": "^7.5.4", "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", + "tar-fs": "^3.0.4", "tunnel-agent": "^0.6.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=14.15.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -4726,16 +4663,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -4775,6 +4702,16 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, + "node_modules/streamx": { + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", + "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4997,37 +4934,25 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, "dependencies": { - "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" } }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "dev": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "node_modules/tar/node_modules/minipass": { @@ -5078,130 +5003,426 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "node_modules/ts-mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz", - "integrity": "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==", + "node_modules/tsx": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.6.2.tgz", + "integrity": "sha512-QPpBdJo+ZDtqZgAnq86iY/PD2KYCUPSUGIunHdGwyII99GKH+f3z3FZ8XNFLSGQIA4I365ui8wnQpl8OKLqcsg==", "dev": true, "dependencies": { - "ts-node": "7.0.1" + "esbuild": "~0.18.20", + "get-tsconfig": "^4.7.2" }, "bin": { - "ts-mocha": "bin/ts-mocha" + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">= 6.X.X" + "node": ">=18.0.0" }, "optionalDependencies": { - "tsconfig-paths": "^3.5.0" - }, - "peerDependencies": { - "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X" + "fsevents": "~2.3.3" } }, - "node_modules/ts-mocha/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.3.1" + "node": ">=12" } }, - "node_modules/ts-mocha/node_modules/ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "bin": { - "ts-node": "dist/bin.js" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4.2.0" + "node": ">=12" } }, - "node_modules/ts-mocha/node_modules/yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.3.1" + "node": ">=12" } }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/tsx/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/tunnel-agent": { @@ -5350,12 +5571,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -5556,15 +5771,6 @@ "node": ">=10" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5593,8 +5799,7 @@ "npm-run-all": "^4.1.5", "prettier": "^2.8.4", "shx": "^0.3.4", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", + "tsx": "^4.6.2", "typedoc": "^0.24.8", "typescript": "^4.9.5" } diff --git a/package.json b/package.json index 5e5d070db..ecef53ce5 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ ], "scripts": { "build:shieldlib": "cd shieldlib && run-s build:code docs", - "build:code": "ts-node scripts/build", + "build:code": "tsx scripts/build", "build": "run-s clean-build sprites build:shieldlib build:code taginfo status_map", "clean": "run-s clean:shieldlib clean:code clean-download clean-build", "clean-download": "shx rm -rf download", @@ -24,17 +24,17 @@ "code_format:prettier": "prettier --write --list-different .", "code_format:svgo": "svgo -q -f icons/", "extract_layer": "node scripts/extract_layer", - "generate_samples": "ts-node scripts/generate_samples.ts", + "generate_samples": "tsx scripts/generate_samples.ts", "presprites": "shx rm -rf dist/sprites", - "serve": "ts-node scripts/serve", + "serve": "tsx scripts/serve", "shields": "node scripts/generate_shield_defs.js -o dist/shields.json", "sprites": "node scripts/sprites.js", "start": "run-s clean-build build:shieldlib sprites shields serve", "stats": "node scripts/stats.js", "style": "node scripts/generate_style.js -o dist/style.json", "status_map": "node scripts/status_map.js", - "taginfo": "ts-node scripts/taginfo", - "test": "ts-mocha" + "taginfo": "tsx scripts/taginfo", + "test": "mocha" }, "dependencies": { "@americana/maplibre-shield-generator": "*", @@ -47,7 +47,7 @@ "tokenfield": "^1.5.2" }, "devDependencies": { - "@basemaps/sprites": "^6.41.0", + "@basemaps/sprites": "^7.0.0", "@mapbox/vector-tile": "^1.3.1", "@maplibre/maplibre-gl-style-spec": "^17.0.1", "@playwright/test": "^1.38.1", @@ -71,12 +71,11 @@ "prettier": "^2.3.2", "shx": "^0.3.4", "svgo": "^2.8.0", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", + "tsx": "^4.6.2", "typescript": "^4.9.5" }, "engines": { "npm": ">=8.3.0", - "node": ">=16" + "node": ">=18" } } diff --git a/scripts/generate_samples.ts b/scripts/generate_samples.ts index 62569533a..3093bba0f 100644 --- a/scripts/generate_samples.ts +++ b/scripts/generate_samples.ts @@ -4,7 +4,7 @@ import type * as maplibre from "maplibre-gl"; // Declare a global augmentation for the Window interface declare global { - interface Window { + interface WindowWithMap extends Window { map?: maplibre.Map; } } @@ -43,10 +43,14 @@ const screenshots: SampleSpecification[] = fs.mkdirSync(sampleFolder, { recursive: true }); const browser = await chromium.launch({ - headless: true, executablePath: process.env.CHROME_BIN, + args: ["--headless=new"], +}); +const context = await browser.newContext({ + bypassCSP: true, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36", }); -const context = await browser.newContext(); const page = await context.newPage(); @@ -64,7 +68,7 @@ async function createImage(screenshot: SampleSpecification) { // Wait for map to load, then wait two more seconds for images, etc. to load. try { - await page.waitForFunction(() => window.map?.loaded(), { + await page.waitForFunction(() => (window as WindowWithMap).map?.loaded(), { timeout: 3000, }); } catch (e) { diff --git a/scripts/taginfo.js b/scripts/taginfo.js index 135109f24..e0f9a94ac 100644 --- a/scripts/taginfo.js +++ b/scripts/taginfo.js @@ -20,7 +20,7 @@ import { routeParser, shieldPredicate, networkPredicate, -} from "../src/js/shield_format.js"; +} from "../src/js/shield_format"; await mkdir("dist/shield-sample", { recursive: true }); diff --git a/scripts/taginfo_template.json b/scripts/taginfo_template.json index d6055d37e..868967ced 100644 --- a/scripts/taginfo_template.json +++ b/scripts/taginfo_template.json @@ -383,6 +383,14 @@ "description": "Intermittent lakes are translucent with a dashed line representing the lakeshore.", "doc_url": "https://openmaptiles.org/schema/#water" }, + { + "key": "amenity", + "value": "fuel", + "object_types": ["node", "area"], + "description": "Fuel stations are marked by an icon representing a gas pump.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_fuel.svg" + }, { "key": "amenity", "value": "school", @@ -624,7 +632,14 @@ "doc_url": "https://openmaptiles.org/schema/#poi", "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_pow_taoist.svg" }, - + { + "key": "shop", + "value": "supermarket", + "object_types": ["node", "area"], + "description": "Supermarkets are marked by an icon representing a grocery cart.", + "doc_url": "https://openmaptiles.org/schema/#poi", + "icon_url": "https://raw.githubusercontent.com/ZeLonewolf/openstreetmap-americana/main/icons/poi_supermarket.svg" + }, { "key": "highway", "value": "motorway", diff --git a/shieldlib/.mocharc.yml b/shieldlib/.mocharc.yml index 0e5405489..4df82a721 100644 --- a/shieldlib/.mocharc.yml +++ b/shieldlib/.mocharc.yml @@ -3,7 +3,4 @@ extension: - ts spec: - test/spec/*.ts -require: ts-node/register -node-option: - - loader=ts-node/esm - - experimental-specifier-resolution=node +import: tsx diff --git a/shieldlib/package.json b/shieldlib/package.json index 6d681f940..552bc910a 100644 --- a/shieldlib/package.json +++ b/shieldlib/package.json @@ -24,8 +24,7 @@ "npm-run-all": "^4.1.5", "prettier": "^2.8.4", "shx": "^0.3.4", - "ts-mocha": "^10.0.0", - "ts-node": "^10.9.1", + "tsx": "^4.6.2", "typedoc": "^0.24.8", "typescript": "^4.9.5" }, @@ -34,7 +33,7 @@ "code_format:prettier": "prettier --write --list-different .", "clean": "shx rm -rf dist docs", "docs": "typedoc src/index.ts", - "test": "ts-mocha", + "test": "mocha", "build:code": "node scripts/build.js", "build": "run-s clean build:code docs", "preversion": "npm version --no-git-tag-version --preid alpha", diff --git a/shieldlib/src/shield.d.ts b/shieldlib/src/shield.d.ts index fb44bf80b..38e055424 100644 --- a/shieldlib/src/shield.d.ts +++ b/shieldlib/src/shield.d.ts @@ -15,7 +15,8 @@ export function storeNoShield( export function missingIconLoader( renderContext: ShieldRenderingContext, routeDef: RouteDefinition, - spriteID: string + spriteID: string, + update?: boolean ): void; export function romanizeRef(ref: string): string; diff --git a/shieldlib/src/shield.js b/shieldlib/src/shield.js index dd15c53d0..f8d3c342d 100644 --- a/shieldlib/src/shield.js +++ b/shieldlib/src/shield.js @@ -1,13 +1,9 @@ "use strict"; -import * as ShieldText from "./shield_text.js"; -import * as ShieldDraw from "./shield_canvas_draw.js"; -import * as Gfx from "./screen_gfx.js"; -import { - drawBanners, - drawBannerHalos, - getBannerCount, -} from "./shield_banner.js"; +import * as ShieldText from "./shield_text"; +import * as ShieldDraw from "./shield_canvas_draw"; +import * as Gfx from "./screen_gfx"; +import { drawBanners, drawBannerHalos, getBannerCount } from "./shield_banner"; function compoundShieldSize(r, dimension, bannerCount) { return { @@ -166,17 +162,17 @@ function drawShieldText(r, ctx, shieldDef, routeDef) { return ctx; } -export function missingIconLoader(r, routeDef, spriteID) { +export function missingIconLoader(r, routeDef, spriteID, update) { let ctx = generateShieldCtx(r, routeDef); if (ctx == null) { // Want to return null here, but that gives a corrupted display. See #243 console.warn("Didn't produce a shield for", JSON.stringify(routeDef)); ctx = r.gfxFactory.createGraphics({ width: 1, height: 1 }); } - storeSprite(r, spriteID, ctx); + storeSprite(r, spriteID, ctx, update); } -function storeSprite(r, id, ctx) { +function storeSprite(r, id, ctx, update) { const imgData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height); r.spriteRepo.putSprite( id, @@ -185,7 +181,8 @@ function storeSprite(r, id, ctx) { height: ctx.canvas.height, data: imgData.data, }, - r.px(1) + { pixelRatio: r.px(1) }, + update ); } diff --git a/shieldlib/src/shield_renderer.d.ts b/shieldlib/src/shield_renderer.d.ts index fc9d9ac19..a136a7c2d 100644 --- a/shieldlib/src/shield_renderer.d.ts +++ b/shieldlib/src/shield_renderer.d.ts @@ -1,4 +1,9 @@ -import { Map, MapStyleImageMissingEvent, StyleImage } from "maplibre-gl"; +import { + Map, + MapStyleImageMissingEvent, + StyleImage, + StyleImageMetadata, +} from "maplibre-gl"; import { Bounds, DebugOptions, @@ -62,6 +67,11 @@ export declare class InMemorySpriteRepository implements SpriteRepository { sprites: {}; getSprite(spriteID: string): StyleImage; hasSprite(spriteID: string): boolean; - putSprite(spriteID: string, image: ImageData): void; + putSprite( + spriteID: string, + image: ImageData, + options: StyleImageMetadata, + update: boolean + ): void; } export {}; diff --git a/shieldlib/src/shield_renderer.ts b/shieldlib/src/shield_renderer.ts index 9194feb32..3596d0875 100644 --- a/shieldlib/src/shield_renderer.ts +++ b/shieldlib/src/shield_renderer.ts @@ -1,4 +1,9 @@ -import { Map, MapStyleImageMissingEvent, StyleImage } from "maplibre-gl"; +import { + Map as MapLibre, + MapStyleImageMissingEvent, + StyleImage, + StyleImageMetadata, +} from "maplibre-gl"; import { Bounds, DebugOptions, @@ -52,15 +57,25 @@ export type ShapeDrawFunction = ( ) => number; class MaplibreGLSpriteRepository implements SpriteRepository { - map: Map; - constructor(map: Map) { + map: MapLibre; + constructor(map: MapLibre) { this.map = map; } getSprite(spriteID: string): StyleImage { return this.map.style.getImage(spriteID); } - putSprite(spriteID: string, image: ImageData, pixelRatio: number): void { - this.map.addImage(spriteID, image, { pixelRatio: pixelRatio }); + putSprite( + spriteID: string, + image: ImageData, + options: StyleImageMetadata, + update: boolean + ): void { + if (update) { + this.map.removeImage(spriteID); + this.map.addImage(spriteID, image); + } else { + this.map.addImage(spriteID, image, options); + } } } @@ -69,6 +84,12 @@ export class AbstractShieldRenderer { private _shieldPredicate: StringPredicate = () => true; private _networkPredicate: StringPredicate = () => true; private _routeParser: RouteParser; + private _fontSpec: string; + private _map: MapLibre; + private _fontsLoaded: boolean = false; + /** Cache images that are loaded before fonts so they can be re-rendered later */ + private _preFontImageCache: Map = new Map(); + /** @hidden */ private _renderContext: ShieldRenderingContext; private _shieldDefCallbacks = []; @@ -84,11 +105,31 @@ export class AbstractShieldRenderer { protected setShields(shieldSpec: ShieldSpecification) { this._renderContext.options = shieldSpec.options; this._renderContext.shieldDef = shieldSpec.networks; + this._fontSpec = "1em " + shieldSpec.options.shieldFont; + if (this._map) { + this.reloadShieldsOnFontLoad(); + } this._shieldDefCallbacks.forEach((callback) => callback(shieldSpec.networks) ); } + private onFontsLoaded() { + this._fontsLoaded = true; + if (this._preFontImageCache.size == 0) { + return; + } + console.log("Re-processing shields with loaded fonts"); + + // Loop through each previously-loaded shield and re-render it + for (let [id, routeDef] of this._preFontImageCache.entries()) { + missingIconLoader(this._renderContext, routeDef, id, true); + } + + this._preFontImageCache.clear(); + this._map.redraw(); + } + /** Get the shield definitions */ public getShieldDefinitions(): ShieldDefinitions { return this._renderContext.shieldDef; @@ -123,12 +164,24 @@ export class AbstractShieldRenderer { } /** Set which MaplibreGL map to handle shields for */ - public renderOnMaplibreGL(map: Map): AbstractShieldRenderer { + public renderOnMaplibreGL(map: MapLibre): AbstractShieldRenderer { + this._map = map; + if (this._fontSpec) { + this.reloadShieldsOnFontLoad(); + } this.renderOnRepository(new MaplibreGLSpriteRepository(map)); map.on("styleimagemissing", this.getStyleImageMissingHandler()); return this; } + private reloadShieldsOnFontLoad(): void { + if (!this._fontsLoaded && !document.fonts.check(this._fontSpec)) { + document.fonts.load(this._fontSpec).then(() => this.onFontsLoaded()); + } else { + this._fontsLoaded = true; + } + } + /** Set a callback that fires when shield definitions are loaded */ public onShieldDefLoad( callback: (shields: ShieldDefinitions) => void @@ -166,7 +219,10 @@ export class AbstractShieldRenderer { return; } if (routeDef) { - missingIconLoader(this._renderContext, routeDef, e.id); + if (!this._fontsLoaded && routeDef.ref) { + this._preFontImageCache.set(e.id, routeDef); + } + missingIconLoader(this._renderContext, routeDef, e.id, false); } } catch (err) { console.error(`Exception while loading image ‘${e?.id}’:\n`, err); diff --git a/shieldlib/src/types.d.ts b/shieldlib/src/types.d.ts index a81c725ad..cb78e4ad2 100644 --- a/shieldlib/src/types.d.ts +++ b/shieldlib/src/types.d.ts @@ -23,7 +23,12 @@ export interface SpriteProducer { getSprite(spriteID: string): StyleImage; } export interface SpriteConsumer { - putSprite(spriteID: string, image: ImageData, pixelRatio: number): void; + putSprite( + spriteID: string, + image: ImageData, + pixelRatio: number, + update: boolean + ): void; } export type SpriteRepository = SpriteProducer & SpriteConsumer; export interface ShieldDefinitions { diff --git a/shieldlib/src/types.ts b/shieldlib/src/types.ts index 63ae4ff1d..5ba35c4c9 100644 --- a/shieldlib/src/types.ts +++ b/shieldlib/src/types.ts @@ -1,4 +1,4 @@ -import { StyleImage } from "maplibre-gl"; +import { StyleImage, StyleImageMetadata } from "maplibre-gl"; /** Defines the set of routes that a shield applies to */ export interface RouteDefinition { @@ -135,7 +135,12 @@ export interface SpriteProducer { /** Store a sprite graphic based on an ID */ export interface SpriteConsumer { - putSprite(spriteID: string, image: ImageData, pixelRatio: number): void; + putSprite( + spriteID: string, + image: ImageData, + options: StyleImageMetadata, + update: boolean + ): void; } /** Respository that can store and retrieve sprite graphics */ diff --git a/shieldlib/tsconfig.json b/shieldlib/tsconfig.json index 1204f7fe6..3446656ce 100644 --- a/shieldlib/tsconfig.json +++ b/shieldlib/tsconfig.json @@ -6,10 +6,6 @@ "esModuleInterop": true, "allowSyntheticDefaultImports": true }, - "ts-node": { - "esm": true, - "experimentalSpecifierResolution": "node" - }, "exclude": ["node_modules", "**/*.json"], "include": ["src/**/*.ts", "scripts/**.ts", "src/shield.js", "src/shield.js"] } diff --git a/src/bare_map.html b/src/bare_map.html index 0aa072f6b..4be225275 100644 --- a/src/bare_map.html +++ b/src/bare_map.html @@ -27,13 +27,6 @@ -

- Invisible text so the font will load early -

diff --git a/src/fonts.css b/src/fonts.css index 166b520f5..89471403c 100644 --- a/src/fonts.css +++ b/src/fonts.css @@ -6,6 +6,7 @@ format("woff"); font-weight: 500; font-style: normal; + font-display: swap; } @font-face { font-family: "Noto Sans Armenian Condensed"; @@ -15,4 +16,5 @@ format("woff"); font-weight: 500; font-style: normal; + font-display: swap; } diff --git a/src/index.html b/src/index.html index 89a840fd2..fff7f541d 100644 --- a/src/index.html +++ b/src/index.html @@ -98,15 +98,6 @@ -

- Invisible text so the font will load early -

(shields[`NL:S:${city}`] = nlCityRoute)); - shields["NL:binnenstedelijke_ring"] = nlCityRoute; // for both Netherlands and Curacao + shields["NL:binnenstedelijke_ring"] = nlCityRoute; // for both European Netherlands and Curacao [ "Ommen", "Schouwen", diff --git a/src/layer/park.js b/src/layer/park.js index 3cb7f1b4c..bcf2cebd3 100644 --- a/src/layer/park.js +++ b/src/layer/park.js @@ -3,8 +3,11 @@ import * as Label from "../constants/label.js"; import * as Color from "../constants/color.js"; +const parkLayerFilter = ["!=", ["get", "class"], "aboriginal_lands"]; + export const fill = { id: "protected-area_fill", + filter: parkLayerFilter, type: "fill", paint: { "fill-color": Color.parkFill, @@ -15,6 +18,7 @@ export const fill = { export const outline = { id: "protected-area_outline", + filter: parkLayerFilter, type: "line", paint: { "line-color": Color.parkOutline, @@ -27,7 +31,7 @@ export const outline = { export const label = { id: "protected-area_label", type: "symbol", - filter: ["has", "rank"], + filter: ["all", ["has", "rank"], parkLayerFilter], paint: { "text-color": Color.parkLabel, "text-halo-blur": 1, diff --git a/src/layer/poi.js b/src/layer/poi.js index 9e1ae3866..c2447533d 100644 --- a/src/layer/poi.js +++ b/src/layer/poi.js @@ -43,6 +43,14 @@ var iconDefs = { color: Color.poi.consumer, description: "Coffee shop", }, + fuel: { + classes: { + fuel: ["fuel"], + }, + sprite: "poi_fuel", + color: Color.poi.consumer, + description: "Gas station", + }, hospital: { classes: { hospital: ["hospital"], @@ -172,6 +180,14 @@ var iconDefs = { color: Color.poi.infrastructure, description: "School", }, + supermarket: { + classes: { + grocery: ["supermarket"], + }, + sprite: "poi_supermarket", + color: Color.poi.consumer, + description: "Supermarket", + }, college: { classes: { college: ["college", "university"], @@ -238,7 +254,12 @@ export const poi = { "text-color": [ "match", ["get", "subclass"], - [...getSubclasses(iconDefs.bar), ...getSubclasses(iconDefs.coffee)], + [ + ...getSubclasses(iconDefs.fuel), + ...getSubclasses(iconDefs.bar), + ...getSubclasses(iconDefs.coffee), + ...getSubclasses(iconDefs.supermarket), + ], Color.poi.consumer, [ "bus_station", @@ -284,6 +305,7 @@ export const poi = { "hospital", "museum", "police", + ...getSubclasses(iconDefs.fuel), ...getSubclasses(iconDefs.pow_buddhist), ...getSubclasses(iconDefs.pow_christian), ...getSubclasses(iconDefs.pow_hindu), @@ -293,6 +315,7 @@ export const poi = { ...getSubclasses(iconDefs.pow_shinto), ...getSubclasses(iconDefs.pow_taoist), ...getSubclasses(iconDefs.school), + ...getSubclasses(iconDefs.supermarket), "townhall", "tram_stop", ], @@ -322,7 +345,7 @@ export const poi = { [ "match", ["get", "subclass"], - ["bus_stop", "tram_stop"], + ["bus_stop", "tram_stop", "fuel", "supermarket"], "", label.localizedName, ], diff --git a/src/layer/road_label.js b/src/layer/road_label.js index 332d88ebe..c820b8631 100644 --- a/src/layer/road_label.js +++ b/src/layer/road_label.js @@ -157,7 +157,7 @@ export const bridgeSpacer = { layout: { "symbol-placement": "line", "symbol-spacing": 2, - "icon-image": "dot_city", + "icon-image": "place_dot", "icon-allow-overlap": true, "icon-size": 0.1, }, diff --git a/src/layer/transportation_label.js b/src/layer/transportation_label.js index 1da367753..45b3f30f3 100644 --- a/src/layer/transportation_label.js +++ b/src/layer/transportation_label.js @@ -184,7 +184,7 @@ export const bridgeSpacer = { layout: { "symbol-placement": "line", "symbol-spacing": 2, - "icon-image": "dot_city", + "icon-image": "place_dot", "icon-allow-overlap": true, "icon-size": 0.1, }, diff --git a/src/shieldtest.html b/src/shieldtest.html index 2c612cad3..164891c8e 100644 --- a/src/shieldtest.html +++ b/src/shieldtest.html @@ -33,15 +33,6 @@ -

- Invisible text so the font will load early -

diff --git a/tsconfig.json b/tsconfig.json index cff1f31d9..c4d433a91 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,10 +5,5 @@ "moduleResolution": "node", "allowSyntheticDefaultImports": true }, - "ts-node": { - "esm": true, - "experimentalSpecifierResolution": "node", - "transpileOnly": true - }, "include": ["src/**/*.ts", "shieldlib/src/headless_graphics.ts"] }