├── .github
└── workflows
│ └── release.yml
├── .gitignore
├── .goreleaser.yaml
├── .npmrc
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── README_ZH.md
├── bench.mjs
├── bin
└── cli.js
├── go.mod
├── main.go
├── package.json
├── pnpm-lock.yaml
├── scripts
├── post.mjs
└── sync.js
├── snapshot.gif
├── src
├── bin.ts
├── cli.ts
├── core.go
├── index.ts
├── node.ts
└── wasm.ts
├── tea.yaml
├── tsconfig.json
├── vite.config.ts
└── wasm
├── main.go
├── main.wasm
├── polyfill.js
└── wasm_exec.js
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | permissions:
4 | contents: write
5 |
6 | on:
7 | push:
8 | tags:
9 | - "v*"
10 |
11 | jobs:
12 | release:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - uses: actions/checkout@v3
16 | with:
17 | fetch-depth: 0
18 |
19 | - name: Set node
20 | uses: actions/setup-node@v3
21 | with:
22 | node-version: 16.x
23 |
24 | - run: npx changelogithub
25 | env:
26 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | npm
2 | *.exe
3 | node_modules
4 | tsconfig.tsbuildinfo
5 | dist/
6 |
--------------------------------------------------------------------------------
/.goreleaser.yaml:
--------------------------------------------------------------------------------
1 | before:
2 | hooks:
3 | - go mod tidy
4 | builds:
5 | - env:
6 | - CGO_ENABLED=0
7 | goos:
8 | - linux
9 | - windows
10 | - darwin
11 | ldflags:
12 | - -s -w
13 | flags:
14 | - -trimpath
15 | archives:
16 | - format: binary
17 | name_template: >-
18 | {{ .ProjectName }}_
19 | {{- title .Os }}_
20 | {{- if eq .Arch "amd64" }}x86_64
21 | {{- else if eq .Arch "386" }}i386
22 | {{- else }}{{ .Arch }}{{ end }}
23 | {{- if .Arm }}v{{ .Arm }}{{ end }}
24 | checksum:
25 | name_template: "checksums.txt"
26 | changelog:
27 | sort: asc
28 | filters:
29 | exclude:
30 | - "^docs:"
31 | - "^test:"
32 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | registry=https://registry.npmjs.org/
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "go.toolsEnvVars": {
3 | "GOARCH": "wasm",
4 | "GOOS": "js"
5 | },
6 | "go.testEnvVars": {
7 | "GOARCH": "wasm",
8 | "GOOS": "js"
9 | },
10 | "go.installDependenciesWhenBuilding": false,
11 | "explorer.fileNesting.enabled": true,
12 | "explorer.fileNesting.expand": false,
13 | "explorer.fileNesting.patterns": {
14 | "*.go": "*_test.go",
15 | "package.json": "*.json,*.yaml,*.sum,*.mod,LICENSE,.gitignore,*.config.ts"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT LICENSE
2 |
3 | Copyright (c) 2023 markthree
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6 | documentation files (the "Software"), to deal in the Software without restriction, including without limitation
7 | the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
8 | to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11 |
12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
13 | THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
15 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
16 | IN THE SOFTWARE.
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
go concurrently get folder size quickly, can run in nodejs
5 |
6 |
7 |
8 |
9 | ## README 🦉
10 |
11 | [简体中文](./README_ZH.md) | English
12 |
13 |
14 |
15 | ## features
16 |
17 | - 🐉 [ipc go](./src/bin.ts)
18 | - 🦕 [binary go](./src/bin.ts)
19 | - 🦖 [native node](./src/node.ts)
20 | - 🐊 [wasm go](./src/wasm.ts)
21 |
22 |
23 |
24 | ## motivation
25 |
26 | I want to know the folder size quickly, but the nodejs implementation of
27 | [get-folder-size](https://github.com/alessioalex/get-folder-size) is slow, so
28 | using go implements a recursive get folder size that runs in nodejs and is
29 | `7 ~ 20` times faster than the node native solution under normal circumstances。
30 |
31 |
32 |
33 | ## Usage
34 |
35 | ### npm
36 |
37 | #### install
38 |
39 | ```shell
40 | npm install go-get-folder-size
41 | ```
42 |
43 | #### cli
44 |
45 | ```shell
46 | # Binary go, fastest
47 | npx go-get-folder-size
48 | ```
49 |
50 | #### program
51 |
52 | ```ts
53 | import {
54 | getFolderSize,
55 | getFolderSizeBin,
56 | getFolderSizeWasm,
57 | } from "go-get-folder-size";
58 |
59 | const base = "./"; // The directory path you want to get
60 |
61 | await getFolderSizeBin(base); // Binary go, fastest
62 |
63 | await getFolderSize(base); // native node
64 |
65 | await getFolderSizeWasm(base); // Wasm go,slowest
66 | ```
67 |
68 | ##### IPC
69 |
70 | Suitable for multi-path
71 |
72 | ```ts
73 | import { createGetFolderSizeBinIpc } from "go-get-folder-size";
74 |
75 | const { getFolderSizeWithIpc, close } = createGetFolderSizeBinIpc();
76 |
77 | Promise.all([
78 | getFolderSizeWithIpc("./"),
79 | getFolderSizeWithIpc("../"),
80 | ])
81 | .then((vs) => console.log(vs))
82 | .finally(close); // Manual close is required
83 | ```
84 |
85 |
86 |
87 | ### go
88 |
89 | #### cli
90 |
91 | ```shell
92 | go install github.com/markthree/go-get-folder-size
93 | ```
94 |
95 | ```shell
96 | go-get-folder-size
97 | ```
98 |
99 | #### program
100 |
101 | ```shell
102 | # Super invincible fast
103 | go get github.com/markthree/go-get-folder-size
104 | ```
105 |
106 | ```go
107 | package main
108 |
109 | import (
110 | getFolderSize "github.com/markthree/go-get-folder-size/src"
111 | )
112 |
113 | func main() {
114 | size, err := getFolderSize.Invoke("./") // Concurrent running, invincible fast
115 |
116 | size2 := getFolderSize.LooseInvoke("./") // Sometimes we may encounter inaccessible files, and we can set 'loose' to ignore them
117 | }
118 | ```
119 |
120 | ## loose
121 |
122 | Sometimes we may encounter inaccessible files, and we can set `loose` to ignore
123 | them
124 |
125 | ### cli
126 |
127 | ```shell
128 | go-get-folder-size --loose
129 | ```
130 |
131 | ### program
132 |
133 | ```ts
134 | import {
135 | getFolderSize,
136 | getFolderSizeBin,
137 | getFolderSizeWasm,
138 | } from "go-get-folder-size";
139 |
140 | const base = "./"; // The directory path you want to get
141 | const pretty = false; // Human readable way
142 | const loose = true;
143 |
144 | await getFolderSizeBin(base, pretty, { loose }); // Binary go, fastest
145 |
146 | await getFolderSize(base, pretty, { loose }); // native node
147 |
148 | await getFolderSizeWasm(base, pretty, { loose }); // Wasm go,slowest
149 | ```
150 |
151 |
152 |
153 | ## stack
154 |
155 | - [vite](https://github.com/vitejs/vite)
156 | - [goreleaser](https://github.com/goreleaser/goreleaser)
157 |
158 |
159 |
160 | ## License
161 |
162 | Made with [markthree](https://github.com/markthree)
163 |
164 | Published under [MIT License](./LICENSE).
165 |
--------------------------------------------------------------------------------
/README_ZH.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
go 并发快速获取文件夹大小,可以跑在 nodejs 中
5 |
6 |
7 |
8 |
9 | ## 特性
10 |
11 | - 🐉 [ipc go](./src/bin.ts)
12 | - 🦕 [二进制 go](./src/bin.ts)
13 | - 🦖 [原生 node](./src/node.ts)
14 | - 🐊 [wasm go](./src/wasm.ts)
15 |
16 |
17 |
18 | ## 动机
19 |
20 | 想要快速知道文件夹大小,但 nodejs 实现的
21 | [get-folder-size](https://github.com/alessioalex/get-folder-size) 是慢的,所以用
22 | go 实现了递归获取文件夹大小,能跑在 nodejs 中,正常情况下,比 node 原生方案快
23 | `7 ~ 20` 倍
24 |
25 | 具体可见 issue 👉
26 | [get-folder-size/issues/22](https://github.com/alessioalex/get-folder-size/issues/22)
27 |
28 |
29 |
30 | ## 使用
31 |
32 | ### npm
33 |
34 | #### install
35 |
36 | ```shell
37 | npm install go-get-folder-size
38 | ```
39 |
40 | #### cli
41 |
42 | ```shell
43 | # Binary go, fastest
44 | npx go-get-folder-size
45 | ```
46 |
47 | #### program
48 |
49 | ```ts
50 | import {
51 | getFolderSize,
52 | getFolderSizeBin,
53 | getFolderSizeWasm,
54 | } from "go-get-folder-size";
55 |
56 | const base = "./"; // 你想要获取的目录
57 |
58 | await getFolderSizeBin(base); // 二进制 go,最快
59 |
60 | await getFolderSize(base); // 原生 node
61 |
62 | await getFolderSizeWasm(base); // Wasm go,最慢 🥵
63 | ```
64 |
65 | ### go
66 |
67 | #### install
68 |
69 | ```shell
70 | go install github.com/markthree/go-get-folder-size
71 | ```
72 |
73 | #### cli
74 |
75 | ```shell
76 | go-get-folder-size
77 | ```
78 |
79 | #### program
80 |
81 | ```shell
82 | go get github.com/markthree/go-get-folder-size
83 | ```
84 |
85 | ```go
86 | package main
87 |
88 | import (
89 | getFolderSize "github.com/markthree/go-get-folder-size/src"
90 | )
91 |
92 | func main() {
93 | size, err := getFolderSize.Invoke("./") // 并发计算,超级快
94 |
95 | size2 := getFolderSize.LooseInvoke("./") // 有时我们可能会遇到不可访问的文件,我们可以使用 loose 来忽略它们
96 | }
97 | ```
98 |
99 |
100 |
101 | ##### IPC
102 |
103 | 适用于多路径
104 |
105 | ```ts
106 | import { createGetFolderSizeBinIpc } from "go-get-folder-size";
107 |
108 | const { getFolderSizeWithIpc, close } = createGetFolderSizeBinIpc();
109 |
110 | Promise.all([
111 | getFolderSizeWithIpc("./"),
112 | getFolderSizeWithIpc("../"),
113 | ])
114 | .then((vs) => console.log(vs))
115 | .finally(close); // 手动退出是必需的
116 | ```
117 |
118 | ## loose
119 |
120 | 有时我们可能会遇到不可访问的文件,我们可以使用 `loose` 来忽略它们
121 |
122 | ### cli
123 |
124 | ```shell
125 | go-get-folder-size --loose
126 | ```
127 |
128 | ### program
129 |
130 | ```ts
131 | import {
132 | getFolderSize,
133 | getFolderSizeBin,
134 | getFolderSizeWasm,
135 | } from "go-get-folder-size";
136 |
137 | const base = "./"; // 你想要获取的目录
138 | const pretty = false; // 人类可读的方式
139 | const loose = true;
140 |
141 | await getFolderSizeBin(base, pretty, { loose }); // Binary go, fastest
142 |
143 | await getFolderSize(base, pretty, { loose }); // native node
144 |
145 | await getFolderSizeWasm(base, pretty, { loose }); // Wasm go,slowest
146 | ```
147 |
148 |
149 |
150 | ## 提示
151 |
152 | - 目前该包被使用在组织内的本地项目管理器中,首次获取项目大小优化到 `1s` 内 👉
153 | [x-pm](https://github.com/dishait/x-pm)
154 |
155 |
156 |
157 | ## 灵感来源
158 |
159 | [esbuild](https://github.com/evanw/esbuild)
160 |
161 |
162 |
163 | ## License
164 |
165 | Made with [markthree](https://github.com/markthree)
166 |
167 | Published under
168 | [MIT License](https://github.com/markthree/go-get-folder-size/blob/main/LICENSE).
169 |
170 |
171 |
--------------------------------------------------------------------------------
/bench.mjs:
--------------------------------------------------------------------------------
1 | import {
2 | createGetFolderSizeBinIpc,
3 | getFolderSize,
4 | getFolderSizeBin,
5 | } from "./npm/index.mjs";
6 |
7 | const { getFolderSizeWithIpc, close } = createGetFolderSizeBinIpc();
8 |
9 | const base = "../";
10 |
11 | const nodeStartTime = Date.now();
12 | const nodeResult = await getFolderSize(base, true);
13 | const nodeDuration = Date.now() - nodeStartTime;
14 |
15 | const goBinStartTime = Date.now();
16 | const goBinResult = await getFolderSizeBin(base, true);
17 | const goBinDuration = Date.now() - goBinStartTime;
18 |
19 | const goIpcStartTime = Date.now();
20 | const goIpcResult = await getFolderSizeWithIpc(base, true);
21 | const goIpcDuration = Date.now() - goIpcStartTime;
22 |
23 | close();
24 |
25 | console.log(
26 | `node - duration: ${nodeDuration / 1000}s result: ${nodeResult}`,
27 | );
28 | console.log(
29 | `goBin - duration: ${goBinDuration / 1000}s result: ${goBinResult}`,
30 | );
31 | console.log(
32 | `goIpc - duration: ${goIpcDuration / 1000}s result: ${goIpcResult}`,
33 | );
34 |
35 | console.log("\n");
36 |
37 | console.log(
38 | "goBin vs node -",
39 | (nodeDuration / goBinDuration).toFixed(2) + " ↑",
40 | );
41 |
42 | console.log(
43 | "goIpc vs node -",
44 | (nodeDuration / goIpcDuration).toFixed(2) + " ↑",
45 | );
46 |
--------------------------------------------------------------------------------
/bin/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | require("../npm/cli.cjs");
3 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/markthree/go-get-folder-size
2 |
3 | go 1.21
4 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | // go-cli
2 | package main
3 |
4 | import (
5 | "bufio"
6 | "fmt"
7 | "os"
8 |
9 | getFolderSize "github.com/markthree/go-get-folder-size/src"
10 | )
11 |
12 | func success(base string, size int64) {
13 | fmt.Fprintf(os.Stdout, "%v,%v\n", base, size)
14 | }
15 |
16 | func fail(base string, err error) {
17 | fmt.Fprintf(os.Stderr, "%v,%v", base, err)
18 | }
19 |
20 | func handle(base string) {
21 | size, err := getFolderSize.Invoke(base)
22 |
23 | if err != nil {
24 | fail(base, err)
25 | return
26 | }
27 |
28 | success(base, size)
29 | }
30 |
31 | func looseHandle(base string) {
32 | size := getFolderSize.LooseInvoke(base)
33 | success(base, size)
34 | }
35 |
36 | func main() {
37 | isIpc := os.Getenv("ipc") == "true"
38 | isLoose := os.Getenv("loose") == "true"
39 |
40 | if isIpc {
41 | reader := bufio.NewReader(os.Stdin)
42 | for {
43 | base, err := reader.ReadString(',')
44 | base = base[:len(base)-1]
45 | if err != nil {
46 | fail(base, err)
47 | continue
48 | }
49 |
50 | if isLoose {
51 | go looseHandle(base)
52 | } else {
53 | go handle(base)
54 | }
55 | }
56 | } else {
57 | root, err := os.Getwd()
58 | if err != nil {
59 | fmt.Fprint(os.Stderr, err)
60 | return
61 | }
62 | if isLoose {
63 | size := getFolderSize.LooseInvoke(root)
64 | fmt.Fprint(os.Stdout, size)
65 | } else {
66 | size, err := getFolderSize.Invoke(root)
67 | if err != nil {
68 | fmt.Fprint(os.Stderr, err)
69 | return
70 | }
71 | fmt.Fprint(os.Stdout, size)
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "go-get-folder-size",
3 | "version": "0.5.5",
4 | "description": "Get the size of a folder by recursively iterating through all its sub(files && folders). Use go, so high-speed",
5 | "main": "./npm/index.cjs",
6 | "module": "./npm/index.mjs",
7 | "types": "./npm/index.d.ts",
8 | "bin": {
9 | "go-get-folder-size": "bin/cli.js"
10 | },
11 | "files": [
12 | "bin",
13 | "npm",
14 | "dist",
15 | "scripts/post.mjs"
16 | ],
17 | "repository": {
18 | "type": "git",
19 | "url": "git+https://github.com/markthree/go-get-folder-size.git"
20 | },
21 | "exports": {
22 | ".": {
23 | "require": "./npm/index.cjs",
24 | "import": "./npm/index.mjs",
25 | "types": "./npm/index.d.ts"
26 | },
27 | "./*": "./*"
28 | },
29 | "scripts": {
30 | "play-go": "go run",
31 | "build-types": "tsc",
32 | "build-go": "go build",
33 | "bench": "node bench.mjs",
34 | "build-ts": "vite build",
35 | "sync": "node scripts/sync.js",
36 | "prepublishOnly": "pnpm build",
37 | "release": "bumpp --push --tag --all && npm publish",
38 | "build-go-bin": "goreleaser release --snapshot --clean",
39 | "build": "rimraf -rf npm dist && run-p build-go-wasm build-go-bin && run-p build-ts build-types",
40 | "build-go-wasm": "cross-env GOOS=js GOARCH=wasm go build -o ./wasm/main.wasm ./wasm/main.go",
41 | "postinstall": "node scripts/post.mjs"
42 | },
43 | "keywords": [
44 | "go",
45 | "size",
46 | "folder",
47 | "fastest",
48 | "webAssembly"
49 | ],
50 | "author": {
51 | "name": "markthree",
52 | "email": "1801982702@qq.com",
53 | "url": "https://github.com/markthree"
54 | },
55 | "license": "MIT",
56 | "devDependencies": {
57 | "@types/node": "^18.18.3",
58 | "bumpp": "^9.2.0",
59 | "cross-env": "^7.0.3",
60 | "execa": "^8.0.1",
61 | "mri": "^1.2.0",
62 | "npm-run-all": "^4.1.5",
63 | "pretty-bytes": "^6.1.1",
64 | "rimraf": "^5.0.5",
65 | "specifier-backward": "^0.0.4",
66 | "typescript": "^5.2.2",
67 | "vite": "^4.4.10"
68 | },
69 | "dependencies": {
70 | "std-env": "^3.7.0"
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | std-env:
9 | specifier: ^3.7.0
10 | version: 3.7.0
11 |
12 | devDependencies:
13 | '@types/node':
14 | specifier: ^18.18.3
15 | version: 18.18.3
16 | bumpp:
17 | specifier: ^9.2.0
18 | version: 9.2.0
19 | cross-env:
20 | specifier: ^7.0.3
21 | version: 7.0.3
22 | execa:
23 | specifier: ^8.0.1
24 | version: 8.0.1
25 | mri:
26 | specifier: ^1.2.0
27 | version: 1.2.0
28 | npm-run-all:
29 | specifier: ^4.1.5
30 | version: 4.1.5
31 | pretty-bytes:
32 | specifier: ^6.1.1
33 | version: 6.1.1
34 | rimraf:
35 | specifier: ^5.0.5
36 | version: 5.0.5
37 | specifier-backward:
38 | specifier: ^0.0.4
39 | version: 0.0.4
40 | typescript:
41 | specifier: ^5.2.2
42 | version: 5.2.2
43 | vite:
44 | specifier: ^4.4.10
45 | version: 4.4.10(@types/node@18.18.3)
46 |
47 | packages:
48 |
49 | /@esbuild/android-arm64@0.18.20:
50 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
51 | engines: {node: '>=12'}
52 | cpu: [arm64]
53 | os: [android]
54 | requiresBuild: true
55 | dev: true
56 | optional: true
57 |
58 | /@esbuild/android-arm@0.18.20:
59 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
60 | engines: {node: '>=12'}
61 | cpu: [arm]
62 | os: [android]
63 | requiresBuild: true
64 | dev: true
65 | optional: true
66 |
67 | /@esbuild/android-x64@0.18.20:
68 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
69 | engines: {node: '>=12'}
70 | cpu: [x64]
71 | os: [android]
72 | requiresBuild: true
73 | dev: true
74 | optional: true
75 |
76 | /@esbuild/darwin-arm64@0.18.20:
77 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
78 | engines: {node: '>=12'}
79 | cpu: [arm64]
80 | os: [darwin]
81 | requiresBuild: true
82 | dev: true
83 | optional: true
84 |
85 | /@esbuild/darwin-x64@0.18.20:
86 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
87 | engines: {node: '>=12'}
88 | cpu: [x64]
89 | os: [darwin]
90 | requiresBuild: true
91 | dev: true
92 | optional: true
93 |
94 | /@esbuild/freebsd-arm64@0.18.20:
95 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
96 | engines: {node: '>=12'}
97 | cpu: [arm64]
98 | os: [freebsd]
99 | requiresBuild: true
100 | dev: true
101 | optional: true
102 |
103 | /@esbuild/freebsd-x64@0.18.20:
104 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
105 | engines: {node: '>=12'}
106 | cpu: [x64]
107 | os: [freebsd]
108 | requiresBuild: true
109 | dev: true
110 | optional: true
111 |
112 | /@esbuild/linux-arm64@0.18.20:
113 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
114 | engines: {node: '>=12'}
115 | cpu: [arm64]
116 | os: [linux]
117 | requiresBuild: true
118 | dev: true
119 | optional: true
120 |
121 | /@esbuild/linux-arm@0.18.20:
122 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
123 | engines: {node: '>=12'}
124 | cpu: [arm]
125 | os: [linux]
126 | requiresBuild: true
127 | dev: true
128 | optional: true
129 |
130 | /@esbuild/linux-ia32@0.18.20:
131 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
132 | engines: {node: '>=12'}
133 | cpu: [ia32]
134 | os: [linux]
135 | requiresBuild: true
136 | dev: true
137 | optional: true
138 |
139 | /@esbuild/linux-loong64@0.18.20:
140 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
141 | engines: {node: '>=12'}
142 | cpu: [loong64]
143 | os: [linux]
144 | requiresBuild: true
145 | dev: true
146 | optional: true
147 |
148 | /@esbuild/linux-mips64el@0.18.20:
149 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
150 | engines: {node: '>=12'}
151 | cpu: [mips64el]
152 | os: [linux]
153 | requiresBuild: true
154 | dev: true
155 | optional: true
156 |
157 | /@esbuild/linux-ppc64@0.18.20:
158 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
159 | engines: {node: '>=12'}
160 | cpu: [ppc64]
161 | os: [linux]
162 | requiresBuild: true
163 | dev: true
164 | optional: true
165 |
166 | /@esbuild/linux-riscv64@0.18.20:
167 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
168 | engines: {node: '>=12'}
169 | cpu: [riscv64]
170 | os: [linux]
171 | requiresBuild: true
172 | dev: true
173 | optional: true
174 |
175 | /@esbuild/linux-s390x@0.18.20:
176 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
177 | engines: {node: '>=12'}
178 | cpu: [s390x]
179 | os: [linux]
180 | requiresBuild: true
181 | dev: true
182 | optional: true
183 |
184 | /@esbuild/linux-x64@0.18.20:
185 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
186 | engines: {node: '>=12'}
187 | cpu: [x64]
188 | os: [linux]
189 | requiresBuild: true
190 | dev: true
191 | optional: true
192 |
193 | /@esbuild/netbsd-x64@0.18.20:
194 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
195 | engines: {node: '>=12'}
196 | cpu: [x64]
197 | os: [netbsd]
198 | requiresBuild: true
199 | dev: true
200 | optional: true
201 |
202 | /@esbuild/openbsd-x64@0.18.20:
203 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
204 | engines: {node: '>=12'}
205 | cpu: [x64]
206 | os: [openbsd]
207 | requiresBuild: true
208 | dev: true
209 | optional: true
210 |
211 | /@esbuild/sunos-x64@0.18.20:
212 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
213 | engines: {node: '>=12'}
214 | cpu: [x64]
215 | os: [sunos]
216 | requiresBuild: true
217 | dev: true
218 | optional: true
219 |
220 | /@esbuild/win32-arm64@0.18.20:
221 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
222 | engines: {node: '>=12'}
223 | cpu: [arm64]
224 | os: [win32]
225 | requiresBuild: true
226 | dev: true
227 | optional: true
228 |
229 | /@esbuild/win32-ia32@0.18.20:
230 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
231 | engines: {node: '>=12'}
232 | cpu: [ia32]
233 | os: [win32]
234 | requiresBuild: true
235 | dev: true
236 | optional: true
237 |
238 | /@esbuild/win32-x64@0.18.20:
239 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
240 | engines: {node: '>=12'}
241 | cpu: [x64]
242 | os: [win32]
243 | requiresBuild: true
244 | dev: true
245 | optional: true
246 |
247 | /@isaacs/cliui@8.0.2:
248 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
249 | engines: {node: '>=12'}
250 | dependencies:
251 | string-width: 5.1.2
252 | string-width-cjs: /string-width@4.2.3
253 | strip-ansi: 7.1.0
254 | strip-ansi-cjs: /strip-ansi@6.0.1
255 | wrap-ansi: 8.1.0
256 | wrap-ansi-cjs: /wrap-ansi@7.0.0
257 | dev: true
258 |
259 | /@jsdevtools/ez-spawn@3.0.4:
260 | resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==}
261 | engines: {node: '>=10'}
262 | dependencies:
263 | call-me-maybe: 1.0.2
264 | cross-spawn: 7.0.3
265 | string-argv: 0.3.2
266 | type-detect: 4.0.8
267 | dev: true
268 |
269 | /@nodelib/fs.scandir@2.1.5:
270 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
271 | engines: {node: '>= 8'}
272 | dependencies:
273 | '@nodelib/fs.stat': 2.0.5
274 | run-parallel: 1.2.0
275 | dev: true
276 |
277 | /@nodelib/fs.stat@2.0.5:
278 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
279 | engines: {node: '>= 8'}
280 | dev: true
281 |
282 | /@nodelib/fs.walk@1.2.8:
283 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
284 | engines: {node: '>= 8'}
285 | dependencies:
286 | '@nodelib/fs.scandir': 2.1.5
287 | fastq: 1.15.0
288 | dev: true
289 |
290 | /@pkgjs/parseargs@0.11.0:
291 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
292 | engines: {node: '>=14'}
293 | requiresBuild: true
294 | dev: true
295 | optional: true
296 |
297 | /@types/node@18.18.3:
298 | resolution: {integrity: sha512-0OVfGupTl3NBFr8+iXpfZ8NR7jfFO+P1Q+IO/q0wbo02wYkP5gy36phojeYWpLQ6WAMjl+VfmqUk2YbUfp0irA==}
299 | dev: true
300 |
301 | /acorn@8.10.0:
302 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
303 | engines: {node: '>=0.4.0'}
304 | hasBin: true
305 | dev: true
306 |
307 | /agent-base@6.0.2:
308 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
309 | engines: {node: '>= 6.0.0'}
310 | dependencies:
311 | debug: 4.3.4
312 | transitivePeerDependencies:
313 | - supports-color
314 | dev: true
315 |
316 | /ansi-regex@5.0.1:
317 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
318 | engines: {node: '>=8'}
319 | dev: true
320 |
321 | /ansi-regex@6.0.1:
322 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
323 | engines: {node: '>=12'}
324 | dev: true
325 |
326 | /ansi-styles@3.2.1:
327 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
328 | engines: {node: '>=4'}
329 | dependencies:
330 | color-convert: 1.9.3
331 | dev: true
332 |
333 | /ansi-styles@4.3.0:
334 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
335 | engines: {node: '>=8'}
336 | dependencies:
337 | color-convert: 2.0.1
338 | dev: true
339 |
340 | /ansi-styles@6.2.1:
341 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
342 | engines: {node: '>=12'}
343 | dev: true
344 |
345 | /anymatch@3.1.3:
346 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
347 | engines: {node: '>= 8'}
348 | dependencies:
349 | normalize-path: 3.0.0
350 | picomatch: 2.3.1
351 | dev: true
352 |
353 | /array-buffer-byte-length@1.0.0:
354 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
355 | dependencies:
356 | call-bind: 1.0.2
357 | is-array-buffer: 3.0.2
358 | dev: true
359 |
360 | /arraybuffer.prototype.slice@1.0.1:
361 | resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==}
362 | engines: {node: '>= 0.4'}
363 | dependencies:
364 | array-buffer-byte-length: 1.0.0
365 | call-bind: 1.0.2
366 | define-properties: 1.2.0
367 | get-intrinsic: 1.2.1
368 | is-array-buffer: 3.0.2
369 | is-shared-array-buffer: 1.0.2
370 | dev: true
371 |
372 | /available-typed-arrays@1.0.5:
373 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
374 | engines: {node: '>= 0.4'}
375 | dev: true
376 |
377 | /balanced-match@1.0.2:
378 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
379 | dev: true
380 |
381 | /binary-extensions@2.2.0:
382 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
383 | engines: {node: '>=8'}
384 | dev: true
385 |
386 | /brace-expansion@1.1.11:
387 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
388 | dependencies:
389 | balanced-match: 1.0.2
390 | concat-map: 0.0.1
391 | dev: true
392 |
393 | /brace-expansion@2.0.1:
394 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
395 | dependencies:
396 | balanced-match: 1.0.2
397 | dev: true
398 |
399 | /braces@3.0.2:
400 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
401 | engines: {node: '>=8'}
402 | dependencies:
403 | fill-range: 7.0.1
404 | dev: true
405 |
406 | /bumpp@9.2.0:
407 | resolution: {integrity: sha512-pgp7y3jp33QTaXFVDrE0IKuZF5Y8EsIz+ywZXFALW2nD+ZD+4crxJe/GypBQBoJuZrr5dc6TGrR3wl7fk3+C6w==}
408 | engines: {node: '>=10'}
409 | hasBin: true
410 | dependencies:
411 | '@jsdevtools/ez-spawn': 3.0.4
412 | c12: 1.4.2
413 | cac: 6.7.14
414 | fast-glob: 3.3.1
415 | prompts: 2.4.2
416 | semver: 7.5.4
417 | transitivePeerDependencies:
418 | - supports-color
419 | dev: true
420 |
421 | /c12@1.4.2:
422 | resolution: {integrity: sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==}
423 | dependencies:
424 | chokidar: 3.5.3
425 | defu: 6.1.2
426 | dotenv: 16.3.1
427 | giget: 1.1.2
428 | jiti: 1.19.3
429 | mlly: 1.4.0
430 | ohash: 1.1.3
431 | pathe: 1.1.1
432 | perfect-debounce: 1.0.0
433 | pkg-types: 1.0.3
434 | rc9: 2.1.1
435 | transitivePeerDependencies:
436 | - supports-color
437 | dev: true
438 |
439 | /cac@6.7.14:
440 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
441 | engines: {node: '>=8'}
442 | dev: true
443 |
444 | /call-bind@1.0.2:
445 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
446 | dependencies:
447 | function-bind: 1.1.1
448 | get-intrinsic: 1.2.1
449 | dev: true
450 |
451 | /call-me-maybe@1.0.2:
452 | resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
453 | dev: true
454 |
455 | /chalk@2.4.2:
456 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
457 | engines: {node: '>=4'}
458 | dependencies:
459 | ansi-styles: 3.2.1
460 | escape-string-regexp: 1.0.5
461 | supports-color: 5.5.0
462 | dev: true
463 |
464 | /chokidar@3.5.3:
465 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
466 | engines: {node: '>= 8.10.0'}
467 | dependencies:
468 | anymatch: 3.1.3
469 | braces: 3.0.2
470 | glob-parent: 5.1.2
471 | is-binary-path: 2.1.0
472 | is-glob: 4.0.3
473 | normalize-path: 3.0.0
474 | readdirp: 3.6.0
475 | optionalDependencies:
476 | fsevents: 2.3.2
477 | dev: true
478 |
479 | /chownr@2.0.0:
480 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
481 | engines: {node: '>=10'}
482 | dev: true
483 |
484 | /color-convert@1.9.3:
485 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
486 | dependencies:
487 | color-name: 1.1.3
488 | dev: true
489 |
490 | /color-convert@2.0.1:
491 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
492 | engines: {node: '>=7.0.0'}
493 | dependencies:
494 | color-name: 1.1.4
495 | dev: true
496 |
497 | /color-name@1.1.3:
498 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
499 | dev: true
500 |
501 | /color-name@1.1.4:
502 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
503 | dev: true
504 |
505 | /colorette@2.0.20:
506 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
507 | dev: true
508 |
509 | /concat-map@0.0.1:
510 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
511 | dev: true
512 |
513 | /cross-env@7.0.3:
514 | resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
515 | engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
516 | hasBin: true
517 | dependencies:
518 | cross-spawn: 7.0.3
519 | dev: true
520 |
521 | /cross-spawn@6.0.5:
522 | resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
523 | engines: {node: '>=4.8'}
524 | dependencies:
525 | nice-try: 1.0.5
526 | path-key: 2.0.1
527 | semver: 5.7.2
528 | shebang-command: 1.2.0
529 | which: 1.3.1
530 | dev: true
531 |
532 | /cross-spawn@7.0.3:
533 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
534 | engines: {node: '>= 8'}
535 | dependencies:
536 | path-key: 3.1.1
537 | shebang-command: 2.0.0
538 | which: 2.0.2
539 | dev: true
540 |
541 | /debug@4.3.4:
542 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
543 | engines: {node: '>=6.0'}
544 | peerDependencies:
545 | supports-color: '*'
546 | peerDependenciesMeta:
547 | supports-color:
548 | optional: true
549 | dependencies:
550 | ms: 2.1.2
551 | dev: true
552 |
553 | /define-properties@1.2.0:
554 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
555 | engines: {node: '>= 0.4'}
556 | dependencies:
557 | has-property-descriptors: 1.0.0
558 | object-keys: 1.1.1
559 | dev: true
560 |
561 | /defu@6.1.2:
562 | resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==}
563 | dev: true
564 |
565 | /destr@2.0.1:
566 | resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==}
567 | dev: true
568 |
569 | /dotenv@16.3.1:
570 | resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
571 | engines: {node: '>=12'}
572 | dev: true
573 |
574 | /eastasianwidth@0.2.0:
575 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
576 | dev: true
577 |
578 | /emoji-regex@8.0.0:
579 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
580 | dev: true
581 |
582 | /emoji-regex@9.2.2:
583 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
584 | dev: true
585 |
586 | /error-ex@1.3.2:
587 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
588 | dependencies:
589 | is-arrayish: 0.2.1
590 | dev: true
591 |
592 | /es-abstract@1.22.1:
593 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==}
594 | engines: {node: '>= 0.4'}
595 | dependencies:
596 | array-buffer-byte-length: 1.0.0
597 | arraybuffer.prototype.slice: 1.0.1
598 | available-typed-arrays: 1.0.5
599 | call-bind: 1.0.2
600 | es-set-tostringtag: 2.0.1
601 | es-to-primitive: 1.2.1
602 | function.prototype.name: 1.1.5
603 | get-intrinsic: 1.2.1
604 | get-symbol-description: 1.0.0
605 | globalthis: 1.0.3
606 | gopd: 1.0.1
607 | has: 1.0.3
608 | has-property-descriptors: 1.0.0
609 | has-proto: 1.0.1
610 | has-symbols: 1.0.3
611 | internal-slot: 1.0.5
612 | is-array-buffer: 3.0.2
613 | is-callable: 1.2.7
614 | is-negative-zero: 2.0.2
615 | is-regex: 1.1.4
616 | is-shared-array-buffer: 1.0.2
617 | is-string: 1.0.7
618 | is-typed-array: 1.1.12
619 | is-weakref: 1.0.2
620 | object-inspect: 1.12.3
621 | object-keys: 1.1.1
622 | object.assign: 4.1.4
623 | regexp.prototype.flags: 1.5.0
624 | safe-array-concat: 1.0.0
625 | safe-regex-test: 1.0.0
626 | string.prototype.trim: 1.2.7
627 | string.prototype.trimend: 1.0.6
628 | string.prototype.trimstart: 1.0.6
629 | typed-array-buffer: 1.0.0
630 | typed-array-byte-length: 1.0.0
631 | typed-array-byte-offset: 1.0.0
632 | typed-array-length: 1.0.4
633 | unbox-primitive: 1.0.2
634 | which-typed-array: 1.1.11
635 | dev: true
636 |
637 | /es-set-tostringtag@2.0.1:
638 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
639 | engines: {node: '>= 0.4'}
640 | dependencies:
641 | get-intrinsic: 1.2.1
642 | has: 1.0.3
643 | has-tostringtag: 1.0.0
644 | dev: true
645 |
646 | /es-to-primitive@1.2.1:
647 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
648 | engines: {node: '>= 0.4'}
649 | dependencies:
650 | is-callable: 1.2.7
651 | is-date-object: 1.0.5
652 | is-symbol: 1.0.4
653 | dev: true
654 |
655 | /esbuild@0.18.20:
656 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
657 | engines: {node: '>=12'}
658 | hasBin: true
659 | requiresBuild: true
660 | optionalDependencies:
661 | '@esbuild/android-arm': 0.18.20
662 | '@esbuild/android-arm64': 0.18.20
663 | '@esbuild/android-x64': 0.18.20
664 | '@esbuild/darwin-arm64': 0.18.20
665 | '@esbuild/darwin-x64': 0.18.20
666 | '@esbuild/freebsd-arm64': 0.18.20
667 | '@esbuild/freebsd-x64': 0.18.20
668 | '@esbuild/linux-arm': 0.18.20
669 | '@esbuild/linux-arm64': 0.18.20
670 | '@esbuild/linux-ia32': 0.18.20
671 | '@esbuild/linux-loong64': 0.18.20
672 | '@esbuild/linux-mips64el': 0.18.20
673 | '@esbuild/linux-ppc64': 0.18.20
674 | '@esbuild/linux-riscv64': 0.18.20
675 | '@esbuild/linux-s390x': 0.18.20
676 | '@esbuild/linux-x64': 0.18.20
677 | '@esbuild/netbsd-x64': 0.18.20
678 | '@esbuild/openbsd-x64': 0.18.20
679 | '@esbuild/sunos-x64': 0.18.20
680 | '@esbuild/win32-arm64': 0.18.20
681 | '@esbuild/win32-ia32': 0.18.20
682 | '@esbuild/win32-x64': 0.18.20
683 | dev: true
684 |
685 | /escape-string-regexp@1.0.5:
686 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
687 | engines: {node: '>=0.8.0'}
688 | dev: true
689 |
690 | /execa@8.0.1:
691 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
692 | engines: {node: '>=16.17'}
693 | dependencies:
694 | cross-spawn: 7.0.3
695 | get-stream: 8.0.1
696 | human-signals: 5.0.0
697 | is-stream: 3.0.0
698 | merge-stream: 2.0.0
699 | npm-run-path: 5.1.0
700 | onetime: 6.0.0
701 | signal-exit: 4.1.0
702 | strip-final-newline: 3.0.0
703 | dev: true
704 |
705 | /fast-glob@3.3.1:
706 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
707 | engines: {node: '>=8.6.0'}
708 | dependencies:
709 | '@nodelib/fs.stat': 2.0.5
710 | '@nodelib/fs.walk': 1.2.8
711 | glob-parent: 5.1.2
712 | merge2: 1.4.1
713 | micromatch: 4.0.5
714 | dev: true
715 |
716 | /fastq@1.15.0:
717 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
718 | dependencies:
719 | reusify: 1.0.4
720 | dev: true
721 |
722 | /fill-range@7.0.1:
723 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
724 | engines: {node: '>=8'}
725 | dependencies:
726 | to-regex-range: 5.0.1
727 | dev: true
728 |
729 | /flat@5.0.2:
730 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
731 | hasBin: true
732 | dev: true
733 |
734 | /for-each@0.3.3:
735 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
736 | dependencies:
737 | is-callable: 1.2.7
738 | dev: true
739 |
740 | /foreground-child@3.1.1:
741 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
742 | engines: {node: '>=14'}
743 | dependencies:
744 | cross-spawn: 7.0.3
745 | signal-exit: 4.1.0
746 | dev: true
747 |
748 | /fs-minipass@2.1.0:
749 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
750 | engines: {node: '>= 8'}
751 | dependencies:
752 | minipass: 3.3.6
753 | dev: true
754 |
755 | /fsevents@2.3.2:
756 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
757 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
758 | os: [darwin]
759 | requiresBuild: true
760 | dev: true
761 | optional: true
762 |
763 | /function-bind@1.1.1:
764 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
765 | dev: true
766 |
767 | /function.prototype.name@1.1.5:
768 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
769 | engines: {node: '>= 0.4'}
770 | dependencies:
771 | call-bind: 1.0.2
772 | define-properties: 1.2.0
773 | es-abstract: 1.22.1
774 | functions-have-names: 1.2.3
775 | dev: true
776 |
777 | /functions-have-names@1.2.3:
778 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
779 | dev: true
780 |
781 | /get-intrinsic@1.2.1:
782 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
783 | dependencies:
784 | function-bind: 1.1.1
785 | has: 1.0.3
786 | has-proto: 1.0.1
787 | has-symbols: 1.0.3
788 | dev: true
789 |
790 | /get-stream@8.0.1:
791 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
792 | engines: {node: '>=16'}
793 | dev: true
794 |
795 | /get-symbol-description@1.0.0:
796 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
797 | engines: {node: '>= 0.4'}
798 | dependencies:
799 | call-bind: 1.0.2
800 | get-intrinsic: 1.2.1
801 | dev: true
802 |
803 | /giget@1.1.2:
804 | resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
805 | hasBin: true
806 | dependencies:
807 | colorette: 2.0.20
808 | defu: 6.1.2
809 | https-proxy-agent: 5.0.1
810 | mri: 1.2.0
811 | node-fetch-native: 1.2.0
812 | pathe: 1.1.1
813 | tar: 6.1.15
814 | transitivePeerDependencies:
815 | - supports-color
816 | dev: true
817 |
818 | /glob-parent@5.1.2:
819 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
820 | engines: {node: '>= 6'}
821 | dependencies:
822 | is-glob: 4.0.3
823 | dev: true
824 |
825 | /glob@10.3.10:
826 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
827 | engines: {node: '>=16 || 14 >=14.17'}
828 | hasBin: true
829 | dependencies:
830 | foreground-child: 3.1.1
831 | jackspeak: 2.3.6
832 | minimatch: 9.0.3
833 | minipass: 7.0.3
834 | path-scurry: 1.10.1
835 | dev: true
836 |
837 | /globalthis@1.0.3:
838 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
839 | engines: {node: '>= 0.4'}
840 | dependencies:
841 | define-properties: 1.2.0
842 | dev: true
843 |
844 | /gopd@1.0.1:
845 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
846 | dependencies:
847 | get-intrinsic: 1.2.1
848 | dev: true
849 |
850 | /graceful-fs@4.2.11:
851 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
852 | dev: true
853 |
854 | /has-bigints@1.0.2:
855 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
856 | dev: true
857 |
858 | /has-flag@3.0.0:
859 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
860 | engines: {node: '>=4'}
861 | dev: true
862 |
863 | /has-property-descriptors@1.0.0:
864 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
865 | dependencies:
866 | get-intrinsic: 1.2.1
867 | dev: true
868 |
869 | /has-proto@1.0.1:
870 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
871 | engines: {node: '>= 0.4'}
872 | dev: true
873 |
874 | /has-symbols@1.0.3:
875 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
876 | engines: {node: '>= 0.4'}
877 | dev: true
878 |
879 | /has-tostringtag@1.0.0:
880 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
881 | engines: {node: '>= 0.4'}
882 | dependencies:
883 | has-symbols: 1.0.3
884 | dev: true
885 |
886 | /has@1.0.3:
887 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
888 | engines: {node: '>= 0.4.0'}
889 | dependencies:
890 | function-bind: 1.1.1
891 | dev: true
892 |
893 | /hosted-git-info@2.8.9:
894 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
895 | dev: true
896 |
897 | /https-proxy-agent@5.0.1:
898 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
899 | engines: {node: '>= 6'}
900 | dependencies:
901 | agent-base: 6.0.2
902 | debug: 4.3.4
903 | transitivePeerDependencies:
904 | - supports-color
905 | dev: true
906 |
907 | /human-signals@5.0.0:
908 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
909 | engines: {node: '>=16.17.0'}
910 | dev: true
911 |
912 | /internal-slot@1.0.5:
913 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
914 | engines: {node: '>= 0.4'}
915 | dependencies:
916 | get-intrinsic: 1.2.1
917 | has: 1.0.3
918 | side-channel: 1.0.4
919 | dev: true
920 |
921 | /is-array-buffer@3.0.2:
922 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
923 | dependencies:
924 | call-bind: 1.0.2
925 | get-intrinsic: 1.2.1
926 | is-typed-array: 1.1.12
927 | dev: true
928 |
929 | /is-arrayish@0.2.1:
930 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
931 | dev: true
932 |
933 | /is-bigint@1.0.4:
934 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
935 | dependencies:
936 | has-bigints: 1.0.2
937 | dev: true
938 |
939 | /is-binary-path@2.1.0:
940 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
941 | engines: {node: '>=8'}
942 | dependencies:
943 | binary-extensions: 2.2.0
944 | dev: true
945 |
946 | /is-boolean-object@1.1.2:
947 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
948 | engines: {node: '>= 0.4'}
949 | dependencies:
950 | call-bind: 1.0.2
951 | has-tostringtag: 1.0.0
952 | dev: true
953 |
954 | /is-callable@1.2.7:
955 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
956 | engines: {node: '>= 0.4'}
957 | dev: true
958 |
959 | /is-core-module@2.13.0:
960 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
961 | dependencies:
962 | has: 1.0.3
963 | dev: true
964 |
965 | /is-date-object@1.0.5:
966 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
967 | engines: {node: '>= 0.4'}
968 | dependencies:
969 | has-tostringtag: 1.0.0
970 | dev: true
971 |
972 | /is-extglob@2.1.1:
973 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
974 | engines: {node: '>=0.10.0'}
975 | dev: true
976 |
977 | /is-fullwidth-code-point@3.0.0:
978 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
979 | engines: {node: '>=8'}
980 | dev: true
981 |
982 | /is-glob@4.0.3:
983 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
984 | engines: {node: '>=0.10.0'}
985 | dependencies:
986 | is-extglob: 2.1.1
987 | dev: true
988 |
989 | /is-negative-zero@2.0.2:
990 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
991 | engines: {node: '>= 0.4'}
992 | dev: true
993 |
994 | /is-number-object@1.0.7:
995 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
996 | engines: {node: '>= 0.4'}
997 | dependencies:
998 | has-tostringtag: 1.0.0
999 | dev: true
1000 |
1001 | /is-number@7.0.0:
1002 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1003 | engines: {node: '>=0.12.0'}
1004 | dev: true
1005 |
1006 | /is-regex@1.1.4:
1007 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
1008 | engines: {node: '>= 0.4'}
1009 | dependencies:
1010 | call-bind: 1.0.2
1011 | has-tostringtag: 1.0.0
1012 | dev: true
1013 |
1014 | /is-shared-array-buffer@1.0.2:
1015 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
1016 | dependencies:
1017 | call-bind: 1.0.2
1018 | dev: true
1019 |
1020 | /is-stream@3.0.0:
1021 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1022 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1023 | dev: true
1024 |
1025 | /is-string@1.0.7:
1026 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
1027 | engines: {node: '>= 0.4'}
1028 | dependencies:
1029 | has-tostringtag: 1.0.0
1030 | dev: true
1031 |
1032 | /is-symbol@1.0.4:
1033 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
1034 | engines: {node: '>= 0.4'}
1035 | dependencies:
1036 | has-symbols: 1.0.3
1037 | dev: true
1038 |
1039 | /is-typed-array@1.1.12:
1040 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
1041 | engines: {node: '>= 0.4'}
1042 | dependencies:
1043 | which-typed-array: 1.1.11
1044 | dev: true
1045 |
1046 | /is-weakref@1.0.2:
1047 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
1048 | dependencies:
1049 | call-bind: 1.0.2
1050 | dev: true
1051 |
1052 | /isarray@2.0.5:
1053 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1054 | dev: true
1055 |
1056 | /isexe@2.0.0:
1057 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1058 | dev: true
1059 |
1060 | /jackspeak@2.3.6:
1061 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
1062 | engines: {node: '>=14'}
1063 | dependencies:
1064 | '@isaacs/cliui': 8.0.2
1065 | optionalDependencies:
1066 | '@pkgjs/parseargs': 0.11.0
1067 | dev: true
1068 |
1069 | /jiti@1.19.3:
1070 | resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==}
1071 | hasBin: true
1072 | dev: true
1073 |
1074 | /json-parse-better-errors@1.0.2:
1075 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
1076 | dev: true
1077 |
1078 | /jsonc-parser@3.2.0:
1079 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
1080 | dev: true
1081 |
1082 | /kleur@3.0.3:
1083 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
1084 | engines: {node: '>=6'}
1085 | dev: true
1086 |
1087 | /load-json-file@4.0.0:
1088 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
1089 | engines: {node: '>=4'}
1090 | dependencies:
1091 | graceful-fs: 4.2.11
1092 | parse-json: 4.0.0
1093 | pify: 3.0.0
1094 | strip-bom: 3.0.0
1095 | dev: true
1096 |
1097 | /lru-cache@10.0.1:
1098 | resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
1099 | engines: {node: 14 || >=16.14}
1100 | dev: true
1101 |
1102 | /lru-cache@6.0.0:
1103 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1104 | engines: {node: '>=10'}
1105 | dependencies:
1106 | yallist: 4.0.0
1107 | dev: true
1108 |
1109 | /memorystream@0.3.1:
1110 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
1111 | engines: {node: '>= 0.10.0'}
1112 | dev: true
1113 |
1114 | /merge-stream@2.0.0:
1115 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1116 | dev: true
1117 |
1118 | /merge2@1.4.1:
1119 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1120 | engines: {node: '>= 8'}
1121 | dev: true
1122 |
1123 | /micromatch@4.0.5:
1124 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1125 | engines: {node: '>=8.6'}
1126 | dependencies:
1127 | braces: 3.0.2
1128 | picomatch: 2.3.1
1129 | dev: true
1130 |
1131 | /mimic-fn@4.0.0:
1132 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
1133 | engines: {node: '>=12'}
1134 | dev: true
1135 |
1136 | /minimatch@3.1.2:
1137 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1138 | dependencies:
1139 | brace-expansion: 1.1.11
1140 | dev: true
1141 |
1142 | /minimatch@9.0.3:
1143 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
1144 | engines: {node: '>=16 || 14 >=14.17'}
1145 | dependencies:
1146 | brace-expansion: 2.0.1
1147 | dev: true
1148 |
1149 | /minipass@3.3.6:
1150 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
1151 | engines: {node: '>=8'}
1152 | dependencies:
1153 | yallist: 4.0.0
1154 | dev: true
1155 |
1156 | /minipass@5.0.0:
1157 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
1158 | engines: {node: '>=8'}
1159 | dev: true
1160 |
1161 | /minipass@7.0.3:
1162 | resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==}
1163 | engines: {node: '>=16 || 14 >=14.17'}
1164 | dev: true
1165 |
1166 | /minizlib@2.1.2:
1167 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
1168 | engines: {node: '>= 8'}
1169 | dependencies:
1170 | minipass: 3.3.6
1171 | yallist: 4.0.0
1172 | dev: true
1173 |
1174 | /mkdirp@1.0.4:
1175 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
1176 | engines: {node: '>=10'}
1177 | hasBin: true
1178 | dev: true
1179 |
1180 | /mlly@1.4.0:
1181 | resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==}
1182 | dependencies:
1183 | acorn: 8.10.0
1184 | pathe: 1.1.1
1185 | pkg-types: 1.0.3
1186 | ufo: 1.2.0
1187 | dev: true
1188 |
1189 | /mri@1.2.0:
1190 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1191 | engines: {node: '>=4'}
1192 | dev: true
1193 |
1194 | /ms@2.1.2:
1195 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1196 | dev: true
1197 |
1198 | /nanoid@3.3.6:
1199 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
1200 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1201 | hasBin: true
1202 | dev: true
1203 |
1204 | /nice-try@1.0.5:
1205 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
1206 | dev: true
1207 |
1208 | /node-fetch-native@1.2.0:
1209 | resolution: {integrity: sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==}
1210 | dev: true
1211 |
1212 | /normalize-package-data@2.5.0:
1213 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
1214 | dependencies:
1215 | hosted-git-info: 2.8.9
1216 | resolve: 1.22.4
1217 | semver: 5.7.2
1218 | validate-npm-package-license: 3.0.4
1219 | dev: true
1220 |
1221 | /normalize-path@3.0.0:
1222 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1223 | engines: {node: '>=0.10.0'}
1224 | dev: true
1225 |
1226 | /npm-run-all@4.1.5:
1227 | resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==}
1228 | engines: {node: '>= 4'}
1229 | hasBin: true
1230 | dependencies:
1231 | ansi-styles: 3.2.1
1232 | chalk: 2.4.2
1233 | cross-spawn: 6.0.5
1234 | memorystream: 0.3.1
1235 | minimatch: 3.1.2
1236 | pidtree: 0.3.1
1237 | read-pkg: 3.0.0
1238 | shell-quote: 1.8.1
1239 | string.prototype.padend: 3.1.4
1240 | dev: true
1241 |
1242 | /npm-run-path@5.1.0:
1243 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
1244 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1245 | dependencies:
1246 | path-key: 4.0.0
1247 | dev: true
1248 |
1249 | /object-inspect@1.12.3:
1250 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
1251 | dev: true
1252 |
1253 | /object-keys@1.1.1:
1254 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1255 | engines: {node: '>= 0.4'}
1256 | dev: true
1257 |
1258 | /object.assign@4.1.4:
1259 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
1260 | engines: {node: '>= 0.4'}
1261 | dependencies:
1262 | call-bind: 1.0.2
1263 | define-properties: 1.2.0
1264 | has-symbols: 1.0.3
1265 | object-keys: 1.1.1
1266 | dev: true
1267 |
1268 | /ohash@1.1.3:
1269 | resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==}
1270 | dev: true
1271 |
1272 | /onetime@6.0.0:
1273 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
1274 | engines: {node: '>=12'}
1275 | dependencies:
1276 | mimic-fn: 4.0.0
1277 | dev: true
1278 |
1279 | /parse-json@4.0.0:
1280 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
1281 | engines: {node: '>=4'}
1282 | dependencies:
1283 | error-ex: 1.3.2
1284 | json-parse-better-errors: 1.0.2
1285 | dev: true
1286 |
1287 | /path-key@2.0.1:
1288 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
1289 | engines: {node: '>=4'}
1290 | dev: true
1291 |
1292 | /path-key@3.1.1:
1293 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1294 | engines: {node: '>=8'}
1295 | dev: true
1296 |
1297 | /path-key@4.0.0:
1298 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
1299 | engines: {node: '>=12'}
1300 | dev: true
1301 |
1302 | /path-parse@1.0.7:
1303 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1304 | dev: true
1305 |
1306 | /path-scurry@1.10.1:
1307 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
1308 | engines: {node: '>=16 || 14 >=14.17'}
1309 | dependencies:
1310 | lru-cache: 10.0.1
1311 | minipass: 7.0.3
1312 | dev: true
1313 |
1314 | /path-type@3.0.0:
1315 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
1316 | engines: {node: '>=4'}
1317 | dependencies:
1318 | pify: 3.0.0
1319 | dev: true
1320 |
1321 | /pathe@1.1.1:
1322 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
1323 | dev: true
1324 |
1325 | /perfect-debounce@1.0.0:
1326 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
1327 | dev: true
1328 |
1329 | /picocolors@1.0.0:
1330 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1331 | dev: true
1332 |
1333 | /picomatch@2.3.1:
1334 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1335 | engines: {node: '>=8.6'}
1336 | dev: true
1337 |
1338 | /pidtree@0.3.1:
1339 | resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}
1340 | engines: {node: '>=0.10'}
1341 | hasBin: true
1342 | dev: true
1343 |
1344 | /pify@3.0.0:
1345 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
1346 | engines: {node: '>=4'}
1347 | dev: true
1348 |
1349 | /pkg-types@1.0.3:
1350 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
1351 | dependencies:
1352 | jsonc-parser: 3.2.0
1353 | mlly: 1.4.0
1354 | pathe: 1.1.1
1355 | dev: true
1356 |
1357 | /postcss@8.4.28:
1358 | resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==}
1359 | engines: {node: ^10 || ^12 || >=14}
1360 | dependencies:
1361 | nanoid: 3.3.6
1362 | picocolors: 1.0.0
1363 | source-map-js: 1.0.2
1364 | dev: true
1365 |
1366 | /pretty-bytes@6.1.1:
1367 | resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
1368 | engines: {node: ^14.13.1 || >=16.0.0}
1369 | dev: true
1370 |
1371 | /prompts@2.4.2:
1372 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
1373 | engines: {node: '>= 6'}
1374 | dependencies:
1375 | kleur: 3.0.3
1376 | sisteransi: 1.0.5
1377 | dev: true
1378 |
1379 | /queue-microtask@1.2.3:
1380 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1381 | dev: true
1382 |
1383 | /rc9@2.1.1:
1384 | resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==}
1385 | dependencies:
1386 | defu: 6.1.2
1387 | destr: 2.0.1
1388 | flat: 5.0.2
1389 | dev: true
1390 |
1391 | /read-pkg@3.0.0:
1392 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
1393 | engines: {node: '>=4'}
1394 | dependencies:
1395 | load-json-file: 4.0.0
1396 | normalize-package-data: 2.5.0
1397 | path-type: 3.0.0
1398 | dev: true
1399 |
1400 | /readdirp@3.6.0:
1401 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1402 | engines: {node: '>=8.10.0'}
1403 | dependencies:
1404 | picomatch: 2.3.1
1405 | dev: true
1406 |
1407 | /regexp.prototype.flags@1.5.0:
1408 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
1409 | engines: {node: '>= 0.4'}
1410 | dependencies:
1411 | call-bind: 1.0.2
1412 | define-properties: 1.2.0
1413 | functions-have-names: 1.2.3
1414 | dev: true
1415 |
1416 | /resolve@1.22.4:
1417 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
1418 | hasBin: true
1419 | dependencies:
1420 | is-core-module: 2.13.0
1421 | path-parse: 1.0.7
1422 | supports-preserve-symlinks-flag: 1.0.0
1423 | dev: true
1424 |
1425 | /reusify@1.0.4:
1426 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1427 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1428 | dev: true
1429 |
1430 | /rimraf@5.0.5:
1431 | resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==}
1432 | engines: {node: '>=14'}
1433 | hasBin: true
1434 | dependencies:
1435 | glob: 10.3.10
1436 | dev: true
1437 |
1438 | /rollup@3.28.0:
1439 | resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==}
1440 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1441 | hasBin: true
1442 | optionalDependencies:
1443 | fsevents: 2.3.2
1444 | dev: true
1445 |
1446 | /run-parallel@1.2.0:
1447 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1448 | dependencies:
1449 | queue-microtask: 1.2.3
1450 | dev: true
1451 |
1452 | /safe-array-concat@1.0.0:
1453 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==}
1454 | engines: {node: '>=0.4'}
1455 | dependencies:
1456 | call-bind: 1.0.2
1457 | get-intrinsic: 1.2.1
1458 | has-symbols: 1.0.3
1459 | isarray: 2.0.5
1460 | dev: true
1461 |
1462 | /safe-regex-test@1.0.0:
1463 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
1464 | dependencies:
1465 | call-bind: 1.0.2
1466 | get-intrinsic: 1.2.1
1467 | is-regex: 1.1.4
1468 | dev: true
1469 |
1470 | /semver@5.7.2:
1471 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
1472 | hasBin: true
1473 | dev: true
1474 |
1475 | /semver@7.5.4:
1476 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
1477 | engines: {node: '>=10'}
1478 | hasBin: true
1479 | dependencies:
1480 | lru-cache: 6.0.0
1481 | dev: true
1482 |
1483 | /shebang-command@1.2.0:
1484 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
1485 | engines: {node: '>=0.10.0'}
1486 | dependencies:
1487 | shebang-regex: 1.0.0
1488 | dev: true
1489 |
1490 | /shebang-command@2.0.0:
1491 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1492 | engines: {node: '>=8'}
1493 | dependencies:
1494 | shebang-regex: 3.0.0
1495 | dev: true
1496 |
1497 | /shebang-regex@1.0.0:
1498 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
1499 | engines: {node: '>=0.10.0'}
1500 | dev: true
1501 |
1502 | /shebang-regex@3.0.0:
1503 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1504 | engines: {node: '>=8'}
1505 | dev: true
1506 |
1507 | /shell-quote@1.8.1:
1508 | resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
1509 | dev: true
1510 |
1511 | /side-channel@1.0.4:
1512 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1513 | dependencies:
1514 | call-bind: 1.0.2
1515 | get-intrinsic: 1.2.1
1516 | object-inspect: 1.12.3
1517 | dev: true
1518 |
1519 | /signal-exit@4.1.0:
1520 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1521 | engines: {node: '>=14'}
1522 | dev: true
1523 |
1524 | /sisteransi@1.0.5:
1525 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
1526 | dev: true
1527 |
1528 | /source-map-js@1.0.2:
1529 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1530 | engines: {node: '>=0.10.0'}
1531 | dev: true
1532 |
1533 | /spdx-correct@3.2.0:
1534 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
1535 | dependencies:
1536 | spdx-expression-parse: 3.0.1
1537 | spdx-license-ids: 3.0.13
1538 | dev: true
1539 |
1540 | /spdx-exceptions@2.3.0:
1541 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
1542 | dev: true
1543 |
1544 | /spdx-expression-parse@3.0.1:
1545 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
1546 | dependencies:
1547 | spdx-exceptions: 2.3.0
1548 | spdx-license-ids: 3.0.13
1549 | dev: true
1550 |
1551 | /spdx-license-ids@3.0.13:
1552 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
1553 | dev: true
1554 |
1555 | /specifier-backward@0.0.4:
1556 | resolution: {integrity: sha512-E1x/AIkLT7F2Z839drMZfX7riJDCkJ3QZuJmn9PIXqMUMKVeA7P+HbbAV3PKs5t7d9q3UfN4YWqrZdAFJWTXMA==}
1557 | dependencies:
1558 | unplugin: 1.4.0
1559 | dev: true
1560 |
1561 | /std-env@3.7.0:
1562 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
1563 | dev: false
1564 |
1565 | /string-argv@0.3.2:
1566 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
1567 | engines: {node: '>=0.6.19'}
1568 | dev: true
1569 |
1570 | /string-width@4.2.3:
1571 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1572 | engines: {node: '>=8'}
1573 | dependencies:
1574 | emoji-regex: 8.0.0
1575 | is-fullwidth-code-point: 3.0.0
1576 | strip-ansi: 6.0.1
1577 | dev: true
1578 |
1579 | /string-width@5.1.2:
1580 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1581 | engines: {node: '>=12'}
1582 | dependencies:
1583 | eastasianwidth: 0.2.0
1584 | emoji-regex: 9.2.2
1585 | strip-ansi: 7.1.0
1586 | dev: true
1587 |
1588 | /string.prototype.padend@3.1.4:
1589 | resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==}
1590 | engines: {node: '>= 0.4'}
1591 | dependencies:
1592 | call-bind: 1.0.2
1593 | define-properties: 1.2.0
1594 | es-abstract: 1.22.1
1595 | dev: true
1596 |
1597 | /string.prototype.trim@1.2.7:
1598 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
1599 | engines: {node: '>= 0.4'}
1600 | dependencies:
1601 | call-bind: 1.0.2
1602 | define-properties: 1.2.0
1603 | es-abstract: 1.22.1
1604 | dev: true
1605 |
1606 | /string.prototype.trimend@1.0.6:
1607 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
1608 | dependencies:
1609 | call-bind: 1.0.2
1610 | define-properties: 1.2.0
1611 | es-abstract: 1.22.1
1612 | dev: true
1613 |
1614 | /string.prototype.trimstart@1.0.6:
1615 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
1616 | dependencies:
1617 | call-bind: 1.0.2
1618 | define-properties: 1.2.0
1619 | es-abstract: 1.22.1
1620 | dev: true
1621 |
1622 | /strip-ansi@6.0.1:
1623 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1624 | engines: {node: '>=8'}
1625 | dependencies:
1626 | ansi-regex: 5.0.1
1627 | dev: true
1628 |
1629 | /strip-ansi@7.1.0:
1630 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1631 | engines: {node: '>=12'}
1632 | dependencies:
1633 | ansi-regex: 6.0.1
1634 | dev: true
1635 |
1636 | /strip-bom@3.0.0:
1637 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1638 | engines: {node: '>=4'}
1639 | dev: true
1640 |
1641 | /strip-final-newline@3.0.0:
1642 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
1643 | engines: {node: '>=12'}
1644 | dev: true
1645 |
1646 | /supports-color@5.5.0:
1647 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1648 | engines: {node: '>=4'}
1649 | dependencies:
1650 | has-flag: 3.0.0
1651 | dev: true
1652 |
1653 | /supports-preserve-symlinks-flag@1.0.0:
1654 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1655 | engines: {node: '>= 0.4'}
1656 | dev: true
1657 |
1658 | /tar@6.1.15:
1659 | resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==}
1660 | engines: {node: '>=10'}
1661 | dependencies:
1662 | chownr: 2.0.0
1663 | fs-minipass: 2.1.0
1664 | minipass: 5.0.0
1665 | minizlib: 2.1.2
1666 | mkdirp: 1.0.4
1667 | yallist: 4.0.0
1668 | dev: true
1669 |
1670 | /to-regex-range@5.0.1:
1671 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1672 | engines: {node: '>=8.0'}
1673 | dependencies:
1674 | is-number: 7.0.0
1675 | dev: true
1676 |
1677 | /type-detect@4.0.8:
1678 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
1679 | engines: {node: '>=4'}
1680 | dev: true
1681 |
1682 | /typed-array-buffer@1.0.0:
1683 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
1684 | engines: {node: '>= 0.4'}
1685 | dependencies:
1686 | call-bind: 1.0.2
1687 | get-intrinsic: 1.2.1
1688 | is-typed-array: 1.1.12
1689 | dev: true
1690 |
1691 | /typed-array-byte-length@1.0.0:
1692 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
1693 | engines: {node: '>= 0.4'}
1694 | dependencies:
1695 | call-bind: 1.0.2
1696 | for-each: 0.3.3
1697 | has-proto: 1.0.1
1698 | is-typed-array: 1.1.12
1699 | dev: true
1700 |
1701 | /typed-array-byte-offset@1.0.0:
1702 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
1703 | engines: {node: '>= 0.4'}
1704 | dependencies:
1705 | available-typed-arrays: 1.0.5
1706 | call-bind: 1.0.2
1707 | for-each: 0.3.3
1708 | has-proto: 1.0.1
1709 | is-typed-array: 1.1.12
1710 | dev: true
1711 |
1712 | /typed-array-length@1.0.4:
1713 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
1714 | dependencies:
1715 | call-bind: 1.0.2
1716 | for-each: 0.3.3
1717 | is-typed-array: 1.1.12
1718 | dev: true
1719 |
1720 | /typescript@5.2.2:
1721 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
1722 | engines: {node: '>=14.17'}
1723 | hasBin: true
1724 | dev: true
1725 |
1726 | /ufo@1.2.0:
1727 | resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==}
1728 | dev: true
1729 |
1730 | /unbox-primitive@1.0.2:
1731 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
1732 | dependencies:
1733 | call-bind: 1.0.2
1734 | has-bigints: 1.0.2
1735 | has-symbols: 1.0.3
1736 | which-boxed-primitive: 1.0.2
1737 | dev: true
1738 |
1739 | /unplugin@1.4.0:
1740 | resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==}
1741 | dependencies:
1742 | acorn: 8.10.0
1743 | chokidar: 3.5.3
1744 | webpack-sources: 3.2.3
1745 | webpack-virtual-modules: 0.5.0
1746 | dev: true
1747 |
1748 | /validate-npm-package-license@3.0.4:
1749 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
1750 | dependencies:
1751 | spdx-correct: 3.2.0
1752 | spdx-expression-parse: 3.0.1
1753 | dev: true
1754 |
1755 | /vite@4.4.10(@types/node@18.18.3):
1756 | resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==}
1757 | engines: {node: ^14.18.0 || >=16.0.0}
1758 | hasBin: true
1759 | peerDependencies:
1760 | '@types/node': '>= 14'
1761 | less: '*'
1762 | lightningcss: ^1.21.0
1763 | sass: '*'
1764 | stylus: '*'
1765 | sugarss: '*'
1766 | terser: ^5.4.0
1767 | peerDependenciesMeta:
1768 | '@types/node':
1769 | optional: true
1770 | less:
1771 | optional: true
1772 | lightningcss:
1773 | optional: true
1774 | sass:
1775 | optional: true
1776 | stylus:
1777 | optional: true
1778 | sugarss:
1779 | optional: true
1780 | terser:
1781 | optional: true
1782 | dependencies:
1783 | '@types/node': 18.18.3
1784 | esbuild: 0.18.20
1785 | postcss: 8.4.28
1786 | rollup: 3.28.0
1787 | optionalDependencies:
1788 | fsevents: 2.3.2
1789 | dev: true
1790 |
1791 | /webpack-sources@3.2.3:
1792 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
1793 | engines: {node: '>=10.13.0'}
1794 | dev: true
1795 |
1796 | /webpack-virtual-modules@0.5.0:
1797 | resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
1798 | dev: true
1799 |
1800 | /which-boxed-primitive@1.0.2:
1801 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
1802 | dependencies:
1803 | is-bigint: 1.0.4
1804 | is-boolean-object: 1.1.2
1805 | is-number-object: 1.0.7
1806 | is-string: 1.0.7
1807 | is-symbol: 1.0.4
1808 | dev: true
1809 |
1810 | /which-typed-array@1.1.11:
1811 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
1812 | engines: {node: '>= 0.4'}
1813 | dependencies:
1814 | available-typed-arrays: 1.0.5
1815 | call-bind: 1.0.2
1816 | for-each: 0.3.3
1817 | gopd: 1.0.1
1818 | has-tostringtag: 1.0.0
1819 | dev: true
1820 |
1821 | /which@1.3.1:
1822 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
1823 | hasBin: true
1824 | dependencies:
1825 | isexe: 2.0.0
1826 | dev: true
1827 |
1828 | /which@2.0.2:
1829 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1830 | engines: {node: '>= 8'}
1831 | hasBin: true
1832 | dependencies:
1833 | isexe: 2.0.0
1834 | dev: true
1835 |
1836 | /wrap-ansi@7.0.0:
1837 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1838 | engines: {node: '>=10'}
1839 | dependencies:
1840 | ansi-styles: 4.3.0
1841 | string-width: 4.2.3
1842 | strip-ansi: 6.0.1
1843 | dev: true
1844 |
1845 | /wrap-ansi@8.1.0:
1846 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1847 | engines: {node: '>=12'}
1848 | dependencies:
1849 | ansi-styles: 6.2.1
1850 | string-width: 5.1.2
1851 | strip-ansi: 7.1.0
1852 | dev: true
1853 |
1854 | /yallist@4.0.0:
1855 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1856 | dev: true
1857 |
--------------------------------------------------------------------------------
/scripts/post.mjs:
--------------------------------------------------------------------------------
1 | import { platform } from "os";
2 | import { existsSync } from "fs";
3 | import { chmod } from "fs/promises";
4 |
5 | const isWindows = platform() === "win32";
6 |
7 | // Obtain permissions silently
8 | async function setBinPermissions() {
9 | try {
10 | if (!isWindows) {
11 | const { detectDefaultBinPath } = await import(
12 | "../npm/bin.mjs"
13 | );
14 | const binPath = detectDefaultBinPath();
15 | const binPathExists = existsSync(binPath);
16 | if (binPathExists) {
17 | await chmod(binPath, "755");
18 | }
19 | }
20 | } catch (error) {}
21 | }
22 |
23 | setBinPermissions();
24 |
--------------------------------------------------------------------------------
/scripts/sync.js:
--------------------------------------------------------------------------------
1 | const { execSync } = require("node:child_process");
2 | const { copyFile } = require("node:fs/promises");
3 |
4 | const wasmExec = execSync("go env GOROOT").toString().replace(/\n/g, "") +
5 | "/misc/wasm/wasm_exec.js";
6 |
7 | copyFile(wasmExec, "./wasm/wasm_exec.js");
8 |
--------------------------------------------------------------------------------
/snapshot.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/markthree/go-get-folder-size/62b6be4a99d82f36b9b1ab57703a65d18c70ae60/snapshot.gif
--------------------------------------------------------------------------------
/src/bin.ts:
--------------------------------------------------------------------------------
1 | import { execa } from "execa";
2 | import prettyBytes from "pretty-bytes";
3 | import { createInterface } from "node:readline";
4 | import { arch as _arch, platform as _platform } from "node:os";
5 |
6 | import { fileURLToPath } from "node:url";
7 | import { dirname, resolve } from "node:path";
8 |
9 | const _dirname = typeof __dirname !== "undefined"
10 | ? __dirname
11 | : dirname(fileURLToPath(import.meta.url));
12 |
13 | let defaultBinPath = "";
14 |
15 | // Cache the inferred version to avoid recomputing it
16 | let cachedInferredVersion = null;
17 |
18 | export function inferVersion() {
19 | if (cachedInferredVersion) {
20 | return cachedInferredVersion;
21 | }
22 |
23 | const platform = _platform();
24 | if (!/win32|linux|darwin/.test(platform)) {
25 | throw new Error(`${platform} is not support`);
26 | }
27 |
28 | const arch = _arch();
29 |
30 | if (!/amd64_v1|arm64|386|x64/.test(arch)) {
31 | throw new Error(`${arch} is not support`);
32 | }
33 |
34 | cachedInferredVersion = `${platform === "win32" ? "windows" : platform}_${
35 | arch === "x64" ? "amd64_v1" : arch
36 | }`;
37 | return cachedInferredVersion;
38 | }
39 |
40 | export function detectBinName(version = inferVersion()) {
41 | return `go-get-folder-size${version.startsWith("windows") ? ".exe" : ""}`;
42 | }
43 |
44 | export function detectDefaultBinPath() {
45 | if (defaultBinPath) {
46 | return defaultBinPath;
47 | }
48 |
49 | const version = inferVersion();
50 | const name = detectBinName(version);
51 | defaultBinPath = resolve(
52 | _dirname,
53 | `../dist/go-get-folder-size_${version}/${name}`,
54 | );
55 | return defaultBinPath;
56 | }
57 |
58 | interface Options {
59 | binPath?: string;
60 | /**
61 | * @default false
62 | */
63 | loose?: boolean;
64 | }
65 |
66 | export async function getFolderSizeBin(
67 | base: string,
68 | pretty?: false,
69 | options?: Options,
70 | ): Promise;
71 | export async function getFolderSizeBin(
72 | base: string,
73 | pretty?: true,
74 | options?: Options,
75 | ): Promise;
76 | export async function getFolderSizeBin(
77 | base: string,
78 | pretty = false,
79 | options: Options = {},
80 | ) {
81 | const { binPath = detectDefaultBinPath(), loose = false } = options;
82 | const { stdout, stderr } = await execa(binPath, {
83 | cwd: base,
84 | env: { loose: String(loose) },
85 | });
86 |
87 | if (stderr) {
88 | throw new Error(stderr);
89 | }
90 |
91 | if (pretty) {
92 | return prettyBytes(Number(stdout));
93 | }
94 |
95 | return Number(stdout);
96 | }
97 |
98 | export function createGetFolderSizeBinIpc(options: Options = {}) {
99 | const { binPath = detectDefaultBinPath(), loose = false } = options;
100 |
101 | let tasks = new Map<
102 | string,
103 | { pretty: boolean; resolve: Function; reject: Function }
104 | >();
105 |
106 | const go = execa(binPath, {
107 | env: {
108 | ipc: String(true),
109 | loose: String(loose),
110 | },
111 | });
112 |
113 | const readline = createInterface({
114 | input: go.stdout,
115 | });
116 |
117 | function close() {
118 | if (!go.killed) {
119 | readline.close();
120 | go.cancel();
121 | tasks.clear();
122 | tasks = null;
123 | }
124 | }
125 |
126 | let full = false;
127 | function send(base: string) {
128 | if (full) {
129 | return go.stdin.once("drain", () => {
130 | full = false;
131 | go.stdin.write(`${base},`);
132 | });
133 | }
134 | full = !go.stdin.write(`${base},`);
135 | }
136 |
137 | readline.on("line", (item: string) => {
138 | const [base, size] = item.split(",");
139 | const { pretty, resolve } = tasks.get(base);
140 | resolve(pretty ? prettyBytes(Number(size)) : Number(size));
141 | tasks.delete(base);
142 | });
143 |
144 | go.stderr.on("data", (item: Buffer) => {
145 | const [base, ...error] = String(item).split(",");
146 | const { reject } = tasks.get(base);
147 | reject(new Error(error.toString()));
148 | tasks.delete(base);
149 | });
150 |
151 | process.once("exit", () => {
152 | close();
153 | });
154 |
155 | async function getFolderSizeWithIpc(
156 | base: string,
157 | pretty?: false,
158 | ): Promise;
159 | async function getFolderSizeWithIpc(
160 | base: string,
161 | pretty?: true,
162 | ): Promise;
163 | async function getFolderSizeWithIpc(
164 | base: string,
165 | pretty = false,
166 | ): Promise {
167 | return new Promise((resolve, reject) => {
168 | tasks.set(base, { pretty, resolve, reject });
169 | send(base);
170 | });
171 | }
172 |
173 | return {
174 | close,
175 | getFolderSizeWithIpc,
176 | };
177 | }
178 |
--------------------------------------------------------------------------------
/src/cli.ts:
--------------------------------------------------------------------------------
1 | import mri from "mri";
2 | import { getFolderSizeBin } from "./bin";
3 |
4 | function printUsage() {
5 | console.log(`\ngo-get-folder-size
6 |
7 | Get the size of a folder by recursively iterating through all its sub(files && folders). Use go, so high-speed.
8 |
9 | usage:
10 | go-get-folder-size [options]
11 |
12 | options:
13 | -h, --help check help
14 | -l --loose ignore permission error
15 | -p, --pretty pretty bytes (default true)
16 | -b, --base target base path (default cwd)\n`);
17 | }
18 |
19 | async function main() {
20 | const _argv = process.argv.slice(2);
21 | const argv = mri(_argv, {
22 | default: {
23 | help: false,
24 | pretty: true,
25 | loose: false,
26 | base: process.cwd(),
27 | },
28 | string: ["base"],
29 | boolean: ["pretty", "help", "loose"],
30 | alias: {
31 | h: ["help"],
32 | b: ["base"],
33 | p: ["pretty"],
34 | l: ["loose"],
35 | },
36 | });
37 |
38 | if (argv.help) {
39 | printUsage();
40 | } else {
41 | try {
42 | const size = await getFolderSizeBin(
43 | argv.base,
44 | argv.pretty,
45 | { loose: argv.loose },
46 | );
47 | console.log(size);
48 | } catch (error) {
49 | console.error(error.message);
50 | }
51 | }
52 | }
53 |
54 | main();
55 |
--------------------------------------------------------------------------------
/src/core.go:
--------------------------------------------------------------------------------
1 | package core
2 |
3 | import (
4 | "io/fs"
5 | "os"
6 | "path"
7 | )
8 |
9 | type EntrySizeChan chan int64
10 |
11 | func Invoke(folder string) (size int64, e error) {
12 | gracefulExit := func(err error) {
13 | e = err
14 | size = 0
15 | }
16 |
17 | entrys, err := os.ReadDir(folder)
18 | if err != nil {
19 | gracefulExit(err)
20 | return
21 | }
22 | entrysLen := len(entrys)
23 | if entrysLen == 0 {
24 | gracefulExit(nil)
25 | return
26 | }
27 | errChan := make(chan error)
28 | sizeChan := make(EntrySizeChan, entrysLen)
29 |
30 | for i := 0; i < entrysLen; i++ {
31 | go func(entry fs.DirEntry) {
32 | if entry.IsDir() {
33 | subFolderSize, err := Invoke(path.Join(folder, entry.Name()))
34 | if err != nil {
35 | errChan <- err
36 | return
37 | }
38 | sizeChan <- subFolderSize
39 | return
40 | }
41 |
42 | info, err := entry.Info()
43 | if err != nil {
44 | errChan <- err
45 | return
46 | }
47 | sizeChan <- info.Size()
48 | }(entrys[i])
49 | }
50 |
51 | for i := 0; i < entrysLen; i++ {
52 | select {
53 | case value := <-sizeChan:
54 | size += value
55 | case newErr := <-errChan:
56 | if newErr != nil {
57 | gracefulExit(newErr)
58 | return
59 | }
60 | }
61 | }
62 | return size, nil
63 | }
64 |
65 | func LooseInvoke(folder string) int64 {
66 | size := int64(0)
67 |
68 | entrys, err := os.ReadDir(folder)
69 | if err != nil {
70 | return 0
71 | }
72 | entrysLen := len(entrys)
73 | if entrysLen == 0 {
74 | return 0
75 | }
76 | sizeChan := make(EntrySizeChan, entrysLen)
77 |
78 | for i := 0; i < entrysLen; i++ {
79 | go func(entry fs.DirEntry) {
80 | if entry.IsDir() {
81 | subFolderSize := LooseInvoke(path.Join(folder, entry.Name()))
82 | sizeChan <- subFolderSize
83 | return
84 | }
85 | info, err := entry.Info()
86 | if err != nil {
87 | sizeChan <- 0
88 | return
89 | }
90 | sizeChan <- info.Size()
91 | }(entrys[i])
92 | }
93 | for i := 0; i < entrysLen; i++ {
94 | size += <-sizeChan
95 | }
96 | return size
97 | }
98 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./bin";
2 | export * from "./wasm";
3 | export * from "./node";
4 |
--------------------------------------------------------------------------------
/src/node.ts:
--------------------------------------------------------------------------------
1 | import { resolve } from "node:path";
2 | import { runtime } from "std-env";
3 | import prettyBytes from "pretty-bytes";
4 | import { lstat, readdir } from "node:fs/promises";
5 |
6 | interface Options {
7 | /**
8 | * @default false
9 | */
10 | loose?: boolean;
11 | }
12 |
13 | async function strictGetFileSize(path: string) {
14 | const { size } = await lstat(path);
15 | return size;
16 | }
17 |
18 | async function looseGetFileSize(path: string) {
19 | try {
20 | const size = await strictGetFileSize(path);
21 | return size;
22 | } catch (error) {
23 | return 0;
24 | }
25 | }
26 |
27 | export async function getFolderSize(
28 | base: string,
29 | pretty?: false,
30 | options?: Options,
31 | ): Promise;
32 | export async function getFolderSize(
33 | base: string,
34 | pretty?: true,
35 | options?: Options,
36 | ): Promise;
37 | export async function getFolderSize(
38 | base: string,
39 | pretty = false,
40 | options?: Options,
41 | ) {
42 | const { loose = false } = options || {};
43 | let total = 0;
44 | const sumTotal = (size: number) => total += size;
45 | const getFileSize = loose ? looseGetFileSize : strictGetFileSize;
46 |
47 | // bun (use recursive)
48 | if (runtime === "bun") {
49 | const dirents = await readdir(base, {
50 | recursive: true,
51 | withFileTypes: true,
52 | });
53 |
54 | if (dirents.length === 0) {
55 | return mayBeWithPrettyBytes();
56 | }
57 |
58 | const promises = dirents.map(async (dirent) => {
59 | if (!dirent.isFile()) {
60 | return;
61 | }
62 | const size = await getFileSize(resolve(base, dirent.name));
63 | sumTotal(size);
64 | });
65 |
66 | await Promise.all(promises);
67 |
68 | return mayBeWithPrettyBytes();
69 | }
70 |
71 | const dirents = await readdir(base, {
72 | withFileTypes: true,
73 | });
74 |
75 | if (dirents.length === 0) {
76 | return mayBeWithPrettyBytes();
77 | }
78 |
79 | const promises: Array> = [];
80 |
81 | for (const dirent of dirents) {
82 | if (dirent.isFile()) {
83 | const path = resolve(base, dirent.name);
84 | promises.push(
85 | getFileSize(path).then(sumTotal),
86 | );
87 | continue;
88 | }
89 | if (dirent.isDirectory()) {
90 | const path = resolve(base, dirent.name);
91 | promises.push(
92 | getFolderSize(path, false, options).then(sumTotal),
93 | );
94 | }
95 | }
96 |
97 | await Promise.all(promises);
98 |
99 | return mayBeWithPrettyBytes();
100 |
101 | function mayBeWithPrettyBytes() {
102 | return pretty ? prettyBytes(total) : total;
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/src/wasm.ts:
--------------------------------------------------------------------------------
1 | import "../wasm/polyfill.js";
2 | import "../wasm/wasm_exec.js";
3 | // @ts-ignore
4 | import init from "../wasm/main.wasm?init";
5 | import prettyBytes from "pretty-bytes";
6 |
7 | interface Options {
8 | /**
9 | * @default false
10 | */
11 | loose: boolean;
12 | }
13 |
14 | // Not recommended. It may be slower than the native node
15 | export async function getFolderSizeWasm(
16 | base: string,
17 | pretty?: false,
18 | options?: Options,
19 | ): Promise;
20 | export async function getFolderSizeWasm(
21 | base: string,
22 | pretty?: true,
23 | options?: Options,
24 | ): Promise;
25 | export async function getFolderSizeWasm(
26 | base: string,
27 | pretty = false,
28 | options?: Options,
29 | ) {
30 | const { loose = false } = options || {};
31 | const go = new global.Go();
32 | go.env = { base, loose };
33 | const instance = await init(go.importObject);
34 | await go.run(instance);
35 | if (global.$folderSizeError) {
36 | throw new Error(global.$folderSizeError);
37 | }
38 | const size = global.$folderSize;
39 | global.$folderSize = null;
40 | if (pretty) {
41 | return prettyBytes(Number(size));
42 | }
43 | return Number(size);
44 | }
45 |
--------------------------------------------------------------------------------
/tea.yaml:
--------------------------------------------------------------------------------
1 | # https://tea.xyz/what-is-this-file
2 | #
3 | # DO NOT REMOVE OR EDIT THIS WARNING:
4 | #
5 | # This file is auto-generated by the TEA app. It is intended to validate ownership of your repository.
6 | # DO NOT commit this file or accept any PR if you don't know what this is.
7 | # We are aware that spammers will try to use this file to try to profit off others' work.
8 | # We take this very seriously and will take action against any malicious actors.
9 | #
10 | # If you are not the owner of this repository, and someone maliciously opens a commit with this file
11 | # please report it to us at support@tea.xyz.
12 | #
13 | # A constitution without this header is invalid.
14 | ---
15 | version: 2.0.0
16 | codeOwners:
17 | - '0x415a719FA069d7427356051bF7A6683800bAF98c'
18 | quorum: 1
19 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "outDir": "npm",
4 | "jsx": "preserve",
5 | "target": "ES2017",
6 | "module": "ESNext",
7 | "declaration": true,
8 | "lib": ["DOM", "ESNext"],
9 | "skipLibCheck": true,
10 | "isolatedModules": true,
11 | "moduleResolution": "node",
12 | "emitDeclarationOnly": true,
13 | "resolveJsonModule": true,
14 | "types": ["vite/client", "@types/node"]
15 | },
16 | "include": ["src/index.ts"],
17 | "exclude": ["node_modules", "npm"]
18 | }
19 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import { name } from "./package.json";
3 | import { builtinModules } from "module";
4 | import { vitePlugin as specifierBackward } from "specifier-backward";
5 |
6 | export default defineConfig({
7 | build: {
8 | outDir: "npm",
9 | emptyOutDir: false,
10 | lib: {
11 | name,
12 | formats: ["cjs", "es"],
13 | entry: [
14 | "./src/cli.ts",
15 | "./src/bin.ts",
16 | "./src/wasm.ts",
17 | "./src/node.ts",
18 | "./src/index.ts",
19 | ],
20 | fileName(f, n) {
21 | if (f === "cjs") {
22 | return `${n}.cjs`;
23 | }
24 | if (f === "es") {
25 | return `${n}.mjs`;
26 | }
27 | return `${n}.js`;
28 | },
29 | },
30 | rollupOptions: {
31 | external: [
32 | ...builtinModules,
33 | ...builtinModules.map((v) => `node:${v}`),
34 | ],
35 | },
36 | },
37 | plugins: [specifierBackward()],
38 | });
39 |
--------------------------------------------------------------------------------
/wasm/main.go:
--------------------------------------------------------------------------------
1 | // js-wasm
2 | package main
3 |
4 | import (
5 | "os"
6 | "syscall/js"
7 |
8 | getFolderSize "github.com/markthree/go-get-folder-size/src"
9 | )
10 |
11 | func main() {
12 | base := os.Getenv("base")
13 | isLoose := os.Getenv("loose") == "true"
14 |
15 | if isLoose {
16 | value := getFolderSize.LooseInvoke(base)
17 | js.Global().Set("$folderSize", value)
18 | } else {
19 | value, err := getFolderSize.Invoke(base)
20 |
21 | if err != nil {
22 | js.Global().Set("$folderSizeError", err)
23 | return
24 | }
25 |
26 | js.Global().Set("$folderSize", value)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/wasm/main.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/markthree/go-get-folder-size/62b6be4a99d82f36b9b1ab57703a65d18c70ae60/wasm/main.wasm
--------------------------------------------------------------------------------
/wasm/polyfill.js:
--------------------------------------------------------------------------------
1 | // Copyright 2021 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 | // The polyfill is changed from wasm_exec_node.js
5 |
6 | "use strict";
7 |
8 | import { createRequire } from "node:module";
9 |
10 | globalThis.require ??= createRequire(import.meta.url);
11 | globalThis.fs = require("fs");
12 | globalThis.TextEncoder = require("util").TextEncoder;
13 | globalThis.TextDecoder = require("util").TextDecoder;
14 |
15 | globalThis.performance = {
16 | now() {
17 | const [sec, nsec] = process.hrtime();
18 | return sec * 1000 + nsec / 1000000;
19 | },
20 | };
21 |
22 | if (!globalThis.crypto) {
23 | const crypto = require("crypto");
24 | globalThis.crypto = {
25 | getRandomValues(b) {
26 | crypto.randomFillSync(b);
27 | },
28 | };
29 | }
30 |
--------------------------------------------------------------------------------
/wasm/wasm_exec.js:
--------------------------------------------------------------------------------
1 | // Copyright 2018 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | "use strict";
6 |
7 | (() => {
8 | const enosys = () => {
9 | const err = new Error("not implemented");
10 | err.code = "ENOSYS";
11 | return err;
12 | };
13 |
14 | if (!globalThis.fs) {
15 | let outputBuf = "";
16 | globalThis.fs = {
17 | constants: {
18 | O_WRONLY: -1,
19 | O_RDWR: -1,
20 | O_CREAT: -1,
21 | O_TRUNC: -1,
22 | O_APPEND: -1,
23 | O_EXCL: -1,
24 | }, // unused
25 | writeSync(fd, buf) {
26 | outputBuf += decoder.decode(buf);
27 | const nl = outputBuf.lastIndexOf("\n");
28 | if (nl != -1) {
29 | console.log(outputBuf.substr(0, nl));
30 | outputBuf = outputBuf.substr(nl + 1);
31 | }
32 | return buf.length;
33 | },
34 | write(fd, buf, offset, length, position, callback) {
35 | if (offset !== 0 || length !== buf.length || position !== null) {
36 | callback(enosys());
37 | return;
38 | }
39 | const n = this.writeSync(fd, buf);
40 | callback(null, n);
41 | },
42 | chmod(path, mode, callback) {
43 | callback(enosys());
44 | },
45 | chown(path, uid, gid, callback) {
46 | callback(enosys());
47 | },
48 | close(fd, callback) {
49 | callback(enosys());
50 | },
51 | fchmod(fd, mode, callback) {
52 | callback(enosys());
53 | },
54 | fchown(fd, uid, gid, callback) {
55 | callback(enosys());
56 | },
57 | fstat(fd, callback) {
58 | callback(enosys());
59 | },
60 | fsync(fd, callback) {
61 | callback(null);
62 | },
63 | ftruncate(fd, length, callback) {
64 | callback(enosys());
65 | },
66 | lchown(path, uid, gid, callback) {
67 | callback(enosys());
68 | },
69 | link(path, link, callback) {
70 | callback(enosys());
71 | },
72 | lstat(path, callback) {
73 | callback(enosys());
74 | },
75 | mkdir(path, perm, callback) {
76 | callback(enosys());
77 | },
78 | open(path, flags, mode, callback) {
79 | callback(enosys());
80 | },
81 | read(fd, buffer, offset, length, position, callback) {
82 | callback(enosys());
83 | },
84 | readdir(path, callback) {
85 | callback(enosys());
86 | },
87 | readlink(path, callback) {
88 | callback(enosys());
89 | },
90 | rename(from, to, callback) {
91 | callback(enosys());
92 | },
93 | rmdir(path, callback) {
94 | callback(enosys());
95 | },
96 | stat(path, callback) {
97 | callback(enosys());
98 | },
99 | symlink(path, link, callback) {
100 | callback(enosys());
101 | },
102 | truncate(path, length, callback) {
103 | callback(enosys());
104 | },
105 | unlink(path, callback) {
106 | callback(enosys());
107 | },
108 | utimes(path, atime, mtime, callback) {
109 | callback(enosys());
110 | },
111 | };
112 | }
113 |
114 | if (!globalThis.process) {
115 | globalThis.process = {
116 | getuid() {
117 | return -1;
118 | },
119 | getgid() {
120 | return -1;
121 | },
122 | geteuid() {
123 | return -1;
124 | },
125 | getegid() {
126 | return -1;
127 | },
128 | getgroups() {
129 | throw enosys();
130 | },
131 | pid: -1,
132 | ppid: -1,
133 | umask() {
134 | throw enosys();
135 | },
136 | cwd() {
137 | throw enosys();
138 | },
139 | chdir() {
140 | throw enosys();
141 | },
142 | };
143 | }
144 |
145 | if (!globalThis.crypto) {
146 | throw new Error(
147 | "globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)",
148 | );
149 | }
150 |
151 | if (!globalThis.performance) {
152 | throw new Error(
153 | "globalThis.performance is not available, polyfill required (performance.now only)",
154 | );
155 | }
156 |
157 | if (!globalThis.TextEncoder) {
158 | throw new Error(
159 | "globalThis.TextEncoder is not available, polyfill required",
160 | );
161 | }
162 |
163 | if (!globalThis.TextDecoder) {
164 | throw new Error(
165 | "globalThis.TextDecoder is not available, polyfill required",
166 | );
167 | }
168 |
169 | const encoder = new TextEncoder("utf-8");
170 | const decoder = new TextDecoder("utf-8");
171 |
172 | globalThis.Go = class {
173 | constructor() {
174 | this.argv = ["js"];
175 | this.env = {};
176 | this.exit = (code) => {
177 | if (code !== 0) {
178 | console.warn("exit code:", code);
179 | }
180 | };
181 | this._exitPromise = new Promise((resolve) => {
182 | this._resolveExitPromise = resolve;
183 | });
184 | this._pendingEvent = null;
185 | this._scheduledTimeouts = new Map();
186 | this._nextCallbackTimeoutID = 1;
187 |
188 | const setInt64 = (addr, v) => {
189 | this.mem.setUint32(addr + 0, v, true);
190 | this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
191 | };
192 |
193 | const getInt64 = (addr) => {
194 | const low = this.mem.getUint32(addr + 0, true);
195 | const high = this.mem.getInt32(addr + 4, true);
196 | return low + high * 4294967296;
197 | };
198 |
199 | const loadValue = (addr) => {
200 | const f = this.mem.getFloat64(addr, true);
201 | if (f === 0) {
202 | return undefined;
203 | }
204 | if (!isNaN(f)) {
205 | return f;
206 | }
207 |
208 | const id = this.mem.getUint32(addr, true);
209 | return this._values[id];
210 | };
211 |
212 | const storeValue = (addr, v) => {
213 | const nanHead = 0x7FF80000;
214 |
215 | if (typeof v === "number" && v !== 0) {
216 | if (isNaN(v)) {
217 | this.mem.setUint32(addr + 4, nanHead, true);
218 | this.mem.setUint32(addr, 0, true);
219 | return;
220 | }
221 | this.mem.setFloat64(addr, v, true);
222 | return;
223 | }
224 |
225 | if (v === undefined) {
226 | this.mem.setFloat64(addr, 0, true);
227 | return;
228 | }
229 |
230 | let id = this._ids.get(v);
231 | if (id === undefined) {
232 | id = this._idPool.pop();
233 | if (id === undefined) {
234 | id = this._values.length;
235 | }
236 | this._values[id] = v;
237 | this._goRefCounts[id] = 0;
238 | this._ids.set(v, id);
239 | }
240 | this._goRefCounts[id]++;
241 | let typeFlag = 0;
242 | switch (typeof v) {
243 | case "object":
244 | if (v !== null) {
245 | typeFlag = 1;
246 | }
247 | break;
248 | case "string":
249 | typeFlag = 2;
250 | break;
251 | case "symbol":
252 | typeFlag = 3;
253 | break;
254 | case "function":
255 | typeFlag = 4;
256 | break;
257 | }
258 | this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
259 | this.mem.setUint32(addr, id, true);
260 | };
261 |
262 | const loadSlice = (addr) => {
263 | const array = getInt64(addr + 0);
264 | const len = getInt64(addr + 8);
265 | return new Uint8Array(this._inst.exports.mem.buffer, array, len);
266 | };
267 |
268 | const loadSliceOfValues = (addr) => {
269 | const array = getInt64(addr + 0);
270 | const len = getInt64(addr + 8);
271 | const a = new Array(len);
272 | for (let i = 0; i < len; i++) {
273 | a[i] = loadValue(array + i * 8);
274 | }
275 | return a;
276 | };
277 |
278 | const loadString = (addr) => {
279 | const saddr = getInt64(addr + 0);
280 | const len = getInt64(addr + 8);
281 | return decoder.decode(
282 | new DataView(this._inst.exports.mem.buffer, saddr, len),
283 | );
284 | };
285 |
286 | const timeOrigin = Date.now() - performance.now();
287 | this.importObject = {
288 | go: {
289 | // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
290 | // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
291 | // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
292 | // This changes the SP, thus we have to update the SP used by the imported function.
293 |
294 | // func wasmExit(code int32)
295 | "runtime.wasmExit": (sp) => {
296 | sp >>>= 0;
297 | const code = this.mem.getInt32(sp + 8, true);
298 | this.exited = true;
299 | delete this._inst;
300 | delete this._values;
301 | delete this._goRefCounts;
302 | delete this._ids;
303 | delete this._idPool;
304 | this.exit(code);
305 | },
306 |
307 | // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
308 | "runtime.wasmWrite": (sp) => {
309 | sp >>>= 0;
310 | const fd = getInt64(sp + 8);
311 | const p = getInt64(sp + 16);
312 | const n = this.mem.getInt32(sp + 24, true);
313 | fs.writeSync(
314 | fd,
315 | new Uint8Array(this._inst.exports.mem.buffer, p, n),
316 | );
317 | },
318 |
319 | // func resetMemoryDataView()
320 | "runtime.resetMemoryDataView": (sp) => {
321 | sp >>>= 0;
322 | this.mem = new DataView(this._inst.exports.mem.buffer);
323 | },
324 |
325 | // func nanotime1() int64
326 | "runtime.nanotime1": (sp) => {
327 | sp >>>= 0;
328 | setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
329 | },
330 |
331 | // func walltime() (sec int64, nsec int32)
332 | "runtime.walltime": (sp) => {
333 | sp >>>= 0;
334 | const msec = (new Date()).getTime();
335 | setInt64(sp + 8, msec / 1000);
336 | this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
337 | },
338 |
339 | // func scheduleTimeoutEvent(delay int64) int32
340 | "runtime.scheduleTimeoutEvent": (sp) => {
341 | sp >>>= 0;
342 | const id = this._nextCallbackTimeoutID;
343 | this._nextCallbackTimeoutID++;
344 | this._scheduledTimeouts.set(
345 | id,
346 | setTimeout(
347 | () => {
348 | this._resume();
349 | while (this._scheduledTimeouts.has(id)) {
350 | // for some reason Go failed to register the timeout event, log and try again
351 | // (temporary workaround for https://github.com/golang/go/issues/28975)
352 | console.warn("scheduleTimeoutEvent: missed timeout event");
353 | this._resume();
354 | }
355 | },
356 | getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
357 | ),
358 | );
359 | this.mem.setInt32(sp + 16, id, true);
360 | },
361 |
362 | // func clearTimeoutEvent(id int32)
363 | "runtime.clearTimeoutEvent": (sp) => {
364 | sp >>>= 0;
365 | const id = this.mem.getInt32(sp + 8, true);
366 | clearTimeout(this._scheduledTimeouts.get(id));
367 | this._scheduledTimeouts.delete(id);
368 | },
369 |
370 | // func getRandomData(r []byte)
371 | "runtime.getRandomData": (sp) => {
372 | sp >>>= 0;
373 | crypto.getRandomValues(loadSlice(sp + 8));
374 | },
375 |
376 | // func finalizeRef(v ref)
377 | "syscall/js.finalizeRef": (sp) => {
378 | sp >>>= 0;
379 | const id = this.mem.getUint32(sp + 8, true);
380 | this._goRefCounts[id]--;
381 | if (this._goRefCounts[id] === 0) {
382 | const v = this._values[id];
383 | this._values[id] = null;
384 | this._ids.delete(v);
385 | this._idPool.push(id);
386 | }
387 | },
388 |
389 | // func stringVal(value string) ref
390 | "syscall/js.stringVal": (sp) => {
391 | sp >>>= 0;
392 | storeValue(sp + 24, loadString(sp + 8));
393 | },
394 |
395 | // func valueGet(v ref, p string) ref
396 | "syscall/js.valueGet": (sp) => {
397 | sp >>>= 0;
398 | const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
399 | sp = this._inst.exports.getsp() >>> 0; // see comment above
400 | storeValue(sp + 32, result);
401 | },
402 |
403 | // func valueSet(v ref, p string, x ref)
404 | "syscall/js.valueSet": (sp) => {
405 | sp >>>= 0;
406 | Reflect.set(
407 | loadValue(sp + 8),
408 | loadString(sp + 16),
409 | loadValue(sp + 32),
410 | );
411 | },
412 |
413 | // func valueDelete(v ref, p string)
414 | "syscall/js.valueDelete": (sp) => {
415 | sp >>>= 0;
416 | Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
417 | },
418 |
419 | // func valueIndex(v ref, i int) ref
420 | "syscall/js.valueIndex": (sp) => {
421 | sp >>>= 0;
422 | storeValue(
423 | sp + 24,
424 | Reflect.get(loadValue(sp + 8), getInt64(sp + 16)),
425 | );
426 | },
427 |
428 | // valueSetIndex(v ref, i int, x ref)
429 | "syscall/js.valueSetIndex": (sp) => {
430 | sp >>>= 0;
431 | Reflect.set(
432 | loadValue(sp + 8),
433 | getInt64(sp + 16),
434 | loadValue(sp + 24),
435 | );
436 | },
437 |
438 | // func valueCall(v ref, m string, args []ref) (ref, bool)
439 | "syscall/js.valueCall": (sp) => {
440 | sp >>>= 0;
441 | try {
442 | const v = loadValue(sp + 8);
443 | const m = Reflect.get(v, loadString(sp + 16));
444 | const args = loadSliceOfValues(sp + 32);
445 | const result = Reflect.apply(m, v, args);
446 | sp = this._inst.exports.getsp() >>> 0; // see comment above
447 | storeValue(sp + 56, result);
448 | this.mem.setUint8(sp + 64, 1);
449 | } catch (err) {
450 | sp = this._inst.exports.getsp() >>> 0; // see comment above
451 | storeValue(sp + 56, err);
452 | this.mem.setUint8(sp + 64, 0);
453 | }
454 | },
455 |
456 | // func valueInvoke(v ref, args []ref) (ref, bool)
457 | "syscall/js.valueInvoke": (sp) => {
458 | sp >>>= 0;
459 | try {
460 | const v = loadValue(sp + 8);
461 | const args = loadSliceOfValues(sp + 16);
462 | const result = Reflect.apply(v, undefined, args);
463 | sp = this._inst.exports.getsp() >>> 0; // see comment above
464 | storeValue(sp + 40, result);
465 | this.mem.setUint8(sp + 48, 1);
466 | } catch (err) {
467 | sp = this._inst.exports.getsp() >>> 0; // see comment above
468 | storeValue(sp + 40, err);
469 | this.mem.setUint8(sp + 48, 0);
470 | }
471 | },
472 |
473 | // func valueNew(v ref, args []ref) (ref, bool)
474 | "syscall/js.valueNew": (sp) => {
475 | sp >>>= 0;
476 | try {
477 | const v = loadValue(sp + 8);
478 | const args = loadSliceOfValues(sp + 16);
479 | const result = Reflect.construct(v, args);
480 | sp = this._inst.exports.getsp() >>> 0; // see comment above
481 | storeValue(sp + 40, result);
482 | this.mem.setUint8(sp + 48, 1);
483 | } catch (err) {
484 | sp = this._inst.exports.getsp() >>> 0; // see comment above
485 | storeValue(sp + 40, err);
486 | this.mem.setUint8(sp + 48, 0);
487 | }
488 | },
489 |
490 | // func valueLength(v ref) int
491 | "syscall/js.valueLength": (sp) => {
492 | sp >>>= 0;
493 | setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
494 | },
495 |
496 | // valuePrepareString(v ref) (ref, int)
497 | "syscall/js.valuePrepareString": (sp) => {
498 | sp >>>= 0;
499 | const str = encoder.encode(String(loadValue(sp + 8)));
500 | storeValue(sp + 16, str);
501 | setInt64(sp + 24, str.length);
502 | },
503 |
504 | // valueLoadString(v ref, b []byte)
505 | "syscall/js.valueLoadString": (sp) => {
506 | sp >>>= 0;
507 | const str = loadValue(sp + 8);
508 | loadSlice(sp + 16).set(str);
509 | },
510 |
511 | // func valueInstanceOf(v ref, t ref) bool
512 | "syscall/js.valueInstanceOf": (sp) => {
513 | sp >>>= 0;
514 | this.mem.setUint8(
515 | sp + 24,
516 | (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0,
517 | );
518 | },
519 |
520 | // func copyBytesToGo(dst []byte, src ref) (int, bool)
521 | "syscall/js.copyBytesToGo": (sp) => {
522 | sp >>>= 0;
523 | const dst = loadSlice(sp + 8);
524 | const src = loadValue(sp + 32);
525 | if (
526 | !(src instanceof Uint8Array || src instanceof Uint8ClampedArray)
527 | ) {
528 | this.mem.setUint8(sp + 48, 0);
529 | return;
530 | }
531 | const toCopy = src.subarray(0, dst.length);
532 | dst.set(toCopy);
533 | setInt64(sp + 40, toCopy.length);
534 | this.mem.setUint8(sp + 48, 1);
535 | },
536 |
537 | // func copyBytesToJS(dst ref, src []byte) (int, bool)
538 | "syscall/js.copyBytesToJS": (sp) => {
539 | sp >>>= 0;
540 | const dst = loadValue(sp + 8);
541 | const src = loadSlice(sp + 16);
542 | if (
543 | !(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)
544 | ) {
545 | this.mem.setUint8(sp + 48, 0);
546 | return;
547 | }
548 | const toCopy = src.subarray(0, dst.length);
549 | dst.set(toCopy);
550 | setInt64(sp + 40, toCopy.length);
551 | this.mem.setUint8(sp + 48, 1);
552 | },
553 |
554 | "debug": (value) => {
555 | console.log(value);
556 | },
557 | },
558 | };
559 | }
560 |
561 | async run(instance) {
562 | if (!(instance instanceof WebAssembly.Instance)) {
563 | throw new Error("Go.run: WebAssembly.Instance expected");
564 | }
565 | this._inst = instance;
566 | this.mem = new DataView(this._inst.exports.mem.buffer);
567 | this._values = [ // JS values that Go currently has references to, indexed by reference id
568 | NaN,
569 | 0,
570 | null,
571 | true,
572 | false,
573 | globalThis,
574 | this,
575 | ];
576 | this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
577 | this._ids = new Map([ // mapping from JS values to reference ids
578 | [0, 1],
579 | [null, 2],
580 | [true, 3],
581 | [false, 4],
582 | [globalThis, 5],
583 | [this, 6],
584 | ]);
585 | this._idPool = []; // unused ids that have been garbage collected
586 | this.exited = false; // whether the Go program has exited
587 |
588 | // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
589 | let offset = 4096;
590 |
591 | const strPtr = (str) => {
592 | const ptr = offset;
593 | const bytes = encoder.encode(str + "\0");
594 | new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);
595 | offset += bytes.length;
596 | if (offset % 8 !== 0) {
597 | offset += 8 - (offset % 8);
598 | }
599 | return ptr;
600 | };
601 |
602 | const argc = this.argv.length;
603 |
604 | const argvPtrs = [];
605 | this.argv.forEach((arg) => {
606 | argvPtrs.push(strPtr(arg));
607 | });
608 | argvPtrs.push(0);
609 |
610 | const keys = Object.keys(this.env).sort();
611 | keys.forEach((key) => {
612 | argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
613 | });
614 | argvPtrs.push(0);
615 |
616 | const argv = offset;
617 | argvPtrs.forEach((ptr) => {
618 | this.mem.setUint32(offset, ptr, true);
619 | this.mem.setUint32(offset + 4, 0, true);
620 | offset += 8;
621 | });
622 |
623 | // The linker guarantees global data starts from at least wasmMinDataAddr.
624 | // Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr.
625 | const wasmMinDataAddr = 4096 + 8192;
626 | if (offset >= wasmMinDataAddr) {
627 | throw new Error(
628 | "total length of command line and environment variables exceeds limit",
629 | );
630 | }
631 |
632 | this._inst.exports.run(argc, argv);
633 | if (this.exited) {
634 | this._resolveExitPromise();
635 | }
636 | await this._exitPromise;
637 | }
638 |
639 | _resume() {
640 | if (this.exited) {
641 | throw new Error("Go program has already exited");
642 | }
643 | this._inst.exports.resume();
644 | if (this.exited) {
645 | this._resolveExitPromise();
646 | }
647 | }
648 |
649 | _makeFuncWrapper(id) {
650 | const go = this;
651 | return function () {
652 | const event = { id: id, this: this, args: arguments };
653 | go._pendingEvent = event;
654 | go._resume();
655 | return event.result;
656 | };
657 | }
658 | };
659 | })();
660 |
--------------------------------------------------------------------------------