├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .prettierrc.json ├── .yarnrc.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── rollup.config.js ├── src ├── algorithm │ ├── area.ts │ ├── coords.ts │ ├── earcut.ts │ ├── exterior.ts │ ├── index.ts │ ├── proj.ts │ ├── total-bounds.ts │ ├── utils │ │ ├── assert.ts │ │ └── polygon.ts │ └── winding.ts ├── child.ts ├── constants.ts ├── data.ts ├── index.ts ├── type.ts ├── vector.ts ├── worker-bundle │ └── earcut.ts └── worker │ ├── hard-clone.ts │ ├── index.ts │ ├── rehydrate.ts │ └── transferable.ts ├── tests ├── algorithm │ ├── owned-clone.test.ts │ └── proj.test.ts ├── index.test.ts ├── util │ └── point.ts └── worker │ └── transfer.test.ts ├── tsconfig.docs.json ├── tsconfig.json ├── typedoc.json ├── worker-build.mjs └── yarn.lock /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - 'main' 7 | pull_request: 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.ref }} 11 | cancel-in-progress: true 12 | 13 | 14 | jobs: 15 | lint-and-test: 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v3 21 | 22 | - name: Set up Volta 23 | uses: volta-cli/action@v4 24 | 25 | - uses: actions/cache@v3 26 | id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) 27 | with: 28 | path: ".yarn/cache" 29 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 30 | restore-keys: | 31 | ${{ runner.os }}-yarn- 32 | 33 | - name: Install 34 | run: yarn install 35 | 36 | - name: Prettier check 37 | run: yarn fmt:check 38 | 39 | - name: Type check 40 | run: yarn typecheck 41 | 42 | - name: Test 43 | run: yarn test 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | docs_build/ 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | lerna-debug.log* 10 | .pnpm-debug.log* 11 | 12 | # Diagnostic reports (https://nodejs.org/api/report.html) 13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | *.pid.lock 20 | 21 | # Directory for instrumented libs generated by jscoverage/JSCover 22 | lib-cov 23 | 24 | # Coverage directory used by tools like istanbul 25 | coverage 26 | *.lcov 27 | 28 | # nyc test coverage 29 | .nyc_output 30 | 31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 32 | .grunt 33 | 34 | # Bower dependency directory (https://bower.io/) 35 | bower_components 36 | 37 | # node-waf configuration 38 | .lock-wscript 39 | 40 | # Compiled binary addons (https://nodejs.org/api/addons.html) 41 | build/Release 42 | 43 | # Dependency directories 44 | node_modules/ 45 | jspm_packages/ 46 | 47 | # Snowpack dependency directory (https://snowpack.dev/) 48 | web_modules/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional stylelint cache 60 | .stylelintcache 61 | 62 | # Microbundle cache 63 | .rpt2_cache/ 64 | .rts2_cache_cjs/ 65 | .rts2_cache_es/ 66 | .rts2_cache_umd/ 67 | 68 | # Optional REPL history 69 | .node_repl_history 70 | 71 | # Output of 'npm pack' 72 | *.tgz 73 | 74 | # Yarn Integrity file 75 | .yarn-integrity 76 | 77 | # dotenv environment variable files 78 | .env 79 | .env.development.local 80 | .env.test.local 81 | .env.production.local 82 | .env.local 83 | 84 | # parcel-bundler cache (https://parceljs.org/) 85 | .cache 86 | .parcel-cache 87 | 88 | # Next.js build output 89 | .next 90 | out 91 | 92 | # Nuxt.js build / generate output 93 | .nuxt 94 | dist 95 | 96 | # Gatsby files 97 | .cache/ 98 | # Comment in the public line in if your project uses Gatsby and not Next.js 99 | # https://nextjs.org/blog/next-9-1#public-directory-support 100 | # public 101 | 102 | # vuepress build output 103 | .vuepress/dist 104 | 105 | # vuepress v2.x temp and cache directory 106 | .temp 107 | .cache 108 | 109 | # Docusaurus cache and generated files 110 | .docusaurus 111 | 112 | # Serverless directories 113 | .serverless/ 114 | 115 | # FuseBox cache 116 | .fusebox/ 117 | 118 | # DynamoDB Local files 119 | .dynamodb/ 120 | 121 | # TernJS port file 122 | .tern-port 123 | 124 | # Stores VSCode versions used for testing VSCode extensions 125 | .vscode-test 126 | 127 | # yarn v2 128 | .yarn/cache 129 | .yarn/unplugged 130 | .yarn/build-state.yml 131 | .yarn/install-state.gz 132 | .pnp.* 133 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "semi": true, 4 | "trailingComma": "all" 5 | } 6 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | compressionLevel: mixed 2 | 3 | enableGlobalCache: false 4 | 5 | nodeLinker: node-modules 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [0.3.1] - 2024-06-25 4 | 5 | - Fix bundling by @kylebarron in https://github.com/geoarrow/geoarrow-js/pull/26 6 | 7 | **Full Changelog**: https://github.com/geoarrow/geoarrow-js/compare/v0.3.0...v0.3.1 8 | 9 | ## [0.3.0] - 2024-01-22 10 | 11 | - earcut worker by @kylebarron in https://github.com/geoarrow/geoarrow-js/pull/20 12 | - Bump to apache-arrow 15 and simplify worker utils by @kylebarron in https://github.com/geoarrow/geoarrow-js/pull/22 13 | 14 | **Full Changelog**: https://github.com/geoarrow/geoarrow-js/compare/v0.2.0...v0.3.0 15 | 16 | ## [0.2.0] - 2023-11-30 17 | 18 | - Get the exterior of a Polygon or MultiPolygon https://github.com/geoarrow/geoarrow-js/pull/14 19 | - Utility functions to support transferring arrow `Data` and `Vector` objects to a Web Worker. https://github.com/geoarrow/geoarrow-js/pull/17 20 | - Minimal docs website. https://github.com/geoarrow/geoarrow-js/pull/18 21 | 22 | **Full Changelog**: https://github.com/geoarrow/geoarrow-js/compare/v0.1.0...v0.2.0 23 | 24 | ## [0.1.0] - 2023-11-22 25 | 26 | - Initial release. 27 | - Support for: 28 | - Polygon area and signed area 29 | - Polygon winding order 30 | - Polygon triangulation 31 | - Coordinate reprojection 32 | - Total bounds 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 geoarrow 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # `geoarrow-js` 2 | 3 | A minimal TypeScript implementation of [GeoArrow](https://geoarrow.org/) building on top of [Arrow JS](https://arrow.apache.org/docs/js/index.html). 4 | 5 | It complements the work-in-progress [`geoarrow-wasm`](https://github.com/geoarrow/geoarrow-rs/tree/main/js), which will provide Rust-based operations on GeoArrow memory. 6 | 7 | ## Features 8 | 9 | - Performant spatial operations. 10 | - Rich static typing of geometry arrays. 11 | - Tree shakeable. 12 | - Utilities for sharing Arrow data across Web Workers (not specific to GeoArrow) 13 | 14 | ## Spatial operations 15 | 16 | Only spatial operations that are implemented on binary representations of geometry will be added to this repo. 17 | 18 | This means that `geoarrow-js` will not, say, use algorithms from [Turf](https://turfjs.org/), because that would require conversions to and from GeoJSON for the operation. 19 | 20 | ### Implemented algorithms: 21 | 22 | Refer to the [`algorithm` namespace](https://geoarrow.github.io/geoarrow-js/modules/algorithm.html) in the docs. 23 | 24 | - Polygon area and signed area (via [`@math.gl/polygon`](https://github.com/visgl/math.gl)) 25 | - Polygon winding order (via [`@math.gl/polygon`](https://github.com/visgl/math.gl)) 26 | - Polygon triangulation (via [`@math.gl/polygon`](https://github.com/visgl/math.gl), a fork of [`earcut`](https://github.com/mapbox/earcut).) 27 | - Coordinate reprojection (via [`proj4`](https://github.com/proj4js/proj4js)) 28 | - Total bounds (the bounding box of an array of geometries). 29 | 30 | ## Web Worker utilities 31 | 32 | Refer to the [`worker` namespace](https://geoarrow.github.io/geoarrow-js/modules/worker.html). Use `preparePostMessage` to obtain references to all underlying `ArrayBuffer` objects, so they can be transfered instead of copied. 33 | 34 | ```ts 35 | import * as arrow from "apache-arrow"; 36 | import { 37 | preparePostMessage, 38 | rehydrateVector, 39 | } from "@geoarrow/geoarrow-js/worker"; 40 | 41 | const originalVector = arrow.makeVector(new Int32Array([1, 2, 3])); 42 | const [preparedVector, arrayBuffers] = preparePostMessage(originalVector); 43 | 44 | // Here we use structuredClone to simulate a postMessage but on the main thread 45 | const receivedVector = structuredClone(preparedVector, { 46 | transfer: arrayBuffers, 47 | }); 48 | const rehydratedVector = rehydrateVector(receivedVector); 49 | ``` 50 | 51 | ## Ecosystem 52 | 53 | `geoarrow-js` is designed to be used seamlessly with WebAssembly-based GeoArrow operations, such as those in the JavaScript bindings of the Rust GeoArrow implementation, and with rendering libraries, such as [deck.gl](https://deck.gl/), with the help of [`@geoarrow/deck.gl-layers`](https://github.com/geoarrow/deck.gl-layers). 54 | 55 | For more background on my plans for GeoArrow ecosystem in JS and WebAssembly, refer to [this thread](https://github.com/geoarrow/geoarrow-rs/issues/283). 56 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@geoarrow/geoarrow-js", 3 | "version": "0.3.2", 4 | "description": "TypeScript implementation of GeoArrow", 5 | "source": "src/index.ts", 6 | "umd:main": "dist/geoarrow.umd.js", 7 | "unpkg": "dist/geoarrow.umd.js", 8 | "types": "dist/index.d.ts", 9 | "browser": "dist/geoarrow.umd.js", 10 | "jsdelivr": "dist/geoarrow.umd.js", 11 | "module": "dist/geoarrow.es.mjs", 12 | "main": "dist/geoarrow.cjs", 13 | "exports": { 14 | "types": "./dist/index.d.ts", 15 | "require": "./dist/geoarrow.cjs", 16 | "default": "./dist/geoarrow.es.mjs" 17 | }, 18 | "publishConfig": { 19 | "access": "public" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/geoarrow/geoarrow-js.git" 24 | }, 25 | "author": "Kyle Barron ", 26 | "license": "MIT", 27 | "type": "module", 28 | "scripts": { 29 | "build:rollup": "rollup -c rollup.config.js", 30 | "build:workers": "node ./worker-build.mjs", 31 | "build": "yarn build:rollup && yarn build:workers", 32 | "clean": "rimraf dist", 33 | "docs:build": "typedoc", 34 | "docs:publish": "gh-pages -d docs_build", 35 | "fmt:check": "prettier './src/**/*.ts' --check", 36 | "fmt": "prettier './src/**/*.ts' --write", 37 | "prepublishOnly": "yarn clean && yarn build", 38 | "test": "vitest run", 39 | "typecheck": "tsc --build", 40 | "watch": "tsc --watch --declaration" 41 | }, 42 | "files": [ 43 | "dist/", 44 | "src/" 45 | ], 46 | "peerDependencies": { 47 | "apache-arrow": ">=15" 48 | }, 49 | "devDependencies": { 50 | "@rollup/plugin-node-resolve": "^15.2.3", 51 | "@rollup/plugin-terser": "^0.4.3", 52 | "@rollup/plugin-typescript": "^11.1.2", 53 | "@types/node": "^20.9.3", 54 | "@types/proj4": "^2", 55 | "apache-arrow": "^15", 56 | "esbuild": "^0.19.8", 57 | "gh-pages": "^6.1.0", 58 | "prettier": "^3.1.0", 59 | "rimraf": "^5.0.5", 60 | "rollup": "^4.1.5", 61 | "rollup-plugin-dts": "^6.1.0", 62 | "ts-node": "^10.9.1", 63 | "typedoc": "^0.25.4", 64 | "typescript": "^5.2.2", 65 | "vitest": "^0.34.6" 66 | }, 67 | "volta": { 68 | "node": "20.9.0", 69 | "yarn": "4.0.2" 70 | }, 71 | "dependencies": { 72 | "@math.gl/polygon": "^4.0.0", 73 | "proj4": "^2.9.2", 74 | "threads": "^1.7.0" 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import terser from "@rollup/plugin-terser"; 2 | import typescript from "@rollup/plugin-typescript"; 3 | import dts from "rollup-plugin-dts"; 4 | import { nodeResolve } from "@rollup/plugin-node-resolve"; 5 | 6 | const input = "./src/index.ts"; 7 | const sourcemap = true; 8 | const external = ["apache-arrow"]; 9 | 10 | export default [ 11 | { 12 | input, 13 | output: { 14 | file: "dist/geoarrow.es.mjs", 15 | format: "es", 16 | sourcemap, 17 | }, 18 | plugins: [nodeResolve(), typescript()], 19 | external, 20 | }, 21 | { 22 | input, 23 | output: { 24 | file: "dist/index.d.ts", 25 | format: "es", 26 | }, 27 | plugins: [dts()], 28 | external, 29 | }, 30 | { 31 | input, 32 | output: { 33 | file: "dist/geoarrow.cjs", 34 | format: "cjs", 35 | sourcemap, 36 | }, 37 | plugins: [nodeResolve(), typescript()], 38 | external, 39 | }, 40 | { 41 | input, 42 | output: { 43 | file: "dist/geoarrow.umd.js", 44 | format: "umd", 45 | name: "geoarrow", 46 | sourcemap, 47 | globals: { 48 | "apache-arrow": "Arrow", 49 | }, 50 | }, 51 | plugins: [nodeResolve(), typescript(), terser()], 52 | external, 53 | }, 54 | ]; 55 | -------------------------------------------------------------------------------- /src/algorithm/area.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { PolygonData } from "../data"; 3 | import { PolygonVector } from "../vector"; 4 | import { makeMathGlPolygon } from "./utils/polygon"; 5 | 6 | /** 7 | * Compute the unsigned area of the polygon input. 8 | */ 9 | export function area(input: PolygonData): arrow.Data; 10 | export function area(input: PolygonVector): arrow.Vector; 11 | 12 | export function area( 13 | input: PolygonData | PolygonVector, 14 | ): arrow.Data | arrow.Vector { 15 | if ("data" in input) { 16 | return new arrow.Vector(input.data.map((polygonData) => area(polygonData))); 17 | } 18 | 19 | const result = new Float64Array(input.length); 20 | for (let geomIndex = 0; geomIndex < input.length; geomIndex++) { 21 | let polygon = makeMathGlPolygon(input, geomIndex); 22 | result[geomIndex] = polygon.getArea(); 23 | } 24 | 25 | return arrow.makeData({ 26 | type: new arrow.Float(arrow.Precision.DOUBLE), 27 | length: input.length, 28 | nullCount: input.nullCount, 29 | nullBitmap: input.nullBitmap, 30 | data: result, 31 | }); 32 | } 33 | 34 | /** 35 | * Compute the signed area of the polygon input. 36 | */ 37 | export function signedArea(input: PolygonData): arrow.Data; 38 | export function signedArea(input: PolygonVector): arrow.Vector; 39 | 40 | export function signedArea( 41 | input: PolygonData | PolygonVector, 42 | ): arrow.Data | arrow.Vector { 43 | if ("data" in input) { 44 | return new arrow.Vector( 45 | input.data.map((polygonData) => signedArea(polygonData)), 46 | ); 47 | } 48 | 49 | const result = new Float64Array(input.length); 50 | for (let geomIndex = 0; geomIndex < input.length; geomIndex++) { 51 | let polygon = makeMathGlPolygon(input, geomIndex); 52 | result[geomIndex] = polygon.getSignedArea(); 53 | } 54 | 55 | return arrow.makeData({ 56 | type: new arrow.Float(arrow.Precision.DOUBLE), 57 | length: input.length, 58 | nullCount: input.nullCount, 59 | nullBitmap: input.nullBitmap, 60 | data: result, 61 | }); 62 | } 63 | -------------------------------------------------------------------------------- /src/algorithm/coords.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { 3 | LineString, 4 | MultiLineString, 5 | MultiPoint, 6 | MultiPolygon, 7 | Point, 8 | Polygon, 9 | } from "../type"; 10 | import { 11 | GeoArrowData, 12 | LineStringData, 13 | MultiLineStringData, 14 | MultiPointData, 15 | MultiPolygonData, 16 | PointData, 17 | PolygonData, 18 | isLineStringData, 19 | isMultiLineStringData, 20 | isMultiPointData, 21 | isMultiPolygonData, 22 | isPointData, 23 | isPolygonData, 24 | } from "../data"; 25 | import { 26 | getLineStringChild, 27 | getMultiPolygonChild, 28 | getPointChild, 29 | getPolygonChild, 30 | } from "../child"; 31 | import { assert, assertFalse } from "./utils/assert"; 32 | 33 | // For now, simplify our lives by focusing on 2D 34 | type MapCoordsCallback = (x: number, y: number) => [number, number]; 35 | 36 | export function mapCoords( 37 | input: PointData, 38 | callback: MapCoordsCallback, 39 | ): PointData; 40 | export function mapCoords( 41 | input: LineStringData, 42 | callback: MapCoordsCallback, 43 | ): LineStringData; 44 | export function mapCoords( 45 | input: PolygonData, 46 | callback: MapCoordsCallback, 47 | ): PolygonData; 48 | export function mapCoords( 49 | input: MultiPointData, 50 | callback: MapCoordsCallback, 51 | ): MultiPointData; 52 | export function mapCoords( 53 | input: MultiLineStringData, 54 | callback: MapCoordsCallback, 55 | ): MultiLineStringData; 56 | export function mapCoords( 57 | input: MultiPolygonData, 58 | callback: MapCoordsCallback, 59 | ): MultiPolygonData; 60 | 61 | // TODO: ideally I could use here... 62 | export function mapCoords( 63 | input: GeoArrowData, 64 | callback: MapCoordsCallback, 65 | ): GeoArrowData { 66 | if (isPointData(input)) { 67 | return mapCoords0(input, callback); 68 | } 69 | if (isLineStringData(input)) { 70 | return mapCoords1(input, callback); 71 | } 72 | if (isPolygonData(input)) { 73 | return mapCoords2(input, callback); 74 | } 75 | if (isMultiPointData(input)) { 76 | return mapCoords1(input, callback); 77 | } 78 | if (isMultiLineStringData(input)) { 79 | return mapCoords2(input, callback); 80 | } 81 | if (isMultiPolygonData(input)) { 82 | return mapCoords3(input, callback); 83 | } 84 | 85 | assertFalse(); 86 | } 87 | 88 | export function mapCoords0( 89 | input: arrow.Data, 90 | callback: MapCoordsCallback, 91 | ): arrow.Data { 92 | assert(input.type.listSize === 2, "expected 2D"); 93 | const coordsData = getPointChild(input); 94 | const flatCoords = coordsData.values; 95 | 96 | const outputCoords = new Float64Array(flatCoords.length); 97 | for (let coordIdx = 0; coordIdx < input.length; coordIdx++) { 98 | const x = flatCoords[coordIdx * 2]; 99 | const y = flatCoords[coordIdx * 2 + 1]; 100 | const [newX, newY] = callback(x, y); 101 | outputCoords[coordIdx * 2] = newX; 102 | outputCoords[coordIdx * 2 + 1] = newY; 103 | } 104 | 105 | const newCoordsData = arrow.makeData({ 106 | type: coordsData.type, 107 | length: coordsData.length, 108 | nullCount: coordsData.nullCount, 109 | nullBitmap: coordsData.nullBitmap, 110 | data: outputCoords, 111 | }); 112 | 113 | return arrow.makeData({ 114 | type: input.type, 115 | length: input.length, 116 | nullCount: input.nullCount, 117 | nullBitmap: input.nullBitmap, 118 | child: newCoordsData, 119 | }); 120 | } 121 | 122 | /** 123 | * NOTE: the callback must be infallible as this does not take geometry validity 124 | * into effect for operating on coords 125 | */ 126 | export function mapCoords1( 127 | input: arrow.Data, 128 | callback: MapCoordsCallback, 129 | ): arrow.Data { 130 | const pointData = getLineStringChild(input); 131 | const newPointData = mapCoords0(pointData, callback); 132 | 133 | return arrow.makeData({ 134 | type: input.type, 135 | length: input.length, 136 | nullCount: input.nullCount, 137 | nullBitmap: input.nullBitmap, 138 | child: newPointData, 139 | valueOffsets: input.valueOffsets, 140 | }); 141 | } 142 | 143 | /** 144 | * NOTE: the callback must be infallible as this does not take geometry validity 145 | * into effect for operating on coords 146 | */ 147 | export function mapCoords2( 148 | input: arrow.Data, 149 | callback: MapCoordsCallback, 150 | ): arrow.Data { 151 | const linestringData = getPolygonChild(input); 152 | const newLinestringData = mapCoords1(linestringData, callback); 153 | 154 | return arrow.makeData({ 155 | type: input.type, 156 | length: input.length, 157 | nullCount: input.nullCount, 158 | nullBitmap: input.nullBitmap, 159 | child: newLinestringData, 160 | valueOffsets: input.valueOffsets, 161 | }); 162 | } 163 | 164 | /** 165 | * NOTE: the callback must be infallible as this does not take geometry validity 166 | * into effect for operating on coords 167 | */ 168 | export function mapCoords3( 169 | input: arrow.Data, 170 | callback: MapCoordsCallback, 171 | ): arrow.Data { 172 | const polygonData = getMultiPolygonChild(input); 173 | const newPolygonData = mapCoords2(polygonData, callback); 174 | 175 | return arrow.makeData({ 176 | type: input.type, 177 | length: input.length, 178 | nullCount: input.nullCount, 179 | nullBitmap: input.nullBitmap, 180 | child: newPolygonData, 181 | valueOffsets: input.valueOffsets, 182 | }); 183 | } 184 | -------------------------------------------------------------------------------- /src/algorithm/earcut.ts: -------------------------------------------------------------------------------- 1 | import { earcut as _earcut } from "@math.gl/polygon"; 2 | import { PolygonData } from "../data"; 3 | import { PolygonVector } from "../vector"; 4 | import { getLineStringChild, getPointChild, getPolygonChild } from "../child"; 5 | 6 | /** 7 | * Run earcut on polygon input 8 | */ 9 | export function earcut(input: PolygonData): Uint32Array; 10 | export function earcut(input: PolygonVector): Uint32Array[]; 11 | 12 | export function earcut( 13 | input: PolygonData | PolygonVector, 14 | ): Uint32Array | Uint32Array[] { 15 | if ("data" in input) { 16 | return input.data.map((data) => earcut(data)); 17 | } 18 | 19 | const trianglesResults: number[][] = []; 20 | let outputSize = 0; 21 | for (let geomIndex = 0; geomIndex < input.length; geomIndex++) { 22 | const triangles = earcutSinglePolygon(input, geomIndex); 23 | trianglesResults.push(triangles); 24 | outputSize += triangles.length; 25 | } 26 | 27 | const outputArray = new Uint32Array(outputSize); 28 | let idx = 0; 29 | for (const triangles of trianglesResults) { 30 | for (const value of triangles) { 31 | outputArray[idx] = value; 32 | idx += 1; 33 | } 34 | } 35 | 36 | return outputArray; 37 | } 38 | 39 | function earcutSinglePolygon(data: PolygonData, geomIndex: number): number[] { 40 | const geomOffsets = data.valueOffsets; 41 | const rings = getPolygonChild(data); 42 | const ringOffsets = rings.valueOffsets; 43 | 44 | const coords = getLineStringChild(rings); 45 | const dim = coords.type.listSize; 46 | const flatCoords = getPointChild(coords); 47 | 48 | const ringBegin = geomOffsets[geomIndex]; 49 | const ringEnd = geomOffsets[geomIndex + 1]; 50 | 51 | const coordsBegin = ringOffsets[ringBegin]; 52 | const coordsEnd = ringOffsets[ringEnd]; 53 | 54 | const slicedFlatCoords = flatCoords.values.subarray( 55 | coordsBegin * dim, 56 | coordsEnd * dim, 57 | ); 58 | 59 | const initialCoordIndex = ringOffsets[ringBegin]; 60 | const holeIndices = []; 61 | for (let holeRingIdx = ringBegin + 1; holeRingIdx < ringEnd; holeRingIdx++) { 62 | holeIndices.push(ringOffsets[holeRingIdx] - initialCoordIndex); 63 | } 64 | const triangles = _earcut(slicedFlatCoords, holeIndices, dim); 65 | 66 | for (let i = 0; i < triangles.length; i++) { 67 | triangles[i] += initialCoordIndex; 68 | } 69 | 70 | return triangles; 71 | } 72 | -------------------------------------------------------------------------------- /src/algorithm/exterior.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { 3 | LineStringVector, 4 | MultiLineStringVector, 5 | MultiPolygonVector, 6 | PolygonVector, 7 | } from "../vector"; 8 | import { 9 | LineStringData, 10 | MultiLineStringData, 11 | MultiPolygonData, 12 | PolygonData, 13 | } from "../data"; 14 | import { getMultiPolygonChild, getPolygonChild } from "../child"; 15 | 16 | /** 17 | * Get the exterior of a PolygonVector or PolygonData 18 | */ 19 | export function getPolygonExterior(input: PolygonVector): LineStringVector; 20 | export function getPolygonExterior(input: PolygonData): LineStringData; 21 | 22 | export function getPolygonExterior( 23 | input: PolygonVector | PolygonData, 24 | ): LineStringVector | LineStringData { 25 | if ("data" in input) { 26 | return new arrow.Vector(input.data.map((data) => getPolygonExterior(data))); 27 | } 28 | 29 | return getPolygonChild(input); 30 | } 31 | 32 | /** 33 | * Get the exterior of a MultiPolygonVector or MultiPolygonData 34 | */ 35 | export function getMultiPolygonExterior( 36 | input: MultiPolygonVector, 37 | ): MultiLineStringVector; 38 | export function getMultiPolygonExterior( 39 | input: MultiPolygonData, 40 | ): MultiLineStringData; 41 | 42 | export function getMultiPolygonExterior( 43 | input: MultiPolygonVector | MultiPolygonData, 44 | ): MultiLineStringVector | MultiLineStringData { 45 | if ("data" in input) { 46 | return new arrow.Vector( 47 | input.data.map((data) => getMultiPolygonExterior(data)), 48 | ); 49 | } 50 | 51 | return getMultiPolygonChild(input); 52 | } 53 | -------------------------------------------------------------------------------- /src/algorithm/index.ts: -------------------------------------------------------------------------------- 1 | export { area, signedArea } from "./area.js"; 2 | export { earcut } from "./earcut.js"; 3 | export { getPolygonExterior, getMultiPolygonExterior } from "./exterior.js"; 4 | export { mapCoords } from "./coords.js"; 5 | export { reproject } from "./proj.js"; 6 | export { totalBounds } from "./total-bounds.js"; 7 | export { windingDirection, modifyWindingDirection } from "./winding.js"; 8 | -------------------------------------------------------------------------------- /src/algorithm/proj.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import proj4 from "proj4"; 3 | import { GeoArrowType } from "../type"; 4 | import { mapCoords } from "./coords"; 5 | 6 | /** 7 | * Reproject using proj4 8 | */ 9 | export function reproject( 10 | input: arrow.Data, 11 | fromProjection: string, 12 | toProjection: string, 13 | ): arrow.Data; 14 | export function reproject( 15 | input: arrow.Vector, 16 | fromProjection: string, 17 | toProjection: string, 18 | ): arrow.Vector; 19 | 20 | export function reproject( 21 | input: arrow.Data | arrow.Vector, 22 | fromProjection: string, 23 | toProjection: string, 24 | ): arrow.Data | arrow.Vector { 25 | const projectionFn = proj4(fromProjection, toProjection); 26 | // Check if an arrow.Vector 27 | if ("data" in input) { 28 | return new arrow.Vector( 29 | input.data.map((data) => reprojectData(data, projectionFn)), 30 | ); 31 | } 32 | 33 | return reprojectData(input, projectionFn); 34 | } 35 | 36 | /** 37 | * Reproject a single Data instance 38 | */ 39 | function reprojectData( 40 | input: arrow.Data, 41 | projectionFn: proj4.Converter, 42 | ): arrow.Data { 43 | // Avoid extra object creation 44 | const stack = [0, 0]; 45 | const callback = (x: number, y: number) => { 46 | stack[0] = x; 47 | stack[1] = y; 48 | return projectionFn.forward(stack) as [number, number]; 49 | }; 50 | 51 | // @ts-expect-error I have a mismatch between generic T extends GeoArrowType 52 | // and concrete GeoArrowData typing 53 | return mapCoords(input, callback); 54 | } 55 | -------------------------------------------------------------------------------- /src/algorithm/total-bounds.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { 3 | LineStringVector, 4 | MultiPolygonVector, 5 | PointVector, 6 | PolygonVector, 7 | } from "../vector.js"; 8 | import { PointData } from "../data.js"; 9 | import { 10 | getLineStringChild, 11 | getMultiPolygonChild, 12 | getPointChild, 13 | getPolygonChild, 14 | } from "../child.js"; 15 | import { EXTENSION_NAME } from "../constants.js"; 16 | 17 | class Bbox { 18 | minX: number; 19 | minY: number; 20 | maxX: number; 21 | maxY: number; 22 | 23 | constructor() { 24 | this.minX = Infinity; 25 | this.minY = Infinity; 26 | this.maxX = -Infinity; 27 | this.maxY = -Infinity; 28 | } 29 | 30 | updateBbox(other: Bbox) { 31 | if (other.minX < this.minX) { 32 | this.minX = other.minX; 33 | } 34 | if (other.minY < this.minY) { 35 | this.minY = other.minY; 36 | } 37 | if (other.maxX > this.maxX) { 38 | this.maxX = other.maxX; 39 | } 40 | if (other.maxY > this.maxY) { 41 | this.maxY = other.maxY; 42 | } 43 | } 44 | 45 | updateCoord(x: number, y: number) { 46 | if (x < this.minX) { 47 | this.minX = x; 48 | } 49 | if (y < this.minY) { 50 | this.minY = y; 51 | } 52 | if (x > this.maxX) { 53 | this.maxX = x; 54 | } 55 | if (y > this.maxY) { 56 | this.maxY = y; 57 | } 58 | } 59 | } 60 | 61 | export function totalBounds(vector: arrow.Vector, field: arrow.Field): Bbox { 62 | switch (field.metadata.get("ARROW:extension:name")) { 63 | case EXTENSION_NAME.POINT: 64 | return totalBoundsNest0(vector); 65 | case EXTENSION_NAME.LINESTRING: 66 | case EXTENSION_NAME.MULTIPOINT: 67 | return totalBoundsNest1(vector); 68 | case EXTENSION_NAME.POLYGON: 69 | case EXTENSION_NAME.MULTILINESTRING: 70 | return totalBoundsNest2(vector); 71 | case EXTENSION_NAME.MULTIPOLYGON: 72 | return totalBoundsNest3(vector); 73 | default: 74 | throw new Error("Unknown ext type name"); 75 | } 76 | } 77 | 78 | function coordsBbox(data: PointData): Bbox { 79 | const coordsData = getPointChild(data); 80 | const flatCoords = coordsData.values; 81 | const bbox = new Bbox(); 82 | 83 | for (let coordIdx = 0; coordIdx < data.length; coordIdx++) { 84 | const x = flatCoords[coordIdx * 2]; 85 | const y = flatCoords[coordIdx * 2 + 1]; 86 | bbox.updateCoord(x, y); 87 | } 88 | 89 | return bbox; 90 | } 91 | 92 | function totalBoundsNest0(vector: PointVector): Bbox { 93 | const bbox = new Bbox(); 94 | for (const data of vector.data) { 95 | bbox.updateBbox(coordsBbox(data)); 96 | } 97 | 98 | return bbox; 99 | } 100 | 101 | function totalBoundsNest1(vector: LineStringVector): Bbox { 102 | const pointVector = getLineStringChild(vector); 103 | return totalBoundsNest0(pointVector); 104 | } 105 | 106 | function totalBoundsNest2(vector: PolygonVector): Bbox { 107 | const lineStringVector = getPolygonChild(vector); 108 | return totalBoundsNest1(lineStringVector); 109 | } 110 | 111 | function totalBoundsNest3(vector: MultiPolygonVector): Bbox { 112 | const polygonVector = getMultiPolygonChild(vector); 113 | return totalBoundsNest2(polygonVector); 114 | } 115 | -------------------------------------------------------------------------------- /src/algorithm/utils/assert.ts: -------------------------------------------------------------------------------- 1 | export function assert(condition: boolean, message?: string) { 2 | if (!condition) { 3 | throw new Error(`assertion failed ${message}`); 4 | } 5 | } 6 | 7 | export function assertFalse(): never { 8 | throw new Error(`assertion failed`); 9 | } 10 | -------------------------------------------------------------------------------- /src/algorithm/utils/polygon.ts: -------------------------------------------------------------------------------- 1 | import { PolygonData } from "../../data"; 2 | import { Polygon } from "@math.gl/polygon"; 3 | import { 4 | getLineStringChild, 5 | getPointChild, 6 | getPolygonChild, 7 | } from "../../child"; 8 | 9 | export function makeMathGlPolygon( 10 | data: PolygonData, 11 | geomIndex: number, 12 | ): Polygon { 13 | const geomOffsets = data.valueOffsets; 14 | const ringsData = getPolygonChild(data); 15 | const ringOffsets = ringsData.valueOffsets; 16 | 17 | const pointData = getLineStringChild(ringsData); 18 | const dim = pointData.type.listSize; 19 | const flatCoordData = getPointChild(pointData); 20 | 21 | const ringBegin = geomOffsets[geomIndex]; 22 | const ringEnd = geomOffsets[geomIndex + 1]; 23 | 24 | const coordsBegin = ringOffsets[ringBegin]; 25 | const coordsEnd = ringOffsets[ringEnd]; 26 | 27 | const slicedFlatCoords = flatCoordData.values.subarray( 28 | coordsBegin * dim, 29 | coordsEnd * dim, 30 | ); 31 | return new Polygon(slicedFlatCoords, { 32 | size: dim, 33 | isClosed: true, 34 | }); 35 | } 36 | -------------------------------------------------------------------------------- /src/algorithm/winding.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { PolygonData } from "../data"; 3 | import { PolygonVector } from "../vector"; 4 | import { makeMathGlPolygon } from "./utils/polygon"; 5 | import { WINDING as _WINDING } from "@math.gl/polygon"; 6 | 7 | export enum Winding { 8 | CLOCKWISE = _WINDING.CLOCKWISE, 9 | COUNTER_CLOCKWISE = _WINDING.COUNTER_CLOCKWISE, 10 | } 11 | 12 | /** 13 | * Compute the winding direction of the polygon input. 14 | * 15 | * The result is a boolean Data or Vector, where `true` means **Clockwise** 16 | * winding order and `false` means **Counter Clockwise** winding order. 17 | */ 18 | export function windingDirection(input: PolygonData): arrow.Data; 19 | export function windingDirection( 20 | input: PolygonVector, 21 | ): arrow.Vector; 22 | 23 | export function windingDirection( 24 | input: PolygonData | PolygonVector, 25 | ): arrow.Data | arrow.Vector { 26 | if ("data" in input) { 27 | return new arrow.Vector( 28 | input.data.map((polygonData) => windingDirection(polygonData)), 29 | ); 30 | } 31 | 32 | let builder = new arrow.BoolBuilder({ 33 | type: new arrow.Bool(), 34 | nullValues: [null], 35 | }); 36 | // Force-allocate once for length of buffer 37 | builder.set(input.length - 1, null); 38 | 39 | for (let geomIndex = 0; geomIndex < input.length; geomIndex++) { 40 | if (!input.getValid(geomIndex)) { 41 | builder.setValid(geomIndex, false); 42 | continue; 43 | } 44 | 45 | let polygon = makeMathGlPolygon(input, geomIndex); 46 | let winding = polygon.getWindingDirection(); 47 | builder.set(geomIndex, winding === Winding.CLOCKWISE); 48 | } 49 | 50 | return builder.finish().flush(); 51 | } 52 | 53 | /** 54 | * **Mutate** the existing Polygon data or vector with the desired winding 55 | */ 56 | export function modifyWindingDirection( 57 | input: PolygonData, 58 | winding: Winding, 59 | ): void; 60 | export function modifyWindingDirection( 61 | input: PolygonVector, 62 | winding: Winding, 63 | ): void; 64 | 65 | export function modifyWindingDirection( 66 | input: PolygonData | PolygonVector, 67 | winding: Winding, 68 | ): void { 69 | if ("data" in input) { 70 | input.data.forEach((polygonData) => 71 | modifyWindingDirection(polygonData, winding), 72 | ); 73 | return; 74 | } 75 | 76 | for (let geomIndex = 0; geomIndex < input.length; geomIndex++) { 77 | // This polygon is a reference onto the PolygonData, so mutating it will 78 | // mutate the PolygonData 79 | let polygon = makeMathGlPolygon(input, geomIndex); 80 | polygon.modifyWindingDirection(winding); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/child.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Strongly typed accessors for children, since arrow.Data.children[] is untyped 3 | */ 4 | 5 | import { Data, Vector, type Float } from "apache-arrow"; 6 | import { 7 | LineStringData, 8 | MultiLineStringData, 9 | MultiPointData, 10 | MultiPolygonData, 11 | PointData, 12 | PolygonData, 13 | } from "./data"; 14 | import { 15 | LineStringVector, 16 | MultiLineStringVector, 17 | MultiPointVector, 18 | MultiPolygonVector, 19 | PointVector, 20 | PolygonVector, 21 | } from "./vector"; 22 | 23 | export function getPointChild(input: PointData): Data; 24 | export function getPointChild(input: PointVector): Vector; 25 | 26 | export function getPointChild( 27 | input: PointData | PointVector, 28 | ): Data | Vector { 29 | if ("data" in input) { 30 | return input.getChildAt(0)!; 31 | } 32 | 33 | return input.children[0] as Data; 34 | } 35 | 36 | export function getLineStringChild(input: LineStringData): PointData; 37 | export function getLineStringChild(input: LineStringVector): PointVector; 38 | 39 | export function getLineStringChild( 40 | input: LineStringData | LineStringVector, 41 | ): PointData | PointVector { 42 | if ("data" in input) { 43 | return input.getChildAt(0)!; 44 | } 45 | 46 | return input.children[0] as PointData; 47 | } 48 | 49 | export function getPolygonChild(input: PolygonData): LineStringData; 50 | export function getPolygonChild(input: PolygonVector): LineStringVector; 51 | 52 | export function getPolygonChild( 53 | input: PolygonData | PolygonVector, 54 | ): LineStringData | LineStringVector { 55 | if ("data" in input) { 56 | return input.getChildAt(0)!; 57 | } 58 | 59 | return input.children[0] as LineStringData; 60 | } 61 | 62 | export function getMultiPointChild(input: MultiPointData): PointData; 63 | export function getMultiPointChild(input: MultiPointVector): PointVector; 64 | 65 | export function getMultiPointChild( 66 | input: MultiPointData | MultiPointVector, 67 | ): PointData | PointVector { 68 | if ("data" in input) { 69 | return input.getChildAt(0)!; 70 | } 71 | 72 | return input.children[0] as PointData; 73 | } 74 | 75 | export function getMultiLineStringChild( 76 | input: MultiLineStringData, 77 | ): LineStringData; 78 | export function getMultiLineStringChild( 79 | input: MultiLineStringVector, 80 | ): LineStringVector; 81 | 82 | export function getMultiLineStringChild( 83 | input: MultiLineStringData | MultiLineStringVector, 84 | ): LineStringData | LineStringVector { 85 | if ("data" in input) { 86 | return input.getChildAt(0)!; 87 | } 88 | 89 | return input.children[0] as LineStringData; 90 | } 91 | 92 | export function getMultiPolygonChild(input: MultiPolygonData): PolygonData; 93 | export function getMultiPolygonChild(input: MultiPolygonVector): PolygonVector; 94 | 95 | export function getMultiPolygonChild( 96 | input: MultiPolygonData | MultiPolygonVector, 97 | ): PolygonData | PolygonVector { 98 | if ("data" in input) { 99 | return input.getChildAt(0)!; 100 | } 101 | 102 | return input.children[0] as PolygonData; 103 | } 104 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Enum holding GeoArrow extension type names 3 | */ 4 | export enum EXTENSION_NAME { 5 | POINT = "geoarrow.point", 6 | LINESTRING = "geoarrow.linestring", 7 | POLYGON = "geoarrow.polygon", 8 | MULTIPOINT = "geoarrow.multipoint", 9 | MULTILINESTRING = "geoarrow.multilinestring", 10 | MULTIPOLYGON = "geoarrow.multipolygon", 11 | } 12 | -------------------------------------------------------------------------------- /src/data.ts: -------------------------------------------------------------------------------- 1 | import { Data } from "apache-arrow"; 2 | import { 3 | Point, 4 | LineString, 5 | Polygon, 6 | MultiPoint, 7 | MultiLineString, 8 | MultiPolygon, 9 | isPoint, 10 | isLineString, 11 | isPolygon, 12 | isMultiPoint, 13 | isMultiLineString, 14 | isMultiPolygon, 15 | } from "./type"; 16 | 17 | export type PointData = Data; 18 | export type LineStringData = Data; 19 | export type PolygonData = Data; 20 | export type MultiPointData = Data; 21 | export type MultiLineStringData = Data; 22 | export type MultiPolygonData = Data; 23 | export type GeoArrowData = 24 | | PointData 25 | | LineStringData 26 | | PolygonData 27 | | MultiPointData 28 | | MultiLineStringData 29 | | MultiPolygonData; 30 | 31 | export function isPointData(data: Data): data is PointData { 32 | return isPoint(data.type); 33 | } 34 | 35 | export function isLineStringData(data: Data): data is LineStringData { 36 | return isLineString(data.type); 37 | } 38 | 39 | export function isPolygonData(data: Data): data is PolygonData { 40 | return isPolygon(data.type); 41 | } 42 | 43 | export function isMultiPointData(data: Data): data is MultiPointData { 44 | return isMultiPoint(data.type); 45 | } 46 | 47 | export function isMultiLineStringData(data: Data): data is MultiLineStringData { 48 | return isMultiLineString(data.type); 49 | } 50 | 51 | export function isMultiPolygonData(data: Data): data is MultiPolygonData { 52 | return isMultiPolygon(data.type); 53 | } 54 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * as algorithm from "./algorithm"; 2 | export * as child from "./child.js"; 3 | export * as data from "./data.js"; 4 | export * as type from "./type.js"; 5 | export * as vector from "./vector.js"; 6 | export * as worker from "./worker"; 7 | -------------------------------------------------------------------------------- /src/type.ts: -------------------------------------------------------------------------------- 1 | import { 2 | type Struct, 3 | type Float, 4 | type List, 5 | type FixedSizeList, 6 | DataType, 7 | } from "apache-arrow"; 8 | 9 | // Note: this apparently has to be arrow.Float and not arrow.Float64 to ensure 10 | // that recreating a data instance with arrow.makeData type checks using the 11 | // input's data type. 12 | export type InterleavedCoord = FixedSizeList; 13 | export type SeparatedCoord = Struct<{ 14 | x: Float; 15 | y: Float; 16 | }>; 17 | // TODO: support separated coords 18 | export type Coord = InterleavedCoord; // | SeparatedCoord; 19 | export type Point = Coord; 20 | export type LineString = List; 21 | export type Polygon = List>; 22 | export type MultiPoint = List; 23 | export type MultiLineString = List>; 24 | export type MultiPolygon = List>>; 25 | export type GeoArrowType = 26 | | Point 27 | | LineString 28 | | Polygon 29 | | MultiPoint 30 | | MultiLineString 31 | | MultiPolygon; 32 | 33 | /** Check that the given type is a Point data type */ 34 | export function isPoint(type: DataType): type is Point { 35 | if (DataType.isFixedSizeList(type)) { 36 | // Check list size 37 | if (![2, 3, 4].includes(type.listSize)) { 38 | return false; 39 | } 40 | 41 | // Check child of FixedSizeList is floating type 42 | if (!DataType.isFloat(type.children[0])) { 43 | return false; 44 | } 45 | 46 | return true; 47 | } 48 | 49 | if (DataType.isStruct(type)) { 50 | // Check number of children 51 | if (![2, 3, 4].includes(type.children.length)) { 52 | return false; 53 | } 54 | 55 | // Check that children have correct field names 56 | if ( 57 | !type.children.every((field) => ["x", "y", "z", "m"].includes(field.name)) 58 | ) { 59 | return false; 60 | } 61 | 62 | if (!type.children.every((field) => DataType.isFloat(field))) { 63 | return false; 64 | } 65 | 66 | return true; 67 | } 68 | 69 | return false; 70 | } 71 | 72 | export function isLineString(type: DataType): type is LineString { 73 | // Check the outer type is a List 74 | if (!DataType.isList(type)) { 75 | return false; 76 | } 77 | 78 | // Check the child is a point type 79 | if (!isPoint(type.children[0].type)) { 80 | return false; 81 | } 82 | 83 | return true; 84 | } 85 | 86 | export function isPolygon(type: DataType): type is Polygon { 87 | // Check the outer vector is a List 88 | if (!DataType.isList(type)) { 89 | return false; 90 | } 91 | 92 | // Check the child is a linestring vector 93 | if (!isLineString(type.children[0].type)) { 94 | return false; 95 | } 96 | 97 | return true; 98 | } 99 | 100 | export function isMultiPoint(type: DataType): type is MultiPoint { 101 | // Check the outer vector is a List 102 | if (!DataType.isList(type)) { 103 | return false; 104 | } 105 | 106 | // Check the child is a point vector 107 | if (!isPoint(type.children[0].type)) { 108 | return false; 109 | } 110 | 111 | return true; 112 | } 113 | 114 | export function isMultiLineString(type: DataType): type is MultiLineString { 115 | // Check the outer vector is a List 116 | if (!DataType.isList(type)) { 117 | return false; 118 | } 119 | 120 | // Check the child is a linestring vector 121 | if (!isLineString(type.children[0].type)) { 122 | return false; 123 | } 124 | 125 | return true; 126 | } 127 | 128 | export function isMultiPolygon(type: DataType): type is MultiPolygon { 129 | // Check the outer vector is a List 130 | if (!DataType.isList(type)) { 131 | return false; 132 | } 133 | 134 | // Check the child is a polygon vector 135 | if (!isPolygon(type.children[0].type)) { 136 | return false; 137 | } 138 | 139 | return true; 140 | } 141 | -------------------------------------------------------------------------------- /src/vector.ts: -------------------------------------------------------------------------------- 1 | import { Vector } from "apache-arrow"; 2 | import { 3 | Point, 4 | LineString, 5 | Polygon, 6 | MultiPoint, 7 | MultiLineString, 8 | MultiPolygon, 9 | isPoint, 10 | isLineString, 11 | isPolygon, 12 | isMultiPoint, 13 | isMultiLineString, 14 | isMultiPolygon, 15 | } from "./type"; 16 | 17 | export type PointVector = Vector; 18 | export type LineStringVector = Vector; 19 | export type PolygonVector = Vector; 20 | export type MultiPointVector = Vector; 21 | export type MultiLineStringVector = Vector; 22 | export type MultiPolygonVector = Vector; 23 | export type GeoArrowVector = 24 | | PointVector 25 | | LineStringVector 26 | | PolygonVector 27 | | MultiPointVector 28 | | MultiLineStringVector 29 | | MultiPolygonVector; 30 | 31 | export function isPointVector(vector: Vector): vector is PointVector { 32 | return isPoint(vector.type); 33 | } 34 | 35 | export function isLineStringVector(vector: Vector): vector is LineStringVector { 36 | return isLineString(vector.type); 37 | } 38 | 39 | export function isPolygonVector(vector: Vector): vector is PolygonVector { 40 | return isPolygon(vector.type); 41 | } 42 | 43 | export function isMultiPointVector(vector: Vector): vector is MultiPointVector { 44 | return isMultiPoint(vector.type); 45 | } 46 | 47 | export function isMultiLineStringVector( 48 | vector: Vector, 49 | ): vector is MultiLineStringVector { 50 | return isMultiLineString(vector.type); 51 | } 52 | 53 | export function isMultiPolygonVector( 54 | vector: Vector, 55 | ): vector is MultiPolygonVector { 56 | return isMultiPolygon(vector.type); 57 | } 58 | -------------------------------------------------------------------------------- /src/worker-bundle/earcut.ts: -------------------------------------------------------------------------------- 1 | import type { TransferDescriptor } from "threads"; 2 | import { expose, Transfer } from "threads/worker"; 3 | import { PolygonData } from "../data"; 4 | import { earcut } from "../algorithm/earcut"; 5 | 6 | function earcutWorker(polygonData: PolygonData): TransferDescriptor { 7 | // NOTE!! Here we don't reconstruct a full arrow.Data instance to save on 8 | // bundle size! We rely on the fact that nothing in the `earcut` function uses 9 | // any class methods, which is not an ideal/easy assumption. Ideally we'll 10 | // have functions in the future to validate geometry `Data` instances and 11 | // construct Data and Vector instances without bringing in all of Arrow JS. 12 | 13 | // const rehydratedData = rehydratePolygonData(polygonData); 14 | const earcutTriangles = earcut(polygonData); 15 | return Transfer(earcutTriangles, [earcutTriangles.buffer]); 16 | } 17 | 18 | export type EarcutOnWorker = typeof earcutWorker; 19 | 20 | expose(earcutWorker); 21 | -------------------------------------------------------------------------------- /src/worker/hard-clone.ts: -------------------------------------------------------------------------------- 1 | import { Data, DataType, Vector, BufferType } from "apache-arrow"; 2 | import type { Buffers } from "apache-arrow/data"; 3 | 4 | type TypedArray = 5 | | Uint8Array 6 | | Uint8ClampedArray 7 | | Uint16Array 8 | | Uint32Array 9 | | Int8Array 10 | | Int16Array 11 | | Int32Array 12 | | Float32Array 13 | | Float64Array; 14 | 15 | /** 16 | * Clone an Arrow JS Data or Vector, detaching from an existing ArrayBuffer if 17 | * it is shared with other. 18 | * 19 | * The purpose of this function is to enable transferring a `Data` instance, 20 | * e.g. to a web worker, without neutering any other data. 21 | * 22 | * Any internal buffers that are a slice of a larger `ArrayBuffer` (i.e. where 23 | * the typed array's `byteOffset` is not `0` and where its `byteLength` does not 24 | * match its `array.buffer.byteLength`) are copied into new `ArrayBuffers`. 25 | * 26 | * If `force` is `true`, always clone internal buffers, even if not shared. If 27 | * the default, `false`, any internal buffers that are **not** a slice of a 28 | * larger `ArrayBuffer` will not be copied. 29 | */ 30 | export function hardClone( 31 | input: Data, 32 | force?: boolean, 33 | ): Data; 34 | export function hardClone( 35 | input: Vector, 36 | force?: boolean, 37 | ): Vector; 38 | 39 | export function hardClone( 40 | data: Data | Vector, 41 | force: boolean = false, 42 | ): Data | Vector { 43 | // Check if `data` is an arrow.Vector 44 | if ("data" in data) { 45 | return new Vector(data.data.map((data) => hardClone(data, force))); 46 | } 47 | 48 | // Clone each of the children, recursively 49 | const clonedChildren: Data[] = []; 50 | for (const childData of data.children) { 51 | clonedChildren.push(hardClone(childData, force)); 52 | } 53 | 54 | // Clone the dictionary if there is one 55 | let clonedDictionary: Vector | undefined = undefined; 56 | if (data.dictionary !== undefined) { 57 | clonedDictionary = hardClone(data.dictionary, force); 58 | } 59 | 60 | // Buffers can have up to four entries. Each of these can be `undefined` for 61 | // one or more array types. 62 | // 63 | // - OFFSET: value offsets for variable size list types 64 | // - DATA: the underlying data 65 | // - VALIDITY: the null buffer. This may be empty or undefined if all elements 66 | // are non-null/valid. 67 | // - TYPE: type ids for a union type. 68 | const clonedBuffers: Buffers = { 69 | [BufferType.OFFSET]: cloneBuffer(data.buffers[BufferType.OFFSET], force), 70 | [BufferType.DATA]: cloneBuffer(data.buffers[BufferType.DATA], force), 71 | [BufferType.VALIDITY]: cloneBuffer( 72 | data.buffers[BufferType.VALIDITY], 73 | force, 74 | ), 75 | [BufferType.TYPE]: cloneBuffer(data.buffers[BufferType.TYPE], force), 76 | }; 77 | 78 | // Note: the data.offset is passed on so that a sliced Data instance will not 79 | // be "un-sliced". However keep in mind that this means we're cloning the 80 | // _original backing buffer_, not only the portion of the Data that was 81 | // sliced. 82 | return new Data( 83 | data.type, 84 | data.offset, 85 | data.length, 86 | // @ts-expect-error _nullCount is protected. We're using it here to mimic 87 | // `Data.clone` 88 | data._nullCount, 89 | clonedBuffers, 90 | clonedChildren, 91 | clonedDictionary, 92 | ); 93 | } 94 | 95 | /** 96 | * Test whether an Data instance is a slice of a larger `ArrayBuffer`. 97 | */ 98 | export function isShared( 99 | data: Data | Vector, 100 | ): boolean { 101 | // Loop over arrow.Vector 102 | if ("data" in data) { 103 | return data.data.some((data) => isShared(data)); 104 | } 105 | 106 | // Check child data 107 | for (const childData of data.children) { 108 | if (isShared(childData)) { 109 | return true; 110 | } 111 | } 112 | 113 | // Check dictionary 114 | if (data.dictionary !== undefined) { 115 | if (isShared(data.dictionary)) { 116 | return true; 117 | } 118 | } 119 | 120 | const bufferTypes = [ 121 | BufferType.OFFSET, 122 | BufferType.DATA, 123 | BufferType.VALIDITY, 124 | BufferType.TYPE, 125 | ]; 126 | for (const bufferType of bufferTypes) { 127 | if ( 128 | data.buffers[bufferType] !== undefined && 129 | isTypedArraySliced(data.buffers[bufferType]) 130 | ) { 131 | return true; 132 | } 133 | } 134 | 135 | return false; 136 | } 137 | 138 | /** 139 | * Returns true if the current typed array is a partial slice on a larger 140 | * ArrayBuffer 141 | */ 142 | function isTypedArraySliced(arr: TypedArray): boolean { 143 | return !(arr.byteOffset === 0 && arr.byteLength === arr.buffer.byteLength); 144 | } 145 | 146 | /** 147 | * If a slice of a larger ArrayBuffer, clone to a fresh `ArrayBuffer`. 148 | * 149 | * If `force` is `true`, always clone the array, even if not shared. 150 | */ 151 | function cloneBuffer( 152 | arr: A, 153 | force: boolean, 154 | ): A { 155 | // Not all buffer types are defined for every type of Arrow array. E.g. 156 | // `arrow.BufferType.TYPE` is only defined for the Union type. 157 | if (arr === undefined) { 158 | return arr; 159 | } 160 | 161 | // The current array is not a part of a larger ArrayBuffer, don't clone it 162 | if (!force && !isTypedArraySliced(arr)) { 163 | return arr; 164 | } 165 | 166 | // Note: TypedArray.slice() **copies** into a new ArrayBuffer 167 | 168 | // @ts-expect-error 'Uint8Array' is assignable to the constraint of type 'A', 169 | // but 'A' could be instantiated with a different subtype of constraint 170 | // 'TypedArray' 171 | // We know from arr.slice that it will always return the same 172 | return arr.slice(); 173 | } 174 | -------------------------------------------------------------------------------- /src/worker/index.ts: -------------------------------------------------------------------------------- 1 | export { hardClone, isShared } from "./hard-clone.js"; 2 | export { preparePostMessage } from "./transferable.js"; 3 | export { rehydrateData, rehydrateVector } from "./rehydrate.js"; 4 | -------------------------------------------------------------------------------- /src/worker/rehydrate.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BufferType, 3 | Type, 4 | Data, 5 | Vector, 6 | Field, 7 | Null, 8 | Int, 9 | Float, 10 | Binary, 11 | Utf8, 12 | Bool, 13 | Decimal, 14 | Date_, 15 | Time, 16 | Timestamp, 17 | Interval, 18 | List, 19 | Struct, 20 | Union, 21 | FixedSizeBinary, 22 | FixedSizeList, 23 | Map_, 24 | Duration, 25 | type DataType, 26 | } from "apache-arrow"; 27 | import type { Buffers } from "apache-arrow/data"; 28 | import { Polygon, isPolygon } from "../type"; 29 | import { PolygonData } from "../data"; 30 | 31 | // Typedefs that include only the information kept from a structuredClone 32 | type PostMessageDataType = Pick; 33 | type PostMessageField = Pick & { 34 | type: PostMessageDataType; 35 | }; 36 | type PostMessageData = Pick< 37 | Data, 38 | | "type" 39 | | "length" 40 | | "offset" 41 | | "stride" 42 | | "children" 43 | | "dictionary" 44 | | "values" 45 | | "typeIds" 46 | | "nullBitmap" 47 | | "valueOffsets" 48 | > & { 49 | type: PostMessageDataType; 50 | }; 51 | type PostMessageVector = Pick< 52 | Vector, 53 | "data" | "length" | "stride" | "numChildren" 54 | > & { type: PostMessageDataType }; 55 | 56 | function rehydrateType(type: PostMessageDataType): DataType { 57 | switch (type.typeId) { 58 | case Type.Null: 59 | return new Null() as DataType; 60 | case Type.Int: 61 | // @ts-expect-error 62 | return new Int(type.isSigned, type.bitWidth); 63 | case Type.Float: 64 | // @ts-expect-error 65 | return new Float(type.precision); 66 | case Type.Binary: 67 | // @ts-expect-error 68 | return new Binary(); 69 | case Type.Utf8: 70 | // @ts-expect-error 71 | return new Utf8(); 72 | case Type.Bool: 73 | // @ts-expect-error 74 | return new Bool(); 75 | case Type.Decimal: 76 | // @ts-expect-error 77 | return new Decimal(type.scale, type.precision, type.bitWidth); 78 | case Type.Date: 79 | // @ts-expect-error 80 | return new Date_(type.unit); 81 | // return new Date 82 | case Type.Time: 83 | // @ts-expect-error 84 | return new Time(type.unit, type.bitWidth); 85 | case Type.Timestamp: 86 | // @ts-expect-error 87 | return new Timestamp(type.unit, type.timezone); 88 | case Type.Interval: 89 | // @ts-expect-error 90 | return new Interval(type.unit); 91 | case Type.List: { 92 | const children = type.children.map(rehydrateField); 93 | if (children.length > 1) throw new Error("expected 1 field"); 94 | // @ts-expect-error 95 | return new List(children[0]); 96 | } 97 | case Type.Struct: { 98 | const children = type.children.map(rehydrateField); 99 | // @ts-expect-error 100 | return new Struct(children); 101 | } 102 | case Type.Union: { 103 | const children = type.children.map(rehydrateField); 104 | // @ts-expect-error 105 | return new Union(type.mode, type.typeIds, children); 106 | } 107 | case Type.FixedSizeBinary: 108 | // @ts-expect-error 109 | return new FixedSizeBinary(type.byteWidth); 110 | case Type.FixedSizeList: { 111 | const children = type.children.map(rehydrateField); 112 | if (children.length > 1) throw new Error("expected 1 field"); 113 | // @ts-expect-error 114 | return new FixedSizeList(type.listSize, children[0]); 115 | } 116 | case Type.Map: { 117 | const children = type.children.map(rehydrateField); 118 | if (children.length > 1) throw new Error("expected 1 field"); 119 | const entries = children[0]; 120 | // @ts-expect-error 121 | return new Map_(entries, type.keysSorted); 122 | } 123 | case Type.Duration: 124 | // @ts-expect-error 125 | return new Duration(type.unit); 126 | default: 127 | throw new Error(`unknown type ${type}`); 128 | } 129 | } 130 | 131 | function rehydrateField(field: PostMessageField): Field { 132 | const type = rehydrateType(field.type); 133 | return new Field(field.name, type, field.nullable, field.metadata); 134 | } 135 | 136 | /** 137 | * Rehydrate a `Data` object that has been `structuredClone`'d or 138 | * `postMessage`'d. The `Data` **must** have been prepared with 139 | * `preparePostMessage` to be accurately recreated. 140 | */ 141 | export function rehydrateData( 142 | data: PostMessageData, 143 | ): Data { 144 | const children = data.children.map((childData) => rehydrateData(childData)); 145 | const dictionary = data.dictionary 146 | ? rehydrateVector(data.dictionary) 147 | : undefined; 148 | 149 | // data.buffers is a getter, so we need to recreate Buffers from the 150 | // attributes on data 151 | const buffers: Buffers = { 152 | [BufferType.OFFSET]: data.valueOffsets, 153 | [BufferType.DATA]: data.values, 154 | [BufferType.VALIDITY]: data.nullBitmap, 155 | [BufferType.TYPE]: data.typeIds, 156 | }; 157 | 158 | // @ts-expect-error 159 | return new Data( 160 | rehydrateType(data.type), 161 | data.offset, 162 | data.length, 163 | // @ts-expect-error 164 | data._nullCount, 165 | buffers, 166 | children, 167 | dictionary, 168 | ); 169 | } 170 | 171 | /** 172 | * Rehydrate a `Vector` object that has been `structuredClone`'d or 173 | * `postMessage`'d. The `Vector` **must** have been prepared with 174 | * `preparePostMessage` to be accurately recreated. 175 | */ 176 | export function rehydrateVector( 177 | vector: PostMessageVector, 178 | ): Vector { 179 | return new Vector(vector.data.map((data) => rehydrateData(data))); 180 | } 181 | 182 | export function rehydratePolygonData( 183 | data: PostMessageData, 184 | ): PolygonData { 185 | if (!isPolygon(data.type)) { 186 | throw new Error("Expected PolygonData"); 187 | } 188 | 189 | // @ts-expect-error 190 | // For now, we allow this, even though we never fully recreate the prototypes 191 | // on the JS side. 192 | return data; 193 | } 194 | -------------------------------------------------------------------------------- /src/worker/transferable.ts: -------------------------------------------------------------------------------- 1 | import { Data, Vector, BufferType, type DataType } from "apache-arrow"; 2 | import { hardClone } from "./hard-clone"; 3 | 4 | /** 5 | * Prepare a `Data` or `Vector` for a `postMessage` or `structuredClone`. 6 | */ 7 | export function preparePostMessage( 8 | input: Data, 9 | forceClone?: boolean, 10 | ): [Data, ArrayBuffer[]]; 11 | export function preparePostMessage( 12 | input: Vector, 13 | forceClone?: boolean, 14 | ): [Vector, ArrayBuffer[]]; 15 | 16 | export function preparePostMessage( 17 | input: Data | Vector, 18 | forceClone: boolean = false, 19 | ): [Data | Vector, ArrayBuffer[]] { 20 | // Check if `input` is an arrow.Vector 21 | if ("data" in input) { 22 | const postMessageDatas: Data[] = []; 23 | const transferArrayBuffers: ArrayBuffer[] = []; 24 | for (const data of input.data) { 25 | const [postMessageData, arrayBuffers] = preparePostMessage(data); 26 | postMessageDatas.push(postMessageData); 27 | transferArrayBuffers.push(...arrayBuffers); 28 | } 29 | const vector = new Vector(postMessageDatas); 30 | return [vector, transferArrayBuffers]; 31 | } 32 | 33 | // Force clone into non-shared backing ArrayBuffers 34 | // Note: this only clones if necessary, unless forceClone is `true`. 35 | input = hardClone(input, forceClone); 36 | 37 | const transferArrayBuffers: ArrayBuffer[] = []; 38 | 39 | // Handle children 40 | for (let childIdx = 0; childIdx < input.children.length; childIdx++) { 41 | const childData = input.children[childIdx]; 42 | const [postMessageData, arrayBuffers] = preparePostMessage(childData); 43 | input.children[childIdx] = postMessageData; 44 | transferArrayBuffers.push(...arrayBuffers); 45 | } 46 | 47 | // Handle dictionary 48 | if (input.dictionary !== undefined) { 49 | const [postMessageVector, arrayBuffers] = preparePostMessage( 50 | input.dictionary, 51 | ); 52 | input.dictionary = postMessageVector; 53 | transferArrayBuffers.push(...arrayBuffers); 54 | } 55 | 56 | // Get references to the underlying buffers. 57 | 58 | // We don't use a loop over these four to ensure accurate typing (well, typing 59 | // doesn't seem to work on `DATA` and `TYPE`.) 60 | if (input.buffers[BufferType.OFFSET] !== undefined) { 61 | transferArrayBuffers.push(input.buffers[BufferType.OFFSET].buffer); 62 | } 63 | 64 | if (input.buffers[BufferType.DATA] !== undefined) { 65 | transferArrayBuffers.push(input.buffers[BufferType.DATA].buffer); 66 | } 67 | if (input.buffers[BufferType.VALIDITY] !== undefined) { 68 | transferArrayBuffers.push(input.buffers[BufferType.VALIDITY].buffer); 69 | } 70 | if (input.buffers[BufferType.TYPE] !== undefined) { 71 | transferArrayBuffers.push(input.buffers[BufferType.TYPE].buffer); 72 | } 73 | 74 | return [input, transferArrayBuffers]; 75 | } 76 | -------------------------------------------------------------------------------- /tests/algorithm/owned-clone.test.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { describe, expect, it } from "vitest"; 3 | import { hardClone, isShared } from "../../src/worker/hard-clone"; 4 | 5 | describe("hard clone", (t) => { 6 | it("should hard clone array", () => { 7 | const vector = arrow.makeVector(new Int32Array([1, 2, 3])); 8 | const data = vector.data[0]; 9 | expect(isShared(data)).toBeFalsy(); 10 | 11 | const cloned = hardClone(data, true); 12 | expect(isShared(cloned)).toBeFalsy(); 13 | 14 | // transfer the values buffer of the first data instance 15 | structuredClone(data, { transfer: [data.values.buffer] }); 16 | 17 | expect( 18 | data.values.buffer.byteLength, 19 | "first buffer should have been neutered", 20 | ).toStrictEqual(0); 21 | expect( 22 | cloned.values.buffer.byteLength, 23 | "cloned buffer should not have been neutered (checks that they're two different backing buffers)", 24 | ).toBeGreaterThan(0); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /tests/algorithm/proj.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from "vitest"; 2 | import { testPointData } from "../util/point"; 3 | import { reproject } from "../../src/algorithm"; 4 | 5 | import proj4 from "proj4"; 6 | 7 | describe("reproject", (t) => { 8 | it("should reproject point array", () => { 9 | const pointData = testPointData(); 10 | const reprojected = reproject(pointData, "EPSG:4326", "EPSG:3857"); 11 | 12 | const expected1 = proj4("EPSG:4326", "EPSG:3857", [1, 2]); 13 | const expected2 = proj4("EPSG:4326", "EPSG:3857", [3, 4]); 14 | const expected3 = proj4("EPSG:4326", "EPSG:3857", [5, 6]); 15 | 16 | expect(reprojected.children[0].values[0]).toBeCloseTo(expected1[0]); 17 | expect(reprojected.children[0].values[1]).toBeCloseTo(expected1[1]); 18 | expect(reprojected.children[0].values[2]).toBeCloseTo(expected2[0]); 19 | expect(reprojected.children[0].values[3]).toBeCloseTo(expected2[1]); 20 | expect(reprojected.children[0].values[4]).toBeCloseTo(expected3[0]); 21 | expect(reprojected.children[0].values[5]).toBeCloseTo(expected3[1]); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /tests/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from "vitest"; 2 | 3 | describe("hello world", (t) => { 4 | it("foo", () => { 5 | expect(true).toBeTruthy(); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /tests/util/point.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { PointData } from "../../src/data"; 3 | 4 | export function testPointData(): PointData { 5 | const values = new Float64Array([1, 2, 3, 4, 5, 6]); 6 | const coordType = new arrow.Float(arrow.Precision.DOUBLE); 7 | const coordData = arrow.makeData({ 8 | type: coordType, 9 | data: values, 10 | }); 11 | 12 | const pointType = new arrow.FixedSizeList( 13 | 2, 14 | new arrow.Field("xy", coordType, false), 15 | ); 16 | return arrow.makeData({ 17 | type: pointType, 18 | child: coordData, 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /tests/worker/transfer.test.ts: -------------------------------------------------------------------------------- 1 | import * as arrow from "apache-arrow"; 2 | import { describe, expect, it } from "vitest"; 3 | import { rehydrateData, preparePostMessage } from "../../src/worker"; 4 | 5 | describe("transfer", (t) => { 6 | it("should transfer correctly", () => { 7 | const vector = arrow.makeVector(new Int32Array([1, 2, 3])); 8 | const firstValue = vector.get(0); 9 | const originalData = vector.data[0]; 10 | // console.log("original data", originalData); 11 | // console.log(originalData.buffers); 12 | 13 | const [preparedData, arrayBuffers] = preparePostMessage(originalData); 14 | const receivedData = structuredClone(preparedData, { 15 | transfer: arrayBuffers, 16 | }); 17 | // console.log("received data"); 18 | // console.log(receivedData); 19 | 20 | const rehydratedData = rehydrateData(receivedData); 21 | // console.log("rehydrated data"); 22 | // console.log(rehydratedData); 23 | 24 | expect( 25 | rehydratedData instanceof arrow.Data, 26 | "rehydrated data should be an instance of arrow.Data", 27 | ).toBeTruthy(); 28 | expect( 29 | rehydratedData.type instanceof arrow.DataType, 30 | "rehydrated data's type should be an instance of arrow.DataType", 31 | ).toBeTruthy(); 32 | expect( 33 | originalData.values.buffer.byteLength, 34 | "original values buffer should have been detached", 35 | ).toStrictEqual(0); 36 | expect( 37 | new arrow.Vector([rehydratedData]).get(0), 38 | "should match first value", 39 | ).toStrictEqual(firstValue); 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /tsconfig.docs.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["dist/**/*.d.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "outDir": "./dist", 7 | "allowJs": true, 8 | "declaration": true, 9 | "noEmit": false, 10 | "noEmitOnError": false, 11 | "esModuleInterop": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "strict": true, 14 | "strictNullChecks": true, 15 | "lib": ["es2019.array", "es6", "dom"] 16 | }, 17 | "include": ["./src/**/*"] 18 | } 19 | -------------------------------------------------------------------------------- /typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@geoarrow/geoarrow-js", 3 | "cleanOutputDir": true, 4 | "darkHighlightTheme": "github-dark", 5 | "entryPoints": [ 6 | "dist/index.d.ts", 7 | ], 8 | "lightHighlightTheme": "github-light", 9 | "tsconfig": "tsconfig.docs.json", 10 | "out": "docs_build", 11 | "excludePrivate": true, 12 | "excludeProtected": true, 13 | "excludeExternals": true, 14 | "includeVersion": true 15 | } 16 | -------------------------------------------------------------------------------- /worker-build.mjs: -------------------------------------------------------------------------------- 1 | // worker-build.mjs 2 | import esbuild from "esbuild"; 3 | 4 | esbuild.build({ 5 | entryPoints: ["./src/worker-bundle/earcut.ts"], 6 | outfile: "dist/earcut-worker.js", 7 | bundle: true, 8 | minify: false, 9 | target: ["esnext"], 10 | format: "esm", 11 | }); 12 | 13 | esbuild.build({ 14 | entryPoints: ["./src/worker-bundle/earcut.ts"], 15 | outfile: "dist/earcut-worker.min.js", 16 | bundle: true, 17 | minify: true, 18 | target: ["esnext"], 19 | format: "esm", 20 | }); 21 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10 7 | 8 | "@75lb/deep-merge@npm:^1.1.1": 9 | version: 1.1.1 10 | resolution: "@75lb/deep-merge@npm:1.1.1" 11 | dependencies: 12 | lodash.assignwith: "npm:^4.2.0" 13 | typical: "npm:^7.1.1" 14 | checksum: 62f127818076123bcab670319cb9ab03cad9485e990870b85da5db57e5a036eb64c8d0a8c473bd3f5603912d31ead5dd3ead7a9604c7576bb349728c603922e0 15 | languageName: node 16 | linkType: hard 17 | 18 | "@babel/code-frame@npm:^7.22.13": 19 | version: 7.23.5 20 | resolution: "@babel/code-frame@npm:7.23.5" 21 | dependencies: 22 | "@babel/highlight": "npm:^7.23.4" 23 | chalk: "npm:^2.4.2" 24 | checksum: 44e58529c9d93083288dc9e649c553c5ba997475a7b0758cc3ddc4d77b8a7d985dbe78cc39c9bbc61f26d50af6da1ddf0a3427eae8cc222a9370619b671ed8f5 25 | languageName: node 26 | linkType: hard 27 | 28 | "@babel/helper-validator-identifier@npm:^7.22.20": 29 | version: 7.22.20 30 | resolution: "@babel/helper-validator-identifier@npm:7.22.20" 31 | checksum: df882d2675101df2d507b95b195ca2f86a3ef28cb711c84f37e79ca23178e13b9f0d8b522774211f51e40168bf5142be4c1c9776a150cddb61a0d5bf3e95750b 32 | languageName: node 33 | linkType: hard 34 | 35 | "@babel/highlight@npm:^7.23.4": 36 | version: 7.23.4 37 | resolution: "@babel/highlight@npm:7.23.4" 38 | dependencies: 39 | "@babel/helper-validator-identifier": "npm:^7.22.20" 40 | chalk: "npm:^2.4.2" 41 | js-tokens: "npm:^4.0.0" 42 | checksum: 62fef9b5bcea7131df4626d009029b1ae85332042f4648a4ce6e740c3fd23112603c740c45575caec62f260c96b11054d3be5987f4981a5479793579c3aac71f 43 | languageName: node 44 | linkType: hard 45 | 46 | "@babel/runtime@npm:^7.12.0": 47 | version: 7.24.0 48 | resolution: "@babel/runtime@npm:7.24.0" 49 | dependencies: 50 | regenerator-runtime: "npm:^0.14.0" 51 | checksum: 8d32c7e116606ea322b89f9fde8ffae6be9503b549dc0d0abb38bd9dc26e87469b9fb7a66964cc089ee558fd0a97d304fb0a3cfec140694764fb0d71b6a6f5e4 52 | languageName: node 53 | linkType: hard 54 | 55 | "@cspotcode/source-map-support@npm:^0.8.0": 56 | version: 0.8.1 57 | resolution: "@cspotcode/source-map-support@npm:0.8.1" 58 | dependencies: 59 | "@jridgewell/trace-mapping": "npm:0.3.9" 60 | checksum: b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff 61 | languageName: node 62 | linkType: hard 63 | 64 | "@esbuild/aix-ppc64@npm:0.19.12": 65 | version: 0.19.12 66 | resolution: "@esbuild/aix-ppc64@npm:0.19.12" 67 | conditions: os=aix & cpu=ppc64 68 | languageName: node 69 | linkType: hard 70 | 71 | "@esbuild/android-arm64@npm:0.19.12": 72 | version: 0.19.12 73 | resolution: "@esbuild/android-arm64@npm:0.19.12" 74 | conditions: os=android & cpu=arm64 75 | languageName: node 76 | linkType: hard 77 | 78 | "@esbuild/android-arm@npm:0.19.12": 79 | version: 0.19.12 80 | resolution: "@esbuild/android-arm@npm:0.19.12" 81 | conditions: os=android & cpu=arm 82 | languageName: node 83 | linkType: hard 84 | 85 | "@esbuild/android-x64@npm:0.19.12": 86 | version: 0.19.12 87 | resolution: "@esbuild/android-x64@npm:0.19.12" 88 | conditions: os=android & cpu=x64 89 | languageName: node 90 | linkType: hard 91 | 92 | "@esbuild/darwin-arm64@npm:0.19.12": 93 | version: 0.19.12 94 | resolution: "@esbuild/darwin-arm64@npm:0.19.12" 95 | conditions: os=darwin & cpu=arm64 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/darwin-x64@npm:0.19.12": 100 | version: 0.19.12 101 | resolution: "@esbuild/darwin-x64@npm:0.19.12" 102 | conditions: os=darwin & cpu=x64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/freebsd-arm64@npm:0.19.12": 107 | version: 0.19.12 108 | resolution: "@esbuild/freebsd-arm64@npm:0.19.12" 109 | conditions: os=freebsd & cpu=arm64 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/freebsd-x64@npm:0.19.12": 114 | version: 0.19.12 115 | resolution: "@esbuild/freebsd-x64@npm:0.19.12" 116 | conditions: os=freebsd & cpu=x64 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/linux-arm64@npm:0.19.12": 121 | version: 0.19.12 122 | resolution: "@esbuild/linux-arm64@npm:0.19.12" 123 | conditions: os=linux & cpu=arm64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/linux-arm@npm:0.19.12": 128 | version: 0.19.12 129 | resolution: "@esbuild/linux-arm@npm:0.19.12" 130 | conditions: os=linux & cpu=arm 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/linux-ia32@npm:0.19.12": 135 | version: 0.19.12 136 | resolution: "@esbuild/linux-ia32@npm:0.19.12" 137 | conditions: os=linux & cpu=ia32 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/linux-loong64@npm:0.19.12": 142 | version: 0.19.12 143 | resolution: "@esbuild/linux-loong64@npm:0.19.12" 144 | conditions: os=linux & cpu=loong64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/linux-mips64el@npm:0.19.12": 149 | version: 0.19.12 150 | resolution: "@esbuild/linux-mips64el@npm:0.19.12" 151 | conditions: os=linux & cpu=mips64el 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/linux-ppc64@npm:0.19.12": 156 | version: 0.19.12 157 | resolution: "@esbuild/linux-ppc64@npm:0.19.12" 158 | conditions: os=linux & cpu=ppc64 159 | languageName: node 160 | linkType: hard 161 | 162 | "@esbuild/linux-riscv64@npm:0.19.12": 163 | version: 0.19.12 164 | resolution: "@esbuild/linux-riscv64@npm:0.19.12" 165 | conditions: os=linux & cpu=riscv64 166 | languageName: node 167 | linkType: hard 168 | 169 | "@esbuild/linux-s390x@npm:0.19.12": 170 | version: 0.19.12 171 | resolution: "@esbuild/linux-s390x@npm:0.19.12" 172 | conditions: os=linux & cpu=s390x 173 | languageName: node 174 | linkType: hard 175 | 176 | "@esbuild/linux-x64@npm:0.19.12": 177 | version: 0.19.12 178 | resolution: "@esbuild/linux-x64@npm:0.19.12" 179 | conditions: os=linux & cpu=x64 180 | languageName: node 181 | linkType: hard 182 | 183 | "@esbuild/netbsd-x64@npm:0.19.12": 184 | version: 0.19.12 185 | resolution: "@esbuild/netbsd-x64@npm:0.19.12" 186 | conditions: os=netbsd & cpu=x64 187 | languageName: node 188 | linkType: hard 189 | 190 | "@esbuild/openbsd-x64@npm:0.19.12": 191 | version: 0.19.12 192 | resolution: "@esbuild/openbsd-x64@npm:0.19.12" 193 | conditions: os=openbsd & cpu=x64 194 | languageName: node 195 | linkType: hard 196 | 197 | "@esbuild/sunos-x64@npm:0.19.12": 198 | version: 0.19.12 199 | resolution: "@esbuild/sunos-x64@npm:0.19.12" 200 | conditions: os=sunos & cpu=x64 201 | languageName: node 202 | linkType: hard 203 | 204 | "@esbuild/win32-arm64@npm:0.19.12": 205 | version: 0.19.12 206 | resolution: "@esbuild/win32-arm64@npm:0.19.12" 207 | conditions: os=win32 & cpu=arm64 208 | languageName: node 209 | linkType: hard 210 | 211 | "@esbuild/win32-ia32@npm:0.19.12": 212 | version: 0.19.12 213 | resolution: "@esbuild/win32-ia32@npm:0.19.12" 214 | conditions: os=win32 & cpu=ia32 215 | languageName: node 216 | linkType: hard 217 | 218 | "@esbuild/win32-x64@npm:0.19.12": 219 | version: 0.19.12 220 | resolution: "@esbuild/win32-x64@npm:0.19.12" 221 | conditions: os=win32 & cpu=x64 222 | languageName: node 223 | linkType: hard 224 | 225 | "@geoarrow/geoarrow-js@workspace:.": 226 | version: 0.0.0-use.local 227 | resolution: "@geoarrow/geoarrow-js@workspace:." 228 | dependencies: 229 | "@math.gl/polygon": "npm:^4.0.0" 230 | "@rollup/plugin-node-resolve": "npm:^15.2.3" 231 | "@rollup/plugin-terser": "npm:^0.4.3" 232 | "@rollup/plugin-typescript": "npm:^11.1.2" 233 | "@types/node": "npm:^20.9.3" 234 | "@types/proj4": "npm:^2" 235 | apache-arrow: "npm:^15" 236 | esbuild: "npm:^0.19.8" 237 | gh-pages: "npm:^6.1.0" 238 | prettier: "npm:^3.1.0" 239 | proj4: "npm:^2.9.2" 240 | rimraf: "npm:^5.0.5" 241 | rollup: "npm:^4.1.5" 242 | rollup-plugin-dts: "npm:^6.1.0" 243 | threads: "npm:^1.7.0" 244 | ts-node: "npm:^10.9.1" 245 | typedoc: "npm:^0.25.4" 246 | typescript: "npm:^5.2.2" 247 | vitest: "npm:^0.34.6" 248 | peerDependencies: 249 | apache-arrow: ">=15" 250 | languageName: unknown 251 | linkType: soft 252 | 253 | "@isaacs/cliui@npm:^8.0.2": 254 | version: 8.0.2 255 | resolution: "@isaacs/cliui@npm:8.0.2" 256 | dependencies: 257 | string-width: "npm:^5.1.2" 258 | string-width-cjs: "npm:string-width@^4.2.0" 259 | strip-ansi: "npm:^7.0.1" 260 | strip-ansi-cjs: "npm:strip-ansi@^6.0.1" 261 | wrap-ansi: "npm:^8.1.0" 262 | wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" 263 | checksum: e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 264 | languageName: node 265 | linkType: hard 266 | 267 | "@jest/schemas@npm:^29.6.3": 268 | version: 29.6.3 269 | resolution: "@jest/schemas@npm:29.6.3" 270 | dependencies: 271 | "@sinclair/typebox": "npm:^0.27.8" 272 | checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 273 | languageName: node 274 | linkType: hard 275 | 276 | "@jridgewell/gen-mapping@npm:^0.3.0": 277 | version: 0.3.5 278 | resolution: "@jridgewell/gen-mapping@npm:0.3.5" 279 | dependencies: 280 | "@jridgewell/set-array": "npm:^1.2.1" 281 | "@jridgewell/sourcemap-codec": "npm:^1.4.10" 282 | "@jridgewell/trace-mapping": "npm:^0.3.24" 283 | checksum: 81587b3c4dd8e6c60252122937cea0c637486311f4ed208b52b62aae2e7a87598f63ec330e6cd0984af494bfb16d3f0d60d3b21d7e5b4aedd2602ff3fe9d32e2 284 | languageName: node 285 | linkType: hard 286 | 287 | "@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": 288 | version: 3.1.2 289 | resolution: "@jridgewell/resolve-uri@npm:3.1.2" 290 | checksum: 97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d 291 | languageName: node 292 | linkType: hard 293 | 294 | "@jridgewell/set-array@npm:^1.2.1": 295 | version: 1.2.1 296 | resolution: "@jridgewell/set-array@npm:1.2.1" 297 | checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 298 | languageName: node 299 | linkType: hard 300 | 301 | "@jridgewell/source-map@npm:^0.3.3": 302 | version: 0.3.5 303 | resolution: "@jridgewell/source-map@npm:0.3.5" 304 | dependencies: 305 | "@jridgewell/gen-mapping": "npm:^0.3.0" 306 | "@jridgewell/trace-mapping": "npm:^0.3.9" 307 | checksum: 73838ac43235edecff5efc850c0d759704008937a56b1711b28c261e270fe4bf2dc06d0b08663aeb1ab304f81f6de4f5fb844344403cf53ba7096967a9953cae 308 | languageName: node 309 | linkType: hard 310 | 311 | "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": 312 | version: 1.4.15 313 | resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" 314 | checksum: 89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 315 | languageName: node 316 | linkType: hard 317 | 318 | "@jridgewell/trace-mapping@npm:0.3.9": 319 | version: 0.3.9 320 | resolution: "@jridgewell/trace-mapping@npm:0.3.9" 321 | dependencies: 322 | "@jridgewell/resolve-uri": "npm:^3.0.3" 323 | "@jridgewell/sourcemap-codec": "npm:^1.4.10" 324 | checksum: 83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff 325 | languageName: node 326 | linkType: hard 327 | 328 | "@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.9": 329 | version: 0.3.25 330 | resolution: "@jridgewell/trace-mapping@npm:0.3.25" 331 | dependencies: 332 | "@jridgewell/resolve-uri": "npm:^3.1.0" 333 | "@jridgewell/sourcemap-codec": "npm:^1.4.14" 334 | checksum: dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc 335 | languageName: node 336 | linkType: hard 337 | 338 | "@math.gl/core@npm:4.0.0": 339 | version: 4.0.0 340 | resolution: "@math.gl/core@npm:4.0.0" 341 | dependencies: 342 | "@babel/runtime": "npm:^7.12.0" 343 | "@math.gl/types": "npm:4.0.0" 344 | checksum: 8208e9d917d3b8b90db1546b3dd69512a26556a832d95f23580909bf76349ee83debf95db974528254f7bed2ad36c25a0457c73b9d208b51f866a88304b6ac8c 345 | languageName: node 346 | linkType: hard 347 | 348 | "@math.gl/polygon@npm:^4.0.0": 349 | version: 4.0.0 350 | resolution: "@math.gl/polygon@npm:4.0.0" 351 | dependencies: 352 | "@math.gl/core": "npm:4.0.0" 353 | checksum: 97a1e9e7270c89d47d367a193ff9c99b914770dabc7adbdc24f6edd58c24b2f49b30d0d62840e9db1968d32062b86ac92da04b84ef004d1d932d1202107a57d4 354 | languageName: node 355 | linkType: hard 356 | 357 | "@math.gl/types@npm:4.0.0": 358 | version: 4.0.0 359 | resolution: "@math.gl/types@npm:4.0.0" 360 | checksum: 8fce7215bf7b9c48c09026fcd41f86b5c118afa3580a937831198f82324e468aa9aec53942bf7aa848f9782f2142225b891a0eb8e403f7b8cec669308272147b 361 | languageName: node 362 | linkType: hard 363 | 364 | "@npmcli/agent@npm:^2.0.0": 365 | version: 2.2.1 366 | resolution: "@npmcli/agent@npm:2.2.1" 367 | dependencies: 368 | agent-base: "npm:^7.1.0" 369 | http-proxy-agent: "npm:^7.0.0" 370 | https-proxy-agent: "npm:^7.0.1" 371 | lru-cache: "npm:^10.0.1" 372 | socks-proxy-agent: "npm:^8.0.1" 373 | checksum: d4a48128f61e47f2f5c89315a5350e265dc619987e635bd62b52b29c7ed93536e724e721418c0ce352ceece86c13043c67aba1b70c3f5cc72fce6bb746706162 374 | languageName: node 375 | linkType: hard 376 | 377 | "@npmcli/fs@npm:^3.1.0": 378 | version: 3.1.0 379 | resolution: "@npmcli/fs@npm:3.1.0" 380 | dependencies: 381 | semver: "npm:^7.3.5" 382 | checksum: f3a7ab3a31de65e42aeb6ed03ed035ef123d2de7af4deb9d4a003d27acc8618b57d9fb9d259fe6c28ca538032a028f37337264388ba27d26d37fff7dde22476e 383 | languageName: node 384 | linkType: hard 385 | 386 | "@pkgjs/parseargs@npm:^0.11.0": 387 | version: 0.11.0 388 | resolution: "@pkgjs/parseargs@npm:0.11.0" 389 | checksum: 115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff 390 | languageName: node 391 | linkType: hard 392 | 393 | "@rollup/plugin-node-resolve@npm:^15.2.3": 394 | version: 15.2.3 395 | resolution: "@rollup/plugin-node-resolve@npm:15.2.3" 396 | dependencies: 397 | "@rollup/pluginutils": "npm:^5.0.1" 398 | "@types/resolve": "npm:1.20.2" 399 | deepmerge: "npm:^4.2.2" 400 | is-builtin-module: "npm:^3.2.1" 401 | is-module: "npm:^1.0.0" 402 | resolve: "npm:^1.22.1" 403 | peerDependencies: 404 | rollup: ^2.78.0||^3.0.0||^4.0.0 405 | peerDependenciesMeta: 406 | rollup: 407 | optional: true 408 | checksum: d36a6792fbe9d8673d3a7c7dc88920be669ac54fba02ac0093d3c00fc9463fce2e87da1906a2651016742709c3d202b367fb49a62acd0d98f18409343f27b8b4 409 | languageName: node 410 | linkType: hard 411 | 412 | "@rollup/plugin-terser@npm:^0.4.3": 413 | version: 0.4.4 414 | resolution: "@rollup/plugin-terser@npm:0.4.4" 415 | dependencies: 416 | serialize-javascript: "npm:^6.0.1" 417 | smob: "npm:^1.0.0" 418 | terser: "npm:^5.17.4" 419 | peerDependencies: 420 | rollup: ^2.0.0||^3.0.0||^4.0.0 421 | peerDependenciesMeta: 422 | rollup: 423 | optional: true 424 | checksum: a5e066ddea55fc8c32188bc8b484cca619713516f10e3a06801881ec98bf37459ca24e5fe8711f93a5fa7f26a6e9132a47bc1a61c01e0b513dfd79a96cdc6eb7 425 | languageName: node 426 | linkType: hard 427 | 428 | "@rollup/plugin-typescript@npm:^11.1.2": 429 | version: 11.1.6 430 | resolution: "@rollup/plugin-typescript@npm:11.1.6" 431 | dependencies: 432 | "@rollup/pluginutils": "npm:^5.1.0" 433 | resolve: "npm:^1.22.1" 434 | peerDependencies: 435 | rollup: ^2.14.0||^3.0.0||^4.0.0 436 | tslib: "*" 437 | typescript: ">=3.7.0" 438 | peerDependenciesMeta: 439 | rollup: 440 | optional: true 441 | tslib: 442 | optional: true 443 | checksum: 4ae4d6cfc929393171288df2f18b5eb837fa53d8689118d9661b3064567341f6f6cf8389af55f1d5f015e3682abf30a64ab609fdf75ecb5a84224505e407eb69 444 | languageName: node 445 | linkType: hard 446 | 447 | "@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.0": 448 | version: 5.1.0 449 | resolution: "@rollup/pluginutils@npm:5.1.0" 450 | dependencies: 451 | "@types/estree": "npm:^1.0.0" 452 | estree-walker: "npm:^2.0.2" 453 | picomatch: "npm:^2.3.1" 454 | peerDependencies: 455 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 456 | peerDependenciesMeta: 457 | rollup: 458 | optional: true 459 | checksum: abb15eaec5b36f159ec351b48578401bedcefdfa371d24a914cfdbb1e27d0ebfbf895299ec18ccc343d247e71f2502cba21202bc1362d7ef27d5ded699e5c2b2 460 | languageName: node 461 | linkType: hard 462 | 463 | "@rollup/rollup-android-arm-eabi@npm:4.12.0": 464 | version: 4.12.0 465 | resolution: "@rollup/rollup-android-arm-eabi@npm:4.12.0" 466 | conditions: os=android & cpu=arm 467 | languageName: node 468 | linkType: hard 469 | 470 | "@rollup/rollup-android-arm64@npm:4.12.0": 471 | version: 4.12.0 472 | resolution: "@rollup/rollup-android-arm64@npm:4.12.0" 473 | conditions: os=android & cpu=arm64 474 | languageName: node 475 | linkType: hard 476 | 477 | "@rollup/rollup-darwin-arm64@npm:4.12.0": 478 | version: 4.12.0 479 | resolution: "@rollup/rollup-darwin-arm64@npm:4.12.0" 480 | conditions: os=darwin & cpu=arm64 481 | languageName: node 482 | linkType: hard 483 | 484 | "@rollup/rollup-darwin-x64@npm:4.12.0": 485 | version: 4.12.0 486 | resolution: "@rollup/rollup-darwin-x64@npm:4.12.0" 487 | conditions: os=darwin & cpu=x64 488 | languageName: node 489 | linkType: hard 490 | 491 | "@rollup/rollup-linux-arm-gnueabihf@npm:4.12.0": 492 | version: 4.12.0 493 | resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.12.0" 494 | conditions: os=linux & cpu=arm 495 | languageName: node 496 | linkType: hard 497 | 498 | "@rollup/rollup-linux-arm64-gnu@npm:4.12.0": 499 | version: 4.12.0 500 | resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.12.0" 501 | conditions: os=linux & cpu=arm64 & libc=glibc 502 | languageName: node 503 | linkType: hard 504 | 505 | "@rollup/rollup-linux-arm64-musl@npm:4.12.0": 506 | version: 4.12.0 507 | resolution: "@rollup/rollup-linux-arm64-musl@npm:4.12.0" 508 | conditions: os=linux & cpu=arm64 & libc=musl 509 | languageName: node 510 | linkType: hard 511 | 512 | "@rollup/rollup-linux-riscv64-gnu@npm:4.12.0": 513 | version: 4.12.0 514 | resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.12.0" 515 | conditions: os=linux & cpu=riscv64 & libc=glibc 516 | languageName: node 517 | linkType: hard 518 | 519 | "@rollup/rollup-linux-x64-gnu@npm:4.12.0": 520 | version: 4.12.0 521 | resolution: "@rollup/rollup-linux-x64-gnu@npm:4.12.0" 522 | conditions: os=linux & cpu=x64 & libc=glibc 523 | languageName: node 524 | linkType: hard 525 | 526 | "@rollup/rollup-linux-x64-musl@npm:4.12.0": 527 | version: 4.12.0 528 | resolution: "@rollup/rollup-linux-x64-musl@npm:4.12.0" 529 | conditions: os=linux & cpu=x64 & libc=musl 530 | languageName: node 531 | linkType: hard 532 | 533 | "@rollup/rollup-win32-arm64-msvc@npm:4.12.0": 534 | version: 4.12.0 535 | resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.12.0" 536 | conditions: os=win32 & cpu=arm64 537 | languageName: node 538 | linkType: hard 539 | 540 | "@rollup/rollup-win32-ia32-msvc@npm:4.12.0": 541 | version: 4.12.0 542 | resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.12.0" 543 | conditions: os=win32 & cpu=ia32 544 | languageName: node 545 | linkType: hard 546 | 547 | "@rollup/rollup-win32-x64-msvc@npm:4.12.0": 548 | version: 4.12.0 549 | resolution: "@rollup/rollup-win32-x64-msvc@npm:4.12.0" 550 | conditions: os=win32 & cpu=x64 551 | languageName: node 552 | linkType: hard 553 | 554 | "@sinclair/typebox@npm:^0.27.8": 555 | version: 0.27.8 556 | resolution: "@sinclair/typebox@npm:0.27.8" 557 | checksum: 297f95ff77c82c54de8c9907f186076e715ff2621c5222ba50b8d40a170661c0c5242c763cba2a4791f0f91cb1d8ffa53ea1d7294570cf8cd4694c0e383e484d 558 | languageName: node 559 | linkType: hard 560 | 561 | "@swc/helpers@npm:^0.5.2": 562 | version: 0.5.6 563 | resolution: "@swc/helpers@npm:0.5.6" 564 | dependencies: 565 | tslib: "npm:^2.4.0" 566 | checksum: 16f0a18367b1248317dcc3e5f32411da1a2906f983f4f072e394dfed37523385bc4d7bf71bab204cc8b3875c024a91421dd5c1f9c5bad1b1172fcb50aa2ec96f 567 | languageName: node 568 | linkType: hard 569 | 570 | "@tsconfig/node10@npm:^1.0.7": 571 | version: 1.0.9 572 | resolution: "@tsconfig/node10@npm:1.0.9" 573 | checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df 574 | languageName: node 575 | linkType: hard 576 | 577 | "@tsconfig/node12@npm:^1.0.7": 578 | version: 1.0.11 579 | resolution: "@tsconfig/node12@npm:1.0.11" 580 | checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a 581 | languageName: node 582 | linkType: hard 583 | 584 | "@tsconfig/node14@npm:^1.0.0": 585 | version: 1.0.3 586 | resolution: "@tsconfig/node14@npm:1.0.3" 587 | checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d 588 | languageName: node 589 | linkType: hard 590 | 591 | "@tsconfig/node16@npm:^1.0.2": 592 | version: 1.0.4 593 | resolution: "@tsconfig/node16@npm:1.0.4" 594 | checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff 595 | languageName: node 596 | linkType: hard 597 | 598 | "@types/chai-subset@npm:^1.3.3": 599 | version: 1.3.5 600 | resolution: "@types/chai-subset@npm:1.3.5" 601 | dependencies: 602 | "@types/chai": "npm:*" 603 | checksum: 715c46d3e90f87482c2769389d560456bb257b225716ff44c275c231bdb62c8a30629f355f412bac0ecab07ebc036c1806d9ed9dde9792254f8ef4f07f76033b 604 | languageName: node 605 | linkType: hard 606 | 607 | "@types/chai@npm:*, @types/chai@npm:^4.3.5": 608 | version: 4.3.12 609 | resolution: "@types/chai@npm:4.3.12" 610 | checksum: cf465151048f438b11e562ac431842f440b50817e74516f1fb349860a0db4fcdd665197f9fbee4387250d8d077496a1167fe2c75af88372bac6d8f093ee07b3a 611 | languageName: node 612 | linkType: hard 613 | 614 | "@types/command-line-args@npm:^5.2.1": 615 | version: 5.2.3 616 | resolution: "@types/command-line-args@npm:5.2.3" 617 | checksum: 3d90db5b4bbaabd049654a0d12fa378989ab0d76a0f98d4c606761b5a08ce76458df0f9bb175219e187b4cd57e285e6f836d23e86b2c3d997820854cc3ed9121 618 | languageName: node 619 | linkType: hard 620 | 621 | "@types/command-line-usage@npm:^5.0.2": 622 | version: 5.0.4 623 | resolution: "@types/command-line-usage@npm:5.0.4" 624 | checksum: 7173c356ca8c9507feeeda8e660c52498929556e90be0cf2d09d35270c597481121cd0f006a74167c5577feebfbc75b648c0f8f01b8f06ce30bde9fe30d5ba40 625 | languageName: node 626 | linkType: hard 627 | 628 | "@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": 629 | version: 1.0.5 630 | resolution: "@types/estree@npm:1.0.5" 631 | checksum: 7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 632 | languageName: node 633 | linkType: hard 634 | 635 | "@types/node@npm:*, @types/node@npm:^20.6.0, @types/node@npm:^20.9.3": 636 | version: 20.11.24 637 | resolution: "@types/node@npm:20.11.24" 638 | dependencies: 639 | undici-types: "npm:~5.26.4" 640 | checksum: 7f34bfae5f9b98b9910230af4b4c52dc7fb2d1e96fdebfbc3d7576f8ab3d100076f193f9469add9e7418b455294155e7e6a028498cc5e98f9d49349875a459cf 641 | languageName: node 642 | linkType: hard 643 | 644 | "@types/proj4@npm:^2": 645 | version: 2.5.5 646 | resolution: "@types/proj4@npm:2.5.5" 647 | checksum: 06a1898ffff6d7b4a0da04249b431b129ae31c1a75decfdcbdde6b6d7a7cf9560f8506e89f441b6ebe287e66ef5d0fd3e7ca33f9eb30c1427f8b9989bd3dc578 648 | languageName: node 649 | linkType: hard 650 | 651 | "@types/resolve@npm:1.20.2": 652 | version: 1.20.2 653 | resolution: "@types/resolve@npm:1.20.2" 654 | checksum: 1bff0d3875e7e1557b6c030c465beca9bf3b1173ebc6937cac547654b0af3bb3ff0f16470e9c4d7c5dc308ad9ac8627c38dbff24ef698b66673ff5bd4ead7f7e 655 | languageName: node 656 | linkType: hard 657 | 658 | "@vitest/expect@npm:0.34.6": 659 | version: 0.34.6 660 | resolution: "@vitest/expect@npm:0.34.6" 661 | dependencies: 662 | "@vitest/spy": "npm:0.34.6" 663 | "@vitest/utils": "npm:0.34.6" 664 | chai: "npm:^4.3.10" 665 | checksum: c5dbd3db4d914857287dcff5dd7084070a2f73ed616197c80acaa54c27e5563cecf7a11e86d6aeef002e38f2ca52626f4b9c765db9b56add736f4e94a7fb0954 666 | languageName: node 667 | linkType: hard 668 | 669 | "@vitest/runner@npm:0.34.6": 670 | version: 0.34.6 671 | resolution: "@vitest/runner@npm:0.34.6" 672 | dependencies: 673 | "@vitest/utils": "npm:0.34.6" 674 | p-limit: "npm:^4.0.0" 675 | pathe: "npm:^1.1.1" 676 | checksum: 3525d8e4f8cd8a8b3f8f43a7b2604cda891fe31cfa1604e179628ced89d21114a55d6bb3bf192c02b4419e760eb15188d490e861cb46ddab2786193f8a999b0e 677 | languageName: node 678 | linkType: hard 679 | 680 | "@vitest/snapshot@npm:0.34.6": 681 | version: 0.34.6 682 | resolution: "@vitest/snapshot@npm:0.34.6" 683 | dependencies: 684 | magic-string: "npm:^0.30.1" 685 | pathe: "npm:^1.1.1" 686 | pretty-format: "npm:^29.5.0" 687 | checksum: a9a321a089b22a383253b8cf3092c3af9b35453bb1c0ba0762760644a6ab0f727a4083872c7fd5a7d18c9a4fc4a798c4392872e337858a7c8ccc25ada6bf4d96 688 | languageName: node 689 | linkType: hard 690 | 691 | "@vitest/spy@npm:0.34.6": 692 | version: 0.34.6 693 | resolution: "@vitest/spy@npm:0.34.6" 694 | dependencies: 695 | tinyspy: "npm:^2.1.1" 696 | checksum: 9de152ac928c31e21bb4d8e1262b70db50dd11479efe8babce6bd993cc89957b974a584414a99d66ca188775b50baea1b934fdfb8d0d53c66fc2feb6dc2e348d 697 | languageName: node 698 | linkType: hard 699 | 700 | "@vitest/utils@npm:0.34.6": 701 | version: 0.34.6 702 | resolution: "@vitest/utils@npm:0.34.6" 703 | dependencies: 704 | diff-sequences: "npm:^29.4.3" 705 | loupe: "npm:^2.3.6" 706 | pretty-format: "npm:^29.5.0" 707 | checksum: 09a1b2122ceb5541b4f3d64410088e363a36d6e4addf208b6458615ac856adf36c1c9b5431a45ea13a78c30e6a7dcb0696854abe69a710089ffa229356a5202b 708 | languageName: node 709 | linkType: hard 710 | 711 | "abbrev@npm:^2.0.0": 712 | version: 2.0.0 713 | resolution: "abbrev@npm:2.0.0" 714 | checksum: ca0a54e35bea4ece0ecb68a47b312e1a9a6f772408d5bcb9051230aaa94b0460671c5b5c9cb3240eb5b7bc94c52476550eb221f65a0bbd0145bdc9f3113a6707 715 | languageName: node 716 | linkType: hard 717 | 718 | "acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": 719 | version: 8.3.2 720 | resolution: "acorn-walk@npm:8.3.2" 721 | checksum: 57dbe2fd8cf744f562431775741c5c087196cd7a65ce4ccb3f3981cdfad25cd24ad2bad404997b88464ac01e789a0a61e5e355b2a84876f13deef39fb39686ca 722 | languageName: node 723 | linkType: hard 724 | 725 | "acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": 726 | version: 8.11.3 727 | resolution: "acorn@npm:8.11.3" 728 | bin: 729 | acorn: bin/acorn 730 | checksum: b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd 731 | languageName: node 732 | linkType: hard 733 | 734 | "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": 735 | version: 7.1.0 736 | resolution: "agent-base@npm:7.1.0" 737 | dependencies: 738 | debug: "npm:^4.3.4" 739 | checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f 740 | languageName: node 741 | linkType: hard 742 | 743 | "aggregate-error@npm:^3.0.0": 744 | version: 3.1.0 745 | resolution: "aggregate-error@npm:3.1.0" 746 | dependencies: 747 | clean-stack: "npm:^2.0.0" 748 | indent-string: "npm:^4.0.0" 749 | checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 750 | languageName: node 751 | linkType: hard 752 | 753 | "ansi-regex@npm:^5.0.1": 754 | version: 5.0.1 755 | resolution: "ansi-regex@npm:5.0.1" 756 | checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b 757 | languageName: node 758 | linkType: hard 759 | 760 | "ansi-regex@npm:^6.0.1": 761 | version: 6.0.1 762 | resolution: "ansi-regex@npm:6.0.1" 763 | checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 764 | languageName: node 765 | linkType: hard 766 | 767 | "ansi-sequence-parser@npm:^1.1.0": 768 | version: 1.1.1 769 | resolution: "ansi-sequence-parser@npm:1.1.1" 770 | checksum: 9ce30f257badc2ef62cac8028a7e26c368d22bf26650427192e8ffd102da42e377e3affe90fae58062eecc963b0b055f510dde3b677c7e0c433c67069b5a8ee5 771 | languageName: node 772 | linkType: hard 773 | 774 | "ansi-styles@npm:^3.2.1": 775 | version: 3.2.1 776 | resolution: "ansi-styles@npm:3.2.1" 777 | dependencies: 778 | color-convert: "npm:^1.9.0" 779 | checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 780 | languageName: node 781 | linkType: hard 782 | 783 | "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": 784 | version: 4.3.0 785 | resolution: "ansi-styles@npm:4.3.0" 786 | dependencies: 787 | color-convert: "npm:^2.0.1" 788 | checksum: b4494dfbfc7e4591b4711a396bd27e540f8153914123dccb4cdbbcb514015ada63a3809f362b9d8d4f6b17a706f1d7bea3c6f974b15fa5ae76b5b502070889ff 789 | languageName: node 790 | linkType: hard 791 | 792 | "ansi-styles@npm:^5.0.0": 793 | version: 5.2.0 794 | resolution: "ansi-styles@npm:5.2.0" 795 | checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 796 | languageName: node 797 | linkType: hard 798 | 799 | "ansi-styles@npm:^6.1.0": 800 | version: 6.2.1 801 | resolution: "ansi-styles@npm:6.2.1" 802 | checksum: 70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 803 | languageName: node 804 | linkType: hard 805 | 806 | "apache-arrow@npm:^15": 807 | version: 15.0.0 808 | resolution: "apache-arrow@npm:15.0.0" 809 | dependencies: 810 | "@swc/helpers": "npm:^0.5.2" 811 | "@types/command-line-args": "npm:^5.2.1" 812 | "@types/command-line-usage": "npm:^5.0.2" 813 | "@types/node": "npm:^20.6.0" 814 | command-line-args: "npm:^5.2.1" 815 | command-line-usage: "npm:^7.0.1" 816 | flatbuffers: "npm:^23.5.26" 817 | json-bignum: "npm:^0.0.3" 818 | tslib: "npm:^2.6.2" 819 | bin: 820 | arrow2csv: bin/arrow2csv.cjs 821 | checksum: aff749aec1e0eddfce30e7da6b7f417a6d152b6c34b551a687828a9ee742f52294fc76e7b276e2c3e2374de9bd850f5f1b72c108f6f496e7b25b059389f22585 822 | languageName: node 823 | linkType: hard 824 | 825 | "arg@npm:^4.1.0": 826 | version: 4.1.3 827 | resolution: "arg@npm:4.1.3" 828 | checksum: 969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 829 | languageName: node 830 | linkType: hard 831 | 832 | "array-back@npm:^3.0.1, array-back@npm:^3.1.0": 833 | version: 3.1.0 834 | resolution: "array-back@npm:3.1.0" 835 | checksum: 7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 836 | languageName: node 837 | linkType: hard 838 | 839 | "array-back@npm:^6.2.2": 840 | version: 6.2.2 841 | resolution: "array-back@npm:6.2.2" 842 | checksum: baae1e3a1687300a307d3bdf09715f6415e1099b5729d3d8e397309fb1e43d90b939d694602892172aaca7e0aeed38da89d04aa4951637d31c2a21350809e003 843 | languageName: node 844 | linkType: hard 845 | 846 | "array-union@npm:^1.0.1": 847 | version: 1.0.2 848 | resolution: "array-union@npm:1.0.2" 849 | dependencies: 850 | array-uniq: "npm:^1.0.1" 851 | checksum: 82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d 852 | languageName: node 853 | linkType: hard 854 | 855 | "array-uniq@npm:^1.0.1": 856 | version: 1.0.3 857 | resolution: "array-uniq@npm:1.0.3" 858 | checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e 859 | languageName: node 860 | linkType: hard 861 | 862 | "assertion-error@npm:^1.1.0": 863 | version: 1.1.0 864 | resolution: "assertion-error@npm:1.1.0" 865 | checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf 866 | languageName: node 867 | linkType: hard 868 | 869 | "async@npm:^3.2.4": 870 | version: 3.2.5 871 | resolution: "async@npm:3.2.5" 872 | checksum: 323c3615c3f0ab1ac25a6f953296bc0ac3213d5e0f1c0debdb12964e55963af288d570293c11e44f7967af58c06d2a88d0ea588c86ec0fbf62fa98037f604a0f 873 | languageName: node 874 | linkType: hard 875 | 876 | "balanced-match@npm:^1.0.0": 877 | version: 1.0.2 878 | resolution: "balanced-match@npm:1.0.2" 879 | checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 880 | languageName: node 881 | linkType: hard 882 | 883 | "brace-expansion@npm:^1.1.7": 884 | version: 1.1.11 885 | resolution: "brace-expansion@npm:1.1.11" 886 | dependencies: 887 | balanced-match: "npm:^1.0.0" 888 | concat-map: "npm:0.0.1" 889 | checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 890 | languageName: node 891 | linkType: hard 892 | 893 | "brace-expansion@npm:^2.0.1": 894 | version: 2.0.1 895 | resolution: "brace-expansion@npm:2.0.1" 896 | dependencies: 897 | balanced-match: "npm:^1.0.0" 898 | checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 899 | languageName: node 900 | linkType: hard 901 | 902 | "buffer-from@npm:^1.0.0": 903 | version: 1.1.2 904 | resolution: "buffer-from@npm:1.1.2" 905 | checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb 906 | languageName: node 907 | linkType: hard 908 | 909 | "builtin-modules@npm:^3.3.0": 910 | version: 3.3.0 911 | resolution: "builtin-modules@npm:3.3.0" 912 | checksum: 62e063ab40c0c1efccbfa9ffa31873e4f9d57408cb396a2649981a0ecbce56aabc93c28feaccbc5658c95aab2703ad1d11980e62ec2e5e72637404e1eb60f39e 913 | languageName: node 914 | linkType: hard 915 | 916 | "cac@npm:^6.7.14": 917 | version: 6.7.14 918 | resolution: "cac@npm:6.7.14" 919 | checksum: 002769a0fbfc51c062acd2a59df465a2a947916b02ac50b56c69ec6c018ee99ac3e7f4dd7366334ea847f1ecacf4defaa61bcd2ac283db50156ce1f1d8c8ad42 920 | languageName: node 921 | linkType: hard 922 | 923 | "cacache@npm:^18.0.0": 924 | version: 18.0.2 925 | resolution: "cacache@npm:18.0.2" 926 | dependencies: 927 | "@npmcli/fs": "npm:^3.1.0" 928 | fs-minipass: "npm:^3.0.0" 929 | glob: "npm:^10.2.2" 930 | lru-cache: "npm:^10.0.1" 931 | minipass: "npm:^7.0.3" 932 | minipass-collect: "npm:^2.0.1" 933 | minipass-flush: "npm:^1.0.5" 934 | minipass-pipeline: "npm:^1.2.4" 935 | p-map: "npm:^4.0.0" 936 | ssri: "npm:^10.0.0" 937 | tar: "npm:^6.1.11" 938 | unique-filename: "npm:^3.0.0" 939 | checksum: 5ca58464f785d4d64ac2019fcad95451c8c89bea25949f63acd8987fcc3493eaef1beccc0fa39e673506d879d3fc1ab420760f8a14f8ddf46ea2d121805a5e96 940 | languageName: node 941 | linkType: hard 942 | 943 | "callsites@npm:^3.1.0": 944 | version: 3.1.0 945 | resolution: "callsites@npm:3.1.0" 946 | checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 947 | languageName: node 948 | linkType: hard 949 | 950 | "chai@npm:^4.3.10": 951 | version: 4.4.1 952 | resolution: "chai@npm:4.4.1" 953 | dependencies: 954 | assertion-error: "npm:^1.1.0" 955 | check-error: "npm:^1.0.3" 956 | deep-eql: "npm:^4.1.3" 957 | get-func-name: "npm:^2.0.2" 958 | loupe: "npm:^2.3.6" 959 | pathval: "npm:^1.1.1" 960 | type-detect: "npm:^4.0.8" 961 | checksum: c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae 962 | languageName: node 963 | linkType: hard 964 | 965 | "chalk-template@npm:^0.4.0": 966 | version: 0.4.0 967 | resolution: "chalk-template@npm:0.4.0" 968 | dependencies: 969 | chalk: "npm:^4.1.2" 970 | checksum: 6c706802a79a7963cbce18f022b046fe86e438a67843151868852f80ea7346e975a6a9749991601e7e5d3b6a6c4852a04c53dc966a9a3d04031bd0e0ed53c819 971 | languageName: node 972 | linkType: hard 973 | 974 | "chalk@npm:^2.4.2": 975 | version: 2.4.2 976 | resolution: "chalk@npm:2.4.2" 977 | dependencies: 978 | ansi-styles: "npm:^3.2.1" 979 | escape-string-regexp: "npm:^1.0.5" 980 | supports-color: "npm:^5.3.0" 981 | checksum: 3d1d103433166f6bfe82ac75724951b33769675252d8417317363ef9d54699b7c3b2d46671b772b893a8e50c3ece70c4b933c73c01e81bc60ea4df9b55afa303 982 | languageName: node 983 | linkType: hard 984 | 985 | "chalk@npm:^4.1.2": 986 | version: 4.1.2 987 | resolution: "chalk@npm:4.1.2" 988 | dependencies: 989 | ansi-styles: "npm:^4.1.0" 990 | supports-color: "npm:^7.1.0" 991 | checksum: cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 992 | languageName: node 993 | linkType: hard 994 | 995 | "check-error@npm:^1.0.3": 996 | version: 1.0.3 997 | resolution: "check-error@npm:1.0.3" 998 | dependencies: 999 | get-func-name: "npm:^2.0.2" 1000 | checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 1001 | languageName: node 1002 | linkType: hard 1003 | 1004 | "chownr@npm:^2.0.0": 1005 | version: 2.0.0 1006 | resolution: "chownr@npm:2.0.0" 1007 | checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f 1008 | languageName: node 1009 | linkType: hard 1010 | 1011 | "clean-stack@npm:^2.0.0": 1012 | version: 2.2.0 1013 | resolution: "clean-stack@npm:2.2.0" 1014 | checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 1015 | languageName: node 1016 | linkType: hard 1017 | 1018 | "color-convert@npm:^1.9.0": 1019 | version: 1.9.3 1020 | resolution: "color-convert@npm:1.9.3" 1021 | dependencies: 1022 | color-name: "npm:1.1.3" 1023 | checksum: ffa319025045f2973919d155f25e7c00d08836b6b33ea2d205418c59bd63a665d713c52d9737a9e0fe467fb194b40fbef1d849bae80d674568ee220a31ef3d10 1024 | languageName: node 1025 | linkType: hard 1026 | 1027 | "color-convert@npm:^2.0.1": 1028 | version: 2.0.1 1029 | resolution: "color-convert@npm:2.0.1" 1030 | dependencies: 1031 | color-name: "npm:~1.1.4" 1032 | checksum: fa00c91b4332b294de06b443923246bccebe9fab1b253f7fe1772d37b06a2269b4039a85e309abe1fe11b267b11c08d1d0473fda3badd6167f57313af2887a64 1033 | languageName: node 1034 | linkType: hard 1035 | 1036 | "color-name@npm:1.1.3": 1037 | version: 1.1.3 1038 | resolution: "color-name@npm:1.1.3" 1039 | checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d 1040 | languageName: node 1041 | linkType: hard 1042 | 1043 | "color-name@npm:~1.1.4": 1044 | version: 1.1.4 1045 | resolution: "color-name@npm:1.1.4" 1046 | checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 1047 | languageName: node 1048 | linkType: hard 1049 | 1050 | "command-line-args@npm:^5.2.1": 1051 | version: 5.2.1 1052 | resolution: "command-line-args@npm:5.2.1" 1053 | dependencies: 1054 | array-back: "npm:^3.1.0" 1055 | find-replace: "npm:^3.0.0" 1056 | lodash.camelcase: "npm:^4.3.0" 1057 | typical: "npm:^4.0.0" 1058 | checksum: e6a42652ae8843fbb56e2fba1e85da00a16a0482896bb1849092e1bc70b8bf353d945e69732bf4ae98370ff84e8910ff4933af8f2f747806a6b2cb5074799fdb 1059 | languageName: node 1060 | linkType: hard 1061 | 1062 | "command-line-usage@npm:^7.0.0, command-line-usage@npm:^7.0.1": 1063 | version: 7.0.1 1064 | resolution: "command-line-usage@npm:7.0.1" 1065 | dependencies: 1066 | array-back: "npm:^6.2.2" 1067 | chalk-template: "npm:^0.4.0" 1068 | table-layout: "npm:^3.0.0" 1069 | typical: "npm:^7.1.1" 1070 | checksum: 6b251477066c64f7c48ec149b5b3a47302ddd72bd44e1805aa2e39b2ea7c55fee7703cb03d560fb5c5d156ff616620e7ae60bd7ccc9b32a66b07131c350e2fb0 1071 | languageName: node 1072 | linkType: hard 1073 | 1074 | "commander@npm:^11.0.0": 1075 | version: 11.1.0 1076 | resolution: "commander@npm:11.1.0" 1077 | checksum: 66bd2d8a0547f6cb1d34022efb25f348e433b0e04ad76a65279b1b09da108f59a4d3001ca539c60a7a46ea38bcf399fc17d91adad76a8cf43845d8dcbaf5cda1 1078 | languageName: node 1079 | linkType: hard 1080 | 1081 | "commander@npm:^2.20.0": 1082 | version: 2.20.3 1083 | resolution: "commander@npm:2.20.3" 1084 | checksum: 90c5b6898610cd075984c58c4f88418a4fb44af08c1b1415e9854c03171bec31b336b7f3e4cefe33de994b3f12b03c5e2d638da4316df83593b9e82554e7e95b 1085 | languageName: node 1086 | linkType: hard 1087 | 1088 | "commondir@npm:^1.0.1": 1089 | version: 1.0.1 1090 | resolution: "commondir@npm:1.0.1" 1091 | checksum: 4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c 1092 | languageName: node 1093 | linkType: hard 1094 | 1095 | "concat-map@npm:0.0.1": 1096 | version: 0.0.1 1097 | resolution: "concat-map@npm:0.0.1" 1098 | checksum: 9680699c8e2b3af0ae22592cb764acaf973f292a7b71b8a06720233011853a58e256c89216a10cbe889727532fd77f8bcd49a760cedfde271b8e006c20e079f2 1099 | languageName: node 1100 | linkType: hard 1101 | 1102 | "create-require@npm:^1.1.0": 1103 | version: 1.1.1 1104 | resolution: "create-require@npm:1.1.1" 1105 | checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff 1106 | languageName: node 1107 | linkType: hard 1108 | 1109 | "cross-spawn@npm:^7.0.0": 1110 | version: 7.0.3 1111 | resolution: "cross-spawn@npm:7.0.3" 1112 | dependencies: 1113 | path-key: "npm:^3.1.0" 1114 | shebang-command: "npm:^2.0.0" 1115 | which: "npm:^2.0.1" 1116 | checksum: e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce 1117 | languageName: node 1118 | linkType: hard 1119 | 1120 | "debug@npm:4, debug@npm:^4.2.0, debug@npm:^4.3.4": 1121 | version: 4.3.4 1122 | resolution: "debug@npm:4.3.4" 1123 | dependencies: 1124 | ms: "npm:2.1.2" 1125 | peerDependenciesMeta: 1126 | supports-color: 1127 | optional: true 1128 | checksum: 0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 1129 | languageName: node 1130 | linkType: hard 1131 | 1132 | "deep-eql@npm:^4.1.3": 1133 | version: 4.1.3 1134 | resolution: "deep-eql@npm:4.1.3" 1135 | dependencies: 1136 | type-detect: "npm:^4.0.0" 1137 | checksum: 12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301 1138 | languageName: node 1139 | linkType: hard 1140 | 1141 | "deepmerge@npm:^4.2.2": 1142 | version: 4.3.1 1143 | resolution: "deepmerge@npm:4.3.1" 1144 | checksum: 058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 1145 | languageName: node 1146 | linkType: hard 1147 | 1148 | "diff-sequences@npm:^29.4.3": 1149 | version: 29.6.3 1150 | resolution: "diff-sequences@npm:29.6.3" 1151 | checksum: 179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb 1152 | languageName: node 1153 | linkType: hard 1154 | 1155 | "diff@npm:^4.0.1": 1156 | version: 4.0.2 1157 | resolution: "diff@npm:4.0.2" 1158 | checksum: ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 1159 | languageName: node 1160 | linkType: hard 1161 | 1162 | "eastasianwidth@npm:^0.2.0": 1163 | version: 0.2.0 1164 | resolution: "eastasianwidth@npm:0.2.0" 1165 | checksum: 9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 1166 | languageName: node 1167 | linkType: hard 1168 | 1169 | "email-addresses@npm:^5.0.0": 1170 | version: 5.0.0 1171 | resolution: "email-addresses@npm:5.0.0" 1172 | checksum: a7897e3b43893f1e9cc61f0e8c7cbe59c36c6cdd0b5ad7e4061f1976893260f496fd799fb78b2621e483a95fa6c7caec4a035ba320193d9540159dfcdb737004 1173 | languageName: node 1174 | linkType: hard 1175 | 1176 | "emoji-regex@npm:^8.0.0": 1177 | version: 8.0.0 1178 | resolution: "emoji-regex@npm:8.0.0" 1179 | checksum: c72d67a6821be15ec11997877c437491c313d924306b8da5d87d2a2bcc2cec9903cb5b04ee1a088460501d8e5b44f10df82fdc93c444101a7610b80c8b6938e1 1180 | languageName: node 1181 | linkType: hard 1182 | 1183 | "emoji-regex@npm:^9.2.2": 1184 | version: 9.2.2 1185 | resolution: "emoji-regex@npm:9.2.2" 1186 | checksum: 915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 1187 | languageName: node 1188 | linkType: hard 1189 | 1190 | "encoding@npm:^0.1.13": 1191 | version: 0.1.13 1192 | resolution: "encoding@npm:0.1.13" 1193 | dependencies: 1194 | iconv-lite: "npm:^0.6.2" 1195 | checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f 1196 | languageName: node 1197 | linkType: hard 1198 | 1199 | "env-paths@npm:^2.2.0": 1200 | version: 2.2.1 1201 | resolution: "env-paths@npm:2.2.1" 1202 | checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e 1203 | languageName: node 1204 | linkType: hard 1205 | 1206 | "err-code@npm:^2.0.2": 1207 | version: 2.0.3 1208 | resolution: "err-code@npm:2.0.3" 1209 | checksum: 1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd 1210 | languageName: node 1211 | linkType: hard 1212 | 1213 | "esbuild@npm:^0.19.3, esbuild@npm:^0.19.8": 1214 | version: 0.19.12 1215 | resolution: "esbuild@npm:0.19.12" 1216 | dependencies: 1217 | "@esbuild/aix-ppc64": "npm:0.19.12" 1218 | "@esbuild/android-arm": "npm:0.19.12" 1219 | "@esbuild/android-arm64": "npm:0.19.12" 1220 | "@esbuild/android-x64": "npm:0.19.12" 1221 | "@esbuild/darwin-arm64": "npm:0.19.12" 1222 | "@esbuild/darwin-x64": "npm:0.19.12" 1223 | "@esbuild/freebsd-arm64": "npm:0.19.12" 1224 | "@esbuild/freebsd-x64": "npm:0.19.12" 1225 | "@esbuild/linux-arm": "npm:0.19.12" 1226 | "@esbuild/linux-arm64": "npm:0.19.12" 1227 | "@esbuild/linux-ia32": "npm:0.19.12" 1228 | "@esbuild/linux-loong64": "npm:0.19.12" 1229 | "@esbuild/linux-mips64el": "npm:0.19.12" 1230 | "@esbuild/linux-ppc64": "npm:0.19.12" 1231 | "@esbuild/linux-riscv64": "npm:0.19.12" 1232 | "@esbuild/linux-s390x": "npm:0.19.12" 1233 | "@esbuild/linux-x64": "npm:0.19.12" 1234 | "@esbuild/netbsd-x64": "npm:0.19.12" 1235 | "@esbuild/openbsd-x64": "npm:0.19.12" 1236 | "@esbuild/sunos-x64": "npm:0.19.12" 1237 | "@esbuild/win32-arm64": "npm:0.19.12" 1238 | "@esbuild/win32-ia32": "npm:0.19.12" 1239 | "@esbuild/win32-x64": "npm:0.19.12" 1240 | dependenciesMeta: 1241 | "@esbuild/aix-ppc64": 1242 | optional: true 1243 | "@esbuild/android-arm": 1244 | optional: true 1245 | "@esbuild/android-arm64": 1246 | optional: true 1247 | "@esbuild/android-x64": 1248 | optional: true 1249 | "@esbuild/darwin-arm64": 1250 | optional: true 1251 | "@esbuild/darwin-x64": 1252 | optional: true 1253 | "@esbuild/freebsd-arm64": 1254 | optional: true 1255 | "@esbuild/freebsd-x64": 1256 | optional: true 1257 | "@esbuild/linux-arm": 1258 | optional: true 1259 | "@esbuild/linux-arm64": 1260 | optional: true 1261 | "@esbuild/linux-ia32": 1262 | optional: true 1263 | "@esbuild/linux-loong64": 1264 | optional: true 1265 | "@esbuild/linux-mips64el": 1266 | optional: true 1267 | "@esbuild/linux-ppc64": 1268 | optional: true 1269 | "@esbuild/linux-riscv64": 1270 | optional: true 1271 | "@esbuild/linux-s390x": 1272 | optional: true 1273 | "@esbuild/linux-x64": 1274 | optional: true 1275 | "@esbuild/netbsd-x64": 1276 | optional: true 1277 | "@esbuild/openbsd-x64": 1278 | optional: true 1279 | "@esbuild/sunos-x64": 1280 | optional: true 1281 | "@esbuild/win32-arm64": 1282 | optional: true 1283 | "@esbuild/win32-ia32": 1284 | optional: true 1285 | "@esbuild/win32-x64": 1286 | optional: true 1287 | bin: 1288 | esbuild: bin/esbuild 1289 | checksum: 861fa8eb2428e8d6521a4b7c7930139e3f45e8d51a86985cc29408172a41f6b18df7b3401e7e5e2d528cdf83742da601ddfdc77043ddc4f1c715a8ddb2d8a255 1290 | languageName: node 1291 | linkType: hard 1292 | 1293 | "escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": 1294 | version: 1.0.5 1295 | resolution: "escape-string-regexp@npm:1.0.5" 1296 | checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 1297 | languageName: node 1298 | linkType: hard 1299 | 1300 | "esm@npm:^3.2.25": 1301 | version: 3.2.25 1302 | resolution: "esm@npm:3.2.25" 1303 | checksum: ee96b8202b76dd1841c55e8a066608d6f0ae0333012be5c77829ccadcd21114283b4d7bf9ac1b8c09853258829c7843e9c6d7e0594acbc5e813cb37d82728d4b 1304 | languageName: node 1305 | linkType: hard 1306 | 1307 | "estree-walker@npm:^2.0.2": 1308 | version: 2.0.2 1309 | resolution: "estree-walker@npm:2.0.2" 1310 | checksum: b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 1311 | languageName: node 1312 | linkType: hard 1313 | 1314 | "exponential-backoff@npm:^3.1.1": 1315 | version: 3.1.1 1316 | resolution: "exponential-backoff@npm:3.1.1" 1317 | checksum: 2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd 1318 | languageName: node 1319 | linkType: hard 1320 | 1321 | "filename-reserved-regex@npm:^2.0.0": 1322 | version: 2.0.0 1323 | resolution: "filename-reserved-regex@npm:2.0.0" 1324 | checksum: 9322b45726b86c45d0b4fe91be5c51e62b2e7e63db02c4a6ff3fd499bbc134d12fbf3c8b91979440ef45b3be834698ab9c3e66cb63b79fea4817e33da237d32a 1325 | languageName: node 1326 | linkType: hard 1327 | 1328 | "filenamify@npm:^4.3.0": 1329 | version: 4.3.0 1330 | resolution: "filenamify@npm:4.3.0" 1331 | dependencies: 1332 | filename-reserved-regex: "npm:^2.0.0" 1333 | strip-outer: "npm:^1.0.1" 1334 | trim-repeated: "npm:^1.0.0" 1335 | checksum: 5b71a7ff8e958c8621957e6fbf7872024126d3b5da50f59b1634af3343ba1a69d4cc15cfe4ca4bbfa7c959ad4d98614ee51e6f1d9fa7326eef8ceda2da8cd74e 1336 | languageName: node 1337 | linkType: hard 1338 | 1339 | "find-cache-dir@npm:^3.3.1": 1340 | version: 3.3.2 1341 | resolution: "find-cache-dir@npm:3.3.2" 1342 | dependencies: 1343 | commondir: "npm:^1.0.1" 1344 | make-dir: "npm:^3.0.2" 1345 | pkg-dir: "npm:^4.1.0" 1346 | checksum: 3907c2e0b15132704ed67083686cd3e68ab7d9ecc22e50ae9da20678245d488b01fa22c0e34c0544dc6edc4354c766f016c8c186a787be7c17f7cde8c5281e85 1347 | languageName: node 1348 | linkType: hard 1349 | 1350 | "find-replace@npm:^3.0.0": 1351 | version: 3.0.0 1352 | resolution: "find-replace@npm:3.0.0" 1353 | dependencies: 1354 | array-back: "npm:^3.0.1" 1355 | checksum: 6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 1356 | languageName: node 1357 | linkType: hard 1358 | 1359 | "find-up@npm:^4.0.0": 1360 | version: 4.1.0 1361 | resolution: "find-up@npm:4.1.0" 1362 | dependencies: 1363 | locate-path: "npm:^5.0.0" 1364 | path-exists: "npm:^4.0.0" 1365 | checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 1366 | languageName: node 1367 | linkType: hard 1368 | 1369 | "flatbuffers@npm:^23.5.26": 1370 | version: 23.5.26 1371 | resolution: "flatbuffers@npm:23.5.26" 1372 | checksum: f4add4f11414d3bef3a6e10525709c1766cbe3084c59e1cd98d871bde89eaf1c076ccc55913efc6125bdd6558d254a0d28adb73b544c79a69f961ba89bd1833f 1373 | languageName: node 1374 | linkType: hard 1375 | 1376 | "foreground-child@npm:^3.1.0": 1377 | version: 3.1.1 1378 | resolution: "foreground-child@npm:3.1.1" 1379 | dependencies: 1380 | cross-spawn: "npm:^7.0.0" 1381 | signal-exit: "npm:^4.0.1" 1382 | checksum: 087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb 1383 | languageName: node 1384 | linkType: hard 1385 | 1386 | "fs-extra@npm:^11.1.1": 1387 | version: 11.2.0 1388 | resolution: "fs-extra@npm:11.2.0" 1389 | dependencies: 1390 | graceful-fs: "npm:^4.2.0" 1391 | jsonfile: "npm:^6.0.1" 1392 | universalify: "npm:^2.0.0" 1393 | checksum: 0579bf6726a4cd054d4aa308f10b483f52478bb16284f32cf60b4ce0542063d551fca1a08a2af365e35db21a3fa5a06cf2a6ed614004b4368982bc754cb816b3 1394 | languageName: node 1395 | linkType: hard 1396 | 1397 | "fs-minipass@npm:^2.0.0": 1398 | version: 2.1.0 1399 | resolution: "fs-minipass@npm:2.1.0" 1400 | dependencies: 1401 | minipass: "npm:^3.0.0" 1402 | checksum: 03191781e94bc9a54bd376d3146f90fe8e082627c502185dbf7b9b3032f66b0b142c1115f3b2cc5936575fc1b44845ce903dd4c21bec2a8d69f3bd56f9cee9ec 1403 | languageName: node 1404 | linkType: hard 1405 | 1406 | "fs-minipass@npm:^3.0.0": 1407 | version: 3.0.3 1408 | resolution: "fs-minipass@npm:3.0.3" 1409 | dependencies: 1410 | minipass: "npm:^7.0.3" 1411 | checksum: af143246cf6884fe26fa281621d45cfe111d34b30535a475bfa38dafe343dadb466c047a924ffc7d6b7b18265df4110224ce3803806dbb07173bf2087b648d7f 1412 | languageName: node 1413 | linkType: hard 1414 | 1415 | "fs.realpath@npm:^1.0.0": 1416 | version: 1.0.0 1417 | resolution: "fs.realpath@npm:1.0.0" 1418 | checksum: e703107c28e362d8d7b910bbcbfd371e640a3bb45ae157a362b5952c0030c0b6d4981140ec319b347bce7adc025dd7813da1ff908a945ac214d64f5402a51b96 1419 | languageName: node 1420 | linkType: hard 1421 | 1422 | "fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": 1423 | version: 2.3.3 1424 | resolution: "fsevents@npm:2.3.3" 1425 | dependencies: 1426 | node-gyp: "npm:latest" 1427 | checksum: 4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 1428 | conditions: os=darwin 1429 | languageName: node 1430 | linkType: hard 1431 | 1432 | "fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": 1433 | version: 2.3.3 1434 | resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" 1435 | dependencies: 1436 | node-gyp: "npm:latest" 1437 | conditions: os=darwin 1438 | languageName: node 1439 | linkType: hard 1440 | 1441 | "function-bind@npm:^1.1.2": 1442 | version: 1.1.2 1443 | resolution: "function-bind@npm:1.1.2" 1444 | checksum: 185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 1445 | languageName: node 1446 | linkType: hard 1447 | 1448 | "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": 1449 | version: 2.0.2 1450 | resolution: "get-func-name@npm:2.0.2" 1451 | checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b 1452 | languageName: node 1453 | linkType: hard 1454 | 1455 | "gh-pages@npm:^6.1.0": 1456 | version: 6.1.1 1457 | resolution: "gh-pages@npm:6.1.1" 1458 | dependencies: 1459 | async: "npm:^3.2.4" 1460 | commander: "npm:^11.0.0" 1461 | email-addresses: "npm:^5.0.0" 1462 | filenamify: "npm:^4.3.0" 1463 | find-cache-dir: "npm:^3.3.1" 1464 | fs-extra: "npm:^11.1.1" 1465 | globby: "npm:^6.1.0" 1466 | bin: 1467 | gh-pages: bin/gh-pages.js 1468 | gh-pages-clean: bin/gh-pages-clean.js 1469 | checksum: b821a1f24bfa7070e3a8fbc8e4956a137511bb17d8c3e3eaad27eefabb8ccdf61f41d891cac11c0f476f3c5b3078fdcbd3e61e8d960a7e9e6af16c02cd62f971 1470 | languageName: node 1471 | linkType: hard 1472 | 1473 | "glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": 1474 | version: 10.3.10 1475 | resolution: "glob@npm:10.3.10" 1476 | dependencies: 1477 | foreground-child: "npm:^3.1.0" 1478 | jackspeak: "npm:^2.3.5" 1479 | minimatch: "npm:^9.0.1" 1480 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 1481 | path-scurry: "npm:^1.10.1" 1482 | bin: 1483 | glob: dist/esm/bin.mjs 1484 | checksum: 38bdb2c9ce75eb5ed168f309d4ed05b0798f640b637034800a6bf306f39d35409bf278b0eaaffaec07591085d3acb7184a201eae791468f0f617771c2486a6a8 1485 | languageName: node 1486 | linkType: hard 1487 | 1488 | "glob@npm:^7.0.3": 1489 | version: 7.2.3 1490 | resolution: "glob@npm:7.2.3" 1491 | dependencies: 1492 | fs.realpath: "npm:^1.0.0" 1493 | inflight: "npm:^1.0.4" 1494 | inherits: "npm:2" 1495 | minimatch: "npm:^3.1.1" 1496 | once: "npm:^1.3.0" 1497 | path-is-absolute: "npm:^1.0.0" 1498 | checksum: 59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b 1499 | languageName: node 1500 | linkType: hard 1501 | 1502 | "globby@npm:^6.1.0": 1503 | version: 6.1.0 1504 | resolution: "globby@npm:6.1.0" 1505 | dependencies: 1506 | array-union: "npm:^1.0.1" 1507 | glob: "npm:^7.0.3" 1508 | object-assign: "npm:^4.0.1" 1509 | pify: "npm:^2.0.0" 1510 | pinkie-promise: "npm:^2.0.0" 1511 | checksum: 18109d6b9d55643d2b98b59c3cfae7073ccfe39829632f353d516cc124d836c2ddebe48a23f04af63d66a621b6d86dd4cbd7e6af906f2458a7fe510ffc4bd424 1512 | languageName: node 1513 | linkType: hard 1514 | 1515 | "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": 1516 | version: 4.2.11 1517 | resolution: "graceful-fs@npm:4.2.11" 1518 | checksum: bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 1519 | languageName: node 1520 | linkType: hard 1521 | 1522 | "has-flag@npm:^3.0.0": 1523 | version: 3.0.0 1524 | resolution: "has-flag@npm:3.0.0" 1525 | checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b 1526 | languageName: node 1527 | linkType: hard 1528 | 1529 | "has-flag@npm:^4.0.0": 1530 | version: 4.0.0 1531 | resolution: "has-flag@npm:4.0.0" 1532 | checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad 1533 | languageName: node 1534 | linkType: hard 1535 | 1536 | "hasown@npm:^2.0.0": 1537 | version: 2.0.1 1538 | resolution: "hasown@npm:2.0.1" 1539 | dependencies: 1540 | function-bind: "npm:^1.1.2" 1541 | checksum: b7f9107387ee68abed88e965c2b99e868b5e0e9d289db1ddd080706ffafb69533b4f538b0e6362585bae8d6cbd080249f65e79702f74c225990f66d6106be3f6 1542 | languageName: node 1543 | linkType: hard 1544 | 1545 | "http-cache-semantics@npm:^4.1.1": 1546 | version: 4.1.1 1547 | resolution: "http-cache-semantics@npm:4.1.1" 1548 | checksum: 362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f 1549 | languageName: node 1550 | linkType: hard 1551 | 1552 | "http-proxy-agent@npm:^7.0.0": 1553 | version: 7.0.2 1554 | resolution: "http-proxy-agent@npm:7.0.2" 1555 | dependencies: 1556 | agent-base: "npm:^7.1.0" 1557 | debug: "npm:^4.3.4" 1558 | checksum: d062acfa0cb82beeb558f1043c6ba770ea892b5fb7b28654dbc70ea2aeea55226dd34c02a294f6c1ca179a5aa483c4ea641846821b182edbd9cc5d89b54c6848 1559 | languageName: node 1560 | linkType: hard 1561 | 1562 | "https-proxy-agent@npm:^7.0.1": 1563 | version: 7.0.4 1564 | resolution: "https-proxy-agent@npm:7.0.4" 1565 | dependencies: 1566 | agent-base: "npm:^7.0.2" 1567 | debug: "npm:4" 1568 | checksum: 405fe582bba461bfe5c7e2f8d752b384036854488b828ae6df6a587c654299cbb2c50df38c4b6ab303502c3c5e029a793fbaac965d1e86ee0be03faceb554d63 1569 | languageName: node 1570 | linkType: hard 1571 | 1572 | "iconv-lite@npm:^0.6.2": 1573 | version: 0.6.3 1574 | resolution: "iconv-lite@npm:0.6.3" 1575 | dependencies: 1576 | safer-buffer: "npm:>= 2.1.2 < 3.0.0" 1577 | checksum: 24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f 1578 | languageName: node 1579 | linkType: hard 1580 | 1581 | "imurmurhash@npm:^0.1.4": 1582 | version: 0.1.4 1583 | resolution: "imurmurhash@npm:0.1.4" 1584 | checksum: 2d30b157a91fe1c1d7c6f653cbf263f039be6c5bfa959245a16d4ee191fc0f2af86c08545b6e6beeb041c56b574d2d5b9f95343d378ab49c0f37394d541e7fc8 1585 | languageName: node 1586 | linkType: hard 1587 | 1588 | "indent-string@npm:^4.0.0": 1589 | version: 4.0.0 1590 | resolution: "indent-string@npm:4.0.0" 1591 | checksum: cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9 1592 | languageName: node 1593 | linkType: hard 1594 | 1595 | "inflight@npm:^1.0.4": 1596 | version: 1.0.6 1597 | resolution: "inflight@npm:1.0.6" 1598 | dependencies: 1599 | once: "npm:^1.3.0" 1600 | wrappy: "npm:1" 1601 | checksum: d2ebd65441a38c8336c223d1b80b921b9fa737e37ea466fd7e253cb000c64ae1f17fa59e68130ef5bda92cfd8d36b83d37dab0eb0a4558bcfec8e8cdfd2dcb67 1602 | languageName: node 1603 | linkType: hard 1604 | 1605 | "inherits@npm:2": 1606 | version: 2.0.4 1607 | resolution: "inherits@npm:2.0.4" 1608 | checksum: cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 1609 | languageName: node 1610 | linkType: hard 1611 | 1612 | "ip-address@npm:^9.0.5": 1613 | version: 9.0.5 1614 | resolution: "ip-address@npm:9.0.5" 1615 | dependencies: 1616 | jsbn: "npm:1.1.0" 1617 | sprintf-js: "npm:^1.1.3" 1618 | checksum: 1ed81e06721af012306329b31f532b5e24e00cb537be18ddc905a84f19fe8f83a09a1699862bf3a1ec4b9dea93c55a3fa5faf8b5ea380431469df540f38b092c 1619 | languageName: node 1620 | linkType: hard 1621 | 1622 | "is-builtin-module@npm:^3.2.1": 1623 | version: 3.2.1 1624 | resolution: "is-builtin-module@npm:3.2.1" 1625 | dependencies: 1626 | builtin-modules: "npm:^3.3.0" 1627 | checksum: e8f0ffc19a98240bda9c7ada84d846486365af88d14616e737d280d378695c8c448a621dcafc8332dbf0fcd0a17b0763b845400709963fa9151ddffece90ae88 1628 | languageName: node 1629 | linkType: hard 1630 | 1631 | "is-core-module@npm:^2.13.0": 1632 | version: 2.13.1 1633 | resolution: "is-core-module@npm:2.13.1" 1634 | dependencies: 1635 | hasown: "npm:^2.0.0" 1636 | checksum: d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 1637 | languageName: node 1638 | linkType: hard 1639 | 1640 | "is-fullwidth-code-point@npm:^3.0.0": 1641 | version: 3.0.0 1642 | resolution: "is-fullwidth-code-point@npm:3.0.0" 1643 | checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 1644 | languageName: node 1645 | linkType: hard 1646 | 1647 | "is-lambda@npm:^1.0.1": 1648 | version: 1.0.1 1649 | resolution: "is-lambda@npm:1.0.1" 1650 | checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 1651 | languageName: node 1652 | linkType: hard 1653 | 1654 | "is-module@npm:^1.0.0": 1655 | version: 1.0.0 1656 | resolution: "is-module@npm:1.0.0" 1657 | checksum: 8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f 1658 | languageName: node 1659 | linkType: hard 1660 | 1661 | "is-observable@npm:^2.1.0": 1662 | version: 2.1.0 1663 | resolution: "is-observable@npm:2.1.0" 1664 | checksum: 93b0e0f9b115ef4b5f0523f4930667a7809a42e9cf1b23a444f8a9c15f72b9c1729b2a4691d55a5c479a05eafd5dda9b51ed1b65336d56027b7989ecb8ef51bf 1665 | languageName: node 1666 | linkType: hard 1667 | 1668 | "isexe@npm:^2.0.0": 1669 | version: 2.0.0 1670 | resolution: "isexe@npm:2.0.0" 1671 | checksum: 7c9f715c03aff08f35e98b1fadae1b9267b38f0615d501824f9743f3aab99ef10e303ce7db3f186763a0b70a19de5791ebfc854ff884d5a8c4d92211f642ec92 1672 | languageName: node 1673 | linkType: hard 1674 | 1675 | "isexe@npm:^3.1.1": 1676 | version: 3.1.1 1677 | resolution: "isexe@npm:3.1.1" 1678 | checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e 1679 | languageName: node 1680 | linkType: hard 1681 | 1682 | "jackspeak@npm:^2.3.5": 1683 | version: 2.3.6 1684 | resolution: "jackspeak@npm:2.3.6" 1685 | dependencies: 1686 | "@isaacs/cliui": "npm:^8.0.2" 1687 | "@pkgjs/parseargs": "npm:^0.11.0" 1688 | dependenciesMeta: 1689 | "@pkgjs/parseargs": 1690 | optional: true 1691 | checksum: 6e6490d676af8c94a7b5b29b8fd5629f21346911ebe2e32931c2a54210134408171c24cee1a109df2ec19894ad04a429402a8438cbf5cc2794585d35428ace76 1692 | languageName: node 1693 | linkType: hard 1694 | 1695 | "js-tokens@npm:^4.0.0": 1696 | version: 4.0.0 1697 | resolution: "js-tokens@npm:4.0.0" 1698 | checksum: af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 1699 | languageName: node 1700 | linkType: hard 1701 | 1702 | "jsbn@npm:1.1.0": 1703 | version: 1.1.0 1704 | resolution: "jsbn@npm:1.1.0" 1705 | checksum: bebe7ae829bbd586ce8cbe83501dd8cb8c282c8902a8aeeed0a073a89dc37e8103b1244f3c6acd60278bcbfe12d93a3f83c9ac396868a3b3bbc3c5e5e3b648ef 1706 | languageName: node 1707 | linkType: hard 1708 | 1709 | "json-bignum@npm:^0.0.3": 1710 | version: 0.0.3 1711 | resolution: "json-bignum@npm:0.0.3" 1712 | checksum: 9aa6e0567151b8eadfc2eea67734c090e6ef776c79d0f2776be0265285545f33929e6534f67942392038695d94147f11111e930796e812e89b4a35ada4904af7 1713 | languageName: node 1714 | linkType: hard 1715 | 1716 | "jsonc-parser@npm:^3.2.0": 1717 | version: 3.2.1 1718 | resolution: "jsonc-parser@npm:3.2.1" 1719 | checksum: fe2df6f39e21653781d52cae20c5b9e0ab62461918d97f9430b216cea9b6500efc1d8b42c6584cc0a7548b4c996055e9cdc39f09b9782fa6957af2f45306c530 1720 | languageName: node 1721 | linkType: hard 1722 | 1723 | "jsonfile@npm:^6.0.1": 1724 | version: 6.1.0 1725 | resolution: "jsonfile@npm:6.1.0" 1726 | dependencies: 1727 | graceful-fs: "npm:^4.1.6" 1728 | universalify: "npm:^2.0.0" 1729 | dependenciesMeta: 1730 | graceful-fs: 1731 | optional: true 1732 | checksum: 03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 1733 | languageName: node 1734 | linkType: hard 1735 | 1736 | "local-pkg@npm:^0.4.3": 1737 | version: 0.4.3 1738 | resolution: "local-pkg@npm:0.4.3" 1739 | checksum: 48f38c12721881370bca50ed3b5e3cc6fef741cfb4de7e48666f6ded07c1aaea53cf770cfef84a89bed286c17631111bf99a86241ddf6f679408c79c56f29560 1740 | languageName: node 1741 | linkType: hard 1742 | 1743 | "locate-path@npm:^5.0.0": 1744 | version: 5.0.0 1745 | resolution: "locate-path@npm:5.0.0" 1746 | dependencies: 1747 | p-locate: "npm:^4.1.0" 1748 | checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 1749 | languageName: node 1750 | linkType: hard 1751 | 1752 | "lodash.assignwith@npm:^4.2.0": 1753 | version: 4.2.0 1754 | resolution: "lodash.assignwith@npm:4.2.0" 1755 | checksum: f313e1c9c36b67d160a15006b03f95da46dc246f35adbcfd10c2b3e93bb92de6f2cf4bad744a83e0324609913b3eaac1b92ab447b1a409cee00962a138df5a6e 1756 | languageName: node 1757 | linkType: hard 1758 | 1759 | "lodash.camelcase@npm:^4.3.0": 1760 | version: 4.3.0 1761 | resolution: "lodash.camelcase@npm:4.3.0" 1762 | checksum: c301cc379310441dc73cd6cebeb91fb254bea74e6ad3027f9346fc43b4174385153df420ffa521654e502fd34c40ef69ca4e7d40ee7129a99e06f306032bfc65 1763 | languageName: node 1764 | linkType: hard 1765 | 1766 | "loupe@npm:^2.3.6": 1767 | version: 2.3.7 1768 | resolution: "loupe@npm:2.3.7" 1769 | dependencies: 1770 | get-func-name: "npm:^2.0.1" 1771 | checksum: 635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1 1772 | languageName: node 1773 | linkType: hard 1774 | 1775 | "lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": 1776 | version: 10.2.0 1777 | resolution: "lru-cache@npm:10.2.0" 1778 | checksum: 502ec42c3309c0eae1ce41afca471f831c278566d45a5273a0c51102dee31e0e250a62fa9029c3370988df33a14188a38e682c16143b794de78668de3643e302 1779 | languageName: node 1780 | linkType: hard 1781 | 1782 | "lru-cache@npm:^6.0.0": 1783 | version: 6.0.0 1784 | resolution: "lru-cache@npm:6.0.0" 1785 | dependencies: 1786 | yallist: "npm:^4.0.0" 1787 | checksum: fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 1788 | languageName: node 1789 | linkType: hard 1790 | 1791 | "lunr@npm:^2.3.9": 1792 | version: 2.3.9 1793 | resolution: "lunr@npm:2.3.9" 1794 | checksum: f2f6db34c046f5a767782fe2454e6dd69c75ba3c5cf5c1cb9cacca2313a99c2ba78ff8fa67dac866fb7c4ffd5f22e06684793f5f15ba14bddb598b94513d54bf 1795 | languageName: node 1796 | linkType: hard 1797 | 1798 | "magic-string@npm:^0.30.1, magic-string@npm:^0.30.4": 1799 | version: 0.30.8 1800 | resolution: "magic-string@npm:0.30.8" 1801 | dependencies: 1802 | "@jridgewell/sourcemap-codec": "npm:^1.4.15" 1803 | checksum: 72ab63817af600e92c19dc8489c1aa4a9599da00cfd59b2319709bd48fb0cf533fdf354bf140ac86e598dbd63e6b2cc83647fe8448f864a3eb6061c62c94e784 1804 | languageName: node 1805 | linkType: hard 1806 | 1807 | "make-dir@npm:^3.0.2": 1808 | version: 3.1.0 1809 | resolution: "make-dir@npm:3.1.0" 1810 | dependencies: 1811 | semver: "npm:^6.0.0" 1812 | checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 1813 | languageName: node 1814 | linkType: hard 1815 | 1816 | "make-error@npm:^1.1.1": 1817 | version: 1.3.6 1818 | resolution: "make-error@npm:1.3.6" 1819 | checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 1820 | languageName: node 1821 | linkType: hard 1822 | 1823 | "make-fetch-happen@npm:^13.0.0": 1824 | version: 13.0.0 1825 | resolution: "make-fetch-happen@npm:13.0.0" 1826 | dependencies: 1827 | "@npmcli/agent": "npm:^2.0.0" 1828 | cacache: "npm:^18.0.0" 1829 | http-cache-semantics: "npm:^4.1.1" 1830 | is-lambda: "npm:^1.0.1" 1831 | minipass: "npm:^7.0.2" 1832 | minipass-fetch: "npm:^3.0.0" 1833 | minipass-flush: "npm:^1.0.5" 1834 | minipass-pipeline: "npm:^1.2.4" 1835 | negotiator: "npm:^0.6.3" 1836 | promise-retry: "npm:^2.0.1" 1837 | ssri: "npm:^10.0.0" 1838 | checksum: ded5a91a02b76381b06a4ec4d5c1d23ebbde15d402b3c3e4533b371dac7e2f7ca071ae71ae6dae72aa261182557b7b1b3fd3a705b39252dc17f74fa509d3e76f 1839 | languageName: node 1840 | linkType: hard 1841 | 1842 | "marked@npm:^4.3.0": 1843 | version: 4.3.0 1844 | resolution: "marked@npm:4.3.0" 1845 | bin: 1846 | marked: bin/marked.js 1847 | checksum: c830bb4cb3705b754ca342b656e8a582d7428706b2678c898b856f6030c134ce2d1e19136efa3e6a1841f7330efbd24963d6bdeddc57d2938e906250f99895d0 1848 | languageName: node 1849 | linkType: hard 1850 | 1851 | "mgrs@npm:1.0.0": 1852 | version: 1.0.0 1853 | resolution: "mgrs@npm:1.0.0" 1854 | checksum: 102f4a0decb474db88125a841a6b9eaac75d0efe0b0f84e603a48cf56ec1f53ae5b70a74171c2ce4abfa5d0399f626f038bba9d2ca901d5629192f24a76b09bc 1855 | languageName: node 1856 | linkType: hard 1857 | 1858 | "minimatch@npm:^3.1.1": 1859 | version: 3.1.2 1860 | resolution: "minimatch@npm:3.1.2" 1861 | dependencies: 1862 | brace-expansion: "npm:^1.1.7" 1863 | checksum: e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 1864 | languageName: node 1865 | linkType: hard 1866 | 1867 | "minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": 1868 | version: 9.0.3 1869 | resolution: "minimatch@npm:9.0.3" 1870 | dependencies: 1871 | brace-expansion: "npm:^2.0.1" 1872 | checksum: c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 1873 | languageName: node 1874 | linkType: hard 1875 | 1876 | "minipass-collect@npm:^2.0.1": 1877 | version: 2.0.1 1878 | resolution: "minipass-collect@npm:2.0.1" 1879 | dependencies: 1880 | minipass: "npm:^7.0.3" 1881 | checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 1882 | languageName: node 1883 | linkType: hard 1884 | 1885 | "minipass-fetch@npm:^3.0.0": 1886 | version: 3.0.4 1887 | resolution: "minipass-fetch@npm:3.0.4" 1888 | dependencies: 1889 | encoding: "npm:^0.1.13" 1890 | minipass: "npm:^7.0.3" 1891 | minipass-sized: "npm:^1.0.3" 1892 | minizlib: "npm:^2.1.2" 1893 | dependenciesMeta: 1894 | encoding: 1895 | optional: true 1896 | checksum: 3edf72b900e30598567eafe96c30374432a8709e61bb06b87198fa3192d466777e2ec21c52985a0999044fa6567bd6f04651585983a1cbb27e2c1770a07ed2a2 1897 | languageName: node 1898 | linkType: hard 1899 | 1900 | "minipass-flush@npm:^1.0.5": 1901 | version: 1.0.5 1902 | resolution: "minipass-flush@npm:1.0.5" 1903 | dependencies: 1904 | minipass: "npm:^3.0.0" 1905 | checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf 1906 | languageName: node 1907 | linkType: hard 1908 | 1909 | "minipass-pipeline@npm:^1.2.4": 1910 | version: 1.2.4 1911 | resolution: "minipass-pipeline@npm:1.2.4" 1912 | dependencies: 1913 | minipass: "npm:^3.0.0" 1914 | checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b 1915 | languageName: node 1916 | linkType: hard 1917 | 1918 | "minipass-sized@npm:^1.0.3": 1919 | version: 1.0.3 1920 | resolution: "minipass-sized@npm:1.0.3" 1921 | dependencies: 1922 | minipass: "npm:^3.0.0" 1923 | checksum: 40982d8d836a52b0f37049a0a7e5d0f089637298e6d9b45df9c115d4f0520682a78258905e5c8b180fb41b593b0a82cc1361d2c74b45f7ada66334f84d1ecfdd 1924 | languageName: node 1925 | linkType: hard 1926 | 1927 | "minipass@npm:^3.0.0": 1928 | version: 3.3.6 1929 | resolution: "minipass@npm:3.3.6" 1930 | dependencies: 1931 | yallist: "npm:^4.0.0" 1932 | checksum: a5c6ef069f70d9a524d3428af39f2b117ff8cd84172e19b754e7264a33df460873e6eb3d6e55758531580970de50ae950c496256bb4ad3691a2974cddff189f0 1933 | languageName: node 1934 | linkType: hard 1935 | 1936 | "minipass@npm:^5.0.0": 1937 | version: 5.0.0 1938 | resolution: "minipass@npm:5.0.0" 1939 | checksum: 61682162d29f45d3152b78b08bab7fb32ca10899bc5991ffe98afc18c9e9543bd1e3be94f8b8373ba6262497db63607079dc242ea62e43e7b2270837b7347c93 1940 | languageName: node 1941 | linkType: hard 1942 | 1943 | "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": 1944 | version: 7.0.4 1945 | resolution: "minipass@npm:7.0.4" 1946 | checksum: e864bd02ceb5e0707696d58f7ce3a0b89233f0d686ef0d447a66db705c0846a8dc6f34865cd85256c1472ff623665f616b90b8ff58058b2ad996c5de747d2d18 1947 | languageName: node 1948 | linkType: hard 1949 | 1950 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": 1951 | version: 2.1.2 1952 | resolution: "minizlib@npm:2.1.2" 1953 | dependencies: 1954 | minipass: "npm:^3.0.0" 1955 | yallist: "npm:^4.0.0" 1956 | checksum: ae0f45436fb51344dcb87938446a32fbebb540d0e191d63b35e1c773d47512e17307bf54aa88326cc6d176594d00e4423563a091f7266c2f9a6872cdc1e234d1 1957 | languageName: node 1958 | linkType: hard 1959 | 1960 | "mkdirp@npm:^1.0.3": 1961 | version: 1.0.4 1962 | resolution: "mkdirp@npm:1.0.4" 1963 | bin: 1964 | mkdirp: bin/cmd.js 1965 | checksum: d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2 1966 | languageName: node 1967 | linkType: hard 1968 | 1969 | "mlly@npm:^1.2.0, mlly@npm:^1.4.0": 1970 | version: 1.6.1 1971 | resolution: "mlly@npm:1.6.1" 1972 | dependencies: 1973 | acorn: "npm:^8.11.3" 1974 | pathe: "npm:^1.1.2" 1975 | pkg-types: "npm:^1.0.3" 1976 | ufo: "npm:^1.3.2" 1977 | checksum: 00b4c355236eb3d0294106f208718db486f6e34e28bbb7f6965bd9d6237db338e566f2e13489fbf8bfa9b1337c0f2568d4aeac1840f9963054c91881acc974a9 1978 | languageName: node 1979 | linkType: hard 1980 | 1981 | "ms@npm:2.1.2": 1982 | version: 2.1.2 1983 | resolution: "ms@npm:2.1.2" 1984 | checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f 1985 | languageName: node 1986 | linkType: hard 1987 | 1988 | "nanoid@npm:^3.3.7": 1989 | version: 3.3.7 1990 | resolution: "nanoid@npm:3.3.7" 1991 | bin: 1992 | nanoid: bin/nanoid.cjs 1993 | checksum: ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 1994 | languageName: node 1995 | linkType: hard 1996 | 1997 | "negotiator@npm:^0.6.3": 1998 | version: 0.6.3 1999 | resolution: "negotiator@npm:0.6.3" 2000 | checksum: 2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 2001 | languageName: node 2002 | linkType: hard 2003 | 2004 | "node-gyp@npm:latest": 2005 | version: 10.0.1 2006 | resolution: "node-gyp@npm:10.0.1" 2007 | dependencies: 2008 | env-paths: "npm:^2.2.0" 2009 | exponential-backoff: "npm:^3.1.1" 2010 | glob: "npm:^10.3.10" 2011 | graceful-fs: "npm:^4.2.6" 2012 | make-fetch-happen: "npm:^13.0.0" 2013 | nopt: "npm:^7.0.0" 2014 | proc-log: "npm:^3.0.0" 2015 | semver: "npm:^7.3.5" 2016 | tar: "npm:^6.1.2" 2017 | which: "npm:^4.0.0" 2018 | bin: 2019 | node-gyp: bin/node-gyp.js 2020 | checksum: 578cf0c821f258ce4b6ebce4461eca4c991a4df2dee163c0624f2fe09c7d6d37240be4942285a0048d307230248ee0b18382d6623b9a0136ce9533486deddfa8 2021 | languageName: node 2022 | linkType: hard 2023 | 2024 | "nopt@npm:^7.0.0": 2025 | version: 7.2.0 2026 | resolution: "nopt@npm:7.2.0" 2027 | dependencies: 2028 | abbrev: "npm:^2.0.0" 2029 | bin: 2030 | nopt: bin/nopt.js 2031 | checksum: 1e7489f17cbda452c8acaf596a8defb4ae477d2a9953b76eb96f4ec3f62c6b421cd5174eaa742f88279871fde9586d8a1d38fb3f53fa0c405585453be31dff4c 2032 | languageName: node 2033 | linkType: hard 2034 | 2035 | "object-assign@npm:^4.0.1": 2036 | version: 4.1.1 2037 | resolution: "object-assign@npm:4.1.1" 2038 | checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f 2039 | languageName: node 2040 | linkType: hard 2041 | 2042 | "observable-fns@npm:^0.6.1": 2043 | version: 0.6.1 2044 | resolution: "observable-fns@npm:0.6.1" 2045 | checksum: 6b97d685db359196b081e152af2b37859dcc2d0a8d21ba9772cae79240af63b903604c9e30e0295fb9d89fcfd7eb93b8338b89da22fbee40589d367644185eff 2046 | languageName: node 2047 | linkType: hard 2048 | 2049 | "once@npm:^1.3.0": 2050 | version: 1.4.0 2051 | resolution: "once@npm:1.4.0" 2052 | dependencies: 2053 | wrappy: "npm:1" 2054 | checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 2055 | languageName: node 2056 | linkType: hard 2057 | 2058 | "p-limit@npm:^2.2.0": 2059 | version: 2.3.0 2060 | resolution: "p-limit@npm:2.3.0" 2061 | dependencies: 2062 | p-try: "npm:^2.0.0" 2063 | checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 2064 | languageName: node 2065 | linkType: hard 2066 | 2067 | "p-limit@npm:^4.0.0": 2068 | version: 4.0.0 2069 | resolution: "p-limit@npm:4.0.0" 2070 | dependencies: 2071 | yocto-queue: "npm:^1.0.0" 2072 | checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b 2073 | languageName: node 2074 | linkType: hard 2075 | 2076 | "p-locate@npm:^4.1.0": 2077 | version: 4.1.0 2078 | resolution: "p-locate@npm:4.1.0" 2079 | dependencies: 2080 | p-limit: "npm:^2.2.0" 2081 | checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 2082 | languageName: node 2083 | linkType: hard 2084 | 2085 | "p-map@npm:^4.0.0": 2086 | version: 4.0.0 2087 | resolution: "p-map@npm:4.0.0" 2088 | dependencies: 2089 | aggregate-error: "npm:^3.0.0" 2090 | checksum: 7ba4a2b1e24c05e1fc14bbaea0fc6d85cf005ae7e9c9425d4575550f37e2e584b1af97bcde78eacd7559208f20995988d52881334db16cf77bc1bcf68e48ed7c 2091 | languageName: node 2092 | linkType: hard 2093 | 2094 | "p-try@npm:^2.0.0": 2095 | version: 2.2.0 2096 | resolution: "p-try@npm:2.2.0" 2097 | checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae 2098 | languageName: node 2099 | linkType: hard 2100 | 2101 | "path-exists@npm:^4.0.0": 2102 | version: 4.0.0 2103 | resolution: "path-exists@npm:4.0.0" 2104 | checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 2105 | languageName: node 2106 | linkType: hard 2107 | 2108 | "path-is-absolute@npm:^1.0.0": 2109 | version: 1.0.1 2110 | resolution: "path-is-absolute@npm:1.0.1" 2111 | checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 2112 | languageName: node 2113 | linkType: hard 2114 | 2115 | "path-key@npm:^3.1.0": 2116 | version: 3.1.1 2117 | resolution: "path-key@npm:3.1.1" 2118 | checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 2119 | languageName: node 2120 | linkType: hard 2121 | 2122 | "path-parse@npm:^1.0.7": 2123 | version: 1.0.7 2124 | resolution: "path-parse@npm:1.0.7" 2125 | checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a 2126 | languageName: node 2127 | linkType: hard 2128 | 2129 | "path-scurry@npm:^1.10.1": 2130 | version: 1.10.1 2131 | resolution: "path-scurry@npm:1.10.1" 2132 | dependencies: 2133 | lru-cache: "npm:^9.1.1 || ^10.0.0" 2134 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 2135 | checksum: eebfb8304fef1d4f7e1486df987e4fd77413de4fce16508dea69fcf8eb318c09a6b15a7a2f4c22877cec1cb7ecbd3071d18ca9de79eeece0df874a00f1f0bdc8 2136 | languageName: node 2137 | linkType: hard 2138 | 2139 | "pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2": 2140 | version: 1.1.2 2141 | resolution: "pathe@npm:1.1.2" 2142 | checksum: f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80 2143 | languageName: node 2144 | linkType: hard 2145 | 2146 | "pathval@npm:^1.1.1": 2147 | version: 1.1.1 2148 | resolution: "pathval@npm:1.1.1" 2149 | checksum: b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6 2150 | languageName: node 2151 | linkType: hard 2152 | 2153 | "picocolors@npm:^1.0.0": 2154 | version: 1.0.0 2155 | resolution: "picocolors@npm:1.0.0" 2156 | checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 2157 | languageName: node 2158 | linkType: hard 2159 | 2160 | "picomatch@npm:^2.3.1": 2161 | version: 2.3.1 2162 | resolution: "picomatch@npm:2.3.1" 2163 | checksum: 60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc 2164 | languageName: node 2165 | linkType: hard 2166 | 2167 | "pify@npm:^2.0.0": 2168 | version: 2.3.0 2169 | resolution: "pify@npm:2.3.0" 2170 | checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba 2171 | languageName: node 2172 | linkType: hard 2173 | 2174 | "pinkie-promise@npm:^2.0.0": 2175 | version: 2.0.1 2176 | resolution: "pinkie-promise@npm:2.0.1" 2177 | dependencies: 2178 | pinkie: "npm:^2.0.0" 2179 | checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca 2180 | languageName: node 2181 | linkType: hard 2182 | 2183 | "pinkie@npm:^2.0.0": 2184 | version: 2.0.4 2185 | resolution: "pinkie@npm:2.0.4" 2186 | checksum: 11d207257a044d1047c3755374d36d84dda883a44d030fe98216bf0ea97da05a5c9d64e82495387edeb9ee4f52c455bca97cdb97629932be65e6f54b29f5aec8 2187 | languageName: node 2188 | linkType: hard 2189 | 2190 | "pkg-dir@npm:^4.1.0": 2191 | version: 4.2.0 2192 | resolution: "pkg-dir@npm:4.2.0" 2193 | dependencies: 2194 | find-up: "npm:^4.0.0" 2195 | checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 2196 | languageName: node 2197 | linkType: hard 2198 | 2199 | "pkg-types@npm:^1.0.3": 2200 | version: 1.0.3 2201 | resolution: "pkg-types@npm:1.0.3" 2202 | dependencies: 2203 | jsonc-parser: "npm:^3.2.0" 2204 | mlly: "npm:^1.2.0" 2205 | pathe: "npm:^1.1.0" 2206 | checksum: e17e1819ce579c9ea390e4c41a9ed9701d8cff14b463f9577cc4f94688da8917c66dabc40feacd47a21eb3de9b532756a78becd882b76add97053af307c1240a 2207 | languageName: node 2208 | linkType: hard 2209 | 2210 | "postcss@npm:^8.4.35": 2211 | version: 8.4.35 2212 | resolution: "postcss@npm:8.4.35" 2213 | dependencies: 2214 | nanoid: "npm:^3.3.7" 2215 | picocolors: "npm:^1.0.0" 2216 | source-map-js: "npm:^1.0.2" 2217 | checksum: 93a7ce50cd6188f5f486a9ca98950ad27c19dfed996c45c414fa242944497e4d084a8760d3537f078630226f2bd3c6ab84b813b488740f4432e7c7039cd73a20 2218 | languageName: node 2219 | linkType: hard 2220 | 2221 | "prettier@npm:^3.1.0": 2222 | version: 3.2.5 2223 | resolution: "prettier@npm:3.2.5" 2224 | bin: 2225 | prettier: bin/prettier.cjs 2226 | checksum: d509f9da0b70e8cacc561a1911c0d99ec75117faed27b95cc8534cb2349667dee6351b0ca83fa9d5703f14127faa52b798de40f5705f02d843da133fc3aa416a 2227 | languageName: node 2228 | linkType: hard 2229 | 2230 | "pretty-format@npm:^29.5.0": 2231 | version: 29.7.0 2232 | resolution: "pretty-format@npm:29.7.0" 2233 | dependencies: 2234 | "@jest/schemas": "npm:^29.6.3" 2235 | ansi-styles: "npm:^5.0.0" 2236 | react-is: "npm:^18.0.0" 2237 | checksum: dea96bc83c83cd91b2bfc55757b6b2747edcaac45b568e46de29deee80742f17bc76fe8898135a70d904f4928eafd8bb693cd1da4896e8bdd3c5e82cadf1d2bb 2238 | languageName: node 2239 | linkType: hard 2240 | 2241 | "proc-log@npm:^3.0.0": 2242 | version: 3.0.0 2243 | resolution: "proc-log@npm:3.0.0" 2244 | checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 2245 | languageName: node 2246 | linkType: hard 2247 | 2248 | "proj4@npm:^2.9.2": 2249 | version: 2.10.0 2250 | resolution: "proj4@npm:2.10.0" 2251 | dependencies: 2252 | mgrs: "npm:1.0.0" 2253 | wkt-parser: "npm:^1.3.3" 2254 | checksum: 376a98aa267c98197109338f8693cf1621530745241549045f1e12d32417742e860435e8ab744dc8312ce1e352df48d45bb77fb9f706f260981e95e69a800b1b 2255 | languageName: node 2256 | linkType: hard 2257 | 2258 | "promise-retry@npm:^2.0.1": 2259 | version: 2.0.1 2260 | resolution: "promise-retry@npm:2.0.1" 2261 | dependencies: 2262 | err-code: "npm:^2.0.2" 2263 | retry: "npm:^0.12.0" 2264 | checksum: 96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 2265 | languageName: node 2266 | linkType: hard 2267 | 2268 | "randombytes@npm:^2.1.0": 2269 | version: 2.1.0 2270 | resolution: "randombytes@npm:2.1.0" 2271 | dependencies: 2272 | safe-buffer: "npm:^5.1.0" 2273 | checksum: 4efd1ad3d88db77c2d16588dc54c2b52fd2461e70fe5724611f38d283857094fe09040fa2c9776366803c3152cf133171b452ef717592b65631ce5dc3a2bdafc 2274 | languageName: node 2275 | linkType: hard 2276 | 2277 | "react-is@npm:^18.0.0": 2278 | version: 18.2.0 2279 | resolution: "react-is@npm:18.2.0" 2280 | checksum: 200cd65bf2e0be7ba6055f647091b725a45dd2a6abef03bf2380ce701fd5edccee40b49b9d15edab7ac08a762bf83cb4081e31ec2673a5bfb549a36ba21570df 2281 | languageName: node 2282 | linkType: hard 2283 | 2284 | "regenerator-runtime@npm:^0.14.0": 2285 | version: 0.14.1 2286 | resolution: "regenerator-runtime@npm:0.14.1" 2287 | checksum: 5db3161abb311eef8c45bcf6565f4f378f785900ed3945acf740a9888c792f75b98ecb77f0775f3bf95502ff423529d23e94f41d80c8256e8fa05ed4b07cf471 2288 | languageName: node 2289 | linkType: hard 2290 | 2291 | "resolve@npm:^1.22.1": 2292 | version: 1.22.8 2293 | resolution: "resolve@npm:1.22.8" 2294 | dependencies: 2295 | is-core-module: "npm:^2.13.0" 2296 | path-parse: "npm:^1.0.7" 2297 | supports-preserve-symlinks-flag: "npm:^1.0.0" 2298 | bin: 2299 | resolve: bin/resolve 2300 | checksum: c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 2301 | languageName: node 2302 | linkType: hard 2303 | 2304 | "resolve@patch:resolve@npm%3A^1.22.1#optional!builtin": 2305 | version: 1.22.8 2306 | resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" 2307 | dependencies: 2308 | is-core-module: "npm:^2.13.0" 2309 | path-parse: "npm:^1.0.7" 2310 | supports-preserve-symlinks-flag: "npm:^1.0.0" 2311 | bin: 2312 | resolve: bin/resolve 2313 | checksum: f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a 2314 | languageName: node 2315 | linkType: hard 2316 | 2317 | "retry@npm:^0.12.0": 2318 | version: 0.12.0 2319 | resolution: "retry@npm:0.12.0" 2320 | checksum: 1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 2321 | languageName: node 2322 | linkType: hard 2323 | 2324 | "rimraf@npm:^5.0.5": 2325 | version: 5.0.5 2326 | resolution: "rimraf@npm:5.0.5" 2327 | dependencies: 2328 | glob: "npm:^10.3.7" 2329 | bin: 2330 | rimraf: dist/esm/bin.mjs 2331 | checksum: a612c7184f96258b7d1328c486b12ca7b60aa30e04229a08bbfa7e964486deb1e9a1b52d917809311bdc39a808a4055c0f950c0280fba194ba0a09e6f0d404f6 2332 | languageName: node 2333 | linkType: hard 2334 | 2335 | "rollup-plugin-dts@npm:^6.1.0": 2336 | version: 6.1.0 2337 | resolution: "rollup-plugin-dts@npm:6.1.0" 2338 | dependencies: 2339 | "@babel/code-frame": "npm:^7.22.13" 2340 | magic-string: "npm:^0.30.4" 2341 | peerDependencies: 2342 | rollup: ^3.29.4 || ^4 2343 | typescript: ^4.5 || ^5.0 2344 | dependenciesMeta: 2345 | "@babel/code-frame": 2346 | optional: true 2347 | checksum: 2ecbda8eb0644ce98ee3a795bf5b99368d80e357972c227b07c382c4af34e03fe681c0f6674e1967330b69e79f2ddf288a672f8964441d5f98e9998c50f41a01 2348 | languageName: node 2349 | linkType: hard 2350 | 2351 | "rollup@npm:^4.1.5, rollup@npm:^4.2.0": 2352 | version: 4.12.0 2353 | resolution: "rollup@npm:4.12.0" 2354 | dependencies: 2355 | "@rollup/rollup-android-arm-eabi": "npm:4.12.0" 2356 | "@rollup/rollup-android-arm64": "npm:4.12.0" 2357 | "@rollup/rollup-darwin-arm64": "npm:4.12.0" 2358 | "@rollup/rollup-darwin-x64": "npm:4.12.0" 2359 | "@rollup/rollup-linux-arm-gnueabihf": "npm:4.12.0" 2360 | "@rollup/rollup-linux-arm64-gnu": "npm:4.12.0" 2361 | "@rollup/rollup-linux-arm64-musl": "npm:4.12.0" 2362 | "@rollup/rollup-linux-riscv64-gnu": "npm:4.12.0" 2363 | "@rollup/rollup-linux-x64-gnu": "npm:4.12.0" 2364 | "@rollup/rollup-linux-x64-musl": "npm:4.12.0" 2365 | "@rollup/rollup-win32-arm64-msvc": "npm:4.12.0" 2366 | "@rollup/rollup-win32-ia32-msvc": "npm:4.12.0" 2367 | "@rollup/rollup-win32-x64-msvc": "npm:4.12.0" 2368 | "@types/estree": "npm:1.0.5" 2369 | fsevents: "npm:~2.3.2" 2370 | dependenciesMeta: 2371 | "@rollup/rollup-android-arm-eabi": 2372 | optional: true 2373 | "@rollup/rollup-android-arm64": 2374 | optional: true 2375 | "@rollup/rollup-darwin-arm64": 2376 | optional: true 2377 | "@rollup/rollup-darwin-x64": 2378 | optional: true 2379 | "@rollup/rollup-linux-arm-gnueabihf": 2380 | optional: true 2381 | "@rollup/rollup-linux-arm64-gnu": 2382 | optional: true 2383 | "@rollup/rollup-linux-arm64-musl": 2384 | optional: true 2385 | "@rollup/rollup-linux-riscv64-gnu": 2386 | optional: true 2387 | "@rollup/rollup-linux-x64-gnu": 2388 | optional: true 2389 | "@rollup/rollup-linux-x64-musl": 2390 | optional: true 2391 | "@rollup/rollup-win32-arm64-msvc": 2392 | optional: true 2393 | "@rollup/rollup-win32-ia32-msvc": 2394 | optional: true 2395 | "@rollup/rollup-win32-x64-msvc": 2396 | optional: true 2397 | fsevents: 2398 | optional: true 2399 | bin: 2400 | rollup: dist/bin/rollup 2401 | checksum: 098eac4dcaf051b71c4efb7e3df059f6563d030b4dfbd2622a4d70acf4d02c463885643c63a21dda45153470f9be5047acd11eab19d4b2ed1c06b8ff57997e8e 2402 | languageName: node 2403 | linkType: hard 2404 | 2405 | "safe-buffer@npm:^5.1.0": 2406 | version: 5.2.1 2407 | resolution: "safe-buffer@npm:5.2.1" 2408 | checksum: 32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 2409 | languageName: node 2410 | linkType: hard 2411 | 2412 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 2413 | version: 2.1.2 2414 | resolution: "safer-buffer@npm:2.1.2" 2415 | checksum: 7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 2416 | languageName: node 2417 | linkType: hard 2418 | 2419 | "semver@npm:^6.0.0": 2420 | version: 6.3.1 2421 | resolution: "semver@npm:6.3.1" 2422 | bin: 2423 | semver: bin/semver.js 2424 | checksum: 1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e 2425 | languageName: node 2426 | linkType: hard 2427 | 2428 | "semver@npm:^7.3.5": 2429 | version: 7.6.0 2430 | resolution: "semver@npm:7.6.0" 2431 | dependencies: 2432 | lru-cache: "npm:^6.0.0" 2433 | bin: 2434 | semver: bin/semver.js 2435 | checksum: 1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535 2436 | languageName: node 2437 | linkType: hard 2438 | 2439 | "serialize-javascript@npm:^6.0.1": 2440 | version: 6.0.2 2441 | resolution: "serialize-javascript@npm:6.0.2" 2442 | dependencies: 2443 | randombytes: "npm:^2.1.0" 2444 | checksum: 445a420a6fa2eaee4b70cbd884d538e259ab278200a2ededd73253ada17d5d48e91fb1f4cd224a236ab62ea7ba0a70c6af29fc93b4f3d3078bf7da1c031fde58 2445 | languageName: node 2446 | linkType: hard 2447 | 2448 | "shebang-command@npm:^2.0.0": 2449 | version: 2.0.0 2450 | resolution: "shebang-command@npm:2.0.0" 2451 | dependencies: 2452 | shebang-regex: "npm:^3.0.0" 2453 | checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa 2454 | languageName: node 2455 | linkType: hard 2456 | 2457 | "shebang-regex@npm:^3.0.0": 2458 | version: 3.0.0 2459 | resolution: "shebang-regex@npm:3.0.0" 2460 | checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 2461 | languageName: node 2462 | linkType: hard 2463 | 2464 | "shiki@npm:^0.14.7": 2465 | version: 0.14.7 2466 | resolution: "shiki@npm:0.14.7" 2467 | dependencies: 2468 | ansi-sequence-parser: "npm:^1.1.0" 2469 | jsonc-parser: "npm:^3.2.0" 2470 | vscode-oniguruma: "npm:^1.7.0" 2471 | vscode-textmate: "npm:^8.0.0" 2472 | checksum: be3f2444c65bd0c57802026f171cb42ad571d361ee885be0c292b60785f68c70f19b69310f5ffe7f7a93db4c5ef50211e0a0248794bc6bb48d242bc43fe72a62 2473 | languageName: node 2474 | linkType: hard 2475 | 2476 | "siginfo@npm:^2.0.0": 2477 | version: 2.0.0 2478 | resolution: "siginfo@npm:2.0.0" 2479 | checksum: e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 2480 | languageName: node 2481 | linkType: hard 2482 | 2483 | "signal-exit@npm:^4.0.1": 2484 | version: 4.1.0 2485 | resolution: "signal-exit@npm:4.1.0" 2486 | checksum: c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f 2487 | languageName: node 2488 | linkType: hard 2489 | 2490 | "smart-buffer@npm:^4.2.0": 2491 | version: 4.2.0 2492 | resolution: "smart-buffer@npm:4.2.0" 2493 | checksum: 927484aa0b1640fd9473cee3e0a0bcad6fce93fd7bbc18bac9ad0c33686f5d2e2c422fba24b5899c184524af01e11dd2bd051c2bf2b07e47aff8ca72cbfc60d2 2494 | languageName: node 2495 | linkType: hard 2496 | 2497 | "smob@npm:^1.0.0": 2498 | version: 1.4.1 2499 | resolution: "smob@npm:1.4.1" 2500 | checksum: bc6ffcb9a1c3c875f9354cf814487d44cd925e2917683e2bf6f66a267eedf895f4989079541b73dc0ddc163cb0fa26078fa95067f1503707758437e9308afc2f 2501 | languageName: node 2502 | linkType: hard 2503 | 2504 | "socks-proxy-agent@npm:^8.0.1": 2505 | version: 8.0.2 2506 | resolution: "socks-proxy-agent@npm:8.0.2" 2507 | dependencies: 2508 | agent-base: "npm:^7.0.2" 2509 | debug: "npm:^4.3.4" 2510 | socks: "npm:^2.7.1" 2511 | checksum: ea727734bd5b2567597aa0eda14149b3b9674bb44df5937bbb9815280c1586994de734d965e61f1dd45661183d7b41f115fb9e432d631287c9063864cfcc2ecc 2512 | languageName: node 2513 | linkType: hard 2514 | 2515 | "socks@npm:^2.7.1": 2516 | version: 2.8.1 2517 | resolution: "socks@npm:2.8.1" 2518 | dependencies: 2519 | ip-address: "npm:^9.0.5" 2520 | smart-buffer: "npm:^4.2.0" 2521 | checksum: a3cc38e0716ab53a2db3fa00c703ca682ad54dbbc9ed4c7461624a999be6fa7cdc79fc904c411618e698d5eff55a55aa6d9329169a7db11636d0200814a2b5aa 2522 | languageName: node 2523 | linkType: hard 2524 | 2525 | "source-map-js@npm:^1.0.2": 2526 | version: 1.0.2 2527 | resolution: "source-map-js@npm:1.0.2" 2528 | checksum: 38e2d2dd18d2e331522001fc51b54127ef4a5d473f53b1349c5cca2123562400e0986648b52e9407e348eaaed53bce49248b6e2641e6d793ca57cb2c360d6d51 2529 | languageName: node 2530 | linkType: hard 2531 | 2532 | "source-map-support@npm:~0.5.20": 2533 | version: 0.5.21 2534 | resolution: "source-map-support@npm:0.5.21" 2535 | dependencies: 2536 | buffer-from: "npm:^1.0.0" 2537 | source-map: "npm:^0.6.0" 2538 | checksum: 8317e12d84019b31e34b86d483dd41d6f832f389f7417faf8fc5c75a66a12d9686e47f589a0554a868b8482f037e23df9d040d29387eb16fa14cb85f091ba207 2539 | languageName: node 2540 | linkType: hard 2541 | 2542 | "source-map@npm:^0.6.0": 2543 | version: 0.6.1 2544 | resolution: "source-map@npm:0.6.1" 2545 | checksum: 59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff 2546 | languageName: node 2547 | linkType: hard 2548 | 2549 | "sprintf-js@npm:^1.1.3": 2550 | version: 1.1.3 2551 | resolution: "sprintf-js@npm:1.1.3" 2552 | checksum: e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb 2553 | languageName: node 2554 | linkType: hard 2555 | 2556 | "ssri@npm:^10.0.0": 2557 | version: 10.0.5 2558 | resolution: "ssri@npm:10.0.5" 2559 | dependencies: 2560 | minipass: "npm:^7.0.3" 2561 | checksum: 453f9a1c241c13f5dfceca2ab7b4687bcff354c3ccbc932f35452687b9ef0ccf8983fd13b8a3baa5844c1a4882d6e3ddff48b0e7fd21d743809ef33b80616d79 2562 | languageName: node 2563 | linkType: hard 2564 | 2565 | "stackback@npm:0.0.2": 2566 | version: 0.0.2 2567 | resolution: "stackback@npm:0.0.2" 2568 | checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 2569 | languageName: node 2570 | linkType: hard 2571 | 2572 | "std-env@npm:^3.3.3": 2573 | version: 3.7.0 2574 | resolution: "std-env@npm:3.7.0" 2575 | checksum: 6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12 2576 | languageName: node 2577 | linkType: hard 2578 | 2579 | "stream-read-all@npm:^3.0.1": 2580 | version: 3.0.1 2581 | resolution: "stream-read-all@npm:3.0.1" 2582 | checksum: 40d3c286837f1b1ae7e8105959804ad42fda00f2c087722d981cb1c9fbbea892b8a0a7ca1cf6a016c96770151a6201a3da5c8b66fe35e35106b52a5e9ab90e3e 2583 | languageName: node 2584 | linkType: hard 2585 | 2586 | "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": 2587 | version: 4.2.3 2588 | resolution: "string-width@npm:4.2.3" 2589 | dependencies: 2590 | emoji-regex: "npm:^8.0.0" 2591 | is-fullwidth-code-point: "npm:^3.0.0" 2592 | strip-ansi: "npm:^6.0.1" 2593 | checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb 2594 | languageName: node 2595 | linkType: hard 2596 | 2597 | "string-width@npm:^5.0.1, string-width@npm:^5.1.2": 2598 | version: 5.1.2 2599 | resolution: "string-width@npm:5.1.2" 2600 | dependencies: 2601 | eastasianwidth: "npm:^0.2.0" 2602 | emoji-regex: "npm:^9.2.2" 2603 | strip-ansi: "npm:^7.0.1" 2604 | checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 2605 | languageName: node 2606 | linkType: hard 2607 | 2608 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": 2609 | version: 6.0.1 2610 | resolution: "strip-ansi@npm:6.0.1" 2611 | dependencies: 2612 | ansi-regex: "npm:^5.0.1" 2613 | checksum: ae3b5436d34fadeb6096367626ce987057713c566e1e7768818797e00ac5d62023d0f198c4e681eae9e20701721980b26a64a8f5b91238869592a9c6800719a2 2614 | languageName: node 2615 | linkType: hard 2616 | 2617 | "strip-ansi@npm:^7.0.1": 2618 | version: 7.1.0 2619 | resolution: "strip-ansi@npm:7.1.0" 2620 | dependencies: 2621 | ansi-regex: "npm:^6.0.1" 2622 | checksum: 475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 2623 | languageName: node 2624 | linkType: hard 2625 | 2626 | "strip-literal@npm:^1.0.1": 2627 | version: 1.3.0 2628 | resolution: "strip-literal@npm:1.3.0" 2629 | dependencies: 2630 | acorn: "npm:^8.10.0" 2631 | checksum: f5fa7e289df8ebe82e90091fd393974faf8871be087ca50114327506519323cf15f2f8fee6ebe68b5e58bfc795269cae8bdc7cb5a83e27b02b3fe953f37b0a89 2632 | languageName: node 2633 | linkType: hard 2634 | 2635 | "strip-outer@npm:^1.0.1": 2636 | version: 1.0.1 2637 | resolution: "strip-outer@npm:1.0.1" 2638 | dependencies: 2639 | escape-string-regexp: "npm:^1.0.2" 2640 | checksum: f8d65d33ca2b49aabc66bb41d689dda7b8b9959d320e3a40a2ef4d7079ff2f67ffb72db43f179f48dbf9495c2e33742863feab7a584d180fa62505439162c191 2641 | languageName: node 2642 | linkType: hard 2643 | 2644 | "supports-color@npm:^5.3.0": 2645 | version: 5.5.0 2646 | resolution: "supports-color@npm:5.5.0" 2647 | dependencies: 2648 | has-flag: "npm:^3.0.0" 2649 | checksum: 5f505c6fa3c6e05873b43af096ddeb22159831597649881aeb8572d6fe3b81e798cc10840d0c9735e0026b250368851b7f77b65e84f4e4daa820a4f69947f55b 2650 | languageName: node 2651 | linkType: hard 2652 | 2653 | "supports-color@npm:^7.1.0": 2654 | version: 7.2.0 2655 | resolution: "supports-color@npm:7.2.0" 2656 | dependencies: 2657 | has-flag: "npm:^4.0.0" 2658 | checksum: c8bb7afd564e3b26b50ca6ee47572c217526a1389fe018d00345856d4a9b08ffbd61fadaf283a87368d94c3dcdb8f5ffe2650a5a65863e21ad2730ca0f05210a 2659 | languageName: node 2660 | linkType: hard 2661 | 2662 | "supports-preserve-symlinks-flag@npm:^1.0.0": 2663 | version: 1.0.0 2664 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0" 2665 | checksum: a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e 2666 | languageName: node 2667 | linkType: hard 2668 | 2669 | "table-layout@npm:^3.0.0": 2670 | version: 3.0.2 2671 | resolution: "table-layout@npm:3.0.2" 2672 | dependencies: 2673 | "@75lb/deep-merge": "npm:^1.1.1" 2674 | array-back: "npm:^6.2.2" 2675 | command-line-args: "npm:^5.2.1" 2676 | command-line-usage: "npm:^7.0.0" 2677 | stream-read-all: "npm:^3.0.1" 2678 | typical: "npm:^7.1.1" 2679 | wordwrapjs: "npm:^5.1.0" 2680 | bin: 2681 | table-layout: bin/cli.js 2682 | checksum: 892a6c9cec362779cfa7c472b62edfe6950c7f3713ae50cf28c89e2272ca97b28f37eeb92c41bf8dbe9148773da11bf5dbd7d81267b05689be2b463de16de5ea 2683 | languageName: node 2684 | linkType: hard 2685 | 2686 | "tar@npm:^6.1.11, tar@npm:^6.1.2": 2687 | version: 6.2.0 2688 | resolution: "tar@npm:6.2.0" 2689 | dependencies: 2690 | chownr: "npm:^2.0.0" 2691 | fs-minipass: "npm:^2.0.0" 2692 | minipass: "npm:^5.0.0" 2693 | minizlib: "npm:^2.1.1" 2694 | mkdirp: "npm:^1.0.3" 2695 | yallist: "npm:^4.0.0" 2696 | checksum: 2042bbb14830b5cd0d584007db0eb0a7e933e66d1397e72a4293768d2332449bc3e312c266a0887ec20156dea388d8965e53b4fc5097f42d78593549016da089 2697 | languageName: node 2698 | linkType: hard 2699 | 2700 | "terser@npm:^5.17.4": 2701 | version: 5.28.1 2702 | resolution: "terser@npm:5.28.1" 2703 | dependencies: 2704 | "@jridgewell/source-map": "npm:^0.3.3" 2705 | acorn: "npm:^8.8.2" 2706 | commander: "npm:^2.20.0" 2707 | source-map-support: "npm:~0.5.20" 2708 | bin: 2709 | terser: bin/terser 2710 | checksum: 922159f036a89a7d01b8b67e0eacb4425c20cf19067d2e82c1523153ed3bf66c36b945fd16c610b7ea41fedb867b189d2a350415fb566f4668a1701ab768728e 2711 | languageName: node 2712 | linkType: hard 2713 | 2714 | "threads@npm:^1.7.0": 2715 | version: 1.7.0 2716 | resolution: "threads@npm:1.7.0" 2717 | dependencies: 2718 | callsites: "npm:^3.1.0" 2719 | debug: "npm:^4.2.0" 2720 | is-observable: "npm:^2.1.0" 2721 | observable-fns: "npm:^0.6.1" 2722 | tiny-worker: "npm:>= 2" 2723 | dependenciesMeta: 2724 | tiny-worker: 2725 | optional: true 2726 | checksum: e4cefeac67a9d3609d95b2c02e9f868e152dec210179073810a64084256fad2e0795d778ec69a06eb5bd4a76185af689ca0348f84d44d758d6736edbfa841116 2727 | languageName: node 2728 | linkType: hard 2729 | 2730 | "tiny-worker@npm:>= 2": 2731 | version: 2.3.0 2732 | resolution: "tiny-worker@npm:2.3.0" 2733 | dependencies: 2734 | esm: "npm:^3.2.25" 2735 | checksum: 5643f030984a38a3c1b20fde0af93cf5a19d246cdf8ebaeb85e7a076115c1f976363ac9f8611fca507f6a6ae350b01f0a42c2ae522e75f1719f36779e93b8618 2736 | languageName: node 2737 | linkType: hard 2738 | 2739 | "tinybench@npm:^2.5.0": 2740 | version: 2.6.0 2741 | resolution: "tinybench@npm:2.6.0" 2742 | checksum: 6d35f0540bbf6208e8f47fa88cad733bc4b35b3bea75ec995004a9a44f70b8947eff3d271a3b4a4f7e787a82211df0dec9370fa566ccf50441067c559382b3ed 2743 | languageName: node 2744 | linkType: hard 2745 | 2746 | "tinypool@npm:^0.7.0": 2747 | version: 0.7.0 2748 | resolution: "tinypool@npm:0.7.0" 2749 | checksum: e1fb1f430647525c6bb0bac71acc4c1594c7687fe8e4f08c8f389d9a672fb69746869e9d9818b55f1ab85ea6308d42f92cbc32a9847088abf6bc55a8700be390 2750 | languageName: node 2751 | linkType: hard 2752 | 2753 | "tinyspy@npm:^2.1.1": 2754 | version: 2.2.1 2755 | resolution: "tinyspy@npm:2.2.1" 2756 | checksum: 170d6232e87f9044f537b50b406a38fbfd6f79a261cd12b92879947bd340939a833a678632ce4f5c4a6feab4477e9c21cd43faac3b90b68b77dd0536c4149736 2757 | languageName: node 2758 | linkType: hard 2759 | 2760 | "trim-repeated@npm:^1.0.0": 2761 | version: 1.0.0 2762 | resolution: "trim-repeated@npm:1.0.0" 2763 | dependencies: 2764 | escape-string-regexp: "npm:^1.0.2" 2765 | checksum: e25c235305b82c43f1d64a67a71226c406b00281755e4c2c4f3b1d0b09c687a535dd3c4483327f949f28bb89dc400a0bc5e5b749054f4b99f49ebfe48ba36496 2766 | languageName: node 2767 | linkType: hard 2768 | 2769 | "ts-node@npm:^10.9.1": 2770 | version: 10.9.2 2771 | resolution: "ts-node@npm:10.9.2" 2772 | dependencies: 2773 | "@cspotcode/source-map-support": "npm:^0.8.0" 2774 | "@tsconfig/node10": "npm:^1.0.7" 2775 | "@tsconfig/node12": "npm:^1.0.7" 2776 | "@tsconfig/node14": "npm:^1.0.0" 2777 | "@tsconfig/node16": "npm:^1.0.2" 2778 | acorn: "npm:^8.4.1" 2779 | acorn-walk: "npm:^8.1.1" 2780 | arg: "npm:^4.1.0" 2781 | create-require: "npm:^1.1.0" 2782 | diff: "npm:^4.0.1" 2783 | make-error: "npm:^1.1.1" 2784 | v8-compile-cache-lib: "npm:^3.0.1" 2785 | yn: "npm:3.1.1" 2786 | peerDependencies: 2787 | "@swc/core": ">=1.2.50" 2788 | "@swc/wasm": ">=1.2.50" 2789 | "@types/node": "*" 2790 | typescript: ">=2.7" 2791 | peerDependenciesMeta: 2792 | "@swc/core": 2793 | optional: true 2794 | "@swc/wasm": 2795 | optional: true 2796 | bin: 2797 | ts-node: dist/bin.js 2798 | ts-node-cwd: dist/bin-cwd.js 2799 | ts-node-esm: dist/bin-esm.js 2800 | ts-node-script: dist/bin-script.js 2801 | ts-node-transpile-only: dist/bin-transpile.js 2802 | ts-script: dist/bin-script-deprecated.js 2803 | checksum: a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 2804 | languageName: node 2805 | linkType: hard 2806 | 2807 | "tslib@npm:^2.4.0, tslib@npm:^2.6.2": 2808 | version: 2.6.2 2809 | resolution: "tslib@npm:2.6.2" 2810 | checksum: bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca 2811 | languageName: node 2812 | linkType: hard 2813 | 2814 | "type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": 2815 | version: 4.0.8 2816 | resolution: "type-detect@npm:4.0.8" 2817 | checksum: 5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d 2818 | languageName: node 2819 | linkType: hard 2820 | 2821 | "typedoc@npm:^0.25.4": 2822 | version: 0.25.10 2823 | resolution: "typedoc@npm:0.25.10" 2824 | dependencies: 2825 | lunr: "npm:^2.3.9" 2826 | marked: "npm:^4.3.0" 2827 | minimatch: "npm:^9.0.3" 2828 | shiki: "npm:^0.14.7" 2829 | peerDependencies: 2830 | typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x 2831 | bin: 2832 | typedoc: bin/typedoc 2833 | checksum: c714ba2636a2ecb70b5e05c776bde718e18f934b0ee1d2f6eef7427592b99a74392c876b6cb0e9d1a0c091536c1e9fa136d75294dc544625ebf984e892528380 2834 | languageName: node 2835 | linkType: hard 2836 | 2837 | "typescript@npm:^5.2.2": 2838 | version: 5.3.3 2839 | resolution: "typescript@npm:5.3.3" 2840 | bin: 2841 | tsc: bin/tsc 2842 | tsserver: bin/tsserver 2843 | checksum: 6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 2844 | languageName: node 2845 | linkType: hard 2846 | 2847 | "typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": 2848 | version: 5.3.3 2849 | resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" 2850 | bin: 2851 | tsc: bin/tsc 2852 | tsserver: bin/tsserver 2853 | checksum: c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d 2854 | languageName: node 2855 | linkType: hard 2856 | 2857 | "typical@npm:^4.0.0": 2858 | version: 4.0.0 2859 | resolution: "typical@npm:4.0.0" 2860 | checksum: aefe2c24b025cda22534ae2594df4a1df5db05b5fe3692890fd51db741ca4f18937a149f968b8d56d9a7b0756e7cd8843b1907bea21987ff4a06619c54d5a575 2861 | languageName: node 2862 | linkType: hard 2863 | 2864 | "typical@npm:^7.1.1": 2865 | version: 7.1.1 2866 | resolution: "typical@npm:7.1.1" 2867 | checksum: 9d8c963785681f62f6cf250004effe8b816360e4845873a685d598e237b9489877e1e537a43d3b6d8a561fbb5e95c389f62d877fa009d0526b3f9ee717a904c2 2868 | languageName: node 2869 | linkType: hard 2870 | 2871 | "ufo@npm:^1.3.2": 2872 | version: 1.4.0 2873 | resolution: "ufo@npm:1.4.0" 2874 | checksum: b7aea8503878dc5ad797d8fc6fe39fec64d9cc7e89fb147ef86ec676e37bb462d99d67c6aad20b15f7d3e6d275d66666b29214422e268f1d98f6eaf707a207a6 2875 | languageName: node 2876 | linkType: hard 2877 | 2878 | "undici-types@npm:~5.26.4": 2879 | version: 5.26.5 2880 | resolution: "undici-types@npm:5.26.5" 2881 | checksum: 0097779d94bc0fd26f0418b3a05472410408877279141ded2bd449167be1aed7ea5b76f756562cb3586a07f251b90799bab22d9019ceba49c037c76445f7cddd 2882 | languageName: node 2883 | linkType: hard 2884 | 2885 | "unique-filename@npm:^3.0.0": 2886 | version: 3.0.0 2887 | resolution: "unique-filename@npm:3.0.0" 2888 | dependencies: 2889 | unique-slug: "npm:^4.0.0" 2890 | checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df 2891 | languageName: node 2892 | linkType: hard 2893 | 2894 | "unique-slug@npm:^4.0.0": 2895 | version: 4.0.0 2896 | resolution: "unique-slug@npm:4.0.0" 2897 | dependencies: 2898 | imurmurhash: "npm:^0.1.4" 2899 | checksum: 40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 2900 | languageName: node 2901 | linkType: hard 2902 | 2903 | "universalify@npm:^2.0.0": 2904 | version: 2.0.1 2905 | resolution: "universalify@npm:2.0.1" 2906 | checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 2907 | languageName: node 2908 | linkType: hard 2909 | 2910 | "v8-compile-cache-lib@npm:^3.0.1": 2911 | version: 3.0.1 2912 | resolution: "v8-compile-cache-lib@npm:3.0.1" 2913 | checksum: 88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 2914 | languageName: node 2915 | linkType: hard 2916 | 2917 | "vite-node@npm:0.34.6": 2918 | version: 0.34.6 2919 | resolution: "vite-node@npm:0.34.6" 2920 | dependencies: 2921 | cac: "npm:^6.7.14" 2922 | debug: "npm:^4.3.4" 2923 | mlly: "npm:^1.4.0" 2924 | pathe: "npm:^1.1.1" 2925 | picocolors: "npm:^1.0.0" 2926 | vite: "npm:^3.0.0 || ^4.0.0 || ^5.0.0-0" 2927 | bin: 2928 | vite-node: vite-node.mjs 2929 | checksum: ae49fd24874162196dd41477afe51dd8dc0bd1e8cb4ae885455d1d5569e14f628941f9867044bff263620536446e17d7e2c0828c9ea84b6308b9eb5711e80991 2930 | languageName: node 2931 | linkType: hard 2932 | 2933 | "vite@npm:^3.0.0 || ^4.0.0 || ^5.0.0-0, vite@npm:^3.1.0 || ^4.0.0 || ^5.0.0-0": 2934 | version: 5.1.5 2935 | resolution: "vite@npm:5.1.5" 2936 | dependencies: 2937 | esbuild: "npm:^0.19.3" 2938 | fsevents: "npm:~2.3.3" 2939 | postcss: "npm:^8.4.35" 2940 | rollup: "npm:^4.2.0" 2941 | peerDependencies: 2942 | "@types/node": ^18.0.0 || >=20.0.0 2943 | less: "*" 2944 | lightningcss: ^1.21.0 2945 | sass: "*" 2946 | stylus: "*" 2947 | sugarss: "*" 2948 | terser: ^5.4.0 2949 | dependenciesMeta: 2950 | fsevents: 2951 | optional: true 2952 | peerDependenciesMeta: 2953 | "@types/node": 2954 | optional: true 2955 | less: 2956 | optional: true 2957 | lightningcss: 2958 | optional: true 2959 | sass: 2960 | optional: true 2961 | stylus: 2962 | optional: true 2963 | sugarss: 2964 | optional: true 2965 | terser: 2966 | optional: true 2967 | bin: 2968 | vite: bin/vite.js 2969 | checksum: ada0a9138ca541723008ee261d80a97f6b70173508ded0f87834e2142660f45dff9801d143551aa3a8979ed446f0aec71ae114ab3ae978b3fbd5cf1f8c4bc331 2970 | languageName: node 2971 | linkType: hard 2972 | 2973 | "vitest@npm:^0.34.6": 2974 | version: 0.34.6 2975 | resolution: "vitest@npm:0.34.6" 2976 | dependencies: 2977 | "@types/chai": "npm:^4.3.5" 2978 | "@types/chai-subset": "npm:^1.3.3" 2979 | "@types/node": "npm:*" 2980 | "@vitest/expect": "npm:0.34.6" 2981 | "@vitest/runner": "npm:0.34.6" 2982 | "@vitest/snapshot": "npm:0.34.6" 2983 | "@vitest/spy": "npm:0.34.6" 2984 | "@vitest/utils": "npm:0.34.6" 2985 | acorn: "npm:^8.9.0" 2986 | acorn-walk: "npm:^8.2.0" 2987 | cac: "npm:^6.7.14" 2988 | chai: "npm:^4.3.10" 2989 | debug: "npm:^4.3.4" 2990 | local-pkg: "npm:^0.4.3" 2991 | magic-string: "npm:^0.30.1" 2992 | pathe: "npm:^1.1.1" 2993 | picocolors: "npm:^1.0.0" 2994 | std-env: "npm:^3.3.3" 2995 | strip-literal: "npm:^1.0.1" 2996 | tinybench: "npm:^2.5.0" 2997 | tinypool: "npm:^0.7.0" 2998 | vite: "npm:^3.1.0 || ^4.0.0 || ^5.0.0-0" 2999 | vite-node: "npm:0.34.6" 3000 | why-is-node-running: "npm:^2.2.2" 3001 | peerDependencies: 3002 | "@edge-runtime/vm": "*" 3003 | "@vitest/browser": "*" 3004 | "@vitest/ui": "*" 3005 | happy-dom: "*" 3006 | jsdom: "*" 3007 | playwright: "*" 3008 | safaridriver: "*" 3009 | webdriverio: "*" 3010 | peerDependenciesMeta: 3011 | "@edge-runtime/vm": 3012 | optional: true 3013 | "@vitest/browser": 3014 | optional: true 3015 | "@vitest/ui": 3016 | optional: true 3017 | happy-dom: 3018 | optional: true 3019 | jsdom: 3020 | optional: true 3021 | playwright: 3022 | optional: true 3023 | safaridriver: 3024 | optional: true 3025 | webdriverio: 3026 | optional: true 3027 | bin: 3028 | vitest: vitest.mjs 3029 | checksum: 0191422ab979823803aac64e657e288f1b84bb518a2b653fe9928b4f1c931b04efde14990d263ff76a18dc6c35ab34652db3ae7cbecea771cfa36abe547dd705 3030 | languageName: node 3031 | linkType: hard 3032 | 3033 | "vscode-oniguruma@npm:^1.7.0": 3034 | version: 1.7.0 3035 | resolution: "vscode-oniguruma@npm:1.7.0" 3036 | checksum: 7da9d21459f9788544b258a5fd1b9752df6edd8b406a19eea0209c6bf76507d5717277016799301c4da0d536095f9ca8c06afd1ab8f4001189090c804ca4814e 3037 | languageName: node 3038 | linkType: hard 3039 | 3040 | "vscode-textmate@npm:^8.0.0": 3041 | version: 8.0.0 3042 | resolution: "vscode-textmate@npm:8.0.0" 3043 | checksum: 9fa7d66d6042cb090d116c2d8820d34c8870cfcbaed6e404da89f66b899970ed0ac47b59a2e30fc40a25af5414822bb3ea27974f714e9b91910d69c894be95f7 3044 | languageName: node 3045 | linkType: hard 3046 | 3047 | "which@npm:^2.0.1": 3048 | version: 2.0.2 3049 | resolution: "which@npm:2.0.2" 3050 | dependencies: 3051 | isexe: "npm:^2.0.0" 3052 | bin: 3053 | node-which: ./bin/node-which 3054 | checksum: 4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f 3055 | languageName: node 3056 | linkType: hard 3057 | 3058 | "which@npm:^4.0.0": 3059 | version: 4.0.0 3060 | resolution: "which@npm:4.0.0" 3061 | dependencies: 3062 | isexe: "npm:^3.1.1" 3063 | bin: 3064 | node-which: bin/which.js 3065 | checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 3066 | languageName: node 3067 | linkType: hard 3068 | 3069 | "why-is-node-running@npm:^2.2.2": 3070 | version: 2.2.2 3071 | resolution: "why-is-node-running@npm:2.2.2" 3072 | dependencies: 3073 | siginfo: "npm:^2.0.0" 3074 | stackback: "npm:0.0.2" 3075 | bin: 3076 | why-is-node-running: cli.js 3077 | checksum: f3582e0337f4b25537d492b1d40f00b978ce04b1d1eeea8f310bfa8aae8a7d11d118d672e2f0760c164ce3753a620a70aa29ff3620e340197624940cf9c08615 3078 | languageName: node 3079 | linkType: hard 3080 | 3081 | "wkt-parser@npm:^1.3.3": 3082 | version: 1.3.3 3083 | resolution: "wkt-parser@npm:1.3.3" 3084 | checksum: 1745f8ab839837d9df012112ebd914d935a462a1c8a590796ddefea549041ae03472a60c307b9079d08d92bd2e6a2f584300b11c372e6179306ee50e9985f79c 3085 | languageName: node 3086 | linkType: hard 3087 | 3088 | "wordwrapjs@npm:^5.1.0": 3089 | version: 5.1.0 3090 | resolution: "wordwrapjs@npm:5.1.0" 3091 | checksum: 7f1e500c35f5e60888222dc4cc12e517a343c102a3bb3d498efa0012b3886844a62468827622b647971bf0b3d0338daa39321f5d73064c60601465ebc6c9928e 3092 | languageName: node 3093 | linkType: hard 3094 | 3095 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 3096 | version: 7.0.0 3097 | resolution: "wrap-ansi@npm:7.0.0" 3098 | dependencies: 3099 | ansi-styles: "npm:^4.0.0" 3100 | string-width: "npm:^4.1.0" 3101 | strip-ansi: "npm:^6.0.0" 3102 | checksum: cebdaeca3a6880da410f75209e68cd05428580de5ad24535f22696d7d9cab134d1f8498599f344c3cf0fb37c1715807a183778d8c648d6cc0cb5ff2bb4236540 3103 | languageName: node 3104 | linkType: hard 3105 | 3106 | "wrap-ansi@npm:^8.1.0": 3107 | version: 8.1.0 3108 | resolution: "wrap-ansi@npm:8.1.0" 3109 | dependencies: 3110 | ansi-styles: "npm:^6.1.0" 3111 | string-width: "npm:^5.0.1" 3112 | strip-ansi: "npm:^7.0.1" 3113 | checksum: 7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf 3114 | languageName: node 3115 | linkType: hard 3116 | 3117 | "wrappy@npm:1": 3118 | version: 1.0.2 3119 | resolution: "wrappy@npm:1.0.2" 3120 | checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 3121 | languageName: node 3122 | linkType: hard 3123 | 3124 | "yallist@npm:^4.0.0": 3125 | version: 4.0.0 3126 | resolution: "yallist@npm:4.0.0" 3127 | checksum: 4cb02b42b8a93b5cf50caf5d8e9beb409400a8a4d85e83bb0685c1457e9ac0b7a00819e9f5991ac25ffabb56a78e2f017c1acc010b3a1babfe6de690ba531abd 3128 | languageName: node 3129 | linkType: hard 3130 | 3131 | "yn@npm:3.1.1": 3132 | version: 3.1.1 3133 | resolution: "yn@npm:3.1.1" 3134 | checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 3135 | languageName: node 3136 | linkType: hard 3137 | 3138 | "yocto-queue@npm:^1.0.0": 3139 | version: 1.0.0 3140 | resolution: "yocto-queue@npm:1.0.0" 3141 | checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 3142 | languageName: node 3143 | linkType: hard 3144 | --------------------------------------------------------------------------------