diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 0000000..fedabb8
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,56 @@
+name: Building Rust Binding And Upload Artifacts
+on: workflow_call
+
+env:
+ DEBUG: 'napi:*'
+ MACOSX_DEPLOYMENT_TARGET: '10.13'
+
+jobs:
+ build:
+ strategy:
+ fail-fast: false
+ matrix:
+ settings:
+ - target: x86_64-unknown-linux-gnu
+ abi: linux-x64-gnu
+ - target: x86_64-unknown-linux-musl
+ abi: linux-x64-musl
+ - target: x86_64-apple-darwin
+ abi: darwin-x64
+ - target: x86_64-pc-windows-msvc
+ abi: win32-x64-msvc
+ - target: i686-pc-windows-msvc
+ abi: win32-ia32-msvc
+ - target: aarch64-pc-windows-msvc
+ abi: win32-arm64-msvc
+ - target: aarch64-unknown-linux-gnu
+ abi: linux-arm64-gnu
+ - target: aarch64-unknown-linux-musl
+ abi: linux-arm64-musl
+ - target: aarch64-apple-darwin
+ abi: darwin-arm64
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Cache rust artifacts
+ uses: Swatinem/rust-cache@v2
+ with:
+ shared-key: rust-build-${{ matrix.settings.abi }}
+ - run: rustup target add ${{ matrix.settings.target }}
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '18'
+ cache: 'pnpm'
+ - name: Install ziglang
+ uses: goto-bus-stop/setup-zig@v1
+ with:
+ version: 0.11.0
+ - run: cargo install cargo-xwin
+ - run: pnpm install
+ - run: pnpm build --target ${{ matrix.settings.target }}
+ - uses: actions/upload-artifact@v3
+ with:
+ name: ${{ github.sha }}-${{ matrix.settings.abi }}
+ path: npm/**/index.farm
+ if-no-files-found: error
+
\ No newline at end of file
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..006ef24
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,8 @@
+name: Cross Build On Linux
+on:
+ branches:
+ - main
+
+jobs:
+ call-rust-build:
+ uses: ./.github/workflows/build.yaml
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..b097bcd
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,49 @@
+name: Publish packages and crates
+on:
+ push:
+ branches:
+ - main
+
+concurrency: ${{ github.workflow }}-${{ github.ref }}
+
+jobs:
+ call-rust-build:
+ uses: ./.github/workflows/rust-build.yaml
+
+ release:
+ name: Release
+ needs: [call-rust-build]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v3
+
+ - name: Setup Node.js 18.x
+ uses: actions/setup-node@v3
+ with:
+ node-version: 18.x
+
+ # batch download artifacts
+ - uses: actions/download-artifact@v3
+ with:
+ path: /tmp/artifacts
+ - name: Move Artifacts
+ run: |
+ for abi in linux-x64-gnu linux-x64-musl darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
+ do
+ mv /tmp/artifacts/${{ github.sha }}-${abi}/* ./npm/${abi}
+
+ test -f ./npm/${abi}/index.farm
+ done
+
+ - name: Install Dependencies
+ run: npm install -g pnpm@8.15.1 && pnpm i --frozen-lockfile
+
+ - name: Publish to npm
+ id: changesets
+ uses: changesets/action@v1
+ with:
+ publish: pnpm publish --access public
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 6985cf1..ece4a24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,5 @@ Cargo.lock
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
+
+node_modules/
\ No newline at end of file
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..6ef7175
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+edition = "2021"
+name = "farm_plugin_example"
+version = "0.0.0"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+farmfe_core = { version = "*" }
+farmfe_toolkit_plugin_types = { version = "*" }
+farmfe_macro_plugin = { version = "*" }
diff --git a/example/.gitignore b/example/.gitignore
new file mode 100644
index 0000000..b3162eb
--- /dev/null
+++ b/example/.gitignore
@@ -0,0 +1,8 @@
+# Local
+.DS_Store
+*.local
+*.log*
+
+# Dist
+node_modules
+dist/
diff --git a/example/farm.config.ts b/example/farm.config.ts
new file mode 100644
index 0000000..477cb13
--- /dev/null
+++ b/example/farm.config.ts
@@ -0,0 +1,5 @@
+import { defineConfig } from '@farmfe/core';
+
+export default defineConfig({
+ plugins: ['@farmfe/plugin-react']
+});
diff --git a/example/index.html b/example/index.html
new file mode 100644
index 0000000..3b56884
--- /dev/null
+++ b/example/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example/package.json b/example/package.json
new file mode 100644
index 0000000..f703e03
--- /dev/null
+++ b/example/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "example",
+ "version": "1.0.0",
+ "dependencies": {
+ "clsx": "^1.2.1",
+ "react": "18",
+ "react-dom": "18"
+ },
+ "devDependencies": {
+ "@farmfe/cli": "^0.6.1",
+ "@farmfe/core": "^0.16.5",
+ "@farmfe/plugin-react": "^0.6.0",
+ "@types/react": "18",
+ "core-js": "^3.30.1",
+ "@types/react-dom": "18",
+ "react-refresh": "^0.14.0",
+ "farm-plugin-example": "../"
+ },
+ "scripts": {
+ "dev": "farm start",
+ "start": "farm start",
+ "build": "farm build",
+ "preview": "farm preview",
+ "clean": "farm clean"
+ }
+}
\ No newline at end of file
diff --git a/example/pnpm-lock.yaml b/example/pnpm-lock.yaml
new file mode 100644
index 0000000..507b4d2
--- /dev/null
+++ b/example/pnpm-lock.yaml
@@ -0,0 +1,1855 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ clsx:
+ specifier: ^1.2.1
+ version: 1.2.1
+ react:
+ specifier: '18'
+ version: 18.2.0
+ react-dom:
+ specifier: '18'
+ version: 18.2.0(react@18.2.0)
+
+devDependencies:
+ '@farmfe/cli':
+ specifier: ^0.6.1
+ version: 0.6.2
+ '@farmfe/core':
+ specifier: ^0.16.5
+ version: 0.16.8
+ '@farmfe/plugin-react':
+ specifier: ^0.6.0
+ version: 0.6.0
+ '@types/react':
+ specifier: '18'
+ version: 18.2.55
+ '@types/react-dom':
+ specifier: '18'
+ version: 18.2.19
+ core-js:
+ specifier: ^3.30.1
+ version: 3.35.1
+ farm-plugin-example:
+ specifier: ../
+ version: link:..
+ react-refresh:
+ specifier: ^0.14.0
+ version: 0.14.0
+
+packages:
+
+ /@farmfe/cli@0.6.2:
+ resolution: {integrity: sha512-JQIYepxrSP4GnSe96+5Z6s4pPYBrquVem6jX6nUXTzhLFixe03aqZaFHDDqjxE1hK8t6IeTAkQ7u4uuQRl2o/A==}
+ engines: {node: '>= 16'}
+ hasBin: true
+ dependencies:
+ cac: 6.7.14
+ cross-spawn: 7.0.3
+ inquirer: 9.2.14
+ walkdir: 0.4.1
+ dev: true
+
+ /@farmfe/core-darwin-arm64@0.16.8:
+ resolution: {integrity: sha512-0/e2IiUBdGpE5ggV+qJxPpgrtttdkJ3+aBof5sP4WLUBdQkiuBWmtty0E0smv8U4iLqEUsXZMzS8WAkqQwptAw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-darwin-x64@0.16.8:
+ resolution: {integrity: sha512-A2yCQK5zJJWu9SkPxbkcNwYdk9fI6o1nK9GkogM5Yv1cwY0lv0xrfdesuXwp5kB1o65PSDywIzrhv5fCU8F01A==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-linux-arm64-gnu@0.16.8:
+ resolution: {integrity: sha512-LM9UU1wCO3yQthDHShVAPwsl5J7Z2AZbE+8U3Ky0F+mlmtjDQ3YjuoC3BLa8Cfy2nTnpoawr8u9wNW6Ow+6lgg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-linux-arm64-musl@0.16.8:
+ resolution: {integrity: sha512-9GC84ozJncuUYjD0T7bD8sFsMNykDERugmwh7Ggy+cAUfSekDIj1y4+6B6X14qRCdaSvB36Gq6pt9iRVIzwD4A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-linux-x64-gnu@0.16.8:
+ resolution: {integrity: sha512-lotAr7jOpg2XoIoihX455e0MOHRUxq+l05jkiEvEGOAWfD1FmoOs2XYtoc0NS1n6wUe2QKYIs0jeTB3x32aVuA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-linux-x64-musl@0.16.8:
+ resolution: {integrity: sha512-PP/cmJ7RSPOzKgtXEmI3IH8e2ED5oyGNCAGrNliegSjtPB9775majDkB9pLzwVrCASn3ukDAjmL4hrQAwNrXaw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-win32-arm64-msvc@0.16.8:
+ resolution: {integrity: sha512-cPIsjobnFumcHKwg7xNh8mJlScCj1HZEqAJM+LFY47/vBhheTfjBl2tFqMrXTjGC3uixLWM9lOM6K+RfdC4XgQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-win32-ia32-msvc@0.16.8:
+ resolution: {integrity: sha512-h/OPikYsYdeTO7gUAIVM/R/vBAozWA62dsy9U8A5Z/5a0vShEbAYenedPZuMm/bxaqW0e8cc6v51ze1qi+BVqg==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core-win32-x64-msvc@0.16.8:
+ resolution: {integrity: sha512-3mDTqI3nPkTxmWe9KUWzMyHn983d0Hx2O38TbsuJgjetf5Qq6fmJTVSXhwUmAcYwWaSDJ3Sr/uz2SnbO55az/w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/core@0.16.8:
+ resolution: {integrity: sha512-YqD1dcyW1gOsJqQYhXfG+rpVX5liD3cGmkQsVptM+4wnADvL7R2jhut3nIGJjW8gveJ8ybBFiHbhHEYYDNCeUA==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@farmfe/runtime': 0.9.3
+ '@farmfe/runtime-plugin-hmr': 3.4.2
+ '@farmfe/runtime-plugin-import-meta': 0.1.2
+ '@farmfe/utils': 0.0.1
+ '@koa/cors': 4.0.0
+ '@swc/helpers': 0.5.6
+ browserslist-generator: 2.1.0
+ chokidar: 3.6.0
+ dotenv: 16.4.1
+ dotenv-expand: 10.0.0
+ execa: 7.2.0
+ fast-glob: 3.3.2
+ fs-extra: 11.2.0
+ koa: 2.15.0
+ koa-compress: 5.1.1
+ koa-proxies: 0.12.4(koa@2.15.0)
+ koa-static: 5.0.0
+ lodash.debounce: 4.0.8
+ lodash.merge: 4.6.2
+ loglevel: 1.9.1
+ mime-types: 2.1.35
+ open: 9.1.0
+ sirv: 2.0.4
+ slashes: 3.0.12
+ ws: 8.16.0
+ zod: 3.22.4
+ zod-validation-error: 1.5.0(zod@3.22.4)
+ optionalDependencies:
+ '@farmfe/core-darwin-arm64': 0.16.8
+ '@farmfe/core-darwin-x64': 0.16.8
+ '@farmfe/core-linux-arm64-gnu': 0.16.8
+ '@farmfe/core-linux-arm64-musl': 0.16.8
+ '@farmfe/core-linux-x64-gnu': 0.16.8
+ '@farmfe/core-linux-x64-musl': 0.16.8
+ '@farmfe/core-win32-arm64-msvc': 0.16.8
+ '@farmfe/core-win32-ia32-msvc': 0.16.8
+ '@farmfe/core-win32-x64-msvc': 0.16.8
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - supports-color
+ - utf-8-validate
+ dev: true
+
+ /@farmfe/plugin-react-darwin-arm64@0.6.0:
+ resolution: {integrity: sha512-PPHXqpJ+dAXAQQ5XM3Mk440F4NF8wUtUwCc3IAtm76w5mSzkKlIDy+m8TnIrJVdZofEX+lIAiuHbtnlzNda6tA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-darwin-x64@0.6.0:
+ resolution: {integrity: sha512-nS5qDbv2evpfiowZ6Ie6AuAKQrJevScEkxDz9hwnuuZf7B6gypGB2BBvUEHDojCdCS4RyUvNr87ntc1pVUHIrQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-linux-arm64-gnu@0.6.0:
+ resolution: {integrity: sha512-KygCPxt9RprV3ptrMKLDpoD4VgCUOOT7O4KSL7Gx6hNNQQk+sYcTjV+k6O8SZCX9DTczuz/2s+xGO8qFPRipSg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-linux-arm64-musl@0.6.0:
+ resolution: {integrity: sha512-t4ZhFAH4LIlMNc09JE/1l/Zxow4c/qACSmLLu9LwroLsU3SYr7J69NlNdx1KZtnbyipoG6K22SeY0k1DUWyjmw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-linux-x64-gnu@0.6.0:
+ resolution: {integrity: sha512-YE9+A+80WHG2CE/ncLYxGyXmM/HvJR/C7jujprIg2gEI9BLNslkVuobNhnoc8nf9dLBzD2BJcAHlc6gOYP867w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-linux-x64-musl@0.6.0:
+ resolution: {integrity: sha512-alnu6oBFKKsP8LR22zvVSgDf2r1qSXbmmB2rGW1MMM510CACqLeytTFJeJBKnfZ52mnHCkE7A1AxfELtv9PZnQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-win32-arm64-msvc@0.6.0:
+ resolution: {integrity: sha512-tTdgC3Zax/nK0cO3d2oDlJILXlFq63AR+fpgJuhZcZ0WYbPDPF6EgaMiYNG87qcwXf4jbHJ4rRJGTnhPp23EcA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-win32-ia32-msvc@0.6.0:
+ resolution: {integrity: sha512-CnhkasMhAUaqN3CjKj91uCPT5pqaoOw60SOy/6whr7xHscqf4W8qyJ3gNd6A1oGeCnEnPR0EZ20iT7l+VfDBcg==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react-win32-x64-msvc@0.6.0:
+ resolution: {integrity: sha512-KLvwjasxnIbVtSp24Bw8B97wR41EbZEFnQPCiTcsTxBc706DUZLmTH0iNZiP2mMjRCvNpOQ7IATSypQvkArRHw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@farmfe/plugin-react@0.6.0:
+ resolution: {integrity: sha512-U/z3REXBVie/PNJjkDCs+HSAtuZwsK/nUI0GyJi+Z57Z7TANDr1LmXFV4BGQCtHrMFkmNzqpoU4Pmx3Bp/Dvfg==}
+ optionalDependencies:
+ '@farmfe/plugin-react-darwin-arm64': 0.6.0
+ '@farmfe/plugin-react-darwin-x64': 0.6.0
+ '@farmfe/plugin-react-linux-arm64-gnu': 0.6.0
+ '@farmfe/plugin-react-linux-arm64-musl': 0.6.0
+ '@farmfe/plugin-react-linux-x64-gnu': 0.6.0
+ '@farmfe/plugin-react-linux-x64-musl': 0.6.0
+ '@farmfe/plugin-react-win32-arm64-msvc': 0.6.0
+ '@farmfe/plugin-react-win32-ia32-msvc': 0.6.0
+ '@farmfe/plugin-react-win32-x64-msvc': 0.6.0
+ dev: true
+
+ /@farmfe/runtime-plugin-hmr@3.4.2:
+ resolution: {integrity: sha512-eAgQcJBdVCgSVvYkxm21oHDUF5GcgHvmIAMa4ze0MkJc6nUWUtiyM+ywtnNUXFceQdW3ZhwuvviTt+CX7rFoxw==}
+ dependencies:
+ core-js: 3.35.1
+ dev: true
+
+ /@farmfe/runtime-plugin-import-meta@0.1.2:
+ resolution: {integrity: sha512-b9vKtmv1yn7zCAhaLGN7jFm6ULvax0aNNuqEe8k9TThAyLnG4YsHyTFf0xIrnVj82R234A0NJuB78TYtgqXCGg==}
+ dependencies:
+ core-js: 3.35.1
+ dev: true
+
+ /@farmfe/runtime@0.9.3:
+ resolution: {integrity: sha512-5rsFCq/cOHJj2n4Dff7fHVaJgY5JYUPhfiamjOkLjBPRr+jyPTj7HXbxjPnuCkbrl9WmFtRFB01isZOYru2yRQ==}
+ dependencies:
+ core-js: 3.35.1
+ dev: true
+
+ /@farmfe/utils@0.0.1:
+ resolution: {integrity: sha512-QLbgNrojcvxfumXA/H329XAXhoCahmeSH3JmaiwwJEGS2QAmWfgAJMegjwlt6OmArGVO4gSbJ7Xbmm1idZZs+g==}
+ dev: true
+
+ /@koa/cors@4.0.0:
+ resolution: {integrity: sha512-Y4RrbvGTlAaa04DBoPBWJqDR5gPj32OOz827ULXfgB1F7piD1MB/zwn8JR2LAnvdILhxUbXbkXGWuNVsFuVFCQ==}
+ engines: {node: '>= 14.0.0'}
+ dependencies:
+ vary: 1.1.2
+ dev: true
+
+ /@ljharb/through@2.3.12:
+ resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.6
+ dev: true
+
+ /@mdn/browser-compat-data@5.5.10:
+ resolution: {integrity: sha512-s2GGND9oLhEuksOFtICYOBZdMWPANBXTMqAXh89q6g1Mi3+OuWEmp9WFzw2v/nmS175vqeewpC1kDJA7taaxyA==}
+ dev: true
+
+ /@nodelib/fs.scandir@2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+ dev: true
+
+ /@nodelib/fs.stat@2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /@nodelib/fs.walk@1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+ dev: true
+
+ /@polka/url@1.0.0-next.24:
+ resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
+ dev: true
+
+ /@swc/helpers@0.5.6:
+ resolution: {integrity: sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==}
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
+ /@types/object-path@0.11.4:
+ resolution: {integrity: sha512-4tgJ1Z3elF/tOMpA8JLVuR9spt9Ynsf7+JjqsQ2IqtiPJtcLoHoXcT6qU4E10cPFqyXX5HDm9QwIzZhBSkLxsw==}
+ dev: true
+
+ /@types/prop-types@15.7.11:
+ resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==}
+ dev: true
+
+ /@types/react-dom@18.2.19:
+ resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==}
+ dependencies:
+ '@types/react': 18.2.55
+ dev: true
+
+ /@types/react@18.2.55:
+ resolution: {integrity: sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==}
+ dependencies:
+ '@types/prop-types': 15.7.11
+ '@types/scheduler': 0.16.8
+ csstype: 3.1.3
+ dev: true
+
+ /@types/scheduler@0.16.8:
+ resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==}
+ dev: true
+
+ /@types/semver@7.5.6:
+ resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
+ dev: true
+
+ /@types/ua-parser-js@0.7.39:
+ resolution: {integrity: sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==}
+ dev: true
+
+ /accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+ dev: true
+
+ /ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.21.3
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+ dev: true
+
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ dev: true
+
+ /big-integer@1.6.52:
+ resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
+ engines: {node: '>=0.6'}
+ dev: true
+
+ /binary-extensions@2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
+ /bplist-parser@0.2.0:
+ resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
+ engines: {node: '>= 5.10.0'}
+ dependencies:
+ big-integer: 1.6.52
+ dev: true
+
+ /braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+
+ /browserslist-generator@2.1.0:
+ resolution: {integrity: sha512-ZFz4mAOgqm0cbwKaZsfJbYDbTXGoPANlte7qRsRJOfjB9KmmISQrXJxAVrnXG8C8v/QHNzXyeJt0Cfcks6zZvQ==}
+ engines: {node: '>=16.15.1', npm: '>=7.0.0', pnpm: '>=3.2.0', yarn: '>=1.13'}
+ dependencies:
+ '@mdn/browser-compat-data': 5.5.10
+ '@types/object-path': 0.11.4
+ '@types/semver': 7.5.6
+ '@types/ua-parser-js': 0.7.39
+ browserslist: 4.22.3
+ caniuse-lite: 1.0.30001585
+ isbot: 3.8.0
+ object-path: 0.11.8
+ semver: 7.6.0
+ ua-parser-js: 1.0.37
+ dev: true
+
+ /browserslist@4.22.3:
+ resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001585
+ electron-to-chromium: 1.4.664
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.22.3)
+ dev: true
+
+ /buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: true
+
+ /bundle-name@3.0.0:
+ resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
+ engines: {node: '>=12'}
+ dependencies:
+ run-applescript: 5.0.0
+ dev: true
+
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /cache-content-type@1.0.1:
+ resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==}
+ engines: {node: '>= 6.0.0'}
+ dependencies:
+ mime-types: 2.1.35
+ ylru: 1.3.2
+ dev: true
+
+ /call-bind@1.0.6:
+ resolution: {integrity: sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.1
+ dev: true
+
+ /caniuse-lite@1.0.30001585:
+ resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==}
+ dev: true
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
+ /chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ dev: true
+
+ /chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+ dependencies:
+ restore-cursor: 3.1.0
+ dev: true
+
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /clone@1.0.4:
+ resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /clsx@1.2.1:
+ resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /co@4.6.0:
+ resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+ dev: true
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: true
+
+ /compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /cookies@0.9.1:
+ resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ keygrip: 1.1.0
+ dev: true
+
+ /core-js@3.35.1:
+ resolution: {integrity: sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==}
+ requiresBuild: true
+ dev: true
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: true
+
+ /debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ dev: true
+
+ /deep-equal@1.0.1:
+ resolution: {integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=}
+ dev: true
+
+ /default-browser-id@3.0.0:
+ resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
+ engines: {node: '>=12'}
+ dependencies:
+ bplist-parser: 0.2.0
+ untildify: 4.0.0
+ dev: true
+
+ /default-browser@4.0.0:
+ resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ bundle-name: 3.0.0
+ default-browser-id: 3.0.0
+ execa: 7.2.0
+ titleize: 3.0.0
+ dev: true
+
+ /defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+ dependencies:
+ clone: 1.0.4
+ dev: true
+
+ /define-data-property@1.1.2:
+ resolution: {integrity: sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+ dev: true
+
+ /define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /delegates@1.0.0:
+ resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=}
+ dev: true
+
+ /depd@1.1.2:
+ resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dev: true
+
+ /dotenv-expand@10.0.0:
+ resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /dotenv@16.4.1:
+ resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /ee-first@1.1.1:
+ resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
+ dev: true
+
+ /electron-to-chromium@1.4.664:
+ resolution: {integrity: sha512-k9VKKSkOSNPvSckZgDDl/IQx45E1quMjX8QfLzUsAs/zve8AyFDK+ByRynSP/OfEfryiKHpQeMf00z0leLCc3A==}
+ dev: true
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /encodeurl@1.0.2:
+ resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /escape-html@1.0.3:
+ resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
+ dev: true
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ dev: true
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /execa@7.2.0:
+ resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
+ engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 4.3.1
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.2.0
+ onetime: 6.0.0
+ signal-exit: 3.0.7
+ strip-final-newline: 3.0.0
+ dev: true
+
+ /external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+ dev: true
+
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
+ /fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ dependencies:
+ reusify: 1.0.4
+ dev: true
+
+ /figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /follow-redirects@1.15.5:
+ resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: true
+
+ /fresh@0.5.2:
+ resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /fs-extra@11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ dev: true
+
+ /get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ hasown: 2.0.0
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /has-property-descriptors@1.0.1:
+ resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /has-proto@1.0.1:
+ resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /hasown@2.0.0:
+ resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+ dev: true
+
+ /http-assert@1.5.0:
+ resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ deep-equal: 1.0.1
+ http-errors: 1.8.1
+ dev: true
+
+ /http-errors@1.4.0:
+ resolution: {integrity: sha1-bAJC3qaz33r9oVPHEImzHG6Cqr8=}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ inherits: 2.0.1
+ statuses: 1.5.0
+ dev: true
+
+ /http-errors@1.6.3:
+ resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.3
+ setprototypeof: 1.1.0
+ statuses: 1.5.0
+ dev: true
+
+ /http-errors@1.8.1:
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 1.5.0
+ toidentifier: 1.0.1
+ dev: true
+
+ /http-proxy@1.18.1:
+ resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ eventemitter3: 4.0.7
+ follow-redirects: 1.15.5
+ requires-port: 1.0.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /human-signals@4.3.1:
+ resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
+ engines: {node: '>=14.18.0'}
+ dev: true
+
+ /iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+
+ /ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ dev: true
+
+ /inherits@2.0.1:
+ resolution: {integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=}
+ dev: true
+
+ /inherits@2.0.3:
+ resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ dev: true
+
+ /inquirer@9.2.14:
+ resolution: {integrity: sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@ljharb/through': 2.3.12
+ ansi-escapes: 4.3.2
+ chalk: 5.3.0
+ cli-cursor: 3.1.0
+ cli-width: 4.1.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 1.0.0
+ ora: 5.4.1
+ run-async: 3.0.0
+ rxjs: 7.8.1
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.2.0
+ dev: true
+
+ /is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dev: true
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+ dependencies:
+ is-docker: 3.0.0
+ dev: true
+
+ /is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /isarray@0.0.1:
+ resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=}
+ dev: true
+
+ /isbot@3.8.0:
+ resolution: {integrity: sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
+ dev: true
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: false
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /keygrip@1.1.0:
+ resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ tsscmp: 1.0.6
+ dev: true
+
+ /koa-compose@4.1.0:
+ resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==}
+ dev: true
+
+ /koa-compress@5.1.1:
+ resolution: {integrity: sha512-UgMIN7ZoEP2DuoSQmD6CYvFSLt0NReGlc2qSY4bO4Oq0L56OiD9pDG41Kj/zFmVY/A3Wvmn4BqKcfq5H30LGIg==}
+ engines: {node: '>= 12'}
+ dependencies:
+ bytes: 3.1.2
+ compressible: 2.0.18
+ http-errors: 1.8.1
+ koa-is-json: 1.0.0
+ dev: true
+
+ /koa-convert@2.0.0:
+ resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==}
+ engines: {node: '>= 10'}
+ dependencies:
+ co: 4.6.0
+ koa-compose: 4.1.0
+ dev: true
+
+ /koa-is-json@1.0.0:
+ resolution: {integrity: sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=}
+ dev: true
+
+ /koa-proxies@0.12.4(koa@2.15.0):
+ resolution: {integrity: sha512-xxrEtN0e7s7/gNRoOMUltCbuIaCWqTQUTZNWQqet/8MoxSW0hG422lx2Al9FfYO3nCeA+b5c5/YmILRzavivDA==}
+ peerDependencies:
+ koa: '>=2'
+ dependencies:
+ http-proxy: 1.18.1
+ koa: 2.15.0
+ path-match: 1.2.4
+ uuid: 8.3.2
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /koa-send@5.0.1:
+ resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==}
+ engines: {node: '>= 8'}
+ dependencies:
+ debug: 4.3.4
+ http-errors: 1.8.1
+ resolve-path: 1.4.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /koa-static@5.0.0:
+ resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==}
+ engines: {node: '>= 7.6.0'}
+ dependencies:
+ debug: 3.2.7
+ koa-send: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /koa@2.15.0:
+ resolution: {integrity: sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==}
+ engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4}
+ dependencies:
+ accepts: 1.3.8
+ cache-content-type: 1.0.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookies: 0.9.1
+ debug: 4.3.4
+ delegates: 1.0.0
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ fresh: 0.5.2
+ http-assert: 1.5.0
+ http-errors: 1.8.1
+ is-generator-function: 1.0.10
+ koa-compose: 4.1.0
+ koa-convert: 2.0.0
+ on-finished: 2.4.1
+ only: 0.0.2
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ type-is: 1.6.18
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /lodash.debounce@4.0.8:
+ resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
+ dev: true
+
+ /lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: true
+
+ /log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+ dev: true
+
+ /loglevel@1.9.1:
+ resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==}
+ engines: {node: '>= 0.6.0'}
+ dev: true
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: false
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /media-typer@0.3.0:
+ resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ dev: true
+
+ /merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ dev: true
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+
+ /mute-stream@1.0.0:
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
+ /negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ dev: true
+
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /npm-run-path@5.2.0:
+ resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ path-key: 4.0.0
+ dev: true
+
+ /object-path@0.11.8:
+ resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==}
+ engines: {node: '>= 10.12.0'}
+ dev: true
+
+ /on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ ee-first: 1.1.1
+ dev: true
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ mimic-fn: 4.0.0
+ dev: true
+
+ /only@0.0.2:
+ resolution: {integrity: sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=}
+ dev: true
+
+ /open@9.1.0:
+ resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ default-browser: 4.0.0
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 2.2.0
+ dev: true
+
+ /ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+ dev: true
+
+ /os-tmpdir@1.0.2:
+ resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /path-match@1.2.4:
+ resolution: {integrity: sha1-pidH88fgwlFHYml/JEQ1hbCRAOo=}
+ dependencies:
+ http-errors: 1.4.0
+ path-to-regexp: 1.8.0
+ dev: true
+
+ /path-to-regexp@1.8.0:
+ resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==}
+ dependencies:
+ isarray: 0.0.1
+ dev: true
+
+ /picocolors@1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+ dev: true
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ dev: true
+
+ /react-dom@18.2.0(react@18.2.0):
+ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.2.0
+ scheduler: 0.23.0
+ dev: false
+
+ /react-refresh@0.14.0:
+ resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /react@18.2.0:
+ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /requires-port@1.0.0:
+ resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=}
+ dev: true
+
+ /resolve-path@1.4.0:
+ resolution: {integrity: sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ http-errors: 1.6.3
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
+ /reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ dev: true
+
+ /run-applescript@5.0.0:
+ resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
+ engines: {node: '>=12'}
+ dependencies:
+ execa: 5.1.1
+ dev: true
+
+ /run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+ dev: true
+
+ /rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ dev: true
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: true
+
+ /scheduler@0.23.0:
+ resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /set-function-length@1.2.1:
+ resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.2
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+ dev: true
+
+ /setprototypeof@1.1.0:
+ resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
+ dev: true
+
+ /setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+ dev: true
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /sirv@2.0.4:
+ resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
+ engines: {node: '>= 10'}
+ dependencies:
+ '@polka/url': 1.0.0-next.24
+ mrmime: 2.0.0
+ totalist: 3.0.1
+ dev: true
+
+ /slashes@3.0.12:
+ resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==}
+ dev: true
+
+ /statuses@1.5.0:
+ resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /titleize@3.0.0:
+ resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+ dependencies:
+ os-tmpdir: 1.0.2
+ dev: true
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+ dev: true
+
+ /totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+ dev: true
+
+ /tsscmp@1.0.6:
+ resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
+ engines: {node: '>=0.6.x'}
+ dev: true
+
+ /type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+ dev: true
+
+ /ua-parser-js@1.0.37:
+ resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==}
+ dev: true
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /untildify@4.0.0:
+ resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /update-browserslist-db@1.0.13(browserslist@4.22.3):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.22.3
+ escalade: 3.1.2
+ picocolors: 1.0.0
+ dev: true
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
+ dev: true
+
+ /uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+ dev: true
+
+ /vary@1.1.2:
+ resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /walkdir@0.4.1:
+ resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /wcwidth@1.0.1:
+ resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=}
+ dependencies:
+ defaults: 1.0.4
+ dev: true
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /ws@8.16.0:
+ resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: true
+
+ /ylru@1.3.2:
+ resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==}
+ engines: {node: '>= 4.0.0'}
+ dev: true
+
+ /zod-validation-error@1.5.0(zod@3.22.4):
+ resolution: {integrity: sha512-/7eFkAI4qV0tcxMBB/3+d2c1P6jzzZYdYSlBuAklzMuCrJu5bzJfHS0yVAS87dRHVlhftd6RFJDIvv03JgkSbw==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ zod: ^3.18.0
+ dependencies:
+ zod: 3.22.4
+ dev: true
+
+ /zod@3.22.4:
+ resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
+ dev: true
diff --git a/example/src/assets/logo.png b/example/src/assets/logo.png
new file mode 100644
index 0000000..0caeb43
Binary files /dev/null and b/example/src/assets/logo.png differ
diff --git a/example/src/assets/react.svg b/example/src/assets/react.svg
new file mode 100644
index 0000000..6c87de9
--- /dev/null
+++ b/example/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/example/src/index.css b/example/src/index.css
new file mode 100644
index 0000000..6cc4daf
--- /dev/null
+++ b/example/src/index.css
@@ -0,0 +1,69 @@
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+}
+
+a {
+ font-weight: 500;
+ color: #9f1a8f;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #9f1a8f;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #9f1a8f;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #9F1A8F;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/example/src/index.tsx b/example/src/index.tsx
new file mode 100644
index 0000000..06a4dd2
--- /dev/null
+++ b/example/src/index.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import { createRoot } from 'react-dom/client';
+import { Main } from './main';
+import './index.css'
+
+
+const container = document.querySelector('#root');
+const root = createRoot(container);
+
+root.render();
diff --git a/example/src/main.css b/example/src/main.css
new file mode 100644
index 0000000..ff29d41
--- /dev/null
+++ b/example/src/main.css
@@ -0,0 +1,42 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #9F1A8Faa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/example/src/main.tsx b/example/src/main.tsx
new file mode 100644
index 0000000..dde461b
--- /dev/null
+++ b/example/src/main.tsx
@@ -0,0 +1,32 @@
+import React, { useState } from "react";
+import "./main.css";
+import reactLogo from "./assets/react.svg";
+import FarmLogo from "./assets/logo.png";
+export function Main() {
+ const [count, setCount] = useState(0);
+
+ return (
+ <>
+
+ Farm + React
+
+
+
+ Edit src/main.tsx
and save to test HMR
+
+
+
+ Click on the Farm and React logos to learn more
+
+ >
+ );
+}
diff --git a/example/src/typings.d.ts b/example/src/typings.d.ts
new file mode 100644
index 0000000..fa0a2da
--- /dev/null
+++ b/example/src/typings.d.ts
@@ -0,0 +1,3 @@
+declare module '*.svg';
+declare module '*.png';
+declare module '*.css';
diff --git a/example/tsconfig.json b/example/tsconfig.json
new file mode 100644
index 0000000..b823fcc
--- /dev/null
+++ b/example/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "lib": ["DOM", "ES2017"],
+ "noEmit": true,
+ "esModuleInterop": true,
+ "jsx": "react",
+ "skipDefaultLibCheck": true,
+ "skipLibCheck": true
+ },
+ "include": ["src"],
+ "exclude": ["node_modules"]
+}
\ No newline at end of file
diff --git a/npm/darwin-arm64/README.md b/npm/darwin-arm64/README.md
new file mode 100644
index 0000000..2debb15
--- /dev/null
+++ b/npm/darwin-arm64/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-darwin-arm64`
+
+This is the **aarch64-apple-darwin** binary for `farm-plugin-example`
diff --git a/npm/darwin-arm64/package.json b/npm/darwin-arm64/package.json
new file mode 100644
index 0000000..5d7dcea
--- /dev/null
+++ b/npm/darwin-arm64/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "farm-plugin-example-darwin-arm64",
+ "version": "0.1.2",
+ "os": [
+ "darwin"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/npm/darwin-x64/README.md b/npm/darwin-x64/README.md
new file mode 100644
index 0000000..81a9690
--- /dev/null
+++ b/npm/darwin-x64/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-darwin-x64`
+
+This is the **x86_64-apple-darwin** binary for `farm-plugin-example`
diff --git a/npm/darwin-x64/package.json b/npm/darwin-x64/package.json
new file mode 100644
index 0000000..a1057e9
--- /dev/null
+++ b/npm/darwin-x64/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "farm-plugin-example-darwin-x64",
+ "version": "0.0.0",
+ "os": [
+ "darwin"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/npm/linux-arm64-gnu/README.md b/npm/linux-arm64-gnu/README.md
new file mode 100644
index 0000000..675c62c
--- /dev/null
+++ b/npm/linux-arm64-gnu/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-linux-arm64-gnu`
+
+This is the **aarch64-unknown-linux-gnu** binary for `farm-plugin-example`
diff --git a/npm/linux-arm64-gnu/package.json b/npm/linux-arm64-gnu/package.json
new file mode 100644
index 0000000..a4e8982
--- /dev/null
+++ b/npm/linux-arm64-gnu/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "farm-plugin-example-linux-arm64-gnu",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "glibc"
+ ]
+}
diff --git a/npm/linux-arm64-musl/README.md b/npm/linux-arm64-musl/README.md
new file mode 100644
index 0000000..cef1fb1
--- /dev/null
+++ b/npm/linux-arm64-musl/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-linux-arm64-musl`
+
+This is the **aarch64-unknown-linux-musl** binary for `farm-plugin-example`
diff --git a/npm/linux-arm64-musl/package.json b/npm/linux-arm64-musl/package.json
new file mode 100644
index 0000000..ebb44cb
--- /dev/null
+++ b/npm/linux-arm64-musl/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "farm-plugin-example-linux-arm64-musl",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "glibc"
+ ]
+}
diff --git a/npm/linux-x64-gnu/README.md b/npm/linux-x64-gnu/README.md
new file mode 100644
index 0000000..aa6d64a
--- /dev/null
+++ b/npm/linux-x64-gnu/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-linux-x64-gnu`
+
+This is the **x86_64-unknown-linux-gnu** binary for `farm-plugin-example`
diff --git a/npm/linux-x64-gnu/package.json b/npm/linux-x64-gnu/package.json
new file mode 100644
index 0000000..7fb2cf3
--- /dev/null
+++ b/npm/linux-x64-gnu/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "farm-plugin-example-linux-x64-gnu",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "glibc"
+ ]
+}
diff --git a/npm/linux-x64-musl/README.md b/npm/linux-x64-musl/README.md
new file mode 100644
index 0000000..533799c
--- /dev/null
+++ b/npm/linux-x64-musl/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-linux-x64-musl`
+
+This is the **x86_64-unknown-linux-musl** binary for `farm-plugin-example`
diff --git a/npm/linux-x64-musl/package.json b/npm/linux-x64-musl/package.json
new file mode 100644
index 0000000..2970134
--- /dev/null
+++ b/npm/linux-x64-musl/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "farm-plugin-example-linux-x64-musl",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/npm/win32-arm64-msvc/README.md b/npm/win32-arm64-msvc/README.md
new file mode 100644
index 0000000..490fc7d
--- /dev/null
+++ b/npm/win32-arm64-msvc/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-win32-arm64-msvc`
+
+This is the aarch64-pc-windows-msvc binary for `farm-plugin-example`
diff --git a/npm/win32-arm64-msvc/package.json b/npm/win32-arm64-msvc/package.json
new file mode 100644
index 0000000..9b6e0d9
--- /dev/null
+++ b/npm/win32-arm64-msvc/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "farm-plugin-example-win32-arm64-msvc",
+ "version": "0.0.0",
+ "os": [
+ "win32"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/npm/win32-ia32-msvc/README.md b/npm/win32-ia32-msvc/README.md
new file mode 100644
index 0000000..26caef8
--- /dev/null
+++ b/npm/win32-ia32-msvc/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-win32-ia32-msvc`
+
+This is the i686-pc-windows-msvc binary for `farm-plugin-example`
diff --git a/npm/win32-ia32-msvc/package.json b/npm/win32-ia32-msvc/package.json
new file mode 100644
index 0000000..a1f8c9e
--- /dev/null
+++ b/npm/win32-ia32-msvc/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "farm-plugin-example-win32-ia32-msvc",
+ "version": "0.0.0",
+ "os": [
+ "win32"
+ ],
+ "cpu": [
+ "ia32"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/npm/win32-x64-msvc/README.md b/npm/win32-x64-msvc/README.md
new file mode 100644
index 0000000..e18dc1c
--- /dev/null
+++ b/npm/win32-x64-msvc/README.md
@@ -0,0 +1,3 @@
+# `farm-plugin-example-win32-x64-msvc`
+
+This is the **x86_64-pc-windows-msvc** binary for `farm-plugin-example`
diff --git a/npm/win32-x64-msvc/package.json b/npm/win32-x64-msvc/package.json
new file mode 100644
index 0000000..87f17be
--- /dev/null
+++ b/npm/win32-x64-msvc/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "farm-plugin-example-win32-x64-msvc",
+ "version": "0.0.0",
+ "os": [
+ "win32"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "index.farm",
+ "files": [
+ "index.farm"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..4d1d034
--- /dev/null
+++ b/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "farm-plugin-example",
+ "version": "0.0.0",
+ "main": "scripts/index.js",
+ "types": "scripts/index.d.ts",
+ "type": "module",
+ "license": "MIT",
+ "devDependencies": {
+ "@farmfe/plugin-tools": "latest"
+ },
+ "napi": {
+ "name": "farm_plugin_example",
+ "triples": {
+ "additional": [
+ "aarch64-apple-darwin",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-linux-musl",
+ "x86_64-unknown-linux-musl",
+ "i686-pc-windows-msvc",
+ "aarch64-pc-windows-msvc"
+ ]
+ }
+ },
+ "exports": {
+ ".": {
+ "import": "./scripts/index.js",
+ "require": "./scripts/index.js",
+ "types": "./scripts/index.d.ts"
+ },
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "build": "farm-plugin-tools build --platform --cargo-name farm_plugin_example -p farm_plugin_example --release",
+ "prepublishOnly": "farm-plugin-tools prepublish"
+ },
+ "files": [
+ "scripts"
+ ]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..9002fe1
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,17 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+devDependencies:
+ '@farmfe/plugin-tools':
+ specifier: latest
+ version: 0.0.1
+
+packages:
+
+ /@farmfe/plugin-tools@0.0.1:
+ resolution: {integrity: sha512-Oa4ltAT23ueI18eeA1DT85uutJxqzkvHv5C/CyawwBQYfWJ5otg0KPXBPPwqemw79LI1CpmckSaMvv6Lai/Hkw==}
+ hasBin: true
+ dev: true
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
new file mode 100644
index 0000000..17ee4d1
--- /dev/null
+++ b/rust-toolchain.toml
@@ -0,0 +1,3 @@
+[toolchain]
+channel = "nightly-2023-11-04"
+components = ["clippy", "rustfmt", "rust-src", "rustc-dev"]
diff --git a/rustfmt.toml b/rustfmt.toml
new file mode 100644
index 0000000..cab5731
--- /dev/null
+++ b/rustfmt.toml
@@ -0,0 +1,2 @@
+tab_spaces = 2
+edition = "2021"
diff --git a/scripts/index.d.ts b/scripts/index.d.ts
new file mode 100644
index 0000000..ab26c1b
--- /dev/null
+++ b/scripts/index.d.ts
@@ -0,0 +1,2 @@
+const binPath: string;
+export default binPath;
diff --git a/scripts/index.js b/scripts/index.js
new file mode 100644
index 0000000..5475258
--- /dev/null
+++ b/scripts/index.js
@@ -0,0 +1,124 @@
+import { existsSync, readFileSync } from 'fs';
+import { createRequire } from 'module';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+
+const { platform, arch } = process;
+const currentDir = dirname(fileURLToPath(import.meta.url));
+
+let binPath = null;
+
+const require = createRequire(import.meta.url);
+
+function isMusl() {
+ // For Node 10
+ if (!process.report || typeof process.report.getReport !== 'function') {
+ try {
+ return readFileSync('/usr/bin/ldd', 'utf8').includes('musl');
+ } catch (e) {
+ return true;
+ }
+ } else {
+ const { glibcVersionRuntime } = process.report.getReport().header;
+ return !glibcVersionRuntime;
+ }
+}
+
+switch (platform) {
+ case 'win32':
+ switch (arch) {
+ case 'x64':
+ if (existsSync(join(currentDir, '../npm/win32-x64-msvc/index.farm'))) {
+ binPath = join(currentDir, '../npm/win32-x64-msvc/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-win32-x64-msvc');
+ }
+
+ break;
+ case 'ia32':
+ if (existsSync(join(currentDir, '../npm/win32-ia32-msvc/index.farm'))) {
+ binPath = join(currentDir, '../npm/win32-ia32-msvc/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-win32-ia32-msvc');
+ }
+
+ break;
+ case 'arm64':
+ if (existsSync(join(currentDir, '../npm/win32-arm64-msvc/index.farm'))) {
+ binPath = join(currentDir, '../npm/win32-arm64-msvc/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-win32-arm64-msvc');
+ }
+
+ break;
+ default:
+ throw new Error(`Unsupported architecture on Windows: ${arch}`);
+ }
+ break;
+ case 'darwin':
+ switch (arch) {
+ case 'x64':
+ if (existsSync(join(currentDir, '../npm/darwin-x64/index.farm'))) {
+ binPath = join(currentDir, '../npm/darwin-x64/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-darwin-x64');
+ }
+ break;
+ case 'arm64':
+ if (existsSync(join(currentDir, '../npm/darwin-arm64/index.farm'))) {
+ binPath = join(currentDir, '../npm/darwin-arm64/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-darwin-arm64');
+ }
+ break;
+ default:
+ throw new Error(`Unsupported architecture on macOS: ${arch}`);
+ }
+ break;
+ case 'linux':
+ switch (arch) {
+ case 'x64':
+ if (isMusl()) {
+ if (existsSync(join(currentDir, '../npm/linux-x64-musl/index.farm'))) {
+ binPath = join(currentDir, '../npm/linux-x64-musl/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-linux-x64-musl');
+ }
+ } else {
+ if (existsSync(join(currentDir, '../npm/linux-x64-gnu/index.farm'))) {
+ binPath = join(currentDir, '../npm/linux-x64-gnu/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-linux-x64-gnu');
+ }
+ }
+
+ break;
+
+ case 'arm64':
+ if (isMusl()) {
+ if (
+ existsSync(join(currentDir, '../npm/linux-arm64-musl/index.farm'))
+ ) {
+ binPath = join(currentDir, '../npm/linux-arm64-musl/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-linux-arm64-musl');
+ }
+ } else {
+ if (
+ existsSync(join(currentDir, '../npm/linux-arm64-gnu/index.farm'))
+ ) {
+ binPath = join(currentDir, '../npm/linux-arm64-gnu/index.farm');
+ } else {
+ binPath = require.resolve('farm-plugin-example-linux-arm64-gnu');
+ }
+ }
+ break;
+ default:
+ throw new Error(`Unsupported architecture on Linux: ${arch}`);
+ }
+ break;
+ default:
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`);
+}
+
+export default binPath;
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..1823011
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,20 @@
+#![deny(clippy::all)]
+
+use farmfe_core::{config::Config, plugin::Plugin};
+
+use farmfe_macro_plugin::farm_plugin;
+
+#[farm_plugin]
+pub struct FarmPluginExample {}
+
+impl FarmPluginExample {
+ fn new(config: &Config, options: String) -> Self {
+ Self {}
+ }
+}
+
+impl Plugin for FarmPluginExample {
+ fn name(&self) -> &str {
+ "FarmPluginExample"
+ }
+}