@contentful/experience-design-system-cli 2.37.1-dev-build-2ec208d2.0 → 2.37.1-dev-build-daf63213.0

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.
package/dist/app.js CHANGED
@@ -9663,8 +9663,8 @@ function extractAccessorProperties(classDecl, applyRuntimeFieldDenylist = false)
9663
9663
  accessors.set(name, entry);
9664
9664
  }
9665
9665
  for (const [name, { getter, setter }] of accessors) {
9666
- const hasPropertyDecorator2 = getter?.getDecorators().some((decorator) => decorator.getName() === "property") || setter?.getDecorators().some((decorator) => decorator.getName() === "property");
9667
- if (!hasPropertyDecorator2 && !(getter && setter))
9666
+ const hasPropertyDecorator = getter?.getDecorators().some((decorator) => decorator.getName() === "property") || setter?.getDecorators().some((decorator) => decorator.getName() === "property");
9667
+ if (!hasPropertyDecorator && !(getter && setter))
9668
9668
  continue;
9669
9669
  const type = getter?.getReturnTypeNode()?.getText() ?? setter?.getParameters()[0]?.getTypeNode()?.getText() ?? "any";
9670
9670
  const accessorNode = getter ?? setter;
@@ -12934,9 +12934,9 @@ function generateUlid(now = Date.now()) {
12934
12934
  tsBytes[i] = n & 255;
12935
12935
  n = Math.floor(n / 256);
12936
12936
  }
12937
- const ts6 = encodeBase32(tsBytes, 10);
12937
+ const ts3 = encodeBase32(tsBytes, 10);
12938
12938
  const rand = encodeBase32(randomBytes2(10), 16);
12939
- return (ts6 + rand).toUpperCase();
12939
+ return (ts3 + rand).toUpperCase();
12940
12940
  }
12941
12941
 
12942
12942
  // packages/experience-design-system-backend-pipeline/dist/src/persistence/src/runs/repositories/read-runs-file.js
@@ -15350,610 +15350,7 @@ async function runMapTokens(request) {
15350
15350
  import { mkdir as mkdir4 } from "node:fs/promises";
15351
15351
  import { relative as relative2 } from "node:path";
15352
15352
 
15353
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.js
15354
- import { Node as Node10, Project as Project7 } from "ts-morph";
15355
-
15356
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.js
15357
- import { Project as Project8 } from "ts-morph";
15358
-
15359
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.js
15360
- import { Node as Node12, SyntaxKind as SyntaxKind7 } from "ts-morph";
15361
-
15362
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.js
15363
- import { Node as Node11 } from "ts-morph";
15364
-
15365
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.js
15366
- import ts3 from "typescript";
15367
-
15368
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.js
15369
- import { Node as Node13 } from "ts-morph";
15370
-
15371
- // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/collect-jsx-component-references.js
15372
- import { Node as Node15, SyntaxKind as SyntaxKind9 } from "ts-morph";
15373
-
15374
- // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.js
15375
- import { Node as Node14 } from "ts-morph";
15376
-
15377
- // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.js
15378
- import { SyntaxKind as SyntaxKind8 } from "ts-morph";
15379
-
15380
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.js
15381
- import { SyntaxKind as SyntaxKind14 } from "ts-morph";
15382
-
15383
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.js
15384
- import { Node as Node32 } from "ts-morph";
15385
-
15386
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.js
15387
- import { Node as Node17, SyntaxKind as SyntaxKind10 } from "ts-morph";
15388
-
15389
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.js
15390
- import { Node as Node16 } from "ts-morph";
15391
-
15392
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.js
15393
- import { Node as Node24 } from "ts-morph";
15394
-
15395
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.js
15396
- import { Node as Node18 } from "ts-morph";
15397
- function createTextControlSurface2(onChangeType, specificProps) {
15398
- return [
15399
- { name: "autoComplete", type: "string", required: false },
15400
- ...specificProps,
15401
- { name: "disabled", type: "boolean", required: false },
15402
- { name: "name", type: "string", required: false },
15403
- { name: "onChange", type: onChangeType, required: false },
15404
- { name: "placeholder", type: "string", required: false },
15405
- { name: "readOnly", type: "boolean", required: false },
15406
- { name: "required", type: "boolean", required: false },
15407
- {
15408
- name: "value",
15409
- type: "string | number | readonly string[]",
15410
- required: false
15411
- }
15412
- ];
15413
- }
15414
- var DOM_ATTRIBUTE_PROP_SURFACES2 = {
15415
- HTMLProps: [],
15416
- HTMLAttributes: [
15417
- { name: "className", type: "string", required: false },
15418
- { name: "hidden", type: "boolean", required: false },
15419
- { name: "id", type: "string", required: false },
15420
- {
15421
- name: "onClick",
15422
- type: "MouseEventHandler<HTMLElement>",
15423
- required: false
15424
- },
15425
- { name: "style", type: "CSSProperties", required: false },
15426
- { name: "tabIndex", type: "number", required: false },
15427
- { name: "title", type: "string", required: false }
15428
- ],
15429
- ImgHTMLAttributes: [
15430
- { name: "alt", type: "string", required: false },
15431
- { name: "crossOrigin", type: "string", required: false },
15432
- { name: "height", type: "number | string", required: false },
15433
- {
15434
- name: "loading",
15435
- type: "string",
15436
- required: false,
15437
- allowedValues: ["eager", "lazy"]
15438
- },
15439
- { name: "sizes", type: "string", required: false },
15440
- { name: "src", type: "string", required: false },
15441
- { name: "srcSet", type: "string", required: false },
15442
- { name: "width", type: "number | string", required: false }
15443
- ],
15444
- LiHTMLAttributes: [],
15445
- AnchorHTMLAttributes: [
15446
- { name: "download", type: "boolean | string", required: false },
15447
- { name: "href", type: "string", required: false },
15448
- { name: "hrefLang", type: "string", required: false },
15449
- { name: "referrerPolicy", type: "string", required: false },
15450
- { name: "rel", type: "string", required: false },
15451
- {
15452
- name: "target",
15453
- type: "string",
15454
- required: false,
15455
- allowedValues: ["_blank", "_parent", "_self", "_top"]
15456
- }
15457
- ],
15458
- ButtonHTMLAttributes: [
15459
- { name: "autoFocus", type: "boolean", required: false },
15460
- { name: "disabled", type: "boolean", required: false },
15461
- { name: "form", type: "string", required: false },
15462
- { name: "formAction", type: "string", required: false },
15463
- { name: "formMethod", type: "string", required: false },
15464
- { name: "formNoValidate", type: "boolean", required: false },
15465
- { name: "formTarget", type: "string", required: false },
15466
- { name: "name", type: "string", required: false },
15467
- {
15468
- name: "type",
15469
- type: "string",
15470
- required: false,
15471
- allowedValues: ["button", "reset", "submit"]
15472
- },
15473
- {
15474
- name: "value",
15475
- type: "string | number | readonly string[]",
15476
- required: false
15477
- }
15478
- ],
15479
- InputHTMLAttributes: createTextControlSurface2("ChangeEventHandler<HTMLInputElement>", [
15480
- { name: "checked", type: "boolean", required: false },
15481
- { name: "max", type: "number | string", required: false },
15482
- { name: "maxLength", type: "number", required: false },
15483
- { name: "min", type: "number | string", required: false },
15484
- { name: "minLength", type: "number", required: false },
15485
- { name: "type", type: "string", required: false }
15486
- ]),
15487
- FieldsetHTMLAttributes: [
15488
- { name: "disabled", type: "boolean", required: false },
15489
- { name: "form", type: "string", required: false },
15490
- { name: "name", type: "string", required: false }
15491
- ],
15492
- LabelHTMLAttributes: [
15493
- { name: "form", type: "string", required: false },
15494
- { name: "htmlFor", type: "string", required: false }
15495
- ],
15496
- SelectHTMLAttributes: [
15497
- { name: "autoComplete", type: "string", required: false },
15498
- { name: "disabled", type: "boolean", required: false },
15499
- { name: "form", type: "string", required: false },
15500
- { name: "multiple", type: "boolean", required: false },
15501
- { name: "name", type: "string", required: false },
15502
- {
15503
- name: "onChange",
15504
- type: "ChangeEventHandler<HTMLSelectElement>",
15505
- required: false
15506
- },
15507
- { name: "required", type: "boolean", required: false },
15508
- { name: "size", type: "number", required: false },
15509
- {
15510
- name: "value",
15511
- type: "string | number | readonly string[]",
15512
- required: false
15513
- }
15514
- ],
15515
- SVGAttributes: [
15516
- {
15517
- name: "focusable",
15518
- type: 'boolean | "auto"',
15519
- required: false,
15520
- allowedValues: ["auto"]
15521
- },
15522
- { name: "height", type: "number | string", required: false },
15523
- { name: "viewBox", type: "string", required: false },
15524
- { name: "width", type: "number | string", required: false }
15525
- ],
15526
- SVGProps: [],
15527
- TextareaHTMLAttributes: createTextControlSurface2("ChangeEventHandler<HTMLTextAreaElement>", [
15528
- { name: "cols", type: "number", required: false },
15529
- { name: "rows", type: "number", required: false },
15530
- { name: "wrap", type: "string", required: false }
15531
- ]),
15532
- TdHTMLAttributes: [
15533
- {
15534
- name: "align",
15535
- type: "string",
15536
- required: false,
15537
- allowedValues: ["center", "char", "justify", "left", "right"]
15538
- },
15539
- { name: "colSpan", type: "number", required: false },
15540
- { name: "headers", type: "string", required: false },
15541
- { name: "rowSpan", type: "number", required: false },
15542
- { name: "scope", type: "string", required: false }
15543
- ]
15544
- };
15545
-
15546
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.js
15547
- import { Node as Node19 } from "ts-morph";
15548
-
15549
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.js
15550
- import { Node as Node20 } from "ts-morph";
15551
-
15552
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.js
15553
- import { Node as Node21 } from "ts-morph";
15554
-
15555
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.js
15556
- import { Node as Node22 } from "ts-morph";
15557
-
15558
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.js
15559
- import { Node as Node23 } from "ts-morph";
15560
-
15561
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.js
15562
- import { Node as Node25 } from "ts-morph";
15563
-
15564
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.js
15565
- import { Node as Node28 } from "ts-morph";
15566
-
15567
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.js
15568
- import { Node as Node26 } from "ts-morph";
15569
-
15570
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.js
15571
- import { Node as Node27, SyntaxKind as SyntaxKind11 } from "ts-morph";
15572
-
15573
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.js
15574
- import { Node as Node30, SyntaxKind as SyntaxKind13 } from "ts-morph";
15575
-
15576
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.js
15577
- import { Node as Node29, SyntaxKind as SyntaxKind12 } from "ts-morph";
15578
-
15579
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.js
15580
- import { Node as Node31 } from "ts-morph";
15581
-
15582
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/extractor.js
15583
- import { Project as Project9, Node as Node37 } from "ts-morph";
15584
-
15585
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.js
15586
- import { Node as Node33 } from "ts-morph";
15587
-
15588
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.js
15589
- import { Node as Node35 } from "ts-morph";
15590
-
15591
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.js
15592
- import { Node as Node34, SyntaxKind as SyntaxKind15 } from "ts-morph";
15593
-
15594
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.js
15595
- import { Node as Node36 } from "ts-morph";
15596
-
15597
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.js
15598
- import { Project as Project12, ScriptTarget as ScriptTarget4, ModuleKind as ModuleKind4, ts as ts5 } from "ts-morph";
15599
-
15600
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/scoring/collect-scoring-inputs.js
15601
- var OPAQUE_TYPES2 = /* @__PURE__ */ new Set(["any", "unknown", "object", "Record<string, unknown>", "Record<string, any>"]);
15602
- var OBVIOUS_PROP_NAMES2 = /* @__PURE__ */ new Set([
15603
- "className",
15604
- "style",
15605
- "id",
15606
- "children",
15607
- "disabled",
15608
- "hidden",
15609
- "onClick",
15610
- "onChange",
15611
- "onSubmit",
15612
- "onBlur",
15613
- "onFocus",
15614
- "href",
15615
- "src",
15616
- "alt",
15617
- "type",
15618
- "value",
15619
- "checked",
15620
- "placeholder",
15621
- "label",
15622
- "title",
15623
- "name",
15624
- "required",
15625
- "readOnly",
15626
- "autoFocus",
15627
- "tabIndex",
15628
- "role",
15629
- "aria-label",
15630
- "aria-describedby"
15631
- ]);
15632
- function isWidePrimitiveUnion2(type) {
15633
- const parts = type.split("|").map((p) => p.trim());
15634
- if (parts.length < 3)
15635
- return false;
15636
- const basePrimitives = /* @__PURE__ */ new Set(["string", "number", "boolean"]);
15637
- const nullability = /* @__PURE__ */ new Set(["null", "undefined"]);
15638
- const baseCount = parts.filter((p) => basePrimitives.has(p)).length;
15639
- const nullabilityCount = parts.filter((p) => nullability.has(p)).length;
15640
- return baseCount >= 3 || baseCount >= 2 && nullabilityCount > 0 && baseCount + nullabilityCount >= 3;
15641
- }
15642
- function countExtractionIssues(component, options = {}) {
15643
- let count = 0;
15644
- const reasons = [];
15645
- if (component.props.length === 0 && component.slots.length === 0) {
15646
- count++;
15647
- reasons.push("no-props-or-slots");
15648
- }
15649
- if (component.props.length > 50) {
15650
- count++;
15651
- reasons.push(`high-prop-count:${component.props.length}`);
15652
- }
15653
- for (const prop of component.props) {
15654
- if (OPAQUE_TYPES2.has(prop.type.trim())) {
15655
- count++;
15656
- reasons.push(`opaque-type:${prop.name}`);
15657
- break;
15658
- }
15659
- if (isWidePrimitiveUnion2(prop.type)) {
15660
- count++;
15661
- reasons.push(`wide-union:${prop.name}`);
15662
- break;
15663
- }
15664
- if (!prop.description && !OBVIOUS_PROP_NAMES2.has(prop.name)) {
15665
- count++;
15666
- reasons.push("props-missing-description");
15667
- break;
15668
- }
15669
- }
15670
- count += options.additionalIssueCount ?? 0;
15671
- if (options.additionalReasons && options.additionalReasons.length > 0) {
15672
- reasons.push(...options.additionalReasons);
15673
- }
15674
- return { count, reasons: [...new Set(reasons)] };
15675
- }
15676
- function mapIssueCountToConfidence(count) {
15677
- if (count === 0)
15678
- return 5;
15679
- if (count === 1)
15680
- return 4;
15681
- if (count === 2)
15682
- return 3;
15683
- if (count === 3)
15684
- return 2;
15685
- return 1;
15686
- }
15687
-
15688
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.js
15689
- function computeExtractionScore2(component, options = {}) {
15690
- const { count, reasons } = countExtractionIssues(component, options);
15691
- return {
15692
- confidence: mapIssueCountToConfidence(count),
15693
- reasons
15694
- };
15695
- }
15696
- function deriveNeedsReview2(confidence) {
15697
- return confidence <= 2;
15698
- }
15699
-
15700
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.js
15701
- import { Project as Project10, ScriptTarget as ScriptTarget2, ModuleKind as ModuleKind2, ts as ts4 } from "ts-morph";
15702
-
15703
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.js
15704
- import { Node as Node38 } from "ts-morph";
15705
-
15706
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.js
15707
- import { Node as Node40, Project as Project11, ScriptTarget as ScriptTarget3, ModuleKind as ModuleKind3 } from "ts-morph";
15708
-
15709
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.js
15710
- import { Node as Node39 } from "ts-morph";
15711
-
15712
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.js
15713
- import { parse as parseSvelte2 } from "svelte/compiler";
15714
-
15715
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/extractor.js
15716
- import { Node as Node44 } from "ts-morph";
15717
-
15718
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.js
15719
- import { Node as Node42 } from "ts-morph";
15720
-
15721
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.js
15722
- import { Node as Node41, SyntaxKind as SyntaxKind16 } from "ts-morph";
15723
-
15724
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.js
15725
- import { Node as Node43, SyntaxKind as SyntaxKind17 } from "ts-morph";
15726
-
15727
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/extractor.js
15728
- import { parse as parseSFC3 } from "@vue/compiler-sfc";
15729
-
15730
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.js
15731
- import { Project as Project14, Node as Node47 } from "ts-morph";
15732
-
15733
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.js
15734
- import { Project as Project13, Node as Node46 } from "ts-morph";
15735
-
15736
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.js
15737
- import { Node as Node45 } from "ts-morph";
15738
-
15739
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.js
15740
- import { parse as parseSFC2 } from "@vue/compiler-sfc";
15741
- import { Node as Node48, Project as Project15 } from "ts-morph";
15742
-
15743
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/extractor.js
15744
- import { Project as Project16 } from "ts-morph";
15745
-
15746
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.js
15747
- import { Node as Node49 } from "ts-morph";
15748
-
15749
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.js
15750
- import { Node as Node50 } from "ts-morph";
15751
-
15752
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.js
15753
- import { Node as Node51 } from "ts-morph";
15754
-
15755
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.js
15756
- import { Node as Node54, SyntaxKind as SyntaxKind19 } from "ts-morph";
15757
-
15758
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.js
15759
- import { Node as Node53, SyntaxKind as SyntaxKind18 } from "ts-morph";
15760
-
15761
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.js
15762
- import { Node as Node52 } from "ts-morph";
15763
-
15764
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.js
15765
- import { Node as Node56 } from "ts-morph";
15766
-
15767
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.js
15768
- import { Node as Node55 } from "ts-morph";
15769
-
15770
- // packages/experience-design-system-extraction/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.js
15771
- import { Node as Node57, SyntaxKind as SyntaxKind20 } from "ts-morph";
15772
-
15773
- // packages/experience-design-system-extraction/dist/src/extract/services/classification/helpers/check-prop-types.js
15774
- function isStringLiteralUnion(type) {
15775
- return type.includes("|") && type.includes("'");
15776
- }
15777
- function isSimpleType(type) {
15778
- const t = type.trim();
15779
- if (t === "string" || t === "boolean" || t === "number")
15780
- return true;
15781
- return isStringLiteralUnion(t);
15782
- }
15783
- function isBooleanType(type) {
15784
- return type.trim() === "boolean";
15785
- }
15786
- function isStringType(type) {
15787
- return type.trim() === "string";
15788
- }
15789
- function isNumberType(type) {
15790
- return type.trim() === "number";
15791
- }
15792
- function isComplexType(type) {
15793
- return !isSimpleType(type);
15794
- }
15795
-
15796
- // packages/experience-design-system-extraction/dist/src/extract/services/classification/helpers/detect-dom-props.js
15797
- var DOM_PASS_THROUGH_PROPS = /* @__PURE__ */ new Set([
15798
- // Bare HTML / framework styling pass-through
15799
- "className",
15800
- "class",
15801
- "classes",
15802
- "classNames",
15803
- "rootClassName",
15804
- "prefixCls",
15805
- "style",
15806
- "styles",
15807
- // Bare HTML attributes
15808
- "id",
15809
- "role",
15810
- "tabIndex",
15811
- "tabindex",
15812
- "htmlFor",
15813
- "for",
15814
- "slot",
15815
- "is",
15816
- "lang",
15817
- "dir",
15818
- "hidden",
15819
- "draggable",
15820
- "spellCheck",
15821
- "spellcheck",
15822
- "contentEditable",
15823
- "contenteditable",
15824
- "inputMode",
15825
- "inputmode",
15826
- "autoComplete",
15827
- "autocomplete",
15828
- "autoFocus",
15829
- "autofocus",
15830
- "translate",
15831
- "part",
15832
- "exportparts",
15833
- "aria",
15834
- // Framework theming / pass-through escape hatches — dev-facing, never marketer-configurable
15835
- "dt",
15836
- "pt",
15837
- "ptOptions",
15838
- "unstyled",
15839
- "sx",
15840
- // Polymorphic component props — change rendered HTML/component, not marketer-visible behavior
15841
- "as",
15842
- "element",
15843
- "component",
15844
- // QA / vendor test attributes
15845
- "dataQa",
15846
- "data-qa",
15847
- // Vue v-model internals — framework wiring, never marketer-configurable
15848
- "modelValue",
15849
- "modelModifiers"
15850
- ]);
15851
- function isDomPassThroughProp(name) {
15852
- if (DOM_PASS_THROUGH_PROPS.has(name))
15853
- return true;
15854
- if (/^aria[-A-Z]/.test(name))
15855
- return true;
15856
- return name.startsWith("data-");
15857
- }
15858
-
15859
- // packages/experience-design-system-extraction/dist/src/extract/services/classification/classify-component-props.js
15860
- function preClassifyProp(prop) {
15861
- const { name, type } = prop;
15862
- if (/^on[A-Z]/.test(name) || type.includes("=> void") || type.includes("EventHandler")) {
15863
- return { category: "exclude" };
15864
- }
15865
- if (name === "ref" || name === "innerRef" || type.includes("Ref<") || type.includes("RefObject<")) {
15866
- return { category: "exclude" };
15867
- }
15868
- if (name === "testId" || name === "data-testid" || name === "dataTestId") {
15869
- return { category: "exclude" };
15870
- }
15871
- if (name === "key") {
15872
- return { category: "exclude" };
15873
- }
15874
- if (type.includes("Dispatch<") || type.includes("SetStateAction")) {
15875
- return { category: "exclude" };
15876
- }
15877
- if (isDomPassThroughProp(name)) {
15878
- return { category: "exclude" };
15879
- }
15880
- if (name === "name" && prop.domAttribute) {
15881
- return { category: "exclude" };
15882
- }
15883
- if (isStringLiteralUnion(type)) {
15884
- return { category: "design", cdfTypeHint: "enum" };
15885
- }
15886
- if (!isComplexType(type)) {
15887
- const designNameStart = /^(variant|size|spacing|gap|color|bg|theme|align|layout|orientation|position)/i;
15888
- const designNameEnd = /(Color|Size|Variant|Style)$/;
15889
- if (designNameStart.test(name) || designNameEnd.test(name)) {
15890
- return { category: "design", cdfTypeHint: "string" };
15891
- }
15892
- }
15893
- if (isBooleanType(type)) {
15894
- const stateNames = ["disabled", "loading", "expanded", "isOpen", "selected", "checked", "active", "preview"];
15895
- if (stateNames.includes(name)) {
15896
- return { category: "state", cdfTypeHint: "boolean" };
15897
- }
15898
- }
15899
- if (isBooleanType(type)) {
15900
- const visualToggle = /^(hide|show|enable|disable|vertical|horizontal|reverse|bold|italic|imageOn|with)/i;
15901
- if (visualToggle.test(name)) {
15902
- return { category: "design", cdfTypeHint: "boolean" };
15903
- }
15904
- }
15905
- if (name === "componentId" || name === "sectionKey" || name === "locale" || name === "variantIndex") {
15906
- return { category: "state", cdfTypeHint: "string" };
15907
- }
15908
- if (isStringType(type)) {
15909
- const urlNameStart = /^(href|url|link|src)/i;
15910
- const urlNameEnd = /(Url|Href|Link|Src)$/;
15911
- if (urlNameStart.test(name) || urlNameEnd.test(name)) {
15912
- return { category: "content", cdfTypeHint: "string" };
15913
- }
15914
- }
15915
- if (isStringType(type)) {
15916
- const textNameStart = /^(label|title|text|description|caption|heading|subheading|body|alt|name|placeholder|summary)/i;
15917
- const textNameEnd = /(Text|Label|Title|Name)$/;
15918
- if (textNameStart.test(name) || textNameEnd.test(name)) {
15919
- return { category: "content", cdfTypeHint: "string" };
15920
- }
15921
- }
15922
- if (isStringType(type)) {
15923
- return { category: "content", cdfTypeHint: "string" };
15924
- }
15925
- if (isBooleanType(type)) {
15926
- return { category: "design", cdfTypeHint: "boolean" };
15927
- }
15928
- if (isNumberType(type)) {
15929
- return { category: "design", cdfTypeHint: "string" };
15930
- }
15931
- return void 0;
15932
- }
15933
- function preClassifyComponent(component) {
15934
- const props = component.props.flatMap((prop) => {
15935
- const result = preClassifyProp(prop);
15936
- if (result?.category === "exclude") {
15937
- return [];
15938
- }
15939
- const { domAttribute: _domAttribute, ...authorableProp } = prop;
15940
- if (prop.category) {
15941
- return [authorableProp];
15942
- }
15943
- if (!result) {
15944
- return [authorableProp];
15945
- }
15946
- return [
15947
- {
15948
- ...authorableProp,
15949
- category: result.category
15950
- }
15951
- ];
15952
- });
15953
- return { ...component, props };
15954
- }
15955
-
15956
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.js
15353
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/quality/non-authorable-filter.js
15957
15354
  var HANDLER_TYPE_PATTERN = /=>|EventHandler|Dispatch<|SetStateAction/;
15958
15355
  var REF_TYPE_PATTERN = /Ref<|RefObject<|MutableRefObject/;
15959
15356
  function isHandlerOrRefProp(prop) {
@@ -16006,10 +15403,15 @@ function hasNoAuthoringSurface(component) {
16006
15403
  return { skip: false };
16007
15404
  }
16008
15405
 
16009
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/inspect-component-source.js
15406
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/evidence/source-inspection.js
16010
15407
  import { readFile as readFile15 } from "node:fs/promises";
16011
15408
 
16012
- // packages/experience-design-system-extraction/dist/src/extract/helpers/evidence/parse-source-imports.js
15409
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/constants/review-reasons.js
15410
+ var HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON = "data-fetch-wrapper";
15411
+ var POSSIBLE_DATA_FETCH_WRAPPER_REASON = "possible-data-fetch-wrapper";
15412
+ var ZERO_SURFACE_RENDERED_UI_REASON = "zero-surface:rendered-ui";
15413
+
15414
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/framework-adapters/shared/parse-imported-names.js
16013
15415
  function parseImportedNames(importClause) {
16014
15416
  const trimmed = importClause.trim();
16015
15417
  if (!trimmed)
@@ -16034,7 +15436,7 @@ function parseImportedNames(importClause) {
16034
15436
  return names;
16035
15437
  }
16036
15438
 
16037
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.js
15439
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/evidence/source-inspection.js
16038
15440
  var INFRA_PROP_NAMES = /* @__PURE__ */ new Set(["id", "locale", "preview", "slug", "topic", "previousComponent", "__typename"]);
16039
15441
  var VISIBLE_UI_TAG_PATTERN = /<(?:[A-Z][A-Za-z0-9_.]*|div|span|section|main|article|header|footer|nav|aside|img|video|p|h[1-6]|ul|ol|li|button|input|textarea|select|form|label|table|tbody|thead|tr|td|th)\b/;
16040
15442
  var GENERATED_IMPORT_PATTERN = /from\s+['"][^'"]*__generated[^'"]*['"]/;
@@ -16076,11 +15478,11 @@ function hasSiblingForwardRender(sourceText, siblingImports) {
16076
15478
  function hasVisibleUiRender(sourceText) {
16077
15479
  return /return\s*(?:\(|<)/.test(sourceText) && VISIBLE_UI_TAG_PATTERN.test(sourceText);
16078
15480
  }
16079
- function collectInfraPropNames(component) {
15481
+ function infraPropNames(component) {
16080
15482
  const props = component.props.map((prop) => prop.name);
16081
15483
  return props.length > 0 && props.every((prop) => INFRA_PROP_NAMES.has(prop)) ? props : [];
16082
15484
  }
16083
- function mapScoreToWrapperConfidence(score) {
15485
+ function scoreToConfidence(score) {
16084
15486
  if (score <= 0)
16085
15487
  return 0;
16086
15488
  if (score <= 2)
@@ -16091,14 +15493,9 @@ function mapScoreToWrapperConfidence(score) {
16091
15493
  return 4;
16092
15494
  return 5;
16093
15495
  }
16094
- function dedupeStrings(values) {
16095
- return [...new Set(values)];
15496
+ function dedupeReasons(reasons) {
15497
+ return [...new Set(reasons)];
16096
15498
  }
16097
-
16098
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/inspect-component-source.js
16099
- var HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON = "data-fetch-wrapper";
16100
- var POSSIBLE_DATA_FETCH_WRAPPER_REASON = "possible-data-fetch-wrapper";
16101
- var ZERO_SURFACE_RENDERED_UI_REASON = "zero-surface:rendered-ui";
16102
15499
  async function inspectComponentSource(component) {
16103
15500
  let sourceText = "";
16104
15501
  try {
@@ -16113,7 +15510,7 @@ async function inspectComponentSource(component) {
16113
15510
  const reviewReasons = [];
16114
15511
  let wrapperScore = 0;
16115
15512
  const hasGeneratedQueryHook = GENERATED_IMPORT_PATTERN.test(sourceText) && GENERATED_QUERY_HOOK_PATTERN.test(sourceText);
16116
- const infraProps = collectInfraPropNames(component);
15513
+ const infraProps = infraPropNames(component);
16117
15514
  const siblingImports = collectSiblingRendererImports(sourceText);
16118
15515
  if (GQL_FILENAME_PATTERN.test(component.source)) {
16119
15516
  reviewReasons.push("data-wrapper:gql-filename");
@@ -16143,7 +15540,7 @@ async function inspectComponentSource(component) {
16143
15540
  reviewReasons.push("data-wrapper:loading-null-guard");
16144
15541
  wrapperScore += 1;
16145
15542
  }
16146
- const wrapperConfidence = mapScoreToWrapperConfidence(wrapperScore);
15543
+ const wrapperConfidence = scoreToConfidence(wrapperScore);
16147
15544
  if (wrapperConfidence >= 4) {
16148
15545
  reviewReasons.unshift(HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON);
16149
15546
  } else if (wrapperConfidence === 3) {
@@ -16155,7 +15552,7 @@ async function inspectComponentSource(component) {
16155
15552
  }
16156
15553
  return {
16157
15554
  wrapperConfidence,
16158
- reviewReasons: dedupeStrings(reviewReasons),
15555
+ reviewReasons: dedupeReasons(reviewReasons),
16159
15556
  keepDespiteZeroSurface
16160
15557
  };
16161
15558
  }
@@ -16186,77 +15583,10 @@ function describeReviewReason(reason) {
16186
15583
  }
16187
15584
  }
16188
15585
  function describeReviewReasons(reasons) {
16189
- return dedupeStrings(reasons.map(describeReviewReason));
16190
- }
16191
-
16192
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/helpers/inspection/validate-extracted-components.js
16193
- function validateExtractedComponents2(components) {
16194
- const nameCounts = /* @__PURE__ */ new Map();
16195
- for (const component of components) {
16196
- const key = component.name.trim();
16197
- nameCounts.set(key, (nameCounts.get(key) ?? 0) + 1);
16198
- }
16199
- return components.map((component) => {
16200
- const issues = [];
16201
- if (!component.name.trim()) {
16202
- issues.push({
16203
- severity: "error",
16204
- code: "EMPTY_COMPONENT_NAME",
16205
- message: "Component name must not be empty"
16206
- });
16207
- }
16208
- for (let i = 0; i < component.props.length; i++) {
16209
- if (!component.props[i].name.trim()) {
16210
- issues.push({
16211
- severity: "error",
16212
- code: "EMPTY_PROP_NAME",
16213
- message: `Prop at index ${i} has an empty name`,
16214
- field: `props[${i}].name`
16215
- });
16216
- }
16217
- }
16218
- for (let i = 0; i < component.slots.length; i++) {
16219
- if (!component.slots[i].name.trim()) {
16220
- issues.push({
16221
- severity: "warning",
16222
- code: "EMPTY_SLOT_NAME",
16223
- message: `Slot at index ${i} has an empty name`,
16224
- field: `slots[${i}].name`
16225
- });
16226
- }
16227
- }
16228
- const propNames = new Set(component.props.map((p) => p.name.trim()).filter(Boolean));
16229
- for (let i = 0; i < component.slots.length; i++) {
16230
- const slotName = component.slots[i].name.trim();
16231
- if (slotName && propNames.has(slotName)) {
16232
- issues.push({
16233
- severity: "error",
16234
- code: "PROP_SLOT_NAME_COLLISION",
16235
- message: `"${slotName}" is used as both a prop name and a slot name`,
16236
- field: `slots[${i}].name`
16237
- });
16238
- }
16239
- }
16240
- const nameKey = component.name.trim();
16241
- if (nameKey && (nameCounts.get(nameKey) ?? 0) > 1) {
16242
- issues.push({
16243
- severity: "error",
16244
- code: "DUPLICATE_COMPONENT_NAME",
16245
- message: `Component name "${component.name}" appears more than once in the extracted set`
16246
- });
16247
- }
16248
- if (component.props.length === 0 && component.slots.length === 0) {
16249
- issues.push({
16250
- severity: "warning",
16251
- code: "EMPTY_COMPONENT",
16252
- message: "Component has no props or slots and will be filtered out during generation"
16253
- });
16254
- }
16255
- return { ...component, validationIssues: issues };
16256
- });
15586
+ return dedupeReasons(reasons.map(describeReviewReason));
16257
15587
  }
16258
15588
 
16259
- // packages/experience-design-system-extraction/dist/src/extract/services/quality/evaluate-extraction-quality.js
15589
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/quality/evaluate-extraction-quality.js
16260
15590
  function wrapperConfidenceToIssueCount(confidence) {
16261
15591
  if (confidence >= 4)
16262
15592
  return 2;
@@ -16288,7 +15618,7 @@ async function evaluateExtractionQuality(components, initialWarnings = []) {
16288
15618
  }
16289
15619
  const extractorReasons = component.reviewReasons ?? [];
16290
15620
  const nonAuthorableReason = retainedForReview ? [`non-authorable:${verdict.reason}`] : [];
16291
- const { confidence, reasons } = computeExtractionScore2(component, {
15621
+ const { confidence, reasons } = computeExtractionScore(component, {
16292
15622
  additionalIssueCount: wrapperConfidenceToIssueCount(inspection.wrapperConfidence) + extractorReasons.length + nonAuthorableReason.length,
16293
15623
  additionalReasons: [...extractorReasons, ...inspection.reviewReasons, ...nonAuthorableReason]
16294
15624
  });
@@ -16296,15 +15626,194 @@ async function evaluateExtractionQuality(components, initialWarnings = []) {
16296
15626
  ...component,
16297
15627
  extractionConfidence: confidence,
16298
15628
  reviewReasons: reasons,
16299
- needsReview: deriveNeedsReview2(confidence) || inspection.wrapperConfidence >= 4 || inspection.keepDespiteZeroSurface || retainedForReview || extractorReasons.includes("props-type-unresolved") || (component.needsReview ?? false)
15629
+ needsReview: deriveNeedsReview(confidence) || inspection.wrapperConfidence >= 4 || inspection.keepDespiteZeroSurface || retainedForReview || extractorReasons.includes("props-type-unresolved") || (component.needsReview ?? false)
16300
15630
  });
16301
15631
  }
16302
15632
  return {
16303
- components: validateExtractedComponents2(scoredComponents),
15633
+ components: validateExtractedComponents(scoredComponents),
16304
15634
  warnings
16305
15635
  };
16306
15636
  }
16307
15637
 
15638
+ // packages/experience-design-system-backend-pipeline/dist/src/steps/extraction/src/helpers/pre-classify.js
15639
+ function isStringLiteralUnion(type) {
15640
+ return type.includes("|") && type.includes("'");
15641
+ }
15642
+ function isSimpleType(type) {
15643
+ const t = type.trim();
15644
+ if (t === "string" || t === "boolean" || t === "number")
15645
+ return true;
15646
+ return isStringLiteralUnion(t);
15647
+ }
15648
+ function isBooleanType(type) {
15649
+ return type.trim() === "boolean";
15650
+ }
15651
+ function isStringType(type) {
15652
+ return type.trim() === "string";
15653
+ }
15654
+ function isNumberType(type) {
15655
+ return type.trim() === "number";
15656
+ }
15657
+ function isComplexType(type) {
15658
+ return !isSimpleType(type);
15659
+ }
15660
+ var DOM_PASS_THROUGH_PROPS = /* @__PURE__ */ new Set([
15661
+ // Bare HTML / framework styling pass-through
15662
+ "className",
15663
+ "class",
15664
+ "classes",
15665
+ "classNames",
15666
+ "rootClassName",
15667
+ "prefixCls",
15668
+ "style",
15669
+ "styles",
15670
+ // Bare HTML attributes
15671
+ "id",
15672
+ "role",
15673
+ "tabIndex",
15674
+ "tabindex",
15675
+ "htmlFor",
15676
+ "for",
15677
+ "slot",
15678
+ "is",
15679
+ "lang",
15680
+ "dir",
15681
+ "hidden",
15682
+ "draggable",
15683
+ "spellCheck",
15684
+ "spellcheck",
15685
+ "contentEditable",
15686
+ "contenteditable",
15687
+ "inputMode",
15688
+ "inputmode",
15689
+ "autoComplete",
15690
+ "autocomplete",
15691
+ "autoFocus",
15692
+ "autofocus",
15693
+ "translate",
15694
+ "part",
15695
+ "exportparts",
15696
+ "aria",
15697
+ // Framework theming / pass-through escape hatches — dev-facing, never marketer-configurable
15698
+ "dt",
15699
+ "pt",
15700
+ "ptOptions",
15701
+ "unstyled",
15702
+ "sx",
15703
+ // Polymorphic component props — change rendered HTML/component, not marketer-visible behavior
15704
+ "as",
15705
+ "element",
15706
+ "component",
15707
+ // QA / vendor test attributes
15708
+ "dataQa",
15709
+ "data-qa",
15710
+ // Vue v-model internals — framework wiring, never marketer-configurable
15711
+ "modelValue",
15712
+ "modelModifiers"
15713
+ ]);
15714
+ function isDomPassThroughProp(name) {
15715
+ if (DOM_PASS_THROUGH_PROPS.has(name))
15716
+ return true;
15717
+ if (/^aria[-A-Z]/.test(name))
15718
+ return true;
15719
+ return name.startsWith("data-");
15720
+ }
15721
+ function preClassifyProp(prop) {
15722
+ const { name, type } = prop;
15723
+ if (/^on[A-Z]/.test(name) || type.includes("=> void") || type.includes("EventHandler")) {
15724
+ return { category: "exclude" };
15725
+ }
15726
+ if (name === "ref" || name === "innerRef" || type.includes("Ref<") || type.includes("RefObject<")) {
15727
+ return { category: "exclude" };
15728
+ }
15729
+ if (name === "testId" || name === "data-testid" || name === "dataTestId") {
15730
+ return { category: "exclude" };
15731
+ }
15732
+ if (name === "key") {
15733
+ return { category: "exclude" };
15734
+ }
15735
+ if (type.includes("Dispatch<") || type.includes("SetStateAction")) {
15736
+ return { category: "exclude" };
15737
+ }
15738
+ if (isDomPassThroughProp(name)) {
15739
+ return { category: "exclude" };
15740
+ }
15741
+ if (name === "name" && prop.domAttribute) {
15742
+ return { category: "exclude" };
15743
+ }
15744
+ if (isStringLiteralUnion(type)) {
15745
+ return { category: "design", cdfTypeHint: "enum" };
15746
+ }
15747
+ if (!isComplexType(type)) {
15748
+ const designNameStart = /^(variant|size|spacing|gap|color|bg|theme|align|layout|orientation|position)/i;
15749
+ const designNameEnd = /(Color|Size|Variant|Style)$/;
15750
+ if (designNameStart.test(name) || designNameEnd.test(name)) {
15751
+ return { category: "design", cdfTypeHint: "string" };
15752
+ }
15753
+ }
15754
+ if (isBooleanType(type)) {
15755
+ const stateNames = ["disabled", "loading", "expanded", "isOpen", "selected", "checked", "active", "preview"];
15756
+ if (stateNames.includes(name)) {
15757
+ return { category: "state", cdfTypeHint: "boolean" };
15758
+ }
15759
+ }
15760
+ if (isBooleanType(type)) {
15761
+ const visualToggle = /^(hide|show|enable|disable|vertical|horizontal|reverse|bold|italic|imageOn|with)/i;
15762
+ if (visualToggle.test(name)) {
15763
+ return { category: "design", cdfTypeHint: "boolean" };
15764
+ }
15765
+ }
15766
+ if (name === "componentId" || name === "sectionKey" || name === "locale" || name === "variantIndex") {
15767
+ return { category: "state", cdfTypeHint: "string" };
15768
+ }
15769
+ if (isStringType(type)) {
15770
+ const urlNameStart = /^(href|url|link|src)/i;
15771
+ const urlNameEnd = /(Url|Href|Link|Src)$/;
15772
+ if (urlNameStart.test(name) || urlNameEnd.test(name)) {
15773
+ return { category: "content", cdfTypeHint: "string" };
15774
+ }
15775
+ }
15776
+ if (isStringType(type)) {
15777
+ const textNameStart = /^(label|title|text|description|caption|heading|subheading|body|alt|name|placeholder|summary)/i;
15778
+ const textNameEnd = /(Text|Label|Title|Name)$/;
15779
+ if (textNameStart.test(name) || textNameEnd.test(name)) {
15780
+ return { category: "content", cdfTypeHint: "string" };
15781
+ }
15782
+ }
15783
+ if (isStringType(type)) {
15784
+ return { category: "content", cdfTypeHint: "string" };
15785
+ }
15786
+ if (isBooleanType(type)) {
15787
+ return { category: "design", cdfTypeHint: "boolean" };
15788
+ }
15789
+ if (isNumberType(type)) {
15790
+ return { category: "design", cdfTypeHint: "string" };
15791
+ }
15792
+ return void 0;
15793
+ }
15794
+ function preClassifyComponent(component) {
15795
+ const props = component.props.flatMap((prop) => {
15796
+ const result = preClassifyProp(prop);
15797
+ if (result?.category === "exclude") {
15798
+ return [];
15799
+ }
15800
+ const { domAttribute: _domAttribute, ...authorableProp } = prop;
15801
+ if (prop.category) {
15802
+ return [authorableProp];
15803
+ }
15804
+ if (!result) {
15805
+ return [authorableProp];
15806
+ }
15807
+ return [
15808
+ {
15809
+ ...authorableProp,
15810
+ category: result.category
15811
+ }
15812
+ ];
15813
+ });
15814
+ return { ...component, props };
15815
+ }
15816
+
16308
15817
  // packages/experience-design-system-backend-pipeline/dist/src/orchestrators/run-extract-and-compose-session/helpers/emit-pre-classification-exclusions.js
16309
15818
  function emitPreClassificationExclusions(extraction, onExclusion) {
16310
15819
  if (!onExclusion)