@pure-ds/core 0.7.15 → 0.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.cursorrules +22 -11
  2. package/.github/copilot-instructions.md +22 -11
  3. package/custom-elements.json +38 -0
  4. package/dist/types/pds.d.ts +0 -1
  5. package/dist/types/public/assets/js/pds-manager.d.ts +44 -44
  6. package/dist/types/public/assets/js/pds-manager.d.ts.map +1 -1
  7. package/dist/types/public/assets/pds/components/pds-form.d.ts.map +1 -1
  8. package/dist/types/public/assets/pds/components/pds-omnibox.d.ts.map +1 -1
  9. package/dist/types/public/assets/pds/components/pds-treeview.d.ts +9 -0
  10. package/dist/types/public/assets/pds/components/pds-treeview.d.ts.map +1 -1
  11. package/dist/types/src/js/pds-core/pds-live.d.ts.map +1 -1
  12. package/dist/types/src/js/pds-core/pds-runtime.d.ts.map +1 -1
  13. package/package.json +1 -1
  14. package/packages/pds-cli/bin/pds-mcp-health.js +2 -1
  15. package/packages/pds-cli/bin/pds-mcp-server.js +10 -0
  16. package/packages/pds-cli/lib/pds-mcp-core.js +95 -3
  17. package/packages/pds-cli/lib/pds-mcp-eval-cases.json +13 -0
  18. package/public/assets/js/app.js +4 -4
  19. package/public/assets/js/pds-manager.js +144 -162
  20. package/public/assets/js/pds.js +2 -2
  21. package/public/assets/pds/components/pds-calendar.js +19 -11
  22. package/public/assets/pds/components/pds-form.js +85 -2
  23. package/public/assets/pds/components/pds-omnibox.js +9 -6
  24. package/public/assets/pds/components/pds-treeview.js +321 -24
  25. package/public/assets/pds/core/pds-manager.js +144 -162
  26. package/public/assets/pds/core.js +2 -2
  27. package/public/assets/pds/vscode-custom-data.json +4 -0
  28. package/readme.md +12 -59
  29. package/src/js/pds-core/pds-generator.js +7 -7
  30. package/src/js/pds-core/pds-live.js +1 -13
  31. package/src/js/pds-core/pds-ontology.js +2 -2
  32. package/src/js/pds-core/pds-runtime.js +18 -2
  33. package/src/js/pds.d.ts +0 -1
package/.cursorrules CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  > **CRITICAL**: This workspace uses **Pure Design System (PDS)**. All code generation MUST follow PDS and vanilla Web Platform patterns. Never use 3rd party framework patterns, non-PDS utility classes, inline styles, or hardcoded CSS values.
4
4
 
5
+ > **CRITICAL — `/pds/` PATHS ARE READ-ONLY (PACKAGE-LIKE)**: Treat any file path containing `/pds/` as immutable runtime/package output (including `public/pds/**`, `public/assets/pds/**`, and `node_modules/@pure-ds/core/public/**`). Never patch these files directly. If behavior must change, edit source/config (`src/js/pds-core/**`, `pds.config.js`, component source), then rebuild.
6
+
5
7
  ## Philosophy
6
8
 
7
9
  PDS follows the [Pure Web Manifesto](https://pureweb.dev/manifesto): "The browser is the framework."
@@ -57,10 +59,11 @@ Use MCP as an optimization, not a prerequisite. For fast, simple lookups, read l
57
59
 
58
60
  1. **Tokens** → call `get_tokens`
59
61
  2. **Primitives / utilities / selectors** → call `find_utility_class`
60
- 3. **Web component API** → call `get_component_api`
61
- 4. **Enhancer metadata + demoHtml** → call `get_enhancer_metadata`
62
- 5. **Design config deterministic mapping** → call `get_config_relations`
63
- 6. **Final snippet sanity check** → call `validate_pds_snippet`
62
+ 3. **Natural-language DS search** → call `query_design_system`
63
+ 4. **Web component API** → call `get_component_api`
64
+ 5. **Enhancer metadata + demoHtml** → call `get_enhancer_metadata`
65
+ 6. **Design config deterministic mapping** → call `get_config_relations`
66
+ 7. **Final snippet sanity check** → call `validate_pds_snippet`
64
67
 
65
68
  ### Non-negotiable rules
66
69
 
@@ -71,6 +74,15 @@ Use MCP as an optimization, not a prerequisite. For fast, simple lookups, read l
71
74
  - Never block or fail an answer solely because MCP is unavailable.
72
75
  - If neither MCP nor file reads are available, provide only conservative guidance and clearly mark uncertainty.
73
76
 
77
+ ## 🎯 Intent Scoping (Avoid Wrong Surface Area)
78
+
79
+ Always match the implementation target to the user request before touching code.
80
+
81
+ - If the request is generic layout/styling (e.g., "grid", "mobile one column", spacing, alignment), solve it with primitives/utilities/config first (`.grid`, `.grid-cols-*`, responsive utilities, `pds-ontology.js`, `pds.config.js`).
82
+ - Do **not** inspect or modify specialized components (e.g., `pds-form`) unless the user explicitly asks for that component or the failing code is clearly inside that component.
83
+ - Start from the smallest relevant layer: **Layer 1 (styles/utilities)** → **Layer 2 (enhancers)** → **Layer 3 (web components)** only if needed.
84
+ - For consuming projects, prefer usage-level fixes in app markup/classes before proposing framework/core changes.
85
+
74
86
  ---
75
87
 
76
88
  ## 📋 pds-form Best Practices
@@ -523,8 +535,7 @@ await PDS.toast("Saved successfully!", { type: "success" });
523
535
  // Theme management
524
536
  PDS.theme = 'dark'; // 'light' | 'dark' | 'system'
525
537
 
526
- // Query the design system
527
- const results = await PDS.query("border gradient classes");
538
+ // Query the design system via MCP tool: query_design_system
528
539
  ```
529
540
 
530
541
  ---
@@ -532,14 +543,14 @@ const results = await PDS.query("border gradient classes");
532
543
  ## 📚 Additional Resources
533
544
 
534
545
  **For comprehensive pds-form documentation:**
535
- - Read [pds-form-docs.md](../pds-form-docs.md) for complete API reference
536
- - See [packages/pds-storybook/stories/components/PdsForm.stories.js](../packages/pds-storybook/stories/components/PdsForm.stories.js) for real examples
537
- - Check [custom-elements.json](../custom-elements.json) for component API details
546
+ - Read [pds-form-docs.md](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/pds-form-docs.md) for complete API reference
547
+ - See [packages/pds-storybook/stories/components/PdsForm.stories.js](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/packages/pds-storybook/stories/components/PdsForm.stories.js) for real examples
548
+ - Check [custom-elements.json](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/custom-elements.json) for component API details
538
549
 
539
550
  **For toast notifications:**
540
- - Use `PDS.toast()` method (see [src/js/common/toast.js](../src/js/common/toast.js) for implementation)
551
+ - Use `PDS.toast()` method (see [src/js/common/toast.js](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/src/js/common/toast.js) for implementation)
541
552
  - Automatically ensures pds-toaster exists and is loaded before displaying
542
- - See pds-toaster component API in [custom-elements.json](../custom-elements.json)
553
+ - See pds-toaster component API in [custom-elements.json](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/custom-elements.json)
543
554
 
544
555
  ---
545
556
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  > **CRITICAL**: This workspace uses **Pure Design System (PDS)**. All code generation MUST follow PDS and vanilla Web Platform patterns. Never use 3rd party framework patterns, non-PDS utility classes, inline styles, or hardcoded CSS values.
4
4
 
5
+ > **CRITICAL — `/pds/` PATHS ARE READ-ONLY (PACKAGE-LIKE)**: Treat any file path containing `/pds/` as immutable runtime/package output (including `public/pds/**`, `public/assets/pds/**`, and `node_modules/@pure-ds/core/public/**`). Never patch these files directly. If behavior must change, edit source/config (`src/js/pds-core/**`, `pds.config.js`, component source), then rebuild.
6
+
5
7
  ## Philosophy
6
8
 
7
9
  PDS follows the [Pure Web Manifesto](https://pureweb.dev/manifesto): "The browser is the framework."
@@ -57,10 +59,11 @@ Use MCP as an optimization, not a prerequisite. For fast, simple lookups, read l
57
59
 
58
60
  1. **Tokens** → call `get_tokens`
59
61
  2. **Primitives / utilities / selectors** → call `find_utility_class`
60
- 3. **Web component API** → call `get_component_api`
61
- 4. **Enhancer metadata + demoHtml** → call `get_enhancer_metadata`
62
- 5. **Design config deterministic mapping** → call `get_config_relations`
63
- 6. **Final snippet sanity check** → call `validate_pds_snippet`
62
+ 3. **Natural-language DS search** → call `query_design_system`
63
+ 4. **Web component API** → call `get_component_api`
64
+ 5. **Enhancer metadata + demoHtml** → call `get_enhancer_metadata`
65
+ 6. **Design config deterministic mapping** → call `get_config_relations`
66
+ 7. **Final snippet sanity check** → call `validate_pds_snippet`
64
67
 
65
68
  ### Non-negotiable rules
66
69
 
@@ -71,6 +74,15 @@ Use MCP as an optimization, not a prerequisite. For fast, simple lookups, read l
71
74
  - Never block or fail an answer solely because MCP is unavailable.
72
75
  - If neither MCP nor file reads are available, provide only conservative guidance and clearly mark uncertainty.
73
76
 
77
+ ## 🎯 Intent Scoping (Avoid Wrong Surface Area)
78
+
79
+ Always match the implementation target to the user request before touching code.
80
+
81
+ - If the request is generic layout/styling (e.g., "grid", "mobile one column", spacing, alignment), solve it with primitives/utilities/config first (`.grid`, `.grid-cols-*`, responsive utilities, `pds-ontology.js`, `pds.config.js`).
82
+ - Do **not** inspect or modify specialized components (e.g., `pds-form`) unless the user explicitly asks for that component or the failing code is clearly inside that component.
83
+ - Start from the smallest relevant layer: **Layer 1 (styles/utilities)** → **Layer 2 (enhancers)** → **Layer 3 (web components)** only if needed.
84
+ - For consuming projects, prefer usage-level fixes in app markup/classes before proposing framework/core changes.
85
+
74
86
  ---
75
87
 
76
88
  ## 📋 pds-form Best Practices
@@ -523,8 +535,7 @@ await PDS.toast("Saved successfully!", { type: "success" });
523
535
  // Theme management
524
536
  PDS.theme = 'dark'; // 'light' | 'dark' | 'system'
525
537
 
526
- // Query the design system
527
- const results = await PDS.query("border gradient classes");
538
+ // Query the design system via MCP tool: query_design_system
528
539
  ```
529
540
 
530
541
  ---
@@ -532,14 +543,14 @@ const results = await PDS.query("border gradient classes");
532
543
  ## 📚 Additional Resources
533
544
 
534
545
  **For comprehensive pds-form documentation:**
535
- - Read [pds-form-docs.md](../pds-form-docs.md) for complete API reference
536
- - See [packages/pds-storybook/stories/components/PdsForm.stories.js](../packages/pds-storybook/stories/components/PdsForm.stories.js) for real examples
537
- - Check [custom-elements.json](../custom-elements.json) for component API details
546
+ - Read [pds-form-docs.md](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/pds-form-docs.md) for complete API reference
547
+ - See [packages/pds-storybook/stories/components/PdsForm.stories.js](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/packages/pds-storybook/stories/components/PdsForm.stories.js) for real examples
548
+ - Check [custom-elements.json](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/custom-elements.json) for component API details
538
549
 
539
550
  **For toast notifications:**
540
- - Use `PDS.toast()` method (see [src/js/common/toast.js](../src/js/common/toast.js) for implementation)
551
+ - Use `PDS.toast()` method (see [src/js/common/toast.js](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/src/js/common/toast.js) for implementation)
541
552
  - Automatically ensures pds-toaster exists and is loaded before displaying
542
- - See pds-toaster component API in [custom-elements.json](../custom-elements.json)
553
+ - See pds-toaster component API in [custom-elements.json](https://github.com/Pure-Web-Foundation/pure-ds/blob/main/custom-elements.json)
543
554
 
544
555
  ---
545
556
 
@@ -3564,6 +3564,10 @@
3564
3564
  "kind": "field",
3565
3565
  "name": "value"
3566
3566
  },
3567
+ {
3568
+ "kind": "field",
3569
+ "name": "values"
3570
+ },
3567
3571
  {
3568
3572
  "kind": "field",
3569
3573
  "name": "disabled"
@@ -3580,15 +3584,28 @@
3580
3584
  "kind": "field",
3581
3585
  "name": "expandedAll"
3582
3586
  },
3587
+ {
3588
+ "kind": "field",
3589
+ "name": "multiselect"
3590
+ },
3583
3591
  {
3584
3592
  "kind": "field",
3585
3593
  "name": "selectedNode",
3586
3594
  "readonly": true
3587
3595
  },
3596
+ {
3597
+ "kind": "field",
3598
+ "name": "selectedNodes",
3599
+ "readonly": true
3600
+ },
3588
3601
  {
3589
3602
  "kind": "method",
3590
3603
  "name": "getSelectedNode"
3591
3604
  },
3605
+ {
3606
+ "kind": "method",
3607
+ "name": "getSelectedNodes"
3608
+ },
3592
3609
  {
3593
3610
  "kind": "method",
3594
3611
  "name": "refresh"
@@ -3619,6 +3636,15 @@
3619
3636
  }
3620
3637
  ]
3621
3638
  },
3639
+ {
3640
+ "kind": "method",
3641
+ "name": "selectByValues",
3642
+ "parameters": [
3643
+ {
3644
+ "name": "values"
3645
+ }
3646
+ ]
3647
+ },
3622
3648
  {
3623
3649
  "kind": "method",
3624
3650
  "name": "checkValidity"
@@ -3626,6 +3652,15 @@
3626
3652
  {
3627
3653
  "kind": "method",
3628
3654
  "name": "reportValidity"
3655
+ },
3656
+ {
3657
+ "kind": "method",
3658
+ "name": "focus",
3659
+ "parameters": [
3660
+ {
3661
+ "name": "options"
3662
+ }
3663
+ ]
3629
3664
  }
3630
3665
  ],
3631
3666
  "events": [
@@ -3697,6 +3732,9 @@
3697
3732
  {
3698
3733
  "name": "expanded-all"
3699
3734
  },
3735
+ {
3736
+ "name": "multiselect"
3737
+ },
3700
3738
  {
3701
3739
  "name": "src"
3702
3740
  }
@@ -210,7 +210,6 @@ export class PDS extends EventTarget {
210
210
  static enums?: Record<string, any>;
211
211
  static common?: Record<string, any>;
212
212
  static parse?: (html: string) => Element[];
213
- static query?: (question: string) => Promise<any[]>;
214
213
  static AutoComplete?: any;
215
214
  static loadAutoComplete?: () => Promise<any>;
216
215
 
@@ -1,5 +1,5 @@
1
- declare function Ia(): Promise<void>;
2
- declare function qt(r?: {}): {
1
+ declare function La(): Promise<void>;
2
+ declare function Dt(t?: {}): {
3
3
  source: string;
4
4
  type: string;
5
5
  confidence: number;
@@ -12,7 +12,7 @@ declare function qt(r?: {}): {
12
12
  template: any;
13
13
  meta: any;
14
14
  };
15
- declare function ct(r?: {}): {
15
+ declare function it(t?: {}): {
16
16
  source: string;
17
17
  type: string;
18
18
  confidence: number;
@@ -25,7 +25,7 @@ declare function ct(r?: {}): {
25
25
  template: any;
26
26
  meta: any;
27
27
  };
28
- declare function O(r?: {}): {
28
+ declare function O(t?: {}): {
29
29
  source: string;
30
30
  type: string;
31
31
  confidence: number;
@@ -38,23 +38,23 @@ declare function O(r?: {}): {
38
38
  template: any;
39
39
  meta: any;
40
40
  };
41
- declare function na(): {
41
+ declare function Xo(): {
42
42
  directMappings: any;
43
43
  ignoredPatterns: any;
44
44
  nonPdsClassPatterns: any;
45
45
  rulesJsonPath: string;
46
46
  };
47
- declare function Pa(r: any): Promise<any>;
48
- declare function za(): {
47
+ declare function Aa(t: any): Promise<any>;
48
+ declare function Sa(): {
49
49
  id: string;
50
50
  name: string;
51
51
  }[];
52
- declare function Jn(r: any): boolean;
53
- declare function Fa(r?: {}): Promise<any>;
54
- declare function $r(r?: {}): Promise<any>;
55
- declare function fr(r: any, e?: {}): Promise<any>;
56
- declare function et(r?: {}): Promise<any>;
57
- declare function Ea(r?: {}): Promise<{
52
+ declare function Un(t: any): boolean;
53
+ declare function Ta(t?: {}): Promise<any>;
54
+ declare function xr(t?: {}): Promise<any>;
55
+ declare function pr(t: any, e?: {}): Promise<any>;
56
+ declare function Ze(t?: {}): Promise<any>;
57
+ declare function $a(t?: {}): Promise<{
58
58
  source: string;
59
59
  type: string;
60
60
  confidence: number;
@@ -67,7 +67,7 @@ declare function Ea(r?: {}): Promise<{
67
67
  template: any;
68
68
  meta: any;
69
69
  }>;
70
- declare function Ra(r?: {}): Promise<{
70
+ declare function Ea(t?: {}): Promise<{
71
71
  createdAt: number;
72
72
  createdAtIso: string;
73
73
  sourceType: string;
@@ -95,7 +95,7 @@ declare function Ra(r?: {}): Promise<{
95
95
  resultSnapshot: any;
96
96
  id: any;
97
97
  }>;
98
- declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyResolvedTheme: o, setupSystemListenerIfNeeded: a }: {
98
+ declare function Dn(t: any, e: any, { emitReady: r, emitConfigChanged: n, applyResolvedTheme: o, setupSystemListenerIfNeeded: a }: {
99
99
  emitReady: any;
100
100
  emitConfigChanged: any;
101
101
  applyResolvedTheme: any;
@@ -546,8 +546,8 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
546
546
  dark: number;
547
547
  };
548
548
  "__#private@#f"(e: any): number;
549
- "__#private@#h"(e: {}, t: any): {};
550
- "__#private@#E"(e: any, t?: {}): {
549
+ "__#private@#h"(e: {}, r: any): {};
550
+ "__#private@#E"(e: any, r?: {}): {
551
551
  primary: {
552
552
  50: string;
553
553
  100: string;
@@ -696,9 +696,9 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
696
696
  sunken: string;
697
697
  overlay: any;
698
698
  };
699
- "__#private@#R"(e: any, t?: number): string;
699
+ "__#private@#R"(e: any, r?: number): string;
700
700
  "__#private@#v"(e: any): string;
701
- "__#private@#F"(e: any, t?: string, n?: {}): {
701
+ "__#private@#F"(e: any, r?: string, n?: {}): {
702
702
  surface: {
703
703
  fieldset: {
704
704
  base: any;
@@ -730,11 +730,11 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
730
730
  b: number;
731
731
  };
732
732
  "__#private@#p"(e: any): number;
733
- "__#private@#d"(e: any, t: any): number;
734
- "__#private@#x"(e: any, t?: number): string;
735
- "__#private@#w"(e: any, t?: number): string;
736
- "__#private@#P"(e: any, t: any, n?: number): string;
737
- "__#private@#I"(e: any, t: any, n: any): string;
733
+ "__#private@#d"(e: any, r: any): number;
734
+ "__#private@#x"(e: any, r?: number): string;
735
+ "__#private@#w"(e: any, r?: number): string;
736
+ "__#private@#P"(e: any, r: any, n?: number): string;
737
+ "__#private@#I"(e: any, r: any, n: any): string;
738
738
  "__#private@#N"(e: any): {
739
739
  base: any;
740
740
  subtle: any;
@@ -742,12 +742,12 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
742
742
  sunken: any;
743
743
  overlay: string;
744
744
  };
745
- "__#private@#j"(e?: {}, t?: string, n?: number): any;
746
- "__#private@#k"(e?: {}, t?: number): any;
747
- "__#private@#S"(e: any, t?: {}): {};
748
- "__#private@#$"(e: any, t?: number): string;
745
+ "__#private@#j"(e?: {}, r?: string, n?: number): any;
746
+ "__#private@#k"(e?: {}, r?: number): any;
747
+ "__#private@#S"(e: any, r?: {}): {};
748
+ "__#private@#$"(e: any, r?: number): string;
749
749
  "__#private@#i"(e: any): {};
750
- "__#private@#B"(e: any, t?: number): string;
750
+ "__#private@#B"(e: any, r?: number): string;
751
751
  generateSpacingTokens(e: any): {
752
752
  0: string;
753
753
  };
@@ -823,21 +823,21 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
823
823
  heroSpacing: string;
824
824
  footerSpacing: string;
825
825
  };
826
- "__#private@#M"(e?: {}, t?: {}): {
826
+ "__#private@#M"(e?: {}, r?: {}): {
827
827
  sm: any;
828
828
  md: any;
829
829
  lg: any;
830
830
  xl: any;
831
831
  };
832
- "__#private@#u"(e: any, t: any): boolean;
833
- "__#private@#n"(e: any, t: any): any;
834
- "__#private@#s"(e: any, t: any): any;
832
+ "__#private@#u"(e: any, r: any): boolean;
833
+ "__#private@#n"(e: any, r: any): any;
834
+ "__#private@#s"(e: any, r: any): any;
835
835
  "__#private@#W"(e: any): {
836
836
  fast: string;
837
837
  normal: string;
838
838
  slow: string;
839
839
  };
840
- "__#private@#U"(e: any): {
840
+ "__#private@#H"(e: any): {
841
841
  dropdown: any;
842
842
  sticky: any;
843
843
  fixed: any;
@@ -847,7 +847,7 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
847
847
  tooltip: any;
848
848
  notification: any;
849
849
  };
850
- "__#private@#H"(e: any): {
850
+ "__#private@#U"(e: any): {
851
851
  set: any;
852
852
  weight: any;
853
853
  defaultSize: string;
@@ -860,16 +860,16 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
860
860
  "__#private@#q"(e: any): string;
861
861
  "__#private@#G"(e: any): string;
862
862
  "__#private@#V"(e: any): string;
863
- "__#private@#J"(e: any): string;
864
863
  "__#private@#Y"(e: any): string;
865
- "__#private@#Q"(e: any): string;
866
- "__#private@#g"(e: any): string;
864
+ "__#private@#J"(e: any): string;
867
865
  "__#private@#K"(e: any): string;
866
+ "__#private@#g"(e: any): string;
868
867
  "__#private@#Z"(e: any): string;
868
+ "__#private@#Q"(e: any): string;
869
869
  "__#private@#X"(e: any): string;
870
870
  "__#private@#ee"(e: any): string;
871
- "__#private@#te"(e: any, t: any): string;
872
- "__#private@#re"(e: any, t: any): string;
871
+ "__#private@#te"(e: any, r: any): string;
872
+ "__#private@#re"(e: any, r: any): string;
873
873
  "__#private@#ne"(e: any): string;
874
874
  "__#private@#oe"(e: any): string;
875
875
  "__#private@#ae"(): string;
@@ -895,7 +895,7 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
895
895
  s: number;
896
896
  l: number;
897
897
  };
898
- "__#private@#t"(e: any, t: any, n: any): string;
898
+ "__#private@#t"(e: any, r: any, n: any): string;
899
899
  getTokens(): {
900
900
  colors: {
901
901
  primary: {
@@ -1454,7 +1454,7 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
1454
1454
  };
1455
1455
  };
1456
1456
  getLayerCSS: (e: any) => any;
1457
- usesEnumValue: (e: any, t: any) => boolean;
1457
+ usesEnumValue: (e: any, r: any) => boolean;
1458
1458
  };
1459
1459
  };
1460
1460
  get tokensStylesheet(): any;
@@ -1468,7 +1468,7 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
1468
1468
  "pds-utilities.css.js": string;
1469
1469
  "pds-styles.css.js": string;
1470
1470
  };
1471
- "__#private@#l"(e: any, t: any): string;
1471
+ "__#private@#l"(e: any, r: any): string;
1472
1472
  };
1473
1473
  config: {
1474
1474
  design: any;
@@ -1481,5 +1481,5 @@ declare function qn(r: any, e: any, { emitReady: t, emitConfigChanged: n, applyR
1481
1481
  theme: string;
1482
1482
  autoDefiner: {};
1483
1483
  }>;
1484
- export { Ia as clearLiveImportHistory, qt as convertBrandGuidelinesToPatch, ct as convertTailwindHtmlToPds, O as createImportResult, na as describeTailwindConversionRules, Pa as getLiveImportHistoryEntry, za as getLiveImportSources, Jn as isImportResult, Fa as listLiveImportHistory, $r as listLiveTemplates, fr as loadGoogleFont, et as loadLiveTemplateCatalog, Ea as runLiveImport, Ra as saveLiveImportHistory, qn as startLive };
1484
+ export { La as clearLiveImportHistory, Dt as convertBrandGuidelinesToPatch, it as convertTailwindHtmlToPds, O as createImportResult, Xo as describeTailwindConversionRules, Aa as getLiveImportHistoryEntry, Sa as getLiveImportSources, Un as isImportResult, Ta as listLiveImportHistory, xr as listLiveTemplates, pr as loadGoogleFont, Ze as loadLiveTemplateCatalog, $a as runLiveImport, Ea as saveLiveImportHistory, Dn as startLive };
1485
1485
  //# sourceMappingURL=pds-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pds-manager.d.ts","sourceRoot":"","sources":["../../../../../public/assets/js/pds-manager.js"],"names":[],"mappings":"AA+jHg2b,qCAAwH;AAAjsO;;;;;;;;;;;;EAAwsB;AAA9kC;;;;;;;;;;;;EAAsY;AAfh8I;;;;;;;;;;;;EAAkW;AAc58D;;;;;EAAoO;AACmtZ,0CAA4L;AAAvtJ;;;IAAoS;AAfpvN,qCAA4H;AAe2lV,0CAAoR;AAfnwR,0CAAkK;AAtEjwH,kDAAq8B;AAsEkkF,0CAAwF;AAe4gJ;;;;;;;;;;;;GAAi5D;AAA07D;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAwJ;AAnBjna;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAI+xD"}
1
+ {"version":3,"file":"pds-manager.d.ts","sourceRoot":"","sources":["../../../../../public/assets/js/pds-manager.js"],"names":[],"mappings":"AA6iHg2b,qCAAwH;AAAjsO;;;;;;;;;;;;EAAwsB;AAA9kC;;;;;;;;;;;;EAAsY;AAfh8I;;;;;;;;;;;;EAAkW;AAc58D;;;;;EAAoO;AACmtZ,0CAA4L;AAAvtJ;;;IAAoS;AAfpvN,qCAA4H;AAe2lV,0CAAoR;AAfnwR,0CAAkK;AAtEjwH,kDAAq8B;AAsEkkF,0CAAwF;AAe4gJ;;;;;;;;;;;;GAAi5D;AAA07D;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAwJ;AAnBjna;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAI+xD"}
@@ -1 +1 @@
1
- {"version":3,"file":"pds-form.d.ts","sourceRoot":"","sources":["../../../../../../public/assets/pds/components/pds-form.js"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAcE;IAGF,yBAEC;IAgBC,gBAA2B;IAC3B,cAAyB;IACzB,aAAwB;IACxB,YAAuB;IACvB,eAAoB;IACpB,qBAAwB;IACxB,oBAA2B;IAC3B,mBAAyB;IACzB,mBAAsB;IACtB,oBAAuB;IAiBzB,8CAEC;IACD,4BAEC;IAGD,oBAEC;IAkBD;;;MAIC;IAED,uBAEC;IAED,cAIC;IAED,0BAcC;IAGD,+BAyBC;IA2eD,cA4CC;;CA6tDF"}
1
+ {"version":3,"file":"pds-form.d.ts","sourceRoot":"","sources":["../../../../../../public/assets/pds/components/pds-form.js"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAcE;IAGF,yBAEC;IAgBC,gBAA2B;IAC3B,cAAyB;IACzB,aAAwB;IACxB,YAAuB;IACvB,eAAoB;IACpB,qBAAwB;IACxB,oBAA2B;IAC3B,mBAAyB;IACzB,mBAAsB;IACtB,oBAAuB;IAiBzB,8CAEC;IACD,4BAEC;IAGD,oBAEC;IAkBD;;;MAIC;IAED,uBAEC;IAED,cAIC;IAED,0BAcC;IAGD,+BAyBC;IA6eD,cA4CC;;CA8yDF"}
@@ -1 +1 @@
1
- {"version":3,"file":"pds-omnibox.d.ts","sourceRoot":"","sources":["../../../../../../public/assets/pds/components/pds-omnibox.js"],"names":[],"mappings":"AAqBA;IACE,+BAA6B;IAE7B,0CAUC;IAuBD,0BAaC;IAED,6BAgBC;IAED,wEAGC;IAMD,yBAEC;IAND,oBAEC;IAUD,wBAGC;IAPD,mBAEC;IAWD,+BAGC;IAPD,0BAEC;IAWD,sBAIC;IARD,iBAEC;IAYD,6BAGC;IAPD,wBAEC;IAWD,6BAGC;IAPD,wBAEC;IAWD,gCAGC;IAPD,2BAEC;IAWD,wBAGC;IAPD,mBAEC;IAOD,+BAA2B;IAE3B,0CAGC;IAED,0BAEC;IAED,2CAEC;IAED,qBAEC;IAED,sBAEC;;CA4uBF"}
1
+ {"version":3,"file":"pds-omnibox.d.ts","sourceRoot":"","sources":["../../../../../../public/assets/pds/components/pds-omnibox.js"],"names":[],"mappings":"AAqBA;IACE,+BAA6B;IAE7B,0CAUC;IAuBD,0BAaC;IAED,6BAgBC;IAED,wEAGC;IAMD,yBAEC;IAND,oBAEC;IAUD,wBAGC;IAPD,mBAEC;IAWD,+BAGC;IAPD,0BAEC;IAWD,sBAIC;IARD,iBAEC;IAYD,6BAGC;IAPD,wBAEC;IAWD,6BAGC;IAPD,wBAEC;IAWD,gCAGC;IAPD,2BAEC;IAWD,wBAGC;IAPD,mBAEC;IAOD,+BAA2B;IAE3B,0CAGC;IAED,0BAEC;IAED,2CAEC;IAED,qBAEC;IAED,sBAEC;;CA+uBF"}
@@ -2,10 +2,13 @@ export class PdsTreeview extends HTMLElement {
2
2
  static formAssociated: boolean;
3
3
  static get observedAttributes(): string[];
4
4
  connectedCallback(): void;
5
+ disconnectedCallback(): void;
5
6
  attributeChangedCallback(name: any, oldValue: any, newValue: any): void;
6
7
  formAssociatedCallback(): void;
7
8
  formDisabledCallback(disabled: any): void;
8
9
  formResetCallback(): void;
10
+ set values(values: string[]);
11
+ get values(): string[];
9
12
  set value(value: string);
10
13
  get value(): string;
11
14
  formStateRestoreCallback(state: any): void;
@@ -23,15 +26,21 @@ export class PdsTreeview extends HTMLElement {
23
26
  get displayOnly(): boolean;
24
27
  set expandedAll(value: boolean);
25
28
  get expandedAll(): boolean;
29
+ set multiselect(value: "off" | "checkboxes" | "auto");
30
+ get multiselect(): "off" | "checkboxes" | "auto";
26
31
  get selectedNode(): any;
32
+ get selectedNodes(): any[];
27
33
  getSelectedNode(): any;
34
+ getSelectedNodes(): any[];
28
35
  refresh(): Promise<void>;
29
36
  expandAll(): void;
30
37
  collapseAll(): void;
31
38
  selectById(id: any): boolean;
32
39
  selectByValue(value: any): boolean;
40
+ selectByValues(values: any): boolean;
33
41
  checkValidity(): boolean;
34
42
  reportValidity(): boolean;
43
+ focus(options: any): void;
35
44
  #private;
36
45
  }
37
46
  //# sourceMappingURL=pds-treeview.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pds-treeview.d.ts","sourceRoot":"","sources":["../../../../../../public/assets/pds/components/pds-treeview.js"],"names":[],"mappings":"AA+BA;IACC,+BAA6B;IAE7B,0CAEC;IAuBD,0BAIC;IAED,wEAUC;IAED,+BAA2B;IAE3B,0CAGC;IAED,0BAGC;IAqCD,yBAIC;IARD,oBAEC;IAjCD,2CAGC;IAMD,wBAGC;IAPD,mBAEC;IAWD,uBAEC;IAND,kBAEC;IAUD,wBAGC;IAPD,mBAEC;IAqBD,6BAGC;IAPD,wBAEC;IAWD,6BAGC;IAPD,wBAEC;IAWD,gCAGC;IAPD,2BAEC;IAWD,gCAGC;IAPD,2BAEC;IAOD,wBAEC;IAED,uBAEC;IAED,yBAsCC;IAED,kBAKC;IAED,oBAGC;IAED,6BAIC;IAED,mCAgBC;IAED,yBAGC;IAED,0BAGC;;CAusBD"}
1
+ {"version":3,"file":"pds-treeview.d.ts","sourceRoot":"","sources":["../../../../../../public/assets/pds/components/pds-treeview.js"],"names":[],"mappings":"AAiCA;IACC,+BAA6B;IAE7B,0CAEC;IAoCD,0BAOC;IAED,6BAIC;IAED,wEAeC;IAED,+BAA2B;IAE3B,0CAGC;IAED,0BAQC;IAyDD,6BASC;IAbD,uBAEC;IARD,yBAIC;IARD,oBAEC;IA3CD,2CAaC;IAMD,wBAGC;IAPD,mBAEC;IAWD,uBAEC;IAND,kBAEC;IAUD,wBAGC;IAPD,mBAEC;IAoCD,6BAGC;IAPD,wBAEC;IAWD,6BAGC;IAPD,wBAEC;IAWD,gCAGC;IAPD,2BAEC;IAWD,gCAGC;IAPD,2BAEC;IAWD,sDAOC;IAXD,iDAEC;IAWD,wBAKC;IAED,2BAIC;IAED,uBAEC;IAED,0BAEC;IAED,yBAuCC;IAED,kBAKC;IAED,oBAGC;IAED,6BAIC;IAED,mCAiBC;IAED,qCAsCC;IAED,yBAGC;IAED,0BAGC;IAED,0BAQC;;CAu2BD"}
@@ -1 +1 @@
1
- {"version":3,"file":"pds-live.d.ts","sourceRoot":"","sources":["../../../../../src/js/pds-core/pds-live.js"],"names":[],"mappings":"AA43BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2QC;0BAnoCyB,oBAAoB"}
1
+ {"version":3,"file":"pds-live.d.ts","sourceRoot":"","sources":["../../../../../src/js/pds-core/pds-live.js"],"names":[],"mappings":"AAg3BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2QC;0BAvnCyB,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pds-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/js/pds-core/pds-runtime.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,yDAwCC;AAED;;;GAGG;AACH,wCAFW,SAAS,QAyBnB;AAMD;;;;;;;GAOG;AACH,4CAJW,UAAU,qBACV,aAAa,EAAE,oBACb,OAAO,CAAC,IAAI,CAAC,CAwBzB;AAED;;;;;;;;GAQG;AACH,wCALW,UAAU,WACV,MAAM,EAAE,qBACR,aAAa,EAAE,oBACb,OAAO,CAAC,IAAI,CAAC,CA4CzB;AAED;;;;;;GAMG;AACH,sCAHW,MAAM,GACJ,aAAa,CAMzB"}
1
+ {"version":3,"file":"pds-runtime.d.ts","sourceRoot":"","sources":["../../../../../src/js/pds-core/pds-runtime.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,yDAwCC;AAED;;;GAGG;AACH,wCAFW,SAAS,QAyBnB;AAMD;;;;;;;GAOG;AACH,4CAJW,UAAU,qBACV,aAAa,EAAE,oBACb,OAAO,CAAC,IAAI,CAAC,CAwBzB;AAED;;;;;;;;GAQG;AACH,wCALW,UAAU,WACV,MAAM,EAAE,qBACR,aAAa,EAAE,oBACb,OAAO,CAAC,IAAI,CAAC,CA4DzB;AAED;;;;;;GAMG;AACH,sCAHW,MAAM,GACJ,aAAa,CAMzB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pure-ds/core",
3
3
  "shortname": "pds",
4
- "version": "0.7.15",
4
+ "version": "0.7.18",
5
5
  "description": "Why develop a Design System when you can generate one?",
6
6
  "repository": {
7
7
  "type": "git",
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import { spawn } from 'node:child_process';
4
4
  import path from 'node:path';
@@ -10,6 +10,7 @@ const serverScriptPath = path.resolve(__dirname, 'pds-mcp-server.js');
10
10
  const requiredTools = [
11
11
  'get_tokens',
12
12
  'find_utility_class',
13
+ 'query_design_system',
13
14
  'get_component_api',
14
15
  'get_enhancer_metadata',
15
16
  'get_config_relations',
@@ -11,6 +11,7 @@ const SUPPORTED_PROTOCOL_VERSIONS = new Set([
11
11
  '2024-11-05',
12
12
  '2025-03-26',
13
13
  '2025-06-18',
14
+ '2025-11-25',
14
15
  ]);
15
16
 
16
17
  const ctx = createPdsMcpContext({ projectRoot: process.cwd() });
@@ -21,6 +22,7 @@ const debugLogFile = process.env.PDS_MCP_LOG_FILE
21
22
  : '';
22
23
 
23
24
  let inputBuffer = Buffer.alloc(0);
25
+ let outputTransportMode = 'framed';
24
26
 
25
27
  function debugLog(message) {
26
28
  if (!debugEnabled) return;
@@ -37,6 +39,10 @@ function debugLog(message) {
37
39
 
38
40
  function writeMessage(payload) {
39
41
  const body = Buffer.from(JSON.stringify(payload), 'utf8');
42
+ if (outputTransportMode === 'raw') {
43
+ process.stdout.write(Buffer.concat([body, Buffer.from('\n', 'utf8')]));
44
+ return;
45
+ }
40
46
  const header = Buffer.from(`Content-Length: ${body.length}\r\n\r\n`, 'utf8');
41
47
  process.stdout.write(Buffer.concat([header, body]));
42
48
  }
@@ -82,6 +88,7 @@ function tryReadRawJsonFrame() {
82
88
 
83
89
  try {
84
90
  const parsed = JSON.parse(trimmed);
91
+ outputTransportMode = 'raw';
85
92
  debugLog('parsed raw JSON-RPC frame (no Content-Length)');
86
93
  inputBuffer = Buffer.alloc(0);
87
94
  handleMessage(parsed);
@@ -104,6 +111,7 @@ function tryReadRawJsonFrame() {
104
111
  const separatorLength = separatorMatch?.[1]?.length || 1;
105
112
  const consumeBytes = consumed + separatorLength;
106
113
 
114
+ outputTransportMode = 'raw';
107
115
  debugLog('parsed raw JSON-RPC line frame (no Content-Length)');
108
116
  inputBuffer = inputBuffer.slice(Math.min(consumeBytes, inputBuffer.length));
109
117
  handleMessage(parsedLine);
@@ -203,6 +211,8 @@ function tryReadFrame() {
203
211
  return false;
204
212
  }
205
213
 
214
+ outputTransportMode = 'framed';
215
+
206
216
  const { headerEnd, separatorLength } = boundary;
207
217
 
208
218
  const header = inputBuffer.slice(0, headerEnd).toString('utf8');