├── README.md ├── .prettierignore ├── rustfmt.toml ├── __test__ ├── file_has_syntax_error.ts ├── error-handle.test.ts ├── performance.test.ts ├── dynamic-import.test.ts ├── export-declaration.test.ts └── imort-declaration.test.ts ├── .cargo └── config.toml ├── npm ├── darwin-x64 │ ├── README.md │ └── package.json ├── darwin-arm64 │ ├── README.md │ └── package.json ├── linux-x64-gnu │ ├── README.md │ └── package.json ├── linux-x64-musl │ ├── README.md │ └── package.json ├── win32-x64-msvc │ ├── README.md │ └── package.json ├── linux-arm64-gnu │ ├── README.md │ └── package.json ├── linux-arm64-musl │ ├── README.md │ └── package.json ├── win32-arm64-msvc │ ├── README.md │ └── package.json └── linux-arm-gnueabihf │ ├── README.md │ └── package.json ├── .yarnrc.yml ├── .gitattributes ├── .editorconfig ├── .npmignore ├── .prettierrc.js ├── scripts └── tnpmSync.js ├── Cargo.toml ├── src ├── dynamic_import_visitor.rs ├── lib.rs ├── module_utils.rs ├── types.rs └── extract_imports.rs ├── package.json ├── index.d.ts ├── .gitignore ├── index.js ├── .github └── workflows │ └── CI.yml └── yarn.lock /README.md: -------------------------------------------------------------------------------- 1 | # es-module-parser 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | tab_spaces = 2 2 | edition = "2021" 3 | -------------------------------------------------------------------------------- /__test__/file_has_syntax_error.ts: -------------------------------------------------------------------------------- 1 | // @ts-error 2 | import wrong -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [target.aarch64-unknown-linux-musl] 2 | linker = "aarch64-linux-musl-gcc" 3 | rustflags = ["-C", "target-feature=-crt-static"] -------------------------------------------------------------------------------- /npm/darwin-x64/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-darwin-x64` 2 | 3 | This is the **x86_64-apple-darwin** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | supportedArchitectures: 3 | os: 4 | - "current" 5 | - "linux" 6 | cpu: 7 | - "arm64" 8 | - "x64" -------------------------------------------------------------------------------- /npm/darwin-arm64/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-darwin-arm64` 2 | 3 | This is the **aarch64-apple-darwin** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /npm/linux-x64-gnu/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-linux-x64-gnu` 2 | 3 | This is the **x86_64-unknown-linux-gnu** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /npm/linux-x64-musl/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-linux-x64-musl` 2 | 3 | This is the **x86_64-unknown-linux-musl** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /npm/win32-x64-msvc/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-win32-x64-msvc` 2 | 3 | This is the **x86_64-pc-windows-msvc** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /npm/linux-arm64-gnu/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-linux-arm64-gnu` 2 | 3 | This is the **aarch64-unknown-linux-gnu** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /npm/linux-arm64-musl/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-linux-arm64-musl` 2 | 3 | This is the **aarch64-unknown-linux-musl** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /npm/win32-arm64-msvc/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-win32-arm64-msvc` 2 | 3 | This is the **aarch64-pc-windows-msvc** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | /.yarn/** linguist-vendored 2 | /.yarn/releases/* binary 3 | /.yarn/plugins/**/* binary 4 | /.pnp.* binary linguist-generated 5 | -------------------------------------------------------------------------------- /npm/linux-arm-gnueabihf/README.md: -------------------------------------------------------------------------------- 1 | # `@umijs/es-module-parser-linux-arm-gnueabihf` 2 | 3 | This is the **armv7-unknown-linux-gnueabihf** binary for `@umijs/es-module-parser` 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | 7 | [*.{js,json,yml}] 8 | charset = utf-8 9 | indent_style = space 10 | indent_size = 2 11 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | target 2 | Cargo.lock 3 | .cargo 4 | .github 5 | npm 6 | .eslintrc 7 | .prettierignore 8 | rustfmt.toml 9 | yarn.lock 10 | *.node 11 | .yarn 12 | __test__ 13 | renovate.json 14 | -------------------------------------------------------------------------------- /npm/darwin-x64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-darwin-x64", 3 | "version": "0.0.0", 4 | "os": [ 5 | "darwin" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ], 10 | "main": "es-module-parser.darwin-x64.node", 11 | "files": [ 12 | "es-module-parser.darwin-x64.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | } 18 | } -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | tabWidth: 2, 3 | useTabs: false, 4 | printWidth: 80, 5 | singleQuote: true, 6 | trailingComma: "all", 7 | proseWrap: "never", 8 | overrides: [{files: ".prettierrc", options: {parser: "json"}}], 9 | plugins: [ 10 | require.resolve("prettier-plugin-packagejson"), 11 | require.resolve("prettier-plugin-organize-imports"), 12 | ], 13 | }; 14 | -------------------------------------------------------------------------------- /npm/darwin-arm64/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-darwin-arm64", 3 | "version": "0.0.0", 4 | "os": [ 5 | "darwin" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ], 10 | "main": "es-module-parser.darwin-arm64.node", 11 | "files": [ 12 | "es-module-parser.darwin-arm64.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | } 18 | } -------------------------------------------------------------------------------- /npm/win32-x64-msvc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-win32-x64-msvc", 3 | "version": "0.0.0", 4 | "os": [ 5 | "win32" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ], 10 | "main": "es-module-parser.win32-x64-msvc.node", 11 | "files": [ 12 | "es-module-parser.win32-x64-msvc.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | } 18 | } -------------------------------------------------------------------------------- /npm/win32-arm64-msvc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-win32-arm64-msvc", 3 | "version": "0.0.0", 4 | "os": [ 5 | "win32" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ], 10 | "main": "es-module-parser.win32-arm64-msvc.node", 11 | "files": [ 12 | "es-module-parser.win32-arm64-msvc.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | } 18 | } -------------------------------------------------------------------------------- /npm/linux-arm-gnueabihf/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-linux-arm-gnueabihf", 3 | "version": "0.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "arm" 9 | ], 10 | "main": "es-module-parser.linux-arm-gnueabihf.node", 11 | "files": [ 12 | "es-module-parser.linux-arm-gnueabihf.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | } 18 | } -------------------------------------------------------------------------------- /npm/linux-x64-gnu/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-linux-x64-gnu", 3 | "version": "0.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ], 10 | "main": "es-module-parser.linux-x64-gnu.node", 11 | "files": [ 12 | "es-module-parser.linux-x64-gnu.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | }, 18 | "libc": [ 19 | "glibc" 20 | ] 21 | } -------------------------------------------------------------------------------- /npm/linux-x64-musl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-linux-x64-musl", 3 | "version": "0.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "x64" 9 | ], 10 | "main": "es-module-parser.linux-x64-musl.node", 11 | "files": [ 12 | "es-module-parser.linux-x64-musl.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | }, 18 | "libc": [ 19 | "musl" 20 | ] 21 | } -------------------------------------------------------------------------------- /npm/linux-arm64-gnu/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-linux-arm64-gnu", 3 | "version": "0.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ], 10 | "main": "es-module-parser.linux-arm64-gnu.node", 11 | "files": [ 12 | "es-module-parser.linux-arm64-gnu.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | }, 18 | "libc": [ 19 | "glibc" 20 | ] 21 | } -------------------------------------------------------------------------------- /npm/linux-arm64-musl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser-linux-arm64-musl", 3 | "version": "0.0.0", 4 | "os": [ 5 | "linux" 6 | ], 7 | "cpu": [ 8 | "arm64" 9 | ], 10 | "main": "es-module-parser.linux-arm64-musl.node", 11 | "files": [ 12 | "es-module-parser.linux-arm64-musl.node" 13 | ], 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">= 10" 17 | }, 18 | "libc": [ 19 | "musl" 20 | ] 21 | } -------------------------------------------------------------------------------- /scripts/tnpmSync.js: -------------------------------------------------------------------------------- 1 | const {spawnSync} = require('child_process'); 2 | 3 | const toSyncPkgs = [ 4 | "@umijs/es-module-parser", 5 | "@umijs/es-module-parser-darwin-arm64", 6 | "@umijs/es-module-parser-darwin-x64", 7 | "@umijs/es-module-parser-linux-arm-gnueabihf", 8 | "@umijs/es-module-parser-linux-arm64-gnu", 9 | "@umijs/es-module-parser-linux-arm64-musl", 10 | "@umijs/es-module-parser-linux-x64-gnu", 11 | "@umijs/es-module-parser-linux-x64-musl", 12 | "@umijs/es-module-parser-win32-arm64-msvc", 13 | "@umijs/es-module-parser-win32-x64-msvc" 14 | ] 15 | 16 | spawnSync("tnpm", ["sync", ...toSyncPkgs], { stdio:"inherit", }) -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | edition = "2021" 3 | name = "umijs_es-module-parser" 4 | version = "0.0.1" 5 | 6 | [lib] 7 | crate-type = ["cdylib"] 8 | 9 | [dependencies] 10 | # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix 11 | napi = { version = "2.11.1", default-features = false, features = ["napi4", "anyhow", "error_anyhow", "tokio_rt", "serde-json"] } 12 | napi-derive = "2.11.0" 13 | swc_ecma_ast = { version = "0.96.5", features = ["rkyv-impl"] } 14 | swc_ecma_parser = { version = "0.124.9" } 15 | swc_common = { version = "0.29.31", features = ["tty-emitter"] } 16 | swc_ecma_visit = { version = "0.82.5" } 17 | serde = "1.0.156" 18 | serde_json = "1.0.94" 19 | anyhow = "1.0.69" 20 | rayon = "1.7.0" 21 | 22 | [build-dependencies] 23 | napi-build = "2.0.1" 24 | 25 | [profile.release] 26 | lto = true 27 | -------------------------------------------------------------------------------- /__test__/error-handle.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from 'vitest' 2 | import {parseCode, parseFiles} from '../index.js' 3 | import {join} from 'path' 4 | 5 | test('with file io error', async () => { 6 | try { 7 | await parseFiles(['/not/exists.tsx']) 8 | fail() 9 | } catch (e) { 10 | expect(e.message).toMatch(/Cant load file:/) 11 | } 12 | }) 13 | 14 | test('parse file within bad code', async () => { 15 | try { 16 | await parseFiles([join(__dirname, 'file_has_syntax_error.ts')]) 17 | fail() 18 | } catch (e) { 19 | console.log(e) 20 | expect(e.message).toMatch(/parse module script file failed:/) 21 | } 22 | }) 23 | 24 | test('parse empty list', async () => { 25 | await parseFiles([]) 26 | }) 27 | 28 | test("parsr bad code ", () => { 29 | try { 30 | parseCode("import x 'y'") 31 | fail() 32 | } catch (e) { 33 | console.log(e) 34 | } 35 | }) 36 | -------------------------------------------------------------------------------- /src/dynamic_import_visitor.rs: -------------------------------------------------------------------------------- 1 | use crate::types::{DeclareType, DynamicImportDeclaration}; 2 | use swc_ecma_ast::{CallExpr, Expr, Lit}; 3 | use swc_ecma_visit::{Visit, VisitWith}; 4 | 5 | pub struct DynamicImportVisitor<'a> { 6 | pub hashset: &'a mut Vec, 7 | } 8 | 9 | impl Visit for DynamicImportVisitor<'_> { 10 | fn visit_call_expr(&mut self, node: &CallExpr) { 11 | if node.callee.is_import() { 12 | let arg = node.args.get(0); 13 | 14 | if let Some(eos) = arg { 15 | let expr = *eos.expr.clone(); 16 | if let Expr::Lit(Lit::Str(import_arg)) = expr { 17 | self 18 | .hashset 19 | .push(DeclareType::DynamicImport(DynamicImportDeclaration { 20 | source: import_arg.value.to_string(), 21 | start: import_arg.span.lo.0 as u32, 22 | end: import_arg.span.hi.0 as u32, 23 | })); 24 | } 25 | } 26 | node.visit_children_with(self); 27 | }; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /__test__/performance.test.ts: -------------------------------------------------------------------------------- 1 | import {test} from 'vitest' 2 | import {readFileSync} from 'fs' 3 | import {join} from "path"; 4 | // @ts-ignore 5 | import {parseFiles, parseFilesSync,} from "../index"; 6 | 7 | let files: string[] = []; 8 | 9 | try { 10 | files = readFileSync(join(__dirname, 'list.txt'), 'utf-8').trim().split('\n') 11 | } catch (e) { 12 | } 13 | 14 | if (files.length === 0) { 15 | console.error('if you want to run performance test, put files list in __test__/list.txt') 16 | console.error('a file path per line') 17 | } else { 18 | 19 | test('performance [sync]', async () => { 20 | const start = Date.now() 21 | parseFilesSync(files) 22 | const duration = Date.now() - start; 23 | 24 | console.log( 25 | `[sync] parse ${files.length} files, cost ${duration}ms, average ${duration / files.length}ms per file` 26 | ) 27 | }) 28 | 29 | test('performance [async]', async () => { 30 | const start = Date.now() 31 | await parseFiles(files) 32 | const duration = Date.now() - start; 33 | 34 | console.log( 35 | `[async] parse ${files.length} files, cost ${duration}ms, average ${duration / files.length}ms per file` 36 | ) 37 | }) 38 | } 39 | 40 | test.skip('bypass jest error', () => { 41 | }); -------------------------------------------------------------------------------- /__test__/dynamic-import.test.ts: -------------------------------------------------------------------------------- 1 | import {expect, test} from 'vitest' 2 | import {parseCode, parseFiles} from '../index.js' 3 | 4 | /* 5 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#syntax 6 | // Aggregating modules 7 | export * from "module-name-12"; 8 | export * as name1 from "module-name-12"; 9 | export { name1, nameN } from "module-name-12"; 10 | export { import1 as name1, import2 as name2, nameN } from "module-name-13"; 11 | export { default } from "module-name-14"; 12 | export { default as name1 } from "module-name-15";`)); 13 | */ 14 | 15 | const TEST_TABLE = [ 16 | [ 17 | 'const x = import("mfsu")', 18 | [{ 19 | "source": "mfsu", 20 | "type": "DynamicImport", 21 | "start": expect.any(Number), 22 | "end": expect.any(Number), 23 | }] 24 | ], 25 | [ 26 | 'const x = import("mfsu",{type: "function"})', 27 | [{ 28 | "source": "mfsu", 29 | "type": "DynamicImport", 30 | "start": expect.any(Number), 31 | "end": expect.any(Number), 32 | }] 33 | ], 34 | [ 35 | 'const x = import("a"+"b")', 36 | // ignore non-string literal import 37 | [] 38 | ] 39 | ] as const; 40 | 41 | 42 | for (let [code, expectObj] of TEST_TABLE) { 43 | test(code, () => { 44 | const json = parseCode(code); 45 | expect(json).toEqual( 46 | expectObj 47 | ) 48 | }) 49 | } 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@umijs/es-module-parser", 3 | "version": "0.0.7", 4 | "main": "index.js", 5 | "types": "index.d.ts", 6 | "napi": { 7 | "name": "es-module-parser", 8 | "triples": { 9 | "additional": [ 10 | "aarch64-apple-darwin", 11 | "aarch64-pc-windows-msvc", 12 | "aarch64-unknown-linux-gnu", 13 | "x86_64-unknown-linux-musl", 14 | "aarch64-unknown-linux-musl", 15 | "armv7-unknown-linux-gnueabihf" 16 | ] 17 | } 18 | }, 19 | "license": "MIT", 20 | "devDependencies": { 21 | "@napi-rs/cli": "^2.14.8", 22 | "prettier": "^2.8.4", 23 | "prettier-plugin-organize-imports": "^3.2.2", 24 | "prettier-plugin-packagejson": "^2.4.3", 25 | "vitest": "^0.29.7" 26 | }, 27 | "ava": { 28 | "timeout": "3m" 29 | }, 30 | "engines": { 31 | "node": ">= 10" 32 | }, 33 | "scripts": { 34 | "artifacts": "napi artifacts", 35 | "build": "napi build --platform --release --dts _napi_generated_index.d.ts", 36 | "build:debug": "napi build --platform --dts _napi_generated_index.d.ts", 37 | "prepublishOnly": "napi prepublish -t npm", 38 | "test": "vitest run --passWithNoTests", 39 | "test:dev": "npm run build:debug && npm run test", 40 | "universal": "napi universal", 41 | "version": "napi version", 42 | "tnpm:sync": "node ./scripts/tnpmSync.js" 43 | }, 44 | "packageManager": "yarn@3.4.1" 45 | } 46 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | export type DeclareKind = 'value' | 'type'; 2 | export type Declaration = { 3 | type: 'ImportDeclaration'; 4 | source: string; 5 | specifiers: Array; 6 | importKind: DeclareKind; 7 | start: number; 8 | end: number; 9 | } | { 10 | type: 'DynamicImport'; 11 | source: string; 12 | start: number; 13 | end: number; 14 | } | { 15 | type: 'ExportNamedDeclaration'; 16 | source: string; 17 | specifiers: Array; 18 | exportKind: DeclareKind; 19 | start: number; 20 | end: number; 21 | } | { 22 | type: 'ExportAllDeclaration'; 23 | source: string; 24 | start: number; 25 | end: number; 26 | }; 27 | type SimpleImportSpecifier = { 28 | type: 'ImportDefaultSpecifier'; 29 | local: string; 30 | } | { 31 | type: 'ImportNamespaceSpecifier'; 32 | local: string; 33 | imported: string; 34 | } | { 35 | type: 'ImportNamespaceSpecifier'; 36 | local?: string; 37 | }; 38 | type SimpleExportSpecifier = { 39 | type: 'ExportDefaultSpecifier'; 40 | exported: string; 41 | } | { 42 | type: 'ExportNamespaceSpecifier'; 43 | exported?: string; 44 | } | { 45 | type: 'ExportSpecifier'; 46 | exported: string; 47 | local: string; 48 | }; 49 | 50 | export declare function parseCode(code: string, fileName?: string | undefined | null): Declaration[]; 51 | 52 | export declare function parseFiles(files: string[]): Promise>; 53 | 54 | export declare function parseFilesSync(files: string[]): Record; 55 | 56 | export {}; 57 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![deny(clippy::all)] 2 | 3 | mod dynamic_import_visitor; 4 | mod extract_imports; 5 | mod module_utils; 6 | mod types; 7 | 8 | use crate::extract_imports::extract_module_imports; 9 | use crate::module_utils::{parse_code_to_module, parse_file_to_module}; 10 | use crate::types::DeclareType; 11 | use napi::anyhow::anyhow; 12 | use napi::Result; 13 | use napi_derive::napi; 14 | use rayon::prelude::*; 15 | use serde_json::Value; 16 | use std::collections::HashMap; 17 | 18 | #[napi] 19 | fn parse_code(code: String, file_name: Option) -> Result { 20 | let import_map = extract_from_code(code, file_name)?; 21 | 22 | let value = 23 | serde_json::to_value(&import_map).map_err(|_| anyhow!("serialize import declares error"))?; 24 | 25 | Ok(value) 26 | } 27 | 28 | #[napi] 29 | async fn parse_files(files: Vec) -> Result { 30 | let file_imports = parse_files_in_paralle(&files)?; 31 | 32 | let val = serde_json::to_value(&file_imports)?; 33 | Ok(val) 34 | } 35 | 36 | #[napi] 37 | fn parse_files_sync(files: Vec) -> Result { 38 | let file_imports = parse_files_in_paralle(&files)?; 39 | 40 | let val = serde_json::to_value(&file_imports)?; 41 | Ok(val) 42 | } 43 | 44 | fn parse_files_in_paralle(files: &Vec) -> Result>> { 45 | let mut file_imports: HashMap> = HashMap::new(); 46 | 47 | let mut results: Vec<(&String, Result>)> = Vec::new(); 48 | 49 | files 50 | .par_iter() 51 | .map(|file| { 52 | let result = extract_from_file(&file); 53 | (file, result) 54 | }) 55 | .collect_into_vec(&mut results); 56 | 57 | for (file, result) in results { 58 | match result { 59 | Ok(res) => { 60 | file_imports.insert(file.to_owned(), res); 61 | } 62 | Err(e) => { 63 | return Err(e); 64 | } 65 | }; 66 | } 67 | 68 | Ok(file_imports) 69 | } 70 | 71 | fn extract_from_code(code: String, file_name: Option) -> Result> { 72 | let mut module = parse_code_to_module(code, file_name)?; 73 | Ok(extract_module_imports(&mut module)) 74 | } 75 | 76 | fn extract_from_file(file_name: &String) -> Result> { 77 | let mut module = parse_file_to_module(file_name)?; 78 | let imports = extract_module_imports(&mut module); 79 | Ok(imports) 80 | } 81 | -------------------------------------------------------------------------------- /src/module_utils.rs: -------------------------------------------------------------------------------- 1 | use napi::anyhow::{anyhow, Context}; 2 | use napi::bindgen_prelude::*; 3 | use std::ffi::OsStr; 4 | use std::path::Path; 5 | use swc_common::errors::{ColorConfig, Handler}; 6 | use swc_common::input::StringInput; 7 | use swc_common::sync::Lrc; 8 | use swc_common::{FileName, SourceMap}; 9 | use swc_ecma_ast::Module; 10 | use swc_ecma_parser::lexer::Lexer; 11 | use swc_ecma_parser::{EsConfig, Parser, Syntax, TsConfig}; 12 | 13 | pub fn parse_file_to_module(file_path: &String) -> Result { 14 | let cm: Lrc = Default::default(); 15 | let handler = Handler::with_tty_emitter(ColorConfig::Auto, true, false, Some(cm.clone())); 16 | let path = Path::new(file_path.as_str()); 17 | 18 | let fm = cm 19 | .load_file(path) 20 | .context(format!("Cant load file: {}", file_path))?; 21 | 22 | let lexer = Lexer::new( 23 | path_to_syntax(path), 24 | Default::default(), 25 | StringInput::from(&*fm), 26 | None, 27 | ); 28 | 29 | let mut parser = Parser::new_from(lexer); 30 | 31 | for e in parser.take_errors() { 32 | e.into_diagnostic(&handler).emit(); 33 | } 34 | 35 | let module = parser.parse_module().map_err(|e| { 36 | // Unrecoverable fatal error occurred 37 | e.into_diagnostic(&handler).emit(); 38 | anyhow!("parse module script file failed: {}", file_path) 39 | })?; 40 | 41 | Ok(module) 42 | } 43 | 44 | pub fn parse_code_to_module(code: String, file_name: Option) -> Result { 45 | let cm: Lrc = Default::default(); 46 | let handler = Handler::with_tty_emitter(ColorConfig::Auto, true, false, Some(cm.clone())); 47 | 48 | let default_file_name = "_.tsx".to_string(); 49 | 50 | let file_name: String = if let Some(path) = file_name { 51 | path 52 | } else { 53 | default_file_name.clone() 54 | }; 55 | 56 | let fm = cm.new_source_file(FileName::Custom(default_file_name), code); 57 | let lexer = Lexer::new( 58 | path_to_syntax(Path::new(&file_name)), 59 | Default::default(), 60 | StringInput::from(&*fm), 61 | None, 62 | ); 63 | 64 | let mut parser = Parser::new_from(lexer); 65 | 66 | for e in parser.take_errors() { 67 | e.into_diagnostic(&handler).emit(); 68 | } 69 | 70 | let m = parser.parse_module().map_err(|e| { 71 | e.into_diagnostic(&handler).emit(); 72 | anyhow!("parse module script code failed") 73 | })?; 74 | 75 | Ok(m) 76 | } 77 | 78 | fn path_to_syntax(p: &Path) -> Syntax { 79 | let default_syntax = Syntax::Typescript(TsConfig { 80 | tsx: true, 81 | decorators: true, 82 | ..Default::default() 83 | }); 84 | 85 | if let Some(ext) = p.extension().and_then(OsStr::to_str) { 86 | match ext { 87 | "js" | "jsx" | "mjs" => Syntax::Es(EsConfig { 88 | decorators: true, 89 | decorators_before_export: true, 90 | jsx: true, 91 | export_default_from: true, 92 | ..Default::default() 93 | }), 94 | "ts" => Syntax::Typescript(TsConfig { 95 | tsx: false, 96 | decorators: true, 97 | ..Default::default() 98 | }), 99 | "tsx" => Syntax::Typescript(TsConfig { 100 | tsx: true, 101 | decorators: true, 102 | ..Default::default() 103 | }), 104 | _ => default_syntax, 105 | } 106 | } else { 107 | default_syntax 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/types.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | #[derive(Serialize, Deserialize)] 4 | #[serde(tag = "type")] 5 | pub enum DeclareType { 6 | #[serde(rename = "ImportDeclaration")] 7 | Import(SimpleImportDeclaration), 8 | 9 | #[serde(rename = "DynamicImport")] 10 | DynamicImport(DynamicImportDeclaration), 11 | 12 | #[serde(rename = "ExportNamedDeclaration")] 13 | NamedExport(ExportNamedDeclaration), 14 | #[serde(rename = "ExportAllDeclaration")] 15 | AllExport(ExportAllDeclaration), 16 | } 17 | 18 | #[derive(Serialize, Deserialize)] 19 | pub struct SimpleImportDeclaration { 20 | pub source: String, 21 | pub specifiers: Vec, 22 | #[serde(rename = "importKind")] 23 | pub import_kind: DeclareKind, 24 | pub start: u32, 25 | pub end: u32, 26 | } 27 | 28 | #[derive(Serialize, Deserialize)] 29 | pub struct DynamicImportDeclaration { 30 | pub source: String, 31 | pub start: u32, 32 | pub end: u32, 33 | } 34 | 35 | #[derive(Serialize, Deserialize)] 36 | pub struct ExportNamedDeclaration { 37 | pub source: String, 38 | pub specifiers: Vec, 39 | #[serde(rename = "exportKind")] 40 | pub export_kind: DeclareKind, 41 | pub start: u32, 42 | pub end: u32, 43 | } 44 | 45 | #[derive(Serialize, Deserialize)] 46 | pub struct ExportAllDeclaration { 47 | pub source: String, 48 | pub start: u32, 49 | pub end: u32, 50 | } 51 | 52 | #[derive(Serialize, Deserialize, Debug, Clone)] 53 | #[serde(tag = "type")] 54 | pub enum SimpleImportSpecifier { 55 | #[serde(rename = "ImportDefaultSpecifier")] 56 | DefaultImport(ImportDefaultName), 57 | 58 | #[serde(rename = "ImportSpecifier")] 59 | NamedImport(NamedImportName), 60 | 61 | #[serde(rename = "ImportNamespaceSpecifier")] 62 | NamespaceImport(NamespaceName), 63 | } 64 | 65 | #[derive(Serialize, Deserialize, Debug, Clone)] 66 | #[serde(tag = "type")] 67 | pub enum SimpleExportSpecifier { 68 | #[serde(rename = "ExportDefaultSpecifier")] 69 | DefaultExport(ExportDefaultName), 70 | 71 | #[serde(rename = "ExportNamespaceSpecifier")] 72 | NamespaceExport(ExportNamespaceSpecifier), 73 | 74 | #[serde(rename = "ExportSpecifier")] 75 | NamedExport(NamedExportNameSpecifier), 76 | } 77 | 78 | #[derive(Serialize, Deserialize, Debug, Clone)] 79 | pub struct NamedExportNameSpecifier { 80 | pub exported: String, 81 | pub local: String, 82 | } 83 | 84 | #[derive(Serialize, Deserialize, Debug, Clone)] 85 | pub struct ExportNamespaceSpecifier { 86 | pub exported: String, 87 | } 88 | 89 | #[derive(Serialize, Deserialize, Debug, Clone)] 90 | pub struct NamespaceName { 91 | pub local: Option, 92 | } 93 | 94 | #[derive(Serialize, Deserialize, Debug, Clone)] 95 | pub struct DynamicName {} 96 | 97 | #[derive(Serialize, Deserialize, Debug, Clone)] 98 | pub struct ImportDefaultName { 99 | pub local: Option, 100 | } 101 | 102 | #[derive(Serialize, Deserialize, Debug, Clone)] 103 | pub struct ExportDefaultName { 104 | pub exported: String, 105 | } 106 | 107 | #[derive(Serialize, Deserialize, Debug, Clone)] 108 | pub struct NamedImportName { 109 | pub local: String, 110 | pub imported: String, 111 | } 112 | 113 | #[derive(Serialize, Deserialize)] 114 | pub enum DeclareKind { 115 | #[serde(rename = "value")] 116 | Value, 117 | #[serde(rename = "type")] 118 | Type, 119 | } 120 | -------------------------------------------------------------------------------- /__test__/export-declaration.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from 'vitest' 2 | import {parseCode, parseFiles} from '../index.js' 3 | 4 | /* 5 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#syntax 6 | // Aggregating modules 7 | export * from "module-name-12"; 8 | export * as name1 from "module-name-12"; 9 | export { name1, nameN } from "module-name-12"; 10 | export { import1 as name1, import2 as name2, nameN } from "module-name-13"; 11 | export { default } from "module-name-14"; 12 | export { default as name1 } from "module-name-15";`)); 13 | */ 14 | 15 | const TEST_TABLE = [ 16 | [ 17 | 'export * from "a";', 18 | { 19 | "type": "ExportAllDeclaration", 20 | "source": "a", 21 | "start": expect.any(Number), 22 | "end": expect.any(Number), 23 | } 24 | ], 25 | [ 26 | 'export * as ns from "a"', 27 | { 28 | "type": "ExportNamedDeclaration", 29 | "source": "a", 30 | "specifiers": [ 31 | { 32 | "exported": "ns", 33 | "type": "ExportNamespaceSpecifier" 34 | } 35 | ], 36 | "start": 1, 37 | "end": 24, 38 | "exportKind": "value", 39 | } 40 | ], 41 | [ 42 | 'export {n1} from "a"', 43 | { 44 | "type": "ExportNamedDeclaration", 45 | "exportKind": "value", 46 | "source": "a", 47 | "specifiers": [ 48 | { 49 | "exported": "n1", 50 | "local": "n1", 51 | "type": "ExportSpecifier" 52 | } 53 | ], 54 | "start": expect.any(Number), 55 | "end": expect.any(Number), 56 | } 57 | ], 58 | [ 59 | 'export {n1 as n2} from "a"', 60 | { 61 | "type": "ExportNamedDeclaration", 62 | "exportKind": "value", 63 | "source": "a", 64 | "specifiers": [ 65 | { 66 | "exported": "n2", 67 | "local": "n1", 68 | "type": "ExportSpecifier" 69 | } 70 | ], 71 | "start": expect.any(Number), 72 | "end": expect.any(Number), 73 | } 74 | ], 75 | [ 76 | 'export { default } from "a"', 77 | { 78 | "type": "ExportNamedDeclaration", 79 | "exportKind": "value", 80 | "source": "a", 81 | "specifiers": [ 82 | { 83 | "exported": "default", 84 | "local": "default", 85 | "type": "ExportSpecifier" 86 | } 87 | ], 88 | "start": expect.any(Number), 89 | "end": expect.any(Number), 90 | } 91 | ], 92 | [ 93 | 'export { default as n } from "a"', 94 | { 95 | "type": "ExportNamedDeclaration", 96 | "exportKind": "value", 97 | "source": "a", 98 | "specifiers": [ 99 | { 100 | "exported": "n", 101 | "local": "default", 102 | "type": "ExportSpecifier" 103 | } 104 | ], 105 | "start": expect.any(Number), 106 | "end": expect.any(Number), 107 | } 108 | ], 109 | ] as const; 110 | 111 | // ts doesn't allow this 112 | // in swc js, need to turn on this by 113 | test('export x from "a"', () => { 114 | const imps = parseCode(`export x from "a"`, 'x.js'); 115 | expect(imps).toEqual( 116 | [{ 117 | "type": "ExportNamedDeclaration", 118 | "specifiers": [{"exported": "x", "type": "ExportDefaultSpecifier"}], 119 | "exportKind": "value", 120 | "source": "a", 121 | "start": expect.any(Number), 122 | "end": expect.any(Number), 123 | }] 124 | ) 125 | 126 | }) 127 | 128 | test.skip('export type * from "a"', () => { 129 | // swc treat it same as export * from "a" 130 | // so we cant ge exportKind 131 | fail(); 132 | }) 133 | 134 | 135 | for (let [code, expectObj] of TEST_TABLE) { 136 | test(code, () => { 137 | const json = parseCode(code); 138 | expect(json).toEqual([ 139 | expectObj 140 | ]) 141 | }) 142 | } 143 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/node 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node 3 | 4 | ### Node ### 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | node_modules/ 46 | jspm_packages/ 47 | 48 | # TypeScript v1 declaration files 49 | typings/ 50 | 51 | # TypeScript cache 52 | *.tsbuildinfo 53 | 54 | # Optional npm cache directory 55 | .npm 56 | 57 | # Optional eslint cache 58 | .eslintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variables file 76 | .env 77 | .env.test 78 | 79 | # parcel-bundler cache (https://parceljs.org/) 80 | .cache 81 | 82 | # Next.js build output 83 | .next 84 | 85 | # Nuxt.js build / generate output 86 | .nuxt 87 | dist 88 | 89 | # Gatsby files 90 | .cache/ 91 | # Comment in the public line in if your project uses Gatsby and not Next.js 92 | # https://nextjs.org/blog/next-9-1#public-directory-support 93 | # public 94 | 95 | # vuepress build output 96 | .vuepress/dist 97 | 98 | # Serverless directories 99 | .serverless/ 100 | 101 | # FuseBox cache 102 | .fusebox/ 103 | 104 | # DynamoDB Local files 105 | .dynamodb/ 106 | 107 | # TernJS port file 108 | .tern-port 109 | 110 | # Stores VSCode versions used for testing VSCode extensions 111 | .vscode-test 112 | 113 | # End of https://www.toptal.com/developers/gitignore/api/node 114 | 115 | # Created by https://www.toptal.com/developers/gitignore/api/macos 116 | # Edit at https://www.toptal.com/developers/gitignore?templates=macos 117 | 118 | ### macOS ### 119 | # General 120 | .DS_Store 121 | .AppleDouble 122 | .LSOverride 123 | 124 | # Icon must end with two 125 | Icon 126 | 127 | 128 | # Thumbnails 129 | ._* 130 | 131 | # Files that might appear in the root of a volume 132 | .DocumentRevisions-V100 133 | .fseventsd 134 | .Spotlight-V100 135 | .TemporaryItems 136 | .Trashes 137 | .VolumeIcon.icns 138 | .com.apple.timemachine.donotpresent 139 | 140 | # Directories potentially created on remote AFP share 141 | .AppleDB 142 | .AppleDesktop 143 | Network Trash Folder 144 | Temporary Items 145 | .apdisk 146 | 147 | ### macOS Patch ### 148 | # iCloud generated files 149 | *.icloud 150 | 151 | # End of https://www.toptal.com/developers/gitignore/api/macos 152 | 153 | # Created by https://www.toptal.com/developers/gitignore/api/windows 154 | # Edit at https://www.toptal.com/developers/gitignore?templates=windows 155 | 156 | ### Windows ### 157 | # Windows thumbnail cache files 158 | Thumbs.db 159 | Thumbs.db:encryptable 160 | ehthumbs.db 161 | ehthumbs_vista.db 162 | 163 | # Dump file 164 | *.stackdump 165 | 166 | # Folder config file 167 | [Dd]esktop.ini 168 | 169 | # Recycle Bin used on file shares 170 | $RECYCLE.BIN/ 171 | 172 | # Windows Installer files 173 | *.cab 174 | *.msi 175 | *.msix 176 | *.msm 177 | *.msp 178 | 179 | # Windows shortcuts 180 | *.lnk 181 | 182 | # End of https://www.toptal.com/developers/gitignore/api/windows 183 | 184 | #Added by cargo 185 | 186 | /target 187 | Cargo.lock 188 | 189 | .pnp.* 190 | .yarn/* 191 | !.yarn/patches 192 | !.yarn/plugins 193 | !.yarn/releases 194 | !.yarn/sdks 195 | !.yarn/versions 196 | 197 | *.node 198 | __test__/list.* 199 | _napi_generated_index.d.ts 200 | -------------------------------------------------------------------------------- /__test__/imort-declaration.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from 'vitest' 2 | import {parseCode, parseFiles} from '../index.js' 3 | 4 | /* 5 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#syntax 6 | import defaultExport from "module-name-1"; 7 | import * as name from "module-name-2"; 8 | import { export1 } from "module-name-3"; 9 | import { export1 as alias1 } from "module-name-4"; 10 | import { default as alias } from "module-name-5"; 11 | import { export1, export2 } from "module-name-6 "; 12 | import { export1, export2 as alias2,} from "module-name-7"; 13 | import { "string name" as alias } from "module-name-8"; 14 | import defaultExport, { export1 } from "module-name-9"; 15 | import defaultExport, * as name from "module-name-10"; 16 | import "module-name-11"; 17 | 18 | */ 19 | 20 | const TEST_TABLE = [ 21 | [ 22 | 'import d from "a";', 23 | { 24 | "type": "ImportDeclaration", 25 | "source": "a", 26 | "specifiers": [ 27 | { 28 | "local": "d", 29 | "type": "ImportDefaultSpecifier" 30 | } 31 | ], 32 | "start": expect.any(Number), 33 | "end": expect.any(Number), 34 | "importKind": "value", 35 | } 36 | ], 37 | [ 38 | 'import * as name from "a";', 39 | { 40 | "type": "ImportDeclaration", 41 | "source": "a", 42 | "specifiers": [ 43 | { 44 | "local": "name", 45 | "type": "ImportNamespaceSpecifier" 46 | } 47 | ], 48 | "importKind": "value", 49 | "start": expect.any(Number), 50 | "end": expect.any(Number), 51 | } 52 | ], 53 | [ 54 | `import { e } from "a";`, 55 | { 56 | "type": "ImportDeclaration", 57 | "importKind": "value", 58 | "source": "a", 59 | "specifiers": [ 60 | { 61 | "imported": "e", 62 | "local": "e", 63 | "type": "ImportSpecifier" 64 | } 65 | ], 66 | "end": expect.any(Number), 67 | "start": expect.any(Number), 68 | } 69 | ], 70 | [ 71 | `import { e as f} from "a";`, 72 | { 73 | "type": "ImportDeclaration", 74 | "importKind": "value", 75 | "source": "a", 76 | "specifiers": [ 77 | { 78 | "imported": "e", 79 | "local": "f", 80 | "type": "ImportSpecifier" 81 | } 82 | ], 83 | "end": expect.any(Number), 84 | "start": expect.any(Number), 85 | } 86 | ], 87 | [ 88 | `import { default as f} from "a";`, 89 | { 90 | "type": "ImportDeclaration", 91 | "importKind": "value", 92 | "source": "a", 93 | "specifiers": [ 94 | { 95 | "imported": "default", 96 | "local": "f", 97 | "type": "ImportSpecifier" 98 | } 99 | ], 100 | "end": expect.any(Number), 101 | "start": expect.any(Number), 102 | } 103 | ], 104 | [ 105 | `import { "spaced name" as alias } from "a";`, 106 | { 107 | "type": "ImportDeclaration", 108 | "importKind": "value", 109 | "source": "a", 110 | "specifiers": [ 111 | { 112 | "imported": "spaced name", 113 | "local": "alias", 114 | "type": "ImportSpecifier" 115 | } 116 | ], 117 | "start": expect.any(Number), 118 | "end": expect.any(Number), 119 | } 120 | ], 121 | 122 | [`import d, { n } from "a";`, 123 | { 124 | "type": "ImportDeclaration", 125 | "importKind": "value", 126 | "source": "a", 127 | "specifiers": [ 128 | { 129 | "local": "d", 130 | "type": "ImportDefaultSpecifier" 131 | }, 132 | { 133 | "imported": "n", 134 | "local": "n", 135 | "type": "ImportSpecifier" 136 | } 137 | ], 138 | "start": expect.any(Number), 139 | "end": expect.any(Number), 140 | } 141 | ], 142 | [ 143 | `import d, * as ns from "a";`, 144 | { 145 | "type": "ImportDeclaration", 146 | "source": "a", 147 | "specifiers": [ 148 | { 149 | "local": "d", 150 | "type": "ImportDefaultSpecifier" 151 | }, 152 | { 153 | "local": "ns", 154 | "type": "ImportNamespaceSpecifier" 155 | } 156 | ], 157 | "importKind": "value", 158 | "start": 1, 159 | "end": 28, 160 | } 161 | ], 162 | 163 | [ 164 | 'import "a";', 165 | { 166 | "type": "ImportDeclaration", 167 | "source": "a", 168 | "importKind": "value", 169 | "specifiers": [], 170 | "start": expect.any(Number), 171 | "end": expect.any(Number), 172 | } 173 | ] 174 | 175 | ] as const; 176 | 177 | 178 | 179 | for (let [code, expectObj] of TEST_TABLE) { 180 | test(code, () => { 181 | const json = parseCode(code); 182 | expect(json).toEqual([ 183 | expectObj 184 | ]) 185 | }) 186 | } -------------------------------------------------------------------------------- /src/extract_imports.rs: -------------------------------------------------------------------------------- 1 | use crate::dynamic_import_visitor::DynamicImportVisitor; 2 | use crate::types::{ 3 | DeclareKind, DeclareType, ExportAllDeclaration, ExportDefaultName, ExportNamedDeclaration, 4 | ExportNamespaceSpecifier, ImportDefaultName, NamedImportName, NamespaceName, 5 | SimpleExportSpecifier, SimpleImportDeclaration, SimpleImportSpecifier, 6 | }; 7 | use swc_common::Span; 8 | use swc_ecma_ast::{ 9 | ExportSpecifier, ImportDecl, ImportSpecifier, Module, ModuleDecl, ModuleExportName, ModuleItem, 10 | NamedExport, 11 | }; 12 | use swc_ecma_visit::VisitWith; 13 | 14 | pub fn extract_module_imports(module: &mut Module) -> Vec { 15 | let mut declarations: Vec = Vec::new(); 16 | 17 | let mut v = DynamicImportVisitor { 18 | hashset: &mut declarations, 19 | }; 20 | module.visit_with(&mut v); 21 | 22 | fn handle_module_import_decl(import_decl: &ImportDecl, decls: &mut Vec) { 23 | let mut my_specifiers: Vec = Vec::new(); 24 | 25 | import_decl.specifiers.iter().for_each(|specifier| { 26 | match specifier { 27 | ImportSpecifier::Named(named_specifier) => { 28 | match &named_specifier.imported { 29 | // imported 存在, eg: import { foo as bar } from 'baz' 30 | Some(module_export_name) => match module_export_name { 31 | ModuleExportName::Str(str) => { 32 | my_specifiers.push(SimpleImportSpecifier::NamedImport(NamedImportName { 33 | local: named_specifier.local.sym.to_string(), 34 | imported: str.value.to_string(), 35 | })); 36 | } 37 | ModuleExportName::Ident(id) => { 38 | my_specifiers.push(SimpleImportSpecifier::NamedImport(NamedImportName { 39 | local: named_specifier.local.sym.to_string(), 40 | imported: id.sym.to_string(), 41 | })); 42 | } 43 | }, 44 | // imported 不存在, eg: import { foo } from 'baz' 45 | None => { 46 | my_specifiers.push(SimpleImportSpecifier::NamedImport(NamedImportName { 47 | local: named_specifier.local.sym.to_string(), 48 | imported: named_specifier.local.sym.to_string(), 49 | })); 50 | } 51 | } 52 | } 53 | // import x from 'y' 54 | ImportSpecifier::Default(default_specifier) => { 55 | my_specifiers.push(SimpleImportSpecifier::DefaultImport(ImportDefaultName { 56 | local: Some(default_specifier.local.sym.to_string()), 57 | })); 58 | } 59 | // import * as b from 'a' 60 | ImportSpecifier::Namespace(namespace_specifier) => { 61 | my_specifiers.push(SimpleImportSpecifier::NamespaceImport(NamespaceName { 62 | local: Some(namespace_specifier.local.sym.to_string()), 63 | })); 64 | } 65 | } 66 | }); 67 | 68 | decls.push(DeclareType::Import(SimpleImportDeclaration { 69 | import_kind: if import_decl.type_only { 70 | DeclareKind::Type 71 | } else { 72 | DeclareKind::Value 73 | }, 74 | source: import_decl.src.value.to_string(), 75 | specifiers: my_specifiers, 76 | start: start_of(&import_decl.span), 77 | end: end_of(&import_decl.span), 78 | })); 79 | } 80 | 81 | fn handle_module_export_with_name(export_name_decl: &NamedExport, all: &mut Vec) { 82 | if let Some(str) = &export_name_decl.src { 83 | let mut specifiers: Vec = Vec::new(); 84 | 85 | export_name_decl.specifiers.iter().for_each(|specifier| { 86 | match specifier { 87 | ExportSpecifier::Named(named_specifier) => { 88 | if let Some(exported) = &named_specifier.exported { 89 | specifiers.push(SimpleExportSpecifier::NamedExport( 90 | crate::types::NamedExportNameSpecifier { 91 | exported: specifier_name(exported).to_string(), 92 | local: specifier_name(&named_specifier.orig).to_string(), 93 | }, 94 | )); 95 | return; 96 | } 97 | 98 | specifiers.push(SimpleExportSpecifier::NamedExport( 99 | crate::types::NamedExportNameSpecifier { 100 | local: specifier_name(&named_specifier.orig).to_string(), 101 | exported: specifier_name(&named_specifier.orig).to_string(), 102 | }, 103 | )); 104 | } 105 | ExportSpecifier::Default(default_specifier) => { 106 | //todo: swc does not support export x from 'xx' 107 | specifiers.push(SimpleExportSpecifier::DefaultExport(ExportDefaultName { 108 | exported: default_specifier.exported.sym.to_string(), 109 | })); 110 | } 111 | // eg export * as foo from 'bar' 112 | ExportSpecifier::Namespace(namespace_specifier) => { 113 | specifiers.push(SimpleExportSpecifier::NamespaceExport( 114 | ExportNamespaceSpecifier { 115 | exported: specifier_name(&namespace_specifier.name), 116 | }, 117 | )); 118 | } 119 | } 120 | }); 121 | 122 | all.push(DeclareType::NamedExport(ExportNamedDeclaration { 123 | export_kind: if export_name_decl.type_only { 124 | DeclareKind::Type 125 | } else { 126 | DeclareKind::Value 127 | }, 128 | source: str.value.to_string(), 129 | specifiers, 130 | start: start_of(&export_name_decl.span), 131 | end: end_of(&export_name_decl.span), 132 | })) 133 | } 134 | } 135 | 136 | for node in &module.body { 137 | match node { 138 | ModuleItem::ModuleDecl(ModuleDecl::Import(import_decl)) => { 139 | handle_module_import_decl(import_decl, &mut declarations); 140 | } 141 | 142 | ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(export_name_decl)) => { 143 | // export {x,y} from "z" ; the otherwise case export { x }; 144 | handle_module_export_with_name(export_name_decl, &mut declarations); 145 | } 146 | ModuleItem::ModuleDecl(ModuleDecl::ExportAll(export_all_ecl)) => { 147 | declarations.push(DeclareType::AllExport(ExportAllDeclaration { 148 | source: export_all_ecl.src.value.to_string(), 149 | start: start_of(&export_all_ecl.span), 150 | end: end_of(&export_all_ecl.span), 151 | })); 152 | } 153 | _ => {} 154 | } 155 | } 156 | 157 | declarations 158 | } 159 | 160 | fn specifier_name(export_specifier: &ModuleExportName) -> String { 161 | match export_specifier { 162 | ModuleExportName::Ident(ident) => ident.sym.to_string(), 163 | ModuleExportName::Str(str) => str.value.to_string(), 164 | } 165 | } 166 | 167 | fn start_of(span: &Span) -> u32 { 168 | span.lo.0 as u32 169 | } 170 | fn end_of(span: &Span) -> u32 { 171 | span.hi.0 as u32 172 | } 173 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /* prettier-ignore */ 4 | 5 | /* auto-generated by NAPI-RS */ 6 | 7 | const { existsSync, readFileSync } = require('fs') 8 | const { join } = require('path') 9 | 10 | const { platform, arch } = process 11 | 12 | let nativeBinding = null 13 | let localFileExisted = false 14 | let loadError = null 15 | 16 | function isMusl() { 17 | // For Node 10 18 | if (!process.report || typeof process.report.getReport !== 'function') { 19 | try { 20 | const lddPath = require('child_process').execSync('which ldd').toString().trim(); 21 | return readFileSync(lddPath, 'utf8').includes('musl') 22 | } catch (e) { 23 | return true 24 | } 25 | } else { 26 | const { glibcVersionRuntime } = process.report.getReport().header 27 | return !glibcVersionRuntime 28 | } 29 | } 30 | 31 | switch (platform) { 32 | case 'android': 33 | switch (arch) { 34 | case 'arm64': 35 | localFileExisted = existsSync(join(__dirname, 'es-module-parser.android-arm64.node')) 36 | try { 37 | if (localFileExisted) { 38 | nativeBinding = require('./es-module-parser.android-arm64.node') 39 | } else { 40 | nativeBinding = require('@umijs/es-module-parser-android-arm64') 41 | } 42 | } catch (e) { 43 | loadError = e 44 | } 45 | break 46 | case 'arm': 47 | localFileExisted = existsSync(join(__dirname, 'es-module-parser.android-arm-eabi.node')) 48 | try { 49 | if (localFileExisted) { 50 | nativeBinding = require('./es-module-parser.android-arm-eabi.node') 51 | } else { 52 | nativeBinding = require('@umijs/es-module-parser-android-arm-eabi') 53 | } 54 | } catch (e) { 55 | loadError = e 56 | } 57 | break 58 | default: 59 | throw new Error(`Unsupported architecture on Android ${arch}`) 60 | } 61 | break 62 | case 'win32': 63 | switch (arch) { 64 | case 'x64': 65 | localFileExisted = existsSync( 66 | join(__dirname, 'es-module-parser.win32-x64-msvc.node') 67 | ) 68 | try { 69 | if (localFileExisted) { 70 | nativeBinding = require('./es-module-parser.win32-x64-msvc.node') 71 | } else { 72 | nativeBinding = require('@umijs/es-module-parser-win32-x64-msvc') 73 | } 74 | } catch (e) { 75 | loadError = e 76 | } 77 | break 78 | case 'ia32': 79 | localFileExisted = existsSync( 80 | join(__dirname, 'es-module-parser.win32-ia32-msvc.node') 81 | ) 82 | try { 83 | if (localFileExisted) { 84 | nativeBinding = require('./es-module-parser.win32-ia32-msvc.node') 85 | } else { 86 | nativeBinding = require('@umijs/es-module-parser-win32-ia32-msvc') 87 | } 88 | } catch (e) { 89 | loadError = e 90 | } 91 | break 92 | case 'arm64': 93 | localFileExisted = existsSync( 94 | join(__dirname, 'es-module-parser.win32-arm64-msvc.node') 95 | ) 96 | try { 97 | if (localFileExisted) { 98 | nativeBinding = require('./es-module-parser.win32-arm64-msvc.node') 99 | } else { 100 | nativeBinding = require('@umijs/es-module-parser-win32-arm64-msvc') 101 | } 102 | } catch (e) { 103 | loadError = e 104 | } 105 | break 106 | default: 107 | throw new Error(`Unsupported architecture on Windows: ${arch}`) 108 | } 109 | break 110 | case 'darwin': 111 | localFileExisted = existsSync(join(__dirname, 'es-module-parser.darwin-universal.node')) 112 | try { 113 | if (localFileExisted) { 114 | nativeBinding = require('./es-module-parser.darwin-universal.node') 115 | } else { 116 | nativeBinding = require('@umijs/es-module-parser-darwin-universal') 117 | } 118 | break 119 | } catch {} 120 | switch (arch) { 121 | case 'x64': 122 | localFileExisted = existsSync(join(__dirname, 'es-module-parser.darwin-x64.node')) 123 | try { 124 | if (localFileExisted) { 125 | nativeBinding = require('./es-module-parser.darwin-x64.node') 126 | } else { 127 | nativeBinding = require('@umijs/es-module-parser-darwin-x64') 128 | } 129 | } catch (e) { 130 | loadError = e 131 | } 132 | break 133 | case 'arm64': 134 | localFileExisted = existsSync( 135 | join(__dirname, 'es-module-parser.darwin-arm64.node') 136 | ) 137 | try { 138 | if (localFileExisted) { 139 | nativeBinding = require('./es-module-parser.darwin-arm64.node') 140 | } else { 141 | nativeBinding = require('@umijs/es-module-parser-darwin-arm64') 142 | } 143 | } catch (e) { 144 | loadError = e 145 | } 146 | break 147 | default: 148 | throw new Error(`Unsupported architecture on macOS: ${arch}`) 149 | } 150 | break 151 | case 'freebsd': 152 | if (arch !== 'x64') { 153 | throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) 154 | } 155 | localFileExisted = existsSync(join(__dirname, 'es-module-parser.freebsd-x64.node')) 156 | try { 157 | if (localFileExisted) { 158 | nativeBinding = require('./es-module-parser.freebsd-x64.node') 159 | } else { 160 | nativeBinding = require('@umijs/es-module-parser-freebsd-x64') 161 | } 162 | } catch (e) { 163 | loadError = e 164 | } 165 | break 166 | case 'linux': 167 | switch (arch) { 168 | case 'x64': 169 | if (isMusl()) { 170 | localFileExisted = existsSync( 171 | join(__dirname, 'es-module-parser.linux-x64-musl.node') 172 | ) 173 | try { 174 | if (localFileExisted) { 175 | nativeBinding = require('./es-module-parser.linux-x64-musl.node') 176 | } else { 177 | nativeBinding = require('@umijs/es-module-parser-linux-x64-musl') 178 | } 179 | } catch (e) { 180 | loadError = e 181 | } 182 | } else { 183 | localFileExisted = existsSync( 184 | join(__dirname, 'es-module-parser.linux-x64-gnu.node') 185 | ) 186 | try { 187 | if (localFileExisted) { 188 | nativeBinding = require('./es-module-parser.linux-x64-gnu.node') 189 | } else { 190 | nativeBinding = require('@umijs/es-module-parser-linux-x64-gnu') 191 | } 192 | } catch (e) { 193 | loadError = e 194 | } 195 | } 196 | break 197 | case 'arm64': 198 | if (isMusl()) { 199 | localFileExisted = existsSync( 200 | join(__dirname, 'es-module-parser.linux-arm64-musl.node') 201 | ) 202 | try { 203 | if (localFileExisted) { 204 | nativeBinding = require('./es-module-parser.linux-arm64-musl.node') 205 | } else { 206 | nativeBinding = require('@umijs/es-module-parser-linux-arm64-musl') 207 | } 208 | } catch (e) { 209 | loadError = e 210 | } 211 | } else { 212 | localFileExisted = existsSync( 213 | join(__dirname, 'es-module-parser.linux-arm64-gnu.node') 214 | ) 215 | try { 216 | if (localFileExisted) { 217 | nativeBinding = require('./es-module-parser.linux-arm64-gnu.node') 218 | } else { 219 | nativeBinding = require('@umijs/es-module-parser-linux-arm64-gnu') 220 | } 221 | } catch (e) { 222 | loadError = e 223 | } 224 | } 225 | break 226 | case 'arm': 227 | localFileExisted = existsSync( 228 | join(__dirname, 'es-module-parser.linux-arm-gnueabihf.node') 229 | ) 230 | try { 231 | if (localFileExisted) { 232 | nativeBinding = require('./es-module-parser.linux-arm-gnueabihf.node') 233 | } else { 234 | nativeBinding = require('@umijs/es-module-parser-linux-arm-gnueabihf') 235 | } 236 | } catch (e) { 237 | loadError = e 238 | } 239 | break 240 | default: 241 | throw new Error(`Unsupported architecture on Linux: ${arch}`) 242 | } 243 | break 244 | default: 245 | throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) 246 | } 247 | 248 | if (!nativeBinding) { 249 | if (loadError) { 250 | throw loadError 251 | } 252 | throw new Error(`Failed to load native binding`) 253 | } 254 | 255 | const { parseCode, parseFiles, parseFilesSync } = nativeBinding 256 | 257 | module.exports.parseCode = parseCode 258 | module.exports.parseFiles = parseFiles 259 | module.exports.parseFilesSync = parseFilesSync 260 | -------------------------------------------------------------------------------- /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | env: 3 | DEBUG: napi:* 4 | APP_NAME: es-module-parser 5 | MACOSX_DEPLOYMENT_TARGET: '10.13' 6 | 'on': 7 | push: 8 | branches: 9 | - master 10 | tags-ignore: 11 | - '**' 12 | paths-ignore: 13 | - '**/*.md' 14 | - LICENSE 15 | - '**/*.gitignore' 16 | - .editorconfig 17 | - docs/** 18 | pull_request: null 19 | jobs: 20 | build: 21 | strategy: 22 | fail-fast: false 23 | matrix: 24 | settings: 25 | - host: macos-latest 26 | target: x86_64-apple-darwin 27 | build: | 28 | yarn build 29 | strip -x *.node 30 | - host: windows-latest 31 | build: yarn build 32 | target: x86_64-pc-windows-msvc 33 | - host: ubuntu-latest 34 | target: x86_64-unknown-linux-gnu 35 | docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian 36 | build: |- 37 | set -e && 38 | yarn build --target x86_64-unknown-linux-gnu && 39 | strip *.node 40 | - host: ubuntu-latest 41 | target: x86_64-unknown-linux-musl 42 | docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine 43 | build: set -e && yarn build && strip *.node 44 | - host: macos-latest 45 | target: aarch64-apple-darwin 46 | build: | 47 | yarn build --target aarch64-apple-darwin 48 | strip -x *.node 49 | - host: ubuntu-latest 50 | target: aarch64-unknown-linux-gnu 51 | docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 52 | build: |- 53 | set -e && 54 | yarn build --target aarch64-unknown-linux-gnu && 55 | aarch64-unknown-linux-gnu-strip *.node 56 | - host: ubuntu-latest 57 | target: armv7-unknown-linux-gnueabihf 58 | setup: | 59 | sudo apt-get update 60 | sudo apt-get install gcc-arm-linux-gnueabihf -y 61 | build: | 62 | yarn build --target armv7-unknown-linux-gnueabihf 63 | arm-linux-gnueabihf-strip *.node 64 | - host: ubuntu-latest 65 | target: aarch64-unknown-linux-musl 66 | docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine 67 | build: |- 68 | set -e && 69 | rustup target add aarch64-unknown-linux-musl && 70 | yarn build --target aarch64-unknown-linux-musl && 71 | /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node 72 | - host: windows-latest 73 | target: aarch64-pc-windows-msvc 74 | build: yarn build --target aarch64-pc-windows-msvc 75 | name: stable - ${{ matrix.settings.target }} - node@18 76 | runs-on: ${{ matrix.settings.host }} 77 | steps: 78 | - uses: actions/checkout@v3 79 | - name: Setup node 80 | uses: actions/setup-node@v3 81 | if: ${{ !matrix.settings.docker }} 82 | with: 83 | node-version: 18 84 | check-latest: true 85 | cache: yarn 86 | - name: Install 87 | uses: dtolnay/rust-toolchain@stable 88 | if: ${{ !matrix.settings.docker }} 89 | with: 90 | toolchain: stable 91 | targets: ${{ matrix.settings.target }} 92 | - name: Cache cargo 93 | uses: actions/cache@v3 94 | with: 95 | path: | 96 | ~/.cargo/registry/index/ 97 | ~/.cargo/registry/cache/ 98 | ~/.cargo/git/db/ 99 | .cargo-cache 100 | target/ 101 | key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} 102 | - uses: goto-bus-stop/setup-zig@v2 103 | if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} 104 | with: 105 | version: 0.10.1 106 | - name: Setup toolchain 107 | run: ${{ matrix.settings.setup }} 108 | if: ${{ matrix.settings.setup }} 109 | shell: bash 110 | - name: Setup node x86 111 | if: matrix.settings.target == 'i686-pc-windows-msvc' 112 | run: yarn config set supportedArchitectures.cpu "ia32" 113 | shell: bash 114 | - name: Install dependencies 115 | run: yarn install 116 | - name: Setup node x86 117 | uses: actions/setup-node@v3 118 | if: matrix.settings.target == 'i686-pc-windows-msvc' 119 | with: 120 | node-version: 18 121 | check-latest: true 122 | cache: yarn 123 | architecture: x86 124 | - name: Build in docker 125 | uses: addnab/docker-run-action@v3 126 | if: ${{ matrix.settings.docker }} 127 | with: 128 | image: ${{ matrix.settings.docker }} 129 | options: '--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' 130 | run: ${{ matrix.settings.build }} 131 | - name: Build 132 | run: ${{ matrix.settings.build }} 133 | if: ${{ !matrix.settings.docker }} 134 | shell: bash 135 | - name: Upload artifact 136 | uses: actions/upload-artifact@v3 137 | with: 138 | name: bindings-${{ matrix.settings.target }} 139 | path: ${{ env.APP_NAME }}.*.node 140 | if-no-files-found: error 141 | test-macOS-windows-binding: 142 | name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} 143 | needs: 144 | - build 145 | strategy: 146 | fail-fast: false 147 | matrix: 148 | settings: 149 | - host: windows-latest 150 | target: x86_64-pc-windows-msvc 151 | node: 152 | - '14' 153 | - '16' 154 | - '18' 155 | runs-on: ${{ matrix.settings.host }} 156 | steps: 157 | - uses: actions/checkout@v3 158 | - name: Setup node 159 | uses: actions/setup-node@v3 160 | with: 161 | node-version: ${{ matrix.node }} 162 | check-latest: true 163 | cache: yarn 164 | - name: Install dependencies 165 | run: yarn install 166 | - name: Download artifacts 167 | uses: actions/download-artifact@v3 168 | with: 169 | name: bindings-${{ matrix.settings.target }} 170 | path: . 171 | - name: List packages 172 | run: ls -R . 173 | shell: bash 174 | - name: Test bindings 175 | run: yarn test 176 | test-linux-x64-gnu-binding: 177 | name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} 178 | needs: 179 | - build 180 | strategy: 181 | fail-fast: false 182 | matrix: 183 | node: 184 | - '14' 185 | - '16' 186 | - '18' 187 | runs-on: ubuntu-latest 188 | steps: 189 | - uses: actions/checkout@v3 190 | - name: Setup node 191 | uses: actions/setup-node@v3 192 | with: 193 | node-version: ${{ matrix.node }} 194 | check-latest: true 195 | cache: yarn 196 | - name: Install dependencies 197 | run: yarn install 198 | - name: Download artifacts 199 | uses: actions/download-artifact@v3 200 | with: 201 | name: bindings-x86_64-unknown-linux-gnu 202 | path: . 203 | - name: List packages 204 | run: ls -R . 205 | shell: bash 206 | - name: Test bindings 207 | run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn test 208 | test-linux-x64-musl-binding: 209 | name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }} 210 | needs: 211 | - build 212 | strategy: 213 | fail-fast: false 214 | matrix: 215 | node: 216 | - '14' 217 | - '16' 218 | - '18' 219 | runs-on: ubuntu-latest 220 | steps: 221 | - uses: actions/checkout@v3 222 | - name: Setup node 223 | uses: actions/setup-node@v3 224 | with: 225 | node-version: ${{ matrix.node }} 226 | check-latest: true 227 | cache: yarn 228 | - name: Install dependencies 229 | run: | 230 | yarn config set supportedArchitectures.libc "musl" 231 | yarn install 232 | - name: Download artifacts 233 | uses: actions/download-artifact@v3 234 | with: 235 | name: bindings-x86_64-unknown-linux-musl 236 | path: . 237 | - name: List packages 238 | run: ls -R . 239 | shell: bash 240 | - name: Test bindings 241 | run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-alpine yarn test 242 | test-linux-aarch64-gnu-binding: 243 | name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }} 244 | needs: 245 | - build 246 | strategy: 247 | fail-fast: false 248 | matrix: 249 | node: 250 | - '14' 251 | - '16' 252 | - '18' 253 | runs-on: ubuntu-latest 254 | steps: 255 | - uses: actions/checkout@v3 256 | - name: Download artifacts 257 | uses: actions/download-artifact@v3 258 | with: 259 | name: bindings-aarch64-unknown-linux-gnu 260 | path: . 261 | - name: List packages 262 | run: ls -R . 263 | shell: bash 264 | - name: Install dependencies 265 | run: | 266 | yarn config set supportedArchitectures.cpu "arm64" 267 | yarn config set supportedArchitectures.libc "glibc" 268 | yarn install 269 | - name: Set up QEMU 270 | uses: docker/setup-qemu-action@v2 271 | with: 272 | platforms: arm64 273 | - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 274 | - name: Setup and run tests 275 | uses: addnab/docker-run-action@v3 276 | with: 277 | image: node:${{ matrix.node }}-slim 278 | options: '--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build' 279 | run: | 280 | set -e 281 | ls -la 282 | test-linux-aarch64-musl-binding: 283 | name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }} 284 | needs: 285 | - build 286 | runs-on: ubuntu-latest 287 | steps: 288 | - uses: actions/checkout@v3 289 | - name: Download artifacts 290 | uses: actions/download-artifact@v3 291 | with: 292 | name: bindings-aarch64-unknown-linux-musl 293 | path: . 294 | - name: List packages 295 | run: ls -R . 296 | shell: bash 297 | - name: Install dependencies 298 | run: | 299 | yarn config set supportedArchitectures.cpu "arm64" 300 | yarn config set supportedArchitectures.libc "musl" 301 | yarn install 302 | - name: Set up QEMU 303 | uses: docker/setup-qemu-action@v2 304 | with: 305 | platforms: arm64 306 | - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 307 | - name: Setup and run tests 308 | uses: addnab/docker-run-action@v3 309 | with: 310 | image: node:lts-alpine 311 | options: '--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build' 312 | run: | 313 | set -e 314 | test-linux-arm-gnueabihf-binding: 315 | name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }} 316 | needs: 317 | - build 318 | strategy: 319 | fail-fast: false 320 | matrix: 321 | node: 322 | - '14' 323 | - '16' 324 | - '18' 325 | runs-on: ubuntu-latest 326 | steps: 327 | - uses: actions/checkout@v3 328 | - name: Download artifacts 329 | uses: actions/download-artifact@v3 330 | with: 331 | name: bindings-armv7-unknown-linux-gnueabihf 332 | path: . 333 | - name: List packages 334 | run: ls -R . 335 | shell: bash 336 | - name: Install dependencies 337 | run: | 338 | yarn config set supportedArchitectures.cpu "arm" 339 | yarn install 340 | - name: Set up QEMU 341 | uses: docker/setup-qemu-action@v2 342 | with: 343 | platforms: arm 344 | - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 345 | - name: Setup and run tests 346 | uses: addnab/docker-run-action@v3 347 | with: 348 | image: node:${{ matrix.node }}-bullseye-slim 349 | options: '--platform linux/arm/v7 -v ${{ github.workspace }}:/build -w /build' 350 | run: | 351 | set -e 352 | ls -la 353 | publish: 354 | name: Publish 355 | runs-on: ubuntu-latest 356 | needs: 357 | - test-macOS-windows-binding 358 | - test-linux-x64-gnu-binding 359 | - test-linux-x64-musl-binding 360 | - test-linux-aarch64-gnu-binding 361 | - test-linux-aarch64-musl-binding 362 | - test-linux-arm-gnueabihf-binding 363 | steps: 364 | - uses: actions/checkout@v3 365 | - name: Setup node 366 | uses: actions/setup-node@v3 367 | with: 368 | node-version: 18 369 | check-latest: true 370 | cache: yarn 371 | - name: Install dependencies 372 | run: yarn install 373 | - name: Download all artifacts 374 | uses: actions/download-artifact@v3 375 | with: 376 | path: artifacts 377 | - name: Move artifacts 378 | run: yarn artifacts 379 | - name: List packages 380 | run: ls -R ./npm 381 | shell: bash 382 | - name: Publish 383 | run: | 384 | if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; 385 | then 386 | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc 387 | npm publish --access public 388 | elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; 389 | then 390 | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc 391 | npm publish --tag next --access public 392 | else 393 | echo "Not a release, skipping publish" 394 | fi 395 | env: 396 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 397 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 398 | -------------------------------------------------------------------------------- /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: 6 6 | cacheKey: 8 7 | 8 | "@esbuild/android-arm64@npm:0.17.12": 9 | version: 0.17.12 10 | resolution: "@esbuild/android-arm64@npm:0.17.12" 11 | conditions: os=android & cpu=arm64 12 | languageName: node 13 | linkType: hard 14 | 15 | "@esbuild/android-arm@npm:0.17.12": 16 | version: 0.17.12 17 | resolution: "@esbuild/android-arm@npm:0.17.12" 18 | conditions: os=android & cpu=arm 19 | languageName: node 20 | linkType: hard 21 | 22 | "@esbuild/android-x64@npm:0.17.12": 23 | version: 0.17.12 24 | resolution: "@esbuild/android-x64@npm:0.17.12" 25 | conditions: os=android & cpu=x64 26 | languageName: node 27 | linkType: hard 28 | 29 | "@esbuild/darwin-arm64@npm:0.17.12": 30 | version: 0.17.12 31 | resolution: "@esbuild/darwin-arm64@npm:0.17.12" 32 | conditions: os=darwin & cpu=arm64 33 | languageName: node 34 | linkType: hard 35 | 36 | "@esbuild/darwin-x64@npm:0.17.12": 37 | version: 0.17.12 38 | resolution: "@esbuild/darwin-x64@npm:0.17.12" 39 | conditions: os=darwin & cpu=x64 40 | languageName: node 41 | linkType: hard 42 | 43 | "@esbuild/freebsd-arm64@npm:0.17.12": 44 | version: 0.17.12 45 | resolution: "@esbuild/freebsd-arm64@npm:0.17.12" 46 | conditions: os=freebsd & cpu=arm64 47 | languageName: node 48 | linkType: hard 49 | 50 | "@esbuild/freebsd-x64@npm:0.17.12": 51 | version: 0.17.12 52 | resolution: "@esbuild/freebsd-x64@npm:0.17.12" 53 | conditions: os=freebsd & cpu=x64 54 | languageName: node 55 | linkType: hard 56 | 57 | "@esbuild/linux-arm64@npm:0.17.12": 58 | version: 0.17.12 59 | resolution: "@esbuild/linux-arm64@npm:0.17.12" 60 | conditions: os=linux & cpu=arm64 61 | languageName: node 62 | linkType: hard 63 | 64 | "@esbuild/linux-arm@npm:0.17.12": 65 | version: 0.17.12 66 | resolution: "@esbuild/linux-arm@npm:0.17.12" 67 | conditions: os=linux & cpu=arm 68 | languageName: node 69 | linkType: hard 70 | 71 | "@esbuild/linux-ia32@npm:0.17.12": 72 | version: 0.17.12 73 | resolution: "@esbuild/linux-ia32@npm:0.17.12" 74 | conditions: os=linux & cpu=ia32 75 | languageName: node 76 | linkType: hard 77 | 78 | "@esbuild/linux-loong64@npm:0.17.12": 79 | version: 0.17.12 80 | resolution: "@esbuild/linux-loong64@npm:0.17.12" 81 | conditions: os=linux & cpu=loong64 82 | languageName: node 83 | linkType: hard 84 | 85 | "@esbuild/linux-mips64el@npm:0.17.12": 86 | version: 0.17.12 87 | resolution: "@esbuild/linux-mips64el@npm:0.17.12" 88 | conditions: os=linux & cpu=mips64el 89 | languageName: node 90 | linkType: hard 91 | 92 | "@esbuild/linux-ppc64@npm:0.17.12": 93 | version: 0.17.12 94 | resolution: "@esbuild/linux-ppc64@npm:0.17.12" 95 | conditions: os=linux & cpu=ppc64 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/linux-riscv64@npm:0.17.12": 100 | version: 0.17.12 101 | resolution: "@esbuild/linux-riscv64@npm:0.17.12" 102 | conditions: os=linux & cpu=riscv64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/linux-s390x@npm:0.17.12": 107 | version: 0.17.12 108 | resolution: "@esbuild/linux-s390x@npm:0.17.12" 109 | conditions: os=linux & cpu=s390x 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/linux-x64@npm:0.17.12": 114 | version: 0.17.12 115 | resolution: "@esbuild/linux-x64@npm:0.17.12" 116 | conditions: os=linux & cpu=x64 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/netbsd-x64@npm:0.17.12": 121 | version: 0.17.12 122 | resolution: "@esbuild/netbsd-x64@npm:0.17.12" 123 | conditions: os=netbsd & cpu=x64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/openbsd-x64@npm:0.17.12": 128 | version: 0.17.12 129 | resolution: "@esbuild/openbsd-x64@npm:0.17.12" 130 | conditions: os=openbsd & cpu=x64 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/sunos-x64@npm:0.17.12": 135 | version: 0.17.12 136 | resolution: "@esbuild/sunos-x64@npm:0.17.12" 137 | conditions: os=sunos & cpu=x64 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/win32-arm64@npm:0.17.12": 142 | version: 0.17.12 143 | resolution: "@esbuild/win32-arm64@npm:0.17.12" 144 | conditions: os=win32 & cpu=arm64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/win32-ia32@npm:0.17.12": 149 | version: 0.17.12 150 | resolution: "@esbuild/win32-ia32@npm:0.17.12" 151 | conditions: os=win32 & cpu=ia32 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/win32-x64@npm:0.17.12": 156 | version: 0.17.12 157 | resolution: "@esbuild/win32-x64@npm:0.17.12" 158 | conditions: os=win32 & cpu=x64 159 | languageName: node 160 | linkType: hard 161 | 162 | "@gar/promisify@npm:^1.1.3": 163 | version: 1.1.3 164 | resolution: "@gar/promisify@npm:1.1.3" 165 | checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 166 | languageName: node 167 | linkType: hard 168 | 169 | "@napi-rs/cli@npm:^2.14.8": 170 | version: 2.14.8 171 | resolution: "@napi-rs/cli@npm:2.14.8" 172 | bin: 173 | napi: scripts/index.js 174 | checksum: 59ccab188d0e40a0591d7402624fa882928a967ffc6b9a6dbfc00acbb828ca292cab85a8e965492367f6ca0d0fab600831a7f4b7f0495c47830e3c6895fc4a07 175 | languageName: node 176 | linkType: hard 177 | 178 | "@nodelib/fs.scandir@npm:2.1.5": 179 | version: 2.1.5 180 | resolution: "@nodelib/fs.scandir@npm:2.1.5" 181 | dependencies: 182 | "@nodelib/fs.stat": 2.0.5 183 | run-parallel: ^1.1.9 184 | checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 185 | languageName: node 186 | linkType: hard 187 | 188 | "@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": 189 | version: 2.0.5 190 | resolution: "@nodelib/fs.stat@npm:2.0.5" 191 | checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 192 | languageName: node 193 | linkType: hard 194 | 195 | "@nodelib/fs.walk@npm:^1.2.3": 196 | version: 1.2.8 197 | resolution: "@nodelib/fs.walk@npm:1.2.8" 198 | dependencies: 199 | "@nodelib/fs.scandir": 2.1.5 200 | fastq: ^1.6.0 201 | checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 202 | languageName: node 203 | linkType: hard 204 | 205 | "@npmcli/fs@npm:^2.1.0": 206 | version: 2.1.2 207 | resolution: "@npmcli/fs@npm:2.1.2" 208 | dependencies: 209 | "@gar/promisify": ^1.1.3 210 | semver: ^7.3.5 211 | checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 212 | languageName: node 213 | linkType: hard 214 | 215 | "@npmcli/move-file@npm:^2.0.0": 216 | version: 2.0.1 217 | resolution: "@npmcli/move-file@npm:2.0.1" 218 | dependencies: 219 | mkdirp: ^1.0.4 220 | rimraf: ^3.0.2 221 | checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 222 | languageName: node 223 | linkType: hard 224 | 225 | "@pkgr/utils@npm:^2.3.1": 226 | version: 2.3.1 227 | resolution: "@pkgr/utils@npm:2.3.1" 228 | dependencies: 229 | cross-spawn: ^7.0.3 230 | is-glob: ^4.0.3 231 | open: ^8.4.0 232 | picocolors: ^1.0.0 233 | tiny-glob: ^0.2.9 234 | tslib: ^2.4.0 235 | checksum: 118a1971120253740121a1db0a6658c21195b7da962acf9c124b507a3df707cfc97b0b84a16edcbd4352853b182e8337da9fc6e8e3d06c60d75ae4fb42321c75 236 | languageName: node 237 | linkType: hard 238 | 239 | "@tootallnate/once@npm:2": 240 | version: 2.0.0 241 | resolution: "@tootallnate/once@npm:2.0.0" 242 | checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 243 | languageName: node 244 | linkType: hard 245 | 246 | "@types/chai-subset@npm:^1.3.3": 247 | version: 1.3.3 248 | resolution: "@types/chai-subset@npm:1.3.3" 249 | dependencies: 250 | "@types/chai": "*" 251 | checksum: 4481da7345022995f5a105e6683744f7203d2c3d19cfe88d8e17274d045722948abf55e0adfd97709e0f043dade37a4d4e98cd4c660e2e8a14f23e6ecf79418f 252 | languageName: node 253 | linkType: hard 254 | 255 | "@types/chai@npm:*, @types/chai@npm:^4.3.4": 256 | version: 4.3.4 257 | resolution: "@types/chai@npm:4.3.4" 258 | checksum: 571184967beb03bf64c4392a13a7d44e72da9af5a1e83077ff81c39cf59c0fda2a5c78d2005084601cf8f3d11726608574d8b5b4a0e3e9736792807afd926cd0 259 | languageName: node 260 | linkType: hard 261 | 262 | "@types/node@npm:*": 263 | version: 18.15.3 264 | resolution: "@types/node@npm:18.15.3" 265 | checksum: 31b1d92475a82c30de29aa6c0771b18a276552d191283b4423ba2d61b3f01159bf0d02576c0b7cc834b043997893800db6bb47f246083ed85aa45e79c80875d7 266 | languageName: node 267 | linkType: hard 268 | 269 | "@umijs/es-module-parser@workspace:.": 270 | version: 0.0.0-use.local 271 | resolution: "@umijs/es-module-parser@workspace:." 272 | dependencies: 273 | "@napi-rs/cli": ^2.14.8 274 | prettier: ^2.8.4 275 | prettier-plugin-organize-imports: ^3.2.2 276 | prettier-plugin-packagejson: ^2.4.3 277 | vitest: ^0.29.7 278 | languageName: unknown 279 | linkType: soft 280 | 281 | "@vitest/expect@npm:0.29.7": 282 | version: 0.29.7 283 | resolution: "@vitest/expect@npm:0.29.7" 284 | dependencies: 285 | "@vitest/spy": 0.29.7 286 | "@vitest/utils": 0.29.7 287 | chai: ^4.3.7 288 | checksum: 03d8314697dd51cd5cecb38a9db8c22c939f4fad4e31bd194cac4bef7b819ee81c5fda6a9bf51feff6866b8258124aed2081829323a98cdd6b542e77c9386623 289 | languageName: node 290 | linkType: hard 291 | 292 | "@vitest/runner@npm:0.29.7": 293 | version: 0.29.7 294 | resolution: "@vitest/runner@npm:0.29.7" 295 | dependencies: 296 | "@vitest/utils": 0.29.7 297 | p-limit: ^4.0.0 298 | pathe: ^1.1.0 299 | checksum: 4a10748dc134f82e5040a0ae152d88a633c3f301e7a3249ac9d3eac2cd8e418143cfc935b6c559cd53cd6c836b525ff31d7ed2093c27255cd089577ada43cca6 300 | languageName: node 301 | linkType: hard 302 | 303 | "@vitest/spy@npm:0.29.7": 304 | version: 0.29.7 305 | resolution: "@vitest/spy@npm:0.29.7" 306 | dependencies: 307 | tinyspy: ^1.0.2 308 | checksum: 023fadeb6f98256d021945659961ae25893dc53b0d6be9fdfcbb7e3f4773e4d27c38422fa53cfdc9ae8a5a351625b8c9257ca0231f773471bf41a99f78cfd964 309 | languageName: node 310 | linkType: hard 311 | 312 | "@vitest/utils@npm:0.29.7": 313 | version: 0.29.7 314 | resolution: "@vitest/utils@npm:0.29.7" 315 | dependencies: 316 | cli-truncate: ^3.1.0 317 | diff: ^5.1.0 318 | loupe: ^2.3.6 319 | pretty-format: ^27.5.1 320 | checksum: b2ebfbc25672ccdb5e7cc297487e01204f4679f91936639ec9c02ca180fc0595dabd36a1aa50336e97b7db7f38dbd7dc3a705ef6198fbc82b4521847190b2a33 321 | languageName: node 322 | linkType: hard 323 | 324 | "abbrev@npm:^1.0.0": 325 | version: 1.1.1 326 | resolution: "abbrev@npm:1.1.1" 327 | checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 328 | languageName: node 329 | linkType: hard 330 | 331 | "acorn-walk@npm:^8.2.0": 332 | version: 8.2.0 333 | resolution: "acorn-walk@npm:8.2.0" 334 | checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 335 | languageName: node 336 | linkType: hard 337 | 338 | "acorn@npm:^8.8.1, acorn@npm:^8.8.2": 339 | version: 8.8.2 340 | resolution: "acorn@npm:8.8.2" 341 | bin: 342 | acorn: bin/acorn 343 | checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 344 | languageName: node 345 | linkType: hard 346 | 347 | "agent-base@npm:6, agent-base@npm:^6.0.2": 348 | version: 6.0.2 349 | resolution: "agent-base@npm:6.0.2" 350 | dependencies: 351 | debug: 4 352 | checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d 353 | languageName: node 354 | linkType: hard 355 | 356 | "agentkeepalive@npm:^4.2.1": 357 | version: 4.3.0 358 | resolution: "agentkeepalive@npm:4.3.0" 359 | dependencies: 360 | debug: ^4.1.0 361 | depd: ^2.0.0 362 | humanize-ms: ^1.2.1 363 | checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 364 | languageName: node 365 | linkType: hard 366 | 367 | "aggregate-error@npm:^3.0.0": 368 | version: 3.1.0 369 | resolution: "aggregate-error@npm:3.1.0" 370 | dependencies: 371 | clean-stack: ^2.0.0 372 | indent-string: ^4.0.0 373 | checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 374 | languageName: node 375 | linkType: hard 376 | 377 | "ansi-regex@npm:^5.0.1": 378 | version: 5.0.1 379 | resolution: "ansi-regex@npm:5.0.1" 380 | checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b 381 | languageName: node 382 | linkType: hard 383 | 384 | "ansi-regex@npm:^6.0.1": 385 | version: 6.0.1 386 | resolution: "ansi-regex@npm:6.0.1" 387 | checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 388 | languageName: node 389 | linkType: hard 390 | 391 | "ansi-styles@npm:^5.0.0": 392 | version: 5.2.0 393 | resolution: "ansi-styles@npm:5.2.0" 394 | checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 395 | languageName: node 396 | linkType: hard 397 | 398 | "ansi-styles@npm:^6.0.0": 399 | version: 6.2.1 400 | resolution: "ansi-styles@npm:6.2.1" 401 | checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 402 | languageName: node 403 | linkType: hard 404 | 405 | "aproba@npm:^1.0.3 || ^2.0.0": 406 | version: 2.0.0 407 | resolution: "aproba@npm:2.0.0" 408 | checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 409 | languageName: node 410 | linkType: hard 411 | 412 | "are-we-there-yet@npm:^3.0.0": 413 | version: 3.0.1 414 | resolution: "are-we-there-yet@npm:3.0.1" 415 | dependencies: 416 | delegates: ^1.0.0 417 | readable-stream: ^3.6.0 418 | checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 419 | languageName: node 420 | linkType: hard 421 | 422 | "assertion-error@npm:^1.1.0": 423 | version: 1.1.0 424 | resolution: "assertion-error@npm:1.1.0" 425 | checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf 426 | languageName: node 427 | linkType: hard 428 | 429 | "balanced-match@npm:^1.0.0": 430 | version: 1.0.2 431 | resolution: "balanced-match@npm:1.0.2" 432 | checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 433 | languageName: node 434 | linkType: hard 435 | 436 | "brace-expansion@npm:^1.1.7": 437 | version: 1.1.11 438 | resolution: "brace-expansion@npm:1.1.11" 439 | dependencies: 440 | balanced-match: ^1.0.0 441 | concat-map: 0.0.1 442 | checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 443 | languageName: node 444 | linkType: hard 445 | 446 | "brace-expansion@npm:^2.0.1": 447 | version: 2.0.1 448 | resolution: "brace-expansion@npm:2.0.1" 449 | dependencies: 450 | balanced-match: ^1.0.0 451 | checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 452 | languageName: node 453 | linkType: hard 454 | 455 | "braces@npm:^3.0.2": 456 | version: 3.0.2 457 | resolution: "braces@npm:3.0.2" 458 | dependencies: 459 | fill-range: ^7.0.1 460 | checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 461 | languageName: node 462 | linkType: hard 463 | 464 | "cac@npm:^6.7.14": 465 | version: 6.7.14 466 | resolution: "cac@npm:6.7.14" 467 | checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a 468 | languageName: node 469 | linkType: hard 470 | 471 | "cacache@npm:^16.1.0": 472 | version: 16.1.3 473 | resolution: "cacache@npm:16.1.3" 474 | dependencies: 475 | "@npmcli/fs": ^2.1.0 476 | "@npmcli/move-file": ^2.0.0 477 | chownr: ^2.0.0 478 | fs-minipass: ^2.1.0 479 | glob: ^8.0.1 480 | infer-owner: ^1.0.4 481 | lru-cache: ^7.7.1 482 | minipass: ^3.1.6 483 | minipass-collect: ^1.0.2 484 | minipass-flush: ^1.0.5 485 | minipass-pipeline: ^1.2.4 486 | mkdirp: ^1.0.4 487 | p-map: ^4.0.0 488 | promise-inflight: ^1.0.1 489 | rimraf: ^3.0.2 490 | ssri: ^9.0.0 491 | tar: ^6.1.11 492 | unique-filename: ^2.0.0 493 | checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 494 | languageName: node 495 | linkType: hard 496 | 497 | "chai@npm:^4.3.7": 498 | version: 4.3.7 499 | resolution: "chai@npm:4.3.7" 500 | dependencies: 501 | assertion-error: ^1.1.0 502 | check-error: ^1.0.2 503 | deep-eql: ^4.1.2 504 | get-func-name: ^2.0.0 505 | loupe: ^2.3.1 506 | pathval: ^1.1.1 507 | type-detect: ^4.0.5 508 | checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c 509 | languageName: node 510 | linkType: hard 511 | 512 | "check-error@npm:^1.0.2": 513 | version: 1.0.2 514 | resolution: "check-error@npm:1.0.2" 515 | checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e 516 | languageName: node 517 | linkType: hard 518 | 519 | "chownr@npm:^2.0.0": 520 | version: 2.0.0 521 | resolution: "chownr@npm:2.0.0" 522 | checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f 523 | languageName: node 524 | linkType: hard 525 | 526 | "clean-stack@npm:^2.0.0": 527 | version: 2.2.0 528 | resolution: "clean-stack@npm:2.2.0" 529 | checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 530 | languageName: node 531 | linkType: hard 532 | 533 | "cli-truncate@npm:^3.1.0": 534 | version: 3.1.0 535 | resolution: "cli-truncate@npm:3.1.0" 536 | dependencies: 537 | slice-ansi: ^5.0.0 538 | string-width: ^5.0.0 539 | checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a 540 | languageName: node 541 | linkType: hard 542 | 543 | "color-support@npm:^1.1.3": 544 | version: 1.1.3 545 | resolution: "color-support@npm:1.1.3" 546 | bin: 547 | color-support: bin.js 548 | checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b 549 | languageName: node 550 | linkType: hard 551 | 552 | "concat-map@npm:0.0.1": 553 | version: 0.0.1 554 | resolution: "concat-map@npm:0.0.1" 555 | checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af 556 | languageName: node 557 | linkType: hard 558 | 559 | "console-control-strings@npm:^1.1.0": 560 | version: 1.1.0 561 | resolution: "console-control-strings@npm:1.1.0" 562 | checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed 563 | languageName: node 564 | linkType: hard 565 | 566 | "cross-spawn@npm:^7.0.3": 567 | version: 7.0.3 568 | resolution: "cross-spawn@npm:7.0.3" 569 | dependencies: 570 | path-key: ^3.1.0 571 | shebang-command: ^2.0.0 572 | which: ^2.0.1 573 | checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 574 | languageName: node 575 | linkType: hard 576 | 577 | "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3, debug@npm:^4.3.4": 578 | version: 4.3.4 579 | resolution: "debug@npm:4.3.4" 580 | dependencies: 581 | ms: 2.1.2 582 | peerDependenciesMeta: 583 | supports-color: 584 | optional: true 585 | checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 586 | languageName: node 587 | linkType: hard 588 | 589 | "deep-eql@npm:^4.1.2": 590 | version: 4.1.3 591 | resolution: "deep-eql@npm:4.1.3" 592 | dependencies: 593 | type-detect: ^4.0.0 594 | checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f 595 | languageName: node 596 | linkType: hard 597 | 598 | "define-lazy-prop@npm:^2.0.0": 599 | version: 2.0.0 600 | resolution: "define-lazy-prop@npm:2.0.0" 601 | checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 602 | languageName: node 603 | linkType: hard 604 | 605 | "delegates@npm:^1.0.0": 606 | version: 1.0.0 607 | resolution: "delegates@npm:1.0.0" 608 | checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd 609 | languageName: node 610 | linkType: hard 611 | 612 | "depd@npm:^2.0.0": 613 | version: 2.0.0 614 | resolution: "depd@npm:2.0.0" 615 | checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a 616 | languageName: node 617 | linkType: hard 618 | 619 | "detect-indent@npm:^7.0.1": 620 | version: 7.0.1 621 | resolution: "detect-indent@npm:7.0.1" 622 | checksum: cbf3f0b1c3c881934ca94428e1179b26ab2a587e0d719031d37a67fb506d49d067de54ff057cb1e772e75975fed5155c01cd4518306fee60988b1486e3fc7768 623 | languageName: node 624 | linkType: hard 625 | 626 | "detect-newline@npm:^4.0.0": 627 | version: 4.0.0 628 | resolution: "detect-newline@npm:4.0.0" 629 | checksum: 52767347c70f485b2d1db6493dde57b8c3c1f249e24bad7eb7424cc1129200aa7e671902ede18bc94a8b69e10dec91456aab4c7e2478559d9eedb31ef3847f36 630 | languageName: node 631 | linkType: hard 632 | 633 | "diff@npm:^5.1.0": 634 | version: 5.1.0 635 | resolution: "diff@npm:5.1.0" 636 | checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 637 | languageName: node 638 | linkType: hard 639 | 640 | "dir-glob@npm:^3.0.1": 641 | version: 3.0.1 642 | resolution: "dir-glob@npm:3.0.1" 643 | dependencies: 644 | path-type: ^4.0.0 645 | checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 646 | languageName: node 647 | linkType: hard 648 | 649 | "eastasianwidth@npm:^0.2.0": 650 | version: 0.2.0 651 | resolution: "eastasianwidth@npm:0.2.0" 652 | checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed 653 | languageName: node 654 | linkType: hard 655 | 656 | "emoji-regex@npm:^8.0.0": 657 | version: 8.0.0 658 | resolution: "emoji-regex@npm:8.0.0" 659 | checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 660 | languageName: node 661 | linkType: hard 662 | 663 | "emoji-regex@npm:^9.2.2": 664 | version: 9.2.2 665 | resolution: "emoji-regex@npm:9.2.2" 666 | checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 667 | languageName: node 668 | linkType: hard 669 | 670 | "encoding@npm:^0.1.13": 671 | version: 0.1.13 672 | resolution: "encoding@npm:0.1.13" 673 | dependencies: 674 | iconv-lite: ^0.6.2 675 | checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f 676 | languageName: node 677 | linkType: hard 678 | 679 | "env-paths@npm:^2.2.0": 680 | version: 2.2.1 681 | resolution: "env-paths@npm:2.2.1" 682 | checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e 683 | languageName: node 684 | linkType: hard 685 | 686 | "err-code@npm:^2.0.2": 687 | version: 2.0.3 688 | resolution: "err-code@npm:2.0.3" 689 | checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 690 | languageName: node 691 | linkType: hard 692 | 693 | "esbuild@npm:^0.17.5": 694 | version: 0.17.12 695 | resolution: "esbuild@npm:0.17.12" 696 | dependencies: 697 | "@esbuild/android-arm": 0.17.12 698 | "@esbuild/android-arm64": 0.17.12 699 | "@esbuild/android-x64": 0.17.12 700 | "@esbuild/darwin-arm64": 0.17.12 701 | "@esbuild/darwin-x64": 0.17.12 702 | "@esbuild/freebsd-arm64": 0.17.12 703 | "@esbuild/freebsd-x64": 0.17.12 704 | "@esbuild/linux-arm": 0.17.12 705 | "@esbuild/linux-arm64": 0.17.12 706 | "@esbuild/linux-ia32": 0.17.12 707 | "@esbuild/linux-loong64": 0.17.12 708 | "@esbuild/linux-mips64el": 0.17.12 709 | "@esbuild/linux-ppc64": 0.17.12 710 | "@esbuild/linux-riscv64": 0.17.12 711 | "@esbuild/linux-s390x": 0.17.12 712 | "@esbuild/linux-x64": 0.17.12 713 | "@esbuild/netbsd-x64": 0.17.12 714 | "@esbuild/openbsd-x64": 0.17.12 715 | "@esbuild/sunos-x64": 0.17.12 716 | "@esbuild/win32-arm64": 0.17.12 717 | "@esbuild/win32-ia32": 0.17.12 718 | "@esbuild/win32-x64": 0.17.12 719 | dependenciesMeta: 720 | "@esbuild/android-arm": 721 | optional: true 722 | "@esbuild/android-arm64": 723 | optional: true 724 | "@esbuild/android-x64": 725 | optional: true 726 | "@esbuild/darwin-arm64": 727 | optional: true 728 | "@esbuild/darwin-x64": 729 | optional: true 730 | "@esbuild/freebsd-arm64": 731 | optional: true 732 | "@esbuild/freebsd-x64": 733 | optional: true 734 | "@esbuild/linux-arm": 735 | optional: true 736 | "@esbuild/linux-arm64": 737 | optional: true 738 | "@esbuild/linux-ia32": 739 | optional: true 740 | "@esbuild/linux-loong64": 741 | optional: true 742 | "@esbuild/linux-mips64el": 743 | optional: true 744 | "@esbuild/linux-ppc64": 745 | optional: true 746 | "@esbuild/linux-riscv64": 747 | optional: true 748 | "@esbuild/linux-s390x": 749 | optional: true 750 | "@esbuild/linux-x64": 751 | optional: true 752 | "@esbuild/netbsd-x64": 753 | optional: true 754 | "@esbuild/openbsd-x64": 755 | optional: true 756 | "@esbuild/sunos-x64": 757 | optional: true 758 | "@esbuild/win32-arm64": 759 | optional: true 760 | "@esbuild/win32-ia32": 761 | optional: true 762 | "@esbuild/win32-x64": 763 | optional: true 764 | bin: 765 | esbuild: bin/esbuild 766 | checksum: ea6d33eb1bc6c9e00dcee5e253c7e935251b4801d376661fd9f19a9dcffc27f970078a6f7116d6c78ee825ceff9b974594b0b616bd560ce4d875a951aa92977b 767 | languageName: node 768 | linkType: hard 769 | 770 | "fast-glob@npm:^3.2.11": 771 | version: 3.2.12 772 | resolution: "fast-glob@npm:3.2.12" 773 | dependencies: 774 | "@nodelib/fs.stat": ^2.0.2 775 | "@nodelib/fs.walk": ^1.2.3 776 | glob-parent: ^5.1.2 777 | merge2: ^1.3.0 778 | micromatch: ^4.0.4 779 | checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 780 | languageName: node 781 | linkType: hard 782 | 783 | "fastq@npm:^1.6.0": 784 | version: 1.15.0 785 | resolution: "fastq@npm:1.15.0" 786 | dependencies: 787 | reusify: ^1.0.4 788 | checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a 789 | languageName: node 790 | linkType: hard 791 | 792 | "fill-range@npm:^7.0.1": 793 | version: 7.0.1 794 | resolution: "fill-range@npm:7.0.1" 795 | dependencies: 796 | to-regex-range: ^5.0.1 797 | checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 798 | languageName: node 799 | linkType: hard 800 | 801 | "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": 802 | version: 2.1.0 803 | resolution: "fs-minipass@npm:2.1.0" 804 | dependencies: 805 | minipass: ^3.0.0 806 | checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 807 | languageName: node 808 | linkType: hard 809 | 810 | "fs.realpath@npm:^1.0.0": 811 | version: 1.0.0 812 | resolution: "fs.realpath@npm:1.0.0" 813 | checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 814 | languageName: node 815 | linkType: hard 816 | 817 | "fsevents@npm:~2.3.2": 818 | version: 2.3.2 819 | resolution: "fsevents@npm:2.3.2" 820 | dependencies: 821 | node-gyp: latest 822 | checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f 823 | conditions: os=darwin 824 | languageName: node 825 | linkType: hard 826 | 827 | "fsevents@patch:fsevents@~2.3.2#~builtin": 828 | version: 2.3.2 829 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" 830 | dependencies: 831 | node-gyp: latest 832 | conditions: os=darwin 833 | languageName: node 834 | linkType: hard 835 | 836 | "function-bind@npm:^1.1.1": 837 | version: 1.1.1 838 | resolution: "function-bind@npm:1.1.1" 839 | checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a 840 | languageName: node 841 | linkType: hard 842 | 843 | "gauge@npm:^4.0.3": 844 | version: 4.0.4 845 | resolution: "gauge@npm:4.0.4" 846 | dependencies: 847 | aproba: ^1.0.3 || ^2.0.0 848 | color-support: ^1.1.3 849 | console-control-strings: ^1.1.0 850 | has-unicode: ^2.0.1 851 | signal-exit: ^3.0.7 852 | string-width: ^4.2.3 853 | strip-ansi: ^6.0.1 854 | wide-align: ^1.1.5 855 | checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d 856 | languageName: node 857 | linkType: hard 858 | 859 | "get-func-name@npm:^2.0.0": 860 | version: 2.0.0 861 | resolution: "get-func-name@npm:2.0.0" 862 | checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 863 | languageName: node 864 | linkType: hard 865 | 866 | "git-hooks-list@npm:^3.0.0": 867 | version: 3.1.0 868 | resolution: "git-hooks-list@npm:3.1.0" 869 | checksum: 05cbdb29e1e14f3b6fde78c876a34383e4476b1be32e8486ad03293f01add884c1a8df8c2dce2ca5d99119c94951b2ff9fa9cbd51d834ae6477b6813cefb998f 870 | languageName: node 871 | linkType: hard 872 | 873 | "glob-parent@npm:^5.1.2": 874 | version: 5.1.2 875 | resolution: "glob-parent@npm:5.1.2" 876 | dependencies: 877 | is-glob: ^4.0.1 878 | checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e 879 | languageName: node 880 | linkType: hard 881 | 882 | "glob@npm:^7.1.3, glob@npm:^7.1.4": 883 | version: 7.2.3 884 | resolution: "glob@npm:7.2.3" 885 | dependencies: 886 | fs.realpath: ^1.0.0 887 | inflight: ^1.0.4 888 | inherits: 2 889 | minimatch: ^3.1.1 890 | once: ^1.3.0 891 | path-is-absolute: ^1.0.0 892 | checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 893 | languageName: node 894 | linkType: hard 895 | 896 | "glob@npm:^8.0.1": 897 | version: 8.1.0 898 | resolution: "glob@npm:8.1.0" 899 | dependencies: 900 | fs.realpath: ^1.0.0 901 | inflight: ^1.0.4 902 | inherits: 2 903 | minimatch: ^5.0.1 904 | once: ^1.3.0 905 | checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 906 | languageName: node 907 | linkType: hard 908 | 909 | "globalyzer@npm:0.1.0": 910 | version: 0.1.0 911 | resolution: "globalyzer@npm:0.1.0" 912 | checksum: 419a0f95ba542534fac0842964d31b3dc2936a479b2b1a8a62bad7e8b61054faa9b0a06ad9f2e12593396b9b2621cac93358d9b3071d33723fb1778608d358a1 913 | languageName: node 914 | linkType: hard 915 | 916 | "globby@npm:^13.1.2": 917 | version: 13.1.3 918 | resolution: "globby@npm:13.1.3" 919 | dependencies: 920 | dir-glob: ^3.0.1 921 | fast-glob: ^3.2.11 922 | ignore: ^5.2.0 923 | merge2: ^1.4.1 924 | slash: ^4.0.0 925 | checksum: 93f06e02002cdf368f7e3d55bd59e7b00784c7cc8fe92c7ee5082cc7171ff6109fda45e1c97a80bb48bc811dedaf7843c7c9186f5f84bde4883ab630e13c43df 926 | languageName: node 927 | linkType: hard 928 | 929 | "globrex@npm:^0.1.2": 930 | version: 0.1.2 931 | resolution: "globrex@npm:0.1.2" 932 | checksum: adca162494a176ce9ecf4dd232f7b802956bb1966b37f60c15e49d2e7d961b66c60826366dc2649093cad5a0d69970cfa8875bd1695b5a1a2f33dcd2aa88da3c 933 | languageName: node 934 | linkType: hard 935 | 936 | "graceful-fs@npm:^4.2.6": 937 | version: 4.2.11 938 | resolution: "graceful-fs@npm:4.2.11" 939 | checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 940 | languageName: node 941 | linkType: hard 942 | 943 | "has-unicode@npm:^2.0.1": 944 | version: 2.0.1 945 | resolution: "has-unicode@npm:2.0.1" 946 | checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 947 | languageName: node 948 | linkType: hard 949 | 950 | "has@npm:^1.0.3": 951 | version: 1.0.3 952 | resolution: "has@npm:1.0.3" 953 | dependencies: 954 | function-bind: ^1.1.1 955 | checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 956 | languageName: node 957 | linkType: hard 958 | 959 | "http-cache-semantics@npm:^4.1.0": 960 | version: 4.1.1 961 | resolution: "http-cache-semantics@npm:4.1.1" 962 | checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 963 | languageName: node 964 | linkType: hard 965 | 966 | "http-proxy-agent@npm:^5.0.0": 967 | version: 5.0.0 968 | resolution: "http-proxy-agent@npm:5.0.0" 969 | dependencies: 970 | "@tootallnate/once": 2 971 | agent-base: 6 972 | debug: 4 973 | checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 974 | languageName: node 975 | linkType: hard 976 | 977 | "https-proxy-agent@npm:^5.0.0": 978 | version: 5.0.1 979 | resolution: "https-proxy-agent@npm:5.0.1" 980 | dependencies: 981 | agent-base: 6 982 | debug: 4 983 | checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 984 | languageName: node 985 | linkType: hard 986 | 987 | "humanize-ms@npm:^1.2.1": 988 | version: 1.2.1 989 | resolution: "humanize-ms@npm:1.2.1" 990 | dependencies: 991 | ms: ^2.0.0 992 | checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 993 | languageName: node 994 | linkType: hard 995 | 996 | "iconv-lite@npm:^0.6.2": 997 | version: 0.6.3 998 | resolution: "iconv-lite@npm:0.6.3" 999 | dependencies: 1000 | safer-buffer: ">= 2.1.2 < 3.0.0" 1001 | checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf 1002 | languageName: node 1003 | linkType: hard 1004 | 1005 | "ignore@npm:^5.2.0": 1006 | version: 5.2.4 1007 | resolution: "ignore@npm:5.2.4" 1008 | checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef 1009 | languageName: node 1010 | linkType: hard 1011 | 1012 | "imurmurhash@npm:^0.1.4": 1013 | version: 0.1.4 1014 | resolution: "imurmurhash@npm:0.1.4" 1015 | checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 1016 | languageName: node 1017 | linkType: hard 1018 | 1019 | "indent-string@npm:^4.0.0": 1020 | version: 4.0.0 1021 | resolution: "indent-string@npm:4.0.0" 1022 | checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 1023 | languageName: node 1024 | linkType: hard 1025 | 1026 | "infer-owner@npm:^1.0.4": 1027 | version: 1.0.4 1028 | resolution: "infer-owner@npm:1.0.4" 1029 | checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 1030 | languageName: node 1031 | linkType: hard 1032 | 1033 | "inflight@npm:^1.0.4": 1034 | version: 1.0.6 1035 | resolution: "inflight@npm:1.0.6" 1036 | dependencies: 1037 | once: ^1.3.0 1038 | wrappy: 1 1039 | checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd 1040 | languageName: node 1041 | linkType: hard 1042 | 1043 | "inherits@npm:2, inherits@npm:^2.0.3": 1044 | version: 2.0.4 1045 | resolution: "inherits@npm:2.0.4" 1046 | checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 1047 | languageName: node 1048 | linkType: hard 1049 | 1050 | "ip@npm:^2.0.0": 1051 | version: 2.0.0 1052 | resolution: "ip@npm:2.0.0" 1053 | checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 1054 | languageName: node 1055 | linkType: hard 1056 | 1057 | "is-core-module@npm:^2.9.0": 1058 | version: 2.11.0 1059 | resolution: "is-core-module@npm:2.11.0" 1060 | dependencies: 1061 | has: ^1.0.3 1062 | checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab 1063 | languageName: node 1064 | linkType: hard 1065 | 1066 | "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": 1067 | version: 2.2.1 1068 | resolution: "is-docker@npm:2.2.1" 1069 | bin: 1070 | is-docker: cli.js 1071 | checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 1072 | languageName: node 1073 | linkType: hard 1074 | 1075 | "is-extglob@npm:^2.1.1": 1076 | version: 2.1.1 1077 | resolution: "is-extglob@npm:2.1.1" 1078 | checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 1079 | languageName: node 1080 | linkType: hard 1081 | 1082 | "is-fullwidth-code-point@npm:^3.0.0": 1083 | version: 3.0.0 1084 | resolution: "is-fullwidth-code-point@npm:3.0.0" 1085 | checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 1086 | languageName: node 1087 | linkType: hard 1088 | 1089 | "is-fullwidth-code-point@npm:^4.0.0": 1090 | version: 4.0.0 1091 | resolution: "is-fullwidth-code-point@npm:4.0.0" 1092 | checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d 1093 | languageName: node 1094 | linkType: hard 1095 | 1096 | "is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": 1097 | version: 4.0.3 1098 | resolution: "is-glob@npm:4.0.3" 1099 | dependencies: 1100 | is-extglob: ^2.1.1 1101 | checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 1102 | languageName: node 1103 | linkType: hard 1104 | 1105 | "is-lambda@npm:^1.0.1": 1106 | version: 1.0.1 1107 | resolution: "is-lambda@npm:1.0.1" 1108 | checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 1109 | languageName: node 1110 | linkType: hard 1111 | 1112 | "is-number@npm:^7.0.0": 1113 | version: 7.0.0 1114 | resolution: "is-number@npm:7.0.0" 1115 | checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a 1116 | languageName: node 1117 | linkType: hard 1118 | 1119 | "is-plain-obj@npm:^4.1.0": 1120 | version: 4.1.0 1121 | resolution: "is-plain-obj@npm:4.1.0" 1122 | checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce 1123 | languageName: node 1124 | linkType: hard 1125 | 1126 | "is-wsl@npm:^2.2.0": 1127 | version: 2.2.0 1128 | resolution: "is-wsl@npm:2.2.0" 1129 | dependencies: 1130 | is-docker: ^2.0.0 1131 | checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 1132 | languageName: node 1133 | linkType: hard 1134 | 1135 | "isexe@npm:^2.0.0": 1136 | version: 2.0.0 1137 | resolution: "isexe@npm:2.0.0" 1138 | checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 1139 | languageName: node 1140 | linkType: hard 1141 | 1142 | "jsonc-parser@npm:^3.2.0": 1143 | version: 3.2.0 1144 | resolution: "jsonc-parser@npm:3.2.0" 1145 | checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 1146 | languageName: node 1147 | linkType: hard 1148 | 1149 | "local-pkg@npm:^0.4.2": 1150 | version: 0.4.3 1151 | resolution: "local-pkg@npm:0.4.3" 1152 | checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 1153 | languageName: node 1154 | linkType: hard 1155 | 1156 | "loupe@npm:^2.3.1, loupe@npm:^2.3.6": 1157 | version: 2.3.6 1158 | resolution: "loupe@npm:2.3.6" 1159 | dependencies: 1160 | get-func-name: ^2.0.0 1161 | checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f 1162 | languageName: node 1163 | linkType: hard 1164 | 1165 | "lru-cache@npm:^6.0.0": 1166 | version: 6.0.0 1167 | resolution: "lru-cache@npm:6.0.0" 1168 | dependencies: 1169 | yallist: ^4.0.0 1170 | checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 1171 | languageName: node 1172 | linkType: hard 1173 | 1174 | "lru-cache@npm:^7.7.1": 1175 | version: 7.18.3 1176 | resolution: "lru-cache@npm:7.18.3" 1177 | checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 1178 | languageName: node 1179 | linkType: hard 1180 | 1181 | "make-fetch-happen@npm:^10.0.3": 1182 | version: 10.2.1 1183 | resolution: "make-fetch-happen@npm:10.2.1" 1184 | dependencies: 1185 | agentkeepalive: ^4.2.1 1186 | cacache: ^16.1.0 1187 | http-cache-semantics: ^4.1.0 1188 | http-proxy-agent: ^5.0.0 1189 | https-proxy-agent: ^5.0.0 1190 | is-lambda: ^1.0.1 1191 | lru-cache: ^7.7.1 1192 | minipass: ^3.1.6 1193 | minipass-collect: ^1.0.2 1194 | minipass-fetch: ^2.0.3 1195 | minipass-flush: ^1.0.5 1196 | minipass-pipeline: ^1.2.4 1197 | negotiator: ^0.6.3 1198 | promise-retry: ^2.0.1 1199 | socks-proxy-agent: ^7.0.0 1200 | ssri: ^9.0.0 1201 | checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c 1202 | languageName: node 1203 | linkType: hard 1204 | 1205 | "merge2@npm:^1.3.0, merge2@npm:^1.4.1": 1206 | version: 1.4.1 1207 | resolution: "merge2@npm:1.4.1" 1208 | checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 1209 | languageName: node 1210 | linkType: hard 1211 | 1212 | "micromatch@npm:^4.0.4": 1213 | version: 4.0.5 1214 | resolution: "micromatch@npm:4.0.5" 1215 | dependencies: 1216 | braces: ^3.0.2 1217 | picomatch: ^2.3.1 1218 | checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc 1219 | languageName: node 1220 | linkType: hard 1221 | 1222 | "minimatch@npm:^3.1.1": 1223 | version: 3.1.2 1224 | resolution: "minimatch@npm:3.1.2" 1225 | dependencies: 1226 | brace-expansion: ^1.1.7 1227 | checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a 1228 | languageName: node 1229 | linkType: hard 1230 | 1231 | "minimatch@npm:^5.0.1": 1232 | version: 5.1.6 1233 | resolution: "minimatch@npm:5.1.6" 1234 | dependencies: 1235 | brace-expansion: ^2.0.1 1236 | checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 1237 | languageName: node 1238 | linkType: hard 1239 | 1240 | "minipass-collect@npm:^1.0.2": 1241 | version: 1.0.2 1242 | resolution: "minipass-collect@npm:1.0.2" 1243 | dependencies: 1244 | minipass: ^3.0.0 1245 | checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 1246 | languageName: node 1247 | linkType: hard 1248 | 1249 | "minipass-fetch@npm:^2.0.3": 1250 | version: 2.1.2 1251 | resolution: "minipass-fetch@npm:2.1.2" 1252 | dependencies: 1253 | encoding: ^0.1.13 1254 | minipass: ^3.1.6 1255 | minipass-sized: ^1.0.3 1256 | minizlib: ^2.1.2 1257 | dependenciesMeta: 1258 | encoding: 1259 | optional: true 1260 | checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 1261 | languageName: node 1262 | linkType: hard 1263 | 1264 | "minipass-flush@npm:^1.0.5": 1265 | version: 1.0.5 1266 | resolution: "minipass-flush@npm:1.0.5" 1267 | dependencies: 1268 | minipass: ^3.0.0 1269 | checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf 1270 | languageName: node 1271 | linkType: hard 1272 | 1273 | "minipass-pipeline@npm:^1.2.4": 1274 | version: 1.2.4 1275 | resolution: "minipass-pipeline@npm:1.2.4" 1276 | dependencies: 1277 | minipass: ^3.0.0 1278 | checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b 1279 | languageName: node 1280 | linkType: hard 1281 | 1282 | "minipass-sized@npm:^1.0.3": 1283 | version: 1.0.3 1284 | resolution: "minipass-sized@npm:1.0.3" 1285 | dependencies: 1286 | minipass: ^3.0.0 1287 | checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 1288 | languageName: node 1289 | linkType: hard 1290 | 1291 | "minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": 1292 | version: 3.3.6 1293 | resolution: "minipass@npm:3.3.6" 1294 | dependencies: 1295 | yallist: ^4.0.0 1296 | checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 1297 | languageName: node 1298 | linkType: hard 1299 | 1300 | "minipass@npm:^4.0.0": 1301 | version: 4.2.5 1302 | resolution: "minipass@npm:4.2.5" 1303 | checksum: 4f9c19af23a5d4a9e7156feefc9110634b178a8cff8f8271af16ec5ebf7e221725a97429952c856f5b17b30c2065ebd24c81722d90c93d2122611d75b952b48f 1304 | languageName: node 1305 | linkType: hard 1306 | 1307 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": 1308 | version: 2.1.2 1309 | resolution: "minizlib@npm:2.1.2" 1310 | dependencies: 1311 | minipass: ^3.0.0 1312 | yallist: ^4.0.0 1313 | checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 1314 | languageName: node 1315 | linkType: hard 1316 | 1317 | "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": 1318 | version: 1.0.4 1319 | resolution: "mkdirp@npm:1.0.4" 1320 | bin: 1321 | mkdirp: bin/cmd.js 1322 | checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f 1323 | languageName: node 1324 | linkType: hard 1325 | 1326 | "mlly@npm:^1.1.0, mlly@npm:^1.1.1": 1327 | version: 1.2.0 1328 | resolution: "mlly@npm:1.2.0" 1329 | dependencies: 1330 | acorn: ^8.8.2 1331 | pathe: ^1.1.0 1332 | pkg-types: ^1.0.2 1333 | ufo: ^1.1.1 1334 | checksum: 640b019eb20e8e556bd623141b861d47e5c05f8af00210376ce1015912695dbd93a38cfe7ba18ca04f00e75645378f0f94a48a90bfa6e1b5dee1f0ec9c14eed1 1335 | languageName: node 1336 | linkType: hard 1337 | 1338 | "ms@npm:2.1.2": 1339 | version: 2.1.2 1340 | resolution: "ms@npm:2.1.2" 1341 | checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f 1342 | languageName: node 1343 | linkType: hard 1344 | 1345 | "ms@npm:^2.0.0": 1346 | version: 2.1.3 1347 | resolution: "ms@npm:2.1.3" 1348 | checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d 1349 | languageName: node 1350 | linkType: hard 1351 | 1352 | "nanoid@npm:^3.3.4": 1353 | version: 3.3.4 1354 | resolution: "nanoid@npm:3.3.4" 1355 | bin: 1356 | nanoid: bin/nanoid.cjs 1357 | checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c 1358 | languageName: node 1359 | linkType: hard 1360 | 1361 | "negotiator@npm:^0.6.3": 1362 | version: 0.6.3 1363 | resolution: "negotiator@npm:0.6.3" 1364 | checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 1365 | languageName: node 1366 | linkType: hard 1367 | 1368 | "node-gyp@npm:latest": 1369 | version: 9.3.1 1370 | resolution: "node-gyp@npm:9.3.1" 1371 | dependencies: 1372 | env-paths: ^2.2.0 1373 | glob: ^7.1.4 1374 | graceful-fs: ^4.2.6 1375 | make-fetch-happen: ^10.0.3 1376 | nopt: ^6.0.0 1377 | npmlog: ^6.0.0 1378 | rimraf: ^3.0.2 1379 | semver: ^7.3.5 1380 | tar: ^6.1.2 1381 | which: ^2.0.2 1382 | bin: 1383 | node-gyp: bin/node-gyp.js 1384 | checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 1385 | languageName: node 1386 | linkType: hard 1387 | 1388 | "nopt@npm:^6.0.0": 1389 | version: 6.0.0 1390 | resolution: "nopt@npm:6.0.0" 1391 | dependencies: 1392 | abbrev: ^1.0.0 1393 | bin: 1394 | nopt: bin/nopt.js 1395 | checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac 1396 | languageName: node 1397 | linkType: hard 1398 | 1399 | "npmlog@npm:^6.0.0": 1400 | version: 6.0.2 1401 | resolution: "npmlog@npm:6.0.2" 1402 | dependencies: 1403 | are-we-there-yet: ^3.0.0 1404 | console-control-strings: ^1.1.0 1405 | gauge: ^4.0.3 1406 | set-blocking: ^2.0.0 1407 | checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a 1408 | languageName: node 1409 | linkType: hard 1410 | 1411 | "once@npm:^1.3.0": 1412 | version: 1.4.0 1413 | resolution: "once@npm:1.4.0" 1414 | dependencies: 1415 | wrappy: 1 1416 | checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 1417 | languageName: node 1418 | linkType: hard 1419 | 1420 | "open@npm:^8.4.0": 1421 | version: 8.4.2 1422 | resolution: "open@npm:8.4.2" 1423 | dependencies: 1424 | define-lazy-prop: ^2.0.0 1425 | is-docker: ^2.1.1 1426 | is-wsl: ^2.2.0 1427 | checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 1428 | languageName: node 1429 | linkType: hard 1430 | 1431 | "p-limit@npm:^4.0.0": 1432 | version: 4.0.0 1433 | resolution: "p-limit@npm:4.0.0" 1434 | dependencies: 1435 | yocto-queue: ^1.0.0 1436 | checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b 1437 | languageName: node 1438 | linkType: hard 1439 | 1440 | "p-map@npm:^4.0.0": 1441 | version: 4.0.0 1442 | resolution: "p-map@npm:4.0.0" 1443 | dependencies: 1444 | aggregate-error: ^3.0.0 1445 | checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c 1446 | languageName: node 1447 | linkType: hard 1448 | 1449 | "path-is-absolute@npm:^1.0.0": 1450 | version: 1.0.1 1451 | resolution: "path-is-absolute@npm:1.0.1" 1452 | checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 1453 | languageName: node 1454 | linkType: hard 1455 | 1456 | "path-key@npm:^3.1.0": 1457 | version: 3.1.1 1458 | resolution: "path-key@npm:3.1.1" 1459 | checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 1460 | languageName: node 1461 | linkType: hard 1462 | 1463 | "path-parse@npm:^1.0.7": 1464 | version: 1.0.7 1465 | resolution: "path-parse@npm:1.0.7" 1466 | checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a 1467 | languageName: node 1468 | linkType: hard 1469 | 1470 | "path-type@npm:^4.0.0": 1471 | version: 4.0.0 1472 | resolution: "path-type@npm:4.0.0" 1473 | checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 1474 | languageName: node 1475 | linkType: hard 1476 | 1477 | "pathe@npm:^1.1.0": 1478 | version: 1.1.0 1479 | resolution: "pathe@npm:1.1.0" 1480 | checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 1481 | languageName: node 1482 | linkType: hard 1483 | 1484 | "pathval@npm:^1.1.1": 1485 | version: 1.1.1 1486 | resolution: "pathval@npm:1.1.1" 1487 | checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 1488 | languageName: node 1489 | linkType: hard 1490 | 1491 | "picocolors@npm:^1.0.0": 1492 | version: 1.0.0 1493 | resolution: "picocolors@npm:1.0.0" 1494 | checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 1495 | languageName: node 1496 | linkType: hard 1497 | 1498 | "picomatch@npm:^2.3.1": 1499 | version: 2.3.1 1500 | resolution: "picomatch@npm:2.3.1" 1501 | checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf 1502 | languageName: node 1503 | linkType: hard 1504 | 1505 | "pkg-types@npm:^1.0.2": 1506 | version: 1.0.2 1507 | resolution: "pkg-types@npm:1.0.2" 1508 | dependencies: 1509 | jsonc-parser: ^3.2.0 1510 | mlly: ^1.1.1 1511 | pathe: ^1.1.0 1512 | checksum: 2d0a70c1721c2ebbe075b912531a4f43136e6658fdcc59dc76c39966201ab5ddf265868d1211943183406d4b70d373c17e3b176487bc2020ea737d030b0fd080 1513 | languageName: node 1514 | linkType: hard 1515 | 1516 | "postcss@npm:^8.4.21": 1517 | version: 8.4.21 1518 | resolution: "postcss@npm:8.4.21" 1519 | dependencies: 1520 | nanoid: ^3.3.4 1521 | picocolors: ^1.0.0 1522 | source-map-js: ^1.0.2 1523 | checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 1524 | languageName: node 1525 | linkType: hard 1526 | 1527 | "prettier-plugin-organize-imports@npm:^3.2.2": 1528 | version: 3.2.2 1529 | resolution: "prettier-plugin-organize-imports@npm:3.2.2" 1530 | peerDependencies: 1531 | "@volar/vue-language-plugin-pug": ^1.0.4 1532 | "@volar/vue-typescript": ^1.0.4 1533 | prettier: ">=2.0" 1534 | typescript: ">=2.9" 1535 | peerDependenciesMeta: 1536 | "@volar/vue-language-plugin-pug": 1537 | optional: true 1538 | "@volar/vue-typescript": 1539 | optional: true 1540 | checksum: 28620ea73a0a518c93200c7ea17d38a26132db3f55a75954983dff3422d4dd2155515518422b7a68935736aa333b0406a51778053bd30133a57718090272bb5d 1541 | languageName: node 1542 | linkType: hard 1543 | 1544 | "prettier-plugin-packagejson@npm:^2.4.3": 1545 | version: 2.4.3 1546 | resolution: "prettier-plugin-packagejson@npm:2.4.3" 1547 | dependencies: 1548 | sort-package-json: 2.4.1 1549 | synckit: 0.8.5 1550 | peerDependencies: 1551 | prettier: ">= 1.16.0" 1552 | peerDependenciesMeta: 1553 | prettier: 1554 | optional: true 1555 | checksum: e9647d6b6979caa216c66174b135df8f8a83295f75ff0d8b92f472b621fd23fcb4658b46bcf6dc274b0d698bb41d4d84f0f926f4e711baf4b1431034a5602a93 1556 | languageName: node 1557 | linkType: hard 1558 | 1559 | "prettier@npm:^2.8.4": 1560 | version: 2.8.4 1561 | resolution: "prettier@npm:2.8.4" 1562 | bin: 1563 | prettier: bin-prettier.js 1564 | checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e 1565 | languageName: node 1566 | linkType: hard 1567 | 1568 | "pretty-format@npm:^27.5.1": 1569 | version: 27.5.1 1570 | resolution: "pretty-format@npm:27.5.1" 1571 | dependencies: 1572 | ansi-regex: ^5.0.1 1573 | ansi-styles: ^5.0.0 1574 | react-is: ^17.0.1 1575 | checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 1576 | languageName: node 1577 | linkType: hard 1578 | 1579 | "promise-inflight@npm:^1.0.1": 1580 | version: 1.0.1 1581 | resolution: "promise-inflight@npm:1.0.1" 1582 | checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 1583 | languageName: node 1584 | linkType: hard 1585 | 1586 | "promise-retry@npm:^2.0.1": 1587 | version: 2.0.1 1588 | resolution: "promise-retry@npm:2.0.1" 1589 | dependencies: 1590 | err-code: ^2.0.2 1591 | retry: ^0.12.0 1592 | checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 1593 | languageName: node 1594 | linkType: hard 1595 | 1596 | "queue-microtask@npm:^1.2.2": 1597 | version: 1.2.3 1598 | resolution: "queue-microtask@npm:1.2.3" 1599 | checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 1600 | languageName: node 1601 | linkType: hard 1602 | 1603 | "react-is@npm:^17.0.1": 1604 | version: 17.0.2 1605 | resolution: "react-is@npm:17.0.2" 1606 | checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 1607 | languageName: node 1608 | linkType: hard 1609 | 1610 | "readable-stream@npm:^3.6.0": 1611 | version: 3.6.2 1612 | resolution: "readable-stream@npm:3.6.2" 1613 | dependencies: 1614 | inherits: ^2.0.3 1615 | string_decoder: ^1.1.1 1616 | util-deprecate: ^1.0.1 1617 | checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d 1618 | languageName: node 1619 | linkType: hard 1620 | 1621 | "resolve@npm:^1.22.1": 1622 | version: 1.22.1 1623 | resolution: "resolve@npm:1.22.1" 1624 | dependencies: 1625 | is-core-module: ^2.9.0 1626 | path-parse: ^1.0.7 1627 | supports-preserve-symlinks-flag: ^1.0.0 1628 | bin: 1629 | resolve: bin/resolve 1630 | checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e 1631 | languageName: node 1632 | linkType: hard 1633 | 1634 | "resolve@patch:resolve@^1.22.1#~builtin": 1635 | version: 1.22.1 1636 | resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=c3c19d" 1637 | dependencies: 1638 | is-core-module: ^2.9.0 1639 | path-parse: ^1.0.7 1640 | supports-preserve-symlinks-flag: ^1.0.0 1641 | bin: 1642 | resolve: bin/resolve 1643 | checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b 1644 | languageName: node 1645 | linkType: hard 1646 | 1647 | "retry@npm:^0.12.0": 1648 | version: 0.12.0 1649 | resolution: "retry@npm:0.12.0" 1650 | checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c 1651 | languageName: node 1652 | linkType: hard 1653 | 1654 | "reusify@npm:^1.0.4": 1655 | version: 1.0.4 1656 | resolution: "reusify@npm:1.0.4" 1657 | checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc 1658 | languageName: node 1659 | linkType: hard 1660 | 1661 | "rimraf@npm:^3.0.2": 1662 | version: 3.0.2 1663 | resolution: "rimraf@npm:3.0.2" 1664 | dependencies: 1665 | glob: ^7.1.3 1666 | bin: 1667 | rimraf: bin.js 1668 | checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 1669 | languageName: node 1670 | linkType: hard 1671 | 1672 | "rollup@npm:^3.18.0": 1673 | version: 3.20.0 1674 | resolution: "rollup@npm:3.20.0" 1675 | dependencies: 1676 | fsevents: ~2.3.2 1677 | dependenciesMeta: 1678 | fsevents: 1679 | optional: true 1680 | bin: 1681 | rollup: dist/bin/rollup 1682 | checksum: ebf75f48eb81234f8233b4ed145b00841cefba26802d4f069f161247ffba085ca5bb165cc3cd662d9c36cfc135a67660dfff9088d3da2d2c6a70addc15f3233a 1683 | languageName: node 1684 | linkType: hard 1685 | 1686 | "run-parallel@npm:^1.1.9": 1687 | version: 1.2.0 1688 | resolution: "run-parallel@npm:1.2.0" 1689 | dependencies: 1690 | queue-microtask: ^1.2.2 1691 | checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d 1692 | languageName: node 1693 | linkType: hard 1694 | 1695 | "safe-buffer@npm:~5.2.0": 1696 | version: 5.2.1 1697 | resolution: "safe-buffer@npm:5.2.1" 1698 | checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 1699 | languageName: node 1700 | linkType: hard 1701 | 1702 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 1703 | version: 2.1.2 1704 | resolution: "safer-buffer@npm:2.1.2" 1705 | checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 1706 | languageName: node 1707 | linkType: hard 1708 | 1709 | "semver@npm:^7.3.5": 1710 | version: 7.3.8 1711 | resolution: "semver@npm:7.3.8" 1712 | dependencies: 1713 | lru-cache: ^6.0.0 1714 | bin: 1715 | semver: bin/semver.js 1716 | checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 1717 | languageName: node 1718 | linkType: hard 1719 | 1720 | "set-blocking@npm:^2.0.0": 1721 | version: 2.0.0 1722 | resolution: "set-blocking@npm:2.0.0" 1723 | checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 1724 | languageName: node 1725 | linkType: hard 1726 | 1727 | "shebang-command@npm:^2.0.0": 1728 | version: 2.0.0 1729 | resolution: "shebang-command@npm:2.0.0" 1730 | dependencies: 1731 | shebang-regex: ^3.0.0 1732 | checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa 1733 | languageName: node 1734 | linkType: hard 1735 | 1736 | "shebang-regex@npm:^3.0.0": 1737 | version: 3.0.0 1738 | resolution: "shebang-regex@npm:3.0.0" 1739 | checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 1740 | languageName: node 1741 | linkType: hard 1742 | 1743 | "siginfo@npm:^2.0.0": 1744 | version: 2.0.0 1745 | resolution: "siginfo@npm:2.0.0" 1746 | checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 1747 | languageName: node 1748 | linkType: hard 1749 | 1750 | "signal-exit@npm:^3.0.7": 1751 | version: 3.0.7 1752 | resolution: "signal-exit@npm:3.0.7" 1753 | checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 1754 | languageName: node 1755 | linkType: hard 1756 | 1757 | "slash@npm:^4.0.0": 1758 | version: 4.0.0 1759 | resolution: "slash@npm:4.0.0" 1760 | checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d 1761 | languageName: node 1762 | linkType: hard 1763 | 1764 | "slice-ansi@npm:^5.0.0": 1765 | version: 5.0.0 1766 | resolution: "slice-ansi@npm:5.0.0" 1767 | dependencies: 1768 | ansi-styles: ^6.0.0 1769 | is-fullwidth-code-point: ^4.0.0 1770 | checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e 1771 | languageName: node 1772 | linkType: hard 1773 | 1774 | "smart-buffer@npm:^4.2.0": 1775 | version: 4.2.0 1776 | resolution: "smart-buffer@npm:4.2.0" 1777 | checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b 1778 | languageName: node 1779 | linkType: hard 1780 | 1781 | "socks-proxy-agent@npm:^7.0.0": 1782 | version: 7.0.0 1783 | resolution: "socks-proxy-agent@npm:7.0.0" 1784 | dependencies: 1785 | agent-base: ^6.0.2 1786 | debug: ^4.3.3 1787 | socks: ^2.6.2 1788 | checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 1789 | languageName: node 1790 | linkType: hard 1791 | 1792 | "socks@npm:^2.6.2": 1793 | version: 2.7.1 1794 | resolution: "socks@npm:2.7.1" 1795 | dependencies: 1796 | ip: ^2.0.0 1797 | smart-buffer: ^4.2.0 1798 | checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 1799 | languageName: node 1800 | linkType: hard 1801 | 1802 | "sort-object-keys@npm:^1.1.3": 1803 | version: 1.1.3 1804 | resolution: "sort-object-keys@npm:1.1.3" 1805 | checksum: abea944d6722a1710a1aa6e4f9509da085d93d5fc0db23947cb411eedc7731f80022ce8fa68ed83a53dd2ac7441fcf72a3f38c09b3d9bbc4ff80546aa2e151ad 1806 | languageName: node 1807 | linkType: hard 1808 | 1809 | "sort-package-json@npm:2.4.1": 1810 | version: 2.4.1 1811 | resolution: "sort-package-json@npm:2.4.1" 1812 | dependencies: 1813 | detect-indent: ^7.0.1 1814 | detect-newline: ^4.0.0 1815 | git-hooks-list: ^3.0.0 1816 | globby: ^13.1.2 1817 | is-plain-obj: ^4.1.0 1818 | sort-object-keys: ^1.1.3 1819 | bin: 1820 | sort-package-json: cli.js 1821 | checksum: b0059f3fb597513948ba532a194608877e2a44c8864ac3a7e285ea2f441e540596bf30c5de11a89ccd30159d5562d0f5803186b824dfa0fe69cb8d123589a6cb 1822 | languageName: node 1823 | linkType: hard 1824 | 1825 | "source-map-js@npm:^1.0.2": 1826 | version: 1.0.2 1827 | resolution: "source-map-js@npm:1.0.2" 1828 | checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c 1829 | languageName: node 1830 | linkType: hard 1831 | 1832 | "source-map@npm:^0.6.1": 1833 | version: 0.6.1 1834 | resolution: "source-map@npm:0.6.1" 1835 | checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 1836 | languageName: node 1837 | linkType: hard 1838 | 1839 | "ssri@npm:^9.0.0": 1840 | version: 9.0.1 1841 | resolution: "ssri@npm:9.0.1" 1842 | dependencies: 1843 | minipass: ^3.1.1 1844 | checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb 1845 | languageName: node 1846 | linkType: hard 1847 | 1848 | "stackback@npm:0.0.2": 1849 | version: 0.0.2 1850 | resolution: "stackback@npm:0.0.2" 1851 | checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 1852 | languageName: node 1853 | linkType: hard 1854 | 1855 | "std-env@npm:^3.3.1": 1856 | version: 3.3.2 1857 | resolution: "std-env@npm:3.3.2" 1858 | checksum: c02256bb041ba1870d23f8360bc7e47a9cf1fabcd02c8b7c4246d48f2c6bb47b4f45c70964348844e6d36521df84c4a9d09d468654b51e0eb5c600e3392b4570 1859 | languageName: node 1860 | linkType: hard 1861 | 1862 | "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": 1863 | version: 4.2.3 1864 | resolution: "string-width@npm:4.2.3" 1865 | dependencies: 1866 | emoji-regex: ^8.0.0 1867 | is-fullwidth-code-point: ^3.0.0 1868 | strip-ansi: ^6.0.1 1869 | checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb 1870 | languageName: node 1871 | linkType: hard 1872 | 1873 | "string-width@npm:^5.0.0": 1874 | version: 5.1.2 1875 | resolution: "string-width@npm:5.1.2" 1876 | dependencies: 1877 | eastasianwidth: ^0.2.0 1878 | emoji-regex: ^9.2.2 1879 | strip-ansi: ^7.0.1 1880 | checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 1881 | languageName: node 1882 | linkType: hard 1883 | 1884 | "string_decoder@npm:^1.1.1": 1885 | version: 1.3.0 1886 | resolution: "string_decoder@npm:1.3.0" 1887 | dependencies: 1888 | safe-buffer: ~5.2.0 1889 | checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 1890 | languageName: node 1891 | linkType: hard 1892 | 1893 | "strip-ansi@npm:^6.0.1": 1894 | version: 6.0.1 1895 | resolution: "strip-ansi@npm:6.0.1" 1896 | dependencies: 1897 | ansi-regex: ^5.0.1 1898 | checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c 1899 | languageName: node 1900 | linkType: hard 1901 | 1902 | "strip-ansi@npm:^7.0.1": 1903 | version: 7.0.1 1904 | resolution: "strip-ansi@npm:7.0.1" 1905 | dependencies: 1906 | ansi-regex: ^6.0.1 1907 | checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 1908 | languageName: node 1909 | linkType: hard 1910 | 1911 | "strip-literal@npm:^1.0.0": 1912 | version: 1.0.1 1913 | resolution: "strip-literal@npm:1.0.1" 1914 | dependencies: 1915 | acorn: ^8.8.2 1916 | checksum: ab40496820f02220390d95cdd620a997168efb69d5bd7d180bc4ef83ca562a95447843d8c7c88b8284879a29cf4eedc89d8001d1e098c1a1e23d12a9c755dff4 1917 | languageName: node 1918 | linkType: hard 1919 | 1920 | "supports-preserve-symlinks-flag@npm:^1.0.0": 1921 | version: 1.0.0 1922 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0" 1923 | checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae 1924 | languageName: node 1925 | linkType: hard 1926 | 1927 | "synckit@npm:0.8.5": 1928 | version: 0.8.5 1929 | resolution: "synckit@npm:0.8.5" 1930 | dependencies: 1931 | "@pkgr/utils": ^2.3.1 1932 | tslib: ^2.5.0 1933 | checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b 1934 | languageName: node 1935 | linkType: hard 1936 | 1937 | "tar@npm:^6.1.11, tar@npm:^6.1.2": 1938 | version: 6.1.13 1939 | resolution: "tar@npm:6.1.13" 1940 | dependencies: 1941 | chownr: ^2.0.0 1942 | fs-minipass: ^2.0.0 1943 | minipass: ^4.0.0 1944 | minizlib: ^2.1.1 1945 | mkdirp: ^1.0.3 1946 | yallist: ^4.0.0 1947 | checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c 1948 | languageName: node 1949 | linkType: hard 1950 | 1951 | "tiny-glob@npm:^0.2.9": 1952 | version: 0.2.9 1953 | resolution: "tiny-glob@npm:0.2.9" 1954 | dependencies: 1955 | globalyzer: 0.1.0 1956 | globrex: ^0.1.2 1957 | checksum: aea5801eb6663ddf77ebb74900b8f8bd9dfcfc9b6a1cc8018cb7421590c00bf446109ff45e4b64a98e6c95ddb1255a337a5d488fb6311930e2a95334151ec9c6 1958 | languageName: node 1959 | linkType: hard 1960 | 1961 | "tinybench@npm:^2.3.1": 1962 | version: 2.4.0 1963 | resolution: "tinybench@npm:2.4.0" 1964 | checksum: cfbe90f75755488653dde256019cc810f65e90f63fdd962e71e8b209b49598c5fc90c2227d2087eb807944895fafe7f12fe9ecae2b5e89db5adde66415e9b836 1965 | languageName: node 1966 | linkType: hard 1967 | 1968 | "tinypool@npm:^0.4.0": 1969 | version: 0.4.0 1970 | resolution: "tinypool@npm:0.4.0" 1971 | checksum: 8abcac9e784793499f1eeeace8290c026454b9d7338c74029ce6a821643bab8dcab7caeb4051e39006baf681d6a62d57c3319e9c0f6e2317a45ab0fdbd76ee26 1972 | languageName: node 1973 | linkType: hard 1974 | 1975 | "tinyspy@npm:^1.0.2": 1976 | version: 1.1.1 1977 | resolution: "tinyspy@npm:1.1.1" 1978 | checksum: 4ea908fdfddb92044c4454193ec543f5980ced0bd25c5b3d240a94c1511e47e765ad39cd13ae6d3370fb730f62038eedc357f55e4e239416e126bc418f0eee79 1979 | languageName: node 1980 | linkType: hard 1981 | 1982 | "to-regex-range@npm:^5.0.1": 1983 | version: 5.0.1 1984 | resolution: "to-regex-range@npm:5.0.1" 1985 | dependencies: 1986 | is-number: ^7.0.0 1987 | checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed 1988 | languageName: node 1989 | linkType: hard 1990 | 1991 | "tslib@npm:^2.4.0, tslib@npm:^2.5.0": 1992 | version: 2.5.0 1993 | resolution: "tslib@npm:2.5.0" 1994 | checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 1995 | languageName: node 1996 | linkType: hard 1997 | 1998 | "type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": 1999 | version: 4.0.8 2000 | resolution: "type-detect@npm:4.0.8" 2001 | checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 2002 | languageName: node 2003 | linkType: hard 2004 | 2005 | "ufo@npm:^1.1.1": 2006 | version: 1.1.1 2007 | resolution: "ufo@npm:1.1.1" 2008 | checksum: 6bd210ed93d8c0dedd76c456b1d1dfb0e3b08c2216ee6080e61f0f545de0bac24b3d3a5530cd6a403810855f8d8fc3922583965296142e04cfc287442635e6c7 2009 | languageName: node 2010 | linkType: hard 2011 | 2012 | "unique-filename@npm:^2.0.0": 2013 | version: 2.0.1 2014 | resolution: "unique-filename@npm:2.0.1" 2015 | dependencies: 2016 | unique-slug: ^3.0.0 2017 | checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f 2018 | languageName: node 2019 | linkType: hard 2020 | 2021 | "unique-slug@npm:^3.0.0": 2022 | version: 3.0.0 2023 | resolution: "unique-slug@npm:3.0.0" 2024 | dependencies: 2025 | imurmurhash: ^0.1.4 2026 | checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c 2027 | languageName: node 2028 | linkType: hard 2029 | 2030 | "util-deprecate@npm:^1.0.1": 2031 | version: 1.0.2 2032 | resolution: "util-deprecate@npm:1.0.2" 2033 | checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 2034 | languageName: node 2035 | linkType: hard 2036 | 2037 | "vite-node@npm:0.29.7": 2038 | version: 0.29.7 2039 | resolution: "vite-node@npm:0.29.7" 2040 | dependencies: 2041 | cac: ^6.7.14 2042 | debug: ^4.3.4 2043 | mlly: ^1.1.0 2044 | pathe: ^1.1.0 2045 | picocolors: ^1.0.0 2046 | vite: ^3.0.0 || ^4.0.0 2047 | bin: 2048 | vite-node: vite-node.mjs 2049 | checksum: f93203030f93f432dd968cd634ad075b34fa1799669cc10aeccf1db220c3cbe6702a0c580a772ccee18bfef9659287bf8da2f1d3af26fcc1c039062ad4228641 2050 | languageName: node 2051 | linkType: hard 2052 | 2053 | "vite@npm:^3.0.0 || ^4.0.0": 2054 | version: 4.2.1 2055 | resolution: "vite@npm:4.2.1" 2056 | dependencies: 2057 | esbuild: ^0.17.5 2058 | fsevents: ~2.3.2 2059 | postcss: ^8.4.21 2060 | resolve: ^1.22.1 2061 | rollup: ^3.18.0 2062 | peerDependencies: 2063 | "@types/node": ">= 14" 2064 | less: "*" 2065 | sass: "*" 2066 | stylus: "*" 2067 | sugarss: "*" 2068 | terser: ^5.4.0 2069 | dependenciesMeta: 2070 | fsevents: 2071 | optional: true 2072 | peerDependenciesMeta: 2073 | "@types/node": 2074 | optional: true 2075 | less: 2076 | optional: true 2077 | sass: 2078 | optional: true 2079 | stylus: 2080 | optional: true 2081 | sugarss: 2082 | optional: true 2083 | terser: 2084 | optional: true 2085 | bin: 2086 | vite: bin/vite.js 2087 | checksum: 70eb162ffc299017a3c310e3adc95e9661def6b17aafd1f8e5e02e516766060435590dbe3df1e4e95acc3583c728a76e91f07c546221d1e701f1b2b021293f45 2088 | languageName: node 2089 | linkType: hard 2090 | 2091 | "vitest@npm:^0.29.7": 2092 | version: 0.29.7 2093 | resolution: "vitest@npm:0.29.7" 2094 | dependencies: 2095 | "@types/chai": ^4.3.4 2096 | "@types/chai-subset": ^1.3.3 2097 | "@types/node": "*" 2098 | "@vitest/expect": 0.29.7 2099 | "@vitest/runner": 0.29.7 2100 | "@vitest/spy": 0.29.7 2101 | "@vitest/utils": 0.29.7 2102 | acorn: ^8.8.1 2103 | acorn-walk: ^8.2.0 2104 | cac: ^6.7.14 2105 | chai: ^4.3.7 2106 | debug: ^4.3.4 2107 | local-pkg: ^0.4.2 2108 | pathe: ^1.1.0 2109 | picocolors: ^1.0.0 2110 | source-map: ^0.6.1 2111 | std-env: ^3.3.1 2112 | strip-literal: ^1.0.0 2113 | tinybench: ^2.3.1 2114 | tinypool: ^0.4.0 2115 | tinyspy: ^1.0.2 2116 | vite: ^3.0.0 || ^4.0.0 2117 | vite-node: 0.29.7 2118 | why-is-node-running: ^2.2.2 2119 | peerDependencies: 2120 | "@edge-runtime/vm": "*" 2121 | "@vitest/browser": "*" 2122 | "@vitest/ui": "*" 2123 | happy-dom: "*" 2124 | jsdom: "*" 2125 | peerDependenciesMeta: 2126 | "@edge-runtime/vm": 2127 | optional: true 2128 | "@vitest/browser": 2129 | optional: true 2130 | "@vitest/ui": 2131 | optional: true 2132 | happy-dom: 2133 | optional: true 2134 | jsdom: 2135 | optional: true 2136 | safaridriver: 2137 | optional: true 2138 | webdriverio: 2139 | optional: true 2140 | bin: 2141 | vitest: vitest.mjs 2142 | checksum: 66bf702f302f0c2288c3383f64f82d8e7184f2a1cbef86d2d195f17f33e93814a65cd8eb33063b3d545db393e80b0d029a61dd6d6ee89d3846694c6ce2efdbd1 2143 | languageName: node 2144 | linkType: hard 2145 | 2146 | "which@npm:^2.0.1, which@npm:^2.0.2": 2147 | version: 2.0.2 2148 | resolution: "which@npm:2.0.2" 2149 | dependencies: 2150 | isexe: ^2.0.0 2151 | bin: 2152 | node-which: ./bin/node-which 2153 | checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 2154 | languageName: node 2155 | linkType: hard 2156 | 2157 | "why-is-node-running@npm:^2.2.2": 2158 | version: 2.2.2 2159 | resolution: "why-is-node-running@npm:2.2.2" 2160 | dependencies: 2161 | siginfo: ^2.0.0 2162 | stackback: 0.0.2 2163 | bin: 2164 | why-is-node-running: cli.js 2165 | checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a 2166 | languageName: node 2167 | linkType: hard 2168 | 2169 | "wide-align@npm:^1.1.5": 2170 | version: 1.1.5 2171 | resolution: "wide-align@npm:1.1.5" 2172 | dependencies: 2173 | string-width: ^1.0.2 || 2 || 3 || 4 2174 | checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 2175 | languageName: node 2176 | linkType: hard 2177 | 2178 | "wrappy@npm:1": 2179 | version: 1.0.2 2180 | resolution: "wrappy@npm:1.0.2" 2181 | checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 2182 | languageName: node 2183 | linkType: hard 2184 | 2185 | "yallist@npm:^4.0.0": 2186 | version: 4.0.0 2187 | resolution: "yallist@npm:4.0.0" 2188 | checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 2189 | languageName: node 2190 | linkType: hard 2191 | 2192 | "yocto-queue@npm:^1.0.0": 2193 | version: 1.0.0 2194 | resolution: "yocto-queue@npm:1.0.0" 2195 | checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 2196 | languageName: node 2197 | linkType: hard 2198 | --------------------------------------------------------------------------------