From dbfea7cca326b552587121e31dd00b8686cb5e3b Mon Sep 17 00:00:00 2001 From: "Ricardo Q. Bazan" Date: Mon, 11 May 2026 19:55:55 -0500 Subject: [PATCH] chore: remove deprecated packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes the source for three packages that were deprecated and republished with `[!CAUTION]` notes + permalink homepages in @vlandoss/biome-config@0.0.9, @vlandoss/localproxy@0.2.3, @vlandoss/starter@0.4.2. The deprecation notice + migration path live on at the tag URLs, so npm consumers still see them on the package page. Note: depends on the deprecate PR being merged AND `npm deprecate` having been run on each package — see the deprecate PR for the post-publish commands. Co-Authored-By: Claude Opus 4.7 (1M context) --- dotfiles/biome-config/CHANGELOG.md | 65 -- dotfiles/biome-config/README.md | 47 -- dotfiles/biome-config/package.json | 29 - dotfiles/biome-config/src/config.json | 51 -- packages/localproxy/CHANGELOG.md | 204 ----- packages/localproxy/README.md | 59 -- packages/localproxy/bin.mjs | 2 - packages/localproxy/bin.ts | 2 - packages/localproxy/config/Caddyfile.example | 3 - packages/localproxy/package.json | 59 -- packages/localproxy/src/commands/clean.ts | 31 - packages/localproxy/src/commands/setup.ts | 92 -- packages/localproxy/src/commands/start.ts | 20 - packages/localproxy/src/commands/status.ts | 41 - packages/localproxy/src/commands/stop.ts | 20 - packages/localproxy/src/run.ts | 58 -- packages/localproxy/src/services/caddy.ts | 106 --- .../caddyfile/__tests__/caddyfile.test.ts | 180 ---- .../__tests__/fixtures/Caddyfile.simple | 3 - .../Caddyfile.with-multiple-directives | 4 - .../fixtures/Caddyfile.with-multiple-sites | 12 - .../services/caddyfile/__tests__/helpers.ts | 19 - .../src/services/caddyfile/index.ts | 1 - .../src/services/caddyfile/parser.ts | 123 --- .../src/services/caddyfile/service.ts | 48 -- packages/localproxy/src/services/file.ts | 16 - packages/localproxy/src/services/hosts.ts | 101 --- packages/localproxy/src/services/logger.ts | 5 - packages/localproxy/src/services/shell.ts | 16 - packages/localproxy/src/services/sudo.ts | 58 -- packages/localproxy/src/types.ts | 13 - packages/localproxy/src/ui.ts | 12 - packages/localproxy/tsconfig.json | 3 - packages/localproxy/tsdown.config.ts | 3 - packages/localproxy/vitest.config.ts | 15 - packages/starter/CHANGELOG.md | 237 ------ packages/starter/CLI.md | 97 --- packages/starter/README.md | 64 -- packages/starter/bin | 50 -- packages/starter/package.json | 58 -- packages/starter/plopfiles/plopfile.ts | 93 --- .../plopfiles/plugins/biome/biome.json.hbs | 4 - .../changeset/.changeset/README.md.hbs | 8 - .../changeset/.changeset/config.json.hbs | 11 - .../plopfiles/plugins/husky/.husky/pre-commit | 9 - .../plopfiles/plugins/husky/.husky/pre-push | 1 - .../plopfiles/plugins/mise/mise.toml.hbs | 2 - .../plugins/tsconfig/tsconfig.json.hbs | 3 - .../plopfiles/plugins/tsup/tsup.config.ts.hbs | 10 - .../starter/plopfiles/prompts/tsconfig.ts | 31 - .../templates/#common/.gitignore.hbs | 180 ---- .../plopfiles/templates/#common/README.md.hbs | 3 - .../templates/#common/biome.json.hbs | 4 - .../templates/basic/package.json.hbs | 32 - .../templates/basic/src/index.ts.hbs | 1 - .../templates/monorepo/package.json.hbs | 27 - .../monorepo/pnpm-workspace.yaml.hbs | 4 - packages/starter/src/actions/add.ts | 52 -- packages/starter/src/actions/init.ts | 68 -- packages/starter/src/actions/types.ts | 3 - packages/starter/src/program/commands/add.ts | 40 - .../src/program/commands/completion.ts | 26 - packages/starter/src/program/commands/init.ts | 47 -- .../starter/src/program/commands/usage.ts | 9 - packages/starter/src/program/index.ts | 25 - packages/starter/src/program/ui.ts | 27 - packages/starter/src/run.ts | 11 - packages/starter/src/services/config.ts | 28 - packages/starter/src/services/ctx.ts | 38 - packages/starter/src/services/logger.ts | 5 - packages/starter/src/services/template.ts | 64 -- packages/starter/src/services/types.ts | 12 - packages/starter/tsconfig.json | 3 - packages/starter/tsdown.config.ts | 3 - pnpm-lock.yaml | 786 +----------------- 75 files changed, 2 insertions(+), 3695 deletions(-) delete mode 100644 dotfiles/biome-config/CHANGELOG.md delete mode 100644 dotfiles/biome-config/README.md delete mode 100644 dotfiles/biome-config/package.json delete mode 100644 dotfiles/biome-config/src/config.json delete mode 100644 packages/localproxy/CHANGELOG.md delete mode 100644 packages/localproxy/README.md delete mode 100644 packages/localproxy/bin.mjs delete mode 100755 packages/localproxy/bin.ts delete mode 100644 packages/localproxy/config/Caddyfile.example delete mode 100644 packages/localproxy/package.json delete mode 100644 packages/localproxy/src/commands/clean.ts delete mode 100644 packages/localproxy/src/commands/setup.ts delete mode 100644 packages/localproxy/src/commands/start.ts delete mode 100644 packages/localproxy/src/commands/status.ts delete mode 100644 packages/localproxy/src/commands/stop.ts delete mode 100644 packages/localproxy/src/run.ts delete mode 100644 packages/localproxy/src/services/caddy.ts delete mode 100644 packages/localproxy/src/services/caddyfile/__tests__/caddyfile.test.ts delete mode 100644 packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.simple delete mode 100644 packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-directives delete mode 100644 packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-sites delete mode 100644 packages/localproxy/src/services/caddyfile/__tests__/helpers.ts delete mode 100644 packages/localproxy/src/services/caddyfile/index.ts delete mode 100644 packages/localproxy/src/services/caddyfile/parser.ts delete mode 100644 packages/localproxy/src/services/caddyfile/service.ts delete mode 100644 packages/localproxy/src/services/file.ts delete mode 100644 packages/localproxy/src/services/hosts.ts delete mode 100644 packages/localproxy/src/services/logger.ts delete mode 100644 packages/localproxy/src/services/shell.ts delete mode 100644 packages/localproxy/src/services/sudo.ts delete mode 100644 packages/localproxy/src/types.ts delete mode 100644 packages/localproxy/src/ui.ts delete mode 100644 packages/localproxy/tsconfig.json delete mode 100644 packages/localproxy/tsdown.config.ts delete mode 100644 packages/localproxy/vitest.config.ts delete mode 100644 packages/starter/CHANGELOG.md delete mode 100644 packages/starter/CLI.md delete mode 100644 packages/starter/README.md delete mode 100755 packages/starter/bin delete mode 100644 packages/starter/package.json delete mode 100644 packages/starter/plopfiles/plopfile.ts delete mode 100644 packages/starter/plopfiles/plugins/biome/biome.json.hbs delete mode 100644 packages/starter/plopfiles/plugins/changeset/.changeset/README.md.hbs delete mode 100644 packages/starter/plopfiles/plugins/changeset/.changeset/config.json.hbs delete mode 100644 packages/starter/plopfiles/plugins/husky/.husky/pre-commit delete mode 100644 packages/starter/plopfiles/plugins/husky/.husky/pre-push delete mode 100644 packages/starter/plopfiles/plugins/mise/mise.toml.hbs delete mode 100644 packages/starter/plopfiles/plugins/tsconfig/tsconfig.json.hbs delete mode 100644 packages/starter/plopfiles/plugins/tsup/tsup.config.ts.hbs delete mode 100644 packages/starter/plopfiles/prompts/tsconfig.ts delete mode 100644 packages/starter/plopfiles/templates/#common/.gitignore.hbs delete mode 100644 packages/starter/plopfiles/templates/#common/README.md.hbs delete mode 100644 packages/starter/plopfiles/templates/#common/biome.json.hbs delete mode 100644 packages/starter/plopfiles/templates/basic/package.json.hbs delete mode 100644 packages/starter/plopfiles/templates/basic/src/index.ts.hbs delete mode 100644 packages/starter/plopfiles/templates/monorepo/package.json.hbs delete mode 100644 packages/starter/plopfiles/templates/monorepo/pnpm-workspace.yaml.hbs delete mode 100644 packages/starter/src/actions/add.ts delete mode 100644 packages/starter/src/actions/init.ts delete mode 100644 packages/starter/src/actions/types.ts delete mode 100644 packages/starter/src/program/commands/add.ts delete mode 100644 packages/starter/src/program/commands/completion.ts delete mode 100644 packages/starter/src/program/commands/init.ts delete mode 100644 packages/starter/src/program/commands/usage.ts delete mode 100644 packages/starter/src/program/index.ts delete mode 100644 packages/starter/src/program/ui.ts delete mode 100644 packages/starter/src/run.ts delete mode 100644 packages/starter/src/services/config.ts delete mode 100644 packages/starter/src/services/ctx.ts delete mode 100644 packages/starter/src/services/logger.ts delete mode 100644 packages/starter/src/services/template.ts delete mode 100644 packages/starter/src/services/types.ts delete mode 100644 packages/starter/tsconfig.json delete mode 100644 packages/starter/tsdown.config.ts diff --git a/dotfiles/biome-config/CHANGELOG.md b/dotfiles/biome-config/CHANGELOG.md deleted file mode 100644 index 7fd9ec0..0000000 --- a/dotfiles/biome-config/CHANGELOG.md +++ /dev/null @@ -1,65 +0,0 @@ -# @vlandoss/biome-config - -## 0.0.9 - -### Patch Changes - -- [#206](https://github.com/variableland/dx/pull/206) [`6c2ec90`](https://github.com/variableland/dx/commit/6c2ec9097abde47f9f7a8489c4a7149f0699d397) Thanks [@rqbazan](https://github.com/rqbazan)! - Deprecate package — final published version with notice. - - - `@vlandoss/biome-config` is superseded by [`@vlandoss/config`](https://github.com/variableland/dx/tree/main/packages/config) (use `@vlandoss/config/biome`). - - `@vlandoss/localproxy` is superseded by [Portless](https://port1355.dev). - - `@vlandoss/starter` is superseded by [`@vlandoss/vland`](https://github.com/variableland/dx/tree/main/packages/vland). - - Each package's `homepage` is repinned to a tag URL so the deprecation README stays reachable after the source is removed from the monorepo. - -## 0.0.8 - -### Patch Changes - -- [#165](https://github.com/variableland/dx/pull/165) [`33659b4`](https://github.com/variableland/dx/commit/33659b4f2666aee939ed637b0dd6366854e22a96) Thanks [@rqbazan](https://github.com/rqbazan)! - Add Node.js compatibility via `publishConfig` and compiled output - - All publishable packages now ship compiled `dist/` output (via tsdown) and use `publishConfig.exports`/`publishConfig.bin` to override the package fields at publish time. This means consumers using Node.js no longer need Bun installed — the published packages work with `node >= 20` out of the box. - - A new shared package `@vlandoss/tsdown-config` provides reusable build presets (`defineBinConfig`, `defineLibConfig`) and the `nodeShebangPlugin` that rewrites the `#!/usr/bin/env bun` shebang to `#!/usr/bin/env node` in compiled bin files. - -## 0.0.7 - -### Patch Changes - -- [#158](https://github.com/variableland/dx/pull/158) [`e7d6f17`](https://github.com/variableland/dx/commit/e7d6f17b3a5bfa56a6c2ed1aab7679bda876456d) Thanks [@rqbazan](https://github.com/rqbazan)! - Mark `@vlandoss/biome-config` as deprecated in favor of `@vlandoss/config/biome`. The package will continue to receive critical fixes but no new features. See the README for migration instructions. - -## 0.0.6 - -### Patch Changes - -- [#146](https://github.com/variableland/dx/pull/146) [`0ca5ac1`](https://github.com/variableland/dx/commit/0ca5ac1aba30399b4a3f7500e0156ab28bcf62d2) Thanks [@rqbazan](https://github.com/rqbazan)! - Migrate to biome 2.4.4 - -## 0.0.5 - -### Patch Changes - -- [#134](https://github.com/variableland/dx/pull/134) [`6fe338f`](https://github.com/variableland/dx/commit/6fe338f630efe7c2554fb2bd172157d395d3931b) Thanks [@rqbazan](https://github.com/rqbazan)! - Off complexity/noStaticOnlyClass lint rule - -## 0.0.4 - -### Patch Changes - -- [#132](https://github.com/variableland/dx/pull/132) [`7074d20`](https://github.com/variableland/dx/commit/7074d208730494641fc6b3bc18176cbf2371f29f) Thanks [@rqbazan](https://github.com/rqbazan)! - Disable svg without title rule - -## 0.0.3 - -### Patch Changes - -- [#97](https://github.com/variableland/dx/pull/97) [`813cfcb`](https://github.com/variableland/dx/commit/813cfcb88e9f273b7f75cf2e2275904c25810130) Thanks [@rqbazan](https://github.com/rqbazan)! - Move to Biome v2 - -## 0.0.2 - -### Patch Changes - -- [#93](https://github.com/variableland/dx/pull/93) [`0a8b49d`](https://github.com/variableland/dx/commit/0a8b49de50115ab70283854b21688649c79a85f4) Thanks [@rqbazan](https://github.com/rqbazan)! - Add schema to biome config - -## 0.0.1 - -### Patch Changes - -- [#85](https://github.com/variableland/dx/pull/85) [`bdae9bf`](https://github.com/variableland/dx/commit/bdae9bf09a9a967ced98dd42b373c725c2c4f2b3) Thanks [@rqbazan](https://github.com/rqbazan)! - Move to @vlandoss organization diff --git a/dotfiles/biome-config/README.md b/dotfiles/biome-config/README.md deleted file mode 100644 index 909545a..0000000 --- a/dotfiles/biome-config/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Biome Config - -> [!CAUTION] -> **Deprecated.** This package has been superseded by [`@vlandoss/config`](../../packages/config/README.md), which consolidates Biome, TypeScript, and other shared configs behind subpath exports. New projects should use `@vlandoss/config/biome` instead. This package will keep receiving critical fixes but no new features. - -## Migration - -Replace: - -```json -{ - "extends": ["@vlandoss/biome-config"] -} -``` - -With: - -```json -{ - "extends": ["@vlandoss/config/biome"] -} -``` - -And swap the devDependency: - -```bash -pnpm remove @vlandoss/biome-config -pnpm add -D @vlandoss/config -``` - -## Installation - -```bash -pnpm add -D @vlandoss/biome-config -``` - -## Usage - -1. Create a `biome.json` file at the root of your project. - -2. Paste the following: - - ```json - { - "extends": ["@vlandoss/biome-config"] - } - ``` diff --git a/dotfiles/biome-config/package.json b/dotfiles/biome-config/package.json deleted file mode 100644 index 0338ff7..0000000 --- a/dotfiles/biome-config/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "@vlandoss/biome-config", - "version": "0.0.9", - "description": "Biome configuration file for @variableland", - "homepage": "https://github.com/variableland/dx/tree/%40vlandoss%2Fbiome-config%400.0.9/dotfiles/biome-config#readme", - "bugs": { - "url": "https://github.com/variableland/dx/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/variableland/dx.git", - "directory": "dotfiles/biome-config" - }, - "author": "rcrd ", - "keywords": [ - "biome" - ], - "license": "MIT", - "type": "module", - "exports": { - ".": "./src/config.json" - }, - "publishConfig": { - "access": "public" - }, - "peerDependencies": { - "@biomejs/biome": "2.4.4" - } -} diff --git a/dotfiles/biome-config/src/config.json b/dotfiles/biome-config/src/config.json deleted file mode 100644 index f66383f..0000000 --- a/dotfiles/biome-config/src/config.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.4.4/schema.json", - "files": { - "ignoreUnknown": true - }, - "vcs": { - "enabled": true, - "clientKind": "git", - "useIgnoreFile": true, - "defaultBranch": "main" - }, - "assist": { - "actions": { - "source": { - "organizeImports": "on" - } - } - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "a11y": { - "noSvgWithoutTitle": "off" - }, - "complexity": { - "noStaticOnlyClass": "off" - } - } - }, - "formatter": { - "enabled": true, - "indentStyle": "space", - "lineWidth": 130, - "formatWithErrors": true - }, - "javascript": { - "formatter": { - "quoteStyle": "double", - "semicolons": "always" - } - }, - "css": { - "formatter": { - "enabled": true - }, - "parser": { - "tailwindDirectives": true - } - } -} diff --git a/packages/localproxy/CHANGELOG.md b/packages/localproxy/CHANGELOG.md deleted file mode 100644 index eab0c72..0000000 --- a/packages/localproxy/CHANGELOG.md +++ /dev/null @@ -1,204 +0,0 @@ -# @vlandoss/localproxy - -## 0.2.3 - -### Patch Changes - -- [#206](https://github.com/variableland/dx/pull/206) [`6c2ec90`](https://github.com/variableland/dx/commit/6c2ec9097abde47f9f7a8489c4a7149f0699d397) Thanks [@rqbazan](https://github.com/rqbazan)! - Deprecate package — final published version with notice. - - - `@vlandoss/biome-config` is superseded by [`@vlandoss/config`](https://github.com/variableland/dx/tree/main/packages/config) (use `@vlandoss/config/biome`). - - `@vlandoss/localproxy` is superseded by [Portless](https://port1355.dev). - - `@vlandoss/starter` is superseded by [`@vlandoss/vland`](https://github.com/variableland/dx/tree/main/packages/vland). - - Each package's `homepage` is repinned to a tag URL so the deprecation README stays reachable after the source is removed from the monorepo. - -## 0.2.2 - -### Patch Changes - -- Updated dependencies [[`d467f7f`](https://github.com/variableland/dx/commit/d467f7fd0f0512a1fe15f6d74cd9a540a21bbfbc)]: - - @vlandoss/clibuddy@0.5.0 - -## 0.2.1 - -### Patch Changes - -- Updated dependencies [[`45e1b91`](https://github.com/variableland/dx/commit/45e1b9104d777f3a3da84f395ea62bdf8a2c5f58)]: - - @vlandoss/clibuddy@0.4.0 - -## 0.2.0 - -### Minor Changes - -- [#182](https://github.com/variableland/dx/pull/182) [`0742fa4`](https://github.com/variableland/dx/commit/0742fa466d07a6df296fee9a575a9c92f7587c9c) Thanks [@rqbazan](https://github.com/rqbazan)! - feat(clibuddy): add `dirnameOf` / `filenameOf` helpers; simplify CLI bin entries - - - **New helpers in `@vlandoss/clibuddy`**: `dirnameOf(import.meta)` and `filenameOf(import.meta)`. They prefer the native `import.meta.dirname` / `import.meta.filename` (Node 20.11+) and fall back to `dirname(fileURLToPath(import.meta.url))` otherwise — so packages can keep `engines.node` at `>=20.0.0` without losing ergonomics. - - **CLI bin entries simplified.** `bin.mjs` / `bin.ts` no longer compute `binDir` and pass it through a `main()` function — they just `import "./src/run.ts"` (or `./dist/run.mjs` for the published artifact). The new `src/run.ts` is now the executable entry: it resolves its own `BIN_DIR` via `dirnameOf(import.meta)` and starts the program. Affects `run-run`, `localproxy`, and `starter`. The `bin` field in each `package.json` is unchanged, so nothing changes for consumers running the CLIs. - -### Patch Changes - -- Updated dependencies [[`0742fa4`](https://github.com/variableland/dx/commit/0742fa466d07a6df296fee9a575a9c92f7587c9c)]: - - @vlandoss/loggy@0.2.0 - - @vlandoss/clibuddy@0.3.0 - -## 0.1.4 - -### Patch Changes - -- [#178](https://github.com/variableland/dx/pull/178) [`37eb596`](https://github.com/variableland/dx/commit/37eb596a3d50f30430f573ffe3c5a77a3aa88322) Thanks [@rqbazan](https://github.com/rqbazan)! - feat(run-run): add `doctor` subcommand to all tool-backed commands - - Each command that wraps an external tool (`jsc`, `tsc`, `lint`, `format`, `build:lib`) now exposes a `doctor` subcommand that verifies the underlying tool is available and working correctly. Example: `rr jsc doctor`. - - - Adds `ToolService` base class with a `doctor()` method that runs ` --help` and returns `{ ok, output }` - - Adds `TscService` to wrap the `tsc` binary via `ToolService` - - Adds `createDoctorSubcommand` helper used by all five commands - - Fixes `ToolService.#shell()` to not override the parent shell's `cwd` when no explicit cwd is given - - Fixes `ToolService.#getPreferLocal()` to catch errors from `getBinDir()` gracefully - - feat(clibuddy): add `ShellService.mute()` method - - Adds a convenience `mute()` method to `ShellService` that combines `quiet()` (verbose: false) with `stdio: "pipe"`, used internally by the doctor flow to capture tool output without printing it. - - fix(localproxy): correct internal import path alias (`#/*` → `#src/*`) - -- Updated dependencies [[`37eb596`](https://github.com/variableland/dx/commit/37eb596a3d50f30430f573ffe3c5a77a3aa88322)]: - - @vlandoss/clibuddy@0.2.0 - -## 0.1.3 - -### Patch Changes - -- [#175](https://github.com/variableland/dx/pull/175) [`3271dd1`](https://github.com/variableland/dx/commit/3271dd1144842749cd81a2eb9ba7f85f21d5467e) Thanks [@rqbazan](https://github.com/rqbazan)! - Fix `binDir` pointing to `dist/` in compiled CLIs - - When a CLI was published and executed via the compiled binary, `import.meta.url` resolved to the `dist/` folder, causing `binDir` to be `/dist/` instead of the package root. This broke `localBaseBinPath` (which expects `/node_modules/.bin`) and any other logic anchored to the package root. - - The fix introduces a thin `bin.mjs` wrapper at the package root that computes `binDir` from its own location (always the root) and imports the compiled logic from `dist/main.mjs`. The `tsdown-config` entry point is updated accordingly from `bin.ts` to `src/main.ts`. - -## 0.1.2 - -### Patch Changes - -- [#170](https://github.com/variableland/dx/pull/170) [`72d7305`](https://github.com/variableland/dx/commit/72d73052778ebe9d77aebc4d942eee08fe1b56b3) Thanks [@rqbazan](https://github.com/rqbazan)! - Upgrade TypeScript to 6.0.3 and enforce explicit `.ts` import extensions - - - Upgrade TypeScript from 5.9.3 to 6.0.3 across the monorepo - - Add `useImportExtensions: "error"` biome rule to enforce explicit `.ts` extensions in all imports - - Add `@types/node` as optional peer dependency in `@vlandoss/config` - - Add `types: ["node"]` to the `tsconfig.no-dom` base config - - Update all import paths in `localproxy` and `starter` to use explicit `.ts` extensions - - Remove root-level `tsconfig.json` (paths now handled per-package) - -## 0.1.1 - -### Patch Changes - -- [#168](https://github.com/variableland/dx/pull/168) [`80e17f9`](https://github.com/variableland/dx/commit/80e17f9544f1cfff526f27ea50e2dacc6dba6e06) Thanks [@rqbazan](https://github.com/rqbazan)! - Migrate from Bun to Node.js as the runtime target. - - - `run-run`: fix `require.resolve` usage in `BiomeService` (not available in ESM with Node.js); replaced with `createRequire`. Add support for `run-run.config.mts` config files. - - `localproxy`: replace `fs.exists` (Bun-only API) with a `fs.access`-based helper. - - `clibuddy`, `loggy`, `starter`: remove `bun` from `engines` field. - -- Updated dependencies [[`80e17f9`](https://github.com/variableland/dx/commit/80e17f9544f1cfff526f27ea50e2dacc6dba6e06)]: - - @vlandoss/clibuddy@0.1.1 - - @vlandoss/loggy@0.1.1 - -## 0.1.0 - -### Minor Changes - -- [#165](https://github.com/variableland/dx/pull/165) [`33659b4`](https://github.com/variableland/dx/commit/33659b4f2666aee939ed637b0dd6366854e22a96) Thanks [@rqbazan](https://github.com/rqbazan)! - Add Node.js compatibility via `publishConfig` and compiled output - - All publishable packages now ship compiled `dist/` output (via tsdown) and use `publishConfig.exports`/`publishConfig.bin` to override the package fields at publish time. This means consumers using Node.js no longer need Bun installed — the published packages work with `node >= 20` out of the box. - - A new shared package `@vlandoss/tsdown-config` provides reusable build presets (`defineBinConfig`, `defineLibConfig`) and the `nodeShebangPlugin` that rewrites the `#!/usr/bin/env bun` shebang to `#!/usr/bin/env node` in compiled bin files. - -### Patch Changes - -- Updated dependencies [[`33659b4`](https://github.com/variableland/dx/commit/33659b4f2666aee939ed637b0dd6366854e22a96)]: - - @vlandoss/clibuddy@0.1.0 - - @vlandoss/loggy@0.1.0 - -## 0.0.10 - -### Patch Changes - -- [#162](https://github.com/variableland/dx/pull/162) [`5c89c36`](https://github.com/variableland/dx/commit/5c89c362934af0722e6b7788eb08b0620a97eb32) Thanks [@rqbazan](https://github.com/rqbazan)! - Switch tsconfigs to `@vlandoss/config/ts/*` and move path aliases from tsconfig `paths` to the `package.json` `imports` field (`#src/*`, `#test/*`). Relative imports now use explicit `.ts` extensions. - -- Updated dependencies [[`5c89c36`](https://github.com/variableland/dx/commit/5c89c362934af0722e6b7788eb08b0620a97eb32)]: - - @vlandoss/clibuddy@0.0.10 - - @vlandoss/loggy@0.0.7 - -## 0.0.9 - -### Patch Changes - -- Updated dependencies [[`577f4c7`](https://github.com/variableland/dx/commit/577f4c7df0f2f749fad395ec454d287f666d47bd)]: - - @vlandoss/clibuddy@0.0.9 - -## 0.0.8 - -### Patch Changes - -- [#149](https://github.com/variableland/dx/pull/149) [`6092149`](https://github.com/variableland/dx/commit/60921491f8d26159d450a5f41986fab220f40074) Thanks [@rqbazan](https://github.com/rqbazan)! - Update usage of clibuddy - -- [#146](https://github.com/variableland/dx/pull/146) [`0ca5ac1`](https://github.com/variableland/dx/commit/0ca5ac1aba30399b4a3f7500e0156ab28bcf62d2) Thanks [@rqbazan](https://github.com/rqbazan)! - Upgrade deps - -- Updated dependencies [[`6092149`](https://github.com/variableland/dx/commit/60921491f8d26159d450a5f41986fab220f40074), [`0ca5ac1`](https://github.com/variableland/dx/commit/0ca5ac1aba30399b4a3f7500e0156ab28bcf62d2)]: - - @vlandoss/clibuddy@0.0.8 - -## 0.0.7 - -### Patch Changes - -- [#144](https://github.com/variableland/dx/pull/144) [`c1517b2`](https://github.com/variableland/dx/commit/c1517b2e05d5a3bf7a067ec461c7d9e789f06a2f) Thanks [@rqbazan](https://github.com/rqbazan)! - Add test:types script - -- [#142](https://github.com/variableland/dx/pull/142) [`b31758e`](https://github.com/variableland/dx/commit/b31758e2d2e2e97a5f3b7b3fec73939e8003da73) Thanks [@rqbazan](https://github.com/rqbazan)! - Stop using tsup - -- Updated dependencies [[`c1517b2`](https://github.com/variableland/dx/commit/c1517b2e05d5a3bf7a067ec461c7d9e789f06a2f), [`b31758e`](https://github.com/variableland/dx/commit/b31758e2d2e2e97a5f3b7b3fec73939e8003da73)]: - - @vlandoss/clibuddy@0.0.7 - - @vlandoss/loggy@0.0.6 - -## 0.0.6 - -### Patch Changes - -- Updated dependencies [[`97a4b51`](https://github.com/variableland/dx/commit/97a4b513617b39b49dbc5244c9c8d9011a721f6f)]: - - @vlandoss/clibuddy@0.0.6 - -## 0.0.5 - -### Patch Changes - -- [#127](https://github.com/variableland/dx/pull/127) [`d40355f`](https://github.com/variableland/dx/commit/d40355fa43c3d0f251012575f1d719856884ad58) Thanks [@rqbazan](https://github.com/rqbazan)! - Add gracefully exit - -## 0.0.4 - -### Patch Changes - -- [#125](https://github.com/variableland/dx/pull/125) [`19e1984`](https://github.com/variableland/dx/commit/19e19849dcfb4514b8e49042501bdebf86586c08) Thanks [@rqbazan](https://github.com/rqbazan)! - Improve status command - -## 0.0.3 - -### Patch Changes - -- [#123](https://github.com/variableland/dx/pull/123) [`70e3674`](https://github.com/variableland/dx/commit/70e3674b76bd15c4817d68a6d3a1e9374027ea72) Thanks [@rqbazan](https://github.com/rqbazan)! - Support multple ports for same host - -## 0.0.2 - -### Patch Changes - -- [#120](https://github.com/variableland/dx/pull/120) [`462d5b4`](https://github.com/variableland/dx/commit/462d5b493bb1adaa2ed428d2b428fcaaa3001575) Thanks [@rqbazan](https://github.com/rqbazan)! - Fix find host and ask sudo password - -- Updated dependencies [[`462d5b4`](https://github.com/variableland/dx/commit/462d5b493bb1adaa2ed428d2b428fcaaa3001575)]: - - @vlandoss/loggy@0.0.5 - -## 0.0.1 - -### Patch Changes - -- [#119](https://github.com/variableland/dx/pull/119) [`5ceaf2c`](https://github.com/variableland/dx/commit/5ceaf2ca2912b70961a99d9d8a7369a5443fd15b) Thanks [@rqbazan](https://github.com/rqbazan)! - Fix verbose shell - -- [#117](https://github.com/variableland/dx/pull/117) [`3c05da4`](https://github.com/variableland/dx/commit/3c05da44e93bc66433cd222e1f1466a7e2048cec) Thanks [@rqbazan](https://github.com/rqbazan)! - Add initial commands - -- Updated dependencies [[`3c05da4`](https://github.com/variableland/dx/commit/3c05da44e93bc66433cd222e1f1466a7e2048cec), [`3c05da4`](https://github.com/variableland/dx/commit/3c05da44e93bc66433cd222e1f1466a7e2048cec)]: - - @vlandoss/clibuddy@0.0.5 - - @vlandoss/loggy@0.0.4 diff --git a/packages/localproxy/README.md b/packages/localproxy/README.md deleted file mode 100644 index abc3704..0000000 --- a/packages/localproxy/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# 🛠️ localproxy - -> [!CAUTION] -> **Deprecated.** This package is no longer maintained. Use [Portless](https://port1355.dev) instead — it provides the same `*.localhost` mapping with automatic HTTPS and a smoother setup. This package will not receive further updates and will be removed from the registry shortly. -> -> ```sh -> # Migration: install Portless and remove localproxy -> # See https://port1355.dev for setup -> pnpm remove -g @vlandoss/localproxy -> ``` - -**Simple local development proxy automation with Caddy + hosts management** - -Stop remembering ports! localproxy automatically maps your projects to clean `.localhost` domains with automatic HTTPS and hosts file management. - -```bash -# Instead of this mess: -http://localhost:3000 # Which project was this? -http://localhost:4000 # And this? -http://localhost:5431 # 🤔 - -# Get this: -http://frontend.localhost -http://api.localhost -http://admin.localhost -``` - -## Prerequisites - -- Node.js >= 24.0.0 -- Caddy >= 2.8.4 -- hosts >= 3.6.4 - -## Installation - -```sh -pnpm add -g @vlandoss/localproxy -``` - -It will adds the `localp` CLI to your global workspace - -## Usage - -> [!NOTE] -> The documentation is WIP - -Run the help command: - -```sh -localp help -``` - -## Troubleshooting - -To enable debug mode, set the `DEBUG` environment variable to `localproxy:*` before running *any* command. - -```sh -DEBUG=localproxy:* localp -``` diff --git a/packages/localproxy/bin.mjs b/packages/localproxy/bin.mjs deleted file mode 100644 index 0994e25..0000000 --- a/packages/localproxy/bin.mjs +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -import "./dist/run.mjs"; diff --git a/packages/localproxy/bin.ts b/packages/localproxy/bin.ts deleted file mode 100755 index 4fceb04..0000000 --- a/packages/localproxy/bin.ts +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -import "./src/run.ts"; diff --git a/packages/localproxy/config/Caddyfile.example b/packages/localproxy/config/Caddyfile.example deleted file mode 100644 index 363d019..0000000 --- a/packages/localproxy/config/Caddyfile.example +++ /dev/null @@ -1,3 +0,0 @@ -my-app.localhost { - reverse_proxy localhost:3000 -} diff --git a/packages/localproxy/package.json b/packages/localproxy/package.json deleted file mode 100644 index e905696..0000000 --- a/packages/localproxy/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "@vlandoss/localproxy", - "version": "0.2.3", - "description": "Simple local development proxy automation", - "homepage": "https://github.com/variableland/dx/tree/%40vlandoss%2Flocalproxy%400.2.3/packages/localproxy#readme", - "bugs": { - "url": "https://github.com/variableland/dx/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/variableland/dx.git", - "directory": "packages/localproxy" - }, - "license": "MIT", - "author": "rcrd ", - "type": "module", - "imports": { - "#src/*": "./src/*" - }, - "bin": { - "localproxy": "./bin.ts", - "localp": "./bin.ts" - }, - "files": [ - "bin.mjs", - "dist", - "src", - "!src/**/__tests__", - "!src/**/*.test.*", - "config", - "tsconfig.json" - ], - "scripts": { - "build": "tsdown", - "prepublishOnly": "pnpm build", - "test": "vitest run", - "test:unit": "vitest run --project unit", - "test:types": "rr tsc" - }, - "dependencies": { - "@inquirer/prompts": "8.3.0", - "@vlandoss/clibuddy": "workspace:*", - "@vlandoss/loggy": "workspace:*", - "commander": "14.0.3" - }, - "publishConfig": { - "access": "public", - "bin": { - "localproxy": "./bin.mjs", - "localp": "./bin.mjs" - } - }, - "engines": { - "node": ">=20.0.0" - }, - "devDependencies": { - "@vlandoss/tsdown-config": "workspace:^" - } -} diff --git a/packages/localproxy/src/commands/clean.ts b/packages/localproxy/src/commands/clean.ts deleted file mode 100644 index 3fbc8e6..0000000 --- a/packages/localproxy/src/commands/clean.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createCommand } from "commander"; -import { CaddyService } from "#src/services/caddy.ts"; -import { CaddyfileService } from "#src/services/caddyfile/index.ts"; -import { HostsService } from "#src/services/hosts.ts"; -import { logger } from "#src/services/logger.ts"; -import type { Context } from "#src/types.ts"; - -type CommandOptions = { - verbose: boolean; -}; - -export function createCleanCommand({ caddyfilePath }: Context) { - return createCommand("clean") - .description("clean up config files") - .option("--verbose", "verbose mode, show background output", false) - .action(async function cleanAction(options: CommandOptions) { - const { verbose } = options; - - const caddyService = new CaddyService(caddyfilePath); - await caddyService.stop({ verbose }); - - const caddyfileService = new CaddyfileService(caddyfilePath); - const localDomains = await caddyfileService.getLocalDomains(); - const hostnames = localDomains.map((d) => d.hostname); - - const hostsService = new HostsService(); - await hostsService.clean({ verbose, hostnames }); - - logger.success("Clean completed!"); - }); -} diff --git a/packages/localproxy/src/commands/setup.ts b/packages/localproxy/src/commands/setup.ts deleted file mode 100644 index 7134da4..0000000 --- a/packages/localproxy/src/commands/setup.ts +++ /dev/null @@ -1,92 +0,0 @@ -import * as fs from "node:fs/promises"; -import path from "node:path"; -import { editor as editorPrompt } from "@inquirer/prompts"; -import { createCommand } from "commander"; -import { CaddyService } from "#src/services/caddy.ts"; -import { CaddyfileService } from "#src/services/caddyfile/index.ts"; -import { FileService } from "#src/services/file.ts"; -import { HostsService } from "#src/services/hosts.ts"; -import { logger } from "#src/services/logger.ts"; -import { quietShell } from "#src/services/shell.ts"; -import type { Context } from "#src/types.ts"; - -type CommandOptions = { - verbose: boolean; -}; - -const debug = logger.subdebug("setup"); - -async function exists(p: string): Promise { - return fs - .access(p) - .then(() => true) - .catch(() => false); -} - -async function checkInternalTools() { - const { $ } = quietShell; - - const caddyVersion = await $`caddy --version`.nothrow(); - - if (caddyVersion.exitCode) { - logger.error("Caddy is not installed. Please install Caddy first:"); - logger.info("macOS: brew install caddy"); - logger.info("Linux: https://caddyserver.com/docs/install"); - process.exit(1); - } - - debug("caddy version: %s", caddyVersion.stdout.trim()); - - const hostsVersion = await $`hosts --version`.nothrow(); - - if (!hostsVersion) { - logger.error("hosts CLI tool is not installed. Please install hosts first:"); - logger.info("macOS: brew tap xwmx/taps && brew install hosts"); - logger.info("Linux: Check https://github.com/xwmx/hosts for installation"); - process.exit(1); - } - - debug("hosts version: %s", hostsVersion.stdout.trim()); -} - -export function createSetupCommand({ binDir, installDir, caddyfilePath }: Context) { - return createCommand("setup") - .description("setup config files") - .option("--verbose", "verbose mode, show background output", false) - .action(async function setupAction(options: CommandOptions) { - const { verbose } = options; - - await checkInternalTools(); - - if (!(await exists(installDir))) { - await fs.mkdir(installDir); - } - - const exampleCaddyFilePath = path.join(binDir, "config", "Caddyfile.example"); - const defaultContent = (await exists(caddyfilePath)) - ? await fs.readFile(caddyfilePath, "utf-8") - : await fs.readFile(exampleCaddyFilePath, "utf-8"); - - const fileContent = await editorPrompt({ - message: "Caddyfile", - default: defaultContent, - }); - - await fs.writeFile(caddyfilePath, fileContent); - - const fileService = new FileService(caddyfilePath); - await fileService.print(); - - const caddyService = new CaddyService(caddyfilePath); - await caddyService.reboot({ verbose }); - - const caddyfileService = new CaddyfileService(caddyfilePath); - const localDomains = await caddyfileService.getLocalDomains(); - const hostnames = localDomains.map((d) => d.hostname); - - const hostsService = new HostsService(); - await hostsService.setup({ verbose, hostnames }); - - logger.success("Setup completed!"); - }); -} diff --git a/packages/localproxy/src/commands/start.ts b/packages/localproxy/src/commands/start.ts deleted file mode 100644 index 945c0e8..0000000 --- a/packages/localproxy/src/commands/start.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createCommand } from "commander"; -import { CaddyService } from "#src/services/caddy.ts"; -import { logger } from "#src/services/logger.ts"; -import type { Context } from "#src/types.ts"; - -type CommandOptions = { - verbose: boolean; -}; - -export function createStartCommand({ caddyfilePath }: Context) { - return createCommand("start") - .description("start caddy server") - .option("--verbose", "verbose mode, show background output", false) - .action(async function startAction(options: CommandOptions) { - const caddyService = new CaddyService(caddyfilePath); - await caddyService.start(options); - - logger.success("Start completed!"); - }); -} diff --git a/packages/localproxy/src/commands/status.ts b/packages/localproxy/src/commands/status.ts deleted file mode 100644 index df7d0e2..0000000 --- a/packages/localproxy/src/commands/status.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createCommand } from "commander"; -import { CaddyService } from "#src/services/caddy.ts"; -import { CaddyfileService } from "#src/services/caddyfile/index.ts"; -import { FileService } from "#src/services/file.ts"; -import { HostsService } from "#src/services/hosts.ts"; -import { logger } from "#src/services/logger.ts"; -import type { Context } from "#src/types.ts"; - -export function createStatusCommand({ caddyfilePath }: Context) { - return createCommand("status") - .description("show configured localhosts") - .action(async function statusAction() { - const caddyService = new CaddyService(caddyfilePath); - - if (await caddyService.isRunning()) { - logger.info("Caddy is running"); - } else { - logger.warn("Caddy is not running. Use `localp start` to start it."); - } - - const fileService = new FileService(caddyfilePath); - await fileService.print(); - - const caddyfileService = new CaddyfileService(caddyfilePath); - const localDomains = await caddyfileService.getLocalDomains(); - - const hostsService = new HostsService(); - const enabledHosts = await hostsService.getEnabledHosts(); - - localDomains.forEach(({ hostname, ports }) => { - const enabled = enabledHosts.some((h) => h.hostname === hostname); - const formattedPorts = ports.map((p) => `:${p}`).join(", "); - - if (enabled) { - logger.success("`%s` is configured -> %s", hostname, formattedPorts); - } else { - logger.warn("`%s` is not configured -> %s", hostname, formattedPorts); - } - }); - }); -} diff --git a/packages/localproxy/src/commands/stop.ts b/packages/localproxy/src/commands/stop.ts deleted file mode 100644 index f1a121c..0000000 --- a/packages/localproxy/src/commands/stop.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createCommand } from "commander"; -import { CaddyService } from "#src/services/caddy.ts"; -import { logger } from "#src/services/logger.ts"; -import type { Context } from "#src/types.ts"; - -type CommandOptions = { - verbose: boolean; -}; - -export function createStopCommand({ caddyfilePath }: Context) { - return createCommand("stop") - .description("stop caddy server") - .option("--verbose", "verbose mode, show background output", false) - .action(async function stopAction(options: CommandOptions) { - const caddyService = new CaddyService(caddyfilePath); - await caddyService.stop(options); - - logger.success("Stop completed!"); - }); -} diff --git a/packages/localproxy/src/run.ts b/packages/localproxy/src/run.ts deleted file mode 100644 index 082d2cc..0000000 --- a/packages/localproxy/src/run.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { homedir } from "node:os"; -import path from "node:path"; -import { createPkg, dirnameOf } from "@vlandoss/clibuddy"; -import { createCommand } from "commander"; -import { createCleanCommand } from "./commands/clean.ts"; -import { createSetupCommand } from "./commands/setup.ts"; -import { createStartCommand } from "./commands/start.ts"; -import { createStatusCommand } from "./commands/status.ts"; -import { createStopCommand } from "./commands/stop.ts"; -import { logger } from "./services/logger.ts"; -import type { Context, ProgramOptions } from "./types.ts"; -import { BANNER_TEXT, CREDITS_TEXT } from "./ui.ts"; - -const BIN_DIR = path.dirname(dirnameOf(import.meta)); -const INSTALL_DIR = path.join(homedir(), ".localproxy"); - -async function createContext({ binDir, installDir }: ProgramOptions) { - const binPkg = await createPkg(binDir); - - if (!binPkg) { - throw new Error("Could not find bin package.json"); - } - - return { - installDir, - caddyfilePath: path.join(installDir, "Caddyfile"), - binDir, - binPkg, - } satisfies Context; -} - -async function createProgram(options: ProgramOptions) { - const ctx = await createContext(options); - const version = ctx.binPkg.version; - - return createCommand("localproxy") - .alias("localp") - .version(version, "-v, --version") - .addHelpText("before", BANNER_TEXT) - .addHelpText("after", CREDITS_TEXT) - .addCommand(createSetupCommand(ctx)) - .addCommand(createStatusCommand(ctx)) - .addCommand(createStartCommand(ctx)) - .addCommand(createStopCommand(ctx)) - .addCommand(createCleanCommand(ctx)); -} - -try { - const program = await createProgram({ binDir: BIN_DIR, installDir: INSTALL_DIR }); - await program.parseAsync(); -} catch (error) { - if (error instanceof Error && error.name === "ExitPromptError") { - logger.success("👋 cancelled, until next time!"); - } else { - logger.error(error); - process.exit(1); - } -} diff --git a/packages/localproxy/src/services/caddy.ts b/packages/localproxy/src/services/caddy.ts deleted file mode 100644 index b2cf1a6..0000000 --- a/packages/localproxy/src/services/caddy.ts +++ /dev/null @@ -1,106 +0,0 @@ -import * as fs from "node:fs"; -import path from "node:path"; -import { logger } from "./logger.ts"; -import { quietShell, silentShell, verboseShell } from "./shell.ts"; - -const debug = logger.subdebug("caddy"); - -type ExecOption = { - verbose: boolean; -}; - -export class CaddyService { - #configPath: string; - #pidFilePath: string; - - constructor(configPath: string) { - this.#configPath = configPath; - this.#pidFilePath = path.join(path.dirname(configPath), "caddy.pid"); - this.#initCaddyPid(); - } - - #initCaddyPid() { - if (!this.#hasCaddyPid()) { - fs.writeFileSync(this.#pidFilePath, ""); - } - } - - #hasCaddyPid() { - return fs.existsSync(this.#pidFilePath); - } - - #deleteCaddyPid() { - if (this.#hasCaddyPid()) { - fs.rmSync(this.#pidFilePath); - } - } - - #shell({ verbose }: ExecOption) { - return verbose ? verboseShell : silentShell; - } - - #getPID() { - return this.#hasCaddyPid() ? fs.readFileSync(this.#pidFilePath, "utf-8").trim() : null; - } - - async reboot(options: ExecOption) { - const isRunning = await this.isRunning(); - if (isRunning) { - await this.stop(options); - } - await this.start(options); - } - - async start({ verbose }: ExecOption) { - if (await this.isRunning()) { - logger.warn("Caddy is already running. PID: %d", this.#getPID()); - return; - } - - const { $ } = this.#shell({ verbose }); - - try { - logger.start("Starting Caddy"); - - await $`caddy start -c ${this.#configPath} --pidfile ${this.#pidFilePath} > /dev/null 2>&1`; - - logger.success("Caddy started"); - } catch { - logger.error("Can't start Caddy"); - process.exit(1); - } - } - - async stop({ verbose }: ExecOption) { - const { $ } = this.#shell({ verbose }); - - try { - logger.start("Stopping Caddy"); - - await $`caddy stop -c ${this.#configPath}`; - this.#deleteCaddyPid(); - - logger.success("Caddy stopped"); - } catch { - logger.error("Can't stop Caddy"); - process.exit(1); - } - } - - async isRunning() { - if (!this.#hasCaddyPid()) { - return false; - } - - const pid = this.#getPID(); - - debug("caddy PID: %d", pid); - - const { exitCode } = await quietShell.$`kill -0 ${pid}`.nothrow(); - const isRunning = exitCode === 0; - - debug("caddy is %s", isRunning ? "running" : "stopped"); - - return isRunning; - } -} diff --git a/packages/localproxy/src/services/caddyfile/__tests__/caddyfile.test.ts b/packages/localproxy/src/services/caddyfile/__tests__/caddyfile.test.ts deleted file mode 100644 index c5357a8..0000000 --- a/packages/localproxy/src/services/caddyfile/__tests__/caddyfile.test.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { dirnameOf } from "@vlandoss/clibuddy"; -import { describe, expect, it } from "vitest"; -import { CaddyfileService, type LocalDomain } from "#src/services/caddyfile/index.ts"; -import { type Caddyfile, CaddyfileParser } from "#src/services/caddyfile/parser.ts"; -import { FixtureReader } from "./helpers.ts"; - -const fixtureReader = new FixtureReader(dirnameOf(import.meta)); - -type CreateTestOptions = { - fixture: string; - expected: T; -}; - -describe("caddyfile service", () => { - function createTest({ fixture, expected }: CreateTestOptions) { - const fixturePath = fixtureReader.getFullPath(fixture); - - return async () => { - const caddyfileService = new CaddyfileService(fixturePath); - const actual = await caddyfileService.getLocalDomains(); - - expect(actual).toEqual(expected); - }; - } - - it( - "should get simple host and port", - createTest({ - fixture: "Caddyfile.simple", - expected: [ - { - hostname: "app.localhost", - ports: ["3000"], - }, - ], - }), - ); - - it( - "should get multiple host with same port", - createTest({ - fixture: "Caddyfile.with-multiple-sites", - expected: [ - { - hostname: "app-1.localhost", - ports: ["3000"], - }, - { - hostname: "app-2.localhost", - ports: ["3000"], - }, - { - hostname: "app-3.localhost", - ports: ["3001"], - }, - { - hostname: "app-4.localhost", - ports: ["3001"], - }, - { - hostname: "app-5.localhost", - ports: ["3002"], - }, - { - hostname: "app-6.localhost", - ports: ["3002"], - }, - ], - }), - ); - - it( - "should get multiple ports with same host", - createTest({ - fixture: "Caddyfile.with-multiple-directives", - expected: [ - { - hostname: "app.localhost", - ports: ["3001", "3000"], - }, - ], - }), - ); -}); - -describe("caddyfile parser", () => { - function createTest({ fixture, expected }: CreateTestOptions) { - const fixtureContent = fixtureReader.read(fixture); - - return async () => { - const caddyfileParser = new CaddyfileParser(fixtureContent); - const actual = caddyfileParser.parse(); - - expect(actual).toEqual(expected); - }; - } - - it( - "should parse a simple caddyfile", - createTest({ - fixture: "Caddyfile.simple", - expected: { - siteBlocks: [ - { - sites: ["app.localhost"], - directives: [ - { - type: "reverse_proxy", - arguments: ["localhost:3000"], - }, - ], - }, - ], - }, - }), - ); - - it( - "should parse with multiple sites", - createTest({ - fixture: "Caddyfile.with-multiple-sites", - expected: { - siteBlocks: [ - { - sites: ["app-1.localhost", "app-2.localhost"], - directives: [ - { - type: "reverse_proxy", - arguments: ["localhost:3000"], - }, - ], - }, - { - sites: ["app-3.localhost", "app-4.localhost"], - directives: [ - { - type: "reverse_proxy", - arguments: ["localhost:3001"], - }, - ], - }, - { - sites: ["app-5.localhost", "app-6.localhost"], - directives: [ - { - type: "reverse_proxy", - arguments: ["localhost:3002"], - }, - ], - }, - ], - }, - }), - ); - - it( - "should parse with multiple directives", - createTest({ - fixture: "Caddyfile.with-multiple-directives", - expected: { - siteBlocks: [ - { - sites: ["app.localhost"], - directives: [ - { - type: "reverse_proxy", - matchToken: "/subpath*", - arguments: ["localhost:3001"], - }, - { - type: "reverse_proxy", - arguments: ["localhost:3000"], - }, - ], - }, - ], - }, - }), - ); -}); diff --git a/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.simple b/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.simple deleted file mode 100644 index 5e0a289..0000000 --- a/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.simple +++ /dev/null @@ -1,3 +0,0 @@ -app.localhost { - reverse_proxy localhost:3000 -} diff --git a/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-directives b/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-directives deleted file mode 100644 index 633b485..0000000 --- a/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-directives +++ /dev/null @@ -1,4 +0,0 @@ -app.localhost { - reverse_proxy /subpath* localhost:3001 - reverse_proxy localhost:3000 -} diff --git a/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-sites b/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-sites deleted file mode 100644 index 582530b..0000000 --- a/packages/localproxy/src/services/caddyfile/__tests__/fixtures/Caddyfile.with-multiple-sites +++ /dev/null @@ -1,12 +0,0 @@ -app-1.localhost, app-2.localhost { - reverse_proxy localhost:3000 -} - -app-3.localhost app-4.localhost { - reverse_proxy localhost:3001 -} - -app-5.localhost, -app-6.localhost { - reverse_proxy localhost:3002 -} diff --git a/packages/localproxy/src/services/caddyfile/__tests__/helpers.ts b/packages/localproxy/src/services/caddyfile/__tests__/helpers.ts deleted file mode 100644 index e964512..0000000 --- a/packages/localproxy/src/services/caddyfile/__tests__/helpers.ts +++ /dev/null @@ -1,19 +0,0 @@ -import fs from "node:fs"; -import path from "node:path"; - -export class FixtureReader { - #basePath: string; - - constructor(basePath: string) { - this.#basePath = path.join(basePath, "fixtures"); - } - - read(filename: string) { - const fullpath = this.getFullPath(filename); - return fs.readFileSync(fullpath).toString("utf-8"); - } - - getFullPath(filename: string) { - return path.join(this.#basePath, filename); - } -} diff --git a/packages/localproxy/src/services/caddyfile/index.ts b/packages/localproxy/src/services/caddyfile/index.ts deleted file mode 100644 index c956ea6..0000000 --- a/packages/localproxy/src/services/caddyfile/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./service.ts"; diff --git a/packages/localproxy/src/services/caddyfile/parser.ts b/packages/localproxy/src/services/caddyfile/parser.ts deleted file mode 100644 index 407ae95..0000000 --- a/packages/localproxy/src/services/caddyfile/parser.ts +++ /dev/null @@ -1,123 +0,0 @@ -type SiteBlock = { - sites: string[]; - directives: Directive[]; -}; - -type Directive = { - type: string; - matchToken?: string; - arguments: string[]; -}; - -export type Caddyfile = { - siteBlocks: SiteBlock[]; -}; - -export class CaddyfileParser { - #content: string; - - constructor(content: string) { - this.#content = content; - } - - parse(): Caddyfile { - const siteBlocks = this.#extractSiteBlocks(this.#content); - - return { - siteBlocks, - }; - } - - #extractSiteBlocks(content: string) { - const siteBlocks: SiteBlock[] = []; - - const bracedBlockRegex = /([^{]+)\s*\{([^}]*)\}/gs; - - let match: RegExpExecArray | null | undefined; - const processedContent = new Set(); - - // biome-ignore lint/suspicious/noAssignInExpressions: loop over content - while ((match = bracedBlockRegex.exec(content)) !== null) { - const [fullMatch, sitesStr, directivesStr] = match; - processedContent.add(fullMatch.trim()); - - const sites = sitesStr ? this.#parseSites(sitesStr.trim()) : []; - const directives = directivesStr ? this.#parseDirectives(directivesStr.trim()) : []; - - if (sites.length > 0) { - siteBlocks.push({ sites, directives }); - } - } - - return siteBlocks; - } - - #parseSites(sitesStr: string) { - if (!sitesStr.trim()) { - return []; - } - - return sitesStr - .split(/[,\s]+/) - .map((site) => site.trim()) - .filter((site) => site.length > 0); - } - - #parseDirectives(directivesStr: string) { - const directives: Directive[] = []; - - if (!directivesStr.trim()) { - return directives; - } - - // Split into lines and process each directive - const lines = directivesStr - .split("\n") - .map((line) => line.trim()) - .filter((line) => line.length > 0); - - for (const line of lines) { - const directive = this.#parseDirectiveLine(line); - - if (directive) { - directives.push(directive); - } - } - - return directives; - } - - #parseDirectiveLine(line: string): Directive | null { - // Simple regex to parse: directive [matcher] arg1 arg2 ... - const directiveRegex = /^(\w+)(?:\s+(.+))?$/; - const match = line.match(directiveRegex); - - if (!match) { - return null; - } - - const [, directiveType, argsStr] = match; - - const directive: Directive = { - type: directiveType as string, - arguments: [], - }; - - if (argsStr) { - const args = argsStr.split(/\s+/).filter((arg) => arg.length > 0); - - if (args.length > 0 && this.#looksLikeMatcher(args[0] as string)) { - directive.matchToken = args[0]; - directive.arguments = args.slice(1); - } else { - directive.arguments = args; - } - } - - return directive; - } - - #looksLikeMatcher(token: string) { - return token === "*" || token.startsWith("/") || token.startsWith("@"); - } -} diff --git a/packages/localproxy/src/services/caddyfile/service.ts b/packages/localproxy/src/services/caddyfile/service.ts deleted file mode 100644 index 77fcadb..0000000 --- a/packages/localproxy/src/services/caddyfile/service.ts +++ /dev/null @@ -1,48 +0,0 @@ -import * as fs from "node:fs/promises"; -import { logger } from "../logger.ts"; -import { CaddyfileParser } from "./parser.ts"; - -const debug = logger.subdebug("caddyfile-service"); - -export type LocalDomain = { - hostname: string; - ports: string[]; -}; - -const LOCALHOST_REGEX = /localhost(:\d+)?/; - -export class CaddyfileService { - #filepath: string; - - constructor(filepath: string) { - this.#filepath = filepath; - } - - async getLocalDomains(): Promise { - const caddyfileContent = await fs.readFile(this.#filepath, "utf-8"); - - const caddyfileParser = new CaddyfileParser(caddyfileContent); - - const caddyfile = caddyfileParser.parse(); - - const domains = caddyfile.siteBlocks.flatMap((block) => { - const ports = block.directives - .filter((d) => d.type === "reverse_proxy" && d.arguments.some((arg) => this.#isLocalhost(arg))) - .flatMap((d) => d.arguments) - .filter((arg) => this.#isLocalhost(arg)) - .map((arg) => arg.split(":")[1] as string); - - return block.sites.map((site) => { - return { hostname: site, ports }; - }); - }); - - debug("detected domains: %o", domains); - - return domains; - } - - #isLocalhost(arg: string) { - return LOCALHOST_REGEX.test(arg); - } -} diff --git a/packages/localproxy/src/services/file.ts b/packages/localproxy/src/services/file.ts deleted file mode 100644 index f220a62..0000000 --- a/packages/localproxy/src/services/file.ts +++ /dev/null @@ -1,16 +0,0 @@ -import fs from "node:fs/promises"; - -export class FileService { - #filePath: string; - - constructor(filePath: string) { - this.#filePath = filePath; - } - - async print() { - const fileContent = (await fs.readFile(this.#filePath)).toString(); - - console.log(`${this.#filePath}:\n`); - console.log(fileContent.trim()); - } -} diff --git a/packages/localproxy/src/services/hosts.ts b/packages/localproxy/src/services/hosts.ts deleted file mode 100644 index 169fe6d..0000000 --- a/packages/localproxy/src/services/hosts.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { logger } from "./logger.ts"; -import { quietShell, silentShell, verboseShell } from "./shell.ts"; -import { SudoService } from "./sudo.ts"; - -type SetupOptions = { - verbose: boolean; - hostnames: string[]; -}; - -type Host = { - ip: string; - hostname: string; -}; - -const debug = logger.subdebug("hosts"); - -export class HostsService { - #sudo: SudoService; - - constructor() { - this.#sudo = new SudoService(); - } - - #shell({ verbose }: SetupOptions) { - return verbose ? verboseShell : silentShell; - } - - async setup(options: SetupOptions) { - const { hostnames } = options; - - logger.start("Setting up hosts"); - - await this.#sudo.auth(); - - const { $ } = this.#shell(options); - - await $`sudo hosts backups create`; - - for (const host of hostnames) { - await this.addHost(host, options); - } - - logger.success("Hosts ready"); - } - - async clean(options: SetupOptions) { - const { hostnames } = options; - - await this.#sudo.auth(); - - for (const host of hostnames) { - await this.removeHost(host, options); - } - } - - async findHost(host: string) { - const { exitCode } = await quietShell.$`hosts show "${host}"`.nothrow(); - const found = exitCode === 0; - debug("Host %s is %s", host, found ? "present" : "absent"); - return found; - } - - async addHost(host: string, options: SetupOptions) { - const { $ } = this.#shell(options); - - const found = await this.findHost(host); - - if (!found) { - await $`sudo hosts add 127.0.0.1 ${host}`; - } - } - - async removeHost(host: string, options: SetupOptions) { - const { $ } = this.#shell(options); - - const found = await this.findHost(host); - - if (!found) { - await $`sudo hosts remove ${host}`; - } - } - - async getEnabledHosts(): Promise { - const output = await quietShell.$`hosts list enabled`.text(); - - const hosts = output - .split("\n") - .map((line) => { - const [ip, hostname] = line.split(/\s+/); - - if (!ip || !hostname) { - return null; - } - - return { ip, hostname }; - }) - .filter(Boolean); - - return hosts as Host[]; - } -} diff --git a/packages/localproxy/src/services/logger.ts b/packages/localproxy/src/services/logger.ts deleted file mode 100644 index 7b19f50..0000000 --- a/packages/localproxy/src/services/logger.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createLoggy } from "@vlandoss/loggy"; - -export const logger = createLoggy({ - namespace: "localproxy", -}); diff --git a/packages/localproxy/src/services/shell.ts b/packages/localproxy/src/services/shell.ts deleted file mode 100644 index 5e9418c..0000000 --- a/packages/localproxy/src/services/shell.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { createShellService } from "@vlandoss/clibuddy"; - -export const quietShell = createShellService({ - quiet: true, - verbose: false, -}); - -export const silentShell = quietShell.child({ - stdio: "ignore", -}); - -export const verboseShell = quietShell.child({ - quiet: false, - verbose: true, - stdio: "inherit", -}); diff --git a/packages/localproxy/src/services/sudo.ts b/packages/localproxy/src/services/sudo.ts deleted file mode 100644 index 9a68d0f..0000000 --- a/packages/localproxy/src/services/sudo.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { password as passwordPrompt } from "@inquirer/prompts"; -import type { ShellService } from "@vlandoss/clibuddy"; -import { logger } from "./logger.ts"; -import { silentShell } from "./shell.ts"; - -const debug = logger.subdebug("sudo"); - -export class SudoService { - #shell: ShellService; - - constructor() { - this.#shell = silentShell.child({ - stdio: ["ignore", "ignore", "pipe"], - }); - } - - async auth() { - if (!(await this.isAuthorized())) { - await this.authenticate(); - } - } - - async isAuthorized() { - const { exitCode } = await this.#shell.$`sudo -v -n`.nothrow(); - return exitCode === 0; - } - - async authenticate() { - let intent = 1; - let exitCode = null; - - await passwordPrompt({ - message: "Enter sudo password to manage hosts", - mask: true, - validate: async (value) => { - debug("Attempting sudo authentication %o", { intent }); - - const output = await this.#shell.$`echo "${value}" | sudo -S -v`.nothrow(); - exitCode = output.exitCode; - - debug("Sudo authentication exitCode(%d)", exitCode); - - if (intent >= 3) { - return true; - } - - intent++; - - return output.exitCode === 0 ? true : "Invalid password"; - }, - }); - - if (exitCode !== 0) { - logger.error("`sudo` authentication failed"); - process.exit(1); - } - } -} diff --git a/packages/localproxy/src/types.ts b/packages/localproxy/src/types.ts deleted file mode 100644 index 1d4e5e9..0000000 --- a/packages/localproxy/src/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Pkg } from "@vlandoss/clibuddy"; - -export type ProgramOptions = { - binDir: string; - installDir: string; -}; - -export type Context = { - binDir: string; - installDir: string; - caddyfilePath: string; - binPkg: Pkg; -}; diff --git a/packages/localproxy/src/ui.ts b/packages/localproxy/src/ui.ts deleted file mode 100644 index 6c88892..0000000 --- a/packages/localproxy/src/ui.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { palette } from "@vlandoss/clibuddy"; - -export const UI_LOGO = `🛠️ ${palette.bold("localproxy")}`; - -export const BANNER_TEXT = `${UI_LOGO}: Simple local development proxy automation\n`; - -export const CREDITS_TEXT = `\nAcknowledgment: -- Caddy: for being a powerful proxy server - ${palette.link("https://caddyserver.com")} - -- hosts: making it easier to manage host file - ${palette.link("https://github.com/xwmx/hosts")}`; diff --git a/packages/localproxy/tsconfig.json b/packages/localproxy/tsconfig.json deleted file mode 100644 index 569a7e2..0000000 --- a/packages/localproxy/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@vlandoss/config/ts/no-dom/app"] -} diff --git a/packages/localproxy/tsdown.config.ts b/packages/localproxy/tsdown.config.ts deleted file mode 100644 index ebb2ecf..0000000 --- a/packages/localproxy/tsdown.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineBinConfig } from "@vlandoss/tsdown-config"; - -export default defineBinConfig(); diff --git a/packages/localproxy/vitest.config.ts b/packages/localproxy/vitest.config.ts deleted file mode 100644 index ae712b4..0000000 --- a/packages/localproxy/vitest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - projects: [ - { - extends: true, - test: { - name: "unit", - include: ["./src/**/__tests__/*.test.ts"], - }, - }, - ], - }, -}); diff --git a/packages/starter/CHANGELOG.md b/packages/starter/CHANGELOG.md deleted file mode 100644 index df64995..0000000 --- a/packages/starter/CHANGELOG.md +++ /dev/null @@ -1,237 +0,0 @@ -# @vlandoss/starter - -## 0.4.2 - -### Patch Changes - -- [#206](https://github.com/variableland/dx/pull/206) [`6c2ec90`](https://github.com/variableland/dx/commit/6c2ec9097abde47f9f7a8489c4a7149f0699d397) Thanks [@rqbazan](https://github.com/rqbazan)! - Deprecate package — final published version with notice. - - - `@vlandoss/biome-config` is superseded by [`@vlandoss/config`](https://github.com/variableland/dx/tree/main/packages/config) (use `@vlandoss/config/biome`). - - `@vlandoss/localproxy` is superseded by [Portless](https://port1355.dev). - - `@vlandoss/starter` is superseded by [`@vlandoss/vland`](https://github.com/variableland/dx/tree/main/packages/vland). - - Each package's `homepage` is repinned to a tag URL so the deprecation README stays reachable after the source is removed from the monorepo. - -## 0.4.1 - -### Patch Changes - -- [#198](https://github.com/variableland/dx/pull/198) [`d467f7f`](https://github.com/variableland/dx/commit/d467f7fd0f0512a1fe15f6d74cd9a540a21bbfbc) Thanks [@rqbazan](https://github.com/rqbazan)! - Add a `[!CAUTION]` block at the top of the README announcing that `@vlandoss/starter` is deprecated in favour of [`@vlandoss/vland`](https://github.com/variableland/dx/tree/main/packages/vland), with a one-liner install snippet. - - The package is still functional and unchanged otherwise; npm-registry deprecation is a separate manual step for a follow-up release. - -- Updated dependencies [[`d467f7f`](https://github.com/variableland/dx/commit/d467f7fd0f0512a1fe15f6d74cd9a540a21bbfbc)]: - - @vlandoss/clibuddy@0.5.0 - -## 0.4.0 - -### Minor Changes - -- [#195](https://github.com/variableland/dx/pull/195) [`ebcc490`](https://github.com/variableland/dx/commit/ebcc4903b2e1bdeb49ae3e49fbe60bc0ac4b599c) Thanks [@rqbazan](https://github.com/rqbazan)! - Add shell completion support to the `vland` CLI via a new `completion ` subcommand (bash/zsh/fish), powered by [`usage`](https://usage.jdx.dev). - -## 0.3.0 - -### Minor Changes - -- [#192](https://github.com/variableland/dx/pull/192) [`45e1b91`](https://github.com/variableland/dx/commit/45e1b9104d777f3a3da84f395ea62bdf8a2c5f58) Thanks [@rqbazan](https://github.com/rqbazan)! - Add UI consistency for CLIs - -### Patch Changes - -- Updated dependencies [[`45e1b91`](https://github.com/variableland/dx/commit/45e1b9104d777f3a3da84f395ea62bdf8a2c5f58)]: - - @vlandoss/clibuddy@0.4.0 - -## 0.2.0 - -### Minor Changes - -- [#182](https://github.com/variableland/dx/pull/182) [`0742fa4`](https://github.com/variableland/dx/commit/0742fa466d07a6df296fee9a575a9c92f7587c9c) Thanks [@rqbazan](https://github.com/rqbazan)! - feat(clibuddy): add `dirnameOf` / `filenameOf` helpers; simplify CLI bin entries - - - **New helpers in `@vlandoss/clibuddy`**: `dirnameOf(import.meta)` and `filenameOf(import.meta)`. They prefer the native `import.meta.dirname` / `import.meta.filename` (Node 20.11+) and fall back to `dirname(fileURLToPath(import.meta.url))` otherwise — so packages can keep `engines.node` at `>=20.0.0` without losing ergonomics. - - **CLI bin entries simplified.** `bin.mjs` / `bin.ts` no longer compute `binDir` and pass it through a `main()` function — they just `import "./src/run.ts"` (or `./dist/run.mjs` for the published artifact). The new `src/run.ts` is now the executable entry: it resolves its own `BIN_DIR` via `dirnameOf(import.meta)` and starts the program. Affects `run-run`, `localproxy`, and `starter`. The `bin` field in each `package.json` is unchanged, so nothing changes for consumers running the CLIs. - -### Patch Changes - -- Updated dependencies [[`0742fa4`](https://github.com/variableland/dx/commit/0742fa466d07a6df296fee9a575a9c92f7587c9c)]: - - @vlandoss/loggy@0.2.0 - - @vlandoss/clibuddy@0.3.0 - -## 0.1.4 - -### Patch Changes - -- Updated dependencies [[`37eb596`](https://github.com/variableland/dx/commit/37eb596a3d50f30430f573ffe3c5a77a3aa88322)]: - - @vlandoss/clibuddy@0.2.0 - -## 0.1.3 - -### Patch Changes - -- [#175](https://github.com/variableland/dx/pull/175) [`3271dd1`](https://github.com/variableland/dx/commit/3271dd1144842749cd81a2eb9ba7f85f21d5467e) Thanks [@rqbazan](https://github.com/rqbazan)! - Fix `binDir` pointing to `dist/` in compiled CLIs - - When a CLI was published and executed via the compiled binary, `import.meta.url` resolved to the `dist/` folder, causing `binDir` to be `/dist/` instead of the package root. This broke `localBaseBinPath` (which expects `/node_modules/.bin`) and any other logic anchored to the package root. - - The fix introduces a thin `bin.mjs` wrapper at the package root that computes `binDir` from its own location (always the root) and imports the compiled logic from `dist/main.mjs`. The `tsdown-config` entry point is updated accordingly from `bin.ts` to `src/main.ts`. - -## 0.1.2 - -### Patch Changes - -- [#170](https://github.com/variableland/dx/pull/170) [`72d7305`](https://github.com/variableland/dx/commit/72d73052778ebe9d77aebc4d942eee08fe1b56b3) Thanks [@rqbazan](https://github.com/rqbazan)! - Upgrade TypeScript to 6.0.3 and enforce explicit `.ts` import extensions - - - Upgrade TypeScript from 5.9.3 to 6.0.3 across the monorepo - - Add `useImportExtensions: "error"` biome rule to enforce explicit `.ts` extensions in all imports - - Add `@types/node` as optional peer dependency in `@vlandoss/config` - - Add `types: ["node"]` to the `tsconfig.no-dom` base config - - Update all import paths in `localproxy` and `starter` to use explicit `.ts` extensions - - Remove root-level `tsconfig.json` (paths now handled per-package) - -## 0.1.1 - -### Patch Changes - -- [#168](https://github.com/variableland/dx/pull/168) [`80e17f9`](https://github.com/variableland/dx/commit/80e17f9544f1cfff526f27ea50e2dacc6dba6e06) Thanks [@rqbazan](https://github.com/rqbazan)! - Migrate from Bun to Node.js as the runtime target. - - - `run-run`: fix `require.resolve` usage in `BiomeService` (not available in ESM with Node.js); replaced with `createRequire`. Add support for `run-run.config.mts` config files. - - `localproxy`: replace `fs.exists` (Bun-only API) with a `fs.access`-based helper. - - `clibuddy`, `loggy`, `starter`: remove `bun` from `engines` field. - -- Updated dependencies [[`80e17f9`](https://github.com/variableland/dx/commit/80e17f9544f1cfff526f27ea50e2dacc6dba6e06)]: - - @vlandoss/clibuddy@0.1.1 - - @vlandoss/loggy@0.1.1 - -## 0.1.0 - -### Minor Changes - -- [#165](https://github.com/variableland/dx/pull/165) [`33659b4`](https://github.com/variableland/dx/commit/33659b4f2666aee939ed637b0dd6366854e22a96) Thanks [@rqbazan](https://github.com/rqbazan)! - Add Node.js compatibility via `publishConfig` and compiled output - - All publishable packages now ship compiled `dist/` output (via tsdown) and use `publishConfig.exports`/`publishConfig.bin` to override the package fields at publish time. This means consumers using Node.js no longer need Bun installed — the published packages work with `node >= 20` out of the box. - - A new shared package `@vlandoss/tsdown-config` provides reusable build presets (`defineBinConfig`, `defineLibConfig`) and the `nodeShebangPlugin` that rewrites the `#!/usr/bin/env bun` shebang to `#!/usr/bin/env node` in compiled bin files. - -### Patch Changes - -- Updated dependencies [[`33659b4`](https://github.com/variableland/dx/commit/33659b4f2666aee939ed637b0dd6366854e22a96)]: - - @vlandoss/clibuddy@0.1.0 - - @vlandoss/loggy@0.1.0 - -## 0.0.14 - -### Patch Changes - -- [#162](https://github.com/variableland/dx/pull/162) [`5c89c36`](https://github.com/variableland/dx/commit/5c89c362934af0722e6b7788eb08b0620a97eb32) Thanks [@rqbazan](https://github.com/rqbazan)! - Switch tsconfigs to `@vlandoss/config/ts/*` and move path aliases from tsconfig `paths` to the `package.json` `imports` field (`#src/*`, `#test/*`). Relative imports now use explicit `.ts` extensions. - -- Updated dependencies [[`5c89c36`](https://github.com/variableland/dx/commit/5c89c362934af0722e6b7788eb08b0620a97eb32)]: - - @vlandoss/clibuddy@0.0.10 - - @vlandoss/loggy@0.0.7 - -## 0.0.13 - -### Patch Changes - -- [#154](https://github.com/variableland/dx/pull/154) [`577f4c7`](https://github.com/variableland/dx/commit/577f4c7df0f2f749fad395ec454d287f666d47bd) Thanks [@rqbazan](https://github.com/rqbazan)! - Improve fatal error logging - -- Updated dependencies [[`577f4c7`](https://github.com/variableland/dx/commit/577f4c7df0f2f749fad395ec454d287f666d47bd)]: - - @vlandoss/clibuddy@0.0.9 - -## 0.0.12 - -### Patch Changes - -- [#149](https://github.com/variableland/dx/pull/149) [`6092149`](https://github.com/variableland/dx/commit/60921491f8d26159d450a5f41986fab220f40074) Thanks [@rqbazan](https://github.com/rqbazan)! - Update usage of clibuddy - -- [#146](https://github.com/variableland/dx/pull/146) [`0ca5ac1`](https://github.com/variableland/dx/commit/0ca5ac1aba30399b4a3f7500e0156ab28bcf62d2) Thanks [@rqbazan](https://github.com/rqbazan)! - Upgrade deps - -- Updated dependencies [[`6092149`](https://github.com/variableland/dx/commit/60921491f8d26159d450a5f41986fab220f40074), [`0ca5ac1`](https://github.com/variableland/dx/commit/0ca5ac1aba30399b4a3f7500e0156ab28bcf62d2)]: - - @vlandoss/clibuddy@0.0.8 - -## 0.0.11 - -### Patch Changes - -- [#144](https://github.com/variableland/dx/pull/144) [`c1517b2`](https://github.com/variableland/dx/commit/c1517b2e05d5a3bf7a067ec461c7d9e789f06a2f) Thanks [@rqbazan](https://github.com/rqbazan)! - Add test:types script - -- Updated dependencies [[`c1517b2`](https://github.com/variableland/dx/commit/c1517b2e05d5a3bf7a067ec461c7d9e789f06a2f), [`b31758e`](https://github.com/variableland/dx/commit/b31758e2d2e2e97a5f3b7b3fec73939e8003da73)]: - - @vlandoss/clibuddy@0.0.7 - - @vlandoss/loggy@0.0.6 - -## 0.0.10 - -### Patch Changes - -- Updated dependencies [[`97a4b51`](https://github.com/variableland/dx/commit/97a4b513617b39b49dbc5244c9c8d9011a721f6f)]: - - @vlandoss/clibuddy@0.0.6 - -## 0.0.9 - -### Patch Changes - -- Updated dependencies [[`462d5b4`](https://github.com/variableland/dx/commit/462d5b493bb1adaa2ed428d2b428fcaaa3001575)]: - - @vlandoss/loggy@0.0.5 - -## 0.0.8 - -### Patch Changes - -- [#117](https://github.com/variableland/dx/pull/117) [`3c05da4`](https://github.com/variableland/dx/commit/3c05da44e93bc66433cd222e1f1466a7e2048cec) Thanks [@rqbazan](https://github.com/rqbazan)! - Update readme - -- Updated dependencies [[`3c05da4`](https://github.com/variableland/dx/commit/3c05da44e93bc66433cd222e1f1466a7e2048cec), [`3c05da4`](https://github.com/variableland/dx/commit/3c05da44e93bc66433cd222e1f1466a7e2048cec)]: - - @vlandoss/clibuddy@0.0.5 - - @vlandoss/loggy@0.0.4 - -## 0.0.7 - -### Patch Changes - -- [#115](https://github.com/variableland/dx/pull/115) [`e64d35c`](https://github.com/variableland/dx/commit/e64d35c10e0cb63ba35011986cdd54cedec71e5d) Thanks [@rqbazan](https://github.com/rqbazan)! - Change husky pre-commit template - -## 0.0.6 - -### Patch Changes - -- [#109](https://github.com/variableland/dx/pull/109) [`d633196`](https://github.com/variableland/dx/commit/d63319692b93fcfd45acd0e05ccdb1f31ec928d6) Thanks [@rqbazan](https://github.com/rqbazan)! - Fix biome config file template - -## 0.0.5 - -### Patch Changes - -- Updated dependencies [[`9557335`](https://github.com/variableland/dx/commit/95573357150d5de9c756b250748686e49ae5ced3)]: - - @vlandoss/clibuddy@0.0.4 - -## 0.0.4 - -### Patch Changes - -- [#97](https://github.com/variableland/dx/pull/97) [`813cfcb`](https://github.com/variableland/dx/commit/813cfcb88e9f273b7f75cf2e2275904c25810130) Thanks [@rqbazan](https://github.com/rqbazan)! - Move to Biome v2 - -- Updated dependencies [[`813cfcb`](https://github.com/variableland/dx/commit/813cfcb88e9f273b7f75cf2e2275904c25810130)]: - - @vlandoss/clibuddy@0.0.3 - - @vlandoss/loggy@0.0.3 - -## 0.0.3 - -### Patch Changes - -- [#93](https://github.com/variableland/dx/pull/93) [`0a8b49d`](https://github.com/variableland/dx/commit/0a8b49de50115ab70283854b21688649c79a85f4) Thanks [@rqbazan](https://github.com/rqbazan)! - Add schema to biome config - -- [#95](https://github.com/variableland/dx/pull/95) [`0c198e4`](https://github.com/variableland/dx/commit/0c198e46f159edfad14f6b2337e41e05f97172bb) Thanks [@rqbazan](https://github.com/rqbazan)! - Add multi typecheck - -- Updated dependencies [[`0c198e4`](https://github.com/variableland/dx/commit/0c198e46f159edfad14f6b2337e41e05f97172bb), [`dc003be`](https://github.com/variableland/dx/commit/dc003bee8bfca1a50850b09114617ed030fcc6d7)]: - - @vlandoss/clibuddy@0.0.2 - - @vlandoss/loggy@0.0.2 - -## 0.0.2 - -### Patch Changes - -- [#91](https://github.com/variableland/dx/pull/91) [`711da54`](https://github.com/variableland/dx/commit/711da549bf79f6117e9f26752da01271726e7100) Thanks [@rqbazan](https://github.com/rqbazan)! - Add `tsconfig` generator to add command - -## 0.0.1 - -### Patch Changes - -- [#85](https://github.com/variableland/dx/pull/85) [`bdae9bf`](https://github.com/variableland/dx/commit/bdae9bf09a9a967ced98dd42b373c725c2c4f2b3) Thanks [@rqbazan](https://github.com/rqbazan)! - Move to @vlandoss organization - -- Updated dependencies [[`bdae9bf`](https://github.com/variableland/dx/commit/bdae9bf09a9a967ced98dd42b373c725c2c4f2b3)]: - - @vlandoss/clibuddy@0.0.1 - - @vlandoss/loggy@0.0.1 diff --git a/packages/starter/CLI.md b/packages/starter/CLI.md deleted file mode 100644 index 1856e6a..0000000 --- a/packages/starter/CLI.md +++ /dev/null @@ -1,97 +0,0 @@ - -# `vland` -- **version**: 0.4.0 - -- **Usage**: `vland [--usage] ` - -## Flags - -### `--usage` - -print KDL spec for this CLI (https://kdl.dev) - -## `vland completion` - -- **Usage**: `vland completion ` - -Prints a shell completion script for vland. Add to your shell rc file: - - bash: eval "$(vland completion bash)" - zsh: eval "$(vland completion zsh)" - fish: vland completion fish | source - -### Arguments - -#### `` - -target shell - -**Choices:** - -- `bash` -- `zsh` -- `fish` - -## `vland init` - -- **Usage**: `vland init [FLAGS] [template]` - -init a new project 🚀 - -### Arguments - -#### `[template]` - -the template to use - -**Choices:** - -- `basic` -- `monorepo` - -### Flags - -#### `-d --dest ` - -destination path to create folder (default: cwd) - -#### `--no-git` - -skip to create a git repository - -**Default:** `true` - -#### `-f --force` - -override existing files - -## `vland add` - -- **Usage**: `vland add [-d --dest ] [-f --force] [slug]…` - -add config files to a project 📁 - -### Arguments - -#### `[slug]…` - -the config slugs to pick - -**Choices:** - -- `biome` -- `changeset` -- `husky` -- `mise` -- `tsconfig` -- `tsup` - -### Flags - -#### `-d --dest ` - -destination path to create folder (default: cwd) - -#### `-f --force` - -override existing files diff --git a/packages/starter/README.md b/packages/starter/README.md deleted file mode 100644 index 3dbc7d8..0000000 --- a/packages/starter/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# ⚡ vland - -The CLI to init a new project in Variable Land 👊 - -> [!CAUTION] -> `@vlandoss/starter` is deprecated. Use [`@vlandoss/vland`](https://github.com/variableland/dx/tree/main/packages/vland) instead — same `vland` binary, modern stack (`giget` + `@clack/prompts` + `commander`), and three first-class templates (`library`, `backend`, `monorepo`). -> -> ```sh -> pnpm add -g @vlandoss/vland -> # or one-shot: -> npx @vlandoss/vland init -> ``` - -## Prerequisites - -- Node.js >= 24.0.0 - -## Installation - -```sh -pnpm add -g @vlandoss/starter -``` - -It will adds the `vland` to your global workspace - -## Usage - -Run the help command: - -```sh -vland help -``` - -## Shell completion - -`vland` ships a `completion` subcommand that prints a shell-specific script. Add it to your shell rc file: - -```sh -# zsh — ~/.zshrc -eval "$(vland completion zsh)" - -# bash — ~/.bashrc -eval "$(vland completion bash)" - -# fish — ~/.config/fish/config.fish -vland completion fish | source -``` - -**Prerequisite:** the [`usage`](https://usage.jdx.dev) CLI must be on your `PATH` (it powers completion at runtime). Install via one of: - -```sh -mise use -g usage -brew install usage -``` - -When you upgrade `@vlandoss/starter`, the next shell session will pick up new commands automatically — no need to re-run anything. - -## Troubleshooting - -To enable debug mode, set the `DEBUG` environment variable to `vland:*` before running *any* command. - -```sh -DEBUG=vland:* vland -``` diff --git a/packages/starter/bin b/packages/starter/bin deleted file mode 100755 index cdfec23..0000000 --- a/packages/starter/bin +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -set -e - -SOURCE="${BASH_SOURCE[0]}" -while [ -L "$SOURCE" ]; do - TARGET="$(readlink "$SOURCE")" - case "$TARGET" in - /*) SOURCE="$TARGET" ;; - *) SOURCE="$(dirname "$SOURCE")/$TARGET" ;; - esac -done -DIR="$(cd "$(dirname "$SOURCE")" && pwd)" - -if [ "$1" = "completion" ]; then - case "$2" in - bash | zsh | fish) - kdl="$DIR/dist/cli.usage.kdl" - if [ ! -f "$kdl" ]; then - echo "vland completion: missing $kdl. Reinstall @vlandoss/starter or run \`pnpm build\`." >&2 - exit 1 - fi - if ! command -v usage >/dev/null 2>&1; then - echo "vland completion: 'usage' CLI not found in PATH." >&2 - echo "Install via: mise use -g usage | brew install usage" >&2 - exit 1 - fi - exec usage generate completion "$2" vland --file "$kdl" - ;; - esac - # Unknown shell or `--help`: fall through to Node so Commander prints help/errors. -fi - -# `--usage` emits a KDL spec for downstream parsers (e.g. `usage generate -# completion`). Force NO_COLOR so command summaries don't leak ANSI escapes -# into the spec — colors are presentation, KDL is data. -for arg in "$@"; do - if [ "$arg" = "--usage" ]; then - export NO_COLOR=1 - break - fi -done - -# In the source repo (tsdown.config.ts present, NOT shipped in the npm tarball), -# always run from src/ so live edits show up. In a published install, use the -# bundled dist/run.mjs. -if [ -f "$DIR/tsdown.config.ts" ]; then - exec node "$DIR/src/run.ts" "$@" -else - exec node "$DIR/dist/run.mjs" "$@" -fi diff --git a/packages/starter/package.json b/packages/starter/package.json deleted file mode 100644 index 6002d9f..0000000 --- a/packages/starter/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@vlandoss/starter", - "version": "0.4.2", - "description": "The CLI to init a new project in Variable Land", - "homepage": "https://github.com/variableland/dx/tree/%40vlandoss%2Fstarter%400.4.2/packages/starter#readme", - "bugs": { - "url": "https://github.com/variableland/dx/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/variableland/dx.git", - "directory": "packages/starter" - }, - "license": "MIT", - "author": "rcrd ", - "type": "module", - "imports": { - "#src/*": "./src/*" - }, - "module": "src/main.ts", - "bin": { - "vland": "./bin" - }, - "files": [ - "bin", - "dist", - "src", - "!src/**/__tests__", - "!src/**/*.test.*", - "plopfiles", - "tsconfig.json" - ], - "scripts": { - "build": "tsdown && pnpm build:kdl", - "build:kdl": "./bin --usage > dist/cli.usage.kdl", - "prepublishOnly": "pnpm build", - "test:types": "rr tsc" - }, - "dependencies": { - "@usage-spec/commander": "1.1.0", - "@vlandoss/clibuddy": "workspace:*", - "@vlandoss/loggy": "workspace:*", - "commander": "14.0.3", - "node-plop": "0.32.3" - }, - "publishConfig": { - "access": "public", - "bin": { - "vland": "./bin" - } - }, - "engines": { - "node": ">=20.0.0" - }, - "devDependencies": { - "@vlandoss/tsdown-config": "workspace:^" - } -} diff --git a/packages/starter/plopfiles/plopfile.ts b/packages/starter/plopfiles/plopfile.ts deleted file mode 100644 index 5ee24bf..0000000 --- a/packages/starter/plopfiles/plopfile.ts +++ /dev/null @@ -1,93 +0,0 @@ -import path from "node:path"; -import type { NodePlopAPI } from "node-plop"; -import { ConfigService } from "#src/services/config.ts"; -import { tsconfigPrompts } from "./prompts/tsconfig.ts"; - -const validators = { - atLeastOne: (answer: string[]) => { - if (answer.length === 0) { - return "At least one option must be selected"; - } - - return true; - }, -}; - -export default function configPlop(plop: NodePlopAPI) { - const baseDir = path.dirname(plop.getPlopfilePath()); - const configService = new ConfigService(baseDir); - - plop.setHelper("ternary", (condition, trueValue, falseValue) => { - return condition ? trueValue : falseValue; - }); - - plop.setGenerator("init", { - description: "Initialize a project based on a predefined template", - prompts: [ - { - type: "list", - name: "template", - message: "Template:", - choices: configService.getTemplateChoices(), - validate: validators.atLeastOne, - }, - { - type: "input", - name: "name", - message: "Name:", - }, - { - type: "input", - name: "description", - message: "Description:", - }, - ], - actions: [ - { - type: "addMany", - destination: ".", - base: "templates/#common", - templateFiles: ["templates/#common/**"], - globOptions: { - dot: true, - }, - }, - { - type: "addMany", - destination: ".", - base: "templates/{{template}}", - templateFiles: ["templates/{{template}}/**"], - globOptions: { - dot: true, - }, - }, - ], - }); - - plop.setGenerator("add", { - description: "Add config file(s) to a project", - prompts: [ - { - type: "checkbox", - name: "slugs", - message: "Select configs:", - choices: configService.getPluginChoices(), - validate: validators.atLeastOne, - }, - // @ts-expect-error - ...tsconfigPrompts, - ], - actions: (answers: unknown) => { - // @ts-expect-error - return answers.slugs.map((slug) => ({ - type: "addMany", - destination: ".", - base: `plugins/${slug}`, - templateFiles: [`plugins/${slug}/**`], - globOptions: { - dot: true, - }, - })); - }, - }); -} diff --git a/packages/starter/plopfiles/plugins/biome/biome.json.hbs b/packages/starter/plopfiles/plugins/biome/biome.json.hbs deleted file mode 100644 index 1845690..0000000 --- a/packages/starter/plopfiles/plugins/biome/biome.json.hbs +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.1.4/schema.json", - "extends": ["@vlandoss/biome-config"] -} diff --git a/packages/starter/plopfiles/plugins/changeset/.changeset/README.md.hbs b/packages/starter/plopfiles/plugins/changeset/.changeset/README.md.hbs deleted file mode 100644 index e5b6d8d..0000000 --- a/packages/starter/plopfiles/plugins/changeset/.changeset/README.md.hbs +++ /dev/null @@ -1,8 +0,0 @@ -# Changesets - -Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works -with multi-package repos, or single-package repos to help you version and publish your code. You can -find the full documentation for it [in our repository](https://github.com/changesets/changesets) - -We have a quick list of common questions to get you started engaging with this project in -[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/packages/starter/plopfiles/plugins/changeset/.changeset/config.json.hbs b/packages/starter/plopfiles/plugins/changeset/.changeset/config.json.hbs deleted file mode 100644 index fbf4c9a..0000000 --- a/packages/starter/plopfiles/plugins/changeset/.changeset/config.json.hbs +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", - "changelog": ["@changesets/changelog-github", { "repo": "variableland/{{name}}" }], - "commit": false, - "fixed": [], - "linked": [], - "access": "restricted", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] -} diff --git a/packages/starter/plopfiles/plugins/husky/.husky/pre-commit b/packages/starter/plopfiles/plugins/husky/.husky/pre-commit deleted file mode 100644 index 074473e..0000000 --- a/packages/starter/plopfiles/plugins/husky/.husky/pre-commit +++ /dev/null @@ -1,9 +0,0 @@ -branch="$(git rev-parse --abbrev-ref HEAD)" - -if [ "$branch" = "main" ]; then - echo "👮‍ You can't commit directly to $branch branch" - exit 1 -fi - -pnpm rr check --fix-staged -git update-index --again diff --git a/packages/starter/plopfiles/plugins/husky/.husky/pre-push b/packages/starter/plopfiles/plugins/husky/.husky/pre-push deleted file mode 100644 index 98475b5..0000000 --- a/packages/starter/plopfiles/plugins/husky/.husky/pre-push +++ /dev/null @@ -1 +0,0 @@ -pnpm test diff --git a/packages/starter/plopfiles/plugins/mise/mise.toml.hbs b/packages/starter/plopfiles/plugins/mise/mise.toml.hbs deleted file mode 100644 index 49482d5..0000000 --- a/packages/starter/plopfiles/plugins/mise/mise.toml.hbs +++ /dev/null @@ -1,2 +0,0 @@ -[env] -_.path = ["\{{config_root}}/node_modules/.bin"] diff --git a/packages/starter/plopfiles/plugins/tsconfig/tsconfig.json.hbs b/packages/starter/plopfiles/plugins/tsconfig/tsconfig.json.hbs deleted file mode 100644 index ddc2baf..0000000 --- a/packages/starter/plopfiles/plugins/tsconfig/tsconfig.json.hbs +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@total-typescript/tsconfig/{{ternary useTSC "tsc" "bundler"}}/{{ternary useDOM "dom" "no-dom"}}/{{tsProjectType}}"] -} diff --git a/packages/starter/plopfiles/plugins/tsup/tsup.config.ts.hbs b/packages/starter/plopfiles/plugins/tsup/tsup.config.ts.hbs deleted file mode 100644 index e3b33b6..0000000 --- a/packages/starter/plopfiles/plugins/tsup/tsup.config.ts.hbs +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["esm", "cjs"], - splitting: false, - sourcemap: true, - clean: true, - dts: true, -}); diff --git a/packages/starter/plopfiles/prompts/tsconfig.ts b/packages/starter/plopfiles/prompts/tsconfig.ts deleted file mode 100644 index 7f84760..0000000 --- a/packages/starter/plopfiles/prompts/tsconfig.ts +++ /dev/null @@ -1,31 +0,0 @@ -function whenAddTsconfig(answers: { slugs: string[] }) { - return answers.slugs.includes("tsconfig"); -} - -export const tsconfigPrompts = [ - { - type: "confirm", - name: "useTSC", - message: "Are you using TSC to turn your .ts files into .js files?", - default: false, - when: whenAddTsconfig, - }, - { - type: "confirm", - name: "useDOM", - message: "Is your code running in a DOM environment?", - default: false, - when: whenAddTsconfig, - }, - { - type: "list", - name: "tsProjectType", - message: "What type of TS project are you creating?", - choices: [ - { name: "App", value: "app" }, - { name: "Library", value: "library" }, - { name: "Monorepo library", value: "library-monorepo" }, - ], - when: whenAddTsconfig, - }, -]; diff --git a/packages/starter/plopfiles/templates/#common/.gitignore.hbs b/packages/starter/plopfiles/templates/#common/.gitignore.hbs deleted file mode 100644 index 0aeb99f..0000000 --- a/packages/starter/plopfiles/templates/#common/.gitignore.hbs +++ /dev/null @@ -1,180 +0,0 @@ -# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore - -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Caches - -.cache -.turbo - -# 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 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/) - -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# 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 - -# 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.* - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store - -# Bun - -*.bun-build diff --git a/packages/starter/plopfiles/templates/#common/README.md.hbs b/packages/starter/plopfiles/templates/#common/README.md.hbs deleted file mode 100644 index ae199f9..0000000 --- a/packages/starter/plopfiles/templates/#common/README.md.hbs +++ /dev/null @@ -1,3 +0,0 @@ -# {{titleCase name}} - -{{description}} diff --git a/packages/starter/plopfiles/templates/#common/biome.json.hbs b/packages/starter/plopfiles/templates/#common/biome.json.hbs deleted file mode 100644 index 1845690..0000000 --- a/packages/starter/plopfiles/templates/#common/biome.json.hbs +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.1.4/schema.json", - "extends": ["@vlandoss/biome-config"] -} diff --git a/packages/starter/plopfiles/templates/basic/package.json.hbs b/packages/starter/plopfiles/templates/basic/package.json.hbs deleted file mode 100644 index de25dfe..0000000 --- a/packages/starter/plopfiles/templates/basic/package.json.hbs +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@variableland/{{name}}", - "version": "0.0.0", - "private": true, - "description": "{{description}}", - "homepage": "https://github.com/variableland/{{name}}#readme", - "bugs": { - "url": "https://github.com/variableland/{{name}}/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/variableland/{{name}}.git" - }, - "license": "MIT", - "author": "rcrd ", - "type": "module", - "devDependencies": { - "@total-typescript/tsconfig": "1.0.4", - "@types/bun": "1.2.9", - "@vlandoss/biome-config": "latest", - "@vlandoss/run-run": "latest" - }, - "engines": { - "bun": ">=1.0.0" - }, - "packageManager": "pnpm@10.6.4", - "pnpm": { - "onlyBuiltDependencies": [ - "@biomejs/biome" - ] - } -} diff --git a/packages/starter/plopfiles/templates/basic/src/index.ts.hbs b/packages/starter/plopfiles/templates/basic/src/index.ts.hbs deleted file mode 100644 index dad3f00..0000000 --- a/packages/starter/plopfiles/templates/basic/src/index.ts.hbs +++ /dev/null @@ -1 +0,0 @@ -console.log("Hi, from {{name}} 👋"); diff --git a/packages/starter/plopfiles/templates/monorepo/package.json.hbs b/packages/starter/plopfiles/templates/monorepo/package.json.hbs deleted file mode 100644 index c634dd9..0000000 --- a/packages/starter/plopfiles/templates/monorepo/package.json.hbs +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "{{name}}", - "version": "0.0.0", - "private": true, - "description": "{{description}}", - "homepage": "https://github.com/variableland/{{name}}#readme", - "bugs": { - "url": "https://github.com/variableland/{{name}}/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/variableland/{{name}}.git" - }, - "license": "MIT", - "author": "rcrd ", - "type": "module", - "devDependencies": { - "@total-typescript/tsconfig": "1.0.4", - "@types/bun": "1.2.9", - "@vlandoss/biome-config": "latest", - "@vlandoss/run-run": "latest" - }, - "engines": { - "bun": ">=1.0.0" - }, - "packageManager": "pnpm@10.6.4" -} diff --git a/packages/starter/plopfiles/templates/monorepo/pnpm-workspace.yaml.hbs b/packages/starter/plopfiles/templates/monorepo/pnpm-workspace.yaml.hbs deleted file mode 100644 index 5a24684..0000000 --- a/packages/starter/plopfiles/templates/monorepo/pnpm-workspace.yaml.hbs +++ /dev/null @@ -1,4 +0,0 @@ -packages: - - packages/* -onlyBuiltDependencies: - - "@biomejs/biome" diff --git a/packages/starter/src/actions/add.ts b/packages/starter/src/actions/add.ts deleted file mode 100644 index eec7a42..0000000 --- a/packages/starter/src/actions/add.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { logger } from "#src/services/logger.ts"; -import type { TemplateService } from "#src/services/types.ts"; -import type { AnyAction } from "./types.ts"; - -type CreateOptions = { - templateService: TemplateService; -}; - -type ExecuteOptions = { - slugs: string[]; -}; - -type GeneratorAnswers = { - slugs: string[]; -}; - -const GENERATOR_ID = "add"; - -export class AddAction implements AnyAction { - #templateService: TemplateService; - - constructor({ templateService }: CreateOptions) { - this.#templateService = templateService; - } - - async execute(options: ExecuteOptions) { - const debug = logger.subdebug("add-action"); - - debug("execute options: %O", options); - - const bypassArr = this.#getBypassArr(options); - - await this.#templateService.generate({ - bypassArr, - generatorId: GENERATOR_ID, - }); - - logger.success("Added successfully 🎉"); - } - - #getBypassArr(options: ExecuteOptions) { - const { slugs } = options; - - const bypassArr: string[] = []; - - if (slugs.length) { - bypassArr[0] = slugs.join(","); - } - - return bypassArr; - } -} diff --git a/packages/starter/src/actions/init.ts b/packages/starter/src/actions/init.ts deleted file mode 100644 index 4e67085..0000000 --- a/packages/starter/src/actions/init.ts +++ /dev/null @@ -1,68 +0,0 @@ -import type { ShellService } from "@vlandoss/clibuddy"; -import { logger } from "#src/services/logger.ts"; -import type { TemplateService } from "#src/services/types.ts"; -import type { AnyAction } from "./types.ts"; - -type ExecuteOptions = { - template?: string; - git: boolean; - destBasePath: string; -}; - -type CreateOptions = { - templateService: TemplateService; - shellService: ShellService; -}; - -const GENERATOR_ID = "init"; - -export class InitAction implements AnyAction { - #templateService: TemplateService; - #shellService: ShellService; - - constructor({ templateService, shellService }: CreateOptions) { - this.#templateService = templateService; - this.#shellService = shellService; - } - - async execute(options: ExecuteOptions) { - const { destBasePath, git } = options; - - const debug = logger.subdebug("init-action"); - - debug("execute options: %O", options); - - const bypassArr = this.#getBypassArr(options); - - await this.#templateService.generate({ - bypassArr, - generatorId: GENERATOR_ID, - }); - - logger.success("Project generated 🎉"); - - const shell = this.#shellService.at(destBasePath).quiet(); - - if (git) { - logger.start("Creating git repository"); - - await shell.$`git init`; - // NOTE: git commit -am failed, not sure why - await shell.$`git add . && git commit -m "initial commit"`; - - logger.success("Git repository created"); - } - } - - #getBypassArr(options: ExecuteOptions) { - const { template } = options; - - const bypassArr: string[] = []; - - if (template) { - bypassArr[0] = template; - } - - return bypassArr; - } -} diff --git a/packages/starter/src/actions/types.ts b/packages/starter/src/actions/types.ts deleted file mode 100644 index e3d6c81..0000000 --- a/packages/starter/src/actions/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type AnyAction = { - execute: (options: T) => Promise; -}; diff --git a/packages/starter/src/program/commands/add.ts b/packages/starter/src/program/commands/add.ts deleted file mode 100644 index 35525c7..0000000 --- a/packages/starter/src/program/commands/add.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { cwd } from "@vlandoss/clibuddy"; -import { Argument, createCommand, Option } from "commander"; -import { AddAction } from "#src/actions/add.ts"; -import type { ContextValue } from "#src/services/ctx.ts"; -import { logger } from "#src/services/logger.ts"; -import { createPlopTemplateService } from "#src/services/template.ts"; - -type AddOptions = { - dest: string; - force: boolean; -}; - -export function createAddCommand(ctx: ContextValue) { - return createCommand("add") - .description("add config files to a project 📁") - .addArgument(new Argument("[slug...]", "the config slugs to pick").choices(ctx.config.getPluginChoices())) - .addOption(new Option("-d, --dest ", "destination path to create folder (default: cwd)")) - .addOption(new Option("-f, --force", "override existing files").default(false)) - .action(async function addAction(slugs: string[], options: AddOptions) { - try { - const { dest: destBasePath = cwd, force } = options; - - const templateService = await createPlopTemplateService({ - force, - destBasePath, - basePath: ctx.binPkg.dirPath, - }); - - const addAction = new AddAction({ - templateService, - }); - - await addAction.execute({ slugs }); - } catch (error) { - logger.error(error); - process.exit(1); - } - }) - .addHelpText("afterAll", "\nUnder the hood, this command uses Plop.js to generate the project."); -} diff --git a/packages/starter/src/program/commands/completion.ts b/packages/starter/src/program/commands/completion.ts deleted file mode 100644 index 1f6fadf..0000000 --- a/packages/starter/src/program/commands/completion.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Argument, createCommand } from "commander"; -import { TOOL_LABELS } from "../ui.ts"; - -const SHELLS = ["bash", "zsh", "fish"] as const; - -// Ghost command: registered with Commander purely for discoverability — it surfaces -// in `vland --help` and is baked into dist/cli.usage.kdl so the completion itself can -// suggest "completion" after `vland `. The actual handler lives in the bash bin -// dispatcher, which intercepts `vland completion ` before reaching Node. -export function createCompletionCommand() { - return createCommand("completion") - .summary(`print shell completion script 🐚 (${TOOL_LABELS.USAGE})`) - .description( - `Prints a shell completion script for vland. Add to your shell rc file: - - bash: eval "$(vland completion bash)" - zsh: eval "$(vland completion zsh)" - fish: vland completion fish | source`, - ) - .addArgument(new Argument("", `target shell`).choices(SHELLS)) - .addHelpText( - "afterAll", - `\nUnder the hood, this command uses ${TOOL_LABELS.USAGE} (https://usage.jdx.dev). -Make sure to have it installed and available in your PATH.`, - ); -} diff --git a/packages/starter/src/program/commands/init.ts b/packages/starter/src/program/commands/init.ts deleted file mode 100644 index a3d4576..0000000 --- a/packages/starter/src/program/commands/init.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { cwd } from "@vlandoss/clibuddy"; -import { Argument, createCommand, Option } from "commander"; -import { InitAction } from "#src/actions/init.ts"; -import type { ContextValue } from "#src/services/ctx.ts"; -import { logger } from "#src/services/logger.ts"; -import { createPlopTemplateService } from "#src/services/template.ts"; - -type InitOptions = { - dest: string; - git: boolean; - force: boolean; -}; - -export function createInitCommand(ctx: ContextValue) { - return createCommand("init") - .description("init a new project 🚀") - .addArgument(new Argument("[template]", "the template to use").choices(ctx.config.getTemplateChoices())) - .addOption(new Option("-d, --dest [string]", "destination path to create folder (default: cwd)")) - .addOption(new Option("--no-git", "skip to create a git repository").default(true)) - .addOption(new Option("-f, --force", "override existing files").default(false)) - .action(async function initAction(template: string | undefined, options: InitOptions) { - try { - const { dest: destBasePath = cwd, force } = options; - - const templateService = await createPlopTemplateService({ - force, - destBasePath, - basePath: ctx.binPkg.dirPath, - }); - - const initAction = new InitAction({ - templateService, - shellService: ctx.shell, - }); - - await initAction.execute({ - template, - destBasePath, - ...options, - }); - } catch (error) { - logger.error(error); - process.exit(1); - } - }) - .addHelpText("afterAll", "\nUnder the hood, this command uses Plop.js to generate the project."); -} diff --git a/packages/starter/src/program/commands/usage.ts b/packages/starter/src/program/commands/usage.ts deleted file mode 100644 index 1c6d173..0000000 --- a/packages/starter/src/program/commands/usage.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { generateToStdout } from "@usage-spec/commander"; -import { type Command, Option } from "commander"; - -export function addUsage(program: Command) { - return program.addOption(new Option("--usage", "print KDL spec for this CLI (https://kdl.dev)")).on("option:usage", () => { - generateToStdout(program); - process.exit(0); - }); -} diff --git a/packages/starter/src/program/index.ts b/packages/starter/src/program/index.ts deleted file mode 100644 index a437852..0000000 --- a/packages/starter/src/program/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Command } from "commander"; -import { createContext } from "#src/services/ctx.ts"; -import { createAddCommand } from "./commands/add.ts"; -import { createCompletionCommand } from "./commands/completion.ts"; -import { createInitCommand } from "./commands/init.ts"; -import { addUsage } from "./commands/usage.ts"; -import { getBannerText } from "./ui.ts"; - -export type Options = { - binDir: string; -}; - -export async function createProgram(options: Options) { - const ctx = await createContext(options.binDir); - const version = ctx.binPkg.version; - - return addUsage( - new Command("vland") - .version(version, "-v, --version") - .addHelpText("before", getBannerText(version)) - .addCommand(createCompletionCommand()) - .addCommand(createInitCommand(ctx)) - .addCommand(createAddCommand(ctx)), - ); -} diff --git a/packages/starter/src/program/ui.ts b/packages/starter/src/program/ui.ts deleted file mode 100644 index 151ac17..0000000 --- a/packages/starter/src/program/ui.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { colorize, palette, text } from "@vlandoss/clibuddy"; - -const vlandColor = colorize("#a78bfa"); -const usageColor = colorize("#24C55E"); - -export const TOOL_LABELS = { - USAGE: usageColor("usage"), -}; - -// npx figlet -f "ANSI Shadow" "vland" -export function getBannerText(version: string) { - const uiLogo = vlandColor( - ` -██╗ ██╗██╗ █████╗ ███╗ ██╗██████╗ -██║ ██║██║ ██╔══██╗████╗ ██║██╔══██╗ -██║ ██║██║ ███████║██╔██╗ ██║██║ ██║ -╚██╗ ██╔╝██║ ██╔══██║██║╚██╗██║██║ ██║ - ╚████╔╝ ███████╗██║ ██║██║ ╚████║██████╔╝ - ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ${text.version(version)} -`.trim(), - ); - - return ` -${uiLogo} - -🦉 ${palette.italic(palette.muted("The CLI to init a new project in"))} ${text.vland}\n`.trimStart(); -} diff --git a/packages/starter/src/run.ts b/packages/starter/src/run.ts deleted file mode 100644 index 242c88c..0000000 --- a/packages/starter/src/run.ts +++ /dev/null @@ -1,11 +0,0 @@ -import path from "node:path"; -import { dirnameOf, run } from "@vlandoss/clibuddy"; -import { createProgram } from "./program/index.ts"; -import { logger } from "./services/logger.ts"; - -const BIN_DIR = path.dirname(dirnameOf(import.meta)); - -await run(async () => { - const program = await createProgram({ binDir: BIN_DIR }); - await program.parseAsync(); -}, logger); diff --git a/packages/starter/src/services/config.ts b/packages/starter/src/services/config.ts deleted file mode 100644 index 0c76dec..0000000 --- a/packages/starter/src/services/config.ts +++ /dev/null @@ -1,28 +0,0 @@ -import fs from "node:fs"; -import { join } from "node:path"; - -export class ConfigService { - #baseDir: string; - - constructor(baseDir = "") { - this.#baseDir = baseDir; - } - - getPluginChoices() { - const folderPath = this.#getPlopFolderDir("plugins"); - return fs.readdirSync(folderPath).sort(); - } - - getTemplateChoices() { - const folderPath = this.#getPlopFolderDir("templates"); - - return fs - .readdirSync(folderPath) - .filter((folder) => !folder.startsWith("#")) - .sort(); - } - - #getPlopFolderDir(folder: string) { - return join(this.#baseDir, join("plopfiles", folder)); - } -} diff --git a/packages/starter/src/services/ctx.ts b/packages/starter/src/services/ctx.ts deleted file mode 100644 index 93176be..0000000 --- a/packages/starter/src/services/ctx.ts +++ /dev/null @@ -1,38 +0,0 @@ -import fs from "node:fs"; -import { createPkg, createShellService, type Pkg, type ShellService } from "@vlandoss/clibuddy"; -import { ConfigService } from "./config.ts"; -import { logger } from "./logger.ts"; - -export type ContextValue = { - binPkg: Pkg; - config: ConfigService; - shell: ShellService; -}; - -export async function createContext(binDir: string): Promise { - const debug = logger.subdebug("create-context-value"); - - const binPath = fs.realpathSync(binDir); - - debug("bin path %s", binPath); - - const binPkg = await createPkg(binPath); - - if (!binPkg) { - throw new Error("Could not find bin package.json"); - } - - debug("bin pkg info %O", binPkg.info()); - - const config = new ConfigService(binDir); - - const shell = createShellService({ - localBaseBinPath: [binDir], - }); - - return { - binPkg, - config, - shell, - }; -} diff --git a/packages/starter/src/services/logger.ts b/packages/starter/src/services/logger.ts deleted file mode 100644 index 443ad5e..0000000 --- a/packages/starter/src/services/logger.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createLoggy } from "@vlandoss/loggy"; - -export const logger = createLoggy({ - namespace: "vland", -}); diff --git a/packages/starter/src/services/template.ts b/packages/starter/src/services/template.ts deleted file mode 100644 index 5e410f2..0000000 --- a/packages/starter/src/services/template.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { join } from "node:path"; -import type { NodePlopAPI } from "node-plop"; -import nodePlop from "node-plop"; -import { logger } from "./logger.ts"; -import type { GenerateOptions, TemplateService } from "./types.ts"; - -type CreateOptions = { - basePath: string; - destBasePath: string; - force: boolean; -}; - -export class PlopTemplateService implements TemplateService { - #plop: NodePlopAPI; - - constructor(plop: NodePlopAPI) { - this.#plop = plop; - } - - async generate(options: GenerateOptions) { - const { generatorId, bypassArr } = options; - - const debug = logger.subdebug("plop-template-service:generate"); - - debug("generate options: %O", options); - - const generator = this.#plop.getGenerator(generatorId); - - const answers = await generator.runPrompts(bypassArr); - - debug("generator answers: %O", answers); - - const results = await generator.runActions(answers); - - debug("generator results: %O", results); - - if (results.failures.length > 0) { - throw new Error("Can't generate files"); - } - - return { answers }; - } -} - -const PLOP_CONFIG_PATH = join("plopfiles", "plopfile.ts"); - -export async function createPlopTemplateService(options: CreateOptions) { - const { force, destBasePath } = options; - - const debug = logger.subdebug("create-plop-template-service"); - - debug("options: %O", options); - - const configPath = join(options.basePath, PLOP_CONFIG_PATH); - - debug("plop config path:", configPath); - - const plop = await nodePlop(configPath, { - force, - destBasePath, - }); - - return new PlopTemplateService(plop); -} diff --git a/packages/starter/src/services/types.ts b/packages/starter/src/services/types.ts deleted file mode 100644 index 0c808c0..0000000 --- a/packages/starter/src/services/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type GenerateOptions = { - generatorId: string; - bypassArr?: string[]; -}; - -export type GenerateResult = { - answers: T; -}; - -export type TemplateService = { - generate: (options: GenerateOptions) => Promise>; -}; diff --git a/packages/starter/tsconfig.json b/packages/starter/tsconfig.json deleted file mode 100644 index 569a7e2..0000000 --- a/packages/starter/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@vlandoss/config/ts/no-dom/app"] -} diff --git a/packages/starter/tsdown.config.ts b/packages/starter/tsdown.config.ts deleted file mode 100644 index ebb2ecf..0000000 --- a/packages/starter/tsdown.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineBinConfig } from "@vlandoss/tsdown-config"; - -export default defineBinConfig(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab4ba6e..9b804e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,12 +39,6 @@ importers: specifier: ^4.0.0 version: 4.1.5(@types/node@25.6.2)(vite@7.3.2(@types/node@25.6.2)(yaml@2.8.4)) - dotfiles/biome-config: - dependencies: - '@biomejs/biome': - specifier: 2.4.4 - version: 2.4.4 - packages/clibuddy: dependencies: '@pnpm/fs.find-packages': @@ -85,25 +79,6 @@ importers: specifier: '>=20' version: 25.6.0 - packages/localproxy: - dependencies: - '@inquirer/prompts': - specifier: 8.3.0 - version: 8.3.0(@types/node@25.6.2) - '@vlandoss/clibuddy': - specifier: workspace:* - version: link:../clibuddy - '@vlandoss/loggy': - specifier: workspace:* - version: link:../loggy - commander: - specifier: 14.0.3 - version: 14.0.3 - devDependencies: - '@vlandoss/tsdown-config': - specifier: workspace:^ - version: link:../tsdown-config - packages/loggy: dependencies: consola: @@ -169,28 +144,6 @@ importers: specifier: workspace:^ version: link:../tsdown-config - packages/starter: - dependencies: - '@usage-spec/commander': - specifier: 1.1.0 - version: 1.1.0 - '@vlandoss/clibuddy': - specifier: workspace:* - version: link:../clibuddy - '@vlandoss/loggy': - specifier: workspace:* - version: link:../loggy - commander: - specifier: 14.0.3 - version: 14.0.3 - node-plop: - specifier: 0.32.3 - version: 0.32.3(@types/node@25.6.2) - devDependencies: - '@vlandoss/tsdown-config': - specifier: workspace:^ - version: link:../tsdown-config - packages/tsdown-config: dependencies: tsdown: @@ -552,55 +505,6 @@ packages: resolution: {integrity: sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA==} engines: {node: '>=12.20'} - '@inquirer/ansi@2.0.5': - resolution: {integrity: sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - - '@inquirer/checkbox@5.1.4': - resolution: {integrity: sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/confirm@6.0.12': - resolution: {integrity: sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@11.1.9': - resolution: {integrity: sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/editor@5.1.1': - resolution: {integrity: sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/expand@5.0.13': - resolution: {integrity: sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -610,95 +514,6 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@3.0.0': - resolution: {integrity: sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} - - '@inquirer/figures@2.0.5': - resolution: {integrity: sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - - '@inquirer/input@5.0.12': - resolution: {integrity: sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/number@4.0.12': - resolution: {integrity: sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/password@5.0.12': - resolution: {integrity: sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/prompts@8.3.0': - resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/rawlist@5.2.8': - resolution: {integrity: sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/search@4.1.8': - resolution: {integrity: sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/select@5.1.4': - resolution: {integrity: sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/type@4.0.5': - resolution: {integrity: sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1296,9 +1111,6 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/inquirer@9.0.9': - resolution: {integrity: sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==} - '@types/jsesc@2.5.1': resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} @@ -1314,12 +1126,6 @@ packages: '@types/node@25.6.2': resolution: {integrity: sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw==} - '@types/picomatch@4.0.3': - resolution: {integrity: sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==} - - '@types/through@0.0.33': - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - '@usage-spec/commander@1.1.0': resolution: {integrity: sha512-hVv+ccKtcPaiaywLrm7Q/Nb4nGdRD319FBhfmTWQq3yUlS1SK/pmwyn0+BFQGAYN4uOMxvYDrqPH+qXpmINrkg==} @@ -1359,18 +1165,10 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -1397,9 +1195,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -1407,9 +1202,6 @@ packages: birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bole@5.0.29: resolution: {integrity: sha512-eYR9i2ubLv5/4TFGyZsQ1cVH4jF9+qLJA72Aow+E7ZZQfqHqQNUZeX3w+pVWF76PQyjl5eDKf2xylyOOX76ozA==} @@ -1421,9 +1213,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -1432,13 +1221,6 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} @@ -1449,29 +1231,6 @@ packages: citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} @@ -1502,9 +1261,6 @@ packages: supports-color: optional: true - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} @@ -1516,9 +1272,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -1532,9 +1285,6 @@ packages: oxc-resolver: optional: true - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} @@ -1549,10 +1299,6 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - es-module-lexer@2.1.0: resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} @@ -1589,15 +1335,6 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-string-truncated-width@3.0.3: - resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} - - fast-string-width@3.0.2: - resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - - fast-wrap-ansi@0.2.0: - resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -1631,9 +1368,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} @@ -1656,19 +1390,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - handlebars@4.7.9: - resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.3: - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} - engines: {node: '>= 0.4'} - hookable@6.1.1: resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} @@ -1684,9 +1405,6 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1702,36 +1420,17 @@ packages: individual@3.0.0: resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inquirer@9.3.8: - resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} - engines: {node: '>=18'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1740,18 +1439,10 @@ packages: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.0.0'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1850,10 +1541,6 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - lru-cache@11.3.5: resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} @@ -1873,10 +1560,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -1885,9 +1568,6 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -1899,22 +1579,11 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - mute-stream@3.0.0: - resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} - engines: {node: ^20.17.0 || >=22.9.0} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -1927,10 +1596,6 @@ packages: encoding: optional: true - node-plop@0.32.3: - resolution: {integrity: sha512-tn+OxutdqhvoByKJ7p84FZBSUDfUB76bcvj0ugLBvgE9V52LFcnz8cauCDKi6otnctvFCqa9XkrU35pBY5Baig==} - engines: {node: '>=18'} - nypm@0.6.0: resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} engines: {node: ^14.16.0 || >=16.10.0} @@ -1939,14 +1604,6 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -2007,9 +1664,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} @@ -2065,10 +1719,6 @@ packages: resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} engines: {node: '>=10.13'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2076,15 +1726,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2123,19 +1764,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2155,9 +1786,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -2173,10 +1801,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -2196,13 +1820,6 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2218,14 +1835,6 @@ packages: strip-comments-strings@1.2.0: resolution: {integrity: sha512-zwF4bmnyEjZwRhaak9jUWNxc0DoeKBJ7lwSN/LEc8dQXZcUFG6auaaTQJokQWXopLdM3iTx01nQT8E4aL29DAQ==} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -2252,9 +1861,6 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - title-case@4.3.2: - resolution: {integrity: sha512-I/nkcBo73mO42Idfv08jhInV61IMb61OdIFxk+B4Gu1oBjWBPOLmhZdsli+oJCVaD+86pYQA93cJfFt224ZFAA==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2331,20 +1937,11 @@ packages: resolution: {integrity: sha512-auUAMLmi0eJhxDhQrxzvuhfEbICnVt0CTiYQYY8WyRJ5nwCDZxD0JG8bCSxT4nusI2CwJzmZAay5BfF6LmK7Hw==} hasBin: true - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} @@ -2365,9 +1962,6 @@ packages: synckit: optional: true - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vite@7.3.2: resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2449,9 +2043,6 @@ packages: jsdom: optional: true - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2468,13 +2059,6 @@ packages: engines: {node: '>=8'} hasBin: true - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2488,10 +2072,6 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - zx@8.8.5: resolution: {integrity: sha512-SNgDF5L0gfN7FwVOdEFguY3orU5AkfFZm9B5YSHog/UDHv+lvmd82ZAsOenOkQixigwH2+yyH198AwNdKhj+RA==} engines: {node: '>= 12.17.0'} @@ -2835,51 +2415,6 @@ snapshots: '@gwhitney/detect-indent@7.0.1': {} - '@inquirer/ansi@2.0.5': {} - - '@inquirer/checkbox@5.1.4(@types/node@25.6.2)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/confirm@6.0.12(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/core@11.1.9(@types/node@25.6.2)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.2) - cli-width: 4.1.0 - fast-wrap-ansi: 0.2.0 - mute-stream: 3.0.0 - signal-exit: 4.1.0 - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/editor@5.1.1(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/external-editor': 3.0.0(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/expand@5.0.13(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - '@inquirer/external-editor@1.0.3(@types/node@25.6.2)': dependencies: chardet: 2.1.1 @@ -2887,82 +2422,6 @@ snapshots: optionalDependencies: '@types/node': 25.6.2 - '@inquirer/external-editor@3.0.0(@types/node@25.6.2)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/figures@1.0.15': {} - - '@inquirer/figures@2.0.5': {} - - '@inquirer/input@5.0.12(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/number@4.0.12(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/password@5.0.12(@types/node@25.6.2)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/prompts@8.3.0(@types/node@25.6.2)': - dependencies: - '@inquirer/checkbox': 5.1.4(@types/node@25.6.2) - '@inquirer/confirm': 6.0.12(@types/node@25.6.2) - '@inquirer/editor': 5.1.1(@types/node@25.6.2) - '@inquirer/expand': 5.0.13(@types/node@25.6.2) - '@inquirer/input': 5.0.12(@types/node@25.6.2) - '@inquirer/number': 4.0.12(@types/node@25.6.2) - '@inquirer/password': 5.0.12(@types/node@25.6.2) - '@inquirer/rawlist': 5.2.8(@types/node@25.6.2) - '@inquirer/search': 4.1.8(@types/node@25.6.2) - '@inquirer/select': 5.1.4(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/rawlist@5.2.8(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/search@4.1.8(@types/node@25.6.2)': - dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/select@5.1.4(@types/node@25.6.2)': - dependencies: - '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.6.2) - '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.2) - optionalDependencies: - '@types/node': 25.6.2 - - '@inquirer/type@4.0.5(@types/node@25.6.2)': - optionalDependencies: - '@types/node': 25.6.2 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3374,11 +2833,6 @@ snapshots: '@types/estree@1.0.8': {} - '@types/inquirer@9.0.9': - dependencies: - '@types/through': 0.0.33 - rxjs: 7.8.2 - '@types/jsesc@2.5.1': {} '@types/ms@2.1.0': {} @@ -3393,12 +2847,6 @@ snapshots: dependencies: undici-types: 7.19.2 - '@types/picomatch@4.0.3': {} - - '@types/through@0.0.33': - dependencies: - '@types/node': 25.6.2 - '@usage-spec/commander@1.1.0': dependencies: '@usage-spec/core': 1.1.0 @@ -3451,16 +2899,8 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-regex@5.0.1: {} - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - ansis@4.2.0: {} argparse@1.0.10: @@ -3481,20 +2921,12 @@ snapshots: balanced-match@4.0.4: {} - base64-js@1.5.1: {} - better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 birpc@4.0.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - bole@5.0.29: dependencies: fast-safe-stringify: 2.1.1 @@ -3508,22 +2940,10 @@ snapshots: dependencies: fill-range: 7.1.1 - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - cac@7.0.0: {} chai@6.2.2: {} - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - change-case@5.4.4: {} - chardet@2.1.1: {} ci-info@3.9.0: {} @@ -3532,22 +2952,6 @@ snapshots: dependencies: consola: 3.4.2 - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-width@4.1.0: {} - - clone@1.0.4: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - commander@14.0.3: {} confbox@0.2.4: {} @@ -3568,10 +2972,6 @@ snapshots: dependencies: ms: 2.1.3 - defaults@1.0.4: - dependencies: - clone: 1.0.4 - defu@6.1.7: {} detect-indent@6.1.0: {} @@ -3580,14 +2980,10 @@ snapshots: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - dotenv@8.6.0: {} dts-resolver@2.1.3: {} - emoji-regex@8.0.0: {} - empathic@2.0.0: {} encoding@0.1.13: @@ -3604,8 +3000,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-errors@1.3.0: {} - es-module-lexer@2.1.0: {} esbuild@0.27.7: @@ -3661,16 +3055,6 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-string-truncated-width@3.0.3: {} - - fast-string-width@3.0.2: - dependencies: - fast-string-truncated-width: 3.0.3 - - fast-wrap-ansi@0.2.0: - dependencies: - fast-string-width: 3.0.2 - fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -3703,8 +3087,6 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -3739,21 +3121,6 @@ snapshots: graceful-fs@4.2.11: {} - handlebars@4.7.9: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-flag@4.0.0: {} - - hasown@2.0.3: - dependencies: - function-bind: 1.1.2 - hookable@6.1.1: {} human-id@4.1.3: {} @@ -3767,8 +3134,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - ignore@5.3.2: {} import-without-cache@0.3.3: {} @@ -3777,53 +3142,22 @@ snapshots: individual@3.0.0: {} - inherits@2.0.4: {} - - inquirer@9.3.8(@types/node@25.6.2): - dependencies: - '@inquirer/external-editor': 1.0.3(@types/node@25.6.2) - '@inquirer/figures': 1.0.15 - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 1.0.0 - ora: 5.4.1 - run-async: 3.0.0 - rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - transitivePeerDependencies: - - '@types/node' - is-arrayish@0.2.1: {} - is-core-module@2.16.1: - dependencies: - hasown: 2.0.3 - is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-interactive@1.0.0: {} - is-number@7.0.0: {} is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - is-unicode-supported@0.1.0: {} - is-windows@1.0.2: {} - isbinaryfile@5.0.7: {} - isexe@2.0.0: {} js-tokens@4.0.0: {} @@ -3900,11 +3234,6 @@ snapshots: lodash.startcase@4.4.0: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - lru-cache@11.3.5: {} magic-string@0.30.21: @@ -3922,30 +3251,20 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - mimic-fn@2.1.0: {} - mimic-function@5.0.1: {} minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 - minimist@1.2.8: {} - minipass@7.1.3: {} mri@1.2.0: {} ms@2.1.3: {} - mute-stream@1.0.0: {} - - mute-stream@3.0.0: {} - nanoid@3.3.12: {} - neo-async@2.6.2: {} - node-fetch-native@1.6.7: {} node-fetch@2.7.0(encoding@0.1.13): @@ -3954,21 +3273,6 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-plop@0.32.3(@types/node@25.6.2): - dependencies: - '@types/inquirer': 9.0.9 - '@types/picomatch': 4.0.3 - change-case: 5.4.4 - dlv: 1.1.3 - handlebars: 4.7.9 - inquirer: 9.3.8(@types/node@25.6.2) - isbinaryfile: 5.0.7 - resolve: 1.22.12 - tinyglobby: 0.2.16 - title-case: 4.3.2 - transitivePeerDependencies: - - '@types/node' - nypm@0.6.0: dependencies: citty: 0.1.6 @@ -3979,22 +3283,6 @@ snapshots: obug@2.1.1: {} - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - outdent@0.5.0: {} oxfmt@0.35.0: @@ -4086,8 +3374,6 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: {} - path-scurry@2.0.2: dependencies: lru-cache: 11.3.5 @@ -4137,28 +3423,10 @@ snapshots: js-yaml: 4.1.1 strip-bom: 4.0.0 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - reusify@1.1.0: {} rimraf@6.1.3: @@ -4236,18 +3504,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.2 fsevents: 2.3.3 - run-async@3.0.0: {} - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-buffer@5.2.1: {} - safer-buffer@2.1.2: {} semver@7.7.4: {} @@ -4260,8 +3520,6 @@ snapshots: siginfo@2.0.0: {} - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} sisteransi@1.0.5: {} @@ -4270,8 +3528,6 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.6.1: {} - spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -4287,16 +3543,6 @@ snapshots: std-env@4.1.0: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4307,12 +3553,6 @@ snapshots: strip-comments-strings@1.2.0: {} - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - term-size@2.2.1: {} tinybench@2.9.0: {} @@ -4330,8 +3570,6 @@ snapshots: tinyrainbow@3.1.0: {} - title-case@4.3.2: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -4367,7 +3605,8 @@ snapshots: - synckit - vue-tsc - tslib@2.8.1: {} + tslib@2.8.1: + optional: true turbo-darwin-64@2.8.12: optional: true @@ -4396,13 +3635,8 @@ snapshots: turbo-windows-64: 2.8.12 turbo-windows-arm64: 2.8.12 - type-fest@0.21.3: {} - typescript@6.0.3: {} - uglify-js@3.19.3: - optional: true - unconfig-core@7.5.0: dependencies: '@quansync/fs': 1.0.0 @@ -4416,8 +3650,6 @@ snapshots: dependencies: rolldown: 1.0.0-rc.17 - util-deprecate@1.0.2: {} - vite@7.3.2(@types/node@25.6.2)(yaml@2.8.4): dependencies: esbuild: 0.27.7 @@ -4458,10 +3690,6 @@ snapshots: transitivePeerDependencies: - msw - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -4478,14 +3706,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - wordwrap@1.0.0: {} - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 @@ -4498,6 +3718,4 @@ snapshots: yaml@2.8.4: {} - yoctocolors-cjs@2.1.3: {} - zx@8.8.5: {}