@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
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The provider ledger property: over seeded, generated projects, the
|
|
5
|
+
* real Project.load and the real `upgrade` context account for every candidate
|
|
6
|
+
* exactly once, and agree on the winner of every provider ID except where the
|
|
7
|
+
* codemod policy says otherwise.
|
|
8
|
+
*
|
|
9
|
+
* The expected candidates come from the scenario description, never from the
|
|
10
|
+
* resolver. Fixtures live under a repo-local temp dir, not /tmp, because Vite
|
|
11
|
+
* refuses to dynamically import a module from outside the project root.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import {afterAll, beforeAll, describe, expect, it} from 'vitest';
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import {Project, providerLedgerOf} from '../config/project.mjs';
|
|
18
|
+
import {loadProjectContext} from '../../api/upgrade/_adapter.mjs';
|
|
19
|
+
import {
|
|
20
|
+
expectedProjectInputs,
|
|
21
|
+
generateScenario,
|
|
22
|
+
isRunnable,
|
|
23
|
+
writeScenario,
|
|
24
|
+
} from '../../test-utils/provider-scenarios.mjs';
|
|
25
|
+
|
|
26
|
+
// 200 seeds keep this near 4 s; any seed range must hold.
|
|
27
|
+
const SEEDS = Array.from({length: 200}, (_, index) => index + 1);
|
|
28
|
+
const OUTCOMES = ['contributes', 'set-aside', 'load-failed', 'alias-of'];
|
|
29
|
+
|
|
30
|
+
/** @type {string} */
|
|
31
|
+
let root;
|
|
32
|
+
/** @type {string} */
|
|
33
|
+
let originalCwd;
|
|
34
|
+
|
|
35
|
+
beforeAll(() => {
|
|
36
|
+
originalCwd = process.cwd();
|
|
37
|
+
root = fs.mkdtempSync(path.join(process.cwd(), '.astryx-provider-ledger-'));
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
afterAll(() => {
|
|
41
|
+
process.chdir(originalCwd);
|
|
42
|
+
fs.rmSync(root, {recursive: true, force: true});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The contributing package for each provider ID. Fails when two contribute
|
|
47
|
+
* under one ID.
|
|
48
|
+
* @param {Map<string, any>} ledger
|
|
49
|
+
* @returns {Map<string, any>}
|
|
50
|
+
*/
|
|
51
|
+
function winners(ledger) {
|
|
52
|
+
/** @type {Map<string, any>} */
|
|
53
|
+
const byProvider = new Map();
|
|
54
|
+
for (const entry of ledger.values()) {
|
|
55
|
+
if (entry.outcome !== 'contributes' || entry.providerId == null) continue;
|
|
56
|
+
expect(byProvider.has(entry.providerId)).toBe(false);
|
|
57
|
+
byProvider.set(entry.providerId, entry);
|
|
58
|
+
}
|
|
59
|
+
return byProvider;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Assert the ledger records one outcome for exactly the given inputs.
|
|
64
|
+
* @param {Map<string, any>} ledger
|
|
65
|
+
* @param {Array<{source: string, spec: string, key: string}>} inputs
|
|
66
|
+
*/
|
|
67
|
+
function expectAccounted(ledger, inputs) {
|
|
68
|
+
const refs = [...ledger.values()].flatMap(entry =>
|
|
69
|
+
entry.refs.map(ref => ({entry, ref})),
|
|
70
|
+
);
|
|
71
|
+
for (const input of inputs) {
|
|
72
|
+
const holders = refs.filter(
|
|
73
|
+
({ref}) => ref.source === input.source && ref.spec === input.spec,
|
|
74
|
+
);
|
|
75
|
+
expect(holders.map(({entry}) => entry.key)).toEqual([input.key]);
|
|
76
|
+
}
|
|
77
|
+
expect(refs).toHaveLength(inputs.length);
|
|
78
|
+
expect(new Set(ledger.keys())).toEqual(
|
|
79
|
+
new Set(inputs.map(input => input.key)),
|
|
80
|
+
);
|
|
81
|
+
for (const [key, entry] of ledger) {
|
|
82
|
+
expect(entry.key).toBe(key);
|
|
83
|
+
expect(OUTCOMES).toContain(entry.outcome);
|
|
84
|
+
if (entry.outcome === 'set-aside') {
|
|
85
|
+
expect(ledger.has(entry.winner)).toBe(true);
|
|
86
|
+
expect(entry.reason).toEqual(expect.any(String));
|
|
87
|
+
}
|
|
88
|
+
if (entry.outcome === 'alias-of') {
|
|
89
|
+
expect(ledger.has(entry.aliasOf)).toBe(true);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
describe('provider ledger over generated projects', () => {
|
|
95
|
+
it('accounts for every candidate once and agrees across Project and upgrade', async () => {
|
|
96
|
+
const coverage = {
|
|
97
|
+
scenarios: 0,
|
|
98
|
+
setAside: 0,
|
|
99
|
+
aliasOf: 0,
|
|
100
|
+
loadFailed: 0,
|
|
101
|
+
replaced: 0,
|
|
102
|
+
agreed: 0,
|
|
103
|
+
standIn: 0,
|
|
104
|
+
extraReordered: 0,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
for (const seed of SEEDS) {
|
|
108
|
+
const scenario = generateScenario(seed);
|
|
109
|
+
if (!isRunnable(scenario)) continue;
|
|
110
|
+
coverage.scenarios++;
|
|
111
|
+
const dir = path.join(root, `seed-${seed}`);
|
|
112
|
+
fs.mkdirSync(dir);
|
|
113
|
+
writeScenario(dir, scenario);
|
|
114
|
+
const context = `seed ${seed}: ${JSON.stringify(scenario)}`;
|
|
115
|
+
|
|
116
|
+
const project = await Project.load(dir, {fresh: true});
|
|
117
|
+
const ledger = providerLedgerOf(project);
|
|
118
|
+
const inputs = expectedProjectInputs(dir, scenario);
|
|
119
|
+
try {
|
|
120
|
+
expectAccounted(ledger, inputs);
|
|
121
|
+
|
|
122
|
+
// Nothing leaves the list without a recorded reason.
|
|
123
|
+
const listed = new Set(project.loadedIntegrations);
|
|
124
|
+
for (const integration of project.loadedIntegrations) {
|
|
125
|
+
expect(ledger.has(fs.realpathSync(integration.__packageDir))).toBe(
|
|
126
|
+
true,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
for (const entry of ledger.values()) {
|
|
130
|
+
if (entry.integration != null) {
|
|
131
|
+
expect(listed.has(entry.integration)).toBe(true);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
expect(entry.outcome).not.toBe('contributes');
|
|
135
|
+
if (entry.outcome === 'set-aside') {
|
|
136
|
+
expect(entry.reason).toBe('replaced-by-authored');
|
|
137
|
+
}
|
|
138
|
+
if (entry.outcome === 'load-failed') {
|
|
139
|
+
expect(entry.error).toEqual(expect.any(String));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
} catch (error) {
|
|
143
|
+
throw new Error(`${context}\n${error}`, {cause: error});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
for (const entry of ledger.values()) {
|
|
147
|
+
if (entry.outcome === 'set-aside') coverage.setAside++;
|
|
148
|
+
if (entry.outcome === 'alias-of') coverage.aliasOf++;
|
|
149
|
+
if (entry.outcome === 'load-failed') coverage.loadFailed++;
|
|
150
|
+
if (entry.reason === 'replaced-by-authored') coverage.replaced++;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// `--integration` specs resolve from the process cwd.
|
|
154
|
+
process.chdir(dir);
|
|
155
|
+
const upgrade = await loadProjectContext(dir, scenario.extras);
|
|
156
|
+
process.chdir(originalCwd);
|
|
157
|
+
|
|
158
|
+
const modules = path.join(dir, 'node_modules');
|
|
159
|
+
/** @param {string} spec */
|
|
160
|
+
const installedKey = spec =>
|
|
161
|
+
fs.realpathSync(path.join(modules, ...spec.split('/')));
|
|
162
|
+
/** @param {string} spec */
|
|
163
|
+
const installedName = spec =>
|
|
164
|
+
JSON.parse(
|
|
165
|
+
fs.readFileSync(
|
|
166
|
+
path.join(modules, ...spec.split('/'), 'package.json'),
|
|
167
|
+
'utf8',
|
|
168
|
+
),
|
|
169
|
+
).name;
|
|
170
|
+
const configured = new Set(scenario.config ?? []);
|
|
171
|
+
const extras = [...new Set(scenario.extras)].filter(
|
|
172
|
+
spec => !configured.has(spec),
|
|
173
|
+
);
|
|
174
|
+
const {local} = scenario;
|
|
175
|
+
const localKey = fs.realpathSync(dir);
|
|
176
|
+
const selfListed = local != null && configured.has(local.name);
|
|
177
|
+
// The codemod policy: the installed copy stands in for the package being
|
|
178
|
+
// authored when it lists itself or is named with --integration.
|
|
179
|
+
const localStandsIn =
|
|
180
|
+
local != null &&
|
|
181
|
+
(selfListed || extras.some(spec => installedName(spec) === local.name));
|
|
182
|
+
|
|
183
|
+
try {
|
|
184
|
+
// Upgrade accounts for everything Project did, plus its own inputs.
|
|
185
|
+
expectAccounted(upgrade.ledger, [
|
|
186
|
+
...inputs,
|
|
187
|
+
...(selfListed
|
|
188
|
+
? [
|
|
189
|
+
{
|
|
190
|
+
source: 'installed',
|
|
191
|
+
spec: local.name,
|
|
192
|
+
key: installedKey(local.name),
|
|
193
|
+
},
|
|
194
|
+
]
|
|
195
|
+
: []),
|
|
196
|
+
...extras.map(spec => ({
|
|
197
|
+
source: 'extra',
|
|
198
|
+
spec,
|
|
199
|
+
key: installedKey(spec),
|
|
200
|
+
})),
|
|
201
|
+
]);
|
|
202
|
+
} catch (error) {
|
|
203
|
+
throw new Error(`${context}\n${error}`, {cause: error});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const projectWinners = winners(ledger);
|
|
207
|
+
const upgradeWinners = winners(upgrade.ledger);
|
|
208
|
+
for (const providerId of new Set([
|
|
209
|
+
...projectWinners.keys(),
|
|
210
|
+
...upgradeWinners.keys(),
|
|
211
|
+
])) {
|
|
212
|
+
const inProject = projectWinners.get(providerId);
|
|
213
|
+
const inUpgrade = upgradeWinners.get(providerId);
|
|
214
|
+
const same =
|
|
215
|
+
inProject != null &&
|
|
216
|
+
inUpgrade != null &&
|
|
217
|
+
(inProject.key === inUpgrade.key ||
|
|
218
|
+
upgrade.ledger.get(inProject.key)?.aliasOf === inUpgrade.key);
|
|
219
|
+
if (same) {
|
|
220
|
+
coverage.agreed++;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
// The one documented exception, asserted explicitly: an installed
|
|
224
|
+
// copy took the authored package's place, so either upgrade's winner
|
|
225
|
+
// is an installed copy of that package, or Project's winner is the
|
|
226
|
+
// authored package it replaced.
|
|
227
|
+
const upgradeName =
|
|
228
|
+
inUpgrade?.integration?.name ??
|
|
229
|
+
inUpgrade?.candidate.integration?.name;
|
|
230
|
+
const standInWins =
|
|
231
|
+
localStandsIn && inUpgrade != null && upgradeName === local?.name;
|
|
232
|
+
const localReplaced =
|
|
233
|
+
localStandsIn && inProject != null && inProject.key === localKey;
|
|
234
|
+
// Project never saw an extra, so an ID only an extra claims has no
|
|
235
|
+
// Project winner to agree with.
|
|
236
|
+
const extraOnly =
|
|
237
|
+
inProject == null && inUpgrade?.candidate.source === 'extra';
|
|
238
|
+
// Known disagreement, pinned by the `it.fails` repros in
|
|
239
|
+
// api/upgrade/provider-agreement.test.mjs: upgrade replaces an
|
|
240
|
+
// autolinked winner with any extra of the same name@version, from
|
|
241
|
+
// any directory, and orders it with the extras. Another extra can
|
|
242
|
+
// then win, or nothing does, in upgrade only.
|
|
243
|
+
const projectWinnerInUpgrade =
|
|
244
|
+
inProject == null ? undefined : upgrade.ledger.get(inProject.key);
|
|
245
|
+
const repeatedByExtra =
|
|
246
|
+
projectWinnerInUpgrade != null &&
|
|
247
|
+
(projectWinnerInUpgrade.refs.some(ref => ref.source === 'extra') ||
|
|
248
|
+
(projectWinnerInUpgrade.outcome === 'alias-of' &&
|
|
249
|
+
upgrade.ledger
|
|
250
|
+
.get(projectWinnerInUpgrade.aliasOf)
|
|
251
|
+
?.refs.some(ref => ref.source === 'extra')));
|
|
252
|
+
const extraReordered =
|
|
253
|
+
inProject?.candidate.source === 'autolinked' && repeatedByExtra;
|
|
254
|
+
if (extraReordered) {
|
|
255
|
+
coverage.extraReordered++;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
expect(
|
|
259
|
+
standInWins || localReplaced || extraOnly,
|
|
260
|
+
`${context}\nprovider ${providerId}: Project ${inProject?.label ?? 'none'} vs upgrade ${inUpgrade?.label ?? 'none'}`,
|
|
261
|
+
).toBe(true);
|
|
262
|
+
if (standInWins || localReplaced) coverage.standIn++;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// The generator must keep reaching every shape, or the property is vacuous.
|
|
267
|
+
expect(coverage.scenarios).toBeGreaterThanOrEqual(190);
|
|
268
|
+
expect(coverage.setAside).toBeGreaterThan(0);
|
|
269
|
+
expect(coverage.aliasOf).toBeGreaterThan(0);
|
|
270
|
+
expect(coverage.loadFailed).toBeGreaterThan(0);
|
|
271
|
+
expect(coverage.replaced).toBeGreaterThan(0);
|
|
272
|
+
expect(coverage.agreed).toBeGreaterThan(0);
|
|
273
|
+
expect(coverage.standIn).toBeGreaterThan(0);
|
|
274
|
+
}, 120_000);
|
|
275
|
+
});
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
* The identity of a package directory: its real path, so every symlinked
|
|
6
|
+
* spelling of one pnpm store entry is one package.
|
|
7
|
+
* @param {string} packageDir
|
|
8
|
+
* @returns {string}
|
|
9
|
+
*/
|
|
10
|
+
export function packageKey(packageDir: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve provider identity over candidates in precedence order.
|
|
13
|
+
*
|
|
14
|
+
* Returns the resolved integration list every command reads, and a ledger
|
|
15
|
+
* with one outcome for every real package directory among the candidates:
|
|
16
|
+
* `contributes`, `set-aside` (with the winner and a reason), `load-failed`, or
|
|
17
|
+
* `alias-of` (the same published package already loaded from another
|
|
18
|
+
* directory, or another input for a directory already reached).
|
|
19
|
+
*
|
|
20
|
+
* @param {ProviderCandidate[]} candidates in precedence order
|
|
21
|
+
* @param {ProviderPolicy} [policy]
|
|
22
|
+
* @returns {{integrations: LoadedIntegration[], ledger: ProviderLedger}}
|
|
23
|
+
*/
|
|
24
|
+
export function resolveProviders(candidates: ProviderCandidate[], policy?: ProviderPolicy): {
|
|
25
|
+
integrations: LoadedIntegration[];
|
|
26
|
+
ledger: ProviderLedger;
|
|
27
|
+
};
|
|
28
|
+
export type LoadedIntegration = import("./integrations.mjs").LoadedIntegration;
|
|
29
|
+
/**
|
|
30
|
+
* Where a candidate came from. Precedence follows candidate order; the source
|
|
31
|
+
* selects which rules apply.
|
|
32
|
+
* - `configured`: named by astryx.config; listed even when its manifest fails
|
|
33
|
+
* - `autolinked`: a declared dependency that ships one root manifest
|
|
34
|
+
* - `local`: the package being authored, loaded from its working bytes
|
|
35
|
+
* - `installed`: codemod policy — the installed copy of a package being
|
|
36
|
+
* authored that lists itself
|
|
37
|
+
* - `extra`: codemod policy — a package named with `upgrade --integration`
|
|
38
|
+
*/
|
|
39
|
+
export type CandidateSource = "configured" | "autolinked" | "local" | "installed" | "extra";
|
|
40
|
+
/**
|
|
41
|
+
* One package reached by one input. A candidate without `integration` failed
|
|
42
|
+
* to load (`error`) or reached a directory an earlier candidate already
|
|
43
|
+
* reached (`repeat`).
|
|
44
|
+
*/
|
|
45
|
+
export type ProviderCandidate = {
|
|
46
|
+
source: CandidateSource;
|
|
47
|
+
integration?: import("./integrations.mjs").LoadedIntegration | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* the input that reached the package
|
|
50
|
+
*/
|
|
51
|
+
spec?: string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* required when `integration` is absent
|
|
54
|
+
*/
|
|
55
|
+
packageDir?: string | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* why loading threw
|
|
58
|
+
*/
|
|
59
|
+
error?: string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* another input for a directory already reached
|
|
62
|
+
*/
|
|
63
|
+
repeat?: boolean | undefined;
|
|
64
|
+
};
|
|
65
|
+
export type ProviderOutcome = "contributes" | "set-aside" | "load-failed" | "alias-of";
|
|
66
|
+
/**
|
|
67
|
+
* Why a package is set aside.
|
|
68
|
+
* - `claimed-earlier`: a package earlier in precedence claims its provider ID
|
|
69
|
+
* - `authored-claims`: the package being authored claims its provider ID
|
|
70
|
+
* - `replaced-by-authored`: it is the installed copy of the package being
|
|
71
|
+
* authored, whose working bytes are used instead
|
|
72
|
+
* - `installed-stands-in`: codemod policy — the package being authored is
|
|
73
|
+
* represented by its installed copy
|
|
74
|
+
*/
|
|
75
|
+
export type SetAsideReason = "claimed-earlier" | "authored-claims" | "replaced-by-authored" | "installed-stands-in";
|
|
76
|
+
/**
|
|
77
|
+
* The one outcome for one real package directory.
|
|
78
|
+
*/
|
|
79
|
+
export type ProviderLedgerEntry = {
|
|
80
|
+
/**
|
|
81
|
+
* real package directory
|
|
82
|
+
*/
|
|
83
|
+
key: string;
|
|
84
|
+
/**
|
|
85
|
+
* `name@version`, for display only
|
|
86
|
+
*/
|
|
87
|
+
label: string;
|
|
88
|
+
outcome: ProviderOutcome;
|
|
89
|
+
/**
|
|
90
|
+
* the candidate this outcome belongs to
|
|
91
|
+
*/
|
|
92
|
+
candidate: ProviderCandidate;
|
|
93
|
+
/**
|
|
94
|
+
* every candidate that reached this
|
|
95
|
+
* directory, in order
|
|
96
|
+
*/
|
|
97
|
+
refs: ProviderCandidate[];
|
|
98
|
+
providerId?: string | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* set-aside: key of the package used instead
|
|
101
|
+
*/
|
|
102
|
+
winner?: string | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* set-aside: why
|
|
105
|
+
*/
|
|
106
|
+
reason?: SetAsideReason | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* alias-of: key of the package this one repeats
|
|
109
|
+
*/
|
|
110
|
+
aliasOf?: string | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* the record this package left in
|
|
113
|
+
* the resolved list, when it left one
|
|
114
|
+
*/
|
|
115
|
+
integration?: import("./integrations.mjs").LoadedIntegration | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* load-failed: the load error
|
|
118
|
+
*/
|
|
119
|
+
error?: string | undefined;
|
|
120
|
+
};
|
|
121
|
+
export type ProviderLedger = Map<string, ProviderLedgerEntry>;
|
|
122
|
+
export type ProviderPolicy = {
|
|
123
|
+
/**
|
|
124
|
+
* upgrade's codemod rule. Candidates are an
|
|
125
|
+
* already resolved Project list plus `installed` and `extra` candidates. The
|
|
126
|
+
* installed copy stands in for a package being authored that lists itself or
|
|
127
|
+
* is named as an extra, and an extra stands in for the autolinked package it
|
|
128
|
+
* repeats. Autolinked and local packages still claim provider IDs, but they
|
|
129
|
+
* are not listed: upgrade has never run their codemods.
|
|
130
|
+
*/
|
|
131
|
+
codemods?: boolean | undefined;
|
|
132
|
+
/**
|
|
133
|
+
* the ledger this resolution builds on. A
|
|
134
|
+
* record it already set aside keeps that winner, and its entries this
|
|
135
|
+
* resolution never reaches are carried over unchanged.
|
|
136
|
+
*/
|
|
137
|
+
prior?: ProviderLedger | undefined;
|
|
138
|
+
};
|
|
139
|
+
export type CandidateState = {
|
|
140
|
+
candidate: ProviderCandidate;
|
|
141
|
+
record: LoadedIntegration | undefined;
|
|
142
|
+
key: string;
|
|
143
|
+
outcome?: ProviderOutcome | undefined;
|
|
144
|
+
winner?: CandidateState | undefined;
|
|
145
|
+
reason?: SetAsideReason | undefined;
|
|
146
|
+
aliasOf?: CandidateState | undefined;
|
|
147
|
+
listed?: import("./integrations.mjs").LoadedIntegration | undefined;
|
|
148
|
+
};
|
|
149
|
+
export type Slot = {
|
|
150
|
+
state: CandidateState;
|
|
151
|
+
record: LoadedIntegration;
|
|
152
|
+
};
|