From e068d74e84eb3cd50903c4125813076dbec574f7 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 6 Aug 2026 07:25:22 +0000 Subject: [PATCH] =?UTF-8?q?chore(vscode):=20=E9=80=80=E5=BD=B9=20packages/?= =?UTF-8?q?vscode-objectstack,=E7=A7=BB=E5=87=BA=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=8C=BA=20(#5825)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 维护者 2026-08-06 拍板退役:该扩展没有 vsce/vsix 发布链路(`.github/workflows/` 零命中),因此 VS Code Marketplace / Open VSX 上不存在可安装副本;#5028 的幽灵 `jsonValidation` 指向从未存在的 `./schemas/objectstack.schema.json`(本次删除前 复核:包内无 `schemas/` 目录,`files` 白名单也不含它),整个生命周期静默失效且零 用户报告;产品主航道是 AI agent + `os` CLI。git 历史保底,未来若有真实需求按当时 schema 重建。 删除面:`packages/vscode-objectstack/**`(12 个文件)。`pnpm-workspace.yaml` 用 `packages/*` glob,无需改成员列表;lockfile 随 `pnpm install` 收缩 1102 行、 125 个包(`@vscode/vsce` 整棵子树)。 ## 两个 issue 正文未预见的硬约束 **一、changesets 会重读已消费的 changeset,只删目录会打断整条发布链。** RC 模式下 `changeset version` 保留每个已消费的 .md,而 `assemble-release-plan` 对目录里 **全部** changeset 做包名解析,命中不在工作区的包即抛错。只删包之后 `changeset status` 直接红: Error: Found changeset changelog-ships-in-tarball for package objectstack-vscode which is not in the workspace 两个 changeset 的 frontmatter 点名该包,逐个按性质处置: - `.changeset/vscode-snippets-parse-gate.md`(**待发布**,frontmatter 只有该包一项) —— #4917 的 changeset,始终未随任何版本发布。宿主已退役,它永远无法 release, 整文件删除。 - `.changeset/changelog-ships-in-tarball.md`(**已消费**,frontmatter 含 60+ 包) —— 仅移除 `"objectstack-vscode": patch` 一行。其余 60+ 包的 patch 条目与正文不动, 它们的 CHANGELOG 早已落地,不受影响。 处置后 `changeset status` 退出码 0,发布计划中零 vscode 命中。 **二、该包在 npm 上是真实发布面。** issue 正文的「从未发布 / 无 npm 面」只对 VS Code Marketplace 成立:`changeset publish` 发布每个非 private 包,该包因此在 npm 上有 40+ 个版本,`latest` = 16.1.0(2026-07-22),`rc` = 17.0.0-rc.3 (2026-08-03,即三天前)。本 PR 不改变已发布版本(npm 不会 unpublish),但退役后 它将静默停更。是否补 `npm deprecate objectstack-vscode` 需要 npm 发布凭据,属维护者 动作,已在 #5825 提出待裁决,不阻塞本 PR 合并。 ## 提及清扫 `README.md` 包表、`AGENTS.md` 目录树、`content/docs/plugins/packages.mdx` (删小节 + 计数 73→72、Client/DX 5→4)、`.claude/skills/pm-dispatch/SKILL.md` 的 `domain:devx` 归属、`scripts/publish-smoke-pack.mjs` 的 EXCLUDE 条目及其注释、 `.changeset/config.json` 的 fixed 锁步组(`check-changeset-fixed.mjs` 对组内不存在 的包名会红,必须同步)。 保留(历史记录类,改动即污染记录):`RELEASE_NOTES.md`(文件自述 「This file is historical.」,v4.0.4 那张表是当时 42 包清单的快照)、 `docs/DX_ROADMAP.md`(2026-02-13 审计快照,自述基线为「14 packages」,早已与今天 无关)、`.changeset/pm-dispatch-domain-table-full-coverage.md`(已发布的 changeset 历史)、`.changeset/pre.json` 的 `initialVersions`(changesets 自管状态文件; `assemble-release-plan` 只对工作区内的包写入/读取该表,残留键永不被查,手改状态 文件是 RC 窗口出事的典型原因)。 ## 安全 overrides:保留选择器,只更正注释 `form-data` 与 `undici` 两条 OSV pin 的唯一传递来源是 `@vscode/vsce`。删除后 `form-data` 从依赖树彻底消失,`undici` 仅剩 `@ai-sdk/provider-utils` 的 7.29.0 与 jsdom 的 8.9.0 —— 两者都在 `>=7.23.0 <7.29.0` 选择器之外。即两条 pin 现在都不再 匹配任何东西。 选择器保留不动:在退役 PR 里顺手摘掉安全 pin 是降低安全姿态,应当是独立决定; 留着则未来若有传递依赖重新引入,仍会落在已修补版本上。但注释不能继续指向一个已 不存在的包,故就地记录「CONSUMER GONE (#5825)」与保留理由。`brace-expansion` 注释的 minimatch 消费者清单同理去掉 `@vscode/vsce`(`ts-morph`/eslint/ `@typescript-eslint`/glob/archiver 仍在,该 pin 依旧生效)。 ## 门禁计数对账(删除前后各跑一轮全套) | 门禁 | before | after | 差值 | | :--- | :--- | :--- | :--- | | check:published-files | 70 publishable / 78 members | 69 / 77 | -1 / -1 | | check:type-check-coverage | 63/78 covered | 62/77 | -1 / -1 | | check-changeset-fixed | 70 public packages | 69 | -1 | | check:nul-bytes | 5687 tracked text files | 5674 | -13 | | check:engine-double-contract | 37 pinned / 165 DEBT / 2 exempt | 同 | 0(该包无台账条目) | | check-override-consistency | 2 covered declarations | 2 | 0 | nul-bytes 的 -13 与本 PR 删除的文件数精确相等(12 个包内文件 + 1 个待发布 changeset)。计数全部由 glob 实时计算,无写死断言需要改。 changeset 路线:走 `skip-changeset` 标签。存活包零行为改动,而已删除的包无法在 changeset 里点名(changesets 对未知包名直接抛错),故本 PR 不 release 任何东西。 `pr-automation.yml` 的门禁文案在 #5292 明确修正过处置顺序 —— 标签是首选, 空 frontmatter changeset 是 last resort,因为它是 changesets/action 的真实输入, 全空集会让 Release 静默绿着空跑(#4898,曾卡住 17.0.0-rc.2)。 Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE Co-authored-by: Claude --- .changeset/changelog-ships-in-tarball.md | 1 - .changeset/config.json | 1 - .changeset/vscode-snippets-parse-gate.md | 42 - .claude/skills/pm-dispatch/SKILL.md | 2 +- AGENTS.md | 1 - README.md | 1 - content/docs/plugins/packages.mdx | 12 +- packages/vscode-objectstack/CHANGELOG.md | 265 ---- packages/vscode-objectstack/LICENSE | 202 --- packages/vscode-objectstack/README.md | 98 -- .../language-configuration.json | 19 - packages/vscode-objectstack/package.json | 89 -- .../snippets/objectstack.json | 165 --- packages/vscode-objectstack/src/extension.ts | 226 ---- .../test/snippet-harness.ts | 281 ----- .../vscode-objectstack/test/snippets.test.ts | 231 ---- packages/vscode-objectstack/tsconfig.json | 18 - .../vscode-objectstack/tsconfig.test.json | 25 - packages/vscode-objectstack/vitest.config.ts | 8 - pnpm-lock.yaml | 1104 +---------------- pnpm-workspace.yaml | 14 +- scripts/publish-smoke-pack.mjs | 3 +- 22 files changed, 19 insertions(+), 2789 deletions(-) delete mode 100644 .changeset/vscode-snippets-parse-gate.md delete mode 100644 packages/vscode-objectstack/CHANGELOG.md delete mode 100644 packages/vscode-objectstack/LICENSE delete mode 100644 packages/vscode-objectstack/README.md delete mode 100644 packages/vscode-objectstack/language-configuration.json delete mode 100644 packages/vscode-objectstack/package.json delete mode 100644 packages/vscode-objectstack/snippets/objectstack.json delete mode 100644 packages/vscode-objectstack/src/extension.ts delete mode 100644 packages/vscode-objectstack/test/snippet-harness.ts delete mode 100644 packages/vscode-objectstack/test/snippets.test.ts delete mode 100644 packages/vscode-objectstack/tsconfig.json delete mode 100644 packages/vscode-objectstack/tsconfig.test.json delete mode 100644 packages/vscode-objectstack/vitest.config.ts diff --git a/.changeset/changelog-ships-in-tarball.md b/.changeset/changelog-ships-in-tarball.md index ab24ca87a5..30acc769d6 100644 --- a/.changeset/changelog-ships-in-tarball.md +++ b/.changeset/changelog-ships-in-tarball.md @@ -66,7 +66,6 @@ "@objectstack/types": patch "@objectstack/verify": patch "create-objectstack": patch -"objectstack-vscode": patch --- chore(packaging): CHANGELOG.md ships in every npm tarball (#4261) diff --git a/.changeset/config.json b/.changeset/config.json index 98c7ac68ff..daacd23d20 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -75,7 +75,6 @@ "@objectstack/embedder-openai", "@objectstack/account", "create-objectstack", - "objectstack-vscode", "@objectstack/connector-openapi", "@objectstack/verify" ] diff --git a/.changeset/vscode-snippets-parse-gate.md b/.changeset/vscode-snippets-parse-gate.md deleted file mode 100644 index e65f7deeea..0000000000 --- a/.changeset/vscode-snippets-parse-gate.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -"objectstack-vscode": patch ---- - -fix(vscode): every contributed snippet expands to metadata the spec accepts — and a gate that keeps it that way (#4917) - -The extension's snippets are a metadata **producer**: whatever `os-view-grid` -expands to is the first `.view.ts` an author (human or AI) ever writes. Nothing -in this repo has ever parsed that output, so the snippets drifted out of the -spec in silence. An audit of all eight found **five** broken against -`@objectstack/spec` 17: - -| snippet | what was rejected | canonical form now | -|---|---|---| -| `os-view-grid` | `list.defaultSort`, `list.pageSize` (never declared on `ListViewSchema`); plus `type` / `objectName` on the **container**, which is the flat-view-where-a-container-goes mistake `ViewSchema`'s own guidance names | `defineView({ object, list: { …, sort: [{ field, order }], pagination: { pageSize } } })` | -| `os-flow` | node `name` / `next` (the keys are `label` + an `edges` array), and a top-level `trigger` block | `defineFlow` with the object binding on the START node's `config: { objectName, triggerType }` and an explicit `edges: []` | -| `os-agent` | `tools` — removed in protocol 17 (#3894) | `skills: []` | -| `os-stack` | `manifest` missing the required `id` and `type` | `{ id, namespace, version, type, name, engines }` | -| `os-field-lookup` | `reference: { object, labelField }` — `reference` is a plain object name | `reference: 'target_object'` + `displayField` | - -Separately, **all five** module snippets imported `{ Data }` / `{ UI }` / -`{ Automation }` / `{ AI }` from the package root. Those namespace re-exports -were removed for being untree-shakeable (see `packages/spec/src/index.ts`), so -the very first line of each scaffold did not resolve. They now import from the -subpath and author through the domain's validating factory — `ObjectSchema.create`, -`defineView`, `defineFlow`, `defineAgent`, `defineStack` — which parses at -authoring time and, being a *value* import, fails loudly instead of degrading -to `any` (issue #2035's rationale, applied to the scaffolds themselves). - -**The recurrence is what actually got fixed.** `os-view-grid` broke because -#4001 closed `ListViewSchema` for unknown keys and no gate anywhere could see a -snippet body; the next strictness batch would have broken another one the same -way. The package now has a `test` script that expands every snippet, evaluates -it against the real spec, and `safeParse`s the authored literal with the schema -the runtime uses. Three independent failure modes are covered — the expansion -does not evaluate, the literal does not parse, or an import names a binding the -spec no longer exports — with a negative control asserting the pre-fix shape is -still rejected, a plan table that fails when a snippet arrives ungated, and a -lockstep check on the `engines.protocol` major so that stamp cannot rot either. - -No authoring change is required of anyone: this only replaces snippet output -that never validated. diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 875d3abe4f..ad349097b3 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -424,7 +424,7 @@ file the fix touches, you have not triaged it yet, and it is not labelable. | `domain:drivers` | `packages/drivers/driver-*`(`driver-memory` / `driver-mongodb` / `driver-sql` / `driver-sqlite-wasm`) | | `domain:services` | `packages/services/*`、`packages/connectors/*`、`packages/triggers/*`(flow 触发器)、`packages/plugins/plugin-approvals`、`plugin-webhooks`、`plugin-email`、`plugin-reports`、`embedder-openai`、`knowledge-memory`、`knowledge-ragflow` | | `domain:identity` | `packages/plugins/plugin-auth`、`plugin-security`、`plugin-sharing`、`plugin-audit` | -| `domain:devx` | `packages/lint`、`packages/sdui-parser`(仅 lint 消费)、`packages/vscode-objectstack`、`skills/**`、`content/docs/**`、`apps/docs`、`scripts/`(门禁类) | +| `domain:devx` | `packages/lint`、`packages/sdui-parser`(仅 lint 消费)、`skills/**`、`content/docs/**`、`apps/docs`、`scripts/`(门禁类) | | `domain:spec` | `packages/spec` 及其生成物(现 spec 车道不变) | | `domain:cli` | `packages/cli`、`runtime`、`verify`、`qa`、`types`、`packages/rest`、`packages/mcp`、`packages/observability`、`packages/client`、`packages/client-react`(REST 线协议 SDK)、`packages/cloud-connection`、`packages/create-objectstack`、`packages/adapters/*`、`packages/plugins/plugin-hono-server`、`plugin-dev` | | (无固定归属,按落点分诊) | `packages/apps/*`(`setup` / `studio` / `account`)、`packages/console`、`examples/*` —— 见下,**这一行是显式点名,不是遗漏** | diff --git a/AGENTS.md b/AGENTS.md index d7356b0750..1c52f10439 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -302,7 +302,6 @@ packages/ client-react/ # ⚛️ React hooks cli/ # 🖥️ CLI create-objectstack/ # 🚀 Scaffolding - vscode-objectstack/ # 🧩 VS Code extension adapters/ # 🔌 express/fastify/hono/nestjs/nextjs/nuxt/sveltekit plugins/ # 🧱 Official plugins & drivers services/ # 🔧 Kernel-managed services diff --git a/README.md b/README.md index aabc06ae39..17df6135bc 100644 --- a/README.md +++ b/README.md @@ -342,7 +342,6 @@ For the browser, the typed client SDK and React hooks (`useQuery` / `useMutation | :--- | :--- | | [`@objectstack/cli`](packages/cli) | CLI binary (`os` / `objectstack`) — `init`, `dev`, `start`, `serve`, `compile`, `publish`, `validate`, `generate`, `lint`, `doctor` | | [`create-objectstack`](packages/create-objectstack) | Project scaffolder (`npx create-objectstack`) | -| [`objectstack-vscode`](packages/vscode-objectstack) | VS Code extension — autocomplete, validation, diagnostics | | [`@object-ui/console`](https://github.com/objectstack-ai/objectui/tree/main/apps/console) | Fork-ready runtime console SPA (lives in objectstack-ai/objectui, served via `@object-ui/console` on npm) | | [`@objectstack/account`](apps/account) | Account & identity portal — sign in, organizations, connected apps | | [`@objectstack/docs`](apps/docs) | Documentation site (Fumadocs + Next.js) | diff --git a/content/docs/plugins/packages.mdx b/content/docs/plugins/packages.mdx index 95ca6728b6..36b09dfb24 100644 --- a/content/docs/plugins/packages.mdx +++ b/content/docs/plugins/packages.mdx @@ -5,14 +5,14 @@ description: Complete guide to all ObjectStack packages, services, drivers, plug # Package Overview -ObjectStack is organized into **73 package manifests** across multiple categories. This guide provides an overview of the framework packages, services, drivers, plugins, and adapters in the [framework repository](https://github.com/objectstack-ai/objectstack/tree/main/packages). +ObjectStack is organized into **72 package manifests** across multiple categories. This guide provides an overview of the framework packages, services, drivers, plugins, and adapters in the [framework repository](https://github.com/objectstack-ai/objectstack/tree/main/packages). ### Package categories at a glance | Category | Count | Packages | |:---|:---:|:---| | **Core runtime** | 9 | `spec`, `core`, `runtime`, `types`, `metadata`, `objectql`, `rest`, `formula`, `platform-objects` | -| **Client / DX** | 5 | `client`, `client-react`, `cli`, `create-objectstack`, `vscode-objectstack` | +| **Client / DX** | 4 | `client`, `client-react`, `cli`, `create-objectstack` | | **Framework adapters** | 1 | `hono` (other frameworks: build a thin adapter on `HttpDispatcher` — see below) | | **Drivers** | 5 | `driver-memory`, `driver-sql`, `driver-sqlite-wasm`, `driver-mongodb`, `driver-turso` | | **Plugins** | 18 | `plugin-auth`, `plugin-security`, `plugin-audit`, `plugin-approvals`, `plugin-sharing`, `plugin-email`, `plugin-webhooks`, `plugin-reports`, `plugin-hono-server`, `plugin-dev`, `plugin-pinyin-search`, `mcp`, trigger plugins (`trigger-api`, `trigger-record-change`, `trigger-schedule`), and knowledge/embedder plugins (`knowledge-memory`, `knowledge-ragflow`, `embedder-openai`) | @@ -442,14 +442,6 @@ npx os serve --dev npx create-objectstack my-app ``` -### objectstack-vscode - -**VS Code Extension** — IDE support for ObjectStack. - -- **Features**: Syntax highlighting, autocomplete, validation for metadata files -- **When to use**: Enhanced development experience in VS Code -- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/vscode-objectstack/README.md) - --- ## Utility Packages diff --git a/packages/vscode-objectstack/CHANGELOG.md b/packages/vscode-objectstack/CHANGELOG.md deleted file mode 100644 index 6b4ccf50be..0000000000 --- a/packages/vscode-objectstack/CHANGELOG.md +++ /dev/null @@ -1,265 +0,0 @@ -# objectstack-vscode - -## 17.0.0-rc.2 - -## 17.0.0-rc.1 - -### Patch Changes - -- 2e836de: chore(packaging): CHANGELOG.md ships in every npm tarball (#4261) - - The AGENTS.md post-task checklist requires breaking changesets to carry their - FROM → TO migration because "this text ships to consumers as `CHANGELOG.md` - inside the npm package and is what an upgrading agent greps after the tombstone - error." That delivery path was severed for 68 of the 69 publishable packages: - npm packs `package.json` / `README*` / `LICENSE*` unconditionally but — unlike - older npm versions — not `CHANGELOG.md`, and the canonical - `"files": ["dist", "README.md"]` whitelist never named it. Measured on npm - 10.9.7: `npm pack --dry-run` on `@objectstack/types` shipped 3 files while its - 70KB `CHANGELOG.md` stayed behind. Only `@objectstack/spec` listed it - explicitly. - - The tombstone-error scenario is precisely the one where the repo is out of - reach — the upgrading agent has `node_modules` and nothing else — so the - migration text has to ride in the tarball. Every publishable package now - declares `CHANGELOG.md` in `files`, and the canonical whitelist is - `["dist", "README.md", "CHANGELOG.md"]`. - - The other half is the gate: `check:published-files` gains a fifth invariant, - COMPLETE — a whitelist that fails to cover `CHANGELOG.md` fails the - always-required lint job, so the next package cannot silently sever the path - again. `@objectstack/spec`'s per-package EXTRA_ENTRIES exemption dissolves - into the canonical set. - - Consumer-visible change: one more file per install (the package's changelog, - e.g. 70.8KB for `@objectstack/types`), and `grep -r "removed key" -node_modules/@objectstack/*/CHANGELOG.md` now finds the migration it was - promised. - -## 17.0.0-rc.0 - -## 16.1.0 - -## 16.0.0 - -## 16.0.0-rc.1 - -## 16.0.0-rc.0 - -## 15.1.1 - -## 15.1.0 - -## 15.0.0 - -## 14.8.0 - -## 14.7.0 - -## 14.6.0 - -## 14.5.0 - -## 14.4.0 - -## 14.3.0 - -## 14.2.0 - -## 14.1.0 - -## 14.0.0 - -## 13.0.0 - -## 12.6.0 - -## 12.5.0 - -## 12.4.0 - -## 12.3.0 - -## 12.2.0 - -## 12.1.0 - -## 12.0.0 - -## 11.10.0 - -## 11.9.0 - -## 11.8.0 - -## 11.7.0 - -## 11.6.0 - -## 11.5.0 - -## 11.4.0 - -## 11.3.0 - -## 11.2.0 - -## 11.1.0 - -## 11.0.0 - -## 10.3.0 - -## 10.2.0 - -## 10.1.0 - -## 10.0.0 - -## 9.11.0 - -## 9.10.0 - -## 9.9.1 - -## 9.9.0 - -## 9.8.0 - -## 9.7.0 - -## 9.6.0 - -## 9.5.1 - -## 9.5.0 - -## 9.4.0 - -## 9.3.0 - -## 9.2.0 - -## 9.1.0 - -## 9.0.1 - -## 9.0.0 - -## 8.0.1 - -## 8.0.0 - -## 7.9.0 - -## 7.8.0 - -## 7.7.0 - -## 7.6.0 - -## 7.5.0 - -## 7.4.1 - -## 7.4.0 - -## 7.3.0 - -## 7.2.1 - -## 7.2.0 - -## 7.1.0 - -## 7.0.0 - -## 6.9.0 - -## 6.8.1 - -## 6.8.0 - -## 6.7.1 - -## 6.7.0 - -## 6.6.0 - -## 6.5.1 - -## 6.5.0 - -## 6.4.0 - -## 6.3.0 - -## 6.2.0 - -## 6.1.1 - -## 6.1.0 - -## 6.0.0 - -## 5.2.0 - -## 5.1.0 - -## 5.0.0 - -## 4.2.0 - -## 4.1.1 - -## 4.1.0 - -## 4.0.5 - -### Patch Changes - -- 15e0df6: chore: unify all package versions to a single patch release - -## 4.0.4 - -## 4.0.3 - -## 4.0.2 - -## 4.0.0 - -## 3.3.1 - -## 3.3.0 - -## 3.2.9 - -## 3.2.8 - -## 3.2.7 - -## 3.2.6 - -## 3.2.5 - -## 3.2.4 - -## 3.2.3 - -## 3.2.2 - -## 3.2.1 - -## 3.2.0 - -## 3.1.1 - -## 3.1.0 - -## 3.0.11 - -## 3.0.10 - -## 3.0.9 - -## 3.0.8 diff --git a/packages/vscode-objectstack/LICENSE b/packages/vscode-objectstack/LICENSE deleted file mode 100644 index 16bc23f404..0000000000 --- a/packages/vscode-objectstack/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute - must include a readable copy of the attribution notices - contained within such NOTICE file, excluding those notices - that do not pertain to any part of the Derivative Works, - in at least one of the following places: within a NOTICE - text file distributed as part of the Derivative Works; within - the Source form or documentation, if provided along with - the Derivative Works; or, within a display generated by the - Derivative Works, if and wherever such third-party notices - normally appear. The contents of the NOTICE file are for - informational purposes only and do not modify the License. - You may add Your own attribution notices within Derivative - Works that You distribute, alongside or as an addendum to - the NOTICE text from the Work, provided that such additional - attribution notices cannot be construed as modifying the - License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2026 ObjectStack - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/vscode-objectstack/README.md b/packages/vscode-objectstack/README.md deleted file mode 100644 index 825fd0da3e..0000000000 --- a/packages/vscode-objectstack/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# ObjectStack for Visual Studio Code - -> Autocomplete, validation, and inline diagnostics for ObjectStack Protocol files. - -## Features - -- **Snippets** — Quickly scaffold objects, fields, views, flows, agents, and full `defineStack` configs with `os-` prefixed snippets. -- **Hover Documentation** — Hover over `defineStack`, `defineView`, field types (`text`, `lookup`, `select`, etc.) to see inline descriptions. -- **Diagnostics** — Real-time warnings for common mistakes: - - Missing `manifest` in `defineStack()` - - camelCase names that should be `snake_case` -- **Config File Watching** — Automatically re-validates when `objectstack.config.ts` changes. -- **JSON Schema Validation** — Validates `objectstack.json` files against the bundled schema. -- **Quick Fix Stubs** — Code action provider for quick fixes (add missing label, convert to snake_case). - -## Snippets - -Every snippet scaffolds through the spec's own authoring factory -(`ObjectSchema.create`, `defineView`, `defineFlow`, `defineAgent`, -`defineStack`), so what you tab out of the IDE validates against -`@objectstack/spec` the moment it runs — never a bare `: Type` literal that -type-checks over a shape nothing ever parses. - -| Prefix | Scaffolds | Validated by | -|--------|-----------|--------------| -| `os-object` | A new business object | `ObjectSchema.create` | -| `os-field-text` | A text field (paste inside `fields: { … }`) | `FieldSchema` | -| `os-field-select` | A select (picklist) field | `FieldSchema` | -| `os-field-lookup` | A lookup (reference) field | `FieldSchema` | -| `os-view-grid` | A grid list view container | `defineView` | -| `os-flow` | A record-change automation flow | `defineFlow` | -| `os-stack` | Full `defineStack` boilerplate | `defineStack` | -| `os-agent` | An AI agent | `defineAgent` | - -That claim is enforced, not advertised: `pnpm test` in this package expands -every snippet, evaluates it against the real `@objectstack/spec`, and -`safeParse`s the authored literal with the same schema the runtime uses — plus -a check that each import binding still exists on the spec's export surface. A -snippet that goes stale (as `os-view-grid` did when `ListViewSchema` closed -`defaultSort` / `pageSize`) fails CI instead of shipping. See -`test/snippets.test.ts`. - -## Installation - -### From Source - -```bash -cd packages/vscode-objectstack -npm install -npm run build -npm run package -# Install the generated .vsix file in VSCode -``` - -### From Marketplace (Coming Soon) - -Search for "ObjectStack" in the VSCode Extensions marketplace. - -## Usage - -1. Open a project containing `objectstack.config.ts` -2. The extension activates automatically for `.object.ts`, `.view.ts`, and `objectstack.config.ts` files -3. Start typing `os-` to see available snippets -4. Hover over ObjectStack keywords for inline documentation - -## Supported File Types - -| Pattern | Description | -|---------|-------------| -| `*.object.ts` | Business object definitions | -| `*.view.ts` | View configurations (list, form, kanban) | -| `objectstack.config.ts` | Stack configuration file | -| `objectstack.json` | JSON configuration (with schema validation) | - -## Development - -```bash -# Build the extension -npm run build - -# Watch for changes -npm run watch - -# Verify every contributed snippet still parses against @objectstack/spec -npm test - -# Package as .vsix -npm run package -``` - -## Requirements - -- VSCode 1.85.0 or later -- TypeScript project using `@objectstack/spec` - -## License - -Apache-2.0. See [LICENSING.md](../../LICENSING.md). diff --git a/packages/vscode-objectstack/language-configuration.json b/packages/vscode-objectstack/language-configuration.json deleted file mode 100644 index 437351544a..0000000000 --- a/packages/vscode-objectstack/language-configuration.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": ["/*", "*/"] - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - "autoClosingPairs": [ - { "open": "{", "close": "}" }, - { "open": "[", "close": "]" }, - { "open": "(", "close": ")" }, - { "open": "'", "close": "'", "notIn": ["string", "comment"] }, - { "open": "\"", "close": "\"", "notIn": ["string"] }, - { "open": "`", "close": "`", "notIn": ["string", "comment"] } - ] -} diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json deleted file mode 100644 index 7360ada987..0000000000 --- a/packages/vscode-objectstack/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "objectstack-vscode", - "displayName": "ObjectStack", - "description": "ObjectStack Protocol — Autocomplete, validation, and inline diagnostics for .object.ts, .view.ts, and objectstack.config.ts files", - "version": "17.0.0-rc.2", - "publisher": "objectstack", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/objectstack-ai/objectstack.git", - "directory": "packages/vscode-objectstack" - }, - "engines": { - "vscode": "^1.85.0", - "node": ">=22.0.0" - }, - "categories": [ - "Programming Languages", - "Linters", - "Snippets" - ], - "activationEvents": [ - "workspaceContains:**/*.object.ts", - "workspaceContains:**/*.view.ts", - "workspaceContains:objectstack.config.ts" - ], - "main": "./dist/extension.js", - "contributes": { - "jsonValidation": [ - { - "fileMatch": "objectstack.json", - "url": "./schemas/objectstack.schema.json" - } - ], - "languages": [ - { - "id": "objectstack", - "aliases": [ - "ObjectStack", - "objectstack" - ], - "extensions": [ - ".object.ts", - ".view.ts" - ], - "configuration": "./language-configuration.json" - } - ], - "snippets": [ - { - "language": "typescript", - "path": "./snippets/objectstack.json" - } - ] - }, - "scripts": { - "build": "tsc -p ./tsconfig.json", - "watch": "tsc -watch -p ./tsconfig.json", - "package": "vsce package", - "test": "vitest run", - "typecheck": "tsc --noEmit && tsc -p ./tsconfig.test.json" - }, - "devDependencies": { - "@objectstack/spec": "workspace:*", - "@types/node": "^26.1.2", - "@types/vscode": "^1.125.0", - "@vscode/vsce": "^3.9.2", - "typescript": "^6.0.3", - "vitest": "^4.1.10" - }, - "keywords": [ - "objectstack", - "vscode", - "extension", - "intellisense", - "schema" - ], - "author": "ObjectStack", - "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/objectstack/issues", - "publishConfig": { - "access": "public" - }, - "files": [ - "dist", - "README.md", - "CHANGELOG.md" - ] -} diff --git a/packages/vscode-objectstack/snippets/objectstack.json b/packages/vscode-objectstack/snippets/objectstack.json deleted file mode 100644 index 3c31cf3c57..0000000000 --- a/packages/vscode-objectstack/snippets/objectstack.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "ObjectStack: Define Object": { - "prefix": "os-object", - "description": "Define a new ObjectStack business object", - "body": [ - "import { ObjectSchema } from '@objectstack/spec/data';", - "", - "export const ${1:MyObject} = ObjectSchema.create({", - " name: '${2:my_object}',", - " label: '${3:My Object}',", - " pluralLabel: '${3:My Object}s',", - " fields: {", - " name: {", - " type: 'text',", - " label: 'Name',", - " required: true,", - " maxLength: 255,", - " },", - " $0", - " },", - "});" - ] - }, - "ObjectStack: Text Field": { - "prefix": "os-field-text", - "description": "Add a text field to an object", - "body": [ - "${1:field_name}: {", - " type: 'text',", - " label: '${2:Field Label}',", - " required: ${3|false,true|},", - " maxLength: ${4:255},", - "}," - ] - }, - "ObjectStack: Select Field": { - "prefix": "os-field-select", - "description": "Add a select (picklist) field to an object", - "body": [ - "${1:status}: {", - " type: 'select',", - " label: '${2:Status}',", - " required: ${3|false,true|},", - " options: [", - " { label: '${4:Active}', value: '${5:active}' },", - " { label: '${6:Inactive}', value: '${7:inactive}' },", - " ],", - " defaultValue: '${5:active}',", - "}," - ] - }, - "ObjectStack: Lookup Field": { - "prefix": "os-field-lookup", - "description": "Add a lookup (reference) field to an object", - "body": [ - "${1:related_object}: {", - " type: 'lookup',", - " label: '${2:Related Object}',", - " required: ${3|false,true|},", - " reference: '${4:target_object}',", - " displayField: '${5:name}',", - "}," - ] - }, - "ObjectStack: Grid List View": { - "prefix": "os-view-grid", - "description": "Define a grid list view for an object", - "body": [ - "import { defineView } from '@objectstack/spec';", - "", - "export const ${1:MyObject}Views = defineView({", - " object: '${2:my_object}',", - " list: {", - " label: '${3:My Object} List',", - " type: 'grid',", - " data: { provider: 'object', object: '${2:my_object}' },", - " columns: [", - " { field: 'name', width: 200 },", - " $0", - " ],", - " sort: [{ field: 'name', order: 'asc' }],", - " pagination: { pageSize: 25 },", - " },", - "});" - ] - }, - "ObjectStack: Automation Flow": { - "prefix": "os-flow", - "description": "Define a record-change automation flow", - "body": [ - "import { defineFlow } from '@objectstack/spec';", - "", - "export const ${1:MyFlow} = defineFlow({", - " name: '${2:my_flow}',", - " label: '${3:My Flow}',", - " type: 'record_change',", - " status: 'draft',", - " nodes: [", - " {", - " id: 'start',", - " type: 'start',", - " label: 'Start',", - " config: {", - " objectName: '${4:my_object}',", - " triggerType: '${5|record-after-write,record-after-insert,record-after-update,record-after-delete|}',", - " },", - " },", - " $0", - " {", - " id: 'end',", - " type: 'end',", - " label: 'End',", - " },", - " ],", - " edges: [", - " { id: 'e1', source: 'start', target: 'end' },", - " ],", - "});" - ] - }, - "ObjectStack: defineStack Boilerplate": { - "prefix": "os-stack", - "description": "Full defineStack boilerplate for objectstack.config.ts", - "body": [ - "import { defineStack } from '@objectstack/spec';", - "", - "export default defineStack({", - " manifest: {", - " id: '${1:com.example.my_app}',", - " namespace: '${2:my_app}',", - " version: '${3:0.1.0}',", - " type: 'app',", - " name: '${4:My Application}',", - " engines: { protocol: '^17' },", - " },", - " objects: [", - " $0", - " ],", - " views: [],", - " plugins: [],", - "});" - ] - }, - "ObjectStack: AI Agent Definition": { - "prefix": "os-agent", - "description": "Define an AI agent", - "body": [ - "import { defineAgent } from '@objectstack/spec';", - "", - "export const ${1:MyAgent} = defineAgent({", - " name: '${2:my_agent}',", - " label: '${3:My Agent}',", - " role: '${4:Assistant}',", - " instructions: '${5:You are a helpful assistant.}',", - " model: {", - " provider: '${6|openai,anthropic,google|}',", - " model: '${7:gpt-4o}',", - " },", - " skills: [", - " $0", - " ],", - "});" - ] - } -} diff --git a/packages/vscode-objectstack/src/extension.ts b/packages/vscode-objectstack/src/extension.ts deleted file mode 100644 index 25df95ed41..0000000000 --- a/packages/vscode-objectstack/src/extension.ts +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license. - -import * as vscode from 'vscode'; - -/** Well-known ObjectStack field types for hover documentation */ -const FIELD_TYPE_DOCS: Record = { - text: 'Single-line text field (max 255 chars by default)', - textarea: 'Multi-line text area for longer content', - richtext: 'Rich text editor with HTML formatting', - number: 'Decimal number with configurable precision', - integer: 'Whole number without decimals', - currency: 'Monetary value with currency code', - boolean: 'True/false toggle', - date: 'Calendar date (no time)', - datetime: 'Date with time and timezone', - select: 'Single-choice picklist (requires `options`)', - multiselect: 'Multi-choice picklist (requires `options`)', - lookup: 'Reference to another object (requires `reference`)', - master_detail: 'Parent-child relationship with cascade delete', - formula: 'Computed field using expressions', - email: 'Email address with validation', - phone: 'Phone number', - url: 'URL with protocol validation', - image: 'Image file reference', - file: 'File attachment reference', - json: 'Arbitrary JSON data', - uuid: 'Universally unique identifier', - slug: 'URL-friendly identifier (auto-generated from name)', - rating: 'Numeric star rating', - color: 'Hex color value (#RRGGBB)', - vector: 'Numeric vector for AI embeddings and similarity search', - encrypted: 'Encrypted at rest — displayed masked in UI', - autonumber: 'Auto-incrementing display number', - geo_point: 'Geographic coordinates (lat/lng)', -}; - -/** ObjectStack schema keywords for hover tooltips */ -const SCHEMA_DOCS: Record = { - defineStack: 'Define an ObjectStack project or plugin. Validates against ObjectStackDefinitionSchema.', - defineView: 'Type-safe helper to define a list or form view for an object.', - defineApp: 'Type-safe helper to define an application with navigation.', - defineFlow: 'Type-safe helper to define an automation flow.', - defineAgent: 'Type-safe helper to define an AI agent with tools and instructions.', - manifest: 'Project package configuration — name, version, label, and metadata.', - objects: 'Business object definitions with fields, validation, and relationships.', - views: 'List and form view configurations for object data display.', - flows: 'Automation flows — screen flows, auto-launched, or scheduled.', - agents: 'AI agent definitions with model config, tools, and instructions.', - actions: 'Button actions, batch operations, and URL redirects.', - dashboards: 'Analytics dashboard layouts with widget grids.', - permissions: 'Permission sets defining CRUD access per object and field.', - roles: 'User role hierarchy for access control.', - plugins: 'External plugins to load into the stack.', - ownership: "Record ownership model: 'own' (creator-owned) or 'shared'.", - objectName: 'Snake_case reference to a business object (e.g. project_task).', -}; - -let diagnosticCollection: vscode.DiagnosticCollection; - -export function activate(context: vscode.ExtensionContext): void { - diagnosticCollection = vscode.languages.createDiagnosticCollection('objectstack'); - context.subscriptions.push(diagnosticCollection); - - // Watch for objectstack.config.ts changes - const configWatcher = vscode.workspace.createFileSystemWatcher('**/objectstack.config.ts'); - - configWatcher.onDidChange((uri) => { - validateConfigFile(uri); - }); - - configWatcher.onDidCreate((uri) => { - validateConfigFile(uri); - }); - - context.subscriptions.push(configWatcher); - - // Register hover provider for TypeScript files - const hoverProvider = vscode.languages.registerHoverProvider( - [ - { scheme: 'file', pattern: '**/*.object.ts' }, - { scheme: 'file', pattern: '**/*.view.ts' }, - { scheme: 'file', pattern: '**/objectstack.config.ts' }, - { scheme: 'file', language: 'typescript' }, - ], - { - provideHover(document, position) { - const range = document.getWordRangeAtPosition(position); - if (!range) return undefined; - - const word = document.getText(range); - - // Check schema-level keywords - if (SCHEMA_DOCS[word]) { - return new vscode.Hover( - new vscode.MarkdownString(`**ObjectStack** — \`${word}\`\n\n${SCHEMA_DOCS[word]}`), - ); - } - - // Check field type values (e.g. type: 'text') - const line = document.lineAt(position.line).text; - const typeMatch = line.match(/type:\s*['"](\w+)['"]/); - if (typeMatch && FIELD_TYPE_DOCS[typeMatch[1]]) { - const fieldType = typeMatch[1]; - if (word === fieldType || word === 'type') { - return new vscode.Hover( - new vscode.MarkdownString( - `**ObjectStack Field Type** — \`${fieldType}\`\n\n${FIELD_TYPE_DOCS[fieldType]}`, - ), - ); - } - } - - return undefined; - }, - }, - ); - - context.subscriptions.push(hoverProvider); - - // Register code action provider stub for quick fixes - const codeActionProvider = vscode.languages.registerCodeActionsProvider( - [ - { scheme: 'file', pattern: '**/*.object.ts' }, - { scheme: 'file', pattern: '**/*.view.ts' }, - { scheme: 'file', pattern: '**/objectstack.config.ts' }, - ], - { - provideCodeActions(document, range, context) { - const actions: vscode.CodeAction[] = []; - - for (const diagnostic of context.diagnostics) { - if (diagnostic.source !== 'objectstack') continue; - - // Quick fix: add missing label - if (diagnostic.message.includes('missing label')) { - const fix = new vscode.CodeAction( - 'Add missing label property', - vscode.CodeActionKind.QuickFix, - ); - fix.diagnostics = [diagnostic]; - fix.isPreferred = true; - actions.push(fix); - } - - // Quick fix: convert to snake_case - if (diagnostic.message.includes('snake_case')) { - const fix = new vscode.CodeAction( - 'Convert name to snake_case', - vscode.CodeActionKind.QuickFix, - ); - fix.diagnostics = [diagnostic]; - actions.push(fix); - } - } - - return actions; - }, - }, - { providedCodeActionKinds: [vscode.CodeActionKind.QuickFix] }, - ); - - context.subscriptions.push(codeActionProvider); - - // Validate open config files on activation - if (vscode.window.activeTextEditor) { - const uri = vscode.window.activeTextEditor.document.uri; - if (uri.fsPath.endsWith('objectstack.config.ts')) { - validateConfigFile(uri); - } - } -} - -/** - * Basic validation for objectstack.config.ts files. - * Checks for common structural issues and reports diagnostics. - */ -function validateConfigFile(uri: vscode.Uri): void { - const document = vscode.workspace.textDocuments.find( - (doc) => doc.uri.toString() === uri.toString(), - ); - if (!document) return; - - const diagnostics: vscode.Diagnostic[] = []; - const text = document.getText(); - - // Check for missing manifest - if (text.includes('defineStack') && !text.includes('manifest')) { - const defineStackPos = text.indexOf('defineStack'); - const pos = document.positionAt(defineStackPos); - diagnostics.push( - new vscode.Diagnostic( - new vscode.Range(pos, pos.translate(0, 'defineStack'.length)), - 'defineStack requires a "manifest" property with name and version', - vscode.DiagnosticSeverity.Warning, - ), - ); - } - - // Check for camelCase object names (should be snake_case) - const nameMatches = text.matchAll(/name:\s*['"]([a-z][a-zA-Z]+)['"]/g); - for (const match of nameMatches) { - if (match[1] && /[A-Z]/.test(match[1]) && match.index !== undefined) { - const pos = document.positionAt(match.index); - const endPos = document.positionAt(match.index + match[0].length); - diagnostics.push( - new vscode.Diagnostic( - new vscode.Range(pos, endPos), - `Object/field name "${match[1]}" should use snake_case (e.g. "${toSnakeCase(match[1])}")`, - vscode.DiagnosticSeverity.Warning, - ), - ); - } - } - - diagnosticCollection.set(uri, diagnostics); -} - -function toSnakeCase(str: string): string { - return str.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`); -} - -export function deactivate(): void { - if (diagnosticCollection) { - diagnosticCollection.dispose(); - } -} diff --git a/packages/vscode-objectstack/test/snippet-harness.ts b/packages/vscode-objectstack/test/snippet-harness.ts deleted file mode 100644 index 4ddc5f2eb2..0000000000 --- a/packages/vscode-objectstack/test/snippet-harness.ts +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright (c) 2026 ObjectStack contributors. Apache-2.0 license. - -/** - * Snippet harness — turns a VS Code snippet body into the value a metadata - * author would actually get, so a schema can judge it. - * - * Why this exists (#4917): `snippets/objectstack.json` is a *metadata producer* - * — the very first `.object.ts` / `.view.ts` an author (human or AI) writes is - * whatever the IDE expanded for them. Nothing in this repo ever parsed that - * output, so when #4001 closed `ListViewSchema` for unknown keys the - * `os-view-grid` snippet went from "silently drops `defaultSort`/`pageSize`" to - * "hard parse error", and stayed broken because no gate could see it. Four more - * snippets were found equally stale by the audit that opened this file. - * - * The harness is deliberately boring: expand the placeholders, transpile the TS, - * run it with the REAL `@objectstack/spec` behind `require`, and hand the - * authored literal back so the test can `safeParse` it. No stubbing of the spec, - * because a stub is exactly how a gate stops tracking the contract it guards. - */ - -import { createRequire } from 'node:module'; -import { readFileSync } from 'node:fs'; -import { dirname, join } from 'node:path'; -import ts from 'typescript'; - -const require = createRequire(import.meta.url); - -/** One snippet as it appears in `snippets/objectstack.json`. */ -export interface RawSnippet { - prefix: string; - description: string; - body: string[]; -} - -/** A call the snippet made into a validating spec factory. */ -export interface RecordedFactoryCall { - /** e.g. `defineView`, `ObjectSchema.create`. */ - factory: string; - /** The literal the author wrote — pre-parse, pre-defaults. */ - config: unknown; -} - -export interface EvaluatedSnippet { - /** The expanded TypeScript source, exactly as the IDE would insert it. */ - source: string; - /** Every validating factory the snippet called, in call order. */ - calls: RecordedFactoryCall[]; - /** The module's single export (default, or the one named export). */ - exported: unknown; -} - -/** - * Expand VS Code snippet placeholder syntax into concrete text. - * - * The four forms the LSP snippet grammar allows in this file, and what an - * author gets if they tab straight through without typing: - * - * | form | expands to | - * |-----------------|----------------------| - * | `${1:default}` | `default` | - * | `${1\|a,b\|}` | `a` (the first choice, which is what VS Code preselects) | - * | `${1}` | `p1` (a syntactically valid placeholder identifier) | - * | `$0` | `` (the final cursor stop — no text) | - * - * Expansion is therefore *non-trivial but total*: every form has one defined - * result, so "what the author gets" is a single well-defined string and the - * gate has something concrete to parse. A snippet that used a form outside this - * table would silently expand to the wrong thing, so - * {@link assertKnownPlaceholderSyntax} rejects one instead. - */ -export function expandSnippetBody(body: string[]): string { - const source = body.join('\n'); - assertKnownPlaceholderSyntax(source); - return source - .replace(/\$\{\d+\|([^|]*)\|\}/g, (_m, choices: string) => choices.split(',')[0]) - .replace(/\$\{(\d+):([^}]*)\}/g, (_m, _n: string, dflt: string) => dflt) - .replace(/\$\{(\d+)\}/g, (_m, n: string) => `p${n}`) - .replace(/\$\d+/g, ''); -} - -/** - * Reject any placeholder form {@link expandSnippetBody} does not model — - * variables (`$TM_FILENAME`), transforms (`${1/…/…/}`), nested placeholders. - * Without this the expander would silently produce text no author would ever - * see, and the gate would be validating a fiction. - */ -export function assertKnownPlaceholderSyntax(source: string): void { - const unsupported = [...source.matchAll(/\$\{[^}]*\}|\$[A-Za-z_]\w*/g)] - .map((m) => m[0]) - .filter((tok) => !/^\$\{\d+(:[^}]*)?\}$/.test(tok) && !/^\$\{\d+\|[^|]*\|\}$/.test(tok)); - if (unsupported.length > 0) { - throw new Error( - `Unsupported snippet placeholder syntax: ${unsupported.join(', ')}. ` + - 'The harness models ${n:default}, ${n|a,b|}, ${n} and $n only — teach ' + - 'expandSnippetBody() the new form before using it, or the gate silently ' + - 'validates text no author would ever see.', - ); - } -} - -/** Factories whose argument is the authored metadata literal. */ -const RECORDED_FACTORIES = new Set([ - 'defineStack', 'defineView', 'defineForm', 'defineFlow', 'defineAgent', - 'defineApp', 'defineTool', 'defineSkill', 'defineReport', 'defineAction', -]); - -/** Schema objects whose `.create()` is the authoring entry point. */ -const RECORDED_CREATE_SCHEMAS = new Set(['ObjectSchema']); - -/** - * Wrap a spec module so every authoring factory the snippet calls records the - * literal it received. The call still goes through to the real factory, so the - * factory's own `.parse()` stays part of the proof. - */ -function recordingModule(mod: Record, sink: RecordedFactoryCall[]): unknown { - return new Proxy(mod, { - get(target, prop, receiver) { - const value = Reflect.get(target, prop, receiver); - if (typeof prop !== 'string') return value; - - if (RECORDED_FACTORIES.has(prop) && typeof value === 'function') { - return (...args: unknown[]) => { - sink.push({ factory: prop, config: args[0] }); - return (value as (...a: unknown[]) => unknown)(...args); - }; - } - - // A spec schema built by `lazySchema()` is a *callable* proxy, not a - // plain object — checking only for `typeof === 'object'` silently skipped - // `ObjectSchema` and let `os-object` through unrecorded. - if (RECORDED_CREATE_SCHEMAS.has(prop) && value - && (typeof value === 'object' || typeof value === 'function')) { - const schema = value as Record; - if (typeof schema.create !== 'function') return value; - return new Proxy(schema, { - get(schemaTarget, schemaProp) { - const member = Reflect.get(schemaTarget, schemaProp); - if (schemaProp === 'create' && typeof member === 'function') { - return (...args: unknown[]) => { - sink.push({ factory: `${prop}.create`, config: args[0] }); - return (member as (...a: unknown[]) => unknown).apply(schemaTarget, args); - }; - } - return typeof member === 'function' ? member.bind(schemaTarget) : member; - }, - }); - } - - return value; - }, - }); -} - -/** - * Transpile the expanded snippet and run it against the real spec. - * - * `ts.transpileModule` (not the full program) is deliberate: it is the same - * single-file, types-erased transform a bundler applies, it needs no tsconfig, - * and it keeps this gate cheap enough to live in the package's own `pnpm test`. - * What it cannot see — that an imported *name* exists — is covered separately by - * the import-surface check below, which is the half that catches a snippet - * importing a binding the spec no longer exports. - */ -export function evaluateSnippetModule(source: string): EvaluatedSnippet { - const js = ts.transpileModule(source, { - compilerOptions: { - module: ts.ModuleKind.CommonJS, - target: ts.ScriptTarget.ES2022, - }, - }).outputText; - - const calls: RecordedFactoryCall[] = []; - const moduleObject: { exports: Record } = { exports: {} }; - const shimmedRequire = (id: string): unknown => { - const resolved = require(id) as Record; - return id.startsWith('@objectstack/spec') ? recordingModule(resolved, calls) : resolved; - }; - - const run = new Function('exports', 'require', 'module', js) as ( - exports: unknown, req: unknown, mod: unknown, - ) => void; - run(moduleObject.exports, shimmedRequire, moduleObject); - - return { source, calls, exported: soleExport(moduleObject.exports) }; -} - -/** - * A snippet scaffolds exactly one metadata item, so its module has exactly one - * export. Insisting on that (rather than groping for `.default`) keeps the - * harness honest about what it validated. - */ -function soleExport(exports: Record): unknown { - const names = Object.keys(exports).filter((k) => k !== '__esModule'); - if (names.length !== 1) { - throw new Error( - `Expected the snippet module to export exactly one value, got ${names.length}: ` + - `[${names.join(', ')}].`, - ); - } - return exports[names[0]]; -} - -/** A single `import … from '…'` statement found in a snippet. */ -export interface SnippetImport { - specifier: string; - /** Named bindings, by their name in the source module (pre-`as`). */ - named: string[]; - /** True for `import * as NS from '…'`. */ - namespace: boolean; -} - -/** Parse a snippet's import statements with the TypeScript parser. */ -export function collectImports(source: string): SnippetImport[] { - const sf = ts.createSourceFile('snippet.ts', source, ts.ScriptTarget.ES2022, true); - const imports: SnippetImport[] = []; - for (const statement of sf.statements) { - if (!ts.isImportDeclaration(statement)) continue; - if (!ts.isStringLiteral(statement.moduleSpecifier)) continue; - const entry: SnippetImport = { - specifier: statement.moduleSpecifier.text, - named: [], - namespace: false, - }; - const bindings = statement.importClause?.namedBindings; - if (bindings && ts.isNamespaceImport(bindings)) entry.namespace = true; - if (bindings && ts.isNamedImports(bindings)) { - for (const element of bindings.elements) { - entry.named.push((element.propertyName ?? element.name).text); - } - } - imports.push(entry); - } - return imports; -} - -/** - * Every name a module exports — runtime values plus the type-only names its - * entry `.d.ts` declares. - * - * The type half is the point. `import { Data } from '@objectstack/spec'` was in - * five of these snippets; `Data` was a *type* namespace, so no runtime check - * could see it disappear when the root namespace re-exports were removed for - * being untree-shakeable (see `packages/spec/src/index.ts`). Reading the - * declaration file is what makes a vanished type binding a red test. - */ -export function declaredExportSurface(specifier: string): Set { - const names = new Set(Object.keys(require(specifier) as object)); - - const jsEntry = require.resolve(specifier); - const dtsEntry = join(dirname(jsEntry), `${basenameWithoutExt(jsEntry)}.d.ts`); - const declaration = readFileSync(dtsEntry, 'utf8'); // loud if the build is missing - const sf = ts.createSourceFile(dtsEntry, declaration, ts.ScriptTarget.ES2022, true); - - for (const statement of sf.statements) { - if (ts.isExportDeclaration(statement) && statement.exportClause - && ts.isNamedExports(statement.exportClause)) { - for (const element of statement.exportClause.elements) names.add(element.name.text); - continue; - } - const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined; - if (!modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) continue; - if (ts.isVariableStatement(statement)) { - for (const d of statement.declarationList.declarations) { - if (ts.isIdentifier(d.name)) names.add(d.name.text); - } - } else if ('name' in statement && statement.name && ts.isIdentifier(statement.name as ts.Node)) { - names.add((statement.name as ts.Identifier).text); - } - } - return names; -} - -function basenameWithoutExt(file: string): string { - return file.split('/').pop()!.replace(/\.(c|m)?js$/, ''); -} - -/** Read the snippet contribution file this extension actually ships. */ -export function readSnippets(): Record { - const file = new URL('../snippets/objectstack.json', import.meta.url); - return JSON.parse(readFileSync(file, 'utf8')) as Record; -} diff --git a/packages/vscode-objectstack/test/snippets.test.ts b/packages/vscode-objectstack/test/snippets.test.ts deleted file mode 100644 index 36b7691022..0000000000 --- a/packages/vscode-objectstack/test/snippets.test.ts +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright (c) 2026 ObjectStack contributors. Apache-2.0 license. - -/** - * The snippet gate (#4917). - * - * Every snippet this extension contributes is a metadata *producer*: whatever - * it expands to is the first `.object.ts` / `.view.ts` an author ever writes. - * Until this file existed nothing parsed that output, so the snippets drifted - * out of the spec in silence — `os-view-grid` shipped `list.defaultSort` / - * `list.pageSize` (keys `ListViewSchema` never declared), and the #4001 - * strictness batches turned that from a silent strip into a hard 422 without - * anything going red. Four more snippets were equally stale. - * - * So the contract here is: **expand each snippet, then judge it with the same - * schema the runtime uses.** Three independent ways to fail: - * - * 1. the expansion does not evaluate (a factory rejected it, or it is not - * valid TypeScript); - * 2. the authored literal does not `safeParse` against its spec schema; - * 3. it imports a binding `@objectstack/spec` does not export — the failure a - * runtime check cannot see, and the one five snippets were carrying. - * - * Plus two structural guards: every shipped snippet must be planned here (a new - * snippet cannot arrive ungated), and the negative case must actually fail (a - * gate nobody proved red is a gate that is green for the wrong reason). - */ - -import { createRequire } from 'node:module'; -import { describe, expect, it } from 'vitest'; - -import { - collectImports, - declaredExportSurface, - evaluateSnippetModule, - expandSnippetBody, - readSnippets, - type RawSnippet, -} from './snippet-harness.js'; - -/** - * Just enough of a Zod schema to judge a snippet. Structural rather than - * `import type { ZodType } from 'zod'`: the extension has no runtime dependency - * on the spec (it ships snippets and a language client), and this gate should - * not be the reason it acquires zod's type surface as a build input. - */ -interface ParsableSchema { - safeParse(value: unknown): { success: true } | { - success: false; - error: { issues: ReadonlyArray<{ path: PropertyKey[]; message: string }> }; - }; -} - -const require = createRequire(import.meta.url); -const specRoot = require('@objectstack/spec') as Record; -const specData = require('@objectstack/spec/data') as Record; -const specUi = require('@objectstack/spec/ui') as Record; -const specAutomation = require('@objectstack/spec/automation') as Record; -const specAi = require('@objectstack/spec/ai') as Record; - -/** - * What each snippet claims to scaffold, and which spec schema judges it. - * - * `kind: 'module'` — the snippet is a whole file; it must call a validating - * factory, and the literal handed to that factory is what gets parsed. - * `kind: 'field'` — the snippet is a fragment pasted inside an object's - * `fields: { … }`; it is wrapped into a module and its one value parsed. - */ -interface SnippetPlan { - kind: 'module' | 'field'; - schema: ParsableSchema; - /** Human-readable name of the schema, for failure messages. */ - schemaName: string; - /** For `module` snippets: the factory the snippet must go through. */ - factory?: string; -} - -const PLANS: Record = { - 'os-object': { - kind: 'module', schema: specData.ObjectSchema, schemaName: 'Data.ObjectSchema', - factory: 'ObjectSchema.create', - }, - 'os-field-text': { kind: 'field', schema: specData.FieldSchema, schemaName: 'Data.FieldSchema' }, - 'os-field-select': { kind: 'field', schema: specData.FieldSchema, schemaName: 'Data.FieldSchema' }, - 'os-field-lookup': { kind: 'field', schema: specData.FieldSchema, schemaName: 'Data.FieldSchema' }, - 'os-view-grid': { - kind: 'module', schema: specUi.ViewSchema, schemaName: 'UI.ViewSchema', factory: 'defineView', - }, - 'os-flow': { - kind: 'module', schema: specAutomation.FlowSchema, schemaName: 'Automation.FlowSchema', - factory: 'defineFlow', - }, - 'os-stack': { - kind: 'module', schema: specRoot.ObjectStackDefinitionSchema, - schemaName: 'ObjectStackDefinitionSchema', factory: 'defineStack', - }, - 'os-agent': { - kind: 'module', schema: specAi.AgentSchema, schemaName: 'AI.AgentSchema', factory: 'defineAgent', - }, -}; - -const snippets = readSnippets(); -const entries = Object.entries(snippets) as Array<[string, RawSnippet]>; - -/** Wrap a `fields: { … }` fragment into a module the harness can evaluate. */ -function asFieldModule(expanded: string): string { - return `export default {\n${expanded}\n};`; -} - -function formatIssues(schemaName: string, error: { issues: ReadonlyArray<{ path: PropertyKey[]; message: string }> }): string { - return `${schemaName} rejected the expanded snippet:\n` + - error.issues.map((i) => ` · ${i.path.join('.') || '(root)'}: ${i.message}`).join('\n'); -} - -describe('VS Code snippets are valid ObjectStack metadata (#4917)', () => { - it('plans every snippet the extension ships — a new snippet cannot arrive ungated', () => { - const shipped = entries.map(([, s]) => s.prefix).sort(); - expect(Object.keys(PLANS).sort()).toEqual(shipped); - }); - - describe.each(entries)('%s', (_name, snippet) => { - const plan = PLANS[snippet.prefix]; - const expanded = expandSnippetBody(snippet.body); - - it(`[${snippet.prefix}] expands to metadata ${plan.schemaName} accepts`, () => { - const source = plan.kind === 'field' ? asFieldModule(expanded) : expanded; - const evaluated = evaluateSnippetModule(source); - - let authored: unknown; - if (plan.kind === 'field') { - const fields = evaluated.exported as Record; - const keys = Object.keys(fields); - expect(keys, 'a field snippet declares exactly one field').toHaveLength(1); - authored = fields[keys[0]]; - } else { - // The snippet must route through a validating factory, not a bare - // `: Type` literal. A bare literal is precisely what `os-view-grid` - // used to be — it type-annotated a shape nothing ever parsed, so the - // spec could close two keys underneath it without a single diagnostic. - const call = evaluated.calls.find((c) => c.factory === plan.factory); - expect( - call, - `expected the snippet to author through \`${plan.factory}\`, but it called ` + - `[${evaluated.calls.map((c) => c.factory).join(', ') || 'nothing'}]`, - ).toBeDefined(); - authored = call!.config; - } - - const result = plan.schema.safeParse(authored); - if (!result.success) throw new Error(formatIssues(plan.schemaName, result.error)); - expect(result.success).toBe(true); - }); - - it(`[${snippet.prefix}] imports only bindings @objectstack/spec still exports`, () => { - for (const imported of collectImports(expanded)) { - expect( - imported.specifier, - 'snippets may only import from @objectstack/spec', - ).toMatch(/^@objectstack\/spec(\/|$)/); - - const surface = declaredExportSurface(imported.specifier); - for (const binding of imported.named) { - expect( - surface.has(binding), - `\`${binding}\` is not exported by '${imported.specifier}'. Root namespace ` + - 're-exports (Data / UI / AI / Automation …) were removed as untree-shakeable — ' + - 'import from the subpath instead (see packages/spec/src/index.ts).', - ).toBe(true); - } - } - }); - }); - - /** - * The `os-stack` scaffold stamps the protocol handshake range - * (ADR-0087 D1), and a hardcoded major is exactly the kind of literal that - * rots the way this whole issue rotted. `create-objectstack`'s template is - * kept in lockstep by `scripts/sync-template-versions.mjs`, which does not - * know about this file — so the lockstep is asserted here instead. - */ - it('os-stack stamps the CURRENT protocol major in engines.protocol', () => { - const major = (require('@objectstack/spec/package.json') as { version: string }) - .version.split('.')[0]; - const stack = entries.find(([, s]) => s.prefix === 'os-stack')![1]; - expect(stack.body.join('\n')).toContain(`engines: { protocol: '^${major}' }`); - }); -}); - -/** - * Bidirectional proof. A gate is only worth its runtime if it goes red on the - * thing it claims to catch, so re-introduce the exact #4917 defect — the keys - * #4001 closed — and require a rejection. If this test starts passing "for - * free", the gate above has stopped judging anything. - */ -describe('the gate rejects a stale snippet (negative control, #4917)', () => { - const STALE_VIEW_BODY = [ - "import { defineView } from '@objectstack/spec';", - '', - 'export const ${1:MyObject}Views = defineView({', - " object: '${2:my_object}',", - ' list: {', - " type: 'grid',", - " columns: [{ field: 'name', width: 200 }],", - " defaultSort: { field: 'name', direction: 'asc' },", - ' pageSize: 25,', - ' },', - '});', - ]; - - it('rejects `list.defaultSort` / `list.pageSize` — the keys #4001 closed', () => { - const source = expandSnippetBody(STALE_VIEW_BODY); - // `defineView` parses eagerly, so the stale shape throws before we even get - // to safeParse — which is the behaviour an author sees, and the proof that - // the positive tests above are not passing on an inert code path. - expect(() => evaluateSnippetModule(source)).toThrowError(/defaultSort|pageSize/); - }); - - it('rejects an import binding the spec no longer exports', () => { - const source = expandSnippetBody([ - "import { Data } from '@objectstack/spec';", - '', - 'export const Broken = Data;', - ]); - const [imported] = collectImports(source); - expect(declaredExportSurface(imported.specifier).has('Data')).toBe(false); - }); - - it('refuses a placeholder form the expander does not model', () => { - expect(() => expandSnippetBody(['const f = ${TM_FILENAME};'])) - .toThrowError(/Unsupported snippet placeholder syntax/); - }); -}); diff --git a/packages/vscode-objectstack/tsconfig.json b/packages/vscode-objectstack/tsconfig.json deleted file mode 100644 index 000d0175eb..0000000000 --- a/packages/vscode-objectstack/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "ES2022", - "lib": ["ES2022"], - "outDir": "dist", - "rootDir": "src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "declaration": true, - "sourceMap": true - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/vscode-objectstack/tsconfig.test.json b/packages/vscode-objectstack/tsconfig.test.json deleted file mode 100644 index d221c59819..0000000000 --- a/packages/vscode-objectstack/tsconfig.test.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - // The extension itself is CommonJS (VS Code's host requires it), but the - // snippet gate in `test/` is ESM — it uses `import.meta.url` to locate the - // shipped `snippets/objectstack.json` and resolves `@objectstack/spec` - // subpath exports. Two module systems cannot share one `compilerOptions`, so - // the tests get their own project rather than being dropped from type - // checking (AGENTS.md: never hide a package's tests from `tsc --noEmit`). - "compilerOptions": { - // ESM + bundler resolution mirrors how vitest actually loads these files - // (it transforms them as modules regardless of the package's CJS `type`), - // so the type check judges the same program the test run executes. - "module": "esnext", - "moduleResolution": "bundler", - "target": "ES2022", - "lib": ["ES2022"], - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "types": ["node"], - "noEmit": true - }, - "include": ["test"] -} diff --git a/packages/vscode-objectstack/vitest.config.ts b/packages/vscode-objectstack/vitest.config.ts deleted file mode 100644 index fa69665ca7..0000000000 --- a/packages/vscode-objectstack/vitest.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - include: ['test/**/*.test.ts'], - environment: 'node', - }, -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32f0d88ee4..2e51820e14 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2543,27 +2543,6 @@ importers: specifier: ^4.1.10 version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(happy-dom@20.10.2)(jsdom@30.0.1(@noble/hashes@2.2.0))(msw@2.14.6(@types/node@26.1.2)(typescript@6.0.3))(vite@8.0.16(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - packages/vscode-objectstack: - devDependencies: - '@objectstack/spec': - specifier: workspace:* - version: link:../spec - '@types/node': - specifier: ^26.1.2 - version: 26.1.2 - '@types/vscode': - specifier: ^1.125.0 - version: 1.125.0 - '@vscode/vsce': - specifier: ^3.9.2 - version: 3.9.2 - typescript: - specifier: ^6.0.3 - version: 6.0.3 - vitest: - specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(happy-dom@20.10.2)(jsdom@30.0.1(@noble/hashes@2.2.0))(msw@2.14.6(@types/node@26.1.2)(typescript@6.0.3))(vite@8.0.16(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(yaml@2.9.0)) - packages: '@ai-sdk/gateway@4.0.33': @@ -2677,12 +2656,6 @@ packages: resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} engines: {node: '>=18.0.0'} - '@azu/format-text@1.0.2': - resolution: {integrity: sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==} - - '@azu/style-format@1.0.1': - resolution: {integrity: sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==} - '@azure-rest/core-client@2.8.0': resolution: {integrity: sha512-F1ybHeN+++QhyFCF/ehLUEvrOB6fehPdFBFtGdj0C3B2lpQ9zkPiO5JDgsqc6IfjuUe6b3dAbXK0a7+VgSGfhw==} engines: {node: '>=22.0.0'} @@ -4327,51 +4300,6 @@ packages: cpu: [x64] os: [win32] - '@secretlint/config-creator@10.2.2': - resolution: {integrity: sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==} - engines: {node: '>=20.0.0'} - - '@secretlint/config-loader@10.2.2': - resolution: {integrity: sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==} - engines: {node: '>=20.0.0'} - - '@secretlint/core@10.2.2': - resolution: {integrity: sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==} - engines: {node: '>=20.0.0'} - - '@secretlint/formatter@10.2.2': - resolution: {integrity: sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==} - engines: {node: '>=20.0.0'} - - '@secretlint/node@10.2.2': - resolution: {integrity: sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==} - engines: {node: '>=20.0.0'} - - '@secretlint/profiler@10.2.2': - resolution: {integrity: sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==} - - '@secretlint/resolver@10.2.2': - resolution: {integrity: sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==} - - '@secretlint/secretlint-formatter-sarif@10.2.2': - resolution: {integrity: sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==} - - '@secretlint/secretlint-rule-no-dotenv@10.2.2': - resolution: {integrity: sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==} - engines: {node: '>=20.0.0'} - - '@secretlint/secretlint-rule-preset-recommend@10.2.2': - resolution: {integrity: sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==} - engines: {node: '>=20.0.0'} - - '@secretlint/source-creator@10.2.2': - resolution: {integrity: sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==} - engines: {node: '>=20.0.0'} - - '@secretlint/types@10.2.2': - resolution: {integrity: sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==} - engines: {node: '>=20.0.0'} - '@shikijs/core@4.4.1': resolution: {integrity: sha512-VeR2CY6Nn9/WbisoYLOQZ7HZOnwTrpBuOw4wExjqLnBCi62BNWynBUO6K2uPIASPFJwAv7cX1fUu+LrPlSstcw==} engines: {node: '>=20'} @@ -4403,10 +4331,6 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - '@smithy/core@3.29.5': resolution: {integrity: sha512-i0dk2t5B+CwV/dcJdUHILYkOQF5lof8f44dFCfDWToGCxjT9YQ+CgHqTAvJxzc3+zqQwm2QtVoJ5IqiNar/CnQ==} engines: {node: '>=18.0.0'} @@ -4577,21 +4501,6 @@ packages: '@types/react-dom': optional: true - '@textlint/ast-node-types@15.7.1': - resolution: {integrity: sha512-Wii5UgUKFEh9Uv6wbq1zr4/Kf+dtjiUuzPrrXzKp8H+ifkvKNzi23V4Nz+6wVyHQn5T28AFuc8VH8OtzvGYecA==} - - '@textlint/linter-formatter@15.7.1': - resolution: {integrity: sha512-TdwZ/debWYFD05K3CcoHtwvnCrza29wZxD+BjDTk/V5N7iRqkK1dTTHSD4A8AIgROLiDkHJmIKQbasbmsg8AvA==} - - '@textlint/module-interop@15.7.1': - resolution: {integrity: sha512-Jg+sQW2L/cRJypk59wtcMUVVpt8vmit5ZMT3gUnFwevP3A6Qp1HfOtUy9ObT4hBX3lOSGT/ekcCDxR1pL7uH1g==} - - '@textlint/resolver@15.7.1': - resolution: {integrity: sha512-8XnO0pgF6mXnm41VvWmBbEIdGPhiCUt31uLZkOis1ECeg/1SoUcIT6Mx/F0e1rukq8l0UlOSeY9a31CsvRMK0g==} - - '@textlint/types@15.7.1': - resolution: {integrity: sha512-Vye/GmFNBTgVzZFtIFJTmLB+s2A7oIADxNG6r9UhfPuY+Czv0z5G3xeyFZZudPlfxURsKUyPIU5XsjOFqVp33A==} - '@ts-morph/common@0.29.0': resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} @@ -4789,9 +4698,6 @@ packages: '@types/nodemailer@8.0.1': resolution: {integrity: sha512-PxpaInm8V1JQDd4j0ds5HfvWQk8JupS1C0Picb96QJsrrRDjBH+DlK7L4ZdNSqNULhiZRQHc40nLVShaGxXAMw==} - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/react-dom@19.2.4': resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} peerDependencies: @@ -4803,9 +4709,6 @@ packages: '@types/readable-stream@4.0.24': resolution: {integrity: sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==} - '@types/sarif@2.1.7': - resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} - '@types/set-cookie-parser@2.4.10': resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==} @@ -4824,9 +4727,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/vscode@1.125.0': - resolution: {integrity: sha512-0icm/ZQAaism87P0ekHqi4/Ju9du+Tm0RUW+y7vqRsxY2cY0FNRX1nAnaW7nT6npPt2tfHiheZ55Zm9UhqonFA==} - '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} @@ -4928,59 +4828,6 @@ packages: '@vitest/utils@4.1.10': resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} - '@vscode/vsce-sign-alpine-arm64@2.0.6': - resolution: {integrity: sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==} - cpu: [arm64] - os: [alpine] - - '@vscode/vsce-sign-alpine-x64@2.0.6': - resolution: {integrity: sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==} - cpu: [x64] - os: [alpine] - - '@vscode/vsce-sign-darwin-arm64@2.0.6': - resolution: {integrity: sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==} - cpu: [arm64] - os: [darwin] - - '@vscode/vsce-sign-darwin-x64@2.0.6': - resolution: {integrity: sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==} - cpu: [x64] - os: [darwin] - - '@vscode/vsce-sign-linux-arm64@2.0.6': - resolution: {integrity: sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==} - cpu: [arm64] - os: [linux] - - '@vscode/vsce-sign-linux-arm@2.0.6': - resolution: {integrity: sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==} - cpu: [arm] - os: [linux] - - '@vscode/vsce-sign-linux-x64@2.0.6': - resolution: {integrity: sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==} - cpu: [x64] - os: [linux] - - '@vscode/vsce-sign-win32-arm64@2.0.6': - resolution: {integrity: sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==} - cpu: [arm64] - os: [win32] - - '@vscode/vsce-sign-win32-x64@2.0.6': - resolution: {integrity: sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==} - cpu: [x64] - os: [win32] - - '@vscode/vsce-sign@2.0.9': - resolution: {integrity: sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==} - - '@vscode/vsce@3.9.2': - resolution: {integrity: sha512-XSxMosEEDO6vLxELAHVkwmhC0qe0ijZni2jB9Rcs8kQsW4lhTDQ/wMzmwFs/buotAWSnpmUp/dRWD2ufG3UYKA==} - engines: {node: '>= 20'} - hasBin: true - '@workflow/serde@4.1.0': resolution: {integrity: sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==} @@ -5111,18 +4958,10 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -5184,10 +5023,6 @@ packages: ast-v8-to-istanbul@1.0.5: resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -5198,9 +5033,6 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - aws-ssl-profiles@1.1.2: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} engines: {node: '>= 6.0.0'} @@ -5209,9 +5041,6 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - azure-devops-node-api@12.5.0: - resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} - b4a@1.8.1: resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} peerDependencies: @@ -5364,10 +5193,6 @@ packages: binary@0.3.0: resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} - binaryextensions@6.11.0: - resolution: {integrity: sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==} - engines: {node: '>=4'} - bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -5384,12 +5209,6 @@ packages: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - boundary@2.0.0: - resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} - bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} @@ -5472,14 +5291,6 @@ packages: chainsaw@0.1.0: resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@6.0.0: resolution: {integrity: sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg==} engines: {node: '>=22'} @@ -5499,13 +5310,6 @@ packages: chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.2.0: - resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} - engines: {node: '>=20.18.1'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -5555,10 +5359,6 @@ packages: resolution: {integrity: sha512-rH0jBKeLkVrK7NsZ5Ba2l7WdMBmm1k0FMpABeXUU1PgTUxbz3261gEuCSsrYuXo4BwAe3yCcIbQ93YyS52lOGQ==} hasBin: true - cockatiel@3.2.1: - resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} - engines: {node: '>=16'} - code-block-writer@13.0.3: resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} @@ -5575,10 +5375,6 @@ packages: colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -5586,10 +5382,6 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - commander@15.0.0: resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} engines: {node: '>=22.12.0'} @@ -5683,17 +5475,10 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-tree@3.2.1: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -5913,10 +5698,6 @@ packages: delaunator@5.1.0: resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -5957,22 +5738,9 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - dompurify@3.4.12: resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dotenv-flow@4.1.0: resolution: {integrity: sha512-0cwP9jpQBQfyHwvE0cRhraZMkdV45TQedA8AAUZMsFzvmLcQyc1HPv+oX0OOYwLFjIlvgVepQ+WuQHbqDaHJZg==} engines: {node: '>= 12.0.0'} @@ -5991,10 +5759,6 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - editions@6.22.0: - resolution: {integrity: sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==} - engines: {ecmascript: '>= es5', node: '>=4'} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -6010,9 +5774,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -6024,10 +5785,6 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -6040,10 +5797,6 @@ packages: resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} engines: {node: '>=20.19.0'} - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -6059,10 +5812,6 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - es-toolkit@1.49.0: resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} @@ -6341,10 +6090,6 @@ packages: debug: optional: true - form-data@4.0.6: - resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} - engines: {node: '>= 6'} - forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -6370,10 +6115,6 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.3.6: - resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} - engines: {node: '>=14.14'} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -6571,10 +6312,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -6601,10 +6338,6 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -6643,10 +6376,6 @@ packages: resolution: {integrity: sha512-GqXJqY/xJkJmuloTrnV1ZEXG3fqte+VjkUqoRNZXcrUidiUOP4fMSIHHY4tsqZBK++kVyWmt/AAfSUuy57/eSA==} engines: {node: '>=16.9.0'} - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -6661,9 +6390,6 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} - http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -6695,10 +6421,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.6: - resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} - engines: {node: '>= 4'} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -6713,10 +6435,6 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - index-to-position@1.2.0: - resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} - engines: {node: '>=18'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -6871,10 +6589,6 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - istextorbinary@9.5.0: - resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} - engines: {node: '>=4'} - jake@10.9.4: resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} engines: {node: '>=10'} @@ -6942,20 +6656,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.2.1: - resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - jsonwebtoken@9.0.3: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} @@ -6973,9 +6676,6 @@ packages: resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} hasBin: true - keytar@7.9.0: - resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -7030,10 +6730,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -7201,9 +6897,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.2: - resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - listenercount@1.0.1: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} @@ -7277,9 +6970,6 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash.union@4.6.0: resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} @@ -7302,10 +6992,6 @@ packages: resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} engines: {node: 20 || >=22} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lru.min@1.1.4: resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} @@ -7340,10 +7026,6 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-it@14.3.0: - resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} - hasBin: true - markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -7407,9 +7089,6 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - media-typer@1.1.1: resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==} engines: {node: '>= 0.8'} @@ -7537,27 +7216,14 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - mime-types@3.0.2: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -7677,9 +7343,6 @@ packages: typescript: optional: true - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mute-stream@3.0.0: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} engines: {node: ^20.17.0 || >=22.9.0} @@ -7759,9 +7422,6 @@ packages: resolution: {integrity: sha512-W5ZNO5KRPB5TkYmGVD9F6YqhsglXJzE6etpbmT+f6EQElhiX/UTG551cnsRGvLG3fyZEg9HwaDmNmj5nwJ4z9g==} engines: {node: '>=10'} - node-addon-api@4.3.0: - resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} - node-addon-api@8.9.1: resolution: {integrity: sha512-4eUQWVPCUUUiBjLnHS3cXWeC6ryoPUc0U3rP7IuzapoGbzMqd/r6KKO0clr0b+snQhsrueFEhCZDdK+LK7hxKg==} engines: {node: ^18 || ^20 || >= 21} @@ -7769,18 +7429,10 @@ packages: node-rsa@1.1.1: resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} - node-sarif-builder@3.4.0: - resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==} - engines: {node: '>=20'} - nodemailer@9.0.3: resolution: {integrity: sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==} engines: {node: '>=6.0.0'} - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -7868,9 +7520,6 @@ packages: - validate-npm-package-name - which - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7938,10 +7587,6 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - p-map@7.0.5: - resolution: {integrity: sha512-e8vJF4XdVkzqqSHguEMz41mQO1wKwxKm5ENrUJQUu9kLDCtn83cxbyHZcszr4QC5zEA7WffRRC4gsTecC7J9oA==} - engines: {node: '>=18'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7958,19 +7603,6 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - - parse-semver@1.1.1: - resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} - - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -8024,10 +7656,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -8114,13 +7742,6 @@ packages: engines: {node: '>=20'} hasBin: true - pluralize@2.0.0: - resolution: {integrity: sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} @@ -8208,10 +7829,6 @@ packages: pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -8244,9 +7861,6 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - rc-config-loader@4.1.4: - resolution: {integrity: sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==} - rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -8293,18 +7907,10 @@ packages: resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} - read@1.0.7: - resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} - engines: {node: '>=0.8'} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -8464,10 +8070,6 @@ packages: samlify@2.13.1: resolution: {integrity: sha512-vdYr/zohDGBbfWNU4miEzc1jmWOtkLySPViapC6nfGkv9KxzLq4UlGkKyryzwLw4jVlZk88Rw93HaCRVpe+t+g==} - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} - saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -8482,15 +8084,6 @@ packages: scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} - secretlint@10.2.2: - resolution: {integrity: sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==} - engines: {node: '>=20.0.0'} - hasBin: true - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -8581,14 +8174,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -8614,18 +8199,6 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.23: - resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -8679,10 +8252,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -8694,9 +8263,6 @@ packages: strnum@2.4.1: resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} - structured-source@4.0.0: - resolution: {integrity: sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==} - style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -8732,10 +8298,6 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@3.2.0: - resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} - engines: {node: '>=14.18'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -8747,10 +8309,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - table@6.9.0: - resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} - engines: {node: '>=10.0.0'} - tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} @@ -8794,20 +8352,9 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terminal-link@4.0.0: - resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} - engines: {node: '>=18'} - text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - textextensions@6.11.0: - resolution: {integrity: sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==} - engines: {node: '>=4'} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -8931,10 +8478,6 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - tunnel@0.0.6: - resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} - engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - turbo@2.10.7: resolution: {integrity: sha512-GHx6WExIFSKNJ5qMlzDpXBXlu9ApxaMjqxAVrCNcW94xf/+uqgIz41SAuRUMbXva2ExNAaY/h8V0q90SWSzmRw==} hasBin: true @@ -8947,10 +8490,6 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - type-fest@5.8.0: resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} engines: {node: '>=20'} @@ -8959,23 +8498,14 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - typed-rest-client@1.8.11: - resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} - typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} - underscore@1.13.8: - resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} - undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} @@ -8987,14 +8517,6 @@ packages: resolution: {integrity: sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==} engines: {node: '>=22.19.0'} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -9023,10 +8545,6 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -9040,9 +8558,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -9075,9 +8590,6 @@ packages: resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9086,10 +8598,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - version-range@4.15.0: - resolution: {integrity: sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==} - engines: {node: '>=4'} - vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -9198,19 +8706,10 @@ packages: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - whatwg-mimetype@5.0.0: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} @@ -9291,17 +8790,9 @@ packages: resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} engines: {node: '>=16.0.0'} - xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} - engines: {node: '>=4.0.0'} - xml@1.0.1: resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -9325,9 +8816,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} @@ -9354,9 +8842,6 @@ packages: resolution: {integrity: sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==} engines: {node: '>=12'} - yazl@2.5.1: - resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -9613,12 +9098,6 @@ snapshots: '@aws/lambda-invoke-store@0.3.0': {} - '@azu/format-text@1.0.2': {} - - '@azu/style-format@1.0.1': - dependencies: - '@azu/format-text': 1.0.2 - '@azure-rest/core-client@2.8.0': dependencies: '@azure/abort-controller': 2.2.0 @@ -11188,80 +10667,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true - '@secretlint/config-creator@10.2.2': - dependencies: - '@secretlint/types': 10.2.2 - - '@secretlint/config-loader@10.2.2': - dependencies: - '@secretlint/profiler': 10.2.2 - '@secretlint/resolver': 10.2.2 - '@secretlint/types': 10.2.2 - ajv: 8.20.0 - debug: 4.4.3(supports-color@8.1.1) - rc-config-loader: 4.1.4 - transitivePeerDependencies: - - supports-color - - '@secretlint/core@10.2.2': - dependencies: - '@secretlint/profiler': 10.2.2 - '@secretlint/types': 10.2.2 - debug: 4.4.3(supports-color@8.1.1) - structured-source: 4.0.0 - transitivePeerDependencies: - - supports-color - - '@secretlint/formatter@10.2.2': - dependencies: - '@secretlint/resolver': 10.2.2 - '@secretlint/types': 10.2.2 - '@textlint/linter-formatter': 15.7.1 - '@textlint/module-interop': 15.7.1 - '@textlint/types': 15.7.1 - chalk: 5.6.2 - debug: 4.4.3(supports-color@8.1.1) - pluralize: 8.0.0 - strip-ansi: 7.2.0 - table: 6.9.0 - terminal-link: 4.0.0 - transitivePeerDependencies: - - supports-color - - '@secretlint/node@10.2.2': - dependencies: - '@secretlint/config-loader': 10.2.2 - '@secretlint/core': 10.2.2 - '@secretlint/formatter': 10.2.2 - '@secretlint/profiler': 10.2.2 - '@secretlint/source-creator': 10.2.2 - '@secretlint/types': 10.2.2 - debug: 4.4.3(supports-color@8.1.1) - p-map: 7.0.5 - transitivePeerDependencies: - - supports-color - - '@secretlint/profiler@10.2.2': {} - - '@secretlint/resolver@10.2.2': {} - - '@secretlint/secretlint-formatter-sarif@10.2.2': - dependencies: - node-sarif-builder: 3.4.0 - - '@secretlint/secretlint-rule-no-dotenv@10.2.2': - dependencies: - '@secretlint/types': 10.2.2 - - '@secretlint/secretlint-rule-preset-recommend@10.2.2': {} - - '@secretlint/source-creator@10.2.2': - dependencies: - '@secretlint/types': 10.2.2 - istextorbinary: 9.5.0 - - '@secretlint/types@10.2.2': {} - '@shikijs/core@4.4.1': dependencies: '@shikijs/primitive': 4.4.1 @@ -11302,8 +10707,6 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@smithy/core@3.29.5': dependencies: '@smithy/types': 4.16.1 @@ -11469,35 +10872,6 @@ snapshots: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@textlint/ast-node-types@15.7.1': {} - - '@textlint/linter-formatter@15.7.1': - dependencies: - '@azu/format-text': 1.0.2 - '@azu/style-format': 1.0.1 - '@textlint/module-interop': 15.7.1 - '@textlint/resolver': 15.7.1 - '@textlint/types': 15.7.1 - chalk: 4.1.2 - debug: 4.4.3(supports-color@8.1.1) - js-yaml: 4.3.0 - lodash: 4.18.1 - pluralize: 2.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - table: 6.9.0 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - '@textlint/module-interop@15.7.1': {} - - '@textlint/resolver@15.7.1': {} - - '@textlint/types@15.7.1': - dependencies: - '@textlint/ast-node-types': 15.7.1 - '@ts-morph/common@0.29.0': dependencies: minimatch: 10.2.3 @@ -11707,8 +11081,6 @@ snapshots: dependencies: '@types/node': 26.1.2 - '@types/normalize-package-data@2.4.4': {} - '@types/react-dom@19.2.4(@types/react@19.2.18)': dependencies: '@types/react': 19.2.18 @@ -11721,8 +11093,6 @@ snapshots: dependencies: '@types/node': 26.1.2 - '@types/sarif@2.1.7': {} - '@types/set-cookie-parser@2.4.10': dependencies: '@types/node': 26.1.2 @@ -11742,8 +11112,6 @@ snapshots: '@types/unist@3.0.3': {} - '@types/vscode@1.125.0': {} - '@types/webidl-conversions@7.0.3': {} '@types/whatwg-mimetype@3.0.2': @@ -11882,81 +11250,6 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@vscode/vsce-sign-alpine-arm64@2.0.6': - optional: true - - '@vscode/vsce-sign-alpine-x64@2.0.6': - optional: true - - '@vscode/vsce-sign-darwin-arm64@2.0.6': - optional: true - - '@vscode/vsce-sign-darwin-x64@2.0.6': - optional: true - - '@vscode/vsce-sign-linux-arm64@2.0.6': - optional: true - - '@vscode/vsce-sign-linux-arm@2.0.6': - optional: true - - '@vscode/vsce-sign-linux-x64@2.0.6': - optional: true - - '@vscode/vsce-sign-win32-arm64@2.0.6': - optional: true - - '@vscode/vsce-sign-win32-x64@2.0.6': - optional: true - - '@vscode/vsce-sign@2.0.9': - optionalDependencies: - '@vscode/vsce-sign-alpine-arm64': 2.0.6 - '@vscode/vsce-sign-alpine-x64': 2.0.6 - '@vscode/vsce-sign-darwin-arm64': 2.0.6 - '@vscode/vsce-sign-darwin-x64': 2.0.6 - '@vscode/vsce-sign-linux-arm': 2.0.6 - '@vscode/vsce-sign-linux-arm64': 2.0.6 - '@vscode/vsce-sign-linux-x64': 2.0.6 - '@vscode/vsce-sign-win32-arm64': 2.0.6 - '@vscode/vsce-sign-win32-x64': 2.0.6 - - '@vscode/vsce@3.9.2': - dependencies: - '@azure/identity': 4.13.1 - '@secretlint/node': 10.2.2 - '@secretlint/secretlint-formatter-sarif': 10.2.2 - '@secretlint/secretlint-rule-no-dotenv': 10.2.2 - '@secretlint/secretlint-rule-preset-recommend': 10.2.2 - '@vscode/vsce-sign': 2.0.9 - azure-devops-node-api: 12.5.0 - chalk: 4.1.2 - cheerio: 1.2.0 - cockatiel: 3.2.1 - commander: 12.1.0 - form-data: 4.0.6 - glob: 13.0.6 - hosted-git-info: 4.1.0 - jsonc-parser: 3.3.1 - leven: 3.1.0 - markdown-it: 14.3.0 - mime: 1.6.0 - minimatch: 10.2.3 - parse-semver: 1.1.1 - read: 1.0.7 - secretlint: 10.2.2 - semver: 7.8.5 - tmp: 0.2.7 - typed-rest-client: 1.8.11 - url-join: 4.0.1 - xml2js: 0.5.0 - yauzl: 3.4.0 - yazl: 2.5.1 - optionalDependencies: - keytar: 7.9.0 - transitivePeerDependencies: - - supports-color - '@workflow/serde@4.1.0': {} '@xmldom/is-dom-node@1.0.1': {} @@ -12049,14 +11342,8 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -12135,8 +11422,6 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 - astral-regex@2.0.0: {} - astring@1.9.0: {} async-mutex@0.5.0: @@ -12145,17 +11430,10 @@ snapshots: async@3.2.6: {} - asynckit@0.4.0: {} - aws-ssl-profiles@1.1.2: {} axobject-query@4.1.0: {} - azure-devops-node-api@12.5.0: - dependencies: - tunnel: 0.0.6 - typed-rest-client: 1.8.11 - b4a@1.8.1: {} bail@2.0.2: {} @@ -12262,10 +11540,6 @@ snapshots: buffers: 0.1.1 chainsaw: 0.1.0 - binaryextensions@6.11.0: - dependencies: - editions: 6.22.0 - bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -12300,10 +11574,6 @@ snapshots: transitivePeerDependencies: - supports-color - boolbase@1.0.0: {} - - boundary@2.0.0: {} - bowser@2.14.1: {} brace-expansion@5.0.9: @@ -12374,13 +11644,6 @@ snapshots: dependencies: traverse: 0.3.9 - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.6.2: {} - chalk@6.0.0: {} character-entities-html4@2.1.0: {} @@ -12393,29 +11656,6 @@ snapshots: chardet@2.2.0: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.2.0: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.1.0 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 7.29.0 - whatwg-mimetype: 4.0.0 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -12457,8 +11697,6 @@ snapshots: cnfast@0.1.0: {} - cockatiel@3.2.1: {} - code-block-writer@13.0.3: {} collapse-white-space@2.1.0: {} @@ -12471,16 +11709,10 @@ snapshots: colorette@2.0.19: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - comma-separated-tokens@2.0.3: {} commander@10.0.1: {} - commander@12.1.0: {} - commander@15.0.0: {} commander@4.1.1: {} @@ -12552,21 +11784,11 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - css-tree@3.2.1: dependencies: mdn-data: 2.27.1 source-map-js: 1.2.1 - css-what@6.2.2: {} - csstype@3.2.3: {} cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.0): @@ -12803,8 +12025,6 @@ snapshots: dependencies: robust-predicates: 3.0.3 - delayed-stream@1.0.0: {} - denque@2.1.0: {} depd@2.0.0: {} @@ -12831,28 +12051,10 @@ snapshots: dom-accessibility-api@0.5.16: {} - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - dompurify@3.4.12: optionalDependencies: '@types/trusted-types': 2.0.7 - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dotenv-flow@4.1.0: dependencies: dotenv: 16.6.1 @@ -12873,10 +12075,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - editions@6.22.0: - dependencies: - version-range: 4.15.0 - ee-first@1.1.1: {} ejs@3.1.10: @@ -12887,11 +12085,6 @@ snapshots: encodeurl@2.0.0: {} - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -12906,16 +12099,13 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - entities@4.5.0: {} - entities@6.0.1: {} - entities@7.0.1: {} + entities@7.0.1: + optional: true entities@8.0.0: {} - environment@1.1.0: {} - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -12926,13 +12116,6 @@ snapshots: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - es-toolkit@1.49.0: {} esast-util-from-estree@2.0.0: @@ -13312,14 +12495,6 @@ snapshots: optionalDependencies: debug: 4.4.3(supports-color@8.1.1) - form-data@4.0.6: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.4 - mime-types: 2.1.35 - forwarded@0.2.0: {} framer-motion@12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): @@ -13335,12 +12510,6 @@ snapshots: fs-constants@1.0.0: {} - fs-extra@11.3.6: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -13542,15 +12711,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.6 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -13578,10 +12738,6 @@ snapshots: has-symbols@1.1.0: {} - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -13702,10 +12858,6 @@ snapshots: hono@4.12.34: {} - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -13720,13 +12872,6 @@ snapshots: html-void-elements@3.0.0: {} - htmlparser2@10.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 7.0.1 - http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -13763,8 +12908,6 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.6: {} - immediate@3.0.6: {} import-meta-resolve@4.2.0: {} @@ -13773,8 +12916,6 @@ snapshots: indent-string@4.0.0: {} - index-to-position@1.2.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -13905,12 +13046,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - istextorbinary@9.5.0: - dependencies: - binaryextensions: 6.11.0 - editions: 6.22.0 - textextensions: 6.11.0 - jake@10.9.4: dependencies: async: 3.2.6 @@ -13982,20 +13117,10 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: {} - - jsonc-parser@3.3.1: {} - jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.2.1: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsonwebtoken@9.0.3: dependencies: jws: 4.0.1 @@ -14031,12 +13156,6 @@ snapshots: dependencies: commander: 8.3.0 - keytar@7.9.0: - dependencies: - node-addon-api: 4.3.0 - prebuild-install: 7.1.3 - optional: true - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -14077,8 +13196,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - leven@3.1.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -14205,10 +13322,6 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.2: - dependencies: - uc.micro: 2.1.0 - listenercount@1.0.1: {} load-tsconfig@0.2.5: {} @@ -14259,8 +13372,6 @@ snapshots: lodash.startcase@4.4.0: {} - lodash.truncate@4.4.2: {} - lodash.union@4.6.0: {} lodash.uniq@4.5.0: {} @@ -14275,10 +13386,6 @@ snapshots: lru-cache@11.5.2: {} - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lru.min@1.1.4: {} lucide-react@1.28.0(react@19.2.8): @@ -14311,15 +13418,6 @@ snapshots: markdown-extensions@2.0.0: {} - markdown-it@14.3.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.2 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - markdown-table@3.0.4: {} marked@16.4.2: {} @@ -14491,8 +13589,6 @@ snapshots: mdn-data@2.27.1: {} - mdurl@2.0.0: {} - media-typer@1.1.1: {} memory-pager@1.5.0: {} @@ -14794,20 +13890,12 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - mime-db@1.52.0: {} - mime-db@1.54.0: {} - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - mime-types@3.0.2: dependencies: mime-db: 1.54.0 - mime@1.6.0: {} - mimic-response@3.1.0: optional: true @@ -14950,8 +14038,6 @@ snapshots: - '@types/node' optional: true - mute-stream@0.0.8: {} - mute-stream@3.0.0: optional: true @@ -15035,28 +14121,14 @@ snapshots: semver: 7.8.5 optional: true - node-addon-api@4.3.0: - optional: true - node-addon-api@8.9.1: {} node-rsa@1.1.1: dependencies: asn1: 0.2.6 - node-sarif-builder@3.4.0: - dependencies: - '@types/sarif': 2.1.7 - fs-extra: 11.3.6 - nodemailer@9.0.3: {} - normalize-package-data@6.0.2: - dependencies: - hosted-git-info: 7.0.2 - semver: 7.8.5 - validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} npm-package-arg@11.0.3: @@ -15074,10 +14146,6 @@ snapshots: npm@11.18.0: {} - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -15145,8 +14213,6 @@ snapshots: p-map@2.1.0: {} - p-map@7.0.5: {} - p-try@2.2.0: {} package-manager-detector@0.2.11: @@ -15167,25 +14233,6 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.29.7 - index-to-position: 1.2.0 - type-fest: 4.41.0 - - parse-semver@1.1.1: - dependencies: - semver: 5.7.2 - - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.3.0 - parse5@7.3.0: dependencies: entities: 6.0.1 @@ -15224,8 +14271,6 @@ snapshots: path-type@4.0.0: {} - path-type@6.0.0: {} - pathe@2.0.3: {} pend@1.2.0: {} @@ -15299,10 +14344,6 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - pluralize@2.0.0: {} - - pluralize@8.0.0: {} - points-on-curve@0.2.0: {} points-on-path@0.2.1: @@ -15382,8 +14423,6 @@ snapshots: once: 1.4.0 optional: true - punycode.js@2.3.1: {} - punycode@2.3.1: {} pure-rand@8.4.2: {} @@ -15418,15 +14457,6 @@ snapshots: iconv-lite: 0.7.3 unpipe: 1.0.0 - rc-config-loader@4.1.4: - dependencies: - debug: 4.4.3(supports-color@8.1.1) - js-yaml: 4.3.0 - json5: 2.2.3 - require-from-string: 2.0.2 - transitivePeerDependencies: - - supports-color - rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -15471,14 +14501,6 @@ snapshots: react@19.2.8: {} - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.3.0 - type-fest: 4.41.0 - unicorn-magic: 0.1.0 - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -15486,10 +14508,6 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - read@1.0.7: - dependencies: - mute-stream: 0.0.8 - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -15757,8 +14775,6 @@ snapshots: xml-escape: 1.1.0 xpath: 0.0.34 - sax@1.6.0: {} - saxes@5.0.1: dependencies: xmlchars: 2.2.0 @@ -15773,20 +14789,6 @@ snapshots: dependencies: compute-scroll-into-view: 3.1.1 - secretlint@10.2.2: - dependencies: - '@secretlint/config-creator': 10.2.2 - '@secretlint/formatter': 10.2.2 - '@secretlint/node': 10.2.2 - '@secretlint/profiler': 10.2.2 - debug: 4.4.3(supports-color@8.1.1) - globby: 14.1.0 - read-pkg: 9.0.1 - transitivePeerDependencies: - - supports-color - - semver@5.7.2: {} - semver@6.3.1: {} semver@7.8.5: {} @@ -15925,14 +14927,6 @@ snapshots: slash@3.0.0: {} - slash@5.1.0: {} - - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - smart-buffer@4.2.0: optional: true @@ -15957,20 +14951,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.23 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.23 - - spdx-license-ids@3.0.23: {} - split2@4.2.0: {} sprintf-js@1.0.3: {} @@ -16024,10 +15004,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.2.2 - strip-bom@3.0.0: {} strip-json-comments@2.0.1: @@ -16037,10 +15013,6 @@ snapshots: dependencies: anynum: 1.0.1 - structured-source@4.0.0: - dependencies: - boundary: 2.0.0 - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -16074,11 +15046,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@3.2.0: - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} svelte@5.56.8(@typescript-eslint/types@8.65.0): @@ -16104,14 +15071,6 @@ snapshots: symbol-tree@3.2.4: {} - table@6.9.0: - dependencies: - ajv: 8.20.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - tagged-tag@1.0.0: optional: true @@ -16182,23 +15141,12 @@ snapshots: term-size@2.2.1: {} - terminal-link@4.0.0: - dependencies: - ansi-escapes: 7.3.0 - supports-hyperlinks: 3.2.0 - text-decoder@1.2.7: dependencies: b4a: 1.8.1 transitivePeerDependencies: - react-native-b4a - text-table@0.2.0: {} - - textextensions@6.11.0: - dependencies: - editions: 6.22.0 - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -16312,8 +15260,6 @@ snapshots: safe-buffer: 5.2.1 optional: true - tunnel@0.0.6: {} - turbo@2.10.7: optionalDependencies: '@turbo/darwin-64': 2.10.7 @@ -16329,8 +15275,6 @@ snapshots: type-fest@0.21.3: {} - type-fest@4.41.0: {} - type-fest@5.8.0: dependencies: tagged-tag: 1.0.0 @@ -16342,30 +15286,16 @@ snapshots: media-typer: 1.1.1 mime-types: 3.0.2 - typed-rest-client@1.8.11: - dependencies: - qs: 6.15.3 - tunnel: 0.0.6 - underscore: 1.13.8 - typescript@6.0.3: {} - uc.micro@2.1.0: {} - ufo@1.6.4: {} - underscore@1.13.8: {} - undici-types@8.3.0: {} undici@7.29.0: {} undici@8.9.0: {} - unicorn-magic@0.1.0: {} - - unicorn-magic@0.3.0: {} - unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -16410,8 +15340,6 @@ snapshots: universalify@0.1.2: {} - universalify@2.0.1: {} - unpipe@1.0.0: {} until-async@3.0.2: @@ -16434,8 +15362,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-join@4.0.1: {} - use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.2.8): dependencies: react: 19.2.8 @@ -16460,17 +15386,10 @@ snapshots: uuid@11.1.1: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.1: {} vary@1.1.2: {} - version-range@4.15.0: {} - vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -16542,15 +15461,9 @@ snapshots: webidl-conversions@8.0.1: {} - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-mimetype@3.0.0: optional: true - whatwg-mimetype@4.0.0: {} - whatwg-mimetype@5.0.0: {} whatwg-url@14.2.0: @@ -16621,15 +15534,8 @@ snapshots: xml-naming@0.3.0: {} - xml2js@0.5.0: - dependencies: - sax: 1.6.0 - xmlbuilder: 11.0.1 - xml@1.0.1: {} - xmlbuilder@11.0.1: {} - xmlchars@2.2.0: {} xpath@0.0.32: {} @@ -16643,8 +15549,6 @@ snapshots: y18n@5.0.8: optional: true - yallist@4.0.0: {} - yallist@5.0.0: {} yaml@2.9.0: {} @@ -16669,10 +15573,6 @@ snapshots: dependencies: pend: 1.2.0 - yazl@2.5.1: - dependencies: - buffer-crc32: 0.2.13 - yocto-queue@0.1.0: {} yuku-analyzer@0.8.3: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6318a47754..24d6528c64 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -26,6 +26,12 @@ onlyBuiltDependencies: # - form-data: GHSA-hmw2-7cc7-3qxx (high) — CRLF injection via unescaped # multipart field names. Pulled 4.0.5 transitively through @vscode/vsce; # force the patched >=4.0.6 line. Fails `pnpm audit --audit-level=high` (CI). +# CONSUMER GONE (#5825): retiring packages/vscode-objectstack took @vscode/vsce +# with it, and form-data no longer resolves anywhere in the tree — this +# selector now matches nothing. Kept as defense-in-depth so a future +# transitive reintroduction lands on the patched line instead of silently +# re-arming the advisory; dropping a security pin is its own decision, not a +# rider on a package retirement. Retire it deliberately or not at all. # - undici: GHSA-vmh5-mc38-953g (high) — TLS cert validation bypass via # dropped requestTls in SOCKS5 ProxyAgent. Pulled 7.27.2 through # @vscode/vsce > cheerio (declares undici ^7.19.0); force the patched @@ -37,6 +43,11 @@ onlyBuiltDependencies: # an exclusive upper bound stops covering the very version it pinned once # that version is itself flagged, so the selector AND the target must move # together — same shape as the brace-expansion 5.0.8 → 5.0.9 lift (#4945). +# CONSUMER GONE (#5825): cheerio came in only through @vscode/vsce, which +# left with packages/vscode-objectstack. The two undici copies that remain — +# @ai-sdk/provider-utils' 7.29.0 and jsdom's 8.9.0 — are both OUTSIDE this +# selector's `<7.29.0` bound, so it now matches nothing. Kept as +# defense-in-depth on the same reasoning as form-data above. # Still transitive-only via cheerio; @ai-sdk/provider-utils already resolves # 7.29.0, so the two dedupe. jsdom's undici 8.9.0 is outside the selector # and unaffected. @@ -119,7 +130,8 @@ overrides: # brace-expansion GHSA-mh99-v99m-4gvg (via minimatch@10.x), then GHSA-rgw5-rvv9-x895 # (7.5 high) which affects 5.0.8 itself — the version the first pin landed on — so the # bound moves to <5.0.9. Still transitive-only through minimatch (ts-morph, eslint, - # @typescript-eslint, glob, @vscode/vsce, archiver); sharp GHSA-f88m-g3jw-g9cj + # @typescript-eslint, glob, archiver — @vscode/vsce left with #5825's retirement, + # the rest still pull it, so this pin stays live); sharp GHSA-f88m-g3jw-g9cj # (next optionalDep ^0.34.5 excludes the fix); react-router GHSA-qwww-vcr4-c8h2 has no # 7.x fix — fumadocs-core peer allows 8.x and docs uses the next adapter, so jump to 8; # @sveltejs/kit GHSA-866w-xmhq-wj7x/GHSA-wqjv-9729-c5q2 (better-auth optional peer); diff --git a/scripts/publish-smoke-pack.mjs b/scripts/publish-smoke-pack.mjs index 3bf3f8d61a..56981e0289 100644 --- a/scripts/publish-smoke-pack.mjs +++ b/scripts/publish-smoke-pack.mjs @@ -28,8 +28,7 @@ const execFileP = promisify(execFile); // Not consumed as npm dependencies by a scaffolded project: // create-objectstack — the scaffolder itself; the smoke runs it straight // from the repo's built bin, and no @objectstack/* manifest depends on it. -// objectstack-vscode — a VS Code extension (vsce-packaged), not an npm lib. -const EXCLUDE = new Set(['create-objectstack', 'objectstack-vscode']); +const EXCLUDE = new Set(['create-objectstack']); const CONCURRENCY = 8;