@astryxdesign/cli 0.1.8-canary.0c4d8d7 → 0.1.8-canary.0db5dfd
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/{src/api → api/blog}/blog.mjs +42 -6
- package/{src/api → api/blog}/blog.test.mjs +2 -2
- package/api/build/build.mjs +92 -0
- package/api/build/build.test.mjs +92 -0
- package/{src/api → api/component}/component.mjs +49 -26
- package/{src/api → api/discover}/discover.mjs +55 -18
- package/{src/api → api/docs}/docs.mjs +47 -21
- package/{src/api → api/doctor}/doctor.mjs +11 -8
- package/{src/api → api/hook}/hook.mjs +11 -11
- package/{src/api → api}/index.mjs +16 -9
- package/{src/api → api/integration}/validate-integration.mjs +48 -15
- package/{src/api → api/integration}/validate-integration.test.mjs +1 -1
- package/{src/api → api/layout}/layout.mjs +66 -17
- package/{src/api → api/layout}/layout.test.mjs +1 -1
- package/{src/api → api/search}/search.mjs +71 -12
- package/api/swizzle/swizzle.mjs +283 -0
- package/{src/commands → api/swizzle}/swizzle.test.mjs +26 -1
- package/{src/api → api/template}/template-integration.test.mjs +2 -2
- package/{src/api → api/template}/template-suffix.test.mjs +3 -3
- package/{src/api → api/template}/template.mjs +96 -19
- package/{src/api → api/theme}/theme-add.mjs +35 -7
- package/{src → authoring}/codemod.mjs +6 -6
- package/{src → authoring}/config.test.mjs +1 -1
- package/{src → authoring}/doc.mjs +1 -1
- package/{src → authoring}/doc.test.mjs +1 -1
- package/{src → authoring}/template.mjs +1 -1
- package/bin/astryx.mjs +12 -10
- package/{src → cli}/commands/blog.mjs +48 -7
- package/{src → cli}/commands/build-theme.mjs +125 -46
- package/{src → cli}/commands/build.mjs +33 -57
- package/{src → cli}/commands/component/index.mjs +49 -22
- package/{src → cli}/commands/component-ownership.test.mjs +3 -3
- package/{src → cli}/commands/component-package.test.mjs +1 -1
- package/{src → cli}/commands/component-resolution.test.mjs +2 -2
- package/{src → cli}/commands/discover.mjs +17 -8
- package/{src → cli}/commands/docs.mjs +39 -7
- package/{src → cli}/commands/docs.test.mjs +1 -1
- package/{src → cli}/commands/doctor.mjs +3 -3
- package/{src → cli}/commands/doctor.test.mjs +2 -2
- package/{src → cli}/commands/ensure-core-built.mjs +3 -2
- package/{src → cli}/commands/external-showcase.test.mjs +1 -1
- package/{src → cli}/commands/hook/index.mjs +37 -14
- package/{src → cli}/commands/import-hint-correctness.test.mjs +1 -1
- package/{src → cli}/commands/init.mjs +20 -9
- package/{src → cli}/commands/layout.mjs +58 -18
- package/{src → cli}/commands/search.mjs +19 -12
- package/{src → cli}/commands/search.test.mjs +1 -1
- package/{src → cli}/commands/setup-nudge.test.mjs +1 -1
- package/cli/commands/swizzle.mjs +103 -0
- package/{src → cli}/commands/template.mjs +73 -22
- package/{src → cli}/commands/template.path-safety.test.mjs +2 -2
- package/{src → cli}/commands/upgrade.integration-policy.test.mjs +1 -1
- package/{src → cli}/commands/upgrade.mjs +160 -52
- package/{src → cli}/commands/upgrade.test.mjs +1 -1
- package/{src → cli}/commands/validate-integration.mjs +17 -37
- package/{src → cli}/index.mjs +17 -15
- package/{src/codemods → codemods}/ensure-jscodeshift.mjs +1 -1
- package/{src/codemods → codemods}/integration-discovery.mjs +6 -3
- package/{src/codemods → codemods}/integration-discovery.test.mjs +1 -1
- package/{src/codemods → codemods}/integration-runner.mjs +8 -3
- package/{src/codemods → codemods}/registry.mjs +3 -1
- package/{src/codemods → codemods}/run-codemod.mjs +17 -10
- package/{src/codemods → codemods}/runner.mjs +22 -12
- package/{src/codemods → codemods}/transforms/v0.0.10/remove-size-props.mjs +9 -4
- package/{src/codemods → codemods}/transforms/v0.0.12/add-is-icon-only.mjs +27 -22
- package/{src/codemods → codemods}/transforms/v0.0.13/icon-name-deprecations.mjs +12 -5
- package/{src/codemods → codemods}/transforms/v0.0.13/rename-attachments-to-drawer.mjs +15 -8
- package/{src/codemods → codemods}/transforms/v0.0.13/toolbar-density-to-size.mjs +10 -4
- package/{src/codemods → codemods}/transforms/v0.0.14/rename-action-props.mjs +11 -5
- package/{src/codemods → codemods}/transforms/v0.0.14/rename-section-wash-to-muted.mjs +11 -6
- package/{src/codemods → codemods}/transforms/v0.0.14/rename-status-variants.mjs +15 -10
- package/{src/codemods → codemods}/transforms/v0.0.15/migrate-item-children-to-endcontent.mjs +13 -8
- package/{src/codemods → codemods}/transforms/v0.0.15/migrate-selector-children-to-render-option.mjs +18 -13
- package/{src/codemods → codemods}/transforms/v0.0.15/migrate-theme-selectors-to-data-attrs.mjs +8 -4
- package/{src/codemods → codemods}/transforms/v0.0.15/rename-date-picker-to-input.mjs +11 -6
- package/{src/codemods → codemods}/transforms/v0.0.15/rename-imperative-ref-to-handleRef.mjs +6 -1
- package/{src/codemods → codemods}/transforms/v0.0.15/rename-isStreaming-to-isStopShown.mjs +6 -1
- package/{src/codemods → codemods}/transforms/v0.0.15/rename-stack-element-to-as.mjs +8 -3
- package/{src/codemods → codemods}/transforms/v0.0.2/migrate-badge-dot-to-statusdot.mjs +17 -10
- package/{src/codemods → codemods}/transforms/v0.0.2/migrate-gap-to-numeric.mjs +7 -1
- package/{src/codemods → codemods}/transforms/v0.0.2/migrate-isFullBleed-to-padding.mjs +9 -4
- package/{src/codemods → codemods}/transforms/v0.0.2/migrate-useXDSIcon-to-getIcon.mjs +12 -7
- package/{src/codemods → codemods}/transforms/v0.0.2/rename-banner-endButton-to-endContent.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.0.2/rename-form-tooltip-startIcon.mjs +8 -2
- package/{src/codemods → codemods}/transforms/v0.0.2/rename-isShown-to-isOpen.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.0.2/rename-selector-items-to-options.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.0.2/rename-sidenav-header-to-heading.mjs +11 -4
- package/{src/codemods → codemods}/transforms/v0.0.2/rename-topnav-title-to-heading.mjs +10 -4
- package/{src/codemods → codemods}/transforms/v0.0.2/unify-uncontrolled-to-defaultX.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.0.2/unify-visibility-to-onOpenChange.mjs +10 -5
- package/{src/codemods → codemods}/transforms/v0.0.6/migrate-badge-children-to-label.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.0.6/migrate-collapse-to-collapsible.mjs +9 -3
- package/{src/codemods → codemods}/transforms/v0.0.6/migrate-radius-tokens.mjs +11 -5
- package/{src/codemods → codemods}/transforms/v0.0.6/migrate-shadow-tokens.mjs +13 -6
- package/{src/codemods → codemods}/transforms/v0.0.6/migrate-skeleton-radius.mjs +7 -1
- package/{src/codemods → codemods}/transforms/v0.0.6/migrate-token-names.mjs +11 -5
- package/{src/codemods → codemods}/transforms/v0.0.7/rename-banner-variant-to-container.mjs +8 -3
- package/{src/codemods → codemods}/transforms/v0.0.8/migrate-token-renames.mjs +15 -8
- package/{src/codemods → codemods}/transforms/v0.0.8/rename-endslot-to-endcontent.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.1.0/drop-xds-prefix-imports.mjs +19 -14
- package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-css-surfaces.mjs +21 -17
- package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-declare-module.mjs +7 -2
- package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-module-specifiers.mjs +16 -11
- package/{src/codemods → codemods}/transforms/v0.1.2/rename-text-color-active-to-accent.mjs +15 -9
- package/{src/codemods → codemods}/transforms/v0.1.3/migrate-layout-components-to-experimental.mjs +17 -12
- package/{src/codemods → codemods}/transforms/v0.1.5/rename-switch-label-spacing-default-to-hug.mjs +15 -9
- package/{src/codemods → codemods}/transforms/v0.1.7/migrate-table-tableprops-to-direct-props.mjs +17 -10
- package/{src/codemods → codemods}/transforms/v0.1.7/rename-table-renderprops-styles-to-xstyle.mjs +18 -13
- package/{src/codemods → codemods}/transforms/v0.1.8/rename-avatar-size-scale.mjs +15 -10
- package/docs/internationalization.doc.mjs +92 -46
- package/{src/commands → lib/agent-docs}/agent-docs.mjs +30 -11
- package/{src/commands → lib/agent-docs}/agent-docs.path-safety.test.mjs +1 -1
- package/{src/lib → lib}/component-discovery.mjs +44 -2
- package/{src/lib → lib}/component-format.mjs +65 -24
- package/{src/lib → lib}/component-loader.mjs +27 -13
- package/{src/lib → lib}/componentDocOverlay.test.mjs +0 -1
- package/{src/lib → lib}/error-codes.test.mjs +1 -1
- package/{src/lib → lib}/hook-discovery.mjs +14 -1
- package/{src/lib → lib}/hook-format.mjs +29 -5
- package/{src/lib → lib}/integration-warnings.mjs +2 -2
- package/{src/lib → lib}/integrations.mjs +20 -0
- package/{src/lib → lib}/integrations.test.mjs +1 -1
- package/{src/lib → lib}/json-contract.test.mjs +1 -1
- package/{src/lib → lib}/json-shim.mjs +10 -5
- package/{src/lib → lib}/json-shim.test.mjs +1 -1
- package/{src/lib → lib}/levenshtein.mjs +6 -0
- package/{src/lib → lib}/manifest.mjs +7 -5
- package/{src/lib → lib}/manifest.test.mjs +2 -2
- package/{src/lib → lib}/module-loader.mjs +1 -0
- package/{src/lib → lib}/package-scanner.mjs +47 -0
- package/{src/lib → lib}/project.mjs +48 -18
- package/{src/lib → lib}/project.test.mjs +1 -1
- package/{src/lib → lib}/resolve-theme.mjs +5 -0
- package/{src/lib → lib}/string-utils.mjs +15 -0
- package/{src/lib → lib}/term-log.mjs +12 -3
- package/{src/lib → lib}/xle/browser.mjs +18 -8
- package/{src/lib → lib}/xle/expand.mjs +155 -22
- package/{src/lib → lib}/xle/parse.mjs +119 -13
- package/{src/lib → lib}/xle/print.mjs +54 -14
- package/{src/lib → lib}/xle/registry-core.mjs +28 -3
- package/{src/lib → lib}/xle/registry.mjs +9 -4
- package/{src/lib → lib}/xle/splice.mjs +13 -2
- package/{src/lib → lib}/xle/validate.mjs +95 -14
- package/lib/xle/xle-ast.d.ts +214 -0
- package/package.json +33 -26
- package/scripts/postinstall.mjs +4 -4
- package/templates/blocks/components/Avatar/AvatarShowcase.tsx +1 -1
- package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.doc.mjs +19 -0
- package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +46 -0
- package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider02Overrides.doc.mjs +14 -0
- package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider02Overrides.tsx +33 -0
- package/{src/types → types}/api.contract.assert.ts +17 -8
- package/{src/types → types}/api.d.ts +106 -0
- package/{src/types → types}/base.d.ts +17 -2
- package/types/build.d.ts +53 -0
- package/types/codemod.d.ts +166 -0
- package/{src/types → types}/component.d.ts +1 -1
- package/{src/types → types}/discover.d.ts +1 -1
- package/{src/types → types}/docs.d.ts +1 -4
- package/{src/types → types}/hook.d.ts +1 -1
- package/types/jscodeshift.d.ts +19 -0
- package/types/layout.d.ts +74 -0
- package/types/theme.d.ts +53 -0
- package/{src/types → types}/upgrade.d.ts +8 -1
- package/{src/utils → utils}/paths.mjs +4 -1
- package/src/commands/swizzle.mjs +0 -417
- package/src/types/build.d.ts +0 -23
- package/src/types/codemod.d.ts +0 -81
- package/src/types/theme.d.ts +0 -23
- /package/{src/api → api/docs}/docOverlays.test.mjs +0 -0
- /package/{src/api → api}/error.mjs +0 -0
- /package/{src/api → api/integration}/integration-block-exports.test.mjs +0 -0
- /package/{src/api → api/template}/template.test.mjs +0 -0
- /package/{src → authoring}/codemod.test.mjs +0 -0
- /package/{src → authoring}/config.mjs +0 -0
- /package/{src → authoring}/integration.mjs +0 -0
- /package/{src → authoring}/template.test.mjs +0 -0
- /package/{src → cli}/cli-exit-codes.test.mjs +0 -0
- /package/{src → cli}/commands/build-theme.color-scheme.test.mjs +0 -0
- /package/{src → cli}/commands/build-theme.import-path.test.mjs +0 -0
- /package/{src → cli}/commands/build-theme.path-safety.test.mjs +0 -0
- /package/{src → cli}/commands/build-theme.prose.test.mjs +0 -0
- /package/{src → cli}/commands/build-theme.variants.test.mjs +0 -0
- /package/{src → cli}/commands/build-theme.watch.test.mjs +0 -0
- /package/{src → cli}/commands/cli-postinstall.test.mjs +0 -0
- /package/{src → cli}/commands/component.test.mjs +0 -0
- /package/{src → cli}/commands/detail-levels.test.mjs +0 -0
- /package/{src → cli}/commands/init.next-steps.test.mjs +0 -0
- /package/{src → cli}/commands/interactive-guard.test.mjs +0 -0
- /package/{src → cli}/commands/json-contract.test.mjs +0 -0
- /package/{src → cli}/commands/swizzle.path-safety.test.mjs +0 -0
- /package/{src → cli}/commands/swizzle.routing.test.mjs +0 -0
- /package/{src → cli}/commands/template.test.mjs +0 -0
- /package/{src → cli}/commands/upgrade.config-ordering.test.mjs +0 -0
- /package/{src → cli}/commands/validate-integration.test.mjs +0 -0
- /package/{src → cli}/update-hint-commands.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/registry.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/rename-imperative-ref-to-handleRef.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/rename-isStreaming-to-isStopShown.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/rename-section-wash-to-muted.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/runner.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/toolbar-density-to-size.test.mjs +0 -0
- /package/{src/codemods → codemods}/__tests__/validation.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.10/__tests__/remove-size-props.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.10/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.12/__tests__/add-is-icon-only.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.12/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.13/__tests__/icon-name-deprecations.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.13/__tests__/rename-attachments-to-drawer.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.13/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.14/__tests__/rename-action-props.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.14/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-item-children-to-endcontent.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-selector-children-to-render-option.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-theme-selectors-to-data-attrs.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/rename-date-picker-to-input.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/rename-stack-element-to-as.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.15/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-badge-dot-to-statusdot.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-gap-to-numeric.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-isFullBleed-to-padding.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-useXDSIcon-to-getIcon.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-banner-endButton-to-endContent.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-form-tooltip-startIcon.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-isShown-to-isOpen.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-selector-items-to-options.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-sidenav-header-to-heading.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-topnav-title-to-heading.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/unify-uncontrolled-to-defaultX.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/unify-visibility-to-onOpenChange.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.2/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-collapse-to-collapsible.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-radius-tokens.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-shadow-tokens.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-skeleton-radius.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-token-names.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.6/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.7/__tests__/rename-banner-variant-to-container.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.7/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.8/__tests__/migrate-token-renames.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.8/__tests__/rename-endslot-to-endcontent.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.0.8/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/drop-xds-prefix-imports.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-css-surfaces.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-declare-module.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-module-specifiers.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/v0.1.0-ordering.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.0/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.2/__tests__/rename-text-color-active-to-accent.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.2/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.3/__tests__/migrate-layout-components-to-experimental.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.3/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.5/__tests__/rename-switch-label-spacing-default-to-hug.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.5/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.7/__tests__/migrate-table-tableprops-to-direct-props.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.7/__tests__/rename-table-renderprops-styles-to-xstyle.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.7/index.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +0 -0
- /package/{src/codemods → codemods}/transforms/v0.1.8/index.mjs +0 -0
- /package/{src/commands → lib/agent-docs}/agent-docs.test.mjs +0 -0
- /package/{src/lib → lib}/cli-error.mjs +0 -0
- /package/{src/lib → lib}/cli-error.test.mjs +0 -0
- /package/{src/lib → lib}/component-discovery.importpath.test.mjs +0 -0
- /package/{src/lib → lib}/component-format.test.mjs +0 -0
- /package/{src/lib → lib}/component-loader.test.mjs +0 -0
- /package/{src/lib → lib}/config-cache.mjs +0 -0
- /package/{src/lib → lib}/config-cache.test.mjs +0 -0
- /package/{src/lib → lib}/config-schema.mjs +0 -0
- /package/{src/lib → lib}/error-codes.mjs +0 -0
- /package/{src/lib → lib}/integration-warnings.test.mjs +0 -0
- /package/{src/lib → lib}/json.mjs +0 -0
- /package/{src/lib → lib}/module-loader.test.mjs +0 -0
- /package/{src/lib → lib}/node-version.mjs +0 -0
- /package/{src/lib → lib}/node-version.test.mjs +0 -0
- /package/{src/lib → lib}/parse.mjs +0 -0
- /package/{src/lib → lib}/site.mjs +0 -0
- /package/{src/lib → lib}/xle/browser.d.ts +0 -0
- /package/{src/lib → lib}/xle/xle.test.mjs +0 -0
- /package/{src/schemas → schemas}/doc-schema.mjs +0 -0
- /package/{src/schemas → schemas}/template-schema.mjs +0 -0
- /package/{src/types → types}/config.d.ts +0 -0
- /package/{src/types → types}/doc.d.ts +0 -0
- /package/{src/types → types}/doctor.d.ts +0 -0
- /package/{src/types → types}/error-codes.d.ts +0 -0
- /package/{src/types → types}/index.d.ts +0 -0
- /package/{src/types → types}/integration.d.ts +0 -0
- /package/{src/types → types}/manifest.d.ts +0 -0
- /package/{src/types → types}/search.d.ts +0 -0
- /package/{src/types → types}/swizzle.d.ts +0 -0
- /package/{src/types → types}/template-api.d.ts +0 -0
- /package/{src/types → types}/template.d.ts +0 -0
- /package/{src/types → types}/validate-integration.d.ts +0 -0
- /package/{src/utils → utils}/github.mjs +0 -0
- /package/{src/utils → utils}/package-manager.mjs +0 -0
- /package/{src/utils → utils}/package-manager.test.mjs +0 -0
- /package/{src/utils → utils}/path-safety.mjs +0 -0
- /package/{src/utils → utils}/path-safety.test.mjs +0 -0
- /package/{src/utils → utils}/paths.test.mjs +0 -0
- /package/{src/utils → utils}/semver.mjs +0 -0
- /package/{src/utils → utils}/semver.test.mjs +0 -0
- /package/{src/utils → utils}/update-check.mjs +0 -0
- /package/{src/utils → utils}/update-check.test.mjs +0 -0
|
@@ -44,19 +44,42 @@ import {findCoreDir} from '../utils/paths.mjs';
|
|
|
44
44
|
import {
|
|
45
45
|
discoverTemplates,
|
|
46
46
|
discoverIntegrationTemplatesForOne,
|
|
47
|
-
} from '../api/template.mjs';
|
|
47
|
+
} from '../api/template/template.mjs';
|
|
48
48
|
import {getTransformsBetween} from '../codemods/registry.mjs';
|
|
49
49
|
import {
|
|
50
50
|
discoverIntegrationCodemods,
|
|
51
51
|
selectIntegrationCodemods,
|
|
52
52
|
} from '../codemods/integration-discovery.mjs';
|
|
53
|
-
import {validateLoadedIntegration} from '../api/validate-integration.mjs';
|
|
53
|
+
import {validateLoadedIntegration} from '../api/integration/validate-integration.mjs';
|
|
54
54
|
import {
|
|
55
55
|
InMemoryConfigCache,
|
|
56
56
|
cacheKey,
|
|
57
57
|
configContentHash,
|
|
58
58
|
} from './config-cache.mjs';
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Extract a human-readable message from an unknown thrown value.
|
|
62
|
+
* Reproduces the historical `err?.message ?? String(err)` behavior in a
|
|
63
|
+
* strict-checkJs-safe way: prefer a non-nullish `.message` (covers Error
|
|
64
|
+
* instances and error-like objects thrown by integration code), else `String()`.
|
|
65
|
+
* @param {unknown} err
|
|
66
|
+
* @returns {string}
|
|
67
|
+
*/
|
|
68
|
+
function errorMessage(err) {
|
|
69
|
+
const message =
|
|
70
|
+
err && typeof err === 'object' && 'message' in err
|
|
71
|
+
? /** @type {{message: unknown}} */ (err).message
|
|
72
|
+
: undefined;
|
|
73
|
+
return message == null ? String(err) : String(message);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* An integration issue tagged with the owner package. The base
|
|
78
|
+
* {@link import('../types/integration').AstryxIntegrationIssue} fields plus the
|
|
79
|
+
* `package` that produced it, which Project tracks for routing/dedup.
|
|
80
|
+
* @typedef {import('../types/integration').AstryxIntegrationIssue & {package: string}} ProjectIntegrationIssue
|
|
81
|
+
*/
|
|
82
|
+
|
|
60
83
|
/** Conventional config basenames, in load-precedence order. */
|
|
61
84
|
export const CONFIG_BASENAMES = [
|
|
62
85
|
'astryx.config.ts',
|
|
@@ -117,13 +140,13 @@ export class Project {
|
|
|
117
140
|
#config;
|
|
118
141
|
/** @type {string[]} */
|
|
119
142
|
#integrations;
|
|
120
|
-
/** @type {
|
|
143
|
+
/** @type {import('./integrations.mjs').LoadedIntegration[]} */
|
|
121
144
|
#loadedIntegrations;
|
|
122
145
|
/** @type {import('./config-cache.mjs').ConfigCache} */
|
|
123
146
|
#cache;
|
|
124
147
|
/** @type {string} */
|
|
125
148
|
#hash;
|
|
126
|
-
/** @type {
|
|
149
|
+
/** @type {ProjectIntegrationIssue[]} */
|
|
127
150
|
#issues = [];
|
|
128
151
|
/**
|
|
129
152
|
* Package names of integrations whose issues have already been collected
|
|
@@ -137,9 +160,9 @@ export class Project {
|
|
|
137
160
|
* @param {object} init
|
|
138
161
|
* @param {string} init.cwd
|
|
139
162
|
* @param {string|null} init.configPath
|
|
140
|
-
* @param {
|
|
163
|
+
* @param {import('../types/config').AstryxConfig} init.config validated AstryxConfig surface
|
|
141
164
|
* @param {string[]} init.integrations
|
|
142
|
-
* @param {
|
|
165
|
+
* @param {import('./integrations.mjs').LoadedIntegration[]} init.loadedIntegrations
|
|
143
166
|
* @param {import('./config-cache.mjs').ConfigCache} init.cache
|
|
144
167
|
* @param {string} init.hash config content hash
|
|
145
168
|
*/
|
|
@@ -175,8 +198,11 @@ export class Project {
|
|
|
175
198
|
const configPath = findConfigPath(cwd);
|
|
176
199
|
const hash = configContentHash(configPath);
|
|
177
200
|
|
|
201
|
+
/** @type {import('../types/config').AstryxConfig} */
|
|
178
202
|
let config = {integrations: []};
|
|
203
|
+
/** @type {string[]} */
|
|
179
204
|
let integrations = [];
|
|
205
|
+
/** @type {import('./integrations.mjs').LoadedIntegration[]} */
|
|
180
206
|
let loadedIntegrations = [];
|
|
181
207
|
|
|
182
208
|
if (configPath) {
|
|
@@ -204,7 +230,7 @@ export class Project {
|
|
|
204
230
|
/**
|
|
205
231
|
* The validated config surface (same data loadConfig returned, minus the
|
|
206
232
|
* resolved `loadedIntegrations` which is exposed separately).
|
|
207
|
-
* @returns {
|
|
233
|
+
* @returns {import('../types/config').AstryxConfig}
|
|
208
234
|
*/
|
|
209
235
|
get config() {
|
|
210
236
|
return this.#config;
|
|
@@ -215,7 +241,7 @@ export class Project {
|
|
|
215
241
|
return this.#integrations;
|
|
216
242
|
}
|
|
217
243
|
|
|
218
|
-
/** Resolved loaded integrations (lib/integrations.mjs shape). @returns {
|
|
244
|
+
/** Resolved loaded integrations (lib/integrations.mjs shape). @returns {import('./integrations.mjs').LoadedIntegration[]} */
|
|
219
245
|
get loadedIntegrations() {
|
|
220
246
|
return this.#loadedIntegrations;
|
|
221
247
|
}
|
|
@@ -245,7 +271,7 @@ export class Project {
|
|
|
245
271
|
*/
|
|
246
272
|
async #memo(kind, produce) {
|
|
247
273
|
const key = cacheKey(this.#hash, this.#cwd, kind);
|
|
248
|
-
const hit = this.#cache.get(key);
|
|
274
|
+
const hit = /** @type {{value: T} | undefined} */ (this.#cache.get(key));
|
|
249
275
|
if (hit !== undefined) return hit.value;
|
|
250
276
|
const value = await produce();
|
|
251
277
|
this.#cache.set(key, {value});
|
|
@@ -272,7 +298,10 @@ export class Project {
|
|
|
272
298
|
});
|
|
273
299
|
}
|
|
274
300
|
|
|
275
|
-
/** Package label for a loaded integration.
|
|
301
|
+
/** Package label for a loaded integration.
|
|
302
|
+
* @param {import('./integrations.mjs').LoadedIntegration} integration
|
|
303
|
+
* @returns {string}
|
|
304
|
+
*/
|
|
276
305
|
#pkgLabel(integration) {
|
|
277
306
|
return integration?.name ?? integration?.__spec ?? '(integration)';
|
|
278
307
|
}
|
|
@@ -281,7 +310,7 @@ export class Project {
|
|
|
281
310
|
* Validate one loaded integration and collect any issues. Marks the
|
|
282
311
|
* integration visited so issues() won't redo the work. Best-effort: a
|
|
283
312
|
* validator throwing is itself recorded as an issue, never propagated.
|
|
284
|
-
* @param {
|
|
313
|
+
* @param {import('./integrations.mjs').LoadedIntegration} integration
|
|
285
314
|
*/
|
|
286
315
|
async #collectIssues(integration) {
|
|
287
316
|
const pkg = this.#pkgLabel(integration);
|
|
@@ -294,7 +323,7 @@ export class Project {
|
|
|
294
323
|
this.#pushIssue(pkg, {
|
|
295
324
|
code: 'integration_error',
|
|
296
325
|
severity: 'error',
|
|
297
|
-
message:
|
|
326
|
+
message: errorMessage(err),
|
|
298
327
|
});
|
|
299
328
|
}
|
|
300
329
|
}
|
|
@@ -311,7 +340,7 @@ export class Project {
|
|
|
311
340
|
async components() {
|
|
312
341
|
return this.#memo('components', async () => {
|
|
313
342
|
const coreDir = findCoreDir(this.#cwd);
|
|
314
|
-
/** @type {Array<
|
|
343
|
+
/** @type {Array<{name: string, package: string, group: string|null, docPath: string|null, sourcePath: string|null, issuesUrl: string|undefined}>} */
|
|
315
344
|
const records = [];
|
|
316
345
|
|
|
317
346
|
// Core records (no integrations) — never integration-broken.
|
|
@@ -343,7 +372,7 @@ export class Project {
|
|
|
343
372
|
this.#pushIssue(pkg, {
|
|
344
373
|
code: 'invalid_component',
|
|
345
374
|
severity: 'error',
|
|
346
|
-
message:
|
|
375
|
+
message: errorMessage(err),
|
|
347
376
|
});
|
|
348
377
|
}
|
|
349
378
|
}
|
|
@@ -362,7 +391,7 @@ export class Project {
|
|
|
362
391
|
*/
|
|
363
392
|
async templates() {
|
|
364
393
|
return this.#memo('templates', async () => {
|
|
365
|
-
/** @type {
|
|
394
|
+
/** @type {any[]} */
|
|
366
395
|
const templates = [];
|
|
367
396
|
|
|
368
397
|
// Core + external-package templates (discoverTemplates internally also
|
|
@@ -371,7 +400,7 @@ export class Project {
|
|
|
371
400
|
// path so the skip+warn policy and issue collection apply, then dedupe).
|
|
372
401
|
try {
|
|
373
402
|
const core = await discoverTemplates(this.#cwd);
|
|
374
|
-
for (const t of core) {
|
|
403
|
+
for (const t of /** @type {any[]} */ (core)) {
|
|
375
404
|
// Skip integration-owned templates here; they are re-added (and
|
|
376
405
|
// issue-collected) per integration below to honor skip+warn.
|
|
377
406
|
if (t.package && t.package !== CORE_PACKAGE) continue;
|
|
@@ -405,7 +434,7 @@ export class Project {
|
|
|
405
434
|
this.#pushIssue(pkg, {
|
|
406
435
|
code: 'invalid_template',
|
|
407
436
|
severity: 'error',
|
|
408
|
-
message:
|
|
437
|
+
message: errorMessage(err),
|
|
409
438
|
});
|
|
410
439
|
}
|
|
411
440
|
}
|
|
@@ -431,6 +460,7 @@ export class Project {
|
|
|
431
460
|
|
|
432
461
|
// Discover integration codemods per integration so a single broken
|
|
433
462
|
// integration is skipped (issue collected) without losing the others.
|
|
463
|
+
/** @type {import('./integrations.mjs').LoadedIntegration[]} */
|
|
434
464
|
const good = [];
|
|
435
465
|
for (const integration of this.#loadedIntegrations) {
|
|
436
466
|
await this.#collectIssues(integration);
|
|
@@ -449,7 +479,7 @@ export class Project {
|
|
|
449
479
|
this.#pushIssue(pkg, {
|
|
450
480
|
code: 'invalid_codemod',
|
|
451
481
|
severity: 'error',
|
|
452
|
-
message:
|
|
482
|
+
message: errorMessage(err),
|
|
453
483
|
});
|
|
454
484
|
}
|
|
455
485
|
}
|
|
@@ -25,6 +25,9 @@ const _require = createRequire(import.meta.url);
|
|
|
25
25
|
/**
|
|
26
26
|
* Try to load a module, returning the default export or the module itself.
|
|
27
27
|
* Returns null if the module cannot be found.
|
|
28
|
+
* @param {string} specifier
|
|
29
|
+
* @param {string} cwd
|
|
30
|
+
* @returns {unknown}
|
|
28
31
|
*/
|
|
29
32
|
function tryLoadModule(specifier, cwd) {
|
|
30
33
|
// For relative/absolute paths, resolve against cwd
|
|
@@ -49,6 +52,8 @@ function tryLoadModule(specifier, cwd) {
|
|
|
49
52
|
* Extract theme data from a loaded module.
|
|
50
53
|
* Handles both `module.default` and direct `module` patterns,
|
|
51
54
|
* as well as named exports like `module.theme` or `module.{name}Theme`.
|
|
55
|
+
* @param {any} mod
|
|
56
|
+
* @returns {any}
|
|
52
57
|
*/
|
|
53
58
|
function extractTheme(mod) {
|
|
54
59
|
if (!mod || typeof mod !== 'object') return null;
|
|
@@ -13,6 +13,10 @@ export {levenshteinDistance} from './levenshtein.mjs';
|
|
|
13
13
|
/**
|
|
14
14
|
* Find the closest component names to a given (possibly misspelled) name.
|
|
15
15
|
* Returns matches sorted by distance, filtered to maxDistance.
|
|
16
|
+
* @param {string} name
|
|
17
|
+
* @param {Record<string, string[]>} components
|
|
18
|
+
* @param {number} [maxDistance]
|
|
19
|
+
* @returns {{name: string, distance: number}[]}
|
|
16
20
|
*/
|
|
17
21
|
export function findClosestComponents(name, components, maxDistance = 3) {
|
|
18
22
|
const allNames = Object.values(components).flat();
|
|
@@ -45,6 +49,11 @@ export function findClosestComponents(name, components, maxDistance = 3) {
|
|
|
45
49
|
* 20 name Levenshtein distance 3
|
|
46
50
|
*
|
|
47
51
|
* Each result: { name, score, reason }
|
|
52
|
+
*
|
|
53
|
+
* @param {string} needle
|
|
54
|
+
* @param {string} coreDir
|
|
55
|
+
* @param {Record<string, string[]>} components
|
|
56
|
+
* @returns {Promise<{name: string, score: number, reason: string}[]>}
|
|
48
57
|
*/
|
|
49
58
|
export async function searchComponents(needle, coreDir, components) {
|
|
50
59
|
const {pathToFileURL} = await import('node:url');
|
|
@@ -53,8 +62,14 @@ export async function searchComponents(needle, coreDir, components) {
|
|
|
53
62
|
|
|
54
63
|
const term = needle.toLowerCase();
|
|
55
64
|
const allNames = Object.values(components).flat();
|
|
65
|
+
/** @type {Map<string, {name: string, score: number, reason: string}>} */
|
|
56
66
|
const scored = new Map();
|
|
57
67
|
|
|
68
|
+
/**
|
|
69
|
+
* @param {string} name
|
|
70
|
+
* @param {number} score
|
|
71
|
+
* @param {string} reason
|
|
72
|
+
*/
|
|
58
73
|
function addMatch(name, score, reason) {
|
|
59
74
|
const existing = scored.get(name);
|
|
60
75
|
if (!existing || score > existing.score) {
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
* primitive, which is a no-op in `--json` mode — so these human logs can never
|
|
16
16
|
* corrupt a JSON envelope.
|
|
17
17
|
*
|
|
18
|
-
* Call sites use it as `import * as p from '
|
|
18
|
+
* Call sites use it as `import * as p from './term-log.mjs'` and call
|
|
19
19
|
* `p.log.info(...)`, `p.intro(...)`, `p.outro(...)`.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import {humanLog} from './json.mjs';
|
|
23
23
|
|
|
24
|
+
/** @param {unknown} msg */
|
|
24
25
|
const toStr = (msg) => (msg === undefined || msg === null ? '' : String(msg));
|
|
25
26
|
|
|
26
27
|
/**
|
|
@@ -29,20 +30,28 @@ const toStr = (msg) => (msg === undefined || msg === null ? '' : String(msg));
|
|
|
29
30
|
* every one of these, keeping machine-readable stdout clean.
|
|
30
31
|
*/
|
|
31
32
|
export const log = {
|
|
33
|
+
/** @param {unknown} msg */
|
|
32
34
|
message: (msg) => humanLog(toStr(msg)),
|
|
35
|
+
/** @param {unknown} msg */
|
|
33
36
|
info: (msg) => humanLog(toStr(msg)),
|
|
37
|
+
/** @param {unknown} msg */
|
|
34
38
|
step: (msg) => humanLog(toStr(msg)),
|
|
39
|
+
/** @param {unknown} msg */
|
|
35
40
|
success: (msg) => humanLog(`✓ ${toStr(msg)}`),
|
|
41
|
+
/** @param {unknown} msg */
|
|
36
42
|
warn: (msg) => humanLog(`⚠ ${toStr(msg)}`),
|
|
43
|
+
/** @param {unknown} msg */
|
|
37
44
|
error: (msg) => humanLog(`✗ ${toStr(msg)}`),
|
|
38
45
|
};
|
|
39
46
|
|
|
40
|
-
/** Banner printed at the start of a multi-step command.
|
|
47
|
+
/** Banner printed at the start of a multi-step command.
|
|
48
|
+
* @param {unknown} title */
|
|
41
49
|
export function intro(title) {
|
|
42
50
|
humanLog(`\n${toStr(title)}`);
|
|
43
51
|
}
|
|
44
52
|
|
|
45
|
-
/** Footer printed at the end of a multi-step command.
|
|
53
|
+
/** Footer printed at the end of a multi-step command.
|
|
54
|
+
* @param {unknown} message */
|
|
46
55
|
export function outro(message) {
|
|
47
56
|
humanLog(`${toStr(message)}\n`);
|
|
48
57
|
}
|
|
@@ -23,11 +23,21 @@ import {hydrateRegistry} from './registry-core.mjs';
|
|
|
23
23
|
export {parse, detectForm, XLEParseError, validate, expand, toCompact, toOutline};
|
|
24
24
|
export {hydrateRegistry, serializeRegistry, ALIAS_TABLE, resolveComponent, SPACING_STEPS} from './registry-core.mjs';
|
|
25
25
|
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Accept either a hydrated registry (Map fields) or serialized JSON.
|
|
28
|
+
* @param {import('./xle-ast').Registry | import('./browser').SerializedRegistry | object} registry
|
|
29
|
+
* @returns {import('./xle-ast').Registry}
|
|
30
|
+
*/
|
|
27
31
|
function asRegistry(registry) {
|
|
28
|
-
return registry && registry.components instanceof Map
|
|
32
|
+
return registry && /** @type {any} */ (registry).components instanceof Map
|
|
33
|
+
? /** @type {import('./xle-ast').Registry} */ (registry)
|
|
34
|
+
: hydrateRegistry(/** @type {import('./browser').SerializedRegistry} */ (registry));
|
|
29
35
|
}
|
|
30
36
|
|
|
37
|
+
/**
|
|
38
|
+
* @param {import('./xle-ast').RawIssue | {message: string, line?: number, col?: number}} issue
|
|
39
|
+
* @returns {string}
|
|
40
|
+
*/
|
|
31
41
|
function formatIssue(issue) {
|
|
32
42
|
const where = issue.line != null ? `line ${issue.line}: ` : '';
|
|
33
43
|
return `${where}${issue.message}`;
|
|
@@ -38,12 +48,12 @@ function formatIssue(issue) {
|
|
|
38
48
|
* twin of `layout check`. Never throws on invalid input; returns the errors.
|
|
39
49
|
*
|
|
40
50
|
* @param {string} expression
|
|
41
|
-
* @param {object} registry - serialized or hydrated
|
|
51
|
+
* @param {import('./xle-ast').Registry | import('./browser').SerializedRegistry | object} registry - serialized or hydrated
|
|
42
52
|
* @param {object} [opts]
|
|
43
|
-
* @param {
|
|
53
|
+
* @param {import('./browser').XLEBlock[]} [opts.blocks] - block list for {hint} resolution (default [])
|
|
44
54
|
* @param {'compact'|'outline'|'auto'} [opts.form]
|
|
45
55
|
* @param {boolean} [opts.loose]
|
|
46
|
-
* @returns {
|
|
56
|
+
* @returns {import('./browser').CheckResult}
|
|
47
57
|
*/
|
|
48
58
|
export function checkExpression(expression, registry, opts = {}) {
|
|
49
59
|
const {blocks = [], form = 'auto', loose = false} = opts;
|
|
@@ -79,13 +89,13 @@ export function checkExpression(expression, registry, opts = {}) {
|
|
|
79
89
|
* Returns either {code, ...} or {errors} (never writes files).
|
|
80
90
|
*
|
|
81
91
|
* @param {string} expression
|
|
82
|
-
* @param {object} registry
|
|
92
|
+
* @param {import('./xle-ast').Registry | import('./browser').SerializedRegistry | object} registry
|
|
83
93
|
* @param {object} [opts]
|
|
84
|
-
* @param {
|
|
94
|
+
* @param {import('./browser').XLEBlock[]} [opts.blocks]
|
|
85
95
|
* @param {'compact'|'outline'|'auto'} [opts.form]
|
|
86
96
|
* @param {boolean} [opts.loose]
|
|
87
97
|
* @param {string} [opts.name] - generated component name (PascalCase)
|
|
88
|
-
* @param {Map} [opts.blockModules] - prepared block sources/imports for splicing;
|
|
98
|
+
* @param {Map<string, import('./xle-ast').BlockModule>} [opts.blockModules] - prepared block sources/imports for splicing;
|
|
89
99
|
* omit in the browser (hints stay as TODO markers without sources)
|
|
90
100
|
*/
|
|
91
101
|
export function expandExpression(expression, registry, opts = {}) {
|