@astryxdesign/cli 0.6.3-canary.db4e378 → 0.6.3-canary.db52d98
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/README.md +38 -15
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/_adapter.d.mts +50 -0
- package/api/build/_adapter.mjs +60 -0
- package/api/build/build.doc.mjs +14 -7
- package/api/build/build.test.mjs +184 -6
- package/api/build/build.type.d.mts +57 -2
- package/api/build/build.type.mjs +30 -7
- package/api/build/help/help.d.mts +4 -0
- package/api/build/help/help.mjs +24 -11
- package/api/build/kit/kit.d.mts +4 -1
- package/api/build/kit/kit.mjs +165 -49
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +6 -12
- package/api/component/_adapter.mjs +20 -10
- package/api/component/component.doc.mjs +1 -0
- package/api/component/component.mjs +60 -12
- package/api/component/list/list.mjs +3 -2
- package/api/discover/discover.doc.mjs +1 -0
- package/api/docs/_adapter.d.mts +252 -34
- package/api/docs/_adapter.mjs +923 -132
- package/api/docs/detail/detail.mjs +11 -3
- package/api/docs/detail/section/section.mjs +24 -13
- package/api/docs/detail/section/section.test.mjs +15 -6
- package/api/docs/docs.d.mts +5 -3
- package/api/docs/docs.doc.mjs +39 -17
- package/api/docs/docs.mjs +44 -8
- package/api/docs/docs.test.mjs +158 -4
- package/api/docs/docs.type.d.mts +181 -2
- package/api/docs/docs.type.mjs +117 -3
- package/api/docs/index/index.mjs +11 -3
- package/api/docs/index/index.test.mjs +1 -1
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +14 -14
- package/api/docs/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +54 -4
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +331 -16
- package/api/doctor/doctor.test.mjs +420 -7
- package/api/gap-report/gap-report.doc.mjs +1 -0
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/list/list.d.mts +1 -1
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +1 -1
- package/api/index.mjs +1 -0
- package/api/init/init.doc.mjs +2 -1
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +114 -12
- package/api/integration/add-contribution.test.mjs +174 -3
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +138 -28
- package/api/integration/authoring-checks.test.mjs +179 -7
- package/api/integration/authoring-checks.type.mjs +6 -1
- package/api/integration/integration-authoring.type.d.mts +2 -0
- package/api/integration/integration-authoring.type.mjs +2 -0
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +7 -0
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +1 -0
- package/api/integration/integrationAddDoc.doc.mjs +8 -1
- package/api/integration/integrationAddTemplate.doc.mjs +1 -0
- package/api/integration/integrationAddTheme.doc.mjs +6 -5
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
- package/api/integration/integrationDocConflicts.doc.mjs +2 -1
- package/api/integration/integrationPackCheck.doc.mjs +2 -1
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.mjs +34 -0
- package/api/integration/pack-check.test.mjs +138 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +50 -102
- package/api/integration/validate-integration.test.mjs +88 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +2 -1
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +1 -0
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +1 -0
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search.d.mts +59 -1
- package/api/search/search.doc.mjs +5 -3
- package/api/search/search.mjs +458 -77
- package/api/search/search.test.mjs +91 -2
- package/api/search/search.type.d.mts +13 -1
- package/api/search/search.type.mjs +4 -1
- package/api/swizzle/swizzle.doc.mjs +1 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1072 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.doc.mjs +28 -7
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +6 -8
- package/api/template/template.type.mjs +3 -2
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +10 -17
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/template/template.test.mjs +5 -0
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +1 -0
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +2 -1
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +97 -69
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +356 -59
- package/api/upgrade/upgrade.doc.mjs +6 -1
- package/api/upgrade/upgrade.type.d.mts +34 -0
- package/api/upgrade/upgrade.type.mjs +15 -0
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +8 -2
- package/assets/codemods/integration-discovery.test.mjs +15 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +350 -102
- package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/next/index.mjs +19 -1
- package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/layout.doc.dense.mjs +2 -2
- package/assets/docs/layout.doc.mjs +1 -1
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +3 -3
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +5 -5
- package/assets/docs/tokens.doc.mjs +1 -1
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/working-with-ai.doc.mjs +3 -3
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/codemod/codemod.doc.mjs +1 -1
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +1 -1
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +3 -3
- package/authoring/doctypes/_schema.d.mts +119 -117
- package/authoring/doctypes/_schema.mjs +54 -3
- package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
- package/authoring/doctypes/base/type.ts +6 -5
- package/authoring/doctypes/command/command.doc.mjs +1 -1
- package/authoring/doctypes/command/type.ts +2 -2
- package/authoring/doctypes/component/type.ts +2 -2
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +1 -1
- package/authoring/doctypes/function/function.doc.mjs +3 -2
- package/authoring/doctypes/function/type.ts +3 -2
- package/authoring/doctypes/hook/type.ts +2 -2
- package/authoring/doctypes/load-contract.test.mjs +28 -2
- package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
- package/authoring/doctypes/namespace/parse.test.mjs +23 -25
- package/authoring/doctypes/namespace/type.ts +5 -2
- package/authoring/doctypes/parse.d.mts +4 -2
- package/authoring/doctypes/parse.mjs +10 -5
- package/authoring/doctypes/reference/reference.doc.mjs +35 -6
- package/authoring/doctypes/reference/type.ts +30 -13
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +1 -2
- package/authoring/doctypes/template/parse.d.mts +2 -0
- package/authoring/doctypes/template/parse.mjs +4 -0
- package/authoring/doctypes/template/parse.test.mjs +18 -0
- package/authoring/doctypes/template/template.doc.mjs +9 -3
- package/authoring/doctypes/template/type.ts +8 -0
- package/authoring/doctypes/theme/parse.d.mts +35 -0
- package/authoring/doctypes/theme/parse.mjs +76 -0
- package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
- package/authoring/doctypes/theme/theme.doc.mjs +79 -0
- package/authoring/doctypes/theme/type.ts +42 -0
- package/authoring/doctypes/types.ts +2 -1
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/identity/identity.doc.mjs +2 -2
- package/authoring/index.d.mts +1 -0
- package/authoring/index.d.ts +7 -4
- package/authoring/index.mjs +2 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/type.ts +4 -10
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.mjs +11 -45
- package/clients/cli/commands/build.doc.mjs +12 -7
- package/clients/cli/commands/build.mjs +105 -67
- package/clients/cli/commands/build.text-fields.test.mjs +41 -0
- package/clients/cli/commands/component/index.mjs +1 -1
- package/clients/cli/commands/component-ownership.test.mjs +3 -3
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
- package/clients/cli/commands/discover.doc.mjs +1 -1
- package/clients/cli/commands/discover.mjs +1 -1
- package/clients/cli/commands/docs.doc.mjs +21 -9
- package/clients/cli/commands/docs.mjs +184 -70
- package/clients/cli/commands/docs.test.mjs +120 -16
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +53 -16
- package/clients/cli/commands/gap-report.doc.mjs +1 -1
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/init.doc.mjs +1 -1
- package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
- package/clients/cli/commands/integration-add.doc.mjs +11 -1
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/integration.mjs +1 -0
- package/clients/cli/commands/layout-check.doc.mjs +1 -1
- package/clients/cli/commands/layout-expand.doc.mjs +1 -1
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +1 -1
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/search.doc.mjs +1 -1
- package/clients/cli/commands/search.mjs +11 -2
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +1 -1
- package/clients/cli/commands/template.doc.mjs +24 -7
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/text-json-parity.test.mjs +719 -0
- package/clients/cli/commands/theme-add.doc.mjs +2 -2
- package/clients/cli/commands/theme-build.doc.mjs +1 -1
- package/clients/cli/commands/theme-list.doc.mjs +2 -2
- package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
- package/clients/cli/commands/theme-palette.doc.mjs +1 -1
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +1 -1
- package/clients/cli/commands/theme-template.doc.mjs +1 -1
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.doc.mjs +3 -2
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.mjs +29 -7
- package/clients/cli/formatters/index.mjs +2 -0
- package/clients/cli/formatters/index.test.mjs +6 -0
- package/clients/cli/index.mjs +8 -0
- package/clients/cli/lib/hook-format.mjs +14 -5
- package/clients/cli/lib/manifest.mjs +9 -2
- package/foundation/agent-docs/agent-docs.d.mts +3 -2
- package/foundation/agent-docs/agent-docs.mjs +13 -9
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +123 -80
- package/foundation/config/project.test.mjs +144 -21
- package/foundation/discovery/authoring-self-docs.d.mts +18 -0
- package/foundation/discovery/authoring-self-docs.mjs +37 -15
- package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
- package/foundation/discovery/authoring-surface.d.mts +74 -0
- package/foundation/discovery/authoring-surface.mjs +525 -0
- package/foundation/discovery/authoring-surface.test.mjs +392 -0
- package/foundation/discovery/cli-self-docs.d.mts +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +38 -0
- package/foundation/discovery/component-discovery.mjs +48 -0
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +112 -11
- package/foundation/discovery/docs-discovery.mjs +231 -36
- package/foundation/discovery/docs-discovery.test.mjs +111 -32
- package/foundation/discovery/docs-output-budget.d.mts +2 -2
- package/foundation/discovery/docs-output-budget.mjs +1 -1
- package/foundation/discovery/docs-section-key.d.mts +28 -10
- package/foundation/discovery/docs-section-key.mjs +134 -33
- package/foundation/discovery/docs-section-key.test.mjs +41 -19
- package/foundation/discovery/template-adapter.d.mts +99 -6
- package/foundation/discovery/template-adapter.mjs +480 -57
- package/foundation/discovery/template-adapter.test.mjs +57 -0
- package/foundation/discovery/template-conflict-release.d.mts +13 -0
- package/foundation/discovery/template-conflict-release.mjs +40 -0
- package/foundation/discovery/template-conflict-release.test.mjs +40 -0
- package/foundation/discovery/theme-discovery.d.mts +67 -7
- package/foundation/discovery/theme-discovery.mjs +916 -186
- package/foundation/discovery/theme-discovery.test.mjs +613 -219
- package/foundation/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +220 -39
- package/foundation/doc-compiler/compile.mjs +311 -15
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
- package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +13 -0
- package/foundation/doc-compiler/ir.mjs +196 -12
- package/foundation/doc-compiler/lenses.d.mts +8 -5
- package/foundation/doc-compiler/lenses.mjs +50 -4
- package/foundation/doc-compiler/links.d.mts +162 -0
- package/foundation/doc-compiler/links.mjs +294 -0
- package/foundation/doc-compiler/links.test.mjs +192 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
- package/foundation/doc-compiler/overlays.d.mts +37 -0
- package/foundation/doc-compiler/overlays.mjs +206 -0
- package/foundation/doc-compiler/parse-readable.d.mts +9 -0
- package/foundation/doc-compiler/parse-readable.mjs +29 -0
- package/foundation/doc-compiler/read.d.mts +127 -0
- package/foundation/doc-compiler/read.mjs +325 -0
- package/foundation/doc-compiler/read.test.mjs +313 -0
- package/foundation/doc-compiler/source.d.mts +33 -0
- package/foundation/doc-compiler/source.mjs +128 -0
- package/foundation/doc-compiler/tree.d.mts +288 -0
- package/foundation/doc-compiler/tree.mjs +876 -0
- package/foundation/doc-compiler/tree.test.mjs +598 -0
- package/foundation/fs/file-protection.d.mts +33 -0
- package/foundation/fs/file-protection.mjs +825 -0
- package/foundation/fs/file-protection.test.mjs +250 -0
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -57
- package/foundation/integrations/autolink.test.mjs +1 -1
- package/foundation/integrations/cli-requirement.d.mts +45 -0
- package/foundation/integrations/cli-requirement.mjs +154 -0
- package/foundation/integrations/cli-requirement.test.mjs +84 -0
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +3 -2
- package/foundation/integrations/contribution-inventory.mjs +27 -24
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +51 -26
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +3 -0
- package/foundation/integrations/integrations.mjs +11 -97
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.mjs +121 -29
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +12 -2
- package/foundation/response/error-codes.mjs +7 -1
- package/foundation/response/error-codes.test.mjs +55 -11
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +20 -11
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/expand.mjs +1 -1
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -9
- package/assets/templates/themes/manifest.json +0 -95
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file Doc compiler — authored
|
|
4
|
+
* @file Doc compiler — authored docs in, compiled nodes out.
|
|
5
5
|
*
|
|
6
6
|
* @input A {@link ReferenceTopicInput}: one topic's own file and the files of
|
|
7
7
|
* the extensions merged onto it, each already through the authored-doc parser
|
|
@@ -16,21 +16,70 @@
|
|
|
16
16
|
* JSON form, the one `--json` output has always shown.
|
|
17
17
|
* @position The one step between authored docs and every docs reader. The docs
|
|
18
18
|
* API, doctor and search read compiled nodes, and ./lenses.mjs turns them into
|
|
19
|
-
* response shapes.
|
|
19
|
+
* response shapes. Every other doc kind (components, hooks, templates, themes,
|
|
20
|
+
* and the CLI's self-docs) lowers through {@link lowerDoc}, which ./read.mjs
|
|
21
|
+
* feeds. Internal to the CLI: the public way in is the docs API.
|
|
20
22
|
*/
|
|
21
23
|
|
|
24
|
+
import {parseTemplate} from '../../authoring/doctypes/template/parse.mjs';
|
|
25
|
+
import {parseTheme} from '../../authoring/doctypes/theme/parse.mjs';
|
|
22
26
|
import {mergeTopic, problemsInTopic} from '../discovery/docs-discovery.mjs';
|
|
23
27
|
import {
|
|
24
28
|
sectionKey,
|
|
25
|
-
|
|
29
|
+
sectionKeyErrors,
|
|
26
30
|
sourceTitle,
|
|
27
31
|
withSectionKeys,
|
|
28
32
|
withSourceTitle,
|
|
29
33
|
} from '../discovery/docs-section-key.mjs';
|
|
34
|
+
import {diagnostic as rawDiagnostic} from './diagnostics.mjs';
|
|
35
|
+
import {scrubPaths} from './source.mjs';
|
|
36
|
+
import {overlayAuthoredDoc} from './overlays.mjs';
|
|
37
|
+
import {parseReadableDoc} from './parse-readable.mjs';
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A compiler diagnostic whose message names files by package, never by their
|
|
41
|
+
* location on this machine.
|
|
42
|
+
* @param {string} code
|
|
43
|
+
* @param {Parameters<typeof rawDiagnostic>[1]} at
|
|
44
|
+
*/
|
|
45
|
+
function diagnostic(code, at) {
|
|
46
|
+
return rawDiagnostic(code, {
|
|
47
|
+
...at,
|
|
48
|
+
message: scrubPaths(at.message) || '(the error had no message)',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
30
51
|
|
|
31
52
|
/** Bumped whenever the shape of a compiled node changes. */
|
|
32
53
|
export const COMPILED_DOC_SCHEMA_VERSION = 1;
|
|
33
54
|
|
|
55
|
+
/** Every kind a compiled node has: one per authored doc kind a root reads. */
|
|
56
|
+
export const COMPILED_DOC_KINDS = /** @type {const} */ ([
|
|
57
|
+
'component',
|
|
58
|
+
'function',
|
|
59
|
+
'reference',
|
|
60
|
+
'page',
|
|
61
|
+
'block',
|
|
62
|
+
'schema',
|
|
63
|
+
'command',
|
|
64
|
+
'enum',
|
|
65
|
+
'theme',
|
|
66
|
+
'namespace',
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The roots that read docs, and the kinds each may hold. A doc without a
|
|
71
|
+
* stamped `type` (the legacy form) takes its root's first kind.
|
|
72
|
+
* @type {Readonly<Record<string, readonly string[]>>}
|
|
73
|
+
*/
|
|
74
|
+
export const ROOT_KINDS = Object.freeze({
|
|
75
|
+
components: ['component'],
|
|
76
|
+
hooks: ['function'],
|
|
77
|
+
templates: ['page', 'block'],
|
|
78
|
+
themes: ['theme'],
|
|
79
|
+
'self-docs': ['command', 'function', 'schema', 'enum'],
|
|
80
|
+
tree: ['namespace', 'generic'],
|
|
81
|
+
});
|
|
82
|
+
|
|
34
83
|
/**
|
|
35
84
|
* One authored file, as discovery loaded it.
|
|
36
85
|
* @typedef {object} AuthoredFile
|
|
@@ -47,8 +96,14 @@ export const COMPILED_DOC_SCHEMA_VERSION = 1;
|
|
|
47
96
|
* @property {string} provider the package that owns the topic
|
|
48
97
|
* @property {string | null} replaces the topic it took the place of
|
|
49
98
|
* @property {string | null} lang the overlay language, or null for authored text
|
|
99
|
+
* @property {string} [providerId] the owner's provider id; the package name
|
|
100
|
+
* when absent. The base file's sections resolve their links against it.
|
|
50
101
|
* @property {AuthoredFile} base
|
|
51
|
-
* @property {Array<AuthoredFile & {provider: string}>} extensions
|
|
102
|
+
* @property {Array<AuthoredFile & {provider: string, providerId?: string}>} extensions
|
|
103
|
+
* in merge order; each extension's sections resolve their links against its
|
|
104
|
+
* own provider id
|
|
105
|
+
* @property {boolean} [tree] a guide the docs tree places: its `placement` is
|
|
106
|
+
* read by the tree, so the topic reader accepts it
|
|
52
107
|
*/
|
|
53
108
|
|
|
54
109
|
/**
|
|
@@ -69,10 +124,33 @@ export const COMPILED_DOC_SCHEMA_VERSION = 1;
|
|
|
69
124
|
* @property {string | null} lang
|
|
70
125
|
* @property {{provider: string, replaces: string | null, extensions: string[]}} provenance
|
|
71
126
|
* @property {Record<string, string>} sourceTitles section key -> authored title
|
|
127
|
+
* @property {Record<string, string>} sectionProviders section key -> the
|
|
128
|
+
* provider id that wrote the section: a topic merges sections from its base
|
|
129
|
+
* and its extensions, and each section's links resolve against its own
|
|
130
|
+
* provider (spec:AST-047 FR9)
|
|
72
131
|
* @property {any} doc the topic: authored fields in authored order, every
|
|
73
132
|
* section keyed; a linked node's token references carry `resolved`
|
|
74
133
|
*/
|
|
75
134
|
|
|
135
|
+
/** Which provider wrote a section, until lowering records it by key. */
|
|
136
|
+
const SECTION_PROVIDER = Symbol('astryx.docs.sectionProvider');
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Mark each section of one authored file with the provider that wrote it. The
|
|
140
|
+
* overlay, the merge, and the key stamp copy the mark with the section.
|
|
141
|
+
* @param {any} doc
|
|
142
|
+
* @param {string} provider
|
|
143
|
+
* @returns {any}
|
|
144
|
+
*/
|
|
145
|
+
function markProvider(doc, provider) {
|
|
146
|
+
return {
|
|
147
|
+
...doc,
|
|
148
|
+
sections: doc.sections.map((/** @type {any} */ section) =>
|
|
149
|
+
withSourceTitle({...section, [SECTION_PROVIDER]: provider}, sourceTitle(section)),
|
|
150
|
+
),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
76
154
|
/**
|
|
77
155
|
* Lower one topic: overlay each file, merge the extensions in order, and stamp
|
|
78
156
|
* every section with its key.
|
|
@@ -80,14 +158,24 @@ export const COMPILED_DOC_SCHEMA_VERSION = 1;
|
|
|
80
158
|
* @returns {CompiledReferenceNode}
|
|
81
159
|
*/
|
|
82
160
|
export function lowerReferenceTopic(input) {
|
|
83
|
-
let doc =
|
|
161
|
+
let doc = markProvider(
|
|
162
|
+
readAuthoredFile(input.base, {placement: input.tree === true}),
|
|
163
|
+
input.providerId ?? input.provider,
|
|
164
|
+
);
|
|
84
165
|
for (const extension of input.extensions) {
|
|
85
|
-
doc = mergeTopic(
|
|
86
|
-
|
|
87
|
-
|
|
166
|
+
doc = mergeTopic(
|
|
167
|
+
doc,
|
|
168
|
+
markProvider(
|
|
169
|
+
readAuthoredFile(extension),
|
|
170
|
+
extension.providerId ?? extension.provider,
|
|
171
|
+
),
|
|
172
|
+
);
|
|
173
|
+
// Explicit authored IDs remain strict. Legacy title-derived collisions are
|
|
174
|
+
// assigned deterministic compatibility keys after every extension merges.
|
|
175
|
+
const problems = sectionKeyErrors(doc.sections);
|
|
88
176
|
if (problems.length > 0) {
|
|
89
177
|
throw new Error(
|
|
90
|
-
`${extension.file}, extending ${input.id}, leaves
|
|
178
|
+
`${extension.file}, extending ${input.id}, leaves duplicate authored section IDs: ${problems.join('; ')}`,
|
|
91
179
|
);
|
|
92
180
|
}
|
|
93
181
|
}
|
|
@@ -95,8 +183,12 @@ export function lowerReferenceTopic(input) {
|
|
|
95
183
|
const keyed = withSectionKeys(doc);
|
|
96
184
|
/** @type {Record<string, string>} */
|
|
97
185
|
const sourceTitles = {};
|
|
186
|
+
/** @type {Record<string, string>} */
|
|
187
|
+
const sectionProviders = {};
|
|
98
188
|
for (const section of keyed.sections) {
|
|
99
189
|
sourceTitles[section.id] = sourceTitle(section);
|
|
190
|
+
sectionProviders[section.id] =
|
|
191
|
+
section[SECTION_PROVIDER] ?? input.providerId ?? input.provider;
|
|
100
192
|
}
|
|
101
193
|
return {
|
|
102
194
|
schemaVersion: COMPILED_DOC_SCHEMA_VERSION,
|
|
@@ -110,7 +202,9 @@ export function lowerReferenceTopic(input) {
|
|
|
110
202
|
extensions: input.extensions.map(extension => extension.provider),
|
|
111
203
|
},
|
|
112
204
|
sourceTitles,
|
|
113
|
-
|
|
205
|
+
sectionProviders,
|
|
206
|
+
// The authored title and provider travel in sourceTitles and
|
|
207
|
+
// sectionProviders; JSON drops the symbols.
|
|
114
208
|
doc: asJson(keyed, input.id),
|
|
115
209
|
};
|
|
116
210
|
}
|
|
@@ -191,9 +285,12 @@ function asJson(value, topic) {
|
|
|
191
285
|
try {
|
|
192
286
|
return JSON.parse(JSON.stringify(value));
|
|
193
287
|
} catch (err) {
|
|
194
|
-
throw
|
|
195
|
-
|
|
196
|
-
|
|
288
|
+
throw Object.assign(
|
|
289
|
+
new Error(
|
|
290
|
+
`${topic} cannot be compiled: ${err instanceof Error ? err.message : String(err)}`,
|
|
291
|
+
{cause: err},
|
|
292
|
+
),
|
|
293
|
+
{compilerCode: 'not_json'},
|
|
197
294
|
);
|
|
198
295
|
}
|
|
199
296
|
}
|
|
@@ -204,13 +301,13 @@ function asJson(value, topic) {
|
|
|
204
301
|
* @param {AuthoredFile} file
|
|
205
302
|
* @returns {any}
|
|
206
303
|
*/
|
|
207
|
-
function readAuthoredFile(file) {
|
|
304
|
+
function readAuthoredFile(file, {placement = false} = {}) {
|
|
208
305
|
if ('error' in file) throw file.error;
|
|
209
306
|
const parsed = file.doc;
|
|
210
307
|
if (!('sections' in parsed)) {
|
|
211
308
|
throw new Error(`${file.file} is not a reference document.`);
|
|
212
309
|
}
|
|
213
|
-
const problems = problemsInTopic(parsed);
|
|
310
|
+
const problems = problemsInTopic(parsed, {placement});
|
|
214
311
|
if (problems.length > 0) {
|
|
215
312
|
throw new Error(`${file.file} is invalid: ${problems.join('; ')}`);
|
|
216
313
|
}
|
|
@@ -260,3 +357,202 @@ function applyOverlay(docs, translation) {
|
|
|
260
357
|
}),
|
|
261
358
|
};
|
|
262
359
|
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* @typedef {import('./diagnostics.mjs').CompilerDiagnostic} CompilerDiagnostic
|
|
363
|
+
*/
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* One authored doc of any kind but a reference topic, as its root loaded it.
|
|
367
|
+
* @typedef {object} DocFileInput
|
|
368
|
+
* @property {string} id the input's id: provider, root, and name
|
|
369
|
+
* @property {keyof typeof ROOT_KINDS} root
|
|
370
|
+
* @property {string} provider the package that contributes it
|
|
371
|
+
* @property {string} source `<package>/<path>` of the file
|
|
372
|
+
* @property {string | null} lang the overlay language, or null
|
|
373
|
+
* @property {AuthoredFile} file `doc` is the authored export, not a parse
|
|
374
|
+
* result; `overlay` is the translation the module exports for `lang`
|
|
375
|
+
* @property {string} [label] how a parse error names the file (default: its
|
|
376
|
+
* file name)
|
|
377
|
+
* @property {boolean} [useParsed] carry the parser's result instead of the
|
|
378
|
+
* authored export, for a reader that has always read the checked value
|
|
379
|
+
*/
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* The parser that checks a root's docs. Templates and themes have their own;
|
|
383
|
+
* every other root dispatches on the stamped type.
|
|
384
|
+
* @param {string} root
|
|
385
|
+
* @returns {(input: unknown, label?: string) => any}
|
|
386
|
+
*/
|
|
387
|
+
export function parserFor(root) {
|
|
388
|
+
if (root === 'themes') return parseTheme;
|
|
389
|
+
if (root === 'templates') return parseTemplate;
|
|
390
|
+
return parseReadableDoc;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* A compiled node for any kind but a reference topic.
|
|
395
|
+
* @typedef {object} CompiledDocNode
|
|
396
|
+
* @property {number} schemaVersion
|
|
397
|
+
* @property {Exclude<typeof COMPILED_DOC_KINDS[number], 'reference'>} kind
|
|
398
|
+
* @property {'lowered'} stage
|
|
399
|
+
* @property {string} id
|
|
400
|
+
* @property {string | null} lang
|
|
401
|
+
* @property {{provider: string, source: string}} provenance
|
|
402
|
+
* @property {any} doc the authored doc, overlaid for `lang`, as JSON carries
|
|
403
|
+
* it: key order kept, `undefined` and functions dropped
|
|
404
|
+
*/
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* The result of lowering one doc.
|
|
408
|
+
*
|
|
409
|
+
* `view` is the doc as readers have always read it: the authored export (or,
|
|
410
|
+
* where a reader has always read it, the parser's result), with its
|
|
411
|
+
* translation laid over it, not copied and not converted. Readers print from
|
|
412
|
+
* the view, so nothing they print depends on JSON. `node` is the sealed,
|
|
413
|
+
* JSON-only form a whole-project compile collects.
|
|
414
|
+
*
|
|
415
|
+
* @typedef {object} LoweredDoc
|
|
416
|
+
* @property {any} [view] absent when the file could not be read
|
|
417
|
+
* @property {CompiledDocNode | null} node null when not asked for, or when a
|
|
418
|
+
* problem is fatal to the node
|
|
419
|
+
* @property {CompilerDiagnostic[]} diagnostics
|
|
420
|
+
* @property {boolean} [loadFailed] importing the file threw
|
|
421
|
+
* @property {unknown} [loadFailure] what importing the file threw (any value,
|
|
422
|
+
* `undefined` included)
|
|
423
|
+
* @property {boolean} [missing] the file exports no doc
|
|
424
|
+
* @property {null | undefined} [missingValue] the empty export, as the reader
|
|
425
|
+
* picked it
|
|
426
|
+
* @property {boolean} [failed] the kind's parser threw
|
|
427
|
+
* @property {unknown} [failure] what the kind's parser threw
|
|
428
|
+
* @property {boolean} [overlayFailed] laying the translation over threw
|
|
429
|
+
* @property {unknown} [overlayFailure] what laying the translation over threw
|
|
430
|
+
*/
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Lower one doc of any kind but a reference topic.
|
|
434
|
+
*
|
|
435
|
+
* With `check`, the doc is held to its kind's parser, and a failure is
|
|
436
|
+
* recorded, not fatal: readers that never checked docs keep reading it, and a
|
|
437
|
+
* checked reader turns it into the error it has always thrown. A doc stamped
|
|
438
|
+
* with a kind its root does not read keeps its root's kind and carries a
|
|
439
|
+
* `wrong_kind` diagnostic. With `node`, the view is also carried as JSON; a
|
|
440
|
+
* value JSON cannot hold withdraws the node, never the view.
|
|
441
|
+
*
|
|
442
|
+
* @param {DocFileInput} input
|
|
443
|
+
* @param {{check?: boolean, node?: boolean}} [options]
|
|
444
|
+
* @returns {LoweredDoc}
|
|
445
|
+
*/
|
|
446
|
+
export function lowerDoc(input, {check = true, node: wantNode = true} = {}) {
|
|
447
|
+
const {file} = input;
|
|
448
|
+
const at = {provider: input.provider, source: input.source};
|
|
449
|
+
/** @type {CompilerDiagnostic[]} */
|
|
450
|
+
const diagnostics = [];
|
|
451
|
+
if ('error' in file) {
|
|
452
|
+
diagnostics.push(
|
|
453
|
+
diagnostic('load_failed', {
|
|
454
|
+
...at,
|
|
455
|
+
message: `${file.file} could not be loaded: ${messageOf(file.error)}`,
|
|
456
|
+
}),
|
|
457
|
+
);
|
|
458
|
+
return {node: null, diagnostics, loadFailed: true, loadFailure: file.error};
|
|
459
|
+
}
|
|
460
|
+
if (file.doc == null) {
|
|
461
|
+
diagnostics.push(
|
|
462
|
+
diagnostic('missing_export', {
|
|
463
|
+
...at,
|
|
464
|
+
message: `${file.file} exports no doc.`,
|
|
465
|
+
}),
|
|
466
|
+
);
|
|
467
|
+
return {node: null, diagnostics, missing: true, missingValue: file.doc};
|
|
468
|
+
}
|
|
469
|
+
const allowed = ROOT_KINDS[input.root];
|
|
470
|
+
if (!allowed) throw new Error(`No doc root is named "${input.root}".`);
|
|
471
|
+
const stamped =
|
|
472
|
+
typeof file.doc === 'object' && 'type' in file.doc
|
|
473
|
+
? file.doc.type
|
|
474
|
+
: undefined;
|
|
475
|
+
const kindFits = stamped === undefined || allowed.includes(stamped);
|
|
476
|
+
if (!kindFits) {
|
|
477
|
+
diagnostics.push(
|
|
478
|
+
diagnostic('wrong_kind', {
|
|
479
|
+
...at,
|
|
480
|
+
message: `${file.file} is stamped type ${JSON.stringify(stamped)}, which the ${input.root} root does not read (it reads ${allowed.join(', ')}).`,
|
|
481
|
+
}),
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
/** @type {LoweredDoc} */
|
|
485
|
+
const result = {node: null, diagnostics};
|
|
486
|
+
let view = file.doc;
|
|
487
|
+
// A theme descriptor is read statically; its parse result is the doc.
|
|
488
|
+
if (check || input.root === 'themes') {
|
|
489
|
+
try {
|
|
490
|
+
const parsed = parserFor(input.root)(file.doc, input.label ?? file.file);
|
|
491
|
+
if (input.useParsed || input.root === 'themes') view = parsed;
|
|
492
|
+
} catch (error) {
|
|
493
|
+
result.failed = true;
|
|
494
|
+
result.failure = error;
|
|
495
|
+
diagnostics.push(
|
|
496
|
+
diagnostic('invalid_doc', {...at, message: messageOf(error)}),
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
if ('overlayError' in file) {
|
|
501
|
+
result.overlayFailed = true;
|
|
502
|
+
result.overlayFailure = file.overlayError;
|
|
503
|
+
} else if (file.overlay) {
|
|
504
|
+
try {
|
|
505
|
+
view = overlayAuthoredDoc(view, file.overlay);
|
|
506
|
+
} catch (error) {
|
|
507
|
+
result.overlayFailed = true;
|
|
508
|
+
result.overlayFailure = error;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
if (result.overlayFailed) {
|
|
512
|
+
diagnostics.push(
|
|
513
|
+
diagnostic('overlay_failed', {
|
|
514
|
+
...at,
|
|
515
|
+
message: `${file.file}'s translation could not be applied: ${messageOf(result.overlayFailure)}`,
|
|
516
|
+
}),
|
|
517
|
+
);
|
|
518
|
+
return result;
|
|
519
|
+
}
|
|
520
|
+
result.view = view;
|
|
521
|
+
if (!wantNode) return result;
|
|
522
|
+
let json;
|
|
523
|
+
try {
|
|
524
|
+
const text = JSON.stringify(view);
|
|
525
|
+
if (text === undefined) throw new TypeError('the doc is not a JSON value');
|
|
526
|
+
json = JSON.parse(text);
|
|
527
|
+
} catch (error) {
|
|
528
|
+
diagnostics.push(
|
|
529
|
+
diagnostic('not_json', {
|
|
530
|
+
...at,
|
|
531
|
+
message: `${file.file} cannot be compiled: ${messageOf(error)}`,
|
|
532
|
+
}),
|
|
533
|
+
);
|
|
534
|
+
return result;
|
|
535
|
+
}
|
|
536
|
+
result.node = {
|
|
537
|
+
schemaVersion: COMPILED_DOC_SCHEMA_VERSION,
|
|
538
|
+
kind: /** @type {CompiledDocNode['kind']} */ (
|
|
539
|
+
kindFits && stamped !== undefined ? stamped : allowed[0]
|
|
540
|
+
),
|
|
541
|
+
stage: 'lowered',
|
|
542
|
+
id: input.id,
|
|
543
|
+
lang: input.lang,
|
|
544
|
+
provenance: {provider: input.provider, source: input.source},
|
|
545
|
+
doc: json,
|
|
546
|
+
};
|
|
547
|
+
return result;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/** @param {unknown} error */
|
|
551
|
+
function messageOf(error) {
|
|
552
|
+
// Any value can be thrown; describing one must never throw in its place.
|
|
553
|
+
try {
|
|
554
|
+
return error instanceof Error ? String(error.message) : String(error);
|
|
555
|
+
} catch {
|
|
556
|
+
return Object.prototype.toString.call(error);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @param {string} code
|
|
6
|
+
* @param {object} at
|
|
7
|
+
* @param {string | null} [at.provider]
|
|
8
|
+
* @param {string | null} [at.source]
|
|
9
|
+
* @param {string | null} [at.field]
|
|
10
|
+
* @param {string} at.message
|
|
11
|
+
* @returns {CompilerDiagnostic}
|
|
12
|
+
*/
|
|
13
|
+
export function diagnostic(code: string, { provider, source, field, message }: {
|
|
14
|
+
provider?: string | null | undefined;
|
|
15
|
+
source?: string | null | undefined;
|
|
16
|
+
field?: string | null | undefined;
|
|
17
|
+
message: string;
|
|
18
|
+
}): CompilerDiagnostic;
|
|
19
|
+
/**
|
|
20
|
+
* Diagnostics in one order, whatever order the phases found them in: by
|
|
21
|
+
* source, then phase, then code, field, and message.
|
|
22
|
+
* @param {CompilerDiagnostic[]} list
|
|
23
|
+
* @returns {CompilerDiagnostic[]} a new array
|
|
24
|
+
*/
|
|
25
|
+
export function sortDiagnostics(list: CompilerDiagnostic[]): CompilerDiagnostic[];
|
|
26
|
+
/**
|
|
27
|
+
* What is wrong with a value that claims to be a diagnostic, or null. A known
|
|
28
|
+
* code must carry its own phase, severity, scope, and remediation: a reader
|
|
29
|
+
* never reinterprets them.
|
|
30
|
+
* @param {unknown} value
|
|
31
|
+
* @returns {string | null}
|
|
32
|
+
*/
|
|
33
|
+
export function diagnosticProblem(value: unknown): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* A `<package>/<path>` that names no location on one machine: not absolute,
|
|
36
|
+
* no drive letter or URL scheme, no backslash, no `..` segment.
|
|
37
|
+
* @param {string} source
|
|
38
|
+
* @returns {boolean}
|
|
39
|
+
*/
|
|
40
|
+
export function isPortableSource(source: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* @file Compiler diagnostics — one shape for every problem the doc compiler
|
|
43
|
+
* finds.
|
|
44
|
+
*
|
|
45
|
+
* @input A diagnostic code, the package and file it concerns, and a message.
|
|
46
|
+
* @output A plain-JSON diagnostic: a stable code, the phase that found it,
|
|
47
|
+
* severity, provider, source, field, message, remediation, and the scope of
|
|
48
|
+
* what it invalidates. Lists sort into one deterministic order.
|
|
49
|
+
* @position Shared by every compiler phase: listing inputs, loading, parsing,
|
|
50
|
+
* overlaying, lowering, linking, serializing, and reading a bundle back. A
|
|
51
|
+
* code fixes its phase, severity, scope, and remediation, so no phase or
|
|
52
|
+
* reader can report the same problem two ways or downgrade it.
|
|
53
|
+
*/
|
|
54
|
+
/** Compiler phases, in the order a descriptor passes through them. */
|
|
55
|
+
export const DIAGNOSTIC_PHASES: readonly ["discover", "load", "parse", "overlay", "lower", "link", "serialize", "bundle"];
|
|
56
|
+
/**
|
|
57
|
+
* What a failure invalidates: the one node it concerns, or the whole
|
|
58
|
+
* compilation (a bundle that cannot be read at all).
|
|
59
|
+
* @typedef {'node' | 'compilation'} DiagnosticScope
|
|
60
|
+
*/
|
|
61
|
+
/**
|
|
62
|
+
* @typedef {typeof DIAGNOSTIC_PHASES[number]} DiagnosticPhase
|
|
63
|
+
* @typedef {'error' | 'warning'} DiagnosticSeverity
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* @typedef {object} CompilerDiagnostic
|
|
67
|
+
* @property {string} code stable; one of {@link DIAGNOSTIC_CODES}
|
|
68
|
+
* @property {DiagnosticPhase} phase
|
|
69
|
+
* @property {DiagnosticSeverity} severity
|
|
70
|
+
* @property {DiagnosticScope} scope
|
|
71
|
+
* @property {string | null} provider the package the problem is in
|
|
72
|
+
* @property {string | null} source `<package>/<path>` of the file, never a
|
|
73
|
+
* machine path
|
|
74
|
+
* @property {string | null} field the field or reference at fault, when known
|
|
75
|
+
* @property {string} message
|
|
76
|
+
* @property {string} remediation what to do about it
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* @typedef {object} DiagnosticRule
|
|
80
|
+
* @property {DiagnosticPhase} phase
|
|
81
|
+
* @property {DiagnosticSeverity} severity
|
|
82
|
+
* @property {DiagnosticScope} scope
|
|
83
|
+
* @property {string} remediation
|
|
84
|
+
*/
|
|
85
|
+
/** Every code the compiler emits, with the facts it fixes. */
|
|
86
|
+
export const DIAGNOSTIC_CODES: Readonly<Record<string, DiagnosticRule>>;
|
|
87
|
+
/**
|
|
88
|
+
* What a failure invalidates: the one node it concerns, or the whole
|
|
89
|
+
* compilation (a bundle that cannot be read at all).
|
|
90
|
+
*/
|
|
91
|
+
export type DiagnosticScope = "node" | "compilation";
|
|
92
|
+
export type DiagnosticPhase = (typeof DIAGNOSTIC_PHASES)[number];
|
|
93
|
+
export type DiagnosticSeverity = "error" | "warning";
|
|
94
|
+
export type CompilerDiagnostic = {
|
|
95
|
+
/**
|
|
96
|
+
* stable; one of {@link DIAGNOSTIC_CODES}
|
|
97
|
+
*/
|
|
98
|
+
code: string;
|
|
99
|
+
phase: DiagnosticPhase;
|
|
100
|
+
severity: DiagnosticSeverity;
|
|
101
|
+
scope: DiagnosticScope;
|
|
102
|
+
/**
|
|
103
|
+
* the package the problem is in
|
|
104
|
+
*/
|
|
105
|
+
provider: string | null;
|
|
106
|
+
/**
|
|
107
|
+
* `<package>/<path>` of the file, never a
|
|
108
|
+
* machine path
|
|
109
|
+
*/
|
|
110
|
+
source: string | null;
|
|
111
|
+
/**
|
|
112
|
+
* the field or reference at fault, when known
|
|
113
|
+
*/
|
|
114
|
+
field: string | null;
|
|
115
|
+
message: string;
|
|
116
|
+
/**
|
|
117
|
+
* what to do about it
|
|
118
|
+
*/
|
|
119
|
+
remediation: string;
|
|
120
|
+
};
|
|
121
|
+
export type DiagnosticRule = {
|
|
122
|
+
phase: DiagnosticPhase;
|
|
123
|
+
severity: DiagnosticSeverity;
|
|
124
|
+
scope: DiagnosticScope;
|
|
125
|
+
remediation: string;
|
|
126
|
+
};
|