diff --git a/docusaurus/docs/how-to-guides/schema-variants.mdx b/docusaurus/docs/how-to-guides/schema-variants.mdx
new file mode 100644
index 00000000..24958c0b
--- /dev/null
+++ b/docusaurus/docs/how-to-guides/schema-variants.mdx
@@ -0,0 +1,123 @@
+import WorkInProgressNotice from '@site/src/components/WorkInProgressNotice';
+
+# How to Use Schema Variants
+
+
+
+**Validate partial objects or derive custom schemas from ATT&CK object types**
+
+When working with ATT&CK data, you don't always have complete objects. You may be validating draft content, processing incremental updates, or building a UI that only needs a subset of fields. This guide shows you how to use the different schema tiers to handle these scenarios.
+
+## Problem
+
+You need to:
+
+- Validate ATT&CK objects that are missing some required fields (e.g., drafts or patches)
+- Create a custom schema using only a subset of an object's fields
+- Call `.partial()`, `.pick()`, or `.omit()` on an ATT&CK schema without getting a runtime error
+
+## Background
+
+ATT&CK schemas include **refinements** — cross-field business rules like _"the first alias must match the object's name"_ — that run after the basic shape validation. Zod [does not allow](https://github.com/colinhacks/zod/releases/tag/v4.3.0) `.partial()`, `.pick()`, or `.omit()` on schemas containing refinements because these operations change the input type, potentially invalidating the original refinement logic.
+
+To support these operations, each ATT&CK object type exports up to three schema tiers:
+
+| Tier | Example | Description |
+|------|---------|-------------|
+| **Full** | `campaignSchema` | Complete validation with refinements. Use for validating final, complete objects. |
+| **Base** | `campaignBaseSchema` | Shape-only, no refinements. Supports `.partial()`, `.pick()`, `.omit()`. |
+| **Partial** | `campaignPartialSchema` | Pre-built partial schema with partial-safe refinements. |
+
+For more on why this design exists, see [Schema Design Principles](/docs/principles/schema-design#schema-tiers).
+
+## Solution 1: Validate Partial Objects
+
+Use the pre-built partial schema to validate incomplete ATT&CK objects:
+
+```typescript
+import { campaignPartialSchema } from '@mitre-attack/attack-data-model';
+
+// Validate a draft campaign with only some fields populated
+const draft = {
+ type: 'campaign',
+ id: 'campaign--d0c9aeb2-4aa4-4860-85e4-3348a37b03c7',
+ name: 'Operation Dream Job',
+ spec_version: '2.1',
+ created: '2024-01-15T00:00:00.000Z',
+ modified: '2024-01-15T00:00:00.000Z',
+};
+
+const result = campaignPartialSchema.safeParse(draft);
+
+if (result.success) {
+ console.log('Draft is valid so far');
+} else {
+ console.error('Validation issues:', result.error.issues);
+}
+```
+
+The partial schema makes all fields optional but still applies refinements where possible. For example, if `aliases` is present, the first alias must still match the object's `name`.
+
+## Solution 2: Derive a Custom Schema
+
+Use the base schema to create your own derived schemas with `.partial()`, `.pick()`, or `.omit()`:
+
+```typescript
+import { campaignBaseSchema } from '@mitre-attack/attack-data-model';
+
+// Pick only the fields you need
+const campaignSummarySchema = campaignBaseSchema.pick({
+ id: true,
+ name: true,
+ description: true,
+ aliases: true,
+ first_seen: true,
+ last_seen: true,
+});
+
+// Omit specific fields
+const campaignWithoutCitationsSchema = campaignBaseSchema.omit({
+ x_mitre_first_seen_citation: true,
+ x_mitre_last_seen_citation: true,
+});
+
+// Create your own partial variant
+const myPartialCampaign = campaignBaseSchema.partial();
+```
+
+:::caution
+Schemas derived from `campaignBaseSchema` do **not** include refinements (cross-field validation rules). If you need refinements on your custom schema, you must re-apply them with `.check()`.
+:::
+
+## Solution 3: Validate a Batch with Mixed Completeness
+
+When processing data that may include both complete and incomplete objects, choose the appropriate schema dynamically:
+
+```typescript
+import {
+ campaignSchema,
+ campaignPartialSchema,
+} from '@mitre-attack/attack-data-model';
+
+function validateCampaign(data: unknown, strict: boolean) {
+ const schema = strict ? campaignSchema : campaignPartialSchema;
+ return schema.safeParse(data);
+}
+```
+
+## Available Schema Tiers by Object Type
+
+Not all object types export all three tiers. The following object types support base and partial schemas:
+
+| Object Type | Full Schema | Base Schema | Partial Schema |
+|-------------|-----------|-------------|----------------|
+| Campaign | `campaignSchema` | `campaignBaseSchema` | `campaignPartialSchema` |
+| Group | `groupSchema` | `groupBaseSchema` | `groupPartialSchema` |
+| Malware | `malwareSchema` | `malwareBaseSchema` | `malwarePartialSchema` |
+| Tool | `toolSchema` | `toolBaseSchema` | `toolPartialSchema` |
+| Technique | `techniqueSchema` | `techniqueBaseSchema` | `techniquePartialSchema` |
+| Relationship | `relationshipSchema` | `relationshipBaseSchema` | `relationshipPartialSchema` |
+
+Object types that don't have refinements (e.g., `tacticSchema`, `identitySchema`) only export a single full schema. Since they have no refinements, you can call `.partial()`, `.pick()`, and `.omit()` directly on them.
+
+---
diff --git a/docusaurus/docs/principles/schema-design.mdx b/docusaurus/docs/principles/schema-design.mdx
index 3532a267..ea82aa01 100644
--- a/docusaurus/docs/principles/schema-design.mdx
+++ b/docusaurus/docs/principles/schema-design.mdx
@@ -62,3 +62,43 @@ which itself composes ATT&CK-specific rules on top of the STIX core.
The following interactive diagram shows how different ATT&CK STIX object types relate to each other. Hover over or click any node to explore its connections.
+
+---
+
+## Schema Tiers
+
+Each ATT&CK object type that supports [refinements](https://zod.dev/refinements) exports up to three schema tiers,
+each serving a different purpose:
+
+```text
+┌─────────────────────────────────────────────────────────────┐
+│ campaignSchema (full validation) │
+│ ├── Object shape (fields, types, strictness) │
+│ └── Refinements (cross-field business rules) │
+└─────────────────────────────────────────────────────────────┘
+ ▲
+┌─────────────────────────────────────────────────────────────┐
+│ campaignBaseSchema (shape only, no refinements) │
+│ └── Supports .partial(), .pick(), .omit() │
+└─────────────────────────────────────────────────────────────┘
+ ▲
+┌─────────────────────────────────────────────────────────────┐
+│ campaignPartialSchema (all fields optional) │
+│ ├── Derived from base via .partial() │
+│ └── Refinements re-applied (partial-safe) │
+└─────────────────────────────────────────────────────────────┘
+```
+
+| Tier | Example | Refinements | Use case |
+|------|---------|-------------|----------|
+| **Full** | `campaignSchema` | Yes | Validating complete ATT&CK objects |
+| **Base** | `campaignBaseSchema` | No | Deriving custom schemas via `.partial()`, `.pick()`, `.omit()` |
+| **Partial** | `campaignPartialSchema` | Yes (partial-safe) | Validating incomplete or draft objects |
+
+### Why base schemas exist
+
+Zod [does not allow](https://github.com/colinhacks/zod/releases/tag/v4.3.0) `.partial()`, `.pick()`, or `.omit()` on schemas that contain refinements,
+because these operations change the input type and the original refinement may no longer be valid.
+Base schemas provide the object shape without refinements, so you can safely derive custom schemas from them.
+
+See the [Schema Variants](/docs/how-to-guides/schema-variants) how-to guide for practical usage examples.
diff --git a/docusaurus/sidebars.ts b/docusaurus/sidebars.ts
index ecca6cbf..61d357db 100644
--- a/docusaurus/sidebars.ts
+++ b/docusaurus/sidebars.ts
@@ -27,6 +27,7 @@ const sidebars: SidebarsConfig = {
items: [
'how-to-guides/manage-data-sources',
'how-to-guides/validate-bundles',
+ 'how-to-guides/schema-variants',
'how-to-guides/error-handling',
'how-to-guides/performance',
],
diff --git a/package-lock.json b/package-lock.json
index 0f1375c1..fe757989 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"dependencies": {
"axios": "^1.9.0",
"uuid": "^10.0.0",
- "zod": "^4.0.5"
+ "zod": "^4.3.6"
},
"devDependencies": {
"@commitlint/cli": "^19.8.1",
@@ -54,13 +54,13 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
+ "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -96,13 +96,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
+ "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.5"
+ "@babel/types": "^7.28.6"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -112,9 +112,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
+ "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -846,9 +846,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
- "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1672,9 +1672,9 @@
"license": "ISC"
},
"node_modules/@pnpm/npm-conf": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz",
- "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1687,9 +1687,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz",
- "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz",
+ "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==",
"cpu": [
"arm"
],
@@ -1701,9 +1701,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz",
- "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz",
+ "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==",
"cpu": [
"arm64"
],
@@ -1715,9 +1715,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz",
- "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz",
+ "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==",
"cpu": [
"arm64"
],
@@ -1729,9 +1729,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz",
- "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz",
+ "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==",
"cpu": [
"x64"
],
@@ -1743,9 +1743,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz",
- "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz",
+ "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==",
"cpu": [
"arm64"
],
@@ -1757,9 +1757,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz",
- "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz",
+ "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==",
"cpu": [
"x64"
],
@@ -1771,9 +1771,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz",
- "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz",
+ "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==",
"cpu": [
"arm"
],
@@ -1785,9 +1785,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz",
- "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz",
+ "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==",
"cpu": [
"arm"
],
@@ -1799,9 +1799,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz",
- "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz",
+ "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==",
"cpu": [
"arm64"
],
@@ -1813,9 +1813,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz",
- "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz",
+ "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==",
"cpu": [
"arm64"
],
@@ -1827,9 +1827,23 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz",
- "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz",
+ "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz",
+ "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==",
"cpu": [
"loong64"
],
@@ -1841,9 +1855,23 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz",
- "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz",
+ "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz",
+ "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==",
"cpu": [
"ppc64"
],
@@ -1855,9 +1883,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz",
- "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz",
+ "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==",
"cpu": [
"riscv64"
],
@@ -1869,9 +1897,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz",
- "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz",
+ "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==",
"cpu": [
"riscv64"
],
@@ -1883,9 +1911,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz",
- "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz",
+ "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==",
"cpu": [
"s390x"
],
@@ -1897,9 +1925,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz",
- "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz",
+ "integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==",
"cpu": [
"x64"
],
@@ -1911,9 +1939,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz",
- "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz",
+ "integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==",
"cpu": [
"x64"
],
@@ -1924,10 +1952,24 @@
"linux"
]
},
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz",
+ "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz",
- "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz",
+ "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==",
"cpu": [
"arm64"
],
@@ -1939,9 +1981,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz",
- "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz",
+ "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==",
"cpu": [
"arm64"
],
@@ -1953,9 +1995,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz",
- "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz",
+ "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==",
"cpu": [
"ia32"
],
@@ -1967,9 +2009,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz",
- "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz",
+ "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==",
"cpu": [
"x64"
],
@@ -1981,9 +2023,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz",
- "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz",
+ "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==",
"cpu": [
"x64"
],
@@ -2666,9 +2708,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "25.0.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
- "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
+ "version": "25.0.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz",
+ "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2704,20 +2746,20 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz",
- "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz",
+ "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.50.0",
- "@typescript-eslint/type-utils": "8.50.0",
- "@typescript-eslint/utils": "8.50.0",
- "@typescript-eslint/visitor-keys": "8.50.0",
- "ignore": "^7.0.0",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.53.1",
+ "@typescript-eslint/type-utils": "8.53.1",
+ "@typescript-eslint/utils": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1",
+ "ignore": "^7.0.5",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.1.0"
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2727,7 +2769,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.50.0",
+ "@typescript-eslint/parser": "^8.53.1",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@@ -2743,17 +2785,17 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz",
- "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz",
+ "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.50.0",
- "@typescript-eslint/types": "8.50.0",
- "@typescript-eslint/typescript-estree": "8.50.0",
- "@typescript-eslint/visitor-keys": "8.50.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/scope-manager": "8.53.1",
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2768,15 +2810,15 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz",
- "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz",
+ "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.50.0",
- "@typescript-eslint/types": "^8.50.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/tsconfig-utils": "^8.53.1",
+ "@typescript-eslint/types": "^8.53.1",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2790,14 +2832,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz",
- "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz",
+ "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.50.0",
- "@typescript-eslint/visitor-keys": "8.50.0"
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2808,9 +2850,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz",
- "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz",
+ "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2825,17 +2867,17 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz",
- "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz",
+ "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.50.0",
- "@typescript-eslint/typescript-estree": "8.50.0",
- "@typescript-eslint/utils": "8.50.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.1.0"
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1",
+ "@typescript-eslint/utils": "8.53.1",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2850,9 +2892,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz",
- "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz",
+ "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2864,21 +2906,21 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz",
- "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz",
+ "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.50.0",
- "@typescript-eslint/tsconfig-utils": "8.50.0",
- "@typescript-eslint/types": "8.50.0",
- "@typescript-eslint/visitor-keys": "8.50.0",
- "debug": "^4.3.4",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
+ "@typescript-eslint/project-service": "8.53.1",
+ "@typescript-eslint/tsconfig-utils": "8.53.1",
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1",
+ "debug": "^4.4.3",
+ "minimatch": "^9.0.5",
+ "semver": "^7.7.3",
"tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.1.0"
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2918,16 +2960,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz",
- "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz",
+ "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.50.0",
- "@typescript-eslint/types": "8.50.0",
- "@typescript-eslint/typescript-estree": "8.50.0"
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.53.1",
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2942,13 +2984,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz",
- "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz",
+ "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/types": "8.53.1",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -3263,9 +3305,9 @@
}
},
"node_modules/ast-v8-to-istanbul": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.9.tgz",
- "integrity": "sha512-dSC6tJeOJxbZrPzPbv5mMd6CMiQ1ugaVXXPRad2fXUSsy1kstFn9XQWemV9VW7Y7kpxgQ/4WMoZfwdH8XSU48w==",
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.10.tgz",
+ "integrity": "sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3281,9 +3323,9 @@
"license": "MIT"
},
"node_modules/axios": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.3.tgz",
+ "integrity": "sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -3499,9 +3541,9 @@
}
},
"node_modules/check-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
- "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
+ "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4083,9 +4125,9 @@
}
},
"node_modules/decode-named-character-reference": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
- "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+ "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4157,9 +4199,9 @@
}
},
"node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
+ "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -4693,14 +4735,14 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz",
- "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz",
+ "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.11.7"
+ "prettier-linter-helpers": "^1.0.1",
+ "synckit": "^0.11.12"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -4917,9 +4959,9 @@
}
},
"node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -5132,9 +5174,9 @@
"license": "BSD-3-Clause"
},
"node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -6490,16 +6532,16 @@
}
},
"node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash-es": {
- "version": "4.17.22",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz",
- "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
"dev": true,
"license": "MIT"
},
@@ -7767,9 +7809,9 @@
}
},
"node_modules/normalize-url": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz",
- "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==",
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz",
+ "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11115,9 +11157,9 @@
}
},
"node_modules/prettier-linter-helpers": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz",
+ "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11369,13 +11411,13 @@
}
},
"node_modules/registry-auth-token": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz",
- "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@pnpm/npm-conf": "^2.1.0"
+ "@pnpm/npm-conf": "^3.0.2"
},
"engines": {
"node": ">=14"
@@ -11491,9 +11533,9 @@
}
},
"node_modules/rollup": {
- "version": "4.53.5",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz",
- "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==",
+ "version": "4.56.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz",
+ "integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11507,28 +11549,31 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.53.5",
- "@rollup/rollup-android-arm64": "4.53.5",
- "@rollup/rollup-darwin-arm64": "4.53.5",
- "@rollup/rollup-darwin-x64": "4.53.5",
- "@rollup/rollup-freebsd-arm64": "4.53.5",
- "@rollup/rollup-freebsd-x64": "4.53.5",
- "@rollup/rollup-linux-arm-gnueabihf": "4.53.5",
- "@rollup/rollup-linux-arm-musleabihf": "4.53.5",
- "@rollup/rollup-linux-arm64-gnu": "4.53.5",
- "@rollup/rollup-linux-arm64-musl": "4.53.5",
- "@rollup/rollup-linux-loong64-gnu": "4.53.5",
- "@rollup/rollup-linux-ppc64-gnu": "4.53.5",
- "@rollup/rollup-linux-riscv64-gnu": "4.53.5",
- "@rollup/rollup-linux-riscv64-musl": "4.53.5",
- "@rollup/rollup-linux-s390x-gnu": "4.53.5",
- "@rollup/rollup-linux-x64-gnu": "4.53.5",
- "@rollup/rollup-linux-x64-musl": "4.53.5",
- "@rollup/rollup-openharmony-arm64": "4.53.5",
- "@rollup/rollup-win32-arm64-msvc": "4.53.5",
- "@rollup/rollup-win32-ia32-msvc": "4.53.5",
- "@rollup/rollup-win32-x64-gnu": "4.53.5",
- "@rollup/rollup-win32-x64-msvc": "4.53.5",
+ "@rollup/rollup-android-arm-eabi": "4.56.0",
+ "@rollup/rollup-android-arm64": "4.56.0",
+ "@rollup/rollup-darwin-arm64": "4.56.0",
+ "@rollup/rollup-darwin-x64": "4.56.0",
+ "@rollup/rollup-freebsd-arm64": "4.56.0",
+ "@rollup/rollup-freebsd-x64": "4.56.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.56.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.56.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.56.0",
+ "@rollup/rollup-linux-arm64-musl": "4.56.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.56.0",
+ "@rollup/rollup-linux-loong64-musl": "4.56.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.56.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.56.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.56.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.56.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.56.0",
+ "@rollup/rollup-linux-x64-gnu": "4.56.0",
+ "@rollup/rollup-linux-x64-musl": "4.56.0",
+ "@rollup/rollup-openbsd-x64": "4.56.0",
+ "@rollup/rollup-openharmony-arm64": "4.56.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.56.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.56.0",
+ "@rollup/rollup-win32-x64-gnu": "4.56.0",
+ "@rollup/rollup-win32-x64-msvc": "4.56.0",
"fsevents": "~2.3.2"
}
},
@@ -12369,9 +12414,9 @@
}
},
"node_modules/synckit": {
- "version": "0.11.11",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz",
- "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==",
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12395,9 +12440,9 @@
}
},
"node_modules/tempy": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
- "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.2.tgz",
+ "integrity": "sha512-pD3+21EbFZFBKDnVztX32wU6IBwkalOduWdx1OKvB5y6y1f2Xn8HU/U6o9EmlfdSyUYe9IybirmYPj/7rilA6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12693,9 +12738,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
- "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
+ "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12850,16 +12895,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.0.tgz",
- "integrity": "sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==",
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz",
+ "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.50.0",
- "@typescript-eslint/parser": "8.50.0",
- "@typescript-eslint/typescript-estree": "8.50.0",
- "@typescript-eslint/utils": "8.50.0"
+ "@typescript-eslint/eslint-plugin": "8.53.1",
+ "@typescript-eslint/parser": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1",
+ "@typescript-eslint/utils": "8.53.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -12874,9 +12919,9 @@
}
},
"node_modules/ufo": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
- "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz",
+ "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==",
"dev": true,
"license": "MIT"
},
@@ -12979,9 +13024,9 @@
}
},
"node_modules/unified-engine/node_modules/@types/node": {
- "version": "22.19.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz",
- "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==",
+ "version": "22.19.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz",
+ "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13131,9 +13176,9 @@
}
},
"node_modules/unist-util-visit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13394,9 +13439,9 @@
}
},
"node_modules/vite": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz",
- "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
+ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13865,18 +13910,18 @@
}
},
"node_modules/zod": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz",
- "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
+ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zod2md": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/zod2md/-/zod2md-0.2.4.tgz",
- "integrity": "sha512-P+12EKfWquooGSlkZ2RatVX9O8rrF7BvM8vlsrohOgvFM2NeGIS0VZQbkGNGLRI8sp82KTxxWG7H7JhRZhzHFg==",
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/zod2md/-/zod2md-0.2.5.tgz",
+ "integrity": "sha512-Ru9GVlkgpy3rRY9FIy1UQbyg6K168qtwojzlCwlWtoq4Swt7T5nUe87iJuhssy9m6M8jTpjSKe1I2b+15FMSfg==",
"dev": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index 660f6df8..d1fd3109 100644
--- a/package.json
+++ b/package.json
@@ -67,7 +67,7 @@
"dependencies": {
"axios": "^1.9.0",
"uuid": "^10.0.0",
- "zod": "^4.0.5"
+ "zod": "^4.3.6"
},
"devDependencies": {
"@commitlint/cli": "^19.8.1",
diff --git a/src/refinements/index.ts b/src/refinements/index.ts
index 5d3a3347..6fe63148 100644
--- a/src/refinements/index.ts
+++ b/src/refinements/index.ts
@@ -40,8 +40,8 @@ import {
* ```
*/
export function createFirstAliasRefinement() {
- return (ctx: z.core.ParsePayload<{ aliases?: Aliases; name: string }>): void => {
- if (ctx.value.aliases && ctx.value.aliases.length > 0) {
+ return (ctx: z.core.ParsePayload<{ aliases?: Aliases; name?: string }>): void => {
+ if (ctx.value.aliases && ctx.value.aliases.length > 0 && ctx.value.name) {
if (ctx.value.aliases[0] !== ctx.value.name) {
ctx.issues.push({
code: 'custom',
@@ -70,8 +70,8 @@ export function createFirstAliasRefinement() {
* ```
*/
export function createFirstXMitreAliasRefinement() {
- return (ctx: z.core.ParsePayload<{ x_mitre_aliases?: string[]; name: string }>): void => {
- if (ctx.value.x_mitre_aliases && ctx.value.x_mitre_aliases.length > 0) {
+ return (ctx: z.core.ParsePayload<{ x_mitre_aliases?: string[]; name?: string }>): void => {
+ if (ctx.value.x_mitre_aliases && ctx.value.x_mitre_aliases.length > 0 && ctx.value.name) {
if (ctx.value.x_mitre_aliases[0] !== ctx.value.name) {
ctx.issues.push({
code: 'custom',
@@ -102,7 +102,7 @@ export function createFirstXMitreAliasRefinement() {
export function createCitationsRefinement() {
return (
ctx: z.core.ParsePayload<{
- external_references: ExternalReferences;
+ external_references?: ExternalReferences;
x_mitre_first_seen_citation?: XMitreFirstSeenCitation;
x_mitre_last_seen_citation?: XMitreLastSeenCitation;
}>,
@@ -110,6 +110,10 @@ export function createCitationsRefinement() {
const { external_references, x_mitre_first_seen_citation, x_mitre_last_seen_citation } =
ctx.value;
+ if (!Array.isArray(external_references)) {
+ return;
+ }
+
// Helper function to extract citation names from a citation string
const extractCitationNames = (citations: string): string[] => {
const matches = citations.match(/\(Citation: ([^)]+)\)/g);
@@ -340,12 +344,13 @@ export function validateXMitreContentsReferences() {
// Validate each reference in x_mitre_contents
collectionContents.forEach((contentRef: { object_ref: string }, index: number) => {
- if (!objectIds.has(contentRef.object_ref)) {
+ const ref = contentRef.object_ref as AttackObject['id']; // assert type
+ if (!objectIds.has(ref)) {
ctx.issues.push({
code: 'custom',
- message: `STIX ID "${contentRef.object_ref}" referenced in x_mitre_contents is not present in the bundle's objects array`,
+ message: `STIX ID "${ref}" referenced in x_mitre_contents is not present in the bundle's objects array`,
path: ['objects', 0, 'x_mitre_contents', index, 'object_ref'],
- input: contentRef.object_ref,
+ input: ref,
});
}
});
@@ -362,14 +367,19 @@ export function createAttackIdInExternalReferencesRefinement() {
ctx: z.core.ParsePayload<
| Technique
| {
- external_references: ExternalReferences;
- x_mitre_is_subtechnique: XMitreIsSubtechnique;
+ external_references?: ExternalReferences;
+ x_mitre_is_subtechnique?: XMitreIsSubtechnique;
}
>,
): void => {
+ if (ctx.value.external_references === undefined) {
+ return;
+ }
+ if (ctx.value.x_mitre_is_subtechnique === undefined) {
+ return;
+ }
// Check if external_references exists and has at least one entry
if (
- !ctx.value.external_references ||
!Array.isArray(ctx.value.external_references) ||
ctx.value.external_references.length === 0
) {
@@ -446,7 +456,7 @@ export function createEnterpriseOnlyPropertiesRefinement() {
ctx: z.core.ParsePayload<
| Technique
| {
- x_mitre_domains: XMitreDomains;
+ x_mitre_domains?: XMitreDomains;
kill_chain_phases?: KillChainPhase[];
x_mitre_permissions_required?: XMitrePermissionsRequired;
x_mitre_effective_permissions?: XMitreEffectivePermissions;
@@ -458,6 +468,9 @@ export function createEnterpriseOnlyPropertiesRefinement() {
}
>,
): void => {
+ if (!Array.isArray(ctx.value.x_mitre_domains)) {
+ return;
+ }
// Helper variables for domain checks
const inEnterpriseDomain = ctx.value.x_mitre_domains.includes(
attackDomainSchema.enum['enterprise-attack'],
@@ -556,12 +569,15 @@ export function createMobileOnlyPropertiesRefinement() {
ctx: z.core.ParsePayload<
| Technique
| {
- x_mitre_domains: XMitreDomains;
+ x_mitre_domains?: XMitreDomains;
x_mitre_tactic_type?: XMitreTacticType;
x_mitre_data_sources?: XMitreDataSources;
}
>,
): void => {
+ if (!Array.isArray(ctx.value.x_mitre_domains)) {
+ return;
+ }
// Helper variables for domain checks
const inMobileDomain = ctx.value.x_mitre_domains.includes(
attackDomainSchema.enum['mobile-attack'],
diff --git a/src/schemas/sdo/campaign.schema.ts b/src/schemas/sdo/campaign.schema.ts
index 1ed698ca..ee4f4630 100644
--- a/src/schemas/sdo/campaign.schema.ts
+++ b/src/schemas/sdo/campaign.schema.ts
@@ -83,7 +83,7 @@ export type XMitreLastSeenCitation = z.infer {
- createFirstAliasRefinement()(ctx);
- createCitationsRefinement()(ctx);
- })
.meta({
description: `
Campaigns represent sets of adversary activities occurring over a specific time period with shared characteristics and objectives.
@@ -133,4 +129,14 @@ objects with additional temporal tracking fields.
`.trim(),
});
-export type Campaign = z.infer;
+export type Campaign = z.infer;
+export type CampaignPartial = Partial;
+
+const campaignChecks = (ctx: z.core.ParsePayload): void => {
+ createFirstAliasRefinement()(ctx);
+ createCitationsRefinement()(ctx);
+};
+
+export const campaignSchema = campaignBaseSchema.check(campaignChecks);
+
+export const campaignPartialSchema = campaignBaseSchema.partial().check(campaignChecks);
diff --git a/src/schemas/sdo/group.schema.ts b/src/schemas/sdo/group.schema.ts
index bed8a26d..353b0c3f 100644
--- a/src/schemas/sdo/group.schema.ts
+++ b/src/schemas/sdo/group.schema.ts
@@ -17,7 +17,7 @@ import {
} from '../common/property-schemas/index.js';
// Group Schema
-export const groupSchema = attackBaseDomainObjectSchema
+export const groupBaseSchema = attackBaseDomainObjectSchema
.extend({
id: createStixIdValidator('intrusion-set'),
@@ -73,9 +73,6 @@ export const groupSchema = attackBaseDomainObjectSchema
}),
})
.strict()
- .check((ctx) => {
- createFirstAliasRefinement()(ctx);
- })
.meta({
description: `
Groups represent clusters of adversary activity with shared characteristics, tools, tactics, or infrastructure.
@@ -84,4 +81,13 @@ objects and strictly follow the STIX 2.1 specification without additional custom
`.trim(),
});
-export type Group = z.infer;
+export type Group = z.infer;
+export type GroupPartial = Partial;
+
+const groupChecks = (ctx: z.core.ParsePayload): void => {
+ createFirstAliasRefinement()(ctx);
+};
+
+export const groupSchema = groupBaseSchema.check(groupChecks);
+
+export const groupPartialSchema = groupBaseSchema.partial().check(groupChecks);
diff --git a/src/schemas/sdo/index.ts b/src/schemas/sdo/index.ts
index 31d171c2..99bc60b8 100644
--- a/src/schemas/sdo/index.ts
+++ b/src/schemas/sdo/index.ts
@@ -12,10 +12,13 @@ export {
} from './asset.schema.js';
export {
+ campaignBaseSchema,
campaignSchema,
+ campaignPartialSchema,
xMitreFirstSeenCitationSchema,
xMitreLastSeenCitationSchema,
type Campaign,
+ type CampaignPartial,
type XMitreFirstSeenCitation,
type XMitreLastSeenCitation,
} from './campaign.schema.js';
@@ -38,7 +41,13 @@ export {
export { detectionStrategySchema, type DetectionStrategy } from './detection-strategy.schema.js';
-export { groupSchema, type Group } from './group.schema.js';
+export {
+ groupBaseSchema,
+ groupSchema,
+ groupPartialSchema,
+ type Group,
+ type GroupPartial,
+} from './group.schema.js';
export { identitySchema, type Identity } from './identity.schema.js';
@@ -49,7 +58,15 @@ export {
type XMitreCollectionLayers,
} from './data-source.schema.js';
-export { stixArtifactType, stixFileType, malwareSchema, type Malware } from './malware.schema.js';
+export {
+ stixArtifactType,
+ stixFileType,
+ malwareBaseSchema,
+ malwareSchema,
+ malwarePartialSchema,
+ type Malware,
+ type MalwarePartial,
+} from './malware.schema.js';
export {
matrixSchema,
@@ -70,7 +87,9 @@ export {
} from './tactic.schema.js';
export {
+ techniqueBaseSchema,
techniqueSchema,
+ techniquePartialSchema,
xMitreDataSourceSchema,
xMitreDataSourcesSchema,
xMitreDefenseBypassesSchema,
@@ -98,7 +117,13 @@ export {
type XMitreTacticType,
} from './technique.schema.js';
-export { toolSchema, type Tool } from './tool.schema.js';
+export {
+ toolBaseSchema,
+ toolSchema,
+ toolPartialSchema,
+ type Tool,
+ type ToolPartial,
+} from './tool.schema.js';
export {
attackObjectsSchema,
diff --git a/src/schemas/sdo/malware.schema.ts b/src/schemas/sdo/malware.schema.ts
index 601b93e6..5100f278 100644
--- a/src/schemas/sdo/malware.schema.ts
+++ b/src/schemas/sdo/malware.schema.ts
@@ -46,7 +46,7 @@ export const stixArtifactType = createStixIdValidator('artifact').meta({
//
//==============================================================================
-export const malwareSchema = attackBaseDomainObjectSchema
+export const malwareBaseSchema = attackBaseDomainObjectSchema
.extend({
id: createStixIdValidator('malware').meta({
description: 'The unique identifier for this Malware object.',
@@ -243,10 +243,16 @@ export const malwareSchema = attackBaseDomainObjectSchema
examples: [],
}),
})
- .strict()
- .check((ctx) => {
- createFirstAliasRefinement()(ctx);
- createFirstXMitreAliasRefinement()(ctx);
- });
+ .strict();
-export type Malware = z.infer;
+export type Malware = z.infer;
+export type MalwarePartial = Partial;
+
+const malwareChecks = (ctx: z.core.ParsePayload): void => {
+ createFirstAliasRefinement()(ctx);
+ createFirstXMitreAliasRefinement()(ctx);
+};
+
+export const malwareSchema = malwareBaseSchema.check(malwareChecks);
+
+export const malwarePartialSchema = malwareBaseSchema.partial().check(malwareChecks);
diff --git a/src/schemas/sdo/technique.schema.ts b/src/schemas/sdo/technique.schema.ts
index 2ff9f175..ab100705 100644
--- a/src/schemas/sdo/technique.schema.ts
+++ b/src/schemas/sdo/technique.schema.ts
@@ -328,7 +328,7 @@ export type XMitreDetection = z.infer;
//
//==============================================================================
-export const techniqueSchema = attackBaseDomainObjectSchema
+export const techniqueBaseSchema = attackBaseDomainObjectSchema
.extend({
id: createStixIdValidator('attack-pattern'),
@@ -375,11 +375,6 @@ export const techniqueSchema = attackBaseDomainObjectSchema
x_mitre_modified_by_ref: xMitreModifiedByRefSchema.optional(),
})
.strict()
- .check((ctx) => {
- createAttackIdInExternalReferencesRefinement()(ctx);
- createEnterpriseOnlyPropertiesRefinement()(ctx);
- createMobileOnlyPropertiesRefinement()(ctx);
- })
.meta({
description: `
Techniques describe specific methods adversaries use to achieve tactical objectives and are represented as
@@ -405,4 +400,16 @@ They are represented as \`attack-pattern\` objects with the same structure as te
- **Platform constraints:** Sub-techniques must use a subset of their parent technique's platforms
`.trim(),
});
-export type Technique = z.infer;
+
+export type Technique = z.infer;
+export type TechniquePartial = Partial;
+
+const techniqueChecks = (ctx: z.core.ParsePayload): void => {
+ createAttackIdInExternalReferencesRefinement()(ctx);
+ createEnterpriseOnlyPropertiesRefinement()(ctx);
+ createMobileOnlyPropertiesRefinement()(ctx);
+};
+
+export const techniqueSchema = techniqueBaseSchema.check(techniqueChecks);
+
+export const techniquePartialSchema = techniqueBaseSchema.partial().check(techniqueChecks);
diff --git a/src/schemas/sdo/tool.schema.ts b/src/schemas/sdo/tool.schema.ts
index b2abb57b..6cb325ee 100644
--- a/src/schemas/sdo/tool.schema.ts
+++ b/src/schemas/sdo/tool.schema.ts
@@ -28,7 +28,7 @@ import {
//
//==============================================================================
-export const toolSchema = attackBaseDomainObjectSchema
+export const toolBaseSchema = attackBaseDomainObjectSchema
.extend({
id: createStixIdValidator('tool').meta({
description: 'The unique identifier for this Tool object.',
@@ -87,10 +87,16 @@ export const toolSchema = attackBaseDomainObjectSchema
x_mitre_old_attack_id: createOldMitreAttackIdSchema('tool').optional(),
})
- .strict()
- .check((ctx) => {
- createFirstXMitreAliasRefinement()(ctx);
- createFirstAliasRefinement()(ctx);
- });
+ .strict();
-export type Tool = z.infer;
+export type Tool = z.infer;
+export type ToolPartial = Partial;
+
+const toolChecks = (ctx: z.core.ParsePayload): void => {
+ createFirstXMitreAliasRefinement()(ctx);
+ createFirstAliasRefinement()(ctx);
+};
+
+export const toolSchema = toolBaseSchema.check(toolChecks);
+
+export const toolPartialSchema = toolBaseSchema.partial().check(toolChecks);
diff --git a/src/schemas/sro/relationship.schema.ts b/src/schemas/sro/relationship.schema.ts
index 66438a6a..d4d8565d 100644
--- a/src/schemas/sro/relationship.schema.ts
+++ b/src/schemas/sro/relationship.schema.ts
@@ -256,7 +256,7 @@ export const invalidRelationships: RelationshipCombination[] = allRelationships.
export function createRelationshipValidationRefinement() {
return (
ctx: z.core.ParsePayload<
- | Relationship
+ | Partial
| {
relationship_type: RelationshipType;
source_ref: StixIdentifier;
@@ -264,6 +264,10 @@ export function createRelationshipValidationRefinement() {
}
>,
): void => {
+ // Partial-safe: cannot validate without all required fields
+ if (!ctx.value.relationship_type || !ctx.value.source_ref || !ctx.value.target_ref) {
+ return;
+ }
const [sourceType] = ctx.value.source_ref.split('--') as [StixType];
const [targetType] = ctx.value.target_ref.split('--') as [StixType];
@@ -284,7 +288,7 @@ export function createRelationshipValidationRefinement() {
//
//==============================================================================
-export const relationshipSchema = attackBaseRelationshipObjectSchema
+export const relationshipBaseSchema = attackBaseRelationshipObjectSchema
.extend({
id: createStixIdValidator('relationship'),
@@ -304,22 +308,28 @@ export const relationshipSchema = attackBaseRelationshipObjectSchema
name: true,
x_mitre_version: true,
})
- .strict()
- .check((ctx) => {
- createRelationshipValidationRefinement()(ctx);
- })
- .check((ctx) => {
- // Check for deprecated pattern
- const [sourceType] = ctx.value.source_ref.split('--') as [StixType];
- if (
- sourceType === 'x-mitre-data-component' &&
- ctx.value.relationship_type === 'detects' &&
- ctx.value.target_ref.startsWith('attack-pattern--')
- ) {
- console.warn(
- 'DEPRECATION WARNING: x-mitre-data-component -> detects -> attack-pattern relationships are deprecated',
- );
- }
- });
+ .strict();
+
+export type Relationship = z.infer;
+export type RelationshipPartial = Partial;
+
+const relationshipChecks = (ctx: z.core.ParsePayload): void => {
+ createRelationshipValidationRefinement()(ctx);
+
+ // Check for deprecated pattern (partial-safe: skip if required fields are missing)
+ if (!ctx.value.source_ref || !ctx.value.target_ref || !ctx.value.relationship_type) return;
+ const [sourceType] = ctx.value.source_ref.split('--') as [StixType];
+ if (
+ sourceType === 'x-mitre-data-component' &&
+ ctx.value.relationship_type === 'detects' &&
+ ctx.value.target_ref.startsWith('attack-pattern--')
+ ) {
+ console.warn(
+ 'DEPRECATION WARNING: x-mitre-data-component -> detects -> attack-pattern relationships are deprecated',
+ );
+ }
+};
+
+export const relationshipSchema = relationshipBaseSchema.check(relationshipChecks);
-export type Relationship = z.infer;
+export const relationshipPartialSchema = relationshipBaseSchema.partial().check(relationshipChecks);