diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 6f877b5..d530241 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -8,18 +8,21 @@ on:
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- - uses: actions/checkout@v3
- - uses: pnpm/action-setup@v2
+ - uses: actions/checkout@v4
+ - uses: pnpm/action-setup@v3
with:
version: latest
- name: Setup Node.js environment
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 24
- name: Install dependencies
run: pnpm install --ignore-scripts
@@ -28,3 +31,5 @@ jobs:
run: pnpm build
- name: Test all packages
run: pnpm test
+ env:
+ BEGIT_GH_API_KEY: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 5bf8787..ba04bab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -94,6 +94,9 @@ dist
# SWC Plugin Cache
.swc
+# Turbopack files
+.turbo
+
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
@@ -131,3 +134,9 @@ dist
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
+
+# Test directory
+test
+
+# Build output
+types
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
index 1ef1d53..39e2e9f 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,2 @@
**/*.rs
**/*.yaml
-packages/swc-plugin-solid-cli
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
index 8af17f2..df8a347 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -7,5 +7,6 @@
"tabWidth": 2,
"trailingComma": "all",
"useTabs": true,
- "quoteProps": "consistent"
+ "quoteProps": "consistent",
+ "endOfLine": "auto"
}
diff --git a/README.md b/README.md
index 867dcb0..aa0e49a 100644
--- a/README.md
+++ b/README.md
@@ -2,83 +2,20 @@
-# Solid CLI (This is currently very much still in beta)
+# Solid CLI
[](https://github.com/solidjs-community/solid-cli/actions/workflows/tests.yml)
[](https://app.netlify.com/sites/solid-cli/deploys)
-A custom CLI built for the purpose of installing and managing SolidJS apps and projects. The goal of the CLI is to provide a useful and powerful utility to installing any dependencies, searching the Solid ecosystem etc.
+A CLI for creating and managing SolidJS apps and projects.
-# Roadmap/Features
+## Commands
-- [x] Templates
- - [x] From Degit
-- [x] Docs
-- [ ] Primitives
- - [ ] Add/remove/update primitives
- - [x] Search list of primitives
-- [ ] Integrations
- - [ ] Auth.js
- - [x] Tailwind
- - [ ] PandaCSS
- - [ ] Cypress
- - [ ] PostCSS
- - [x] UnoCSS
- - [ ] Vanilla Extract
- - [ ] Vitest
- - [ ] Tauri
- - [ ] Playwright
-- [ ] Utilities
- - [ ] eslint-plugin-solid
- - [x] solid-devtools
-- [ ] Misc
- - [x] Launch new Stackblitz
- - [ ] Launch new CodeSandBox
-- [x] SolidStart
- - [x] New route
- - [x] New data file
- - [x] Enable Adapters
- - [x] Enable SSR/CSR/SSG mode
+- `sd create`: See [create-solid](./packages/create-solid)
+- `sd docs`: Opens the Solid docs in the browser
+- `sd start`: Special keyword for SolidStart commands
+ - `route`: Creates a new route ie. `sd start route login`
-# CLI Design
+## Contributing
-The CLI will use `solid` as the initialiation keyword. The CLI commands will then cascade based on groupings determined baed on what the action does defined by higher level actions. The actions will be:
-
-- `version`: Displays a changelog of recent Solid versions
- - `start`: Specific command for Start versions
-- `docs`: List a `man`-like page for versioned docs or link out to the docs
-- `primitives`: Potential integration with Solid Primitives
-- `add`, `remove`: Used for adding and installing integrations/packages ie. `solid add tailwind`
-- `config`: For enabling a certain features ie. `solid config vite _____`
-- `start`: Special keyword for SolidStart commands
- - `mode`: Changes the Start serving mode (ssr/csr/ssg) `solid mode ssr`
- - `route`: Creates a new route ie. `solid start route login`
-- `new`: Opens your browser to a new template via CSB/SB ie. `solid new bare --stackblitz` opens
-- `ecosystem`
- - `add`: Starts the process of submitting your current project to our ecosystem listing (Solidex) ie. `solid ecosystem publish`
- - `search`: Initializes an ecosystem search result `solid ecosystem search auth`
-
-# Development Path
-
-We will need to decide what framework and language we will use to develop this utility.
-
-## JS
-
-- [`Solid Ink`](https://github.com/devinxi/solid-ink) - Needs to be maintained but expands our ecosystem
-- [`Ink`](https://github.com/vadimdemedes/ink) - React-based and popular
-- [`Clack`](https://github.com/natemoo-re/clack) - Used by Astro
-- [`Tiny Bin`](https://github.com/fabiospampinato/tiny-bin) - By Fabio!
-- [`Prompts`](https://github.com/terkelg/prompts) - Popular and well maintained
-
-## Rust
-
-- [`TUI-RS`](https://github.com/fdehau/tui-rs) - Great for using SWC
-
-## Go
-
-- [`BubbleTea`](https://github.com/charmbracelet/bubbletea) - Beautiful CLI builder lots of tools
-- [`Cobra`](https://github.com/spf13/cobra) - Used by K8
-
-# Contributions
-
-Please feel free to contribute to this repo by expanding on this design document. Once we lock a general design a choice of technology will be decided.
+Please feel free to contribute to this repo by creating an issue or a PR.
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index f3c937e..0000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vitepress_docs/.vitepress/cache
\ No newline at end of file
diff --git a/docs/package.json b/docs/package.json
deleted file mode 100644
index a7290e5..0000000
--- a/docs/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "private": true,
- "scripts": {
- "docs:dev": "vitepress dev vitepress_docs",
- "docs:build": "vitepress build vitepress_docs",
- "docs:preview": "vitepress preview vitepress_docs"
- },
- "devDependencies": {
- "flexsearch": "^0.7.31",
- "vitepress": "1.0.0-beta.5",
- "vitepress-plugin-search": "1.0.4-alpha.20",
- "vue": "^3.3.4"
- }
-}
diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml
deleted file mode 100644
index 393c03e..0000000
--- a/docs/pnpm-lock.yaml
+++ /dev/null
@@ -1,948 +0,0 @@
-lockfileVersion: '6.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-devDependencies:
- flexsearch:
- specifier: ^0.7.31
- version: 0.7.31
- vitepress:
- specifier: 1.0.0-beta.5
- version: 1.0.0-beta.5(@algolia/client-search@4.18.0)(search-insights@2.7.0)
- vitepress-plugin-search:
- specifier: 1.0.4-alpha.20
- version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.5)(vue@3.3.4)
- vue:
- specifier: ^3.3.4
- version: 3.3.4
-
-packages:
-
- /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.7.0):
- resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==}
- dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.7.0)
- '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
- - search-insights
- dev: true
-
- /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.7.0):
- resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==}
- peerDependencies:
- search-insights: '>= 1 < 3'
- dependencies:
- '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)
- search-insights: 2.7.0
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
- dev: true
-
- /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0):
- resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
- dependencies:
- '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)
- '@algolia/client-search': 4.18.0
- algoliasearch: 4.18.0
- dev: true
-
- /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0):
- resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
- dependencies:
- '@algolia/client-search': 4.18.0
- algoliasearch: 4.18.0
- dev: true
-
- /@algolia/cache-browser-local-storage@4.18.0:
- resolution: {integrity: sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==}
- dependencies:
- '@algolia/cache-common': 4.18.0
- dev: true
-
- /@algolia/cache-common@4.18.0:
- resolution: {integrity: sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==}
- dev: true
-
- /@algolia/cache-in-memory@4.18.0:
- resolution: {integrity: sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==}
- dependencies:
- '@algolia/cache-common': 4.18.0
- dev: true
-
- /@algolia/client-account@4.18.0:
- resolution: {integrity: sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==}
- dependencies:
- '@algolia/client-common': 4.18.0
- '@algolia/client-search': 4.18.0
- '@algolia/transporter': 4.18.0
- dev: true
-
- /@algolia/client-analytics@4.18.0:
- resolution: {integrity: sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==}
- dependencies:
- '@algolia/client-common': 4.18.0
- '@algolia/client-search': 4.18.0
- '@algolia/requester-common': 4.18.0
- '@algolia/transporter': 4.18.0
- dev: true
-
- /@algolia/client-common@4.18.0:
- resolution: {integrity: sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==}
- dependencies:
- '@algolia/requester-common': 4.18.0
- '@algolia/transporter': 4.18.0
- dev: true
-
- /@algolia/client-personalization@4.18.0:
- resolution: {integrity: sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==}
- dependencies:
- '@algolia/client-common': 4.18.0
- '@algolia/requester-common': 4.18.0
- '@algolia/transporter': 4.18.0
- dev: true
-
- /@algolia/client-search@4.18.0:
- resolution: {integrity: sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==}
- dependencies:
- '@algolia/client-common': 4.18.0
- '@algolia/requester-common': 4.18.0
- '@algolia/transporter': 4.18.0
- dev: true
-
- /@algolia/logger-common@4.18.0:
- resolution: {integrity: sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==}
- dev: true
-
- /@algolia/logger-console@4.18.0:
- resolution: {integrity: sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==}
- dependencies:
- '@algolia/logger-common': 4.18.0
- dev: true
-
- /@algolia/requester-browser-xhr@4.18.0:
- resolution: {integrity: sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==}
- dependencies:
- '@algolia/requester-common': 4.18.0
- dev: true
-
- /@algolia/requester-common@4.18.0:
- resolution: {integrity: sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==}
- dev: true
-
- /@algolia/requester-node-http@4.18.0:
- resolution: {integrity: sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==}
- dependencies:
- '@algolia/requester-common': 4.18.0
- dev: true
-
- /@algolia/transporter@4.18.0:
- resolution: {integrity: sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==}
- dependencies:
- '@algolia/cache-common': 4.18.0
- '@algolia/logger-common': 4.18.0
- '@algolia/requester-common': 4.18.0
- dev: true
-
- /@babel/helper-string-parser@7.22.5:
- resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
- engines: {node: '>=6.9.0'}
- dev: true
-
- /@babel/helper-validator-identifier@7.22.5:
- resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
- engines: {node: '>=6.9.0'}
- dev: true
-
- /@babel/parser@7.22.7:
- resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==}
- engines: {node: '>=6.0.0'}
- hasBin: true
- dependencies:
- '@babel/types': 7.22.5
- dev: true
-
- /@babel/types@7.22.5:
- resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.22.5
- '@babel/helper-validator-identifier': 7.22.5
- to-fast-properties: 2.0.0
- dev: true
-
- /@docsearch/css@3.5.1:
- resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==}
- dev: true
-
- /@docsearch/js@3.5.1(@algolia/client-search@4.18.0)(search-insights@2.7.0):
- resolution: {integrity: sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==}
- dependencies:
- '@docsearch/react': 3.5.1(@algolia/client-search@4.18.0)(search-insights@2.7.0)
- preact: 10.16.0
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@types/react'
- - react
- - react-dom
- - search-insights
- dev: true
-
- /@docsearch/react@3.5.1(@algolia/client-search@4.18.0)(search-insights@2.7.0):
- resolution: {integrity: sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==}
- peerDependencies:
- '@types/react': '>= 16.8.0 < 19.0.0'
- react: '>= 16.8.0 < 19.0.0'
- react-dom: '>= 16.8.0 < 19.0.0'
- peerDependenciesMeta:
- '@types/react':
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- dependencies:
- '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.7.0)
- '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)
- '@docsearch/css': 3.5.1
- algoliasearch: 4.18.0
- transitivePeerDependencies:
- - '@algolia/client-search'
- - search-insights
- dev: true
-
- /@esbuild/android-arm64@0.18.13:
- resolution: {integrity: sha512-j7NhycJUoUAG5kAzGf4fPWfd17N6SM3o1X6MlXVqfHvs2buFraCJzos9vbeWjLxOyBKHyPOnuCuipbhvbYtTAg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/android-arm@0.18.13:
- resolution: {integrity: sha512-KwqFhxRFMKZINHzCqf8eKxE0XqWlAVPRxwy6rc7CbVFxzUWB2sA/s3hbMZeemPdhN3fKBkqOaFhTbS8xJXYIWQ==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/android-x64@0.18.13:
- resolution: {integrity: sha512-M2eZkRxR6WnWfVELHmv6MUoHbOqnzoTVSIxgtsyhm/NsgmL+uTmag/VVzdXvmahak1I6sOb1K/2movco5ikDJg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/darwin-arm64@0.18.13:
- resolution: {integrity: sha512-f5goG30YgR1GU+fxtaBRdSW3SBG9pZW834Mmhxa6terzcboz7P2R0k4lDxlkP7NYRIIdBbWp+VgwQbmMH4yV7w==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/darwin-x64@0.18.13:
- resolution: {integrity: sha512-RIrxoKH5Eo+yE5BtaAIMZaiKutPhZjw+j0OCh8WdvKEKJQteacq0myZvBDLU+hOzQOZWJeDnuQ2xgSScKf1Ovw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/freebsd-arm64@0.18.13:
- resolution: {integrity: sha512-AfRPhHWmj9jGyLgW/2FkYERKmYR+IjYxf2rtSLmhOrPGFh0KCETFzSjx/JX/HJnvIqHt/DRQD/KAaVsUKoI3Xg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/freebsd-x64@0.18.13:
- resolution: {integrity: sha512-pGzWWZJBInhIgdEwzn8VHUBang8UvFKsvjDkeJ2oyY5gZtAM6BaxK0QLCuZY+qoj/nx/lIaItH425rm/hloETA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-arm64@0.18.13:
- resolution: {integrity: sha512-hCzZbVJEHV7QM77fHPv2qgBcWxgglGFGCxk6KfQx6PsVIdi1u09X7IvgE9QKqm38OpkzaAkPnnPqwRsltvLkIQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-arm@0.18.13:
- resolution: {integrity: sha512-4iMxLRMCxGyk7lEvkkvrxw4aJeC93YIIrfbBlUJ062kilUUnAiMb81eEkVvCVoh3ON283ans7+OQkuy1uHW+Hw==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-ia32@0.18.13:
- resolution: {integrity: sha512-I3OKGbynl3AAIO6onXNrup/ttToE6Rv2XYfFgLK/wnr2J+1g+7k4asLrE+n7VMhaqX+BUnyWkCu27rl+62Adug==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-loong64@0.18.13:
- resolution: {integrity: sha512-8pcKDApAsKc6WW51ZEVidSGwGbebYw2qKnO1VyD8xd6JN0RN6EUXfhXmDk9Vc4/U3Y4AoFTexQewQDJGsBXBpg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-mips64el@0.18.13:
- resolution: {integrity: sha512-6GU+J1PLiVqWx8yoCK4Z0GnfKyCGIH5L2KQipxOtbNPBs+qNDcMJr9euxnyJ6FkRPyMwaSkjejzPSISD9hb+gg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-ppc64@0.18.13:
- resolution: {integrity: sha512-pfn/OGZ8tyR8YCV7MlLl5hAit2cmS+j/ZZg9DdH0uxdCoJpV7+5DbuXrR+es4ayRVKIcfS9TTMCs60vqQDmh+w==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-riscv64@0.18.13:
- resolution: {integrity: sha512-aIbhU3LPg0lOSCfVeGHbmGYIqOtW6+yzO+Nfv57YblEK01oj0mFMtvDJlOaeAZ6z0FZ9D13oahi5aIl9JFphGg==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-s390x@0.18.13:
- resolution: {integrity: sha512-Pct1QwF2sp+5LVi4Iu5Y+6JsGaV2Z2vm4O9Dd7XZ5tKYxEHjFtb140fiMcl5HM1iuv6xXO8O1Vrb1iJxHlv8UA==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-x64@0.18.13:
- resolution: {integrity: sha512-zTrIP0KzYP7O0+3ZnmzvUKgGtUvf4+piY8PIO3V8/GfmVd3ZyHJGz7Ht0np3P1wz+I8qJ4rjwJKqqEAbIEPngA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/netbsd-x64@0.18.13:
- resolution: {integrity: sha512-I6zs10TZeaHDYoGxENuksxE1sxqZpCp+agYeW039yqFwh3MgVvdmXL5NMveImOC6AtpLvE4xG5ujVic4NWFIDQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/openbsd-x64@0.18.13:
- resolution: {integrity: sha512-W5C5nczhrt1y1xPG5bV+0M12p2vetOGlvs43LH8SopQ3z2AseIROu09VgRqydx5qFN7y9qCbpgHLx0kb0TcW7g==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/sunos-x64@0.18.13:
- resolution: {integrity: sha512-X/xzuw4Hzpo/yq3YsfBbIsipNgmsm8mE/QeWbdGdTTeZ77fjxI2K0KP3AlhZ6gU3zKTw1bKoZTuKLnqcJ537qw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/win32-arm64@0.18.13:
- resolution: {integrity: sha512-4CGYdRQT/ILd+yLLE5i4VApMPfGE0RPc/wFQhlluDQCK09+b4JDbxzzjpgQqTPrdnP7r5KUtGVGZYclYiPuHrw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/win32-ia32@0.18.13:
- resolution: {integrity: sha512-D+wKZaRhQI+MUGMH+DbEr4owC2D7XnF+uyGiZk38QbgzLcofFqIOwFs7ELmIeU45CQgfHNy9Q+LKW3cE8g37Kg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/win32-x64@0.18.13:
- resolution: {integrity: sha512-iVl6lehAfJS+VmpF3exKpNQ8b0eucf5VWfzR8S7xFve64NBNz2jPUgx1X93/kfnkfgP737O+i1k54SVQS7uVZA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /@jridgewell/sourcemap-codec@1.4.15:
- resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
-
- /@types/flexsearch@0.7.3:
- resolution: {integrity: sha512-HXwADeHEP4exXkCIwy2n1+i0f1ilP1ETQOH5KDOugjkTFZPntWo0Gr8stZOaebkxsdx+k0X/K6obU/+it07ocg==}
- dev: true
-
- /@types/linkify-it@3.0.2:
- resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==}
- dev: true
-
- /@types/markdown-it@12.2.3:
- resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==}
- dependencies:
- '@types/linkify-it': 3.0.2
- '@types/mdurl': 1.0.2
- dev: true
-
- /@types/mdurl@1.0.2:
- resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
- dev: true
-
- /@types/web-bluetooth@0.0.17:
- resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==}
- dev: true
-
- /@vitejs/plugin-vue@4.2.3(vite@4.4.0-beta.3)(vue@3.3.4):
- resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- vite: ^4.0.0
- vue: ^3.2.25
- dependencies:
- vite: 4.4.0-beta.3
- vue: 3.3.4
- dev: true
-
- /@vue/compiler-core@3.3.4:
- resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
- dependencies:
- '@babel/parser': 7.22.7
- '@vue/shared': 3.3.4
- estree-walker: 2.0.2
- source-map-js: 1.0.2
- dev: true
-
- /@vue/compiler-dom@3.3.4:
- resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
- dependencies:
- '@vue/compiler-core': 3.3.4
- '@vue/shared': 3.3.4
- dev: true
-
- /@vue/compiler-sfc@3.3.4:
- resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
- dependencies:
- '@babel/parser': 7.22.7
- '@vue/compiler-core': 3.3.4
- '@vue/compiler-dom': 3.3.4
- '@vue/compiler-ssr': 3.3.4
- '@vue/reactivity-transform': 3.3.4
- '@vue/shared': 3.3.4
- estree-walker: 2.0.2
- magic-string: 0.30.1
- postcss: 8.4.26
- source-map-js: 1.0.2
- dev: true
-
- /@vue/compiler-ssr@3.3.4:
- resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
- dependencies:
- '@vue/compiler-dom': 3.3.4
- '@vue/shared': 3.3.4
- dev: true
-
- /@vue/devtools-api@6.5.0:
- resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
- dev: true
-
- /@vue/reactivity-transform@3.3.4:
- resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
- dependencies:
- '@babel/parser': 7.22.7
- '@vue/compiler-core': 3.3.4
- '@vue/shared': 3.3.4
- estree-walker: 2.0.2
- magic-string: 0.30.1
- dev: true
-
- /@vue/reactivity@3.3.4:
- resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
- dependencies:
- '@vue/shared': 3.3.4
- dev: true
-
- /@vue/runtime-core@3.3.4:
- resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
- dependencies:
- '@vue/reactivity': 3.3.4
- '@vue/shared': 3.3.4
- dev: true
-
- /@vue/runtime-dom@3.3.4:
- resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
- dependencies:
- '@vue/runtime-core': 3.3.4
- '@vue/shared': 3.3.4
- csstype: 3.1.2
- dev: true
-
- /@vue/server-renderer@3.3.4(vue@3.3.4):
- resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
- peerDependencies:
- vue: 3.3.4
- dependencies:
- '@vue/compiler-ssr': 3.3.4
- '@vue/shared': 3.3.4
- vue: 3.3.4
- dev: true
-
- /@vue/shared@3.3.4:
- resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
- dev: true
-
- /@vueuse/core@10.2.1(vue@3.3.4):
- resolution: {integrity: sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==}
- dependencies:
- '@types/web-bluetooth': 0.0.17
- '@vueuse/metadata': 10.2.1
- '@vueuse/shared': 10.2.1(vue@3.3.4)
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/integrations@10.2.1(focus-trap@7.5.2)(vue@3.3.4):
- resolution: {integrity: sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==}
- peerDependencies:
- async-validator: '*'
- axios: '*'
- change-case: '*'
- drauu: '*'
- focus-trap: '*'
- fuse.js: '*'
- idb-keyval: '*'
- jwt-decode: '*'
- nprogress: '*'
- qrcode: '*'
- sortablejs: '*'
- universal-cookie: '*'
- peerDependenciesMeta:
- async-validator:
- optional: true
- axios:
- optional: true
- change-case:
- optional: true
- drauu:
- optional: true
- focus-trap:
- optional: true
- fuse.js:
- optional: true
- idb-keyval:
- optional: true
- jwt-decode:
- optional: true
- nprogress:
- optional: true
- qrcode:
- optional: true
- sortablejs:
- optional: true
- universal-cookie:
- optional: true
- dependencies:
- '@vueuse/core': 10.2.1(vue@3.3.4)
- '@vueuse/shared': 10.2.1(vue@3.3.4)
- focus-trap: 7.5.2
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/metadata@10.2.1:
- resolution: {integrity: sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==}
- dev: true
-
- /@vueuse/shared@10.2.1(vue@3.3.4):
- resolution: {integrity: sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==}
- dependencies:
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /algoliasearch@4.18.0:
- resolution: {integrity: sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==}
- dependencies:
- '@algolia/cache-browser-local-storage': 4.18.0
- '@algolia/cache-common': 4.18.0
- '@algolia/cache-in-memory': 4.18.0
- '@algolia/client-account': 4.18.0
- '@algolia/client-analytics': 4.18.0
- '@algolia/client-common': 4.18.0
- '@algolia/client-personalization': 4.18.0
- '@algolia/client-search': 4.18.0
- '@algolia/logger-common': 4.18.0
- '@algolia/logger-console': 4.18.0
- '@algolia/requester-browser-xhr': 4.18.0
- '@algolia/requester-common': 4.18.0
- '@algolia/requester-node-http': 4.18.0
- '@algolia/transporter': 4.18.0
- dev: true
-
- /ansi-sequence-parser@1.1.0:
- resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==}
- dev: true
-
- /argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- dev: true
-
- /body-scroll-lock@4.0.0-beta.0:
- resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==}
- dev: true
-
- /csstype@3.1.2:
- resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
- dev: true
-
- /entities@3.0.1:
- resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==}
- engines: {node: '>=0.12'}
- dev: true
-
- /esbuild@0.18.13:
- resolution: {integrity: sha512-vhg/WR/Oiu4oUIkVhmfcc23G6/zWuEQKFS+yiosSHe4aN6+DQRXIfeloYGibIfVhkr4wyfuVsGNLr+sQU1rWWw==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.18.13
- '@esbuild/android-arm64': 0.18.13
- '@esbuild/android-x64': 0.18.13
- '@esbuild/darwin-arm64': 0.18.13
- '@esbuild/darwin-x64': 0.18.13
- '@esbuild/freebsd-arm64': 0.18.13
- '@esbuild/freebsd-x64': 0.18.13
- '@esbuild/linux-arm': 0.18.13
- '@esbuild/linux-arm64': 0.18.13
- '@esbuild/linux-ia32': 0.18.13
- '@esbuild/linux-loong64': 0.18.13
- '@esbuild/linux-mips64el': 0.18.13
- '@esbuild/linux-ppc64': 0.18.13
- '@esbuild/linux-riscv64': 0.18.13
- '@esbuild/linux-s390x': 0.18.13
- '@esbuild/linux-x64': 0.18.13
- '@esbuild/netbsd-x64': 0.18.13
- '@esbuild/openbsd-x64': 0.18.13
- '@esbuild/sunos-x64': 0.18.13
- '@esbuild/win32-arm64': 0.18.13
- '@esbuild/win32-ia32': 0.18.13
- '@esbuild/win32-x64': 0.18.13
- dev: true
-
- /estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
-
- /flexsearch@0.7.31:
- resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==}
- dev: true
-
- /focus-trap@7.5.2:
- resolution: {integrity: sha512-p6vGNNWLDGwJCiEjkSK6oERj/hEyI9ITsSwIUICBoKLlWiTWXJRfQibCwcoi50rTZdbi87qDtUlMCmQwsGSgPw==}
- dependencies:
- tabbable: 6.2.0
- dev: true
-
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
- dev: true
-
- /jsonc-parser@3.2.0:
- resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
- dev: true
-
- /linkify-it@4.0.1:
- resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==}
- dependencies:
- uc.micro: 1.0.6
- dev: true
-
- /magic-string@0.30.1:
- resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
- /mark.js@8.11.1:
- resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
- dev: true
-
- /markdown-it@13.0.1:
- resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==}
- hasBin: true
- dependencies:
- argparse: 2.0.1
- entities: 3.0.1
- linkify-it: 4.0.1
- mdurl: 1.0.1
- uc.micro: 1.0.6
- dev: true
-
- /mdurl@1.0.1:
- resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
- dev: true
-
- /minisearch@6.1.0:
- resolution: {integrity: sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==}
- dev: true
-
- /nanoid@3.3.6:
- resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
- dev: true
-
- /picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
-
- /postcss@8.4.26:
- resolution: {integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.6
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
-
- /preact@10.16.0:
- resolution: {integrity: sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==}
- dev: true
-
- /rollup@3.26.2:
- resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==}
- engines: {node: '>=14.18.0', npm: '>=8.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /search-insights@2.7.0:
- resolution: {integrity: sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==}
- engines: {node: '>=8.16.0'}
- dev: true
-
- /shiki@0.14.3:
- resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==}
- dependencies:
- ansi-sequence-parser: 1.1.0
- jsonc-parser: 3.2.0
- vscode-oniguruma: 1.7.0
- vscode-textmate: 8.0.0
- dev: true
-
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /tabbable@6.2.0:
- resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
- dev: true
-
- /to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
- dev: true
-
- /uc.micro@1.0.6:
- resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
- dev: true
-
- /vite@4.4.0-beta.3:
- resolution: {integrity: sha512-IC/thYTvArOFRJ4qvvudnu4KKZOVc+gduS3I9OfC5SbP/Rf4kkP7z6Of2QpKeOSVqwIK24khW6VOUmVD/0yzSQ==}
- engines: {node: ^14.18.0 || >=16.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': '>= 14'
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.4.0
- peerDependenciesMeta:
- '@types/node':
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- dependencies:
- esbuild: 0.18.13
- postcss: 8.4.26
- rollup: 3.26.2
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.5)(vue@3.3.4):
- resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==}
- engines: {node: ^14.13.1 || ^16.7.0 || >=18}
- peerDependencies:
- flexsearch: ^0.7.31
- vitepress: ^1.0.0-alpha.65
- vue: '3'
- dependencies:
- '@types/flexsearch': 0.7.3
- '@types/markdown-it': 12.2.3
- flexsearch: 0.7.31
- glob-to-regexp: 0.4.1
- markdown-it: 13.0.1
- vitepress: 1.0.0-beta.5(@algolia/client-search@4.18.0)(search-insights@2.7.0)
- vue: 3.3.4
- dev: true
-
- /vitepress@1.0.0-beta.5(@algolia/client-search@4.18.0)(search-insights@2.7.0):
- resolution: {integrity: sha512-/RjqqRsSEKkzF6HhK5e5Ij+bZ7ETb9jNCRRgIMm10gJ+ZLC3D1OqkE465lEqCeJUgt2HZ6jmWjDqIBfrJSpv7w==}
- hasBin: true
- dependencies:
- '@docsearch/css': 3.5.1
- '@docsearch/js': 3.5.1(@algolia/client-search@4.18.0)(search-insights@2.7.0)
- '@vitejs/plugin-vue': 4.2.3(vite@4.4.0-beta.3)(vue@3.3.4)
- '@vue/devtools-api': 6.5.0
- '@vueuse/core': 10.2.1(vue@3.3.4)
- '@vueuse/integrations': 10.2.1(focus-trap@7.5.2)(vue@3.3.4)
- body-scroll-lock: 4.0.0-beta.0
- focus-trap: 7.5.2
- mark.js: 8.11.1
- minisearch: 6.1.0
- shiki: 0.14.3
- vite: 4.4.0-beta.3
- vue: 3.3.4
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@types/node'
- - '@types/react'
- - '@vue/composition-api'
- - async-validator
- - axios
- - change-case
- - drauu
- - fuse.js
- - idb-keyval
- - jwt-decode
- - less
- - lightningcss
- - nprogress
- - qrcode
- - react
- - react-dom
- - sass
- - search-insights
- - sortablejs
- - stylus
- - sugarss
- - terser
- - universal-cookie
- dev: true
-
- /vscode-oniguruma@1.7.0:
- resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
- dev: true
-
- /vscode-textmate@8.0.0:
- resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
- dev: true
-
- /vue-demi@0.14.5(vue@3.3.4):
- resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- peerDependencies:
- '@vue/composition-api': ^1.0.0-rc.1
- vue: ^3.0.0-0 || ^2.6.0
- peerDependenciesMeta:
- '@vue/composition-api':
- optional: true
- dependencies:
- vue: 3.3.4
- dev: true
-
- /vue@3.3.4:
- resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
- dependencies:
- '@vue/compiler-dom': 3.3.4
- '@vue/compiler-sfc': 3.3.4
- '@vue/runtime-dom': 3.3.4
- '@vue/server-renderer': 3.3.4(vue@3.3.4)
- '@vue/shared': 3.3.4
- dev: true
diff --git a/docs/pnpm-workspace.yaml b/docs/pnpm-workspace.yaml
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/vitepress_docs/.vitepress/config.ts b/docs/vitepress_docs/.vitepress/config.ts
deleted file mode 100644
index d82218a..0000000
--- a/docs/vitepress_docs/.vitepress/config.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { defineConfig } from "vitepress";
-import { SearchPlugin } from "vitepress-plugin-search";
-// https://vitepress.dev/reference/site-config
-export default defineConfig({
- title: "Solid-CLI Docs",
- description: "Documentation for the Solid CLI",
- themeConfig: {
- // https://vitepress.dev/reference/default-theme-config
- nav: [
- { text: "Home", link: "/" },
- { text: "Guide", link: "/about" },
- ],
-
- sidebar: [
- {
- text: "Getting started",
- items: [
- { text: "About", link: "/about" },
- { text: "Installation", link: "/installation" },
- { text: "Basic Commands", link: "/basic-commands" },
- { text: "Solid-Start Commands", link: "/start-commands" },
- ],
- },
- { text: "Supported Integrations", link: "/supported-integrations" },
- ],
- socialLinks: [
- {
- icon: "github",
- link: "https://github.com/solidjs-community/solid-cli",
- },
- ],
- },
- vite: { plugins: [SearchPlugin()] },
-});
diff --git a/docs/vitepress_docs/.vitepress/theme/index.ts b/docs/vitepress_docs/.vitepress/theme/index.ts
deleted file mode 100644
index 09d0a1a..0000000
--- a/docs/vitepress_docs/.vitepress/theme/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-// https://vitepress.dev/guide/custom-theme
-import { h } from "vue";
-import Theme from "vitepress/theme";
-import "./style.css";
-
-export default {
- extends: Theme,
- Layout: () => {
- return h(Theme.Layout, null, {
- // https://vitepress.dev/guide/extending-default-theme#layout-slots
- });
- },
- enhanceApp({ app, router, siteData }) {
- // ...
- },
-};
diff --git a/docs/vitepress_docs/.vitepress/theme/style.css b/docs/vitepress_docs/.vitepress/theme/style.css
deleted file mode 100644
index bab0266..0000000
--- a/docs/vitepress_docs/.vitepress/theme/style.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Customize default theme styling by overriding CSS variables:
- * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
- */
-
-/**
- * Colors
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-c-brand: #646cff;
- --vp-c-brand-light: #747bff;
- --vp-c-brand-lighter: #9499ff;
- --vp-c-brand-lightest: #bcc0ff;
- --vp-c-brand-dark: #535bf2;
- --vp-c-brand-darker: #454ce1;
- --vp-c-brand-dimm: rgba(100, 108, 255, 0.08);
-}
-
-/**
- * Component: Button
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-button-brand-border: var(--vp-c-brand-light);
- --vp-button-brand-text: var(--vp-c-white);
- --vp-button-brand-bg: var(--vp-c-brand);
- --vp-button-brand-hover-border: var(--vp-c-brand-light);
- --vp-button-brand-hover-text: var(--vp-c-white);
- --vp-button-brand-hover-bg: var(--vp-c-brand-light);
- --vp-button-brand-active-border: var(--vp-c-brand-light);
- --vp-button-brand-active-text: var(--vp-c-white);
- --vp-button-brand-active-bg: var(--vp-button-brand-bg);
-}
-
-/**
- * Component: Home
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-home-hero-name-color: transparent;
- --vp-home-hero-name-background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff);
-
- --vp-home-hero-image-background-image: linear-gradient(-45deg, #bd34fe 50%, #47caff 50%);
- --vp-home-hero-image-filter: blur(40px);
-}
-
-@media (min-width: 640px) {
- :root {
- --vp-home-hero-image-filter: blur(56px);
- }
-}
-
-@media (min-width: 960px) {
- :root {
- --vp-home-hero-image-filter: blur(72px);
- }
-}
-
-/**
- * Component: Custom Block
- * -------------------------------------------------------------------------- */
-
-:root {
- --vp-custom-block-tip-border: var(--vp-c-brand);
- --vp-custom-block-tip-text: var(--vp-c-brand-darker);
- --vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
-}
-
-.dark {
- --vp-custom-block-tip-border: var(--vp-c-brand);
- --vp-custom-block-tip-text: var(--vp-c-brand-lightest);
- --vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
-}
-
-/**
- * Component: Algolia
- * -------------------------------------------------------------------------- */
-
-.DocSearch {
- --docsearch-primary-color: var(--vp-c-brand) !important;
-}
diff --git a/docs/vitepress_docs/about.md b/docs/vitepress_docs/about.md
deleted file mode 100644
index 504eb5c..0000000
--- a/docs/vitepress_docs/about.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# About
-
-The Solid CLI is a tool aiming to make the Solid development experience easier, faster, and less error prone.
-
-## Features
-
-### Automatic Config manipulation
-
-Can automatically update your config to enable solid features, such as toggling SSR, or adding adapters.
-
-### Adding integrations
-
-Can automatically install and configure supported packages.
-
-### Project creation
-
-Provides an easy way to create new projects, whether that be locally, or on a platform such as stackblitz or codesandbox.
diff --git a/docs/vitepress_docs/basic-commands.md b/docs/vitepress_docs/basic-commands.md
deleted file mode 100644
index 8fe045c..0000000
--- a/docs/vitepress_docs/basic-commands.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# Basic Commands
-
-### `Add`
-
-```sh
-solid add
-```
-
-Used to add packages and setup integrations.
-
-::: info
-By default, when no arguments or flags are passed, this command will open up a searchable multiselect for you to be able to search through
-all supported integrations and packages. You can select the ones you want to use through there.
-:::
-
-**Options**
-
-| Option | Description |
-| --------------- | ------------------------------------------------------------------------------------------------------ |
-| `` | List of integrations you want to add to your project (ie. unocss, vitepwa, solid-devtools) |
-| `--force` | Force apply any changes to the config to add the integration(s) even if they already exist `(boolean)` |
-
----
-
-### `New`
-
-```sh
-solid new
-```
-
-Creates a new solid project with the selected variation and name.
-
-This can also be used to spin up a new stackblitz or codesandbox instance.
-
-**Options**
-
-| Option | Description |
-| -------------------------- | ------------------------------------------------------------------------------------------- |
-| `` | The variation you want to start the project from. One of the following: "bare", "js", "ts". |
-| `` | The name of the project and the folder to create it in. |
-| `--stackblitz (short: -s)` | Create the project with the variation in a stackblitz instance. `(boolean)` |
-
----
-
-### `Docs`
-
-```sh
-solid docs
-```
-
-Searches for a given keyword within the main solid documentation sites
-
-**Options**
-
-| Option | Description |
-| ----------- | ---------------------------------------------- |
-| `` | The keyword to search within the docs websites |
-
----
-
-### `Set`
-
-```sh
-solid set
-```
-
-Sets a specified config parameter to a specified value
-
-**Options**
-
-| Option | Description |
-| --------- | -------------------------------- |
-| `` | The key within the config to set |
-| `` | The value to set that key to |
-
----
-
-### `Playground`
-
-```sh
-solid playground
-```
-
-Attempts to open the [Solid Playground](https://playground.solidjs.com) in the browser
diff --git a/docs/vitepress_docs/index.md b/docs/vitepress_docs/index.md
deleted file mode 100644
index 551ee49..0000000
--- a/docs/vitepress_docs/index.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-# https://vitepress.dev/reference/default-theme-home-page
-layout: home
-
-hero:
- name: "Solid-CLI Docs"
- text: "Documentation for the Solid CLI"
- tagline: A solid cli
- actions:
- - theme: brand
- text: Get started
- link: /about
-features:
- - title: Package manager
- icon: 📦
- details: Installs solid related packages, and automatically configures them in your project.
- - title: Customisable
- details: Plugins can be used to extend or manipulate existing functionality
- icon: 🎨
- - title: Automatic configuration
- icon: ♻
- details: Can automatically enable or disable features within solid, such as automatically enabling SSR
----
diff --git a/docs/vitepress_docs/installation.md b/docs/vitepress_docs/installation.md
deleted file mode 100644
index 405da30..0000000
--- a/docs/vitepress_docs/installation.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Installation
-
-The CLI can be installed locally to your project via
-
-```sh
-npm install @solid-cli/core
-```
-
-Or installed globally:
-
-```sh
-npm install -g @solid-cli/core
-```
-
-It can then be invoked via the keyword `solid`, and the help page can be displayed with `solid --help`
-
-```txt
-┌ Solid-CLI
-solid
-
-where can be one of:
-
-- add - Can add and install integrations: `solid add unocss`.
-- docs
-- new - Creates a new solid project
-- set
-- start - Commands specific to solid start
-- playground
-
-For more help, try running `solid --help`
-```
diff --git a/docs/vitepress_docs/start-commands.md b/docs/vitepress_docs/start-commands.md
deleted file mode 100644
index 2ffa10d..0000000
--- a/docs/vitepress_docs/start-commands.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Solid-Start Commands
-
-### `Mode`
-
-```sh
-solid start mode
-```
-
-Set the rendering mode for solid to build for and use (ie. Client-Side Rendering (CSR), Server-Side Rendering (SSR), Static-Site Generation (SSG))
-
-**Options**
-
-| Option | Description |
-| -------- | -------------------------------------------------------------- |
-| `` | The rendering mode to use. One of the following: csr, ssr, ssg |
-
----
-
-### `Route`
-
-```sh
-solid start route
-```
-
-Creates a new route file in the file routes directory.
-
-**Options**
-
-| Option | Description |
-| -------- | ------------------------------------------- |
-| `` | The path to the new route |
-| `` | The name of the `.tsx` file to be generated |
-
----
-
-### `Adapter`
-
-```sh
-solid start adapter
-```
-
-Used to setup a Solid-Start specific adapter.
-
-**Options**
-
-| Option | Description |
-| --------- | -------------------------------- |
-| `` | The name of the adapter `string` |
-| `--force` | Force setup the adapater |
-
-### `Data`
-
-```sh
-solid start data
-```
-
-Creates a new data file at the given path
-
-**Options**
-
-| Option | Description |
-| -------- | ----------------------------------------------- |
-| `` | The path to the new data file |
-| `` | The name of the `.data.ts` file to be generated |
diff --git a/docs/vitepress_docs/supported-integrations.md b/docs/vitepress_docs/supported-integrations.md
deleted file mode 100644
index 96c32ec..0000000
--- a/docs/vitepress_docs/supported-integrations.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Supported Integrations
-
-## Adapters
-
-- [Aws](https://github.com/solidjs/solid-start/tree/main/packages/start-aws)
-- [Cloudflare-pages](https://github.com/solidjs/solid-start/tree/main/packages/start-cloudflare-pages)
-- [Cloudflare-workers](https://github.com/solidjs/solid-start/tree/main/packages/start-cloudflare-workers)
-- [Deno](https://github.com/solidjs/solid-start/tree/main/packages/start-deno)
-- [Netlify](https://github.com/solidjs/solid-start/tree/main/packages/start-netlify)
-- [Node](https://github.com/solidjs/solid-start/tree/main/packages/start-node)
-- [Static](https://github.com/solidjs/solid-start/tree/main/packages/start-static)
-- [Vercel](https://github.com/solidjs/solid-start/tree/main/packages/start-vercel)
-
-## Packages
-
-These packages will be automatically installed and configured with sensible defaults:
-
-- [UnoCss](https://unocss.dev/)
-- [Tailwind CSS](https://tailwindcss.com/)
-- [Solid Devtools](https://github.com/thetarnav/solid-devtools)
-- [VitePWA](https://vite-pwa-org.netlify.app)
diff --git a/examples/README.md b/examples/README.md
deleted file mode 100644
index bde8a57..0000000
--- a/examples/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# Example plugins for the CLI
diff --git a/examples/plugin_template/package.json b/examples/plugin_template/package.json
deleted file mode 100644
index 4f9cffc..0000000
--- a/examples/plugin_template/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "test_plugin",
- "version": "1.0.0",
- "description": "",
- "module": "./dist/index.mjs",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "build": "tsup"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "dependencies": {
- "cmd-ts": "^0.13.0"
- },
- "devDependencies": {
- "tsup": "^7.2.0"
- }
-}
diff --git a/examples/plugin_template/pnpm-lock.yaml b/examples/plugin_template/pnpm-lock.yaml
deleted file mode 100644
index b437238..0000000
--- a/examples/plugin_template/pnpm-lock.yaml
+++ /dev/null
@@ -1,930 +0,0 @@
-lockfileVersion: '6.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-dependencies:
- cmd-ts:
- specifier: ^0.13.0
- version: 0.13.0
-
-devDependencies:
- tsup:
- specifier: ^7.2.0
- version: 7.2.0
-
-packages:
-
- /@esbuild/android-arm64@0.18.19:
- resolution: {integrity: sha512-4+jkUFQxZkQfQOOxfGVZB38YUWHMJX2ihZwF+2nh8m7bHdWXpixiurgGRN3c/KMSwlltbYI0/i929jwBRMFzbA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/android-arm@0.18.19:
- resolution: {integrity: sha512-1uOoDurJYh5MNqPqpj3l/TQCI1V25BXgChEldCB7D6iryBYqYKrbZIhYO5AI9fulf66sM8UJpc3UcCly2Tv28w==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/android-x64@0.18.19:
- resolution: {integrity: sha512-ae5sHYiP/Ogj2YNrLZbWkBmyHIDOhPgpkGvFnke7XFGQldBDWvc/AyYwSLpNuKw9UNkgnLlB/jPpnBmlF3G9Bg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/darwin-arm64@0.18.19:
- resolution: {integrity: sha512-HIpQvNQWFYROmWDANMRL+jZvvTQGOiTuwWBIuAsMaQrnStedM+nEKJBzKQ6bfT9RFKH2wZ+ej+DY7+9xHBTFPg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/darwin-x64@0.18.19:
- resolution: {integrity: sha512-m6JdvXJQt0thNLIcWOeG079h2ivhYH4B5sVCgqb/B29zTcFd7EE8/J1nIUHhdtwGeItdUeqKaqqb4towwxvglQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/freebsd-arm64@0.18.19:
- resolution: {integrity: sha512-G0p4EFMPZhGn/xVNspUyMQbORH3nlKTV0bFNHPIwLraBuAkTeMyxNviTe0ZXUbIXQrR1lrwniFjNFU4s+x7veQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/freebsd-x64@0.18.19:
- resolution: {integrity: sha512-hBxgRlG42+W+j/1/cvlnSa+3+OBKeDCyO7OG2ICya1YJaSCYfSpuG30KfOnQHI7Ytgu4bRqCgrYXxQEzy0zM5Q==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-arm64@0.18.19:
- resolution: {integrity: sha512-X8g33tczY0GsJq3lhyBrjnFtaKjWVpp1gMq5IlF9BQJ3TUfSK74nQnz9mRIEejmcV+OIYn6bkOJeUaU1Knrljg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-arm@0.18.19:
- resolution: {integrity: sha512-qtWyoQskfJlb9MD45mvzCEKeO4uCnDZ7lPFeNqbfaaJHqBiH9qA5Vu2EuckqYZuFMJWy1l4dxTf9NOulCVfUjg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-ia32@0.18.19:
- resolution: {integrity: sha512-SAkRWJgb+KN+gOhmbiE6/wu23D6HRcGQi15cB13IVtBZZgXxygTV5GJlUAKLQ5Gcx0gtlmt+XIxEmSqA6sZTOw==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-loong64@0.18.19:
- resolution: {integrity: sha512-YLAslaO8NsB9UOxBchos82AOMRDbIAWChwDKfjlGrHSzS3v1kxce7dGlSTsrb0PJwo1KYccypN3VNjQVLtz7LA==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-mips64el@0.18.19:
- resolution: {integrity: sha512-vSYFtlYds/oTI8aflEP65xo3MXChMwBOG1eWPGGKs/ev9zkTeXVvciU+nifq8J1JYMz+eQ4J9JDN0O2RKF8+1Q==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-ppc64@0.18.19:
- resolution: {integrity: sha512-tgG41lRVwlzqO9tv9l7aXYVw35BxKXLtPam1qALScwSqPivI8hjkZLNH0deaaSCYCFT9cBIdB+hUjWFlFFLL9A==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-riscv64@0.18.19:
- resolution: {integrity: sha512-EgBZFLoN1S5RuB4cCJI31pBPsjE1nZ+3+fHRjguq9Ibrzo29bOLSBcH1KZJvRNh5qtd+fcYIGiIUia8Jw5r1lQ==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-s390x@0.18.19:
- resolution: {integrity: sha512-q1V1rtHRojAzjSigZEqrcLkpfh5K09ShCoIsdTakozVBnM5rgV58PLFticqDp5UJ9uE0HScov9QNbbl8HBo6QQ==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-x64@0.18.19:
- resolution: {integrity: sha512-D0IiYjpZRXxGZLQfsydeAD7ZWqdGyFLBj5f2UshJpy09WPs3qizDCsEr8zyzcym6Woj/UI9ZzMIXwvoXVtyt0A==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/netbsd-x64@0.18.19:
- resolution: {integrity: sha512-3tt3SOS8L3D54R8oER41UdDshlBIAjYhdWRPiZCTZ1E41+shIZBpTjaW5UaN/jD1ENE/Ok5lkeqhoNMbxstyxw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/openbsd-x64@0.18.19:
- resolution: {integrity: sha512-MxbhcuAYQPlfln1EMc4T26OUoeg/YQc6wNoEV8xvktDKZhLtBxjkoeESSo9BbPaGKhAPzusXYj5n8n5A8iZSrA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/sunos-x64@0.18.19:
- resolution: {integrity: sha512-m0/UOq1wj25JpWqOJxoWBRM9VWc3c32xiNzd+ERlYstUZ6uwx5SZsQUtkiFHaYmcaoj+f6+Tfcl7atuAz3idwQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/win32-arm64@0.18.19:
- resolution: {integrity: sha512-L4vb6pcoB1cEcXUHU6EPnUhUc4+/tcz4OqlXTWPcSQWxegfmcOprhmIleKKwmMNQVc4wrx/+jB7tGkjjDmiupg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/win32-ia32@0.18.19:
- resolution: {integrity: sha512-rQng7LXSKdrDlNDb7/v0fujob6X0GAazoK/IPd9C3oShr642ri8uIBkgM37/l8B3Rd5sBQcqUXoDdEy75XC/jg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/win32-x64@0.18.19:
- resolution: {integrity: sha512-z69jhyG20Gq4QL5JKPLqUT+eREuqnDAFItLbza4JCmpvUnIlY73YNjd5djlO7kBiiZnvTnJuAbOjIoZIOa1GjA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /@jridgewell/gen-mapping@0.3.3:
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.18
- dev: true
-
- /@jridgewell/resolve-uri@3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
- engines: {node: '>=6.0.0'}
- dev: true
-
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
- dev: true
-
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: true
-
- /@jridgewell/sourcemap-codec@1.4.15:
- resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
-
- /@jridgewell/trace-mapping@0.3.18:
- resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- 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.15.0
- dev: true
-
- /ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
- dev: false
-
- /ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
- dependencies:
- color-convert: 2.0.1
- dev: false
-
- /any-promise@1.3.0:
- resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
- 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
-
- /array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
- dev: true
-
- /balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: true
-
- /binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
- dev: true
-
- /brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
- dev: true
-
- /braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
- dependencies:
- fill-range: 7.0.1
- dev: true
-
- /bundle-require@4.0.1(esbuild@0.18.19):
- resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- peerDependencies:
- esbuild: '>=0.17'
- dependencies:
- esbuild: 0.18.19
- load-tsconfig: 0.2.5
- dev: true
-
- /cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
- 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: false
-
- /chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- 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.2
- dev: true
-
- /cmd-ts@0.13.0:
- resolution: {integrity: sha512-nsnxf6wNIM/JAS7T/x/1JmbEsjH0a8tezXqqpaL0O6+eV0/aDEnRxwjxpu0VzDdRcaC1ixGSbRlUuf/IU59I4g==}
- dependencies:
- chalk: 4.1.2
- debug: 4.3.4
- didyoumean: 1.2.2
- strip-ansi: 6.0.1
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /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: false
-
- /color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- dev: false
-
- /commander@4.1.1:
- resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
- engines: {node: '>= 6'}
- dev: true
-
- /concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- 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
-
- /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
-
- /didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- dev: false
-
- /dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
- dependencies:
- path-type: 4.0.0
- dev: true
-
- /esbuild@0.18.19:
- resolution: {integrity: sha512-ra3CaIKCzJp5bU5BDfrCc0FRqKj71fQi+gbld0aj6lN0ifuX2fWJYPgLVLGwPfA+ruKna+OWwOvf/yHj6n+i0g==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.18.19
- '@esbuild/android-arm64': 0.18.19
- '@esbuild/android-x64': 0.18.19
- '@esbuild/darwin-arm64': 0.18.19
- '@esbuild/darwin-x64': 0.18.19
- '@esbuild/freebsd-arm64': 0.18.19
- '@esbuild/freebsd-x64': 0.18.19
- '@esbuild/linux-arm': 0.18.19
- '@esbuild/linux-arm64': 0.18.19
- '@esbuild/linux-ia32': 0.18.19
- '@esbuild/linux-loong64': 0.18.19
- '@esbuild/linux-mips64el': 0.18.19
- '@esbuild/linux-ppc64': 0.18.19
- '@esbuild/linux-riscv64': 0.18.19
- '@esbuild/linux-s390x': 0.18.19
- '@esbuild/linux-x64': 0.18.19
- '@esbuild/netbsd-x64': 0.18.19
- '@esbuild/openbsd-x64': 0.18.19
- '@esbuild/sunos-x64': 0.18.19
- '@esbuild/win32-arm64': 0.18.19
- '@esbuild/win32-ia32': 0.18.19
- '@esbuild/win32-x64': 0.18.19
- 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
-
- /fast-glob@3.3.1:
- resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
- 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.15.0:
- resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
- dependencies:
- reusify: 1.0.4
- 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
-
- /fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- dev: true
-
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: 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
-
- /glob@7.1.6:
- resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
- dev: true
-
- /globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.1
- ignore: 5.2.4
- merge2: 1.4.1
- slash: 3.0.0
- dev: true
-
- /has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
- dev: false
-
- /human-signals@2.1.0:
- resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
- engines: {node: '>=10.17.0'}
- dev: true
-
- /ignore@5.2.4:
- resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
- engines: {node: '>= 4'}
- dev: true
-
- /inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
- dev: true
-
- /inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- 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-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
- 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-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
-
- /isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- dev: true
-
- /joycon@3.1.1:
- resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
- engines: {node: '>=10'}
- dev: true
-
- /lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
- dev: true
-
- /lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: true
-
- /load-tsconfig@0.2.5:
- resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: true
-
- /lodash.sortby@4.7.0:
- resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
- 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
-
- /mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
- dev: true
-
- /minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- dependencies:
- brace-expansion: 1.1.11
- dev: true
-
- /ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
- /mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
- dependencies:
- any-promise: 1.3.0
- object-assign: 4.1.1
- thenify-all: 1.6.0
- 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
-
- /object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- dependencies:
- wrappy: 1.0.2
- dev: true
-
- /onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
- dependencies:
- mimic-fn: 2.1.0
- dev: true
-
- /path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
- dev: true
-
- /path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
- dev: true
-
- /picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
- dev: true
-
- /pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
- engines: {node: '>= 6'}
- dev: true
-
- /postcss-load-config@4.0.1:
- resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
- engines: {node: '>= 14'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
- dependencies:
- lilconfig: 2.1.0
- yaml: 2.3.1
- dev: true
-
- /punycode@2.3.0:
- resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
- engines: {node: '>=6'}
- dev: true
-
- /queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- dev: true
-
- /readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
- dependencies:
- picomatch: 2.3.1
- dev: true
-
- /resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
- dev: true
-
- /reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- dev: true
-
- /rollup@3.27.2:
- resolution: {integrity: sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==}
- engines: {node: '>=14.18.0', npm: '>=8.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- dependencies:
- queue-microtask: 1.2.3
- 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
-
- /slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
- dev: true
-
- /source-map@0.8.0-beta.0:
- resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
- engines: {node: '>= 8'}
- dependencies:
- whatwg-url: 7.1.0
- dev: true
-
- /strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
- dependencies:
- ansi-regex: 5.0.1
- dev: false
-
- /strip-final-newline@2.0.0:
- resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
- engines: {node: '>=6'}
- dev: true
-
- /sucrase@3.34.0:
- resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
- engines: {node: '>=8'}
- hasBin: true
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- commander: 4.1.1
- glob: 7.1.6
- lines-and-columns: 1.2.4
- mz: 2.7.0
- pirates: 4.0.6
- ts-interface-checker: 0.1.13
- 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: false
-
- /thenify-all@1.6.0:
- resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
- engines: {node: '>=0.8'}
- dependencies:
- thenify: 3.3.1
- dev: true
-
- /thenify@3.3.1:
- resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
- dependencies:
- any-promise: 1.3.0
- 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
-
- /tr46@1.0.1:
- resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
- dependencies:
- punycode: 2.3.0
- dev: true
-
- /tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
- dev: true
-
- /ts-interface-checker@0.1.13:
- resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
- dev: true
-
- /tsup@7.2.0:
- resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==}
- engines: {node: '>=16.14'}
- hasBin: true
- peerDependencies:
- '@swc/core': ^1
- postcss: ^8.4.12
- typescript: '>=4.1.0'
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- postcss:
- optional: true
- typescript:
- optional: true
- dependencies:
- bundle-require: 4.0.1(esbuild@0.18.19)
- cac: 6.7.14
- chokidar: 3.5.3
- debug: 4.3.4
- esbuild: 0.18.19
- execa: 5.1.1
- globby: 11.1.0
- joycon: 3.1.1
- postcss-load-config: 4.0.1
- resolve-from: 5.0.0
- rollup: 3.27.2
- source-map: 0.8.0-beta.0
- sucrase: 3.34.0
- tree-kill: 1.2.2
- transitivePeerDependencies:
- - supports-color
- - ts-node
- dev: true
-
- /webidl-conversions@4.0.2:
- resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
- dev: true
-
- /whatwg-url@7.1.0:
- resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
- dependencies:
- lodash.sortby: 4.7.0
- tr46: 1.0.1
- webidl-conversions: 4.0.2
- dev: true
-
- /which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
- dependencies:
- isexe: 2.0.0
- dev: true
-
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- dev: true
-
- /yaml@2.3.1:
- resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}
- engines: {node: '>= 14'}
- dev: true
diff --git a/examples/plugin_template/src/index.ts b/examples/plugin_template/src/index.ts
deleted file mode 100644
index dd44b62..0000000
--- a/examples/plugin_template/src/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { command } from "cmd-ts";
-
-export default command({
- name: "custom",
- description: "A completely custom command dynamically imported at runtime!",
- args: {},
- handler() {
- console.log("CUSTOM COMMAND WORKS!!");
- },
-});
diff --git a/examples/plugin_template/tsconfig.json b/examples/plugin_template/tsconfig.json
deleted file mode 100644
index 71dfb43..0000000
--- a/examples/plugin_template/tsconfig.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "compilerOptions": {
- "jsx": "preserve",
- "noEmit": true,
- "module": "ESNext",
- "target": "ESNext",
- "moduleResolution": "node",
- "strict": true,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "skipLibCheck": true,
- "resolveJsonModule": true
- }
-}
diff --git a/examples/plugin_template/tsup.config.ts b/examples/plugin_template/tsup.config.ts
deleted file mode 100644
index d80d441..0000000
--- a/examples/plugin_template/tsup.config.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig({
- entry: ["src/index.ts"],
- target: "esnext",
- format: "esm",
- splitting: false,
- sourcemap: true,
- clean: true,
-});
diff --git a/package.json b/package.json
index 6e1b3a5..d897b76 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "solid-cli",
"private": true,
"version": "0.0.1",
- "description": "A CLI for making the solidjs development experience easier, faster, and less error prone.",
+ "description": "A CLI for making the SolidJS development experience easier, faster, and less error prone.",
"license": "MIT",
"homepage": "https://solid-cli.netlify.app",
"repository": {
@@ -10,33 +10,35 @@
"url": "https://github.com/solidjs-community/solid-cli"
},
"scripts": {
- "test": "vitest",
+ "test": "vitest run",
"test:all": "turbo run test",
"build": "turbo run build",
"release": "pnpm build && changeset publish",
- "watch:all": "nodemon --no-stdin -q --watch packages/core/src -e ts --exec 'turbo run build --scope=core' --watch packages/reactivity/src -e ts --exec 'turbo run build --scope=reactivity' --watch packages/ui/src -e ts --exec 'turbo run build --scope=ui' --watch packages/utils/src -e ts --exec 'turbo run build --scope=utils'",
- "watch:core": "nodemon --watch packages/core/src -e ts --exec 'turbo run build --scope=core'",
- "watch:reactivity": "nodemon --watch packages/reactivity/src -e ts --exec 'turbo run build --scope=reactivity'",
- "watch:ui": "nodemon --watch packages/ui/src -e ts --exec 'turbo run build --scope=ui'",
- "watch:utils": "nodemon --watch packages/utils/src -e ts --exec 'turbo run build --scope=utils'",
- "start": "cd packages/core && pnpm start",
- "format": "prettier . --write"
+ "start": "pnpm build && cd packages/create-solid && pnpm start",
+ "format": "prettier --write .",
+ "watch:build": "turbo watch build",
+ "update-deps": "ncu -u --packageFile packages/**/package.json"
},
- "keywords": [],
- "author": "Thomas Beer & Rahul Batra",
+ "contributors": [
+ {
+ "name": "Thomas Beer"
+ },
+ {
+ "name": "Rahul Batra"
+ }
+ ],
"workspaces": [
"./packages/*"
],
"devDependencies": {
- "@changesets/cli": "2.26.2",
- "nodemon": "^3.0.1",
- "prettier": "^3.0.2",
- "turbo": "^1.10.12",
- "vitest": "^0.33.0"
+ "@changesets/cli": "2.31.1",
+ "@types/node": "26.1.1",
+ "jiti": "^2.7.0",
+ "prettier": "^3.9.6",
+ "tsup": "^8.5.1",
+ "turbo": "^2.10.6",
+ "typescript": "^7.0.2",
+ "vitest": "^4.1.10"
},
- "pnpm": {
- "patchedDependencies": {
- "detect-package-manager@2.0.1": "patches/detect-package-manager@2.0.1.patch"
- }
- }
+ "packageManager": "pnpm@11.15.1"
}
diff --git a/packages/commands/.gitignore b/packages/commands/.gitignore
deleted file mode 100644
index fbf0622..0000000
--- a/packages/commands/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-types
\ No newline at end of file
diff --git a/packages/commands/package.json b/packages/commands/package.json
deleted file mode 100644
index 98d6d45..0000000
--- a/packages/commands/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "@solid-cli/commands",
- "version": "0.0.2",
- "description": "The main command handlers for the Solid CLI",
- "license": "MIT",
- "homepage": "https://solid-cli.netlify.app",
- "repository": {
- "type": "git",
- "url": "https://github.com/solidjs-community/solid-cli"
- },
- "main": "./dist/index.mjs",
- "module": "./dist/index.mjs",
- "types": "./types/index.d.ts",
- "exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.mjs",
- "types": "./types/index.d.ts"
- }
- },
- "scripts": {
- "test": "vitest run",
- "build": "tsc && tsup"
- },
- "devDependencies": {
- "@chialab/esbuild-plugin-meta-url": "^0.17.7",
- "@types/node": "^20.5.0",
- "prettier": "^3.0.2",
- "tsup": "^7.2.0",
- "typescript": "^5.1.6"
- },
- "publishConfig": {
- "access": "public"
- },
- "dependencies": {
- "@chialab/esbuild-plugin-meta-url": "^0.17.7",
- "@clack/prompts": "0.6.3",
- "@solid-cli/reactivity": "workspace:*",
- "@solid-cli/transpiler": "workspace:*",
- "@solid-cli/ui": "workspace:*",
- "@solid-cli/utils": "workspace:*",
- "detect-package-manager": "^2.0.1",
- "execa": "^7.2.0",
- "picocolors": "^1.0.0",
- "sucrase": "^3.34.0"
- }
-}
diff --git a/packages/commands/src/handlers/add.ts b/packages/commands/src/handlers/add.ts
deleted file mode 100644
index 45572b7..0000000
--- a/packages/commands/src/handlers/add.ts
+++ /dev/null
@@ -1,208 +0,0 @@
-import { autocomplete } from "@solid-cli/ui";
-import { S_BAR, cancelable, spinnerify } from "@solid-cli/ui";
-import { Integrations, Supported, integrations, setRootFile } from "../lib/integrations";
-import * as p from "@clack/prompts";
-import color from "picocolors";
-import { PM } from "detect-package-manager";
-import { primitives, loadPrimitives } from "@solid-cli/utils/primitives";
-import { t } from "@solid-cli/utils";
-import { fileExists, getRootFile, getViteConfig, validateFilePath } from "../lib/utils/helpers";
-import { writeFile, readFile } from "@solid-cli/utils/fs";
-import { transformPlugins, type PluginOptions } from "@solid-cli/utils/transform";
-import {
- UPDATESQUEUE,
- clearQueue,
- flushCommandUpdates,
- flushFileUpdates,
- flushPackageUpdates,
- queueUpdate,
- summarizeUpdates,
-} from "@solid-cli/utils/updates";
-const handleAutocompleteAdd = async () => {
- const supportedIntegrations = (Object.keys(integrations) as Supported[]).map((value) => ({ label: value, value }));
- const opts = () => [...supportedIntegrations, ...primitives()];
- loadPrimitives().catch((e) => p.log.error(e));
- const a = await cancelable(
- autocomplete({
- message: t.ADD_PACKAGES,
- options: opts,
- }),
- );
-
- if (a.length === 0) {
- p.log.warn(t.NOTHING_SELECTED);
- return;
- }
- const shouldInstall = await cancelable(
- p.select({
- options: [
- { label: t.YES, value: true },
- { label: t.NO, value: false },
- { label: t.YES_FORCE, value: [true, "force"] },
- ],
- message: `${t.CONFIRM_INSTALL(a.length)} \n${color.red(S_BAR)} \n${color.red(S_BAR)} ${
- " " + color.yellow(a.map((opt) => opt.label).join(" ")) + " "
- } \n${color.red(S_BAR)} `,
- }),
- );
-
- if (!shouldInstall) return;
-
- let forceTransform = false;
- if (Array.isArray(shouldInstall) && shouldInstall[1] === "force") {
- forceTransform = true;
- }
- const packages = a.map((opt) => opt.value as Supported);
-
- return { packages, forceTransform };
-};
-const isIntegration = (str: string) => {
- if (Object.keys(integrations).includes(str)) return true;
- return false;
-};
-/**
- * Transforms a list containing primitives, either by name or full package name, and returns the corresponding primitive objects
- */
-const transformPrimitives = async (ps: string[]) => {
- if (!ps.length) return [];
- if (!primitives().length) {
- await spinnerify({
- startText: t.LOADING_PRIMITIVES,
- finishText: t.PRIMITIVES_LOADED,
- fn: loadPrimitives,
- });
- }
- const mappedInput = ps.map((p) => p.replace("@solid-primitives/", ""));
- return primitives().filter((p) => mappedInput.includes(p.value.replace("@solid-primitives/", "")));
-};
-// @ts-ignore
-const installCommand = async (pM: PM): Promise => {
- switch (pM) {
- case "npm":
- return "install";
- case "yarn":
- return "add";
- case "pnpm":
- return "add";
- }
-};
-type Configs = Integrations[keyof Integrations][];
-export const handleAdd = async (packages?: string[], forceTransform: boolean = false) => {
- if (!packages?.length) {
- const autocompleted = await handleAutocompleteAdd();
-
- if (!autocompleted) return;
-
- packages = autocompleted.packages;
- forceTransform = autocompleted.forceTransform;
- }
- const possiblePrimitives: string[] = [];
- const configs: Configs = packages
- .map((n) => {
- if (!n) return;
- if (!isIntegration(n)) {
- possiblePrimitives.push(n);
- return;
- }
- const res = integrations[n as Supported];
- if (!res) {
- p.log.error(t.NO_SUPPORT(n));
- return;
- }
- return res;
- })
- .filter((p) => p) as Configs;
-
- const viteConfig = await getViteConfig();
-
- for (let i = 0; i < configs.length; i++) {
- const config = configs[i];
- config.installs.forEach((p) => queueUpdate({ type: "package", name: p }));
- }
- // Queue primitives
- for (const primitive of await transformPrimitives(possiblePrimitives)) {
- queueUpdate({ type: "package", name: primitive.value });
- }
-
- if (!configs.length) return;
-
- await spinnerify({
- startText: "Processing config",
- finishText: "Config processed",
- fn: async () => {
- const code = await transformPlugins(
- configs.map((c) => c.pluginOptions).filter(Boolean) as PluginOptions[],
- { name: viteConfig, contents: (await readFile(viteConfig)).toString() },
- forceTransform,
- undefined,
- );
- writeFile(viteConfig, code);
- },
- });
-
- p.log.info("Preparing post install steps for integrations");
- let projectRoot = await getRootFile();
- setRootFile(projectRoot);
- if (!fileExists(projectRoot)) {
- p.log.error(color.red(`Can't find root file \`${projectRoot.split("/")[1]}\`.`));
- await cancelable(
- p.text({
- message: `Type path to root: `,
- validate(value) {
- if (!value.length) return `Path can not be empty`;
- const path = validateFilePath(value, ["root.tsx", "index.tsx"]);
- if (!path) return `File at \`${value}\` not found. Please try again`;
- else setRootFile(path);
- },
- }),
- );
- }
- // Run our additional configs
- await spinnerify({
- startText: "Running additional config steps",
- finishText: "Additional config steps complete",
- fn: async () => {
- for (const cfg of configs) {
- await cfg.additionalConfig?.();
- }
- },
- });
- if (UPDATESQUEUE.length === 0) return;
- const { fileUpdates, packageUpdates, commandUpdates } = summarizeUpdates();
- // Inspired by Qwik's CLI
- if (fileUpdates.length) p.log.message([`${color.cyan("Modify")}`, ...fileUpdates.map((f) => ` - ${f}`)].join("\n"));
- if (packageUpdates.length)
- p.log.message([`${color.cyan("Install")}`, ...packageUpdates.map((p) => ` - ${p}`)].join("\n"));
- if (commandUpdates.length)
- p.log.message([`${color.cyan("Run commands")}`, ...commandUpdates.map((p) => ` - ${p}`)].join("\n"));
- const confirmed = await p.confirm({ message: "Do you wish to continue?" });
- if (!confirmed || p.isCancel(confirmed)) return;
- await spinnerify({ startText: "Writing files...", finishText: "Updates written", fn: flushFileUpdates });
- await spinnerify({ startText: "Installing packages...", finishText: "Packages installed", fn: flushPackageUpdates });
- await spinnerify({ startText: "Running setup commands", finishText: "Setup commands ran", fn: flushCommandUpdates });
- clearQueue();
- const postInstalls = configs.filter((c) => c.postInstall);
- if (postInstalls.length === 0) return;
- p.log.message(
- `${postInstalls.length} ${
- postInstalls.length === 1 ? "package has" : "packages have"
- } post install steps that need to run.`,
- );
- const pInstallConfirmed = await p.confirm({ message: "Do you wish to continue?" });
- if (!pInstallConfirmed || p.isCancel(pInstallConfirmed)) return;
- p.log.info("Running post installs");
- // Run postInstalls
- for (const cfg of configs) {
- await cfg.postInstall?.();
- }
- p.log.success("Post install steps complete!");
- // await spinnerify({
- // startText: t.POST_INSTALL,
- // finishText: t.POST_INSTALL_COMPLETE,
- // fn: async () => {
- // for (const cfg of configs) {
- // await cfg.postInstall?.();
- // }
- // },
- // });
-};
diff --git a/packages/commands/src/handlers/new.ts b/packages/commands/src/handlers/new.ts
deleted file mode 100644
index c45dae6..0000000
--- a/packages/commands/src/handlers/new.ts
+++ /dev/null
@@ -1,259 +0,0 @@
-import * as p from "@clack/prompts";
-import { openInBrowser } from "@solid-cli/utils";
-import { detect } from "detect-package-manager";
-import { execa } from "execa";
-import { cancelable, spinnerify } from "@solid-cli/ui";
-import { t } from "@solid-cli/utils";
-import { insertAtEnd, readFileToString } from "@solid-cli/utils/fs";
-import { flushQueue } from "@solid-cli/utils/updates";
-import { getRunner } from "@solid-cli/utils/paths";
-import { rm } from "fs/promises";
-import { basename, join, resolve } from "path";
-import { Dirent, copyFileSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "fs";
-import prettier from "prettier";
-import { transform } from "sucrase";
-const gitIgnore = `
-dist
-.solid
-.output
-.vercel
-.netlify
-netlify
-
-# Environment
-.env
-.env*.local
-
-# dependencies
-/node_modules
-
-# IDEs and editors
-/.idea
-.project
-.classpath
-*.launch
-.settings/
-
-# Temp
-gitignore
-
-# System Files
-.DS_Store
-Thumbs.db
-`;
-
-const startSupported = [
- "bare",
- "hackernews",
- "todomvc",
- "with-auth",
- "with-authjs",
- "with-mdx",
- "with-prisma",
- "with-solid-styled",
- "with-tailwindcss",
- "with-trpc",
- "with-vitest",
- "with-websocket",
-] as const;
-const localSupported = ["ts", "js"] as const;
-const stackblitzSupported = ["bare"] as const;
-
-type AllSupported = (typeof localSupported)[number] | (typeof stackblitzSupported)[number];
-
-const modifyReadme = async (name: string) => {
- await insertAtEnd(
- `${name}/README.md`,
- "\n## This project was created with the [Solid CLI](https://solid-cli.netlify.app)\n",
- );
- await flushQueue();
-};
-
-const recurseFiles = (startPath: string, cb: (file: Dirent, startPath: string) => void) => {
- startPath = resolve(startPath);
-
- const files = readdirSync(startPath, { withFileTypes: true });
-
- for (const file of files) {
- cb(file, startPath);
- }
-};
-
-const convertToJS = async (file: Dirent, startPath: string) => {
- const src = join(startPath, file.name);
- const dest = resolve(startPath.replace(".solid-start", ""), file.name);
- if (file.isDirectory()) {
- mkdirSync(dest, { recursive: true });
- recurseFiles(resolve(startPath, file.name), convertToJS);
- } else if (file.isFile()) {
- if (src.endsWith(".ts") || src.endsWith(".tsx")) {
- let { code } = transform(await readFileToString(src), {
- transforms: ["typescript", "jsx"],
- jsxRuntime: "preserve",
- });
- code = await prettier.format(code, {
- parser: "babel",
- });
-
- writeFileSync(dest.replace(".ts", ".js"), code, { flag: "wx" });
- } else {
- copyFileSync(src, dest);
- }
- }
-};
-
-const handleTSConversion = async (tempDir: string, projectName: string) => {
- await rm(resolve(tempDir, "tsconfig.json"));
- writeFileSync(
- resolve(projectName, "jsconfig.json"),
- JSON.stringify(
- {
- compilerOptions: {
- jsx: "preserve",
- jsxImportSource: "solid-js",
- paths: {
- "~/*": ["./src/*"],
- },
- },
- },
- null,
- 2,
- ),
- { flag: "wx" },
- );
-
- // Convert all ts files in temp directory into js
- recurseFiles(tempDir, convertToJS);
-
- // Update package.json to remove type deps
- const name = basename(resolve(projectName));
- const pkg_file = join(projectName, "package.json");
- const pkg_json = JSON.parse(
- readFileSync(pkg_file, "utf-8")
- .replace(/"name": ".+"/, (_m) => `"name": "${name}"`)
- .replace(/"(.+)": "workspace:.+"/g, (_m, name) => `"${name}": "next"`),
- );
-
- delete pkg_json.dependencies["@types/cookie"];
- delete pkg_json.dependencies["@types/debug"];
- delete pkg_json.devDependencies["@types/babel__core"];
- delete pkg_json.devDependencies["@types/node"];
- delete pkg_json.devDependencies["typescript"];
- delete pkg_json.devDependencies["@types/wait-on"];
-
- writeFileSync(pkg_file, JSON.stringify(pkg_json, null, 2));
-
- // Remove temp directory
- await rm(join(process.cwd(), tempDir), {
- recursive: true,
- force: true,
- });
-};
-
-const handleNewStartProject = async (projectName: string) => {
- const template = await cancelable(
- p.select({
- message: t.NEW_START,
- initialValue: "ts",
- options: startSupported.map((s) => ({ label: s, value: s })),
- }),
- );
-
- const withTs = await cancelable(p.confirm({ message: "Use Typescript?" }));
-
- // If the user does not want ts, we create the project in a temp directory inside the project directory
- const tempDir = withTs ? projectName : join(projectName, ".solid-start");
-
- const pM = await detect();
- await spinnerify({
- startText: t.CREATING_PROJECT,
- finishText: t.PROJECT_CREATED,
- fn: () =>
- execa(
- getRunner(pM),
- ["degit", `solidjs/solid-start/examples/${template}#main`, tempDir].filter((e) => e !== null) as string[],
- ),
- });
-
- if (!withTs) await handleTSConversion(tempDir, projectName);
-
- // Add .gitignore
- writeFileSync(join(projectName, ".gitignore"), gitIgnore);
-
- await modifyReadme(projectName);
-
- p.log.info(`${t.GET_STARTED}
- - cd ${projectName}
- - npm install
- - npm run dev`);
-};
-
-const handleAutocompleteNew = async () => {
- const name = await cancelable(
- p.text({ message: t.PROJECT_NAME, placeholder: "solid-project", defaultValue: "solid-project" }),
- );
-
- const isStart = await cancelable(p.confirm({ message: t.IS_START_PROJECT }));
-
- if (isStart) {
- handleNewStartProject(name);
- return;
- }
-
- const template = (await cancelable(
- p.select({
- message: t.TEMPLATE,
- initialValue: "ts",
- options: localSupported.map((s) => ({ label: s, value: s })),
- }),
- )) as unknown as AllSupported;
-
- await handleNew(template, name);
-};
-export const handleNew = async (
- variation?: AllSupported,
- name: string = "solid-project",
- stackblitz: boolean = false,
-) => {
- if (!variation) {
- await handleAutocompleteNew();
- return;
- }
-
- if (stackblitz) {
- await spinnerify({
- startText: t.OPENING_IN_BROWSER(variation),
- finishText: t.OPENED_IN_BROWSER,
- fn: () => openInBrowser(`https://solid.new/${variation}`),
- });
- return;
- }
-
- const withTs = await cancelable(p.confirm({ message: "Use Typescript?" }));
-
- // If the user does not want ts, we create the project in a temp directory inside the project directory
- const tempDir = withTs ? name : join(name, ".solid-start");
-
- const pM = await detect();
-
- await spinnerify({
- startText: t.CREATING_PROJECT,
- finishText: t.PROJECT_CREATED,
- fn: () =>
- execa(
- getRunner(pM),
- ["degit", `solidjs/templates/${variation}`, name ?? null].filter((e) => e !== null) as string[],
- ),
- });
-
- if (!withTs) await handleTSConversion(tempDir, name);
-
- // Add .gitignore
- writeFileSync(join(name, ".gitignore"), gitIgnore);
-
- await modifyReadme(name ?? variation);
- p.log.info(`${t.GET_STARTED}
- - cd ${name}
- - npm install
- - npm run dev`);
-};
diff --git a/packages/commands/src/handlers/start/adapter.ts b/packages/commands/src/handlers/start/adapter.ts
deleted file mode 100644
index 7d18982..0000000
--- a/packages/commands/src/handlers/start/adapter.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { readFile, writeFile } from "@solid-cli/utils/fs";
-import { transformPlugins } from "@solid-cli/utils/transform";
-import * as p from "@clack/prompts";
-import { cancelable } from "@solid-cli/ui";
-
-export const supportedAdapters = [
- "aws",
- "cloudflare-pages",
- "cloudflare-workers",
- "deno",
- "netlify",
- "node",
- "static",
- "vercel",
-] as const;
-
-type SupportedAdapters = (typeof supportedAdapters)[number];
-
-const handleAutocompleteAdapter = async () => {
- const name = (await cancelable(
- p.select({
- message: "Select an adapter",
- options: supportedAdapters.map((a) => ({ value: a, label: a })),
- }),
- )) as SupportedAdapters;
- await handleAdapter(name, true);
-};
-
-export const handleAdapter = async (name?: string, forceTransform = false) => {
- if (!name) {
- await handleAutocompleteAdapter();
- return;
- }
- const sym = Symbol(name).toString();
- let code = await transformPlugins(
- [
- {
- importName: "solid",
- importSource: "solid-start/vite",
- isDefault: true,
- options: { adapter: sym },
- },
- ],
- { name: "vite.config.ts", contents: (await readFile("vite.config.ts")).toString() },
- forceTransform,
- );
- code = `import ${name} from "solid-start-${name}";\n` + code;
- code = code.replace(`"${sym}"`, `${name}({})`);
- await writeFile("vite.config.ts", code);
-};
diff --git a/packages/commands/src/handlers/start/api.ts b/packages/commands/src/handlers/start/api.ts
deleted file mode 100644
index 79dd2bb..0000000
--- a/packages/commands/src/handlers/start/api.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { isSolidStart, createApi } from "@solid-cli/utils";
-import * as p from "@clack/prompts";
-import { cancelable, spinnerify } from "@solid-cli/ui";
-
-const handleAutocompleteApi = async () => {
- const path = await cancelable(
- p.text({
- message: "Enter the path in which the api file will be created",
- placeholder: "/user",
- validate(value) {
- if (!value.length) return "Path is required";
- },
- }),
- );
-
- const name = await cancelable(
- p.text({
- message: "Enter the name for the api file (required)",
- validate(value) {
- if (!value.length) return "Name is required";
- },
- }),
- );
-
- await handleApi(path, name);
-};
-export const handleApi = async (path?: string, name?: string) => {
- if (!(await isSolidStart())) {
- p.log.error("Cannot run command. Your project doesn't include solid-start");
- return;
- }
- if (!path) {
- await handleAutocompleteApi();
- return;
- }
- await spinnerify({
- startText: "Creating new api file",
- finishText: "Api file created",
- fn: () => createApi(path, name),
- });
-};
diff --git a/packages/commands/src/handlers/start/data.ts b/packages/commands/src/handlers/start/data.ts
deleted file mode 100644
index 380bb1b..0000000
--- a/packages/commands/src/handlers/start/data.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { isSolidStart, createData } from "@solid-cli/utils";
-import * as p from "@clack/prompts";
-import { cancelable, spinnerify } from "@solid-cli/ui";
-
-const handleAutocompleteData = async () => {
- const path = await cancelable(
- p.text({
- message: "Enter the path in which the data file will be created",
- placeholder: "/user/login",
- validate(value) {
- if (!value.length) return "Path is required";
- },
- }),
- );
-
- const name = await cancelable(
- p.text({
- message: "Enter the name for the data file (leave this blank for the default)",
- }),
- );
-
- await handleData(path, name);
-};
-
-export const handleData = async (path?: string, name?: string) => {
- if (!(await isSolidStart())) {
- p.log.error("Cannot run command. Your project doesn't include solid-start");
- return;
- }
- if (!path) {
- await handleAutocompleteData();
- return;
- }
- await spinnerify({
- startText: "Creating new data file",
- finishText: "Data file created",
- fn: () => createData(path, name),
- });
-};
diff --git a/packages/commands/src/handlers/start/index.ts b/packages/commands/src/handlers/start/index.ts
deleted file mode 100644
index 2145bbb..0000000
--- a/packages/commands/src/handlers/start/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * from "./adapter";
-export * from "./api";
-export * from "./data";
-export * from "./mode";
-export * from "./route";
diff --git a/packages/commands/src/handlers/start/mode.ts b/packages/commands/src/handlers/start/mode.ts
deleted file mode 100644
index e7244ee..0000000
--- a/packages/commands/src/handlers/start/mode.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { writeFile, readFile } from "@solid-cli/utils/fs";
-import { transformPlugins } from "@solid-cli/utils/transform";
-import { isSolidStart } from "@solid-cli/utils";
-import * as p from "@clack/prompts";
-import { cancelable } from "@solid-cli/ui";
-
-export const supportedModes = ["csr", "ssr", "ssg"] as const;
-type SupportedModes = (typeof supportedModes)[number];
-
-const handleAutocompleteMode = async () => {
- const mode = (await cancelable(
- p.select({
- message: "Select a mode",
- options: supportedModes.map((a) => ({ value: a, label: a.toUpperCase() })),
- }),
- )) as SupportedModes;
- await handleMode(mode);
-};
-
-export const handleMode = async (mode?: SupportedModes) => {
- if (!(await isSolidStart())) {
- p.log.error("Cannot run command. Your project doesn't include solid-start");
- return;
- }
- if (!mode) {
- handleAutocompleteMode();
- return;
- }
- p.log.info("Updating config");
- if (mode != "ssg") {
- const newConfig = await transformPlugins(
- [
- {
- importName: "solid",
- importSource: "solid-start/vite",
- isDefault: true,
- options: { ssr: mode === "ssr" },
- },
- ],
- { name: "vite.config.ts", contents: (await readFile("vite.config.ts")).toString() },
- true,
- true,
- );
- await writeFile("vite.config.ts", newConfig);
- }
-};
diff --git a/packages/commands/src/handlers/start/route.ts b/packages/commands/src/handlers/start/route.ts
deleted file mode 100644
index 6e1ea45..0000000
--- a/packages/commands/src/handlers/start/route.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import * as p from "@clack/prompts";
-import { isSolidStart, createRoute } from "@solid-cli/utils";
-import { cancelable, spinnerify } from "@solid-cli/ui";
-const handleAutocompleteRoute = async () => {
- const path = await cancelable(
- p.text({
- message: "Please provide a path for the route",
- placeholder: "/user/login",
- validate(value) {
- if (!value.length) return "Path is required";
- },
- }),
- );
- const name = await cancelable(
- p.text({
- message: "Please provide a name for the route",
-
- validate(value) {
- if (!value.length) return "Name for route is required";
- },
- }),
- );
-
- await handleRoute(path, name);
-};
-export const handleRoute = async (path?: string, name?: string) => {
- if (!(await isSolidStart())) {
- p.log.error("Cannot run command. Your project doesn't include solid-start");
- return;
- }
- if (!path) {
- await handleAutocompleteRoute();
- return;
- }
- await spinnerify({
- startText: "Creating new route",
- finishText: "Route created",
- fn: () => createRoute(path, name),
- });
-};
diff --git a/packages/commands/src/index.ts b/packages/commands/src/index.ts
deleted file mode 100644
index 32fff0a..0000000
--- a/packages/commands/src/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from "./handlers/add";
-export * from "./handlers/new";
-export * from "./handlers/start";
diff --git a/packages/commands/src/lib/integrations.ts b/packages/commands/src/lib/integrations.ts
deleted file mode 100644
index 7abe789..0000000
--- a/packages/commands/src/lib/integrations.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import { insertAfter, insertAtBeginning } from "@solid-cli/utils/fs";
-import { fileExists, validateFilePath } from "./utils/helpers";
-import { $ } from "execa";
-import { detect } from "detect-package-manager";
-import { getRunner } from "@solid-cli/utils/paths";
-import { createSignal } from "@solid-cli/reactivity";
-import * as p from "@clack/prompts";
-import color from "picocolors";
-import { cancelable } from "@solid-cli/ui";
-import { PluginOptions } from "@chialab/esbuild-plugin-meta-url";
-import { flushQueue } from "@solid-cli/utils/updates";
-
-// All the integrations/packages that we support
-export type Supported = keyof typeof integrations;
-
-export type IntegrationsValue = {
- pluginOptions?: PluginOptions;
- installs: string[];
- additionalConfig?: () => Promise;
- postInstall?: () => Promise;
-};
-
-export type Integrations = Record;
-
-export const [rootFile, setRootFile] = createSignal(undefined);
-
-export const integrations = {
- "tailwind": {
- installs: ["tailwindcss", "postcss", "autoprefixer"],
- postInstall: async () => {
- const pM = await detect();
- await $`${getRunner(pM)} tailwindcss init -p`;
- let tailwindConfig = "tailwind.config.js";
- if (!fileExists(tailwindConfig)) {
- p.log.error(color.red(`Can't find tailwind config file`));
- await cancelable(
- p.text({
- message: `Type path to tailwind config: `,
- validate(value) {
- if (!value.length) return `Path can not be empty`;
- const path = validateFilePath(value, "tailwind.config");
- if (!path) return `Tailwind config at \`${value}\` not found. Please try again`;
- else {
- tailwindConfig = path;
- }
- },
- }),
- );
- }
-
- let indexCss = "./src/index.css";
- if (!fileExists(indexCss)) {
- p.log.error(color.red(`Can't find index.css`));
- await cancelable(
- p.text({
- message: `Type path to index.css: `,
- validate(value) {
- if (!value.length) return `Path can not be empty`;
- const path = validateFilePath(value, "index.css");
- if (!path) return `index.css at \`${value}\` not found. Please try again`;
- else {
- indexCss = path;
- }
- },
- }),
- );
- }
- p.log.info("Updating tailwind config");
- await insertAfter(tailwindConfig, "content: [", '"./index.html", "./src/**/*.{js,ts,jsx,tsx}"');
- await insertAtBeginning(indexCss, "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n");
- // Instantly flush queue
- await flushQueue();
- },
- },
- "unocss": {
- pluginOptions: {
- importName: "UnoCss",
- importSource: "unocss/vite",
- isDefault: true,
- options: {},
- },
- installs: ["unocss"],
- additionalConfig: async () => {
- const path = rootFile();
- if (!path) return;
- await insertAtBeginning(path, `import "virtual:uno.css";\n`);
- },
- },
- "vitepwa": {
- pluginOptions: {
- importName: "VitePWA",
- importSource: "vite-plugin-pwa",
- isDefault: false,
- options: {},
- },
- installs: ["vite-plugin-pwa"],
- },
- "solid-devtools": {
- pluginOptions: {
- importName: "devtools",
- importSource: "solid-devtools/vite",
- isDefault: true,
- options: {},
- },
- installs: ["solid-devtools"],
- additionalConfig: async () => {
- const path = rootFile();
- if (!path) return;
- await insertAtBeginning(path, `import "solid-devtools";\n`);
- },
- },
-};
diff --git a/packages/commands/src/lib/utils/helpers.ts b/packages/commands/src/lib/utils/helpers.ts
deleted file mode 100644
index 1eea427..0000000
--- a/packages/commands/src/lib/utils/helpers.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-import { existsSync, lstatSync, readdirSync } from "fs";
-import { isSolidStart } from "@solid-cli/utils";
-import { join, resolve } from "path";
-import { $ } from "execa";
-import { cancelable } from "@solid-cli/ui";
-import * as p from "@clack/prompts";
-import color from "picocolors";
-
-export const getProjectRoot = async () => {
- const { stdout } = await $`npm root`;
-
- return stdout.slice(0, stdout.lastIndexOf("/"));
-};
-
-export const getRootFile = async () => {
- if (await isSolidStart()) {
- return "src/root.tsx";
- }
- return "src/index.tsx";
-};
-
-export const fileExists = (path: string) => {
- return existsSync(path);
-};
-
-export function validateFilePath(path: string, lookingFor: string): string | undefined;
-export function validateFilePath(path: string, lookingFor: string[]): string | undefined;
-export function validateFilePath(path: string, lookingFor: string | string[]): string | undefined {
- path = resolve(path);
- const isDir = lstatSync(path).isDirectory();
- if (isDir) {
- const files = readdirSync(path, { withFileTypes: true });
-
- const config = files.find((file) => {
- if (Array.isArray(lookingFor)) {
- return lookingFor.some((s) => file.name.startsWith(s));
- }
-
- return file.name.startsWith(lookingFor);
- });
- return config ? join(path, config.name) : undefined;
- }
-
- const pathIsValid = Array.isArray(lookingFor)
- ? lookingFor.some((s) => path.startsWith(s))
- : path.startsWith(lookingFor);
-
- const exists = fileExists(path) && pathIsValid;
-
- return exists ? path : undefined;
-}
-
-export async function findFiles(
- startPath: string,
- lookingFor: string | string[],
- opts: { depth?: number; ignoreDirs?: string[]; startsWith?: boolean },
-): Promise {
- let { depth = Infinity, ignoreDirs = ["node_modules", "."], startsWith = true } = opts;
-
- startPath = resolve(startPath);
-
- const isDir = lstatSync(startPath).isDirectory();
-
- if (!isDir) {
- startPath = resolve(startPath.slice(0, startPath.lastIndexOf("/")));
- }
-
- let filePaths: string[] = [];
-
- const files = readdirSync(startPath, { withFileTypes: true });
-
- for (const file of files) {
- if (file.isDirectory() && !ignoreDirs.some((s) => file.name.includes(s))) {
- if (Number.isFinite(depth) && depth-- <= 0) continue;
- filePaths = filePaths.concat(await findFiles(resolve(startPath, file.name), lookingFor, opts));
- continue;
- }
-
- if (file.isFile()) {
- const fileMatch = Array.isArray(lookingFor)
- ? lookingFor.some((s) => (startsWith ? file.name.startsWith(s) : file.name.endsWith(s)))
- : startsWith
- ? file.name.startsWith(lookingFor)
- : file.name.endsWith(lookingFor);
-
- if (fileMatch) {
- filePaths.push(resolve(startPath, file.name));
- }
- }
- }
-
- return filePaths;
-}
-
-export const getViteConfig = async () => {
- let configFile = "vite.config.ts";
-
- const existsHere = fileExists(configFile);
-
- if (!existsHere) {
- const root = await getProjectRoot();
- const existsInRoot = validateFilePath(root, "vite.config");
- if (existsInRoot) {
- const correctConfig = await cancelable(
- p.confirm({
- message: `Could not find vite config in current directory, but found vite config in \`${root}\`. Is this the correct vite config?`,
- }),
- );
- if (correctConfig) return existsInRoot;
- }
-
- p.log.error(color.red(`Can't find vite config`));
- await cancelable(
- p.text({
- message: "Type path to vite config: ",
- validate(value) {
- const path = validateFilePath(value, "vite.config");
- if (!path) return `Vite config not found. Please try again`;
- else {
- configFile = path;
- }
- },
- }),
- );
- }
-
- return configFile;
-};
diff --git a/packages/commands/tests/assets/sample_unocss_result.txt b/packages/commands/tests/assets/sample_unocss_result.txt
deleted file mode 100644
index 5ae2640..0000000
--- a/packages/commands/tests/assets/sample_unocss_result.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-import UnoCss from "unocss/vite";
-import solid from "solid-start/vite";
-// Simulates a vite config
-export default defineConfig({
- plugins: [
- solid(),
- UnoCss({})
- ]
-});
diff --git a/packages/commands/tests/assets/sample_vite_config.txt b/packages/commands/tests/assets/sample_vite_config.txt
deleted file mode 100644
index b501a09..0000000
--- a/packages/commands/tests/assets/sample_vite_config.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-import solid from "solid-start/vite";
-// Simulates a vite config
-export default defineConfig({
- plugins: [solid()],
-});
diff --git a/packages/commands/tests/config_manipulation.test.ts b/packages/commands/tests/config_manipulation.test.ts
deleted file mode 100644
index d94c0fb..0000000
--- a/packages/commands/tests/config_manipulation.test.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { describe, expect, it, vi } from "vitest";
-import { handleAdd } from "../src/handlers/add";
-import { readFile as readFile1 } from "fs";
-import { UPDATESQUEUE } from "../../utils/src/updates";
-const readFile = async (path: string): Promise => {
- return await new Promise((res) =>
- // Can't use readFile from fs/promises because we've mocked it
- readFile1(path, (_, data) => res(data.toString())),
- );
-};
-const removeWhitespace = (str: string) => str.replace(/\s/g, "");
-vi.mock("fs/promises", () => {
- return {
- readFile: async (name: string) => {
- if (name === "vite.config.ts") {
- const sampleConfig: string = await readFile("./packages/commands/tests/assets/sample_vite_config.txt");
- return sampleConfig;
- }
- return "{}";
- },
- writeFile: async (contents: string) => {
- return contents;
- },
- };
-});
-vi.mock("execa", () => {
- return { $: async () => ({ stdout: "" }) };
-});
-
-vi.mock("@clack/prompts", async () => {
- const actual: object = await vi.importActual("@clack/prompts");
- return {
- ...actual,
- confirm: async ({ message }: { message: string }) => true,
- };
-});
-
-vi.mock("@solid-cli/utils/updates", async () => {
- const actual: object = await vi.importActual("@solid-cli/utils/updates");
- return {
- ...actual,
- clearQueue: async () => {},
- };
-});
-
-vi.mock("../src/lib/utils/helpers.ts", async () => {
- return {
- getViteConfig: async (): Promise => new Promise((r) => r("vite.config.ts")),
- fileExists: (path: string) =>
- path.includes("vite_config") || path.includes("root.tsx") || path.includes("index.tsx"),
- getRootFile: async (): Promise => new Promise((r) => r("./src/root.tsx")),
- };
-});
-describe("Update config", () => {
- it(
- "Adds a plugin properly to the config",
- async () => {
- await handleAdd(["unocss"]);
-
- const expected = await readFile("./packages/commands/tests/assets/sample_unocss_result.txt");
- // @ts-ignore
- const newConfig = UPDATESQUEUE.find((u) => u.name === "vite.config.ts")?.contents;
- expect(removeWhitespace(expected)).toBe(removeWhitespace(newConfig));
- },
- { timeout: 50000 },
- );
-});
diff --git a/packages/commands/tests/package_installs.test.ts b/packages/commands/tests/package_installs.test.ts
deleted file mode 100644
index c0eff16..0000000
--- a/packages/commands/tests/package_installs.test.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { expect, describe, it } from "vitest";
-
-describe("Package Installs", () => {
- it("should install packages correctly", () => {
- expect(true).toBe(true);
- });
-});
diff --git a/packages/commands/tsconfig.json b/packages/commands/tsconfig.json
deleted file mode 100644
index ecaf1e3..0000000
--- a/packages/commands/tsconfig.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "useDefineForClassFields": true,
- "module": "ESNext",
- "skipLibCheck": true,
- "declaration": true,
- "emitDeclarationOnly": true,
- "moduleResolution": "Bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "allowSyntheticDefaultImports": true,
- "strict": true,
- // "noUnusedLocals": true,
- // "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
- "outDir": "types"
- },
- "include": ["src/*"]
-}
diff --git a/packages/commands/tsup.config.ts b/packages/commands/tsup.config.ts
deleted file mode 100644
index 0399ef0..0000000
--- a/packages/commands/tsup.config.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defineConfig } from "tsup";
-import metaUrlPlugin from "@chialab/esbuild-plugin-meta-url";
-
-export default defineConfig({
- entry: ["src/index.ts"],
- target: "esnext",
- format: "esm",
- splitting: false,
- sourcemap: true,
- clean: true,
- esbuildPlugins: [metaUrlPlugin()],
-});
diff --git a/packages/core/.gitignore b/packages/core/.gitignore
deleted file mode 100644
index bf96551..0000000
--- a/packages/core/.gitignore
+++ /dev/null
@@ -1,133 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-.pnpm-debug.log*
-
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-*.lcov
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (https://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# Snowpack dependency directory (https://snowpack.dev/)
-web_modules/
-
-# TypeScript cache
-*.tsbuildinfo
-
-# Optional npm cache directory
-.npm
-
-# Optional swc cache
-.swc
-
-# Optional eslint cache
-.eslintcache
-
-# Optional stylelint cache
-.stylelintcache
-
-# Microbundle cache
-.rpt2_cache/
-.rts2_cache_cjs/
-.rts2_cache_es/
-.rts2_cache_umd/
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variable files
-.env
-.env.development.local
-.env.test.local
-.env.production.local
-.env.local
-
-# parcel-bundler cache (https://parceljs.org/)
-.cache
-.parcel-cache
-
-# Next.js build output
-.next
-out
-
-# Nuxt.js build / generate output
-.nuxt
-dist
-
-# Gatsby files
-.cache/
-# Comment in the public line in if your project uses Gatsby and not Next.js
-# https://nextjs.org/blog/next-9-1#public-directory-support
-# public
-
-# vuepress build output
-.vuepress/dist
-
-# vuepress v2.x temp and cache directory
-.temp
-.cache
-
-# Docusaurus cache and generated files
-.docusaurus
-
-# Serverless directories
-.serverless/
-
-# FuseBox cache
-.fusebox/
-
-# DynamoDB Local files
-.dynamodb/
-
-# TernJS port file
-.tern-port
-
-# Stores VSCode versions used for testing VSCode extensions
-.vscode-test
-
-# yarn v2
-.yarn/cache
-.yarn/unplugged
-.yarn/build-state.yml
-.yarn/install-state.gz
-.pnp.*
diff --git a/packages/core/README.md b/packages/core/README.md
deleted file mode 100644
index 51fc211..0000000
--- a/packages/core/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# @solid-cli/core
-
-The main entry point package for the CLI. To install, just run `npm i -g @solid-cli/core`, and invoke with the `solid` command
diff --git a/packages/core/package.json b/packages/core/package.json
deleted file mode 100644
index 7079f2c..0000000
--- a/packages/core/package.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "@solid-cli/core",
- "version": "0.0.15",
- "description": "A CLI for Solid",
- "author": "Thomas Beer & Rahul Batra",
- "license": "MIT",
- "homepage": "https://solid-cli.netlify.app",
- "repository": {
- "type": "git",
- "url": "https://github.com/solidjs-community/solid-cli"
- },
- "keywords": [
- "solidjs",
- "solid",
- "cli"
- ],
- "main": "dist/index.mjs",
- "bin": {
- "solid": "./dist/index.mjs"
- },
- "files": [
- "dist"
- ],
- "dependencies": {
- "@clack/core": "0.3.2",
- "@clack/prompts": "0.6.3",
- "@solid-cli/commands": "workspace:*",
- "@solid-cli/reactivity": "workspace:*",
- "@solid-cli/swc-plugin-solid-cli": "workspace:*",
- "@solid-cli/ui": "workspace:*",
- "@solid-cli/utils": "workspace:*",
- "@solid-cli/transpiler": "workspace:*",
- "@swc/core": "^1.3.75",
- "cmd-ts": "^0.12.1",
- "detect-package-manager": "^2.0.1",
- "execa": "^7.2.0",
- "picocolors": "^1.0.0",
- "smol-toml": "^1.1.1",
- "tiny-updater": "^3.5.1"
- },
- "scripts": {
- "start": "jiti ./src/index.ts",
- "build": "tsc && tsup"
- },
- "devDependencies": {
- "@chialab/esbuild-plugin-meta-url": "^0.17.7",
- "@types/node": "^20.4.9",
- "jiti": "^1.19.1",
- "tsup": "^7.2.0",
- "typescript": "^5.1.6"
- },
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/packages/core/pnpm-lock.yaml b/packages/core/pnpm-lock.yaml
deleted file mode 100644
index 95ddd57..0000000
--- a/packages/core/pnpm-lock.yaml
+++ /dev/null
@@ -1,1164 +0,0 @@
-lockfileVersion: '6.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-dependencies:
- '@clack/core':
- specifier: 0.3.2
- version: 0.3.2
- '@clack/prompts':
- specifier: 0.6.3
- version: 0.6.3
- '@swc/core':
- specifier: ^1.3.68
- version: 1.3.68
- cmd-ts:
- specifier: ^0.12.1
- version: 0.12.1
- detect-package-manager:
- specifier: ^2.0.1
- version: 2.0.1
- execa:
- specifier: ^7.1.1
- version: 7.1.1
- picocolors:
- specifier: ^1.0.0
- version: 1.0.0
- tsup:
- specifier: ^7.1.0
- version: 7.1.0(@swc/core@1.3.68)
-
-devDependencies:
- '@types/node':
- specifier: ^20.4.1
- version: 20.4.1
- jiti:
- specifier: ^1.17.0
- version: 1.17.0
-
-packages:
-
- /@clack/core@0.3.2:
- resolution: {integrity: sha512-FZnsNynwGDIDktx6PEZK1EuCkFpY4ldEX6VYvfl0dqeoLPb9Jpw1xoUXaVcGR8ExmYNm1w2vdGdJkEUYD/2pqg==}
- dependencies:
- picocolors: 1.0.0
- sisteransi: 1.0.5
- dev: false
-
- /@clack/prompts@0.6.3:
- resolution: {integrity: sha512-AM+kFmAHawpUQv2q9+mcB6jLKxXGjgu/r2EQjEwujgpCdzrST6BJqYw00GRn56/L/Izw5U7ImoLmy00X/r80Pw==}
- dependencies:
- '@clack/core': 0.3.2
- picocolors: 1.0.0
- sisteransi: 1.0.5
- dev: false
- bundledDependencies:
- - is-unicode-supported
-
- /@esbuild/android-arm64@0.18.12:
- resolution: {integrity: sha512-BMAlczRqC/LUt2P97E4apTBbkvS9JTJnp2DKFbCwpZ8vBvXVbNdqmvzW/OsdtI/+mGr+apkkpqGM8WecLkPgrA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/android-arm@0.18.12:
- resolution: {integrity: sha512-LIxaNIQfkFZbTLb4+cX7dozHlAbAshhFE5PKdro0l+FnCpx1GDJaQ2WMcqm+ToXKMt8p8Uojk/MFRuGyz3V5Sw==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/android-x64@0.18.12:
- resolution: {integrity: sha512-zU5MyluNsykf5cOJ0LZZZjgAHbhPJ1cWfdH1ZXVMXxVMhEV0VZiZXQdwBBVvmvbF28EizeK7obG9fs+fpmS0eQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/darwin-arm64@0.18.12:
- resolution: {integrity: sha512-zUZMep7YONnp6954QOOwEBwFX9svlKd3ov6PkxKd53LGTHsp/gy7vHaPGhhjBmEpqXEXShi6dddjIkmd+NgMsA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/darwin-x64@0.18.12:
- resolution: {integrity: sha512-ohqLPc7i67yunArPj1+/FeeJ7AgwAjHqKZ512ADk3WsE3FHU9l+m5aa7NdxXr0HmN1bjDlUslBjWNbFlD9y12Q==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/freebsd-arm64@0.18.12:
- resolution: {integrity: sha512-GIIHtQXqgeOOqdG16a/A9N28GpkvjJnjYMhOnXVbn3EDJcoItdR58v/pGN31CHjyXDc8uCcRnFWmqaJt24AYJg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/freebsd-x64@0.18.12:
- resolution: {integrity: sha512-zK0b9a1/0wZY+6FdOS3BpZcPc1kcx2G5yxxfEJtEUzVxI6n/FrC2Phsxj/YblPuBchhBZ/1wwn7AyEBUyNSa6g==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-arm64@0.18.12:
- resolution: {integrity: sha512-JKgG8Q/LL/9sw/iHHxQyVMoQYu3rU3+a5Z87DxC+wAu3engz+EmctIrV+FGOgI6gWG1z1+5nDDbXiRMGQZXqiw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-arm@0.18.12:
- resolution: {integrity: sha512-y75OijvrBE/1XRrXq1jtrJfG26eHeMoqLJ2dwQNwviwTuTtHGCojsDO6BJNF8gU+3jTn1KzJEMETytwsFSvc+Q==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-ia32@0.18.12:
- resolution: {integrity: sha512-yoRIAqc0B4lDIAAEFEIu9ttTRFV84iuAl0KNCN6MhKLxNPfzwCBvEMgwco2f71GxmpBcTtn7KdErueZaM2rEvw==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-loong64@0.18.12:
- resolution: {integrity: sha512-qYgt3dHPVvf/MgbIBpJ4Sup/yb9DAopZ3a2JgMpNKIHUpOdnJ2eHBo/aQdnd8dJ21X/+sS58wxHtA9lEazYtXQ==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-mips64el@0.18.12:
- resolution: {integrity: sha512-wHphlMLK4ufNOONqukELfVIbnGQJrHJ/mxZMMrP2jYrPgCRZhOtf0kC4yAXBwnfmULimV1qt5UJJOw4Kh13Yfg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-ppc64@0.18.12:
- resolution: {integrity: sha512-TeN//1Ft20ZZW41+zDSdOI/Os1bEq5dbvBvYkberB7PHABbRcsteeoNVZFlI0YLpGdlBqohEpjrn06kv8heCJg==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-riscv64@0.18.12:
- resolution: {integrity: sha512-AgUebVS4DoAblBgiB2ACQ/8l4eGE5aWBb8ZXtkXHiET9mbj7GuWt3OnsIW/zX+XHJt2RYJZctbQ2S/mDjbp0UA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-s390x@0.18.12:
- resolution: {integrity: sha512-dJ3Rb3Ei2u/ysSXd6pzleGtfDdc2MuzKt8qc6ls8vreP1G3B7HInX3i7gXS4BGeVd24pp0yqyS7bJ5NHaI9ing==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/linux-x64@0.18.12:
- resolution: {integrity: sha512-OrNJMGQbPaVyHHcDF8ybNSwu7TDOfX8NGpXCbetwOSP6txOJiWlgQnRymfC9ocR1S0Y5PW0Wb1mV6pUddqmvmQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/netbsd-x64@0.18.12:
- resolution: {integrity: sha512-55FzVCAiwE9FK8wWeCRuvjazNRJ1QqLCYGZVB6E8RuQuTeStSwotpSW4xoRGwp3a1wUsaVCdYcj5LGCASVJmMg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/openbsd-x64@0.18.12:
- resolution: {integrity: sha512-qnluf8rfb6Y5Lw2tirfK2quZOBbVqmwxut7GPCIJsM8lc4AEUj9L8y0YPdLaPK0TECt4IdyBdBD/KRFKorlK3g==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/sunos-x64@0.18.12:
- resolution: {integrity: sha512-+RkKpVQR7bICjTOPUpkTBTaJ4TFqQBX5Ywyd/HSdDkQGn65VPkTsR/pL4AMvuMWy+wnXgIl4EY6q4mVpJal8Kg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/win32-arm64@0.18.12:
- resolution: {integrity: sha512-GNHuciv0mFM7ouzsU0+AwY+7eV4Mgo5WnbhfDCQGtpvOtD1vbOiRjPYG6dhmMoFyBjj+pNqQu2X+7DKn0KQ/Gw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/win32-ia32@0.18.12:
- resolution: {integrity: sha512-kR8cezhYipbbypGkaqCTWIeu4zID17gamC8YTPXYtcN3E5BhhtTnwKBn9I0PJur/T6UVwIEGYzkffNL0lFvxEw==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
- /@esbuild/win32-x64@0.18.12:
- resolution: {integrity: sha512-O0UYQVkvfM/jO8a4OwoV0mAKSJw+mjWTAd1MJd/1FCX6uiMdLmMRPK/w6e9OQ0ob2WGxzIm9va/KG0Ja4zIOgg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
- /@jridgewell/gen-mapping@0.3.3:
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.18
- dev: false
-
- /@jridgewell/resolve-uri@3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
- engines: {node: '>=6.0.0'}
- dev: false
-
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
- dev: false
-
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: false
-
- /@jridgewell/sourcemap-codec@1.4.15:
- resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: false
-
- /@jridgewell/trace-mapping@0.3.18:
- resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: false
-
- /@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: false
-
- /@nodelib/fs.stat@2.0.5:
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
- dev: false
-
- /@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.15.0
- dev: false
-
- /@swc/core-darwin-arm64@1.3.68:
- resolution: {integrity: sha512-Z5pNxeuP2NxpOHTzDQkJs0wAPLnTlglZnR3WjObijwvdwT/kw1Y5EPDKM/BVSIeG40SPMkDLBbI0aj0qyXzrBA==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-darwin-x64@1.3.68:
- resolution: {integrity: sha512-ZHl42g6yXhfX4PzAQ0BNvBXpt/OcbAHfubWRN6eXELK3fiNnxL7QBW1if7iizlq6iA+Mj1pwHyyUit1pz0+fgA==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-linux-arm-gnueabihf@1.3.68:
- resolution: {integrity: sha512-Mk8f6KCOQ2CNAR4PtWajIjS6XKSSR7ZYDOCf1GXRxhS3qEyQH7V8elWvqWYqHcT4foO60NUmxA/NOM/dQrdO1A==}
- engines: {node: '>=10'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-linux-arm64-gnu@1.3.68:
- resolution: {integrity: sha512-RhBllggh9t9sIxaRgRcGrVaS7fDk6KsIqR6b9+dwU5OyDr4ZyHWw1ZaH/1/HAebuXYhNBjoNUiRtca6lKRIPgQ==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-linux-arm64-musl@1.3.68:
- resolution: {integrity: sha512-8K3zjU+tFgn6yGDEeD343gkKaHU9dhz77NiVkI1VzwRaT/Ag5pwl5eMQ1yStm8koNFzn3zq6rGjHfI5g2yI5Wg==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-linux-x64-gnu@1.3.68:
- resolution: {integrity: sha512-4xAnvsBOyeTL0AB8GWlRKDM/hsysJ5jr5qvdKKI3rZfJgnnxl/xSX6TJKPsJ8gygfUJ3BmfCbmUmEyeDZ3YPvA==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-linux-x64-musl@1.3.68:
- resolution: {integrity: sha512-RCpaBo1fcpy1EFdjF+I7N4lfzOaHXVV0iMw/ABM+0PD6tp3V/9pxsguaZyeAHyEiUlDA6PZ4TfXv5zfnXEgW4Q==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-win32-arm64-msvc@1.3.68:
- resolution: {integrity: sha512-v2WZvXrSslYEpY1nqpItyamL4DyaJinmOkXvM8Bc1LLKU5rGuvmBdjUYg/5Y+o0AUynuiWubpgHNOkBWiCvfqw==}
- engines: {node: '>=10'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-win32-ia32-msvc@1.3.68:
- resolution: {integrity: sha512-HH5NJrIdzkJs+1xxprie0qSCMBeL9yeEhcC1yZTzYv8bwmabOUSdtKIqS55iYP/2hLWn9CTbvKPmLOIhCopW3Q==}
- engines: {node: '>=10'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core-win32-x64-msvc@1.3.68:
- resolution: {integrity: sha512-9HZVtLQUgK8r/yXQdwe0VBexbIcrY6+fBROhs7AAPWdewpaUeLkwQEJk6TbYr9CQuHw26FFGg6SjwAiqXF+kgQ==}
- engines: {node: '>=10'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
- /@swc/core@1.3.68:
- resolution: {integrity: sha512-njGQuJO+Wy06dEayt70cf0c/KI3HGjm4iW9LLViVLBuYNzJ4SSdNfzejludzufu6im+dsDJ0i3QjgWhAIcVHMQ==}
- engines: {node: '>=10'}
- requiresBuild: true
- peerDependencies:
- '@swc/helpers': ^0.5.0
- peerDependenciesMeta:
- '@swc/helpers':
- optional: true
- optionalDependencies:
- '@swc/core-darwin-arm64': 1.3.68
- '@swc/core-darwin-x64': 1.3.68
- '@swc/core-linux-arm-gnueabihf': 1.3.68
- '@swc/core-linux-arm64-gnu': 1.3.68
- '@swc/core-linux-arm64-musl': 1.3.68
- '@swc/core-linux-x64-gnu': 1.3.68
- '@swc/core-linux-x64-musl': 1.3.68
- '@swc/core-win32-arm64-msvc': 1.3.68
- '@swc/core-win32-ia32-msvc': 1.3.68
- '@swc/core-win32-x64-msvc': 1.3.68
- dev: false
-
- /@types/node@20.4.1:
- resolution: {integrity: sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==}
- dev: true
-
- /ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
- dev: false
-
- /ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
- dependencies:
- color-convert: 2.0.1
- dev: false
-
- /any-promise@1.3.0:
- resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
- dev: false
-
- /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: false
-
- /array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
- dev: false
-
- /balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: false
-
- /binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
- dev: false
-
- /brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
- dev: false
-
- /braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
- dependencies:
- fill-range: 7.0.1
- dev: false
-
- /bundle-require@4.0.1(esbuild@0.18.12):
- resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- peerDependencies:
- esbuild: '>=0.17'
- dependencies:
- esbuild: 0.18.12
- load-tsconfig: 0.2.5
- dev: false
-
- /cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
- dev: false
-
- /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: false
-
- /chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- 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.2
- dev: false
-
- /cmd-ts@0.12.1:
- resolution: {integrity: sha512-k93f6LgFEzx7/vBy5qV+tu1VI8YuH0DZmwNXPvRaDR4Qp7Fl9+pUSylX/CKHrWoKqHMJjNOLb1NeYTvHOjQ2Kw==}
- dependencies:
- chalk: 4.1.2
- debug: 4.3.4
- didyoumean: 1.2.2
- strip-ansi: 6.0.1
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /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: false
-
- /color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- dev: false
-
- /commander@4.1.1:
- resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
- engines: {node: '>= 6'}
- dev: false
-
- /concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- dev: false
-
- /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: false
-
- /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: false
-
- /detect-package-manager@2.0.1:
- resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==}
- engines: {node: '>=12'}
- dependencies:
- execa: 5.1.1
- dev: false
-
- /didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- dev: false
-
- /dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
- dependencies:
- path-type: 4.0.0
- dev: false
-
- /esbuild@0.18.12:
- resolution: {integrity: sha512-XuOVLDdtsDslXStStduT41op21Ytmf4/BDS46aa3xPJ7X5h2eMWBF1oAe3QjUH3bDksocNXgzGUZ7XHIBya6Tg==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.18.12
- '@esbuild/android-arm64': 0.18.12
- '@esbuild/android-x64': 0.18.12
- '@esbuild/darwin-arm64': 0.18.12
- '@esbuild/darwin-x64': 0.18.12
- '@esbuild/freebsd-arm64': 0.18.12
- '@esbuild/freebsd-x64': 0.18.12
- '@esbuild/linux-arm': 0.18.12
- '@esbuild/linux-arm64': 0.18.12
- '@esbuild/linux-ia32': 0.18.12
- '@esbuild/linux-loong64': 0.18.12
- '@esbuild/linux-mips64el': 0.18.12
- '@esbuild/linux-ppc64': 0.18.12
- '@esbuild/linux-riscv64': 0.18.12
- '@esbuild/linux-s390x': 0.18.12
- '@esbuild/linux-x64': 0.18.12
- '@esbuild/netbsd-x64': 0.18.12
- '@esbuild/openbsd-x64': 0.18.12
- '@esbuild/sunos-x64': 0.18.12
- '@esbuild/win32-arm64': 0.18.12
- '@esbuild/win32-ia32': 0.18.12
- '@esbuild/win32-x64': 0.18.12
- dev: false
-
- /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: false
-
- /execa@7.1.1:
- resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==}
- 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.1.0
- onetime: 6.0.0
- signal-exit: 3.0.7
- strip-final-newline: 3.0.0
- dev: false
-
- /fast-glob@3.3.0:
- resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==}
- 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: false
-
- /fastq@1.15.0:
- resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
- dependencies:
- reusify: 1.0.4
- dev: false
-
- /fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
- dependencies:
- to-regex-range: 5.0.1
- dev: false
-
- /fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- dev: false
-
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
- /get-stream@6.0.1:
- resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
- engines: {node: '>=10'}
- dev: false
-
- /glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
- dependencies:
- is-glob: 4.0.3
- dev: false
-
- /glob@7.1.6:
- resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
- dev: false
-
- /globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.0
- ignore: 5.2.4
- merge2: 1.4.1
- slash: 3.0.0
- dev: false
-
- /has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
- dev: false
-
- /human-signals@2.1.0:
- resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
- engines: {node: '>=10.17.0'}
- dev: false
-
- /human-signals@4.3.1:
- resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
- engines: {node: '>=14.18.0'}
- dev: false
-
- /ignore@5.2.4:
- resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
- engines: {node: '>= 4'}
- dev: false
-
- /inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
- dev: false
-
- /inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- dev: false
-
- /is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
- dependencies:
- binary-extensions: 2.2.0
- dev: false
-
- /is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
- dev: false
-
- /is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
- dependencies:
- is-extglob: 2.1.1
- dev: false
-
- /is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
- dev: false
-
- /is-stream@2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
- dev: false
-
- /is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: false
-
- /isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- dev: false
-
- /jiti@1.17.0:
- resolution: {integrity: sha512-CByzPgFqYoB9odEeef7GNmQ3S5THIBOtzRYoSCya2Sv27AuQxy2jgoFjQ6VTF53xsq1MXRm+YWNvOoDHUAteOw==}
- hasBin: true
- dev: true
-
- /joycon@3.1.1:
- resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
- engines: {node: '>=10'}
- dev: false
-
- /lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
- dev: false
-
- /lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: false
-
- /load-tsconfig@0.2.5:
- resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: false
-
- /lodash.sortby@4.7.0:
- resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
- dev: false
-
- /merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- dev: false
-
- /merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
- dev: false
-
- /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: false
-
- /mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
- dev: false
-
- /mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
- dev: false
-
- /minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- dependencies:
- brace-expansion: 1.1.11
- dev: false
-
- /ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
- dev: false
-
- /mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
- dependencies:
- any-promise: 1.3.0
- object-assign: 4.1.1
- thenify-all: 1.6.0
- dev: false
-
- /normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
- dev: false
-
- /npm-run-path@4.0.1:
- resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
- engines: {node: '>=8'}
- dependencies:
- path-key: 3.1.1
- dev: false
-
- /npm-run-path@5.1.0:
- resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- path-key: 4.0.0
- dev: false
-
- /object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
- dev: false
-
- /once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- dependencies:
- wrappy: 1.0.2
- dev: false
-
- /onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
- dependencies:
- mimic-fn: 2.1.0
- dev: false
-
- /onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
- dependencies:
- mimic-fn: 4.0.0
- dev: false
-
- /path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
- dev: false
-
- /path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
- dev: false
-
- /path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
- dev: false
-
- /path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
- dev: false
-
- /picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: false
-
- /picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
- dev: false
-
- /pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
- engines: {node: '>= 6'}
- dev: false
-
- /postcss-load-config@4.0.1:
- resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
- engines: {node: '>= 14'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
- dependencies:
- lilconfig: 2.1.0
- yaml: 2.3.1
- dev: false
-
- /punycode@2.3.0:
- resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
- engines: {node: '>=6'}
- dev: false
-
- /queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- dev: false
-
- /readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
- dependencies:
- picomatch: 2.3.1
- dev: false
-
- /resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
- dev: false
-
- /reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- dev: false
-
- /rollup@3.26.2:
- resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==}
- engines: {node: '>=14.18.0', npm: '>=8.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: false
-
- /run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- dependencies:
- queue-microtask: 1.2.3
- dev: false
-
- /shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
- dependencies:
- shebang-regex: 3.0.0
- dev: false
-
- /shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
- dev: false
-
- /signal-exit@3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- dev: false
-
- /sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- dev: false
-
- /slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
- dev: false
-
- /source-map@0.8.0-beta.0:
- resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
- engines: {node: '>= 8'}
- dependencies:
- whatwg-url: 7.1.0
- dev: false
-
- /strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
- dependencies:
- ansi-regex: 5.0.1
- dev: false
-
- /strip-final-newline@2.0.0:
- resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
- engines: {node: '>=6'}
- dev: false
-
- /strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
- dev: false
-
- /sucrase@3.32.0:
- resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==}
- engines: {node: '>=8'}
- hasBin: true
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- commander: 4.1.1
- glob: 7.1.6
- lines-and-columns: 1.2.4
- mz: 2.7.0
- pirates: 4.0.6
- ts-interface-checker: 0.1.13
- dev: false
-
- /supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
- dependencies:
- has-flag: 4.0.0
- dev: false
-
- /thenify-all@1.6.0:
- resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
- engines: {node: '>=0.8'}
- dependencies:
- thenify: 3.3.1
- dev: false
-
- /thenify@3.3.1:
- resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
- dependencies:
- any-promise: 1.3.0
- dev: false
-
- /to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
- dependencies:
- is-number: 7.0.0
- dev: false
-
- /tr46@1.0.1:
- resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
- dependencies:
- punycode: 2.3.0
- dev: false
-
- /tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
- dev: false
-
- /ts-interface-checker@0.1.13:
- resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
- dev: false
-
- /tsup@7.1.0(@swc/core@1.3.68):
- resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==}
- engines: {node: '>=16.14'}
- hasBin: true
- peerDependencies:
- '@swc/core': ^1
- postcss: ^8.4.12
- typescript: '>=4.1.0'
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- postcss:
- optional: true
- typescript:
- optional: true
- dependencies:
- '@swc/core': 1.3.68
- bundle-require: 4.0.1(esbuild@0.18.12)
- cac: 6.7.14
- chokidar: 3.5.3
- debug: 4.3.4
- esbuild: 0.18.12
- execa: 5.1.1
- globby: 11.1.0
- joycon: 3.1.1
- postcss-load-config: 4.0.1
- resolve-from: 5.0.0
- rollup: 3.26.2
- source-map: 0.8.0-beta.0
- sucrase: 3.32.0
- tree-kill: 1.2.2
- transitivePeerDependencies:
- - supports-color
- - ts-node
- dev: false
-
- /webidl-conversions@4.0.2:
- resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
- dev: false
-
- /whatwg-url@7.1.0:
- resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
- dependencies:
- lodash.sortby: 4.7.0
- tr46: 1.0.1
- webidl-conversions: 4.0.2
- dev: false
-
- /which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
- dependencies:
- isexe: 2.0.0
- dev: false
-
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- dev: false
-
- /yaml@2.3.1:
- resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}
- engines: {node: '>= 14'}
- dev: false
diff --git a/packages/core/src/commands/index.ts b/packages/core/src/commands/index.ts
deleted file mode 100644
index e06da10..0000000
--- a/packages/core/src/commands/index.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-import { openInBrowser } from "@solid-cli/utils";
-import { startCommands } from "./start";
-import * as p from "@clack/prompts";
-import { boolean, command, flag, optional, positional, restPositionals, string } from "cmd-ts";
-import { oneOf } from "@solid-cli/utils";
-import { cancelable } from "@solid-cli/ui";
-import { PossibleFields, setField, t } from "@solid-cli/utils";
-import { spinnerify } from "@solid-cli/ui";
-import { handleNew, handleAdd } from "@solid-cli/commands";
-const add = command({
- name: "add",
- description: t.ADD_DESC,
- args: {
- packages: restPositionals({
- type: string,
- displayName: "Package Name",
- }),
- forceTransform: flag({ type: boolean, long: "force", short: "f" }),
- },
- handler: async ({ packages, forceTransform }) => {
- await handleAdd(packages, forceTransform);
- },
-});
-const new_ = command({
- name: "new",
- description: t.NEW_DESC,
- args: {
- variation: positional({
- type: optional(oneOf(["bare", "ts", "js"] as const)),
- displayName: t.NEW_VARIATION_DESC,
- description: "",
- }),
- name: positional({
- type: optional(string),
- displayName: t.PROJECT_NAME,
- description: t.NEW_NAME_DESC,
- }),
- stackblitz: flag({ type: boolean, long: "stackblitz", short: "s" }),
- },
- async handler({ variation, name, stackblitz }) {
- if (!name && variation) {
- const _name = await cancelable(
- p.text({
- message: t.PROJECT_NAME,
- placeholder: `solid-${variation}`,
- defaultValue: `solid-${variation}`,
- }),
- );
- name = _name;
- }
- await handleNew(variation, name, stackblitz);
- },
-});
-const docs = command({
- name: "docs",
- args: {
- keyword: positional({ type: optional(string), displayName: "Keyword" }),
- open: flag({ type: boolean, long: "open", short: "o" }),
- },
- async handler({ keyword, open }) {
- if (!keyword) {
- if (open) {
- await spinnerify({
- startText: "Opening",
- finishText: "Opened",
- fn: () => openInBrowser("https://docs.solidjs.com"),
- });
- return;
- }
- p.log.message("The solid documentation is available at https://docs.solidjs.com");
- return;
- }
- await spinnerify({
- startText: "Opening",
- finishText: "Opened",
- fn: () =>
- openInBrowser(
- `https://www.google.com/search?q=${keyword}+site:docs.solidjs.com+OR+site:start.solidjs.com+OR+site:solidjs.com`,
- ),
- });
- },
-});
-const set = command({
- name: "set",
- args: { field: positional({ type: oneOf(PossibleFields) }), value: positional({ type: string }) },
- async handler({ field, value }) {
- await setField(field, value);
- },
-});
-const playground = command({
- name: "playground",
- args: {},
- async handler() {
- await spinnerify({
- startText: "Opening",
- finishText: "Opened",
- fn: () => openInBrowser("https://playground.solidjs.com"),
- });
- },
-});
-export default {
- add,
- docs,
- new: new_,
- set,
- start: startCommands,
- playground,
-};
diff --git a/packages/core/src/commands/start.ts b/packages/core/src/commands/start.ts
deleted file mode 100644
index 5900eb2..0000000
--- a/packages/core/src/commands/start.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { command, flag, optional, positional, string, subcommands } from "cmd-ts";
-import { oneOf } from "@solid-cli/utils";
-import { t } from "@solid-cli/utils";
-import {
- handleAdapter,
- handleApi,
- handleData,
- handleMode,
- handleRoute,
- supportedAdapters,
- supportedModes,
-} from "@solid-cli/commands";
-
-const mode = command({
- name: "mode",
- args: {
- mode: positional({
- type: optional(oneOf(supportedModes)),
- displayName: "Mode",
- description: t.START_MODE_DESC,
- }),
- },
- async handler({ mode }) {
- await handleMode(mode);
- },
-});
-const route = command({
- name: "route",
- args: {
- path: positional({ type: optional(string), displayName: "Route Path" }),
- name: positional({
- type: optional(string),
- displayName: "Route name",
- description: t.START_ROUTE_DESC,
- }),
- },
- async handler({ path, name }) {
- await handleRoute(path, name);
- },
-});
-const data = command({
- name: "data",
- args: {
- path: positional({ type: optional(string), displayName: "Data Path" }),
- name: positional({
- type: optional(string),
- displayName: "Data name",
- description: t.START_DATA_DESC,
- }),
- },
- async handler({ path, name }) {
- await handleData(path, name);
- },
-});
-const adapter = command({
- name: "adapter",
- args: {
- name: positional({
- type: optional(oneOf(supportedAdapters)),
- displayName: t.START_ADAPTER_DISPLAYNAME,
- }),
- forceTransform: flag({ short: "f", long: "force" }),
- },
- async handler({ name, forceTransform }) {
- await handleAdapter(name, forceTransform);
- },
-});
-
-const api = command({
- name: "api",
- args: {
- path: positional({ type: optional(string), displayName: "Api Path" }),
- name: positional({
- type: optional(string),
- displayName: t.START_API_DISPLAYNAME,
- description: t.START_API_HINT,
- }),
- },
- async handler({ path, name }) {
- await handleApi(path, name);
- },
-});
-
-export const startCommands = subcommands({
- name: "start",
- description: "Commands specific to solid start",
- cmds: {
- mode,
- route,
- data,
- adapter,
- api,
- },
-});
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
deleted file mode 100644
index b51ce88..0000000
--- a/packages/core/src/index.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-#! /usr/bin/env node
-import { run, subcommands } from "cmd-ts";
-import * as p from "@clack/prompts";
-import color from "picocolors";
-import { t, setLocale, getField } from "@solid-cli/utils";
-import { name, version } from "../package.json";
-import { readConfig } from "@solid-cli/utils";
-import loadCommands from "./plugins/plugins_entry";
-import updater from "tiny-updater";
-import { createAsync } from "@solid-cli/reactivity";
-import {
- handleAdapter,
- handleAdd,
- handleApi,
- handleData,
- handleMode,
- handleNew,
- handleRoute,
-} from "@solid-cli/commands";
-const possibleActions = () =>
- [
- { value: "add", label: t.ACTION_ADD, hint: "solid add ..." },
- { value: "new", label: t.ACTION_NEW, hint: "solid new ..." },
- { value: "start", label: t.ACTION_START, hint: "solid start ..." },
- ] as const;
-
-export const provideStartSuggestions = async () => {
- let startAction = await p.select({
- message: t.SELECT_START_ACTION,
- options: [
- { value: "mode", label: t.START_MODE, hint: t.START_MODE_HINT },
- { value: "route", label: t.START_ROUTE, hint: t.START_ROUTE_HINT },
- { value: "data", label: t.START_DATA, hint: t.START_DATA_HINT },
- {
- value: "adapter",
- label: t.START_ADAPTER,
- hint: t.START_ADAPTER_HINT,
- },
- {
- value: "api",
- label: t.START_API,
- hint: t.START_API_HINT,
- },
- ],
- });
- switch (startAction) {
- case "mode":
- await handleMode();
- break;
- case "route":
- await handleRoute();
- break;
- case "data":
- await handleData();
- break;
- case "adapter":
- await handleAdapter();
- break;
- case "api":
- await handleApi();
- break;
- }
-};
-
-const provideSuggestions = async () => {
- type ActionType = ReturnType[number]["value"];
- let action = (await p.select({
- message: t.SELECT_ACTION,
- // This thing really doesn't like `as const` things
- options: possibleActions() as any,
- })) as ActionType;
- if (!action) return;
- switch (action) {
- case "add":
- await handleAdd();
- break;
- case "new":
- await handleNew();
- break;
- case "start":
- await provideStartSuggestions();
- break;
- }
-};
-
-const main = async () => {
- p.intro(`\n${color.bgCyan(color.black(" Solid-CLI "))}`);
- await readConfig();
- const needsUpdate = createAsync(async () => await updater({ name, version, ttl: 86_400_000 }));
- setLocale(getField("lang"));
- const cli = subcommands({
- name: "solid",
- cmds: await loadCommands(),
- version: version,
- });
- const args = process.argv.slice(2);
-
- if (args.length === 0) {
- await provideSuggestions();
- return;
- }
-
- if (args.length === 1 && args[0] === "start") {
- await provideStartSuggestions();
- return;
- }
-
- await run(cli, args);
-};
-main();
diff --git a/packages/core/src/plugins/plugins_entry.ts b/packages/core/src/plugins/plugins_entry.ts
deleted file mode 100644
index f1aec75..0000000
--- a/packages/core/src/plugins/plugins_entry.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { join } from "path";
-import { config } from "@solid-cli/utils";
-import defaultCommands from "../commands";
-
-const resolveImport = async (packagePath: string) => {
- const packageJson = await import(join(packagePath, "package.json"));
- return await import(join(packagePath, packageJson.module));
-};
-const loadUserCommands = async () => {
- const pluginPaths = config()["plugins"] as string[];
- if (!pluginPaths) return null;
- const imports = await Promise.all(pluginPaths.map((p) => resolveImport(p)));
- const importedCommands = imports.map((i) => i.default);
- let commands = {} as any;
- importedCommands.forEach((c) => {
- const name = c.name;
- commands[name] = c;
- });
- return commands;
-};
-const loadCommands = async () => {
- const cmds = {
- ...defaultCommands,
- ...(await loadUserCommands()),
- };
- return cmds;
-};
-export default loadCommands;
diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts
deleted file mode 100644
index 0399ef0..0000000
--- a/packages/core/tsup.config.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defineConfig } from "tsup";
-import metaUrlPlugin from "@chialab/esbuild-plugin-meta-url";
-
-export default defineConfig({
- entry: ["src/index.ts"],
- target: "esnext",
- format: "esm",
- splitting: false,
- sourcemap: true,
- clean: true,
- esbuildPlugins: [metaUrlPlugin()],
-});
diff --git a/packages/create-solid/CHANGELOG.md b/packages/create-solid/CHANGELOG.md
new file mode 100644
index 0000000..cc52156
--- /dev/null
+++ b/packages/create-solid/CHANGELOG.md
@@ -0,0 +1,115 @@
+# create-solid
+
+## 0.10.0
+
+### Minor Changes
+
+- Always scaffold from the latest templates
+
+ - Template downloads are no longer pinned to a baked-in solidjs/templates commit. Scaffolds come from live HEAD of the default branch, matching the `templates.json` manifest, so upstream template changes and dependency repins reach users without a CLI release.
+ - Removed the `SOLID_CLI_TEMPLATES_REF` environment override that shipped in 0.9.0, along with the pin it existed to escape.
+ - HEAD is resolved to a commit sha before downloading so the tarball can be cached under it and reused by later scaffolds. That lookup goes through api.github.com, which is rate limited to 60 requests/hour for unauthenticated users, so any failure — rate limited, offline, slow — falls back to fetching HEAD from the archive endpoint directly, uncached.
+ - Solid 2.0 is labelled "Solid 2.0 (RC)" in the project picker now that Solid 2.0 core is a release candidate. It stays listed first but not preselected.
+
+## 0.9.0
+
+### Minor Changes
+
+- 68caa9f: Solid 2.0 template support
+
+ - New "Solid 2.0" top-level project type scaffolding the `solid-v2/*` templates from solidjs/templates (basic, bare, fullstack, fullstack-tanstack, with-\*). Listed first but not preselected while Solid 2.0 core is in beta; existing flags (`-s`, `-v`, `-l`, `--v2`) keep their meaning, plus new `--solid` and `--ssr` flags.
+ - Optional streaming SSR on templates that support it (currently `basic`): a scaffold-time flip that sets `ssr: true` in `vite.config.ts`, adds the generic production `server.js`, and points the `start` script at it. Defaults to No.
+ - JavaScript variants of the Solid 2.0 templates via the existing sucrase TS→JS conversion (no `index.html` rewrite; `.ts`/`.tsx` references inside `vite.config` are retargeted, `.d.ts` files dropped, minimal `jsconfig.json`).
+ - Template lists, subdir paths and per-template flags are now read from a `templates.json` manifest at the templates repo HEAD (2s timeout), with silent fallback to the baked-in lists — so new templates and future repo reorganizations no longer require a CLI release.
+
+## 0.8.1
+
+### Patch Changes
+
+- make start v2 stable
+
+## 0.8.0
+
+### Minor Changes
+
+- support fetching without the github API (so fetching should no work when hitting the github api limit)
+
+## 0.6.14
+
+### Patch Changes
+
+- update dependencies and add to solid start v2 templates list
+
+## 0.6.13
+
+### Patch Changes
+
+- Keep showing `pnpm install` & `pnpm dev` commands when initialising a project in the current working directory
+
+## 0.6.12
+
+### Patch Changes
+
+- Update dependencies, add new template, and remove `cd` command if project is created in working directory
+
+## 0.6.11
+
+### Patch Changes
+
+- Rename `with-pages-router-file-based` to `with-vite-plugin-pages`
+
+## 0.6.10
+
+### Patch Changes
+
+- Fetch Vanilla templates from /vanilla subdirectory of solidjs/templates, rather than from repo root
+
+## 0.6.9
+
+### Patch Changes
+
+- Fetch Start templates from solidjs/templates, rather than the Start repo
+
+## 0.6.8
+
+### Patch Changes
+
+- Correctly perform TS->JS conversion by disabling ES transforms and preserving dynamic imports
+
+## 0.6.7
+
+### Patch Changes
+
+- Add `with-strict-csp` template to Start
+
+## 0.6.6
+
+### Patch Changes
+
+- Add CLI flags for creating `vanilla` and `library` projects
+
+## 0.6.5
+
+### Patch Changes
+
+- Don't add "Created with Solid CLI" text to README if it's already there
+
+## 0.6.4
+
+### Patch Changes
+
+- Update link in text added to project READMEs
+
+## 0.6.3
+
+### Patch Changes
+
+- Add more command line arguments
+
+## 0.6.1
+
+### Patch Changes
+
+- Fix regression from 0.5.x (.gitignore wasn't being written to new projects)
+
+## 0.6.0
diff --git a/packages/create-solid/README.md b/packages/create-solid/README.md
index 4849ea1..ce864de 100644
--- a/packages/create-solid/README.md
+++ b/packages/create-solid/README.md
@@ -1,5 +1,29 @@
-# @solid-cli/create-solid
+---
+description: Create Solid apps in one command with create-solid.
+---
-A minimal version of the [main CLI](https://www.npmjs.com/package/@solid-cli/core) just for creating new projects.
+# Create Solid
-Invoked with the `create-solid` command
+The easiest way to get started with Solid is by using `create-solid`. This CLI tool enables you to quickly start building a new Solid application, with everything set up for you. You can create a new app using the default SolidStart template or use one of the [Official SolidStart Examples](https://github.com/solidjs/solid-start/tree/main/examples). To get started, use the following command:
+
+```bash
+#or
+npm init solid@latest
+
+#or
+pnpm create solid@latest
+
+# or
+yarn create solid
+
+# or
+bunx create-solid
+```
+
+## Why use Create Solid?
+
+`create-solid` allows you to create a new Solid app within seconds. It includes a number of benefits:
+
+- **Interactive Experience**: Running `npm init solid@latest` (with no arguments) launches an interactive experience that guides you through setting up a project.
+- **Zero Dependencies**: Initializing a project is as quick as one second. Create Solid has zero runtime dependencies.
+- **Support for Examples**: Create Solid App can bootstrap your application using an example from the SolidStart official examples collection.
diff --git a/packages/create-solid/package.json b/packages/create-solid/package.json
index c9936c8..bb67865 100644
--- a/packages/create-solid/package.json
+++ b/packages/create-solid/package.json
@@ -1,8 +1,11 @@
{
- "name": "@solid-cli/create-solid",
- "version": "0.0.5",
- "description": "A stripped down Solid CLI just for creating new projects",
- "author": "Thomas Beer & Rahul Batra",
+ "name": "create-solid",
+ "version": "0.10.0",
+ "description": "Create Solid apps with low configuration",
+ "author": "Thomas Beer",
+ "contributors": [
+ "Rahul Batra"
+ ],
"license": "MIT",
"homepage": "https://solid-cli.netlify.app",
"repository": {
@@ -14,26 +17,27 @@
"solid",
"cli"
],
- "main": "dist/index.mjs",
+ "main": "./dist/index.mjs",
+ "module": "./dist/index.mjs",
"bin": {
- "create-solid": "./dist/index.mjs"
+ "create-solid": "./dist/bin.mjs"
},
"files": [
"dist"
],
- "dependencies": {
- "@solid-cli/commands": "workspace:*"
- },
"scripts": {
- "start": "jiti ./src/index.ts",
- "build": "tsc && tsup"
+ "start": "jiti ./src/bin.ts",
+ "build": "tsc && tsup",
+ "test": "vitest run"
},
"devDependencies": {
- "jiti": "^1.19.1",
- "tsup": "^7.2.0",
- "typescript": "^5.1.6"
+ "@clack/prompts": "1.7.0",
+ "picocolors": "^1.1.1",
+ "citty": "^0.2.2",
+ "@solid-cli/create": "workspace:*"
},
"publishConfig": {
"access": "public"
- }
+ },
+ "dependencies": {}
}
diff --git a/packages/create-solid/src/bin.ts b/packages/create-solid/src/bin.ts
new file mode 100644
index 0000000..5b848bd
--- /dev/null
+++ b/packages/create-solid/src/bin.ts
@@ -0,0 +1,11 @@
+#! /usr/bin/env node
+
+import { runMain } from "citty";
+import { createSolid } from "@solid-cli/create";
+import { intro } from "@clack/prompts";
+import color from "picocolors";
+import packageJson from "../package.json" with { type: "json" };
+
+intro(`\n${color.bgCyan(color.black(` Create-Solid v${packageJson.version}`))}`);
+
+runMain(createSolid(packageJson.version));
diff --git a/packages/create-solid/src/index.ts b/packages/create-solid/src/index.ts
deleted file mode 100644
index 43b55c4..0000000
--- a/packages/create-solid/src/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-#! /usr/bin/env node
-import { handleNew } from "@solid-cli/commands";
-const main = async () => {
- await handleNew();
-};
-main();
diff --git a/packages/create-solid/tsconfig.json b/packages/create-solid/tsconfig.json
index b6d4e3a..1115998 100644
--- a/packages/create-solid/tsconfig.json
+++ b/packages/create-solid/tsconfig.json
@@ -1,7 +1,5 @@
{
"compilerOptions": {
- "baseUrl": ".",
- "noEmit": true,
"module": "ESNext",
"target": "ESNext",
"moduleResolution": "Bundler",
@@ -9,6 +7,8 @@
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
- "resolveJsonModule": true
- }
+ "resolveJsonModule": true,
+ "noEmit": true
+ },
+ "include": ["src/*"]
}
diff --git a/packages/create-solid/tsup.config.ts b/packages/create-solid/tsup.config.ts
index d80d441..ed15cdf 100644
--- a/packages/create-solid/tsup.config.ts
+++ b/packages/create-solid/tsup.config.ts
@@ -1,10 +1,17 @@
import { defineConfig } from "tsup";
export default defineConfig({
- entry: ["src/index.ts"],
+ entry: ["src/bin.ts"],
target: "esnext",
format: "esm",
- splitting: false,
- sourcemap: true,
+ splitting: true,
+ bundle: true,
+ sourcemap: false,
clean: true,
+ treeshake: true,
+ minify: true,
+ banner: {
+ js: `import { createRequire } from "module";
+ const require = createRequire(import.meta.url);`,
+ },
});
diff --git a/packages/create/CHANGELOG.md b/packages/create/CHANGELOG.md
new file mode 100644
index 0000000..80a8250
--- /dev/null
+++ b/packages/create/CHANGELOG.md
@@ -0,0 +1,128 @@
+# @solid-cli/create
+
+## 0.10.0
+
+### Minor Changes
+
+- Always scaffold from the latest templates
+
+ - Template downloads are no longer pinned to a baked-in solidjs/templates commit. Scaffolds come from live HEAD of the default branch, matching the `templates.json` manifest, so upstream template changes and dependency repins reach users without a CLI release.
+ - Removed the `SOLID_CLI_TEMPLATES_REF` environment override that shipped in 0.9.0, along with the pin it existed to escape.
+ - HEAD is resolved to a commit sha before downloading so the tarball can be cached under it and reused by later scaffolds. That lookup goes through api.github.com, which is rate limited to 60 requests/hour for unauthenticated users, so any failure — rate limited, offline, slow — falls back to fetching HEAD from the archive endpoint directly, uncached.
+ - Solid 2.0 is labelled "Solid 2.0 (RC)" in the project picker now that Solid 2.0 core is a release candidate. It stays listed first but not preselected.
+
+## 0.9.0
+
+### Minor Changes
+
+- 68caa9f: Solid 2.0 template support
+
+ - New "Solid 2.0" top-level project type scaffolding the `solid-v2/*` templates from solidjs/templates (basic, bare, fullstack, fullstack-tanstack, with-\*). Listed first but not preselected while Solid 2.0 core is in beta; existing flags (`-s`, `-v`, `-l`, `--v2`) keep their meaning, plus new `--solid` and `--ssr` flags.
+ - Optional streaming SSR on templates that support it (currently `basic`): a scaffold-time flip that sets `ssr: true` in `vite.config.ts`, adds the generic production `server.js`, and points the `start` script at it. Defaults to No.
+ - JavaScript variants of the Solid 2.0 templates via the existing sucrase TS→JS conversion (no `index.html` rewrite; `.ts`/`.tsx` references inside `vite.config` are retargeted, `.d.ts` files dropped, minimal `jsconfig.json`).
+ - Template lists, subdir paths and per-template flags are now read from a `templates.json` manifest at the templates repo HEAD (2s timeout), with silent fallback to the baked-in lists — so new templates and future repo reorganizations no longer require a CLI release.
+
+## 0.8.1
+
+### Patch Changes
+
+- 5621942: SolidStart v2 is now Stable
+
+## 0.8.0
+
+### Minor Changes
+
+- support fetching without the github API (so fetching should no work when hitting the github api limit)
+
+### Patch Changes
+
+- Updated dependencies
+ - @solid-cli/utils@0.7.0
+
+## 0.6.14
+
+### Patch Changes
+
+- update dependencies and add to solid start v2 templates list
+- Updated dependencies
+ - @solid-cli/utils@0.6.3
+
+## 0.6.13
+
+### Patch Changes
+
+- Keep showing `pnpm install` & `pnpm dev` commands when initialising a project in the current working directory
+
+## 0.6.12
+
+### Patch Changes
+
+- Update dependencies, add new template, and remove `cd` command if project is created in working directory
+- Updated dependencies
+ - @solid-cli/utils@0.6.2
+
+## 0.6.11
+
+### Patch Changes
+
+- Rename `with-pages-router-file-based` to `with-vite-plugin-pages`
+
+## 0.6.10
+
+### Patch Changes
+
+- Fetch Vanilla templates from /vanilla subdirectory of solidjs/templates, rather than from repo root
+
+## 0.6.9
+
+### Patch Changes
+
+- Fetch Start templates from solidjs/templates, rather than the Start repo
+
+## 0.6.8
+
+### Patch Changes
+
+- Correctly perform TS->JS conversion by disabling ES transforms and preserving dynamic imports
+
+## 0.6.7
+
+### Patch Changes
+
+- Add `with-strict-csp` template to Start
+
+## 0.6.6
+
+### Patch Changes
+
+- Add CLI flags for creating `vanilla` and `library` projects
+
+## 0.6.5
+
+### Patch Changes
+
+- Don't add "Created with Solid CLI" text to README if it's already there
+
+## 0.6.4
+
+### Patch Changes
+
+- Update link in text added to project READMEs
+
+## 0.6.3
+
+### Patch Changes
+
+- Add more command line arguments
+
+## 0.6.1
+
+### Patch Changes
+
+- Fix regression from 0.5.x (.gitignore wasn't being written to new projects)
+
+## 0.6.0
+
+### Patch Changes
+
+- @solid-cli/utils@0.6.0
diff --git a/packages/create/README.md b/packages/create/README.md
new file mode 100644
index 0000000..74c4b75
--- /dev/null
+++ b/packages/create/README.md
@@ -0,0 +1,26 @@
+# @solid-cli/create
+
+A library for easily initialising Solid projects
+
+## Usage
+
+### Initialising a Vanilla project
+
+```ts
+import { createVanilla } from "@solid-cli/create";
+createVanilla({ template: "ts", destination: "./ts" });
+```
+
+### Initialising a Start project
+
+```ts
+import { createStart } from "@solid-cli/create";
+createStart({ template: "basic", destination: "./basic" });
+```
+
+### Initialising a Library project
+
+```ts
+import { createLibrary } from "@solid-cli/create";
+createLibrary({ destination: "./library-project" });
+```
diff --git a/packages/create/package.json b/packages/create/package.json
new file mode 100644
index 0000000..e745e00
--- /dev/null
+++ b/packages/create/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "@solid-cli/create",
+ "version": "0.10.0",
+ "description": "Create Solid apps with low configuration",
+ "author": "Thomas Beer",
+ "contributors": [
+ "Rahul Batra"
+ ],
+ "license": "MIT",
+ "homepage": "https://solid-cli.netlify.app",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/solidjs-community/solid-cli"
+ },
+ "keywords": [
+ "solidjs",
+ "solid",
+ "cli"
+ ],
+ "main": "./dist/index.mjs",
+ "module": "./dist/index.mjs",
+ "types": "./types/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./types/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.mjs"
+ }
+ },
+ "files": [
+ "dist",
+ "types"
+ ],
+ "scripts": {
+ "start": "jiti ./src/bin.ts",
+ "build": "tsc && tsup",
+ "test": "vitest run"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "dependencies": {
+ "@clack/prompts": "1.7.0",
+ "picocolors": "^1.1.1",
+ "@begit/core": "^0.4.0",
+ "citty": "^0.2.2",
+ "sucrase": "^3.35.1",
+ "@solid-cli/utils": "workspace:*"
+ }
+}
diff --git a/packages/create/src/create-library.ts b/packages/create/src/create-library.ts
new file mode 100644
index 0000000..0366d98
--- /dev/null
+++ b/packages/create/src/create-library.ts
@@ -0,0 +1,14 @@
+import { downloadRepo, GithubFetcher } from "@begit/core";
+
+export type CreateLibraryArgs = {
+ destination: string;
+};
+export const createLibrary = ({ destination }: CreateLibraryArgs) => {
+ return downloadRepo(
+ {
+ repo: { owner: "solidjs-community", name: "solid-lib-starter" },
+ dest: destination,
+ },
+ GithubFetcher,
+ );
+};
diff --git a/packages/create/src/create-solid-v2.ts b/packages/create/src/create-solid-v2.ts
new file mode 100644
index 0000000..cfac554
--- /dev/null
+++ b/packages/create/src/create-solid-v2.ts
@@ -0,0 +1,63 @@
+import { join } from "node:path";
+import { existsSync, writeFileSync } from "node:fs";
+import { readFile, writeFile } from "node:fs/promises";
+import { handleTSConversion } from "./utils/ts-conversion";
+import { GIT_IGNORE, JS_CONFIG_SOLID_V2, SolidV2Template } from "./utils/constants";
+import { downloadTemplate } from "./utils/download";
+import { applySsrFlip } from "./utils/ssr-flip";
+
+export type CreateSolidV2Args = {
+ template: SolidV2Template | (string & {});
+ destination: string;
+ /** Subdir prefix inside the templates repo (from templates.json), defaults to "solid-v2" */
+ path?: string;
+};
+
+export const createSolidV2 = (args: CreateSolidV2Args, transpile?: boolean, ssr?: boolean) => {
+ if (transpile) {
+ return createSolidV2JS(args, ssr);
+ }
+ return createSolidV2TS(args, ssr);
+};
+
+export const createSolidV2TS = async ({ template, destination, path = "solid-v2" }: CreateSolidV2Args, ssr?: boolean) => {
+ await downloadTemplate(`${path}/${template}`, destination);
+ if (ssr) await applySsrFlip(destination);
+};
+
+/**
+ * Retarget `.ts`/`.tsx` filename mentions in converted text (vite config,
+ * README) to the transpiled `.js`/`.jsx` output. `.d.ts` files are deleted
+ * (not transpiled) by the conversion, so their mentions are left alone.
+ */
+export const retargetTSFilenames = (text: string) =>
+ text
+ .replace(/\.tsx\b/g, ".jsx")
+ .replace(/(? {
+ const deduped = [...new Set(entries.split(",").map((entry) => entry.trim()).filter(Boolean))];
+ return `extensions: [${deduped.join(", ")}]`;
+ });
+
+export const createSolidV2JS = async (args: CreateSolidV2Args, ssr?: boolean) => {
+ // Create typescript project in `/.project`
+ // then transpile this to javascript and clean up.
+ // The SSR flip runs inside the temp dir, before conversion, so the config
+ // edit happens on the `.ts` source (server.js is already plain JS).
+ const tempDir = join(args.destination, ".project");
+ await createSolidV2TS({ ...args, destination: tempDir }, ssr);
+ await handleTSConversion(tempDir, args.destination, JS_CONFIG_SOLID_V2);
+ // Solid 2.0 templates have no `index.html` (turnkey entries), but their vite
+ // config and README reference `.ts`/`.tsx` files (setup files, comments,
+ // route examples) — retarget those to the transpiled `.js`/`.jsx` output
+ for (const file of ["vite.config.js", "README.md"]) {
+ const filePath = join(args.destination, file);
+ if (existsSync(filePath)) {
+ await writeFile(filePath, retargetTSFilenames((await readFile(filePath)).toString()));
+ }
+ }
+ // Add .gitignore
+ writeFileSync(join(args.destination, ".gitignore"), GIT_IGNORE);
+};
diff --git a/packages/create/src/create-start.ts b/packages/create/src/create-start.ts
new file mode 100644
index 0000000..0b4bc29
--- /dev/null
+++ b/packages/create/src/create-start.ts
@@ -0,0 +1,33 @@
+import { join } from "path";
+import { writeFileSync } from "fs";
+import { handleTSConversion } from "./utils/ts-conversion";
+import { GIT_IGNORE, StartTemplate, StartTemplateV2 } from "./utils/constants";
+import { downloadTemplate } from "./utils/download";
+export type CreateStartArgs = {
+ template: StartTemplate | StartTemplateV2 | (string & {});
+ destination: string;
+ /** Subdir prefix inside the templates repo (from templates.json), defaults to "solid-start-v2"/"solid-start-v1" */
+ path?: string;
+};
+
+export const createStartTS = ({ template, destination, path }: CreateStartArgs, v2?: boolean) => {
+ const prefix = path ?? (v2 ? "solid-start-v2" : "solid-start-v1");
+ return downloadTemplate(`${prefix}/${template}`, destination);
+};
+
+export const createStartJS = async ({ template, destination, path }: CreateStartArgs, v2?: boolean) => {
+ // Create typescript project in `/.project`
+ // then transpile this to javascript and clean up
+ const tempDir = join(destination, ".project");
+ await createStartTS({ template, destination: tempDir, path }, v2);
+ await handleTSConversion(tempDir, destination);
+ // Add .gitignore
+ writeFileSync(join(destination, ".gitignore"), GIT_IGNORE);
+};
+
+export const createStart = (args: CreateStartArgs, transpile?: boolean, v2?: boolean) => {
+ if (transpile) {
+ return createStartJS(args, v2);
+ }
+ return createStartTS(args, v2);
+};
diff --git a/packages/create/src/create-vanilla.ts b/packages/create/src/create-vanilla.ts
new file mode 100644
index 0000000..a27d564
--- /dev/null
+++ b/packages/create/src/create-vanilla.ts
@@ -0,0 +1,36 @@
+import { join } from "node:path";
+import { writeFileSync } from "node:fs";
+import { readFile } from "node:fs/promises";
+import { handleTSConversion } from "./utils/ts-conversion";
+import { GIT_IGNORE, VanillaTemplate } from "./utils/constants";
+import { downloadTemplate } from "./utils/download";
+
+export type CreateVanillaArgs = {
+ template: VanillaTemplate | (string & {});
+ destination: string;
+ /** Subdir prefix inside the templates repo (from templates.json), defaults to "vanilla" */
+ path?: string;
+};
+export const createVanilla = (args: CreateVanillaArgs, transpile?: boolean) => {
+ if (transpile) {
+ return createVanillaJS(args);
+ }
+ return createVanillaTS(args);
+};
+
+export const createVanillaTS = async ({ template, destination, path = "vanilla" }: CreateVanillaArgs) => {
+ return await downloadTemplate(`${path}/${template}`, destination);
+};
+
+export const createVanillaJS = async ({ template, destination, path }: CreateVanillaArgs) => {
+ // Create typescript project in `/.project`
+ // then transpile this to javascript and clean up
+ const tempDir = join(destination, ".project");
+ await createVanillaTS({ template, destination: tempDir, path });
+ await handleTSConversion(tempDir, destination);
+ // Replace `index.tsx` with `index.jsx` in `index.html`
+ const indexPath = join(destination, "index.html");
+ writeFileSync(indexPath, (await readFile(indexPath)).toString().replace("index.tsx", "index.jsx"));
+ // Add .gitignore
+ writeFileSync(join(destination, ".gitignore"), GIT_IGNORE);
+};
diff --git a/packages/create/src/create.ts b/packages/create/src/create.ts
new file mode 100644
index 0000000..1fe7984
--- /dev/null
+++ b/packages/create/src/create.ts
@@ -0,0 +1,12 @@
+import { createStart, CreateStartArgs } from "./create-start";
+import { createVanilla, CreateVanillaArgs } from "./create-vanilla";
+
+export async function create(args: CreateVanillaArgs, js: boolean, isStart: false): Promise;
+export async function create(args: CreateStartArgs, js: boolean, isStart: true): Promise;
+export async function create(args: CreateVanillaArgs | CreateStartArgs, js: boolean, isStart: boolean) {
+ if (isStart) {
+ return createStart(args as CreateStartArgs, js);
+ } else {
+ return createVanilla(args as CreateVanillaArgs, js);
+ }
+}
diff --git a/packages/create/src/index.ts b/packages/create/src/index.ts
new file mode 100644
index 0000000..624bf2a
--- /dev/null
+++ b/packages/create/src/index.ts
@@ -0,0 +1,247 @@
+import { defineCommand } from "citty";
+import { createVanilla } from "./create-vanilla";
+import * as p from "@clack/prompts";
+import { cancelable, spinnerify } from "@solid-cli/utils/ui";
+import { createStart } from "./create-start";
+import { createSolidV2 } from "./create-solid-v2";
+import { GIT_IGNORE, isValidTemplate, LIBRARY_TEMPLATES, PROJECT_TYPES, ProjectType } from "./utils/constants";
+import { fetchTemplatesManifest, groupKeyFor, ManifestTemplate, resolveGroup } from "./utils/manifest";
+import { detectPackageManager } from "@solid-cli/utils/package-manager";
+import { existsSync, writeFileSync } from "node:fs";
+import { join } from "node:path";
+import { createLibrary } from "./create-library";
+import { readFile, writeFile } from "node:fs/promises";
+export { createVanilla, createStart, createLibrary, createSolidV2 };
+
+const PROJECT_TYPE_LABELS: Record = {
+ solid: "Solid 2.0 (RC)",
+ start: "SolidStart (Solid 1.x)",
+ vanilla: "SolidJS + Vite (Solid 1.x)",
+ library: "Library",
+};
+
+export const createSolid = (version: string) =>
+ defineCommand({
+ meta: {
+ name: "create-solid",
+ description: "A CLI for scaffolding new Solid projects",
+ version: version,
+ },
+ args: {
+ "projectNamePositional": {
+ type: "positional",
+ required: false,
+ description: "Project name",
+ },
+ "templatePositional": {
+ type: "positional",
+ required: false,
+ description: "Template name",
+ },
+ "project-name": {
+ type: "string",
+ required: false,
+ alias: "p",
+ description: "Project name",
+ },
+ "template": {
+ type: "string",
+ required: false,
+ alias: "t",
+ description: "Template name",
+ },
+ "solid": {
+ type: "boolean",
+ required: false,
+ description: "Create a Solid 2.0 project",
+ },
+ "solidstart": {
+ type: "boolean",
+ required: false,
+ alias: "s",
+ description: "Create a SolidStart project",
+ },
+ "v2": {
+ type: "boolean",
+ required: false,
+ description: "Create a SolidStart v2 project",
+ },
+ "library": {
+ type: "boolean",
+ required: false,
+ alias: "l",
+ description: "Create a Library project",
+ },
+ "vanilla": {
+ type: "boolean",
+ required: false,
+ alias: "v",
+ description: "Create a vanilla (SolidJS + Vite) project",
+ },
+ "ssr": {
+ type: "boolean",
+ required: false,
+ description: "Enable server-side rendering (Solid 2.0 templates that support it)",
+ },
+ "ts": {
+ type: "boolean",
+ required: false,
+ description: "Use typescript",
+ },
+ "js": {
+ type: "boolean",
+ required: false,
+ description: "Use javascript",
+ },
+ },
+ async run({
+ args: {
+ projectNamePositional,
+ templatePositional,
+ "project-name": projectNameOptional,
+ "template": templateOptional,
+ solid,
+ solidstart,
+ library,
+ vanilla,
+ ssr,
+ ts,
+ js,
+ v2,
+ },
+ }) {
+ // Show prompts for any unknown arguments
+ let projectName = projectNamePositional ?? projectNameOptional;
+ let template = templatePositional ?? templateOptional;
+ let projectType: ProjectType | undefined = solid
+ ? "solid"
+ : solidstart
+ ? "start"
+ : vanilla
+ ? "vanilla"
+ : library
+ ? "library"
+ : undefined;
+ // False if user has selected ts, true if they have selected js, and undefined if they've done neither
+ let useJS = ts ? !ts : js ? js : undefined;
+ // Live template lists/paths from the templates repo; undefined falls back to the baked-in lists
+ const manifest = await fetchTemplatesManifest();
+ projectName ??= await cancelable(
+ p.text({ message: "Project Name", placeholder: "solid-project", defaultValue: "solid-project" }),
+ );
+ projectType ??= await cancelable(
+ p.select({
+ message: "What type of project would you like to create?",
+ // Solid 2.0 is listed first but not preselected while core is a release candidate
+ initialValue: "start",
+ options: PROJECT_TYPES.map((t) => ({
+ value: t,
+ label: PROJECT_TYPE_LABELS[t],
+ })),
+ }),
+ );
+ if (!projectType) return;
+
+ let useV2: string | undefined;
+ if (projectType === "start") {
+ useV2 = v2
+ ? "v2"
+ : await cancelable(
+ p.select({
+ message: "Which version of SolidStart?",
+ initialValue: "v2",
+ options: [
+ { value: "v2", label: "2 (Stable)" },
+ { value: "v1", label: "1 (Legacy)" },
+ ],
+ }),
+ );
+ }
+ const isV2 = useV2 === "v2";
+
+ // Don't offer javascript if `projectType` is library
+ useJS ??= projectType === "library" ? false : !(await cancelable(p.confirm({ message: "Use Typescript?" })));
+
+ if (!projectType) return;
+ const group = projectType === "library" ? undefined : resolveGroup(manifest, groupKeyFor(projectType, isV2));
+ const template_opts: ManifestTemplate[] = group
+ ? group.templates
+ : LIBRARY_TEMPLATES.map((name) => ({ name }));
+ template ??= await cancelable(
+ p.select({
+ message: "Which template would you like to use?",
+ initialValue: (template_opts.find((t) => t.default) ?? template_opts[0])?.name,
+ options: template_opts
+ .filter((t) => (useJS ? t : !t.name.startsWith("js")))
+ .map((t) => ({ label: t.name, value: t.name })),
+ }),
+ );
+
+ if (!template) return;
+ const chosenTemplate = template_opts.find((t) => t.name === template);
+
+ // SSR flip: only offered on Solid 2.0 templates that support it (e.g. "basic")
+ let enableSSR = false;
+ if (projectType === "solid" && chosenTemplate?.ssrToggle) {
+ enableSSR =
+ ssr ??
+ (await cancelable(
+ p.confirm({ message: "Enable server-side rendering (streaming SSR)?", initialValue: false }),
+ ));
+ } else if (ssr) {
+ p.log.warn(`--ssr is not supported for this template and will be ignored`);
+ }
+
+ // Need to transpile if the user wants Jabascript, but their selected template isn't Javascript
+ const transpileToJS = useJS && !template.startsWith("js");
+ if (projectType === "solid" && chosenTemplate) {
+ await spinnerify({
+ startText: "Creating project",
+ finishText: "Project created 🎉",
+ fn: () => createSolidV2({ template, destination: projectName, path: group?.path }, transpileToJS, enableSSR),
+ });
+ } else if (projectType === "start" && chosenTemplate) {
+ await spinnerify({
+ startText: "Creating project",
+ finishText: "Project created 🎉",
+ fn: () => createStart({ template, destination: projectName, path: group?.path }, transpileToJS, isV2),
+ });
+ } else if (projectType === "library" && isValidTemplate("library", template)) {
+ await spinnerify({
+ startText: "Creating project",
+ finishText: "Project created 🎉",
+ fn: () => createLibrary({ destination: projectName }),
+ });
+ } else if (projectType === "vanilla" && chosenTemplate) {
+ await spinnerify({
+ startText: "Creating project",
+ finishText: "Project created 🎉",
+ fn: () => createVanilla({ template, destination: projectName, path: group?.path }, transpileToJS),
+ });
+ } else {
+ p.log.error(`Template ${template} is not valid for project type ${projectType}`);
+ process.exit(0);
+ }
+ // Add .gitignore
+ writeFileSync(join(projectName, ".gitignore"), GIT_IGNORE);
+ // Add "Created with Solid CLI" text to bottom of README
+ const readmePath = `${projectName}/README.md`;
+ if (existsSync(readmePath)) {
+ const contents = (await readFile(readmePath)).toString();
+ if (!contents.includes("This project was created with the [Solid CLI]"))
+ await writeFile(
+ readmePath,
+ contents +
+ "\n## This project was created with the [Solid CLI](https://github.com/solidjs-community/solid-cli)\n",
+ );
+ }
+ // Next steps..
+ const pM = detectPackageManager();
+ p.note(
+ (projectName === "." ? "" : `cd ${projectName}\n`) +
+ `${pM.name} install
+${pM.name} ${pM.runScriptCommand("dev")}`,
+ "To get started, run:",
+ );
+ },
+ });
diff --git a/packages/create/src/utils/constants.ts b/packages/create/src/utils/constants.ts
new file mode 100644
index 0000000..6a0ecb6
--- /dev/null
+++ b/packages/create/src/utils/constants.ts
@@ -0,0 +1,184 @@
+export const GIT_IGNORE = `dist
+.wrangler
+.output
+.vercel
+.netlify
+.vinxi
+app.config.timestamp_*.js
+
+# Environment
+.env
+.env*.local
+
+# dependencies
+/node_modules
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+*.launch
+.settings/
+
+# Temp
+gitignore
+
+# System Files
+.DS_Store
+Thumbs.db
+`;
+
+export const JS_CONFIG = {
+ compilerOptions: {
+ jsx: "preserve",
+ jsxImportSource: "solid-js",
+ paths: {
+ "~/*": ["./src/*"],
+ },
+ },
+};
+
+// The solid-v2 templates don't use the `~/*` path alias, and Solid 2.0's JSX
+// runtime lives in `@solidjs/web` (matches the templates' tsconfig.json)
+export const JS_CONFIG_SOLID_V2 = {
+ compilerOptions: {
+ jsx: "preserve",
+ jsxImportSource: "@solidjs/web",
+ },
+};
+
+// Supported templates
+
+/**Supported Vanilla Templates */
+export const VANILLA_TEMPLATES = [
+ "basic",
+ "bare",
+ "with-vitest",
+ "with-uvu",
+ "with-unocss",
+ "with-tailwindcss",
+ "with-sass",
+ "with-solid-router",
+ "with-vite-plugin-pages",
+ "with-tanstack-router-config-based",
+ "with-tanstack-router-file-based",
+ "with-tanstack-start",
+ "with-jest",
+ "with-bootstrap",
+] as const satisfies string[];
+export type VanillaTemplate = (typeof VANILLA_TEMPLATES)[number];
+
+/**
+ * @description This list is hardcoded. But templates are fetched from another github repo.
+ * @see https://github.com/solidjs/templates/tree/main/solid-start
+ */
+export const START_TEMPLATES = [
+ "basic",
+ "bare",
+ "with-solidbase",
+ "with-auth",
+ "with-authjs",
+ "with-drizzle",
+ "with-mdx",
+ "with-prisma",
+ "with-solid-styled",
+ "with-tailwindcss",
+ "with-tanstack-router",
+ "with-trpc",
+ "with-unocss",
+ "with-vitest",
+ "with-strict-csp",
+] as const satisfies string[];
+
+export type StartTemplate = (typeof START_TEMPLATES)[number];
+
+export const START_TEMPLATES_V2 = [
+ "basic",
+ "bare",
+ "with-auth",
+ "with-authjs",
+ "with-drizzle",
+ "with-mdx",
+ "with-prisma",
+ "with-solid-styled",
+ "with-solidbase",
+ "with-strict-csp",
+ "with-tailwindcss",
+ "with-trpc",
+ "with-unocss",
+ "with-vitest",
+] as const satisfies string[];
+
+export type StartTemplateV2 = (typeof START_TEMPLATES_V2)[number];
+
+/**
+ * Solid 2.0 templates (templates repo: `solid-v2/`)
+ * @see https://github.com/solidjs/templates/tree/main/solid-v2
+ */
+export const SOLID_V2_TEMPLATES = [
+ "basic",
+ "bare",
+ "fullstack",
+ "fullstack-tanstack",
+ "with-bootstrap",
+ "with-sass",
+ "with-tailwindcss",
+ "with-tanstack-router",
+ "with-unocss",
+ "with-vitest-browser-mode",
+] as const satisfies string[];
+export type SolidV2Template = (typeof SOLID_V2_TEMPLATES)[number];
+
+/**Supported Library Templates */
+export const LIBRARY_TEMPLATES = ["solid-lib-starter"] as const satisfies string[];
+export type LibraryTemplate = (typeof LIBRARY_TEMPLATES)[number];
+
+// "solid" (Solid 2.0) is listed first, but "start" remains the preselected
+// default while Solid 2.0 core is a release candidate
+export const PROJECT_TYPES = ["solid", "start", "vanilla", "library"] as const satisfies string[];
+export type ProjectType = (typeof PROJECT_TYPES)[number];
+
+/**
+ * Fetches the template list for the project type given
+ * @param projectType type of project
+ */
+export function getTemplatesList(projectType: "vanilla", v2?: boolean): VanillaTemplate[];
+export function getTemplatesList(projectType: "solid", v2?: boolean): SolidV2Template[];
+export function getTemplatesList(projectType: "start", v2?: boolean): StartTemplate[] | StartTemplateV2[];
+export function getTemplatesList(projectType: "library", v2?: boolean): LibraryTemplate[];
+export function getTemplatesList(
+ projectType: ProjectType,
+ v2?: boolean,
+): VanillaTemplate[] | SolidV2Template[] | StartTemplate[] | StartTemplateV2[] | LibraryTemplate[];
+export function getTemplatesList(projectType: ProjectType, v2?: boolean) {
+ if (projectType === "solid") {
+ return SOLID_V2_TEMPLATES as unknown as SolidV2Template[];
+ } else if (projectType === "start") {
+ if (v2) {
+ return START_TEMPLATES_V2 as unknown as StartTemplateV2[];
+ }
+ return START_TEMPLATES as StartTemplate[];
+ } else if (projectType === "library") {
+ return LIBRARY_TEMPLATES as LibraryTemplate[];
+ }
+ return VANILLA_TEMPLATES as VanillaTemplate[];
+}
+
+/**
+ * Tests is the template given is a valid template, and returns it as a template if it is
+ * @param type expected type of the template
+ * @param maybe_template the template string to test
+ * @returns the template string if it is valid, undefined if not
+ */
+export function isValidTemplate(type: "vanilla", maybe_template: string): maybe_template is VanillaTemplate;
+export function isValidTemplate(type: "solid", maybe_template: string): maybe_template is SolidV2Template;
+export function isValidTemplate(
+ type: "start",
+ maybe_template: string,
+ v2?: boolean,
+): maybe_template is StartTemplate | StartTemplateV2;
+export function isValidTemplate(type: "library", maybe_template: string): maybe_template is LibraryTemplate;
+export function isValidTemplate(type: ProjectType, maybe_template: string, v2?: boolean) {
+ const templates = getTemplatesList(type, v2);
+ return templates.find((t) => t === maybe_template) !== undefined;
+}
diff --git a/packages/create/src/utils/download.ts b/packages/create/src/utils/download.ts
new file mode 100644
index 0000000..93fc918
--- /dev/null
+++ b/packages/create/src/utils/download.ts
@@ -0,0 +1,54 @@
+import { downloadRepo, GithubFetcher } from "@begit/core";
+
+export const TEMPLATES_REPO = { owner: "solidjs", name: "templates" } as const;
+
+/** A slow commit lookup must not hold up a scaffold — it is only there to enable caching */
+const LATEST_COMMIT_TIMEOUT_MS = 2000;
+
+/**
+ * Resolves HEAD of the templates repo to a commit sha, so begit can key its
+ * tarball cache on it and reuse the download across scaffolds.
+ *
+ * This goes through api.github.com, which is rate limited to 60 requests/hour
+ * for unauthenticated users (the archive endpoint the tarball itself comes from
+ * is not). Every failure — rate limited, offline, timeout, unexpected payload —
+ * resolves to `undefined`, and the caller falls back to fetching HEAD directly.
+ */
+export const latestTemplatesCommit = async (): Promise => {
+ const lookup = (async () => {
+ try {
+ return await GithubFetcher.fetchLatestCommit(TEMPLATES_REPO);
+ } catch {
+ return undefined;
+ }
+ })();
+ let timer: ReturnType;
+ const timeout = new Promise((resolve) => {
+ timer = setTimeout(() => resolve(undefined), LATEST_COMMIT_TIMEOUT_MS);
+ });
+ return Promise.race([lookup, timeout]).finally(() => clearTimeout(timer));
+};
+
+/**
+ * Downloads `subdir` of the solidjs/templates repo into `destination`.
+ *
+ * No ref is pinned: scaffolds always come from live HEAD of the default branch,
+ * matching the `templates.json` manifest, so template updates reach users
+ * without a CLI release. HEAD is resolved to a sha first so begit can cache the
+ * tarball under it and skip the download next time; when that lookup fails we
+ * fetch HEAD directly instead, uncached — slower, but never a broken scaffold.
+ */
+export const downloadTemplate = async (subdir: string, destination: string) => {
+ const hash = await latestTemplatesCommit();
+ return downloadRepo(
+ {
+ repo: { ...TEMPLATES_REPO, subdir, hash },
+ dest: destination,
+ // HEAD is already resolved (or deliberately left unresolved) above, so begit
+ // must not call the API itself. Without a sha there is nothing to key a cache
+ // entry on, so the tarball is discarded rather than left behind unkeyed.
+ opts: { cache: !!hash, fetch_latest_commit: false },
+ },
+ GithubFetcher,
+ );
+};
diff --git a/packages/create/src/utils/file-system.ts b/packages/create/src/utils/file-system.ts
new file mode 100644
index 0000000..c17c0f9
--- /dev/null
+++ b/packages/create/src/utils/file-system.ts
@@ -0,0 +1,17 @@
+import { Dirent, readdirSync } from "node:fs";
+import { readFile } from "node:fs/promises";
+import { resolve } from "node:path";
+
+export const recurseFiles = (startPath: string, cb: (file: Dirent, startPath: string) => void) => {
+ startPath = resolve(startPath);
+
+ const files = readdirSync(startPath, { withFileTypes: true });
+
+ for (const file of files) {
+ cb(file, startPath);
+ }
+};
+
+export const readFileToString = async (path: string) => {
+ return (await readFile(path)).toString();
+};
diff --git a/packages/create/src/utils/manifest.ts b/packages/create/src/utils/manifest.ts
new file mode 100644
index 0000000..6855e68
--- /dev/null
+++ b/packages/create/src/utils/manifest.ts
@@ -0,0 +1,119 @@
+import {
+ SOLID_V2_TEMPLATES,
+ START_TEMPLATES,
+ START_TEMPLATES_V2,
+ VANILLA_TEMPLATES,
+ ProjectType,
+} from "./constants";
+
+/**
+ * `templates.json` manifest published at the root of the solidjs/templates repo.
+ * When reachable, it is the source of truth for template names, subdir paths and
+ * per-template flags, so the templates repo can add/reorganize templates without
+ * requiring a CLI release. The baked-in lists in `constants.ts` are the fallback.
+ */
+export type ManifestTemplate = {
+ name: string;
+ /** Preselected in the template prompt */
+ default?: boolean;
+ /** Offer the "Enable server-side rendering?" prompt for this template */
+ ssrToggle?: boolean;
+};
+
+export type ManifestGroup = {
+ label?: string;
+ /** Subdir prefix inside the templates repo, e.g. "solid-v2" */
+ path: string;
+ status?: string;
+ templates: ManifestTemplate[];
+};
+
+export type TemplatesManifest = {
+ version: number;
+ groups: Record;
+};
+
+/** Manifest groups the CLI understands (library comes from a different repo and stays baked-in) */
+export type ManifestGroupKey = "solid" | "start-v2" | "start-v1" | "vanilla";
+
+export const MANIFEST_URL = "https://raw.githubusercontent.com/solidjs/templates/HEAD/templates.json";
+const MANIFEST_TIMEOUT_MS = 2000;
+
+const asTemplates = (names: readonly string[], defaultName?: string, ssrToggle?: string): ManifestTemplate[] =>
+ names.map((name) => ({
+ name,
+ ...(name === defaultName ? { default: true } : {}),
+ ...(name === ssrToggle ? { ssrToggle: true } : {}),
+ }));
+
+/** Baked-in fallback, used whenever the manifest can't be fetched or parsed */
+export const BAKED_GROUPS: Record = {
+ "solid": {
+ label: "Solid 2.0",
+ path: "solid-v2",
+ templates: asTemplates(SOLID_V2_TEMPLATES, "basic", "basic"),
+ },
+ "start-v2": {
+ label: "SolidStart 2",
+ path: "solid-start-v2",
+ templates: asTemplates(START_TEMPLATES_V2, "basic"),
+ },
+ "start-v1": {
+ label: "SolidStart 1",
+ path: "solid-start-v1",
+ templates: asTemplates(START_TEMPLATES, "basic"),
+ },
+ "vanilla": {
+ label: "SolidJS + Vite",
+ path: "vanilla",
+ templates: asTemplates(VANILLA_TEMPLATES, "basic"),
+ },
+};
+
+/**
+ * Validates an untrusted parsed JSON value into a `TemplatesManifest`.
+ * Returns `undefined` for anything unusable (unknown major version, wrong shape),
+ * dropping malformed groups/entries rather than failing outright.
+ */
+export const parseManifest = (raw: unknown): TemplatesManifest | undefined => {
+ if (!raw || typeof raw !== "object") return undefined;
+ const manifest = raw as TemplatesManifest;
+ if (manifest.version !== 1) return undefined;
+ if (!manifest.groups || typeof manifest.groups !== "object") return undefined;
+ const groups: Record = {};
+ for (const [key, group] of Object.entries(manifest.groups)) {
+ if (!group || typeof group !== "object") continue;
+ if (typeof group.path !== "string" || !Array.isArray(group.templates)) continue;
+ const templates = group.templates.filter(
+ (t): t is ManifestTemplate => !!t && typeof t === "object" && typeof t.name === "string",
+ );
+ if (templates.length === 0) continue;
+ groups[key] = { ...group, templates };
+ }
+ if (Object.keys(groups).length === 0) return undefined;
+ return { version: 1, groups };
+};
+
+/**
+ * Fetches the live manifest from the templates repo (HEAD, small file, short timeout).
+ * Any failure — offline, timeout, 404, malformed JSON, unknown version — resolves to
+ * `undefined` so callers silently fall back to the baked-in lists.
+ */
+export const fetchTemplatesManifest = async (): Promise => {
+ try {
+ const url = process.env.SOLID_CLI_TEMPLATES_MANIFEST_URL || MANIFEST_URL;
+ const res = await fetch(url, { signal: AbortSignal.timeout(MANIFEST_TIMEOUT_MS) });
+ if (!res.ok) return undefined;
+ return parseManifest(await res.json());
+ } catch {
+ return undefined;
+ }
+};
+
+/** Maps the CLI's project type (+ SolidStart version) to a manifest group key */
+export const groupKeyFor = (projectType: Exclude, startV2?: boolean): ManifestGroupKey =>
+ projectType === "start" ? (startV2 ? "start-v2" : "start-v1") : projectType;
+
+/** Resolves a group from the manifest, falling back to the baked-in lists */
+export const resolveGroup = (manifest: TemplatesManifest | undefined, key: ManifestGroupKey): ManifestGroup =>
+ manifest?.groups[key] ?? BAKED_GROUPS[key];
diff --git a/packages/create/src/utils/ssr-flip.ts b/packages/create/src/utils/ssr-flip.ts
new file mode 100644
index 0000000..08b59d6
--- /dev/null
+++ b/packages/create/src/utils/ssr-flip.ts
@@ -0,0 +1,133 @@
+import { existsSync } from "node:fs";
+import { readFile, writeFile } from "node:fs/promises";
+import { join } from "node:path";
+import { log } from "@clack/prompts";
+
+/**
+ * Flips a client-mode Solid 2.0 template (e.g. `solid-v2/basic`) into streaming SSR.
+ * The delta to the `solid-v2/fullstack` template's server posture is exactly three files:
+ * 1. `vite.config.ts` — add `ssr: true` to the `solid({ start: true, ... })` call
+ * 2. `server.js` — the generic production node server (verbatim from `solid-v2/fullstack`)
+ * 3. `package.json` — point the `start` script at that server
+ */
+
+export const SSR_ANCHOR = "solid({ start: true";
+/** The template documents the flip with this hint; drop it once the flip is applied */
+export const SSR_HINT_COMMENT = " // add `ssr: true` for streaming SSR";
+export const SSR_START_SCRIPT = "node --env-file-if-exists=.env server.js";
+
+/**
+ * Production node server for turnkey SSR apps. Verbatim copy of
+ * `solid-v2/fullstack/server.js` from the templates repo — fully generic: it only
+ * imports node builtins plus the built server bundle's `handleRequest`.
+ * Regenerate with `node scripts/gen-ssr-flip-server.mjs `
+ * when the template changes.
+ */
+// @generated-server-js-start
+export const SERVER_JS = `// The entire production server for a turnkey SSR app: static client assets
+// plus one import — the built server bundle's \`handleRequest\`, an
+// adapter-agnostic web \`Request -> Response\` handler that streams the SSR
+// render, resolves hashed client assets through the build manifest, and
+// (with serverFunctions enabled) serves the \`/_server\` endpoint too. The
+// node <-> web plumbing below is the only glue; on a web-native platform
+// (workers, Deno, Bun.serve) \`handleRequest\` is used directly.
+import { createServer } from 'node:http';
+import { readFileSync } from 'node:fs';
+import { Readable } from 'node:stream';
+import { fileURLToPath } from 'node:url';
+import path from 'node:path';
+import { handleRequest } from './dist/server/server.js';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+const port = process.env.PORT || 3000;
+
+const MIME = {
+ '.js': 'application/javascript',
+ '.css': 'text/css',
+ '.html': 'text/html',
+ '.json': 'application/json',
+ '.ico': 'image/x-icon',
+ '.svg': 'image/svg+xml',
+};
+
+function webRequest(req) {
+ const url = new URL(req.url || '/', \`http://\${req.headers.host || \`localhost:\${port}\`}\`);
+ const method = req.method || 'GET';
+ const body = method === 'GET' || method === 'HEAD' ? undefined : Readable.toWeb(req);
+ return new Request(url, {
+ method,
+ headers: req.headers,
+ body,
+ ...(body ? { duplex: 'half' } : {}),
+ });
+}
+
+const server = createServer(async (req, res) => {
+ const url = req.url || '/';
+
+ // Static client assets first.
+ if (url !== '/' && !url.includes('..')) {
+ try {
+ const content = readFileSync(path.resolve(__dirname, 'dist/client' + url.split('?')[0]));
+ res.setHeader('Content-Type', MIME[path.extname(url)] || 'application/octet-stream');
+ res.end(content);
+ return;
+ } catch {
+ // Fall through to the handler (SSR routes, /_server, ...).
+ }
+ }
+
+ try {
+ const response = await handleRequest(webRequest(req));
+ res.statusCode = response.status;
+ const cookies = response.headers.getSetCookie?.();
+ response.headers.forEach((value, key) => {
+ if (key !== 'set-cookie') res.setHeader(key, value);
+ });
+ if (cookies?.length) res.setHeader('set-cookie', cookies);
+ if (response.body) {
+ for await (const chunk of response.body) res.write(chunk);
+ }
+ res.end();
+ } catch (e) {
+ console.error(e);
+ res.statusCode = 500;
+ res.end(e.message);
+ }
+});
+
+server.listen(port, () => {
+ console.log(\`Server running at http://localhost:\${port}\`);
+});
+`;
+// @generated-server-js-end
+
+/**
+ * Applies the SSR flip to a scaffolded template directory (before any TS→JS conversion,
+ * so the config edit happens on the `.ts` source).
+ *
+ * If the `vite.config.ts` anchor is missing (template drifted), the flip is aborted
+ * with a warning instead of writing a broken config, leaving a working client-mode app.
+ */
+export const applySsrFlip = async (dir: string): Promise => {
+ const viteConfigPath = join(dir, "vite.config.ts");
+ const abort = (reason: string) => {
+ log.warn(`Skipping SSR setup: ${reason}. The project was created in client mode.`);
+ return false;
+ };
+ if (!existsSync(viteConfigPath)) return abort("no vite.config.ts found");
+ const viteConfig = (await readFile(viteConfigPath)).toString();
+ if (!viteConfig.includes(SSR_ANCHOR)) return abort("unrecognized vite.config.ts");
+
+ await writeFile(
+ viteConfigPath,
+ viteConfig.replace(SSR_ANCHOR, `${SSR_ANCHOR}, ssr: true`).replace(SSR_HINT_COMMENT, ""),
+ );
+ await writeFile(join(dir, "server.js"), SERVER_JS);
+
+ const packageJsonPath = join(dir, "package.json");
+ const packageJson = JSON.parse((await readFile(packageJsonPath)).toString());
+ packageJson.scripts = { ...packageJson.scripts, start: SSR_START_SCRIPT };
+ await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
+ return true;
+};
diff --git a/packages/create/src/utils/ts-conversion.ts b/packages/create/src/utils/ts-conversion.ts
new file mode 100644
index 0000000..e0bd5a0
--- /dev/null
+++ b/packages/create/src/utils/ts-conversion.ts
@@ -0,0 +1,43 @@
+import { copyFileSync, Dirent, mkdirSync, writeFileSync } from "node:fs";
+import { readFileToString, recurseFiles } from "./file-system";
+import { join, resolve } from "node:path";
+import { transform } from "sucrase";
+import { rm } from "node:fs/promises";
+import { JS_CONFIG } from "./constants";
+
+const convertToJS = async (file: Dirent, startPath: string) => {
+ const src = join(startPath, file.name);
+ const dest = resolve(startPath.replace(".project", ""), file.name);
+ if (file.isDirectory()) {
+ mkdirSync(dest, { recursive: true });
+ recurseFiles(resolve(startPath, file.name), convertToJS);
+ } else if (file.isFile()) {
+ if (src.endsWith(".d.ts")) {
+ // Type declarations have no JS counterpart
+ } else if (src.endsWith(".ts") || src.endsWith(".tsx")) {
+ let { code } = transform(await readFileToString(src), {
+ transforms: ["typescript", "jsx"],
+ jsxRuntime: "preserve",
+ disableESTransforms: true,
+ preserveDynamicImport: true,
+ });
+
+ writeFileSync(dest.replace(".ts", ".js"), code, { flag: "wx" });
+ } else {
+ copyFileSync(src, dest);
+ }
+ }
+};
+export const handleTSConversion = async (tempDir: string, projectName: string, jsConfig: object = JS_CONFIG) => {
+ await rm(resolve(tempDir, "tsconfig.json"));
+ writeFileSync(resolve(projectName, "jsconfig.json"), JSON.stringify(jsConfig, null, 2), { flag: "wx" });
+
+ // Convert all ts files in temp directory into js
+ recurseFiles(tempDir, convertToJS);
+
+ // Remove temp directory
+ await rm(join(process.cwd(), tempDir), {
+ recursive: true,
+ force: true,
+ });
+};
diff --git a/packages/create/tests/download.test.ts b/packages/create/tests/download.test.ts
new file mode 100644
index 0000000..703e386
--- /dev/null
+++ b/packages/create/tests/download.test.ts
@@ -0,0 +1,38 @@
+import { afterEach, expect, it, vi } from "vitest";
+import { GithubFetcher } from "@begit/core";
+import { latestTemplatesCommit } from "../src/utils/download";
+
+afterEach(() => {
+ vi.restoreAllMocks();
+ vi.useRealTimers();
+});
+
+it("resolves HEAD to a sha so begit can cache the tarball under it", async () => {
+ vi.spyOn(GithubFetcher, "fetchLatestCommit").mockResolvedValue("c3032d9");
+
+ expect(await latestTemplatesCommit()).toBe("c3032d9");
+});
+
+it("falls back to no sha when the commit lookup throws", async () => {
+ // Offline, DNS failure, or a non-JSON response from the API
+ vi.spyOn(GithubFetcher, "fetchLatestCommit").mockRejectedValue(new Error("fetch failed"));
+
+ expect(await latestTemplatesCommit()).toBeUndefined();
+});
+
+it("falls back to no sha when the API answers without one", async () => {
+ // What a rate-limited response looks like by the time begit is done with it
+ vi.spyOn(GithubFetcher, "fetchLatestCommit").mockResolvedValue(undefined);
+
+ expect(await latestTemplatesCommit()).toBeUndefined();
+});
+
+it("falls back to no sha rather than letting a hanging lookup block the scaffold", async () => {
+ vi.useFakeTimers();
+ vi.spyOn(GithubFetcher, "fetchLatestCommit").mockReturnValue(new Promise(() => {}));
+
+ const resolved = latestTemplatesCommit();
+ await vi.advanceTimersByTimeAsync(2000);
+
+ expect(await resolved).toBeUndefined();
+});
diff --git a/packages/create/tests/fixtures/solid-v2-basic/package.json b/packages/create/tests/fixtures/solid-v2-basic/package.json
new file mode 100644
index 0000000..8e3b105
--- /dev/null
+++ b/packages/create/tests/fixtures/solid-v2-basic/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "example-basic",
+ "version": "0.0.0",
+ "description": "",
+ "type": "module",
+ "scripts": {
+ "start": "vite",
+ "dev": "vite",
+ "build": "vite build",
+ "serve": "vite preview",
+ "test": "vitest"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "@solidjs/testing-library": "1.0.0-beta.2",
+ "@solidjs/vite-plugin": "^3.0.0-next.28",
+ "@testing-library/jest-dom": "^6.6.3",
+ "filesystem-routing": "0.2.1",
+ "jsdom": "^25.0.1",
+ "typescript": "^5.9.2",
+ "vite": "^8.1.5",
+ "vitest": "^4.0.0"
+ },
+ "dependencies": {
+ "@solidjs/meta": "^1.0.0-next.2",
+ "@solidjs/router": "^2.0.0-next.16",
+ "@solidjs/web": "^2.0.0-rc.0",
+ "solid-js": "^2.0.0-rc.0"
+ }
+}
diff --git a/packages/create/tests/fixtures/solid-v2-basic/vite.config.ts b/packages/create/tests/fixtures/solid-v2-basic/vite.config.ts
new file mode 100644
index 0000000..683f1c7
--- /dev/null
+++ b/packages/create/tests/fixtures/solid-v2-basic/vite.config.ts
@@ -0,0 +1,32 @@
+import { fileRoutes } from 'filesystem-routing/vite';
+import { defineConfig } from 'vitest/config';
+import solid from '@solidjs/vite-plugin';
+
+export default defineConfig({
+ // Turnkey client mode: no index.html and no mount file — the plugin
+ // generates the entries around src/App.tsx, wrapped in src/Document.tsx
+ // (or a built-in shell). `vite build` prerenders the shell into
+ // dist/client/index.html and emits a purely static dist/client.
+ plugins: [
+ // `extensions` makes @solidjs/vite-plugin also compile the `?pick=` route
+ // modules the fileRoutes plugin emits (their ids end in a query string).
+ solid({ start: true, extensions: ['.jsx', '.tsx'] }), // add `ssr: true` for streaming SSR
+ fileRoutes(),
+ ],
+ server: {
+ port: 3000,
+ },
+ test: {
+ environment: 'jsdom',
+ globals: false,
+ setupFiles: ['./vitest-setup.ts'],
+ // if you have few tests, try commenting this
+ // out to improve performance:
+ isolate: false,
+ },
+ build: {
+ target: 'esnext',
+ // Keep images as asset files instead of inlining them into the JS bundle.
+ assetsInlineLimit: 0,
+ },
+});
diff --git a/packages/create/tests/manifest.test.ts b/packages/create/tests/manifest.test.ts
new file mode 100644
index 0000000..ae78e1b
--- /dev/null
+++ b/packages/create/tests/manifest.test.ts
@@ -0,0 +1,80 @@
+import { afterEach, expect, it } from "vitest";
+import { fetchTemplatesManifest, parseManifest, resolveGroup } from "../src/utils/manifest";
+
+const validManifest = {
+ version: 1,
+ groups: {
+ solid: {
+ label: "Solid 2.0",
+ path: "solid-v2",
+ templates: [{ name: "basic", default: true, ssrToggle: true }, { name: "bare" }],
+ },
+ },
+};
+
+it("parses a valid manifest", () => {
+ const manifest = parseManifest(validManifest);
+ expect(manifest).toBeDefined();
+ expect(manifest!.groups["solid"].path).toBe("solid-v2");
+ expect(manifest!.groups["solid"].templates.map((t) => t.name)).toEqual(["basic", "bare"]);
+});
+
+it("rejects unknown manifest versions and malformed documents", () => {
+ expect(parseManifest({ ...validManifest, version: 2 })).toBeUndefined();
+ expect(parseManifest(null)).toBeUndefined();
+ expect(parseManifest("nonsense")).toBeUndefined();
+ expect(parseManifest({ version: 1 })).toBeUndefined();
+ expect(parseManifest({ version: 1, groups: { solid: { templates: "not-an-array" } } })).toBeUndefined();
+});
+
+it("drops malformed groups and template entries but keeps the rest", () => {
+ const manifest = parseManifest({
+ version: 1,
+ groups: {
+ solid: { path: "solid-v2", templates: [{ name: "basic" }, { notAName: true }, "bare"] },
+ broken: { path: 42, templates: [{ name: "x" }] },
+ },
+ });
+ expect(manifest).toBeDefined();
+ expect(Object.keys(manifest!.groups)).toEqual(["solid"]);
+ expect(manifest!.groups["solid"].templates).toEqual([{ name: "basic" }]);
+});
+
+it("resolves groups from the manifest, falling back to baked-in lists", () => {
+ const manifest = parseManifest(validManifest);
+ expect(resolveGroup(manifest, "solid").templates.map((t) => t.name)).toEqual(["basic", "bare"]);
+
+ // Groups missing from the manifest fall back per-group
+ expect(resolveGroup(manifest, "vanilla").path).toBe("vanilla");
+
+ // No manifest at all: everything comes from the baked-in lists
+ const baked = resolveGroup(undefined, "solid");
+ expect(baked.path).toBe("solid-v2");
+ expect(baked.templates.map((t) => t.name)).toEqual([
+ "basic",
+ "bare",
+ "fullstack",
+ "fullstack-tanstack",
+ "with-bootstrap",
+ "with-sass",
+ "with-tailwindcss",
+ "with-tanstack-router",
+ "with-unocss",
+ "with-vitest-browser-mode",
+ ]);
+ const basic = baked.templates.find((t) => t.name === "basic")!;
+ expect(basic.default).toBe(true);
+ expect(basic.ssrToggle).toBe(true);
+ expect(resolveGroup(undefined, "start-v2").path).toBe("solid-start-v2");
+ expect(resolveGroup(undefined, "start-v1").path).toBe("solid-start-v1");
+});
+
+afterEach(() => {
+ delete process.env.SOLID_CLI_TEMPLATES_MANIFEST_URL;
+});
+
+it("silently returns undefined when the manifest fetch fails", async () => {
+ // Unroutable address: connection is refused immediately
+ process.env.SOLID_CLI_TEMPLATES_MANIFEST_URL = "http://127.0.0.1:1/templates.json";
+ expect(await fetchTemplatesManifest()).toBeUndefined();
+});
diff --git a/packages/create/tests/ssr-flip.test.ts b/packages/create/tests/ssr-flip.test.ts
new file mode 100644
index 0000000..bdaa739
--- /dev/null
+++ b/packages/create/tests/ssr-flip.test.ts
@@ -0,0 +1,48 @@
+import { beforeEach, expect, it } from "vitest";
+import { mkdtempSync, copyFileSync, existsSync, readFileSync, writeFileSync } from "node:fs";
+import { tmpdir } from "node:os";
+import { join } from "node:path";
+import { fileURLToPath } from "node:url";
+import { applySsrFlip, SERVER_JS, SSR_HINT_COMMENT, SSR_START_SCRIPT } from "../src/utils/ssr-flip";
+
+const fixtures = fileURLToPath(new URL("./fixtures/solid-v2-basic/", import.meta.url));
+
+let dir: string;
+beforeEach(() => {
+ dir = mkdtempSync(join(tmpdir(), "ssr-flip-"));
+ copyFileSync(join(fixtures, "vite.config.ts"), join(dir, "vite.config.ts"));
+ copyFileSync(join(fixtures, "package.json"), join(dir, "package.json"));
+});
+
+it("flips the basic template to streaming SSR", async () => {
+ expect(await applySsrFlip(dir)).toBe(true);
+
+ const viteConfig = readFileSync(join(dir, "vite.config.ts")).toString();
+ expect(viteConfig).toContain("solid({ start: true, ssr: true");
+ expect(viteConfig).not.toContain(SSR_HINT_COMMENT);
+
+ // The production server is a verbatim copy of solid-v2/fullstack/server.js
+ expect(readFileSync(join(dir, "server.js")).toString()).toBe(SERVER_JS);
+
+ const packageJson = JSON.parse(readFileSync(join(dir, "package.json")).toString());
+ expect(packageJson.scripts.start).toBe(SSR_START_SCRIPT);
+ // The other scripts are untouched
+ expect(packageJson.scripts.dev).toBe("vite");
+ expect(packageJson.scripts.build).toBe("vite build");
+});
+
+it("aborts without writing anything when the vite config anchor is missing", async () => {
+ const drifted = `import { defineConfig } from "vite";\nexport default defineConfig({});\n`;
+ writeFileSync(join(dir, "vite.config.ts"), drifted);
+ const packageJsonBefore = readFileSync(join(dir, "package.json")).toString();
+
+ expect(await applySsrFlip(dir)).toBe(false);
+
+ expect(readFileSync(join(dir, "vite.config.ts")).toString()).toBe(drifted);
+ expect(existsSync(join(dir, "server.js"))).toBe(false);
+ expect(readFileSync(join(dir, "package.json")).toString()).toBe(packageJsonBefore);
+});
+
+it("aborts when there is no vite.config.ts", async () => {
+ expect(await applySsrFlip(mkdtempSync(join(tmpdir(), "ssr-flip-empty-")))).toBe(false);
+});
diff --git a/packages/create/tests/template.test.ts b/packages/create/tests/template.test.ts
new file mode 100644
index 0000000..179b2ee
--- /dev/null
+++ b/packages/create/tests/template.test.ts
@@ -0,0 +1,77 @@
+import { afterEach, expect, it } from "vitest";
+import { existsSync, readdirSync, readFileSync, rmSync } from "node:fs";
+import { join } from "node:path";
+import { createSolidV2, createVanilla } from "../src";
+import { fetchTemplatesManifest, resolveGroup, type ManifestGroupKey } from "../src/utils/manifest";
+
+/**
+ * These download from live solidjs/templates HEAD, so they assert the plumbing —
+ * that the right subdir was fetched and extracted into a usable project — rather
+ * than specific files or dependency versions. Template contents, pins and file
+ * layout all change upstream without a CLI release, and must not fail CI here.
+ */
+
+/** Template name + subdir the CLI would actually use, from the live manifest (baked-in fallback) */
+const liveTarget = async (key: ManifestGroupKey) => {
+ const group = resolveGroup(await fetchTemplatesManifest(), key);
+ const template = group.templates.find((t) => t.default) ?? group.templates[0];
+ return { path: group.path, template: template.name };
+};
+
+// begit resolves the destination against `process.cwd()`, so scaffold targets have to be
+// repo-relative. `test/` is gitignored; each run starts from a clean directory so a
+// leftover scaffold can never satisfy the assertions on its own.
+const destinations: string[] = [];
+const scratch = (name: string) => {
+ const destination = join("test", name);
+ rmSync(destination, { recursive: true, force: true });
+ destinations.push(destination);
+ return destination;
+};
+
+afterEach(() => {
+ for (const destination of destinations.splice(0)) rmSync(destination, { recursive: true, force: true });
+});
+
+const expectScaffold = (destination: string) => {
+ const packageJsonPath = join(destination, "package.json");
+ expect(existsSync(packageJsonPath)).toBe(true);
+
+ const packageJson = JSON.parse(readFileSync(packageJsonPath).toString());
+ expect(typeof packageJson.name).toBe("string");
+ expect(Object.keys(packageJson.scripts ?? {}).length).toBeGreaterThan(0);
+ expect(Object.keys(packageJson.dependencies ?? {}).length).toBeGreaterThan(0);
+
+ // Some source to build, whatever the entry files happen to be called
+ expect(readdirSync(join(destination, "src")).length).toBeGreaterThan(0);
+};
+
+// A cold begit cache means pulling the whole templates tarball (~3MB), which does not
+// reliably fit in vitest's 5s default on a slow or contended connection
+const DOWNLOAD_TIMEOUT_MS = 60_000;
+
+it(
+ "downloads and extracts the vanilla template",
+ async () => {
+ const destination = scratch("vanilla");
+ const { path, template } = await liveTarget("vanilla");
+
+ await createVanilla({ template, destination, path }, false);
+
+ expectScaffold(destination);
+ },
+ DOWNLOAD_TIMEOUT_MS,
+);
+
+it(
+ "downloads and extracts the solid-v2 template",
+ async () => {
+ const destination = scratch("solid-v2");
+ const { path, template } = await liveTarget("solid");
+
+ await createSolidV2({ template, destination, path }, false);
+
+ expectScaffold(destination);
+ },
+ DOWNLOAD_TIMEOUT_MS,
+);
diff --git a/packages/create/tests/ts-retarget.test.ts b/packages/create/tests/ts-retarget.test.ts
new file mode 100644
index 0000000..cabb70b
--- /dev/null
+++ b/packages/create/tests/ts-retarget.test.ts
@@ -0,0 +1,28 @@
+import { expect, it } from "vitest";
+import { readFileSync } from "node:fs";
+import { fileURLToPath } from "node:url";
+import { retargetTSFilenames } from "../src/create-solid-v2";
+
+const fixtureConfig = fileURLToPath(new URL("./fixtures/solid-v2-basic/vite.config.ts", import.meta.url));
+
+it("dedupes the extensions array instead of writing ['.jsx', '.jsx']", () => {
+ const converted = retargetTSFilenames(readFileSync(fixtureConfig).toString());
+
+ expect(converted).toContain("extensions: ['.jsx']");
+ expect(converted).not.toContain("'.tsx'");
+ expect(converted).not.toContain("'.jsx', '.jsx'");
+ // Setup files are transpiled alongside the rest of the template
+ expect(converted).toContain("./vitest-setup.js");
+});
+
+it("retargets filename mentions in comments and prose", () => {
+ const converted = retargetTSFilenames(
+ "// generates the entries around src/App.tsx\nSee `vite.config.ts` and `src/routes/users/[id].tsx`. Type declarations stay in `global.d.ts`.",
+ );
+
+ expect(converted).toContain("src/App.jsx");
+ expect(converted).toContain("`vite.config.js`");
+ expect(converted).toContain("[id].jsx");
+ // `.d.ts` files are deleted by the conversion, not renamed
+ expect(converted).toContain("global.d.ts");
+});
diff --git a/packages/ui/tsconfig.json b/packages/create/tsconfig.json
similarity index 57%
rename from packages/ui/tsconfig.json
rename to packages/create/tsconfig.json
index ecaf1e3..e8c3977 100644
--- a/packages/ui/tsconfig.json
+++ b/packages/create/tsconfig.json
@@ -1,19 +1,17 @@
{
"compilerOptions": {
- "target": "ESNext",
- "useDefineForClassFields": true,
"module": "ESNext",
+ "target": "ESNext",
+ "moduleResolution": "Bundler",
+ "strict": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
+ "resolveJsonModule": true,
+ "types": ["node"],
"declaration": true,
"emitDeclarationOnly": true,
- "moduleResolution": "Bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "allowSyntheticDefaultImports": true,
- "strict": true,
- // "noUnusedLocals": true,
- // "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
+ "rootDir": "./src",
"outDir": "types"
},
"include": ["src/*"]
diff --git a/packages/create/tsup.config.ts b/packages/create/tsup.config.ts
new file mode 100644
index 0000000..4a06abf
--- /dev/null
+++ b/packages/create/tsup.config.ts
@@ -0,0 +1,15 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+ entry: ["src/index.ts"],
+ target: "esnext",
+ format: "esm",
+ splitting: true,
+ sourcemap: false,
+ clean: true,
+ treeshake: true,
+ banner: {
+ js: `import { createRequire } from "module";
+ const require = createRequire(import.meta.url);`,
+ },
+});
diff --git a/packages/full-solid/CHANGELOG.md b/packages/full-solid/CHANGELOG.md
new file mode 100644
index 0000000..95f2d0e
--- /dev/null
+++ b/packages/full-solid/CHANGELOG.md
@@ -0,0 +1,27 @@
+# @solid-cli/full
+
+## 0.8.0
+
+### Minor Changes
+
+- support fetching without the github API (so fetching should no work when hitting the github api limit)
+
+## 0.6.4
+
+### Patch Changes
+
+- update dependencies and add to solid start v2 templates list
+
+## 0.6.3
+
+### Patch Changes
+
+- Update dependencies, add new template, and remove `cd` command if project is created in working directory
+
+## 0.6.1
+
+### Patch Changes
+
+- Fix regression from 0.5.x (.gitignore wasn't being written to new projects)
+
+## 0.6.0
diff --git a/packages/full-solid/README.md b/packages/full-solid/README.md
new file mode 100644
index 0000000..0a9a706
--- /dev/null
+++ b/packages/full-solid/README.md
@@ -0,0 +1 @@
+# Full Solid
diff --git a/packages/full-solid/package.json b/packages/full-solid/package.json
new file mode 100644
index 0000000..bc95197
--- /dev/null
+++ b/packages/full-solid/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "@solid-cli/full",
+ "version": "0.8.0",
+ "description": "Create Solid apps with low configuration",
+ "author": "Thomas Beer",
+ "contributors": [
+ "Rahul Batra"
+ ],
+ "license": "MIT",
+ "homepage": "https://solid-cli.netlify.app",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/solidjs-community/solid-cli"
+ },
+ "keywords": [
+ "solidjs",
+ "solid",
+ "cli"
+ ],
+ "main": "dist/index.mjs",
+ "bin": {
+ "sd": "./dist/bin.mjs"
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "start": "jiti ./src/bin.ts",
+ "build": "tsc && tsup",
+ "test": "vitest run"
+ },
+ "devDependencies": {
+ "@clack/prompts": "1.7.0",
+ "picocolors": "^1.1.1",
+ "citty": "^0.2.2",
+ "@solid-cli/create": "workspace:*",
+ "@solid-cli/utils": "workspace:*"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/full-solid/src/bin.ts b/packages/full-solid/src/bin.ts
new file mode 100644
index 0000000..5f2c97c
--- /dev/null
+++ b/packages/full-solid/src/bin.ts
@@ -0,0 +1,32 @@
+#! /usr/bin/env node
+
+import { defineCommand, runMain } from "citty";
+import { createSolid } from "@solid-cli/create";
+import packageJson from "../package.json" with { type: "json" };
+import { intro } from "@clack/prompts";
+import * as color from "picocolors";
+import * as p from "@clack/prompts";
+import { debuginfo } from "./debug";
+import { startCommands } from "./start";
+import { openInBrowser } from "@solid-cli/utils";
+intro(`\n${color.bgCyan(color.black(` Solid CLI v${packageJson.version}`))}`);
+
+const main = defineCommand({
+ meta: {
+ description: "The full Solid CLI",
+ },
+ subCommands: {
+ create: createSolid(packageJson.version),
+ debug: debuginfo,
+ start: startCommands,
+ docs: defineCommand({
+ meta: { description: "Open the Solid Docs in your browser" },
+ async run() {
+ openInBrowser("https://docs.solidjs.com");
+ p.log.success("Opened successfully");
+ },
+ }),
+ },
+});
+
+runMain(main);
diff --git a/packages/full-solid/src/debug/index.ts b/packages/full-solid/src/debug/index.ts
new file mode 100644
index 0000000..77e8c14
--- /dev/null
+++ b/packages/full-solid/src/debug/index.ts
@@ -0,0 +1,58 @@
+/// This subcommand prints useful debug info to stdout
+import { readFile } from "fs/promises";
+import os from "os";
+import { defineCommand } from "citty";
+import { detectRuntime } from "./runtime-detector";
+import * as p from "@clack/prompts";
+type DebugInfo = {
+ runtime: { name: string; version: string };
+ os: { platform: string; release: string };
+ packages: Record;
+};
+const getPackageJSON = async () => {
+ const f = await readFile("package.json");
+ const parsed = JSON.parse(f.toString());
+ return parsed;
+};
+const prettyPrintRecord = (record: Record) => {
+ let str = "";
+ for (const key in record) {
+ const value = record[key];
+ str += ` ${key}: ${value}\n`;
+ }
+ return str;
+};
+
+export const prettyPrint = (info: DebugInfo) => {
+ return `System:
+ OS: ${info.os.platform} ${info.os.release}
+Runtime:
+ ${info.runtime.name}: ${info.runtime.version}
+${
+ Object.keys(info.packages).length !== 0
+ ? `Dependencies:
+${prettyPrintRecord(info.packages)}`
+ : ""
+}`;
+};
+export const fetchDebugInfo = async (): Promise => {
+ const parsed = await getPackageJSON();
+ const packages: Record = parsed.dependencies ?? {};
+ const runtime = detectRuntime();
+ return {
+ runtime,
+ os: {
+ platform: os.platform(),
+ release: os.release(),
+ },
+ packages,
+ };
+};
+
+export const debuginfo = defineCommand({
+ meta: { description: "Print important debug info" },
+ async run(_ctx) {
+ const info = await fetchDebugInfo();
+ p.log.info(prettyPrint(info));
+ },
+});
diff --git a/packages/full-solid/src/debug/runtime-detector.ts b/packages/full-solid/src/debug/runtime-detector.ts
new file mode 100644
index 0000000..014cc4b
--- /dev/null
+++ b/packages/full-solid/src/debug/runtime-detector.ts
@@ -0,0 +1,20 @@
+type RuntimeName = "Bun" | "Node" | "Deno";
+type Runtime = { name: RuntimeName; version: string };
+declare global {
+ var Bun: { version: string } | undefined;
+ var Deno: { version: { deno: string } } | undefined;
+}
+export const detectRuntime = (): Runtime => {
+ if (globalThis.Bun) {
+ return { name: "Bun", version: globalThis.Bun?.version };
+ }
+ if (globalThis.Deno) {
+ return { name: "Deno", version: globalThis.Deno?.version?.deno };
+ }
+ // @ts-ignore
+ if (typeof process !== undefined && !!process.versions?.node) {
+ // @ts-ignore
+ return { name: "Node", version: process?.version };
+ }
+ throw new Error("Unable to detect");
+};
diff --git a/packages/full-solid/src/start/index.ts b/packages/full-solid/src/start/index.ts
new file mode 100644
index 0000000..520876a
--- /dev/null
+++ b/packages/full-solid/src/start/index.ts
@@ -0,0 +1,42 @@
+import { createApi, createRoute } from "@solid-cli/utils";
+import { defineCommand } from "citty";
+import * as p from "@clack/prompts";
+import { green } from "picocolors";
+import { cancelable } from "@solid-cli/utils/ui";
+export const startCommands = defineCommand({
+ meta: { description: "Start-specific commands" },
+ subCommands: {
+ route: defineCommand({
+ meta: { description: "Creates a new route" },
+ args: {
+ path: {
+ type: "positional",
+ required: false,
+ description: "Route path",
+ },
+ api: {
+ type: "boolean",
+ required: false,
+ default: false,
+ alias: "a",
+ },
+ },
+ async run({ args: { path, api } }) {
+ path ||= await cancelable(
+ p.text({
+ message: "Route path",
+ validate(value) {
+ if (!value || value.length === 0) return "A route path is required";
+ },
+ }),
+ );
+ if (api) {
+ await createApi(path as string);
+ } else {
+ await createRoute(path as string);
+ }
+ p.log.success(`Route ${green(path as string)} successfully created!`);
+ },
+ }),
+ },
+});
diff --git a/packages/full-solid/tests/debuginfo.test.ts b/packages/full-solid/tests/debuginfo.test.ts
new file mode 100644
index 0000000..6bbe6cf
--- /dev/null
+++ b/packages/full-solid/tests/debuginfo.test.ts
@@ -0,0 +1,8 @@
+import { expect, it } from "vitest";
+import { fetchDebugInfo, prettyPrint } from "../src/debug";
+
+it("Runs", async () => {
+ const output = prettyPrint(await fetchDebugInfo());
+
+ expect(output).contains("Runtime", "System");
+});
diff --git a/packages/core/tsconfig.json b/packages/full-solid/tsconfig.json
similarity index 75%
rename from packages/core/tsconfig.json
rename to packages/full-solid/tsconfig.json
index b6d4e3a..b354b62 100644
--- a/packages/core/tsconfig.json
+++ b/packages/full-solid/tsconfig.json
@@ -1,6 +1,5 @@
{
"compilerOptions": {
- "baseUrl": ".",
"noEmit": true,
"module": "ESNext",
"target": "ESNext",
@@ -9,6 +8,8 @@
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
- "resolveJsonModule": true
- }
+ "resolveJsonModule": true,
+ "types": ["node"]
+ },
+ "include": ["src/*"]
}
diff --git a/packages/full-solid/tsup.config.ts b/packages/full-solid/tsup.config.ts
new file mode 100644
index 0000000..ed15cdf
--- /dev/null
+++ b/packages/full-solid/tsup.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+ entry: ["src/bin.ts"],
+ target: "esnext",
+ format: "esm",
+ splitting: true,
+ bundle: true,
+ sourcemap: false,
+ clean: true,
+ treeshake: true,
+ minify: true,
+ banner: {
+ js: `import { createRequire } from "module";
+ const require = createRequire(import.meta.url);`,
+ },
+});
diff --git a/packages/reactivity/.gitignore b/packages/reactivity/.gitignore
deleted file mode 100644
index fbf0622..0000000
--- a/packages/reactivity/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-types
\ No newline at end of file
diff --git a/packages/reactivity/README.md b/packages/reactivity/README.md
deleted file mode 100644
index d46f097..0000000
--- a/packages/reactivity/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# @solid-cli/reactivity
-
-A lightweight reactivity system which powers some of the CLI. It is an eager system (derived state is updated immediately when the sources change)
diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json
deleted file mode 100644
index f4a8c97..0000000
--- a/packages/reactivity/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@solid-cli/reactivity",
- "version": "0.0.9",
- "description": "The minimal, eager reactive system that powers the Solid CLI",
- "license": "MIT",
- "homepage": "https://solid-cli.netlify.app",
- "repository": {
- "type": "git",
- "url": "https://github.com/solidjs-community/solid-cli"
- },
- "main": "./dist/index.mjs",
- "module": "./dist/index.mjs",
- "types": "./types/index.d.ts",
- "exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.mjs",
- "types": "./types/index.d.ts"
- }
- },
- "scripts": {
- "test": "vitest run",
- "build": "tsc && tsup"
- },
- "author": "Thomas Beer",
- "devDependencies": {
- "tsup": "^7.2.0",
- "typescript": "^5.1.6"
- },
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/packages/reactivity/src/api/index.ts b/packages/reactivity/src/api/index.ts
deleted file mode 100644
index ffedb90..0000000
--- a/packages/reactivity/src/api/index.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { Computation, Getter, Signal, batch, runWithListener } from "../core";
-export { batch, getListener, type Getter, type Setter, type Signal } from "../core";
-type OnOptions = { defer: boolean };
-export function on(deps: Getter, fn: (val: G) => T, options?: OnOptions): () => T | undefined;
-export function on(deps: Getter[] | Getter, fn: (val: any) => T, options?: OnOptions) {
- let shouldDefer = options?.defer ?? false;
- return () => {
- // Track all getters on call
- let args: any[] = [];
- Array.isArray(deps) ? deps.forEach((d) => args.push(d())) : args.push(deps());
- if (shouldDefer) {
- shouldDefer = false;
- return;
- }
- // Ensure that the function isn't tracked
- return untrack(() => fn(args.length === 1 ? args[0] : args));
- };
-}
-export function createSignal(val: T) {
- const comp = new Computation(() => val);
- const set = (fnOrVal: T | ((val: T | null) => T) | null) => {
- if (typeof fnOrVal === "function") {
- let fn = fnOrVal as (val: T | null) => T;
- const newVal = fn(untrack(comp.get));
- comp.set(newVal);
- } else {
- comp.set(fnOrVal as T);
- }
- };
- return [comp.get, set] as Signal;
-}
-export function createEffect(fn: () => T) {
- new Computation(fn);
-}
-export function createMemo(fn: () => T) {
- const comp = new Computation(fn);
- return comp.get;
-}
-export function createAsync(fn: () => Promise) {
- const [get, set] = createSignal(null);
- const [loading, setLoading] = createSignal(true);
- fn().then((val) => {
- batch(() => {
- set(val);
- setLoading(false);
- });
- });
- Object.defineProperties(get, {
- loading: {
- get() {
- return loading();
- },
- },
- });
- return get as Getter & { loading: boolean };
-}
-export function untrack(fn: () => T) {
- return runWithListener(null, fn);
-}
diff --git a/packages/reactivity/src/core/index.ts b/packages/reactivity/src/core/index.ts
deleted file mode 100644
index 63e923a..0000000
--- a/packages/reactivity/src/core/index.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-export type Getter = () => T;
-export type Setter = (val: T | ((val: T | null) => T)) => void;
-export type Signal = [Getter, Setter];
-let OBSERVER: Computation | null = null;
-let BATCHING = false;
-const UPDATEQUEUE: Computation[] = [];
-export class Computation {
- fn: () => T;
- value: T | null = null;
- state: number = 0;
- queueSlot: number = -1;
- sources: Set> = new Set();
- observers: Set> = new Set();
- constructor(fn: () => T) {
- this.fn = fn;
- this.update();
- }
- track() {
- if (!OBSERVER) return;
- this.observers.add(OBSERVER);
- OBSERVER.sources.add(this);
- }
- get = () => {
- // We need to make sure memos update if they're accessed during a `batch`
- if (this.queueSlot != -1) {
- UPDATEQUEUE.splice(this.queueSlot, 1);
- const prev = BATCHING;
- BATCHING = false;
- this.update();
- BATCHING = prev;
- this.queueSlot = -1;
- }
- this.track();
- return this.value;
- };
- set = (newVal: T) => {
- if (newVal === this.value) return;
- this.value = newVal;
- this.notifyObservers();
- };
- removeParentObservers() {
- if (!this.sources) return;
- this.sources.forEach((s) => s.observers.delete(this));
- this.sources.clear();
- }
- pullSourceUpdates() {
- if (!this.sources) return;
- this.sources.forEach((s) => s.update());
- }
- update() {
- if (BATCHING) {
- if (this.queueSlot != -1) return;
- this.queueSlot = UPDATEQUEUE.length;
- UPDATEQUEUE.push(this);
- return;
- }
- // this.removeParentObservers();
- const prev = OBSERVER;
- OBSERVER = this;
- const newVal = this.fn();
- OBSERVER = prev;
- if (newVal === this.value) return;
- this.value = newVal;
- }
- increment() {
- this.state++;
- // Only increment children if the state has increased to 1, as we don't want to repeatedly re-increment if this node has multiple parents that need updating
- if (this.state === 1) {
- this.observers.forEach((o) => o.increment());
- }
- }
- decrement() {
- this.state--;
- if (this.state === 0) {
- this.update();
- this.observers.forEach((o) => o.decrement());
- }
- }
- notifyObservers() {
- this.observers.forEach((o) => o.increment());
- this.observers.forEach((o) => o.decrement());
- }
-}
-function stabilize() {
- UPDATEQUEUE.forEach((u) => u.update());
- UPDATEQUEUE.length = 0;
-}
-export function batch(fn: () => T) {
- BATCHING = true;
- const res = fn();
- BATCHING = false;
- stabilize();
- return res;
-}
-export function getListener() {
- return OBSERVER;
-}
-export function runWithListener(listener: Computation | null, fn: () => T) {
- const prev = OBSERVER;
- OBSERVER = listener;
- const res = fn();
- OBSERVER = prev;
- return res;
-}
diff --git a/packages/reactivity/src/index.ts b/packages/reactivity/src/index.ts
deleted file mode 100644
index d158c57..0000000
--- a/packages/reactivity/src/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./api";
diff --git a/packages/reactivity/test/async.test.ts b/packages/reactivity/test/async.test.ts
deleted file mode 100644
index 481fd75..0000000
--- a/packages/reactivity/test/async.test.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { describe, expect, test } from "vitest";
-import { createAsync, createEffect } from "../src";
-
-describe("createAsync", () => {
- test("An async function resolves to a value", async () => {
- const asyncFn = createAsync(async () => {
- return 123;
- });
- const res = await new Promise((res) => {
- createEffect(() => {
- const result = asyncFn();
- if (result) res(result);
- });
- });
- expect(res).toBe(123);
- });
- test("An async function has a loading state", async () => {
- const asyncFn = createAsync(async () => {
- return 123;
- });
- expect(asyncFn.loading).toBe(true);
- queueMicrotask(() => expect(asyncFn.loading).toBe(false));
- });
-});
diff --git a/packages/reactivity/test/batch.test.ts b/packages/reactivity/test/batch.test.ts
deleted file mode 100644
index 4a9f647..0000000
--- a/packages/reactivity/test/batch.test.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import { test, expect } from "vitest";
-import { describe } from "vitest";
-import { batch, createAsync, createEffect, createMemo, createSignal } from "../src";
-
-describe("batch", () => {
- test("Multiple updates should only trigger an effect once", () => {
- const [get, set] = createSignal(0);
- let updates = 0;
- createEffect(() => {
- get();
- updates++;
- });
- batch(() => {
- set(1);
- set(2);
- });
- expect(updates).toBe(2);
- expect(get()).toBe(2);
- });
- test("A memo called within a batch should get its value updated", () => {
- const [get, set] = createSignal(0);
- const memo = createMemo(() => get() * 2);
- batch(() => {
- set(1);
- expect(memo()).toBe(2);
- });
- });
- test("An effect depending on both loading and data should only run once when the async resolves", async () => {
- const data = createAsync(async () => {
- return 123;
- });
- let updates = 0;
- await new Promise((res) =>
- createEffect(() => {
- // We track both the data itself and the loading signal
- const d = data();
- const loading = data.loading;
- updates++;
- if (d === 123 && loading === false) res(d);
- }),
- );
- expect(updates).toBe(2);
- });
- test("A derived memo accessed within a batch should resolve to the correct value", () => {
- const [get, set] = createSignal(0);
- const memo = createMemo(() => get() * 2);
- let updates = 0;
- // First update on initial run
- const derived = createMemo(() => {
- updates++;
- return memo()! * 2;
- });
- batch(() => {
- set(1);
- set(2);
- // 2nd Update on access
- expect(derived()).toBe(8);
- set(3);
- // 3rd update on access
- expect(derived()).toBe(12);
- });
- expect(updates).toBe(3);
- });
- test.skip("Diamond problem with memos accessed in a batch", () => {
- const [get, set] = createSignal(0);
- let updates = 0;
- const A = createMemo(() => {
- updates++;
- get();
- });
- const B = createMemo(() => A()! * 2);
- const C = createMemo(() => A()! * 3);
- const D = createMemo(() => B()! + C()!);
- batch(() => {
- set(2);
- });
- // Actually currently get 3 here
- expect(updates).toBe(2);
- });
-});
diff --git a/packages/reactivity/test/effects.test.ts b/packages/reactivity/test/effects.test.ts
deleted file mode 100644
index 6156aaf..0000000
--- a/packages/reactivity/test/effects.test.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { describe, test, expect } from "vitest";
-import { createEffect, createSignal } from "../src";
-describe("createEffect", () => {
- test("An effect executes once when created", () => {
- let updates = 0;
- createEffect(() => {
- updates++;
- });
- expect(updates).toBe(1);
- });
- test("An effect re-executes when a dependency changes", () => {
- let updates = 0;
- const [value, setValue] = createSignal(0);
- createEffect(() => {
- value();
- updates++;
- });
- expect(updates).toBe(1);
- setValue(1);
- expect(updates).toBe(2);
- });
- test("Changes propagate correctly", () => {
- const [get, set] = createSignal(0);
- let updates = 0;
- createEffect(() => {
- get();
- updates++;
- });
- expect(updates).toBe(1);
- set(1);
- expect(updates).toBe(2);
- set(2);
- expect(updates).toBe(3);
- });
-});
diff --git a/packages/reactivity/test/memos.test.ts b/packages/reactivity/test/memos.test.ts
deleted file mode 100644
index 88e28ef..0000000
--- a/packages/reactivity/test/memos.test.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { describe, test, expect } from "vitest";
-import { createMemo, createSignal } from "../src";
-describe("createMemo", () => {
- test("A memo is executed once on creation", () => {
- let updates = 0;
- createMemo(() => {
- updates++;
- });
- expect(updates).toBe(1);
- });
- test("A memo updates when its dependencies change", () => {
- const [value, setValue] = createSignal(0);
- let updates = 0;
- createMemo(() => {
- value();
- updates++;
- });
- expect(updates).toBe(1);
- setValue(1);
- expect(updates).toBe(2);
- });
- test("Memos don't overexecute if a dependency doesn't change", () => {
- const [value, setValue] = createSignal(0);
- const memo1 = createMemo(() => {
- value();
- return 1;
- });
- let updates = 0;
- const memo2 = createMemo(() => {
- updates++;
- return memo1();
- });
- expect(memo2()).toBe(1);
- setValue(0);
- expect(updates).toBe(1);
- });
- test("Memos don't overexecute in a diamond (The diamond problem)", () => {
- const [A, setA] = createSignal(0);
- const B = createMemo(() => {
- console.log("B updating");
- return A() * 2;
- });
- const C = createMemo(() => {
- console.log("C updating");
- return A() + 2;
- });
- let updates = 0;
- const D = createMemo(() => {
- updates++;
- return B()! + C()!;
- });
- expect(D()).toBe(2);
- setA(1);
- expect(D()).toBe(5);
- expect(updates).toBe(2);
- });
-});
diff --git a/packages/reactivity/test/signals.test.ts b/packages/reactivity/test/signals.test.ts
deleted file mode 100644
index c227cfe..0000000
--- a/packages/reactivity/test/signals.test.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { describe, test, expect } from "vitest";
-import { createSignal } from "../src";
-describe("createSignal", () => {
- test("A signal should hold a value that can be updated", () => {
- const [value, setValue] = createSignal(0);
- expect(value()).toBe(0);
- setValue(1);
- expect(value()).toBe(1);
- });
-});
diff --git a/packages/reactivity/tsconfig.json b/packages/reactivity/tsconfig.json
deleted file mode 100644
index 1bd37fb..0000000
--- a/packages/reactivity/tsconfig.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "useDefineForClassFields": true,
- "module": "ESNext",
- "skipLibCheck": true,
- "declaration": true,
- "emitDeclarationOnly": true,
- /* Bundler mode */
- "moduleResolution": "bundler",
- // "allowImportingTsExtensions": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- // "noEmit": true,
-
- /* Linting */
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
- "outDir": "types"
- },
- "include": ["src/*"]
-}
diff --git a/packages/reactivity/tsup.config.ts b/packages/reactivity/tsup.config.ts
deleted file mode 100644
index 0289b01..0000000
--- a/packages/reactivity/tsup.config.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig({
- entry: ["src/index.ts"],
- target: "esnext",
- format: ["esm", "cjs"],
- splitting: false,
- sourcemap: true,
- clean: true,
-});
diff --git a/packages/swc-plugin-solid-cli/.cargo/config b/packages/swc-plugin-solid-cli/.cargo/config
deleted file mode 100644
index eaa0fee..0000000
--- a/packages/swc-plugin-solid-cli/.cargo/config
+++ /dev/null
@@ -1,5 +0,0 @@
-# These command aliases are not final, may change
-[alias]
-# Alias to build actual plugin binary for the specified target.
-build-wasi = "build --target wasm32-wasi"
-build-wasm32 = "build --target wasm32-unknown-unknown"
diff --git a/packages/swc-plugin-solid-cli/.gitignore b/packages/swc-plugin-solid-cli/.gitignore
deleted file mode 100644
index 28aa12d..0000000
--- a/packages/swc-plugin-solid-cli/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/target
-^target/
-target
-output/*.rlib
\ No newline at end of file
diff --git a/packages/swc-plugin-solid-cli/Cargo.lock b/packages/swc-plugin-solid-cli/Cargo.lock
deleted file mode 100644
index 6d4c603..0000000
--- a/packages/swc-plugin-solid-cli/Cargo.lock
+++ /dev/null
@@ -1,2305 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "Inflector"
-version = "0.11.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
-dependencies = [
- "lazy_static",
- "regex",
-]
-
-[[package]]
-name = "addr2line"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
-dependencies = [
- "gimli",
-]
-
-[[package]]
-name = "adler"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-
-[[package]]
-name = "ahash"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
-name = "ahash"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
-dependencies = [
- "cfg-if",
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
-name = "aho-corasick"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "ansi_term"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.72"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
-
-[[package]]
-name = "arrayvec"
-version = "0.7.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
-
-[[package]]
-name = "ast_node"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c09c69dffe06d222d072c878c3afe86eee2179806f20503faec97250268b4c24"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi 0.1.19",
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-
-[[package]]
-name = "backtrace"
-version = "0.3.68"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
-dependencies = [
- "addr2line",
- "cc",
- "cfg-if",
- "libc",
- "miniz_oxide",
- "object",
- "rustc-demangle",
-]
-
-[[package]]
-name = "base64"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-
-[[package]]
-name = "better_scoped_tls"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de"
-dependencies = [
- "scoped-tls",
-]
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "bitflags"
-version = "2.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
-
-[[package]]
-name = "bitvec"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
-dependencies = [
- "funty",
- "radium",
- "tap",
- "wyz",
-]
-
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "bytecheck"
-version = "0.6.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
-dependencies = [
- "bytecheck_derive",
- "ptr_meta",
- "simdutf8",
-]
-
-[[package]]
-name = "bytecheck_derive"
-version = "0.6.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "camino"
-version = "1.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "cargo-platform"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "cargo_metadata"
-version = "0.15.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
-dependencies = [
- "camino",
- "cargo-platform",
- "semver 1.0.18",
- "serde",
- "serde_json",
- "thiserror",
-]
-
-[[package]]
-name = "cc"
-version = "1.0.82"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "cpufeatures"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
-[[package]]
-name = "dashmap"
-version = "5.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d"
-dependencies = [
- "cfg-if",
- "hashbrown 0.14.0",
- "lock_api",
- "once_cell",
- "parking_lot_core",
-]
-
-[[package]]
-name = "data-encoding"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
-
-[[package]]
-name = "debugid"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
-dependencies = [
- "serde",
- "uuid",
-]
-
-[[package]]
-name = "deranged"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929"
-
-[[package]]
-name = "diff"
-version = "0.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
-
-[[package]]
-name = "difference"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
-
-[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
-[[package]]
-name = "either"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
-
-[[package]]
-name = "enum-iterator"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7add3873b5dd076766ee79c8e406ad1a472c385476b9e38849f8eec24f1be689"
-dependencies = [
- "enum-iterator-derive",
-]
-
-[[package]]
-name = "enum-iterator-derive"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "errno"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "windows-sys",
-]
-
-[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-dependencies = [
- "cc",
- "libc",
-]
-
-[[package]]
-name = "fastrand"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
-
-[[package]]
-name = "fixedbitset"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
-dependencies = [
- "percent-encoding",
-]
-
-[[package]]
-name = "from_variant"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03ec5dc38ee19078d84a692b1c41181ff9f94331c76cee66ff0208c770b5e54f"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "funty"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
-
-[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "getset"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9"
-dependencies = [
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "gimli"
-version = "0.27.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
-
-[[package]]
-name = "glob"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
-
-[[package]]
-name = "hashbrown"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-dependencies = [
- "ahash 0.7.6",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
-
-[[package]]
-name = "hermit-abi"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "idna"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "if_chain"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
-
-[[package]]
-name = "indexmap"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "is-macro"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4467ed1321b310c2625c5aa6c1b1ffc5de4d9e42668cf697a08fb033ee8265e"
-dependencies = [
- "Inflector",
- "pmutil",
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "is_ci"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
-
-[[package]]
-name = "itoa"
-version = "1.0.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "libc"
-version = "0.2.147"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
-
-[[package]]
-name = "lock_api"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
-dependencies = [
- "autocfg",
- "scopeguard",
-]
-
-[[package]]
-name = "log"
-version = "0.4.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
-
-[[package]]
-name = "matchers"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
-dependencies = [
- "regex-automata 0.1.10",
-]
-
-[[package]]
-name = "memchr"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
-
-[[package]]
-name = "miette"
-version = "4.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c90329e44f9208b55f45711f9558cec15d7ef8295cc65ecd6d4188ae8edc58c"
-dependencies = [
- "atty",
- "backtrace",
- "miette-derive",
- "once_cell",
- "owo-colors",
- "supports-color",
- "supports-hyperlinks",
- "supports-unicode",
- "terminal_size",
- "textwrap",
- "thiserror",
- "unicode-width",
-]
-
-[[package]]
-name = "miette-derive"
-version = "4.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b5bc45b761bcf1b5e6e6c4128cd93b84c218721a8d9b894aa0aff4ed180174c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "miniz_oxide"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
-dependencies = [
- "adler",
-]
-
-[[package]]
-name = "new_debug_unreachable"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
-
-[[package]]
-name = "nu-ansi-term"
-version = "0.46.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
-dependencies = [
- "overload",
- "winapi",
-]
-
-[[package]]
-name = "num-bigint"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
- "serde",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "num_cpus"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
-dependencies = [
- "hermit-abi 0.3.2",
- "libc",
-]
-
-[[package]]
-name = "object"
-version = "0.31.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
-
-[[package]]
-name = "overload"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
-
-[[package]]
-name = "owo-colors"
-version = "3.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
-
-[[package]]
-name = "parking_lot"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
-dependencies = [
- "lock_api",
- "parking_lot_core",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.9.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall",
- "smallvec",
- "windows-targets",
-]
-
-[[package]]
-name = "percent-encoding"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
-
-[[package]]
-name = "petgraph"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
-dependencies = [
- "fixedbitset",
- "indexmap",
-]
-
-[[package]]
-name = "phf"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
-dependencies = [
- "phf_macros",
- "phf_shared",
- "proc-macro-hack",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
-dependencies = [
- "phf_shared",
- "rand",
-]
-
-[[package]]
-name = "phf_macros"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
-dependencies = [
- "phf_generator",
- "phf_shared",
- "proc-macro-hack",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
-dependencies = [
- "siphasher",
-]
-
-[[package]]
-name = "pin-project-lite"
-version = "0.2.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
-
-[[package]]
-name = "pmutil"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
-
-[[package]]
-name = "precomputed-hash"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
-
-[[package]]
-name = "pretty_assertions"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
-dependencies = [
- "diff",
- "yansi",
-]
-
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-hack"
-version = "0.5.20+deprecated"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.66"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "psm"
-version = "0.1.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "ptr_meta"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
-dependencies = [
- "ptr_meta_derive",
-]
-
-[[package]]
-name = "ptr_meta_derive"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "radium"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
-
-[[package]]
-name = "radix_fmt"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce082a9940a7ace2ad4a8b7d0b1eac6aa378895f18be598230c5f2284ac05426"
-
-[[package]]
-name = "rand"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-dependencies = [
- "libc",
- "rand_chacha",
- "rand_core",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
-dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "regex"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata 0.3.6",
- "regex-syntax 0.7.4",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-dependencies = [
- "regex-syntax 0.6.29",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax 0.7.4",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
-
-[[package]]
-name = "regex-syntax"
-version = "0.7.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
-
-[[package]]
-name = "relative-path"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698"
-
-[[package]]
-name = "rend"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
-dependencies = [
- "bytecheck",
-]
-
-[[package]]
-name = "rkyv"
-version = "0.7.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58"
-dependencies = [
- "bitvec",
- "bytecheck",
- "hashbrown 0.12.3",
- "ptr_meta",
- "rend",
- "rkyv_derive",
- "seahash",
- "tinyvec",
- "uuid",
-]
-
-[[package]]
-name = "rkyv_derive"
-version = "0.7.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "rustc-demangle"
-version = "0.1.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
-
-[[package]]
-name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
-[[package]]
-name = "rustc_version"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-dependencies = [
- "semver 0.9.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399"
-dependencies = [
- "bitflags 2.3.3",
- "errno",
- "libc",
- "linux-raw-sys",
- "windows-sys",
-]
-
-[[package]]
-name = "rustversion"
-version = "1.0.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
-
-[[package]]
-name = "ryu"
-version = "1.0.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
-
-[[package]]
-name = "ryu-js"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f"
-
-[[package]]
-name = "scoped-tls"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
-
-[[package]]
-name = "scopeguard"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-
-[[package]]
-name = "seahash"
-version = "4.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
-
-[[package]]
-name = "semver"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-dependencies = [
- "semver-parser",
-]
-
-[[package]]
-name = "semver"
-version = "1.0.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "semver-parser"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-
-[[package]]
-name = "serde"
-version = "1.0.183"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.183"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.104"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "sha-1"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
-[[package]]
-name = "sharded-slab"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
-dependencies = [
- "lazy_static",
-]
-
-[[package]]
-name = "simdutf8"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
-
-[[package]]
-name = "siphasher"
-version = "0.3.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
-
-[[package]]
-name = "smallvec"
-version = "1.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
-
-[[package]]
-name = "smartstring"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
-dependencies = [
- "autocfg",
- "static_assertions",
- "version_check",
-]
-
-[[package]]
-name = "smawk"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
-
-[[package]]
-name = "sourcemap"
-version = "6.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9221a6bba3e9cfa7decfe64edf5233311e1bf837ea3234df6e7f35836e1093d"
-dependencies = [
- "data-encoding",
- "debugid",
- "if_chain",
- "rustc_version",
- "serde",
- "serde_json",
- "unicode-id",
- "url",
-]
-
-[[package]]
-name = "stable_deref_trait"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
-
-[[package]]
-name = "stacker"
-version = "0.1.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
-dependencies = [
- "cc",
- "cfg-if",
- "libc",
- "psm",
- "winapi",
-]
-
-[[package]]
-name = "static_assertions"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-
-[[package]]
-name = "string_cache"
-version = "0.8.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
-dependencies = [
- "new_debug_unreachable",
- "once_cell",
- "parking_lot",
- "phf_shared",
- "precomputed-hash",
- "serde",
-]
-
-[[package]]
-name = "string_cache_codegen"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
-dependencies = [
- "phf_generator",
- "phf_shared",
- "proc-macro2",
- "quote",
-]
-
-[[package]]
-name = "string_enum"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fa4d4f81d7c05b9161f8de839975d3326328b8ba2831164b465524cc2f55252"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "supports-color"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f"
-dependencies = [
- "atty",
- "is_ci",
-]
-
-[[package]]
-name = "supports-hyperlinks"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "590b34f7c5f01ecc9d78dba4b3f445f31df750a67621cf31626f3b7441ce6406"
-dependencies = [
- "atty",
-]
-
-[[package]]
-name = "supports-unicode"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8b945e45b417b125a8ec51f1b7df2f8df7920367700d1f98aedd21e5735f8b2"
-dependencies = [
- "atty",
-]
-
-[[package]]
-name = "swc-plugin-solid-cli"
-version = "0.1.0"
-dependencies = [
- "serde",
- "serde_json",
- "swc_core",
- "testing",
-]
-
-[[package]]
-name = "swc_atoms"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8066e17abb484602da673e2d35138ab32ce53f26368d9c92113510e1659220b"
-dependencies = [
- "bytecheck",
- "once_cell",
- "rkyv",
- "rustc-hash",
- "serde",
- "string_cache",
- "string_cache_codegen",
- "triomphe",
-]
-
-[[package]]
-name = "swc_cached"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97b8051bbf1c23817f9f2912fce18d9a6efcaaf8f8e1a4c69dbaf72bcaf71136"
-dependencies = [
- "ahash 0.8.3",
- "anyhow",
- "dashmap",
- "once_cell",
- "regex",
- "serde",
-]
-
-[[package]]
-name = "swc_common"
-version = "0.31.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e30cd01afa791b15263fcfe8f77ecbbd020ddef659f0f58d3c7b794ad65c1738"
-dependencies = [
- "ahash 0.8.3",
- "anyhow",
- "ast_node",
- "atty",
- "better_scoped_tls",
- "bytecheck",
- "cfg-if",
- "either",
- "from_variant",
- "new_debug_unreachable",
- "num-bigint",
- "once_cell",
- "parking_lot",
- "rkyv",
- "rustc-hash",
- "serde",
- "siphasher",
- "sourcemap",
- "string_cache",
- "swc_atoms",
- "swc_eq_ignore_macros",
- "swc_visit",
- "termcolor",
- "tracing",
- "unicode-width",
- "url",
-]
-
-[[package]]
-name = "swc_config"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ba1c7a40d38f9dd4e9a046975d3faf95af42937b34b2b963be4d8f01239584b"
-dependencies = [
- "indexmap",
- "serde",
- "serde_json",
- "swc_config_macro",
-]
-
-[[package]]
-name = "swc_config_macro"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5b5aaca9a0082be4515f0fbbecc191bf5829cd25b5b9c0a2810f6a2bb0d6829"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_core"
-version = "0.79.51"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80c4030b2c5887d0f2d3ce5ef4928c9377d731ce50336895cdeee162605a74ce"
-dependencies = [
- "once_cell",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_minifier",
- "swc_ecma_parser",
- "swc_ecma_transforms_base",
- "swc_ecma_transforms_testing",
- "swc_ecma_utils",
- "swc_ecma_visit",
- "swc_plugin",
- "swc_plugin_macro",
- "swc_plugin_proxy",
- "vergen",
-]
-
-[[package]]
-name = "swc_ecma_ast"
-version = "0.107.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ce6ba552db5098e9e7b5e7fcc30ef1e9f2b33ec930a94489288e21f8e95b213"
-dependencies = [
- "bitflags 2.3.3",
- "bytecheck",
- "is-macro",
- "num-bigint",
- "rkyv",
- "scoped-tls",
- "serde",
- "string_enum",
- "swc_atoms",
- "swc_common",
- "unicode-id",
-]
-
-[[package]]
-name = "swc_ecma_codegen"
-version = "0.142.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20b9c1920bee89a90cfd100d5c2d22e0557760a86cc00726935209635301b482"
-dependencies = [
- "memchr",
- "num-bigint",
- "once_cell",
- "rustc-hash",
- "serde",
- "sourcemap",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_codegen_macros",
- "tracing",
-]
-
-[[package]]
-name = "swc_ecma_codegen_macros"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcdff076dccca6cc6a0e0b2a2c8acfb066014382bc6df98ec99e755484814384"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_ecma_minifier"
-version = "0.184.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b52e83587eef45091514c4c1d93d4a9e4e958f43cd9b56d19d4ebd8a878b1d5"
-dependencies = [
- "ahash 0.8.3",
- "arrayvec",
- "indexmap",
- "num-bigint",
- "num_cpus",
- "once_cell",
- "parking_lot",
- "radix_fmt",
- "regex",
- "rustc-hash",
- "ryu-js",
- "serde",
- "serde_json",
- "swc_atoms",
- "swc_cached",
- "swc_common",
- "swc_config",
- "swc_ecma_ast",
- "swc_ecma_codegen",
- "swc_ecma_parser",
- "swc_ecma_transforms_base",
- "swc_ecma_transforms_optimization",
- "swc_ecma_usage_analyzer",
- "swc_ecma_utils",
- "swc_ecma_visit",
- "swc_timer",
- "tracing",
-]
-
-[[package]]
-name = "swc_ecma_parser"
-version = "0.137.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8eaccdcfd630dfa46e90d2b9ea20260e20ad275361b747ad8c9b93300470627"
-dependencies = [
- "either",
- "num-bigint",
- "num-traits",
- "serde",
- "smallvec",
- "smartstring",
- "stacker",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "tracing",
- "typed-arena",
-]
-
-[[package]]
-name = "swc_ecma_testing"
-version = "0.20.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35902aefa048253d193d7b0a4500f2bc98ed24f6607597ef967f612a2c4e45a2"
-dependencies = [
- "anyhow",
- "hex",
- "sha-1",
- "testing",
- "tracing",
-]
-
-[[package]]
-name = "swc_ecma_transforms_base"
-version = "0.130.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f477cba9333b082dc67c66fff068decf3678c572b55175678bc57fde582af72f"
-dependencies = [
- "better_scoped_tls",
- "bitflags 2.3.3",
- "indexmap",
- "once_cell",
- "phf",
- "rustc-hash",
- "serde",
- "smallvec",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_parser",
- "swc_ecma_utils",
- "swc_ecma_visit",
- "tracing",
-]
-
-[[package]]
-name = "swc_ecma_transforms_macros"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f59c4b6ed5d78d3ad9fc7c6f8ab4f85bba99573d31d9a2c0a712077a6b45efd2"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_ecma_transforms_optimization"
-version = "0.190.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74be6367b3830f4e2dcefb8c6b968600b3e1b3baf64872d365d0d5b89de55d61"
-dependencies = [
- "ahash 0.8.3",
- "dashmap",
- "indexmap",
- "once_cell",
- "petgraph",
- "rustc-hash",
- "serde_json",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_parser",
- "swc_ecma_transforms_base",
- "swc_ecma_transforms_macros",
- "swc_ecma_utils",
- "swc_ecma_visit",
- "swc_fast_graph",
- "tracing",
-]
-
-[[package]]
-name = "swc_ecma_transforms_testing"
-version = "0.133.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c58533aa8ed009af31adf1fbcd4b4cfb437721122e1c2a4505bede26eb0cc50"
-dependencies = [
- "ansi_term",
- "anyhow",
- "base64",
- "hex",
- "serde",
- "serde_json",
- "sha-1",
- "sourcemap",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_codegen",
- "swc_ecma_parser",
- "swc_ecma_testing",
- "swc_ecma_transforms_base",
- "swc_ecma_utils",
- "swc_ecma_visit",
- "tempfile",
- "testing",
-]
-
-[[package]]
-name = "swc_ecma_usage_analyzer"
-version = "0.16.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d050e4d2948720c9aa83915e01dd49f69837bd13a3eb60965a1ed5ba4e97555c"
-dependencies = [
- "ahash 0.8.3",
- "indexmap",
- "rustc-hash",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_utils",
- "swc_ecma_visit",
- "swc_timer",
- "tracing",
-]
-
-[[package]]
-name = "swc_ecma_utils"
-version = "0.120.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d757778f6789a54bf2739007057af2917a6ac3b1d686fb06b56b88feda24e4bc"
-dependencies = [
- "indexmap",
- "num_cpus",
- "once_cell",
- "rustc-hash",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_ecma_visit",
- "tracing",
- "unicode-id",
-]
-
-[[package]]
-name = "swc_ecma_visit"
-version = "0.93.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b701da2f2b16308865e2ab18db13df60cdf563b243430ca99e8ad6f8b760d83a"
-dependencies = [
- "num-bigint",
- "swc_atoms",
- "swc_common",
- "swc_ecma_ast",
- "swc_visit",
- "tracing",
-]
-
-[[package]]
-name = "swc_eq_ignore_macros"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05a95d367e228d52484c53336991fdcf47b6b553ef835d9159db4ba40efb0ee8"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_error_reporters"
-version = "0.15.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42b190cdaf440a894db49d50bc497fcc14fdf0f013fdaf7be2e69874cd1b5d0"
-dependencies = [
- "anyhow",
- "miette",
- "once_cell",
- "parking_lot",
- "swc_common",
-]
-
-[[package]]
-name = "swc_fast_graph"
-version = "0.19.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11cc84ef676e0901c5a7a01394b98f5219beee0e22f746fbe2c90ee998ceda15"
-dependencies = [
- "indexmap",
- "petgraph",
- "rustc-hash",
- "swc_common",
-]
-
-[[package]]
-name = "swc_macros_common"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a273205ccb09b51fabe88c49f3b34c5a4631c4c00a16ae20e03111d6a42e832"
-dependencies = [
- "pmutil",
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_plugin"
-version = "0.90.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca5df720531bfbd7ceb1139319c39c20c446abfb8f7e0eb47b104205a71152b4"
-dependencies = [
- "once_cell",
-]
-
-[[package]]
-name = "swc_plugin_macro"
-version = "0.9.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "785309d342a69df4c929ee59e14e36889ca832f1d2a3c1d03c47c93126c72dbc"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_plugin_proxy"
-version = "0.36.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61b44c091eed6107b5d5970edb63acbe872e885495aae90de8450672d4b9868"
-dependencies = [
- "better_scoped_tls",
- "rkyv",
- "swc_common",
- "swc_ecma_ast",
- "swc_trace_macro",
- "tracing",
-]
-
-[[package]]
-name = "swc_timer"
-version = "0.19.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4560c944a65d817fba2fbfd39a914d04b446da9bb1f1c5d74b42a28259d733df"
-dependencies = [
- "tracing",
-]
-
-[[package]]
-name = "swc_trace_macro"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff9719b6085dd2824fd61938a881937be14b08f95e2d27c64c825a9f65e052ba"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "swc_visit"
-version = "0.5.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e87c337fbb2d191bf371173dea6a957f01899adb8f189c6c31b122a6cfc98fc3"
-dependencies = [
- "either",
- "swc_visit_macros",
-]
-
-[[package]]
-name = "swc_visit_macros"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f322730fb82f3930a450ac24de8c98523af7d34ab8cb2f46bcb405839891a99"
-dependencies = [
- "Inflector",
- "pmutil",
- "proc-macro2",
- "quote",
- "swc_macros_common",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.109"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "syn"
-version = "2.0.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "tap"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
-
-[[package]]
-name = "tempfile"
-version = "3.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
-dependencies = [
- "cfg-if",
- "fastrand",
- "redox_syscall",
- "rustix",
- "windows-sys",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "terminal_size"
-version = "0.1.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "testing"
-version = "0.33.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df186694fbd668f4c7c8071c5e442b0c8781c5282202724ac44dad6092f74802"
-dependencies = [
- "ansi_term",
- "cargo_metadata",
- "difference",
- "once_cell",
- "pretty_assertions",
- "regex",
- "serde_json",
- "swc_common",
- "swc_error_reporters",
- "testing_macros",
- "tracing",
- "tracing-subscriber",
-]
-
-[[package]]
-name = "testing_macros"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1c15b796025051a07f1ac695ee0cac0883f05a0d510c9d171ef8d31a992e6a5"
-dependencies = [
- "anyhow",
- "glob",
- "once_cell",
- "pmutil",
- "proc-macro2",
- "quote",
- "regex",
- "relative-path",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "textwrap"
-version = "0.15.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d"
-dependencies = [
- "smawk",
- "unicode-linebreak",
- "unicode-width",
-]
-
-[[package]]
-name = "thiserror"
-version = "1.0.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "thread_local"
-version = "1.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
-dependencies = [
- "cfg-if",
- "once_cell",
-]
-
-[[package]]
-name = "time"
-version = "0.3.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea"
-dependencies = [
- "deranged",
- "itoa",
- "serde",
- "time-core",
- "time-macros",
-]
-
-[[package]]
-name = "time-core"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
-
-[[package]]
-name = "time-macros"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd"
-dependencies = [
- "time-core",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
-name = "tracing"
-version = "0.1.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
-dependencies = [
- "cfg-if",
- "pin-project-lite",
- "tracing-attributes",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-attributes"
-version = "0.1.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.28",
-]
-
-[[package]]
-name = "tracing-core"
-version = "0.1.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
-dependencies = [
- "once_cell",
- "valuable",
-]
-
-[[package]]
-name = "tracing-log"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
-dependencies = [
- "lazy_static",
- "log",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-subscriber"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
-dependencies = [
- "matchers",
- "nu-ansi-term",
- "once_cell",
- "regex",
- "sharded-slab",
- "smallvec",
- "thread_local",
- "tracing",
- "tracing-core",
- "tracing-log",
-]
-
-[[package]]
-name = "triomphe"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f"
-dependencies = [
- "serde",
- "stable_deref_trait",
-]
-
-[[package]]
-name = "typed-arena"
-version = "2.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
-
-[[package]]
-name = "typenum"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
-
-[[package]]
-name = "unicode-id"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
-
-[[package]]
-name = "unicode-linebreak"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "unicode-width"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
-
-[[package]]
-name = "url"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
-dependencies = [
- "form_urlencoded",
- "idna",
- "percent-encoding",
-]
-
-[[package]]
-name = "uuid"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
-
-[[package]]
-name = "valuable"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
-
-[[package]]
-name = "vergen"
-version = "7.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f21b881cd6636ece9735721cf03c1fe1e774fe258683d084bb2812ab67435749"
-dependencies = [
- "anyhow",
- "cfg-if",
- "enum-iterator",
- "getset",
- "rustversion",
- "thiserror",
- "time",
-]
-
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
-name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "windows-sys"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
-dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
-
-[[package]]
-name = "wyz"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
-dependencies = [
- "tap",
-]
-
-[[package]]
-name = "yansi"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
diff --git a/packages/swc-plugin-solid-cli/Cargo.toml b/packages/swc-plugin-solid-cli/Cargo.toml
deleted file mode 100644
index 91f1e06..0000000
--- a/packages/swc-plugin-solid-cli/Cargo.toml
+++ /dev/null
@@ -1,30 +0,0 @@
-[package]
-name = "swc-plugin-solid-cli"
-version = "0.1.0"
-edition = "2021"
-
-[lib]
-crate-type = ["cdylib", "rlib"]
-
-[profile.release]
-lto = true
-strip = "symbols"
-codegen-units = 1
-[dependencies]
-serde = "1"
-serde_json = "1.0"
-swc_core = { version = "0.79", features = [
- "ecma_plugin_transform",
- "ecma_utils",
- "ecma_minifier",
- "ecma_visit",
- "ecma_ast",
- "common",
-] }
-[dev-dependencies]
-swc_core = { version = "0.79", features = ["testing_transform", "ecma_parser"] }
-
-testing = { version = "0.33" }
-# .cargo/config defines few alias to build plugin.
-# cargo build-wasi generates wasm-wasi32 binary
-# cargo build-wasm32 generates wasm32-unknown-unknown binary.
diff --git a/packages/swc-plugin-solid-cli/README.md b/packages/swc-plugin-solid-cli/README.md
deleted file mode 100644
index e0e27ac..0000000
--- a/packages/swc-plugin-solid-cli/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# @solid-cli/swc-plugin-solid-cli
-
-An SWC plugin for updating a project's vite config, primarily used by the CLI to add new vite plugins and automatically configure them with sensible defaults
diff --git a/packages/swc-plugin-solid-cli/output/swc_plugin_solid_cli.wasm b/packages/swc-plugin-solid-cli/output/swc_plugin_solid_cli.wasm
deleted file mode 100644
index d8f9eef..0000000
Binary files a/packages/swc-plugin-solid-cli/output/swc_plugin_solid_cli.wasm and /dev/null differ
diff --git a/packages/swc-plugin-solid-cli/package.json b/packages/swc-plugin-solid-cli/package.json
deleted file mode 100644
index 1b5b55b..0000000
--- a/packages/swc-plugin-solid-cli/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "@solid-cli/swc-plugin-solid-cli",
- "version": "0.0.3",
- "description": "An SWC plugin for transforming a project's vite config",
- "author": "Thomas Beer",
- "license": "MIT",
- "homepage": "https://solid-cli.netlify.app",
- "repository": {
- "type": "git",
- "url": "https://github.com/solidjs-community/solid-cli"
- },
- "keywords": [
- "swc-plugin"
- ],
- "main": "output/swc_plugin_solid_cli.wasm",
- "scripts": {
- "prepublishOnly": "cargo build-wasi --release --out-dir=./output -Z unstable-options",
- "build": "",
- "test": "cargo +nightly test"
- },
- "preferUnplugged": true,
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/packages/swc-plugin-solid-cli/rust-toolchain.toml b/packages/swc-plugin-solid-cli/rust-toolchain.toml
deleted file mode 100644
index 5d56faf..0000000
--- a/packages/swc-plugin-solid-cli/rust-toolchain.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[toolchain]
-channel = "nightly"
diff --git a/packages/swc-plugin-solid-cli/src/config.rs b/packages/swc-plugin-solid-cli/src/config.rs
deleted file mode 100644
index d7c5f05..0000000
--- a/packages/swc-plugin-solid-cli/src/config.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-use serde::{Deserialize, Serialize};
-use serde_json::{json, Value};
-pub trait Testing {
- fn test() -> Self;
-}
-#[derive(Serialize, Deserialize, Default, Debug)]
-#[serde(rename_all = "camelCase")]
-pub struct PluginConfig {
- pub import_name: String,
- pub import_source: String,
- pub is_default: bool,
- pub options: Value,
-}
-
-impl PluginConfig {
- fn test() -> Self {
- Self {
- import_name: "UnoCss".to_string(),
- import_source: "unocss/vite".to_string(),
- is_default: true,
- options: json!({}),
- }
- }
-}
-
-#[derive(Serialize, Deserialize, Default, Debug)]
-#[serde(rename_all = "camelCase")]
-pub struct Config {
- pub additional_plugins: Vec,
- pub force_transform: bool,
- pub merge_configs: bool,
-}
-impl Testing for Config {
- fn test() -> Self {
- Self {
- additional_plugins: vec![PluginConfig::test()],
- force_transform: true,
- merge_configs: false,
- }
- }
-}
diff --git a/packages/swc-plugin-solid-cli/src/lib.rs b/packages/swc-plugin-solid-cli/src/lib.rs
deleted file mode 100644
index 84eb859..0000000
--- a/packages/swc-plugin-solid-cli/src/lib.rs
+++ /dev/null
@@ -1,361 +0,0 @@
-#![feature(let_chains)]
-use std::collections::HashMap;
-pub mod config;
-use config::Config;
-use serde_json::Value;
-
-use swc_core::common::DUMMY_SP;
-use swc_core::ecma::ast::{
- ArrayLit, Bool, Callee, ExprOrSpread, ImportDecl, ImportDefaultSpecifier, ImportNamedSpecifier,
- ImportSpecifier, KeyValueProp, Lit, Module, ModuleDecl, ModuleItem, Null, ObjectLit, Prop,
- PropName, PropOrSpread, Str,
-};
-use swc_core::ecma::utils::{prepend_stmt, swc_common, ExprExt};
-
-use swc_core::ecma::{
- ast::{CallExpr, Expr, Ident, Program},
- visit::{as_folder, FoldWith, VisitMut, VisitMutWith},
-};
-use swc_core::plugin::errors::HANDLER;
-use swc_core::plugin::{plugin_transform, proxies::TransformPluginProgramMetadata};
-
-pub struct TransformVisitor {
- original_imports: Vec,
- new_imports: HashMap,
- config: Config,
-}
-impl TransformVisitor {
- pub fn new(config: Config) -> Self {
- Self {
- original_imports: Default::default(),
- new_imports: Default::default(),
- config,
- }
- }
-}
-/**
- * Converts from serde_json's `Value` format to an swc `Expr`, which can then just be passed
- */
-fn to_expr(val: &Value) -> Expr {
- match val {
- Value::Null => Expr::Lit(Lit::Null(Null { span: DUMMY_SP })),
- Value::Number(n) => Expr::Lit(Lit::Num(n.as_f64().unwrap().into())),
- Value::Bool(b) => Expr::Lit(Lit::Bool(Bool {
- span: DUMMY_SP,
- value: *b,
- })),
- Value::String(s) => Expr::Lit(Lit::Str(Str {
- span: DUMMY_SP,
- value: s.clone().into(),
- raw: None,
- })),
- Value::Array(arr) => Expr::Array(ArrayLit {
- span: DUMMY_SP,
- elems: arr
- .iter()
- .map(|v| {
- Some(ExprOrSpread {
- spread: None,
- expr: Box::new(to_expr(v)),
- })
- })
- .collect(),
- }),
- Value::Object(obj) => Expr::Object(ObjectLit {
- span: DUMMY_SP,
- props: obj
- .iter()
- .map(|(k, v)| {
- PropOrSpread::Prop(Box::new(Prop::KeyValue(KeyValueProp {
- key: PropName::Ident(Ident::new(k.clone().into(), DUMMY_SP)),
- value: Box::new(to_expr(v)),
- })))
- })
- .collect(),
- }),
- }
-}
-impl TransformVisitor {
- // Taken almost verbatim from https://github.com/modderme123/swc-plugin-jsx-dom-expressions
- pub fn insert_imports(&mut self, module: &mut Module) {
- let mut entries = self.new_imports.drain().collect::>();
- entries.sort_by(|(a, _), (b, _)| a.cmp(b));
- for (name, val) in entries {
- let specifier = if val.1 {
- ImportSpecifier::Default(ImportDefaultSpecifier {
- local: val.0,
- span: DUMMY_SP,
- })
- } else {
- ImportSpecifier::Named(ImportNamedSpecifier {
- local: val.0,
- imported: None,
- span: DUMMY_SP,
- is_type_only: false,
- })
- };
- prepend_stmt(
- &mut module.body,
- ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl {
- specifiers: vec![specifier],
- src: Box::new(Str {
- span: DUMMY_SP,
- value: name.into(),
- raw: None,
- }),
- span: DUMMY_SP,
- type_only: false,
- asserts: None,
- })),
- );
- }
- }
-}
-fn get_import_names(import_decl: &ImportDecl) -> Vec<&str> {
- import_decl
- .specifiers
- .iter()
- .map(|s| match s {
- ImportSpecifier::Named(s) => s.local.sym.as_ref(),
- ImportSpecifier::Default(s) => s.local.sym.as_ref(),
- ImportSpecifier::Namespace(s) => s.local.sym.as_ref(),
- })
- .collect()
-}
-fn is_plugin_already_added(
- visitor: &TransformVisitor,
- elems: &[Option],
- plugin_name: &str,
- plugin_import_path: &str,
-) -> i32 {
- for (n, elem) in elems.iter().enumerate().take(elems.iter().len()) {
- // Assuming that plugins are always call expressions, and always imported as such
- // Can be fixed in the future by just visiting with self, and collecting all the identifiers that we find
- if let Some(elem) = elem && let Expr::Call(call_expr) = elem.expr.as_expr() && let Callee::Expr(callee_expr) = &call_expr.callee {
- if let Expr::Ident(i) = &**callee_expr {
- let local_name = i.sym.as_ref();
- if plugin_name == local_name {
- // Checking if the import is from the same place
- for import in &visitor.original_imports{
- let imported_from = import.src.value.as_ref();
- let import_names = get_import_names(import);
- if import_names.contains(&local_name) && imported_from == plugin_import_path {
- // Plugin already exists, so we don't need to add it
- return n.try_into().unwrap()
- }
- }
- }
- }
- }
- }
- -1
-}
-fn get_key_name(key: &PropName) -> String {
- match key {
- PropName::Ident(i) => i.sym.to_string(),
- PropName::Str(s) => s.value.to_string(),
- PropName::Num(n) => n.value.to_string(),
- PropName::BigInt(b) => b.value.to_string(),
- PropName::Computed(_) => {
- HANDLER.with(|handler| {
- handler
- .struct_span_err(
- DUMMY_SP,
- "Plugin already exists, and force_transform is not enabled",
- )
- .emit()
- });
- panic!();
- }
- }
-}
-/**
- * Merge two objects.
- * `obj1` takes precedence.
- */
-fn merge_objects(obj1: &ObjectLit, obj2: &ObjectLit) -> Vec {
- // Storing string here gives a really quick way to access the prop name
- let mut new_props: Vec<(String, &PropOrSpread)> = vec![];
- for prop in &obj1.props {
- if let PropOrSpread::Prop(p) = prop {
- if let Prop::KeyValue(key_val) = &**p {
- let name = get_key_name(&key_val.key);
- new_props.push((name, prop))
- }
- }
- }
- for prop in &obj2.props {
- if let PropOrSpread::Prop(p) = prop {
- if let Prop::KeyValue(key_val) = &**p {
- let prop_name = &get_key_name(&key_val.key);
- let mut exists = false;
- for (name, _) in &new_props {
- if prop_name == name {
- exists = true;
- }
- }
- if exists {
- continue;
- }
- // We can now add this prop
- new_props.push((prop_name.to_owned(), prop))
- }
- }
- }
- let mut data_to_ret = vec![];
- for (_, prop) in new_props {
- data_to_ret.push(prop.clone());
- }
- data_to_ret
-}
-fn generate_plugin_expr(
- name: &str,
- extra_config: &Value,
- original_config: &Option,
-) -> Option {
- Some(ExprOrSpread {
- spread: None,
- expr: Box::new(Expr::Call(CallExpr {
- span: Default::default(),
- callee: Callee::Expr(Box::new(Expr::Ident(Ident::new(
- name.into(),
- swc_common::DUMMY_SP,
- )))),
- args: vec![ExprOrSpread {
- spread: None,
- expr: Box::new({
- let mut converted = to_expr(extra_config);
- if let Some(ExprOrSpread { expr, .. }) = &original_config {
- if let Expr::Call(call_expr) = &**expr {
- if call_expr.args.len() > 0 && let Expr::Object(obj) = &*call_expr.args[0].expr {
- if let Expr::Object(new_cfg) = &converted {
- let merged = merge_objects(new_cfg, obj);
- converted = Expr::Object(ObjectLit {
- span: DUMMY_SP,
- props: merged,
- })
- }
- }
- }
- }
- converted
- }),
- }],
- type_args: None,
- })),
- })
-}
-fn add_new_plugins(visitor: &mut TransformVisitor, arr_lit: &ArrayLit) -> PropOrSpread {
- let mut elems: Vec