@astryxdesign/cli 0.6.3-canary.4fb81b0 → 0.6.3-canary.5937ac3
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 +20 -1
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/build.doc.mjs +1 -0
- package/api/component/component.doc.mjs +2 -1
- package/api/component/component.type.d.mts +5 -4
- package/api/component/component.type.mjs +5 -4
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +37 -9
- package/api/discover/discover.doc.mjs +1 -0
- package/api/docs/_adapter.d.mts +3 -8
- package/api/docs/_adapter.mjs +13 -105
- package/api/docs/docs.doc.mjs +1 -0
- package/api/docs/list/list.mjs +3 -7
- package/api/doctor/doctor.d.mts +25 -3
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +185 -13
- package/api/doctor/doctor.test.mjs +326 -1
- 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/init/init.doc.mjs +1 -0
- package/api/integration/add-contribution.mjs +7 -7
- package/api/integration/add-contribution.test.mjs +37 -3
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.test.mjs +8 -4
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +1 -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 +1 -0
- 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 +1 -0
- package/api/integration/integrationPackCheck.doc.mjs +1 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +1 -0
- package/api/integration/pack-check.test.mjs +17 -47
- package/api/integration/summarizeIssues.doc.mjs +1 -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 +85 -23
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +1 -0
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +1 -0
- 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.doc.mjs +1 -0
- package/api/search/search.mjs +16 -6
- package/api/swizzle/swizzle.doc.mjs +1 -0
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.doc.mjs +1 -0
- 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/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 +1 -0
- package/api/upgrade/_adapter.d.mts +12 -3
- package/api/upgrade/_adapter.mjs +81 -66
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +1 -0
- package/api/upgrade/upgrade.doc.mjs +1 -0
- package/assets/codemods/integration-discovery.mjs +8 -2
- package/assets/codemods/integration-discovery.test.mjs +15 -0
- package/assets/codemods/runner.mjs +115 -5
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +216 -0
- package/assets/codemods/transforms/next/index.mjs +11 -1
- package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/docs/cli-integrations.doc.mjs +17 -30
- package/assets/docs/cli.doc.mjs +15 -0
- package/assets/docs/theme.doc.mjs +1 -1
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -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/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/doctypes/base/graph-fields.doc.mjs +1 -1
- package/authoring/doctypes/command/command.doc.mjs +1 -1
- package/authoring/doctypes/command/type.ts +1 -1
- 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 +1 -1
- package/authoring/doctypes/function/type.ts +1 -1
- package/authoring/doctypes/hook/type.ts +2 -2
- package/authoring/doctypes/load-contract.test.mjs +2 -1
- package/authoring/doctypes/parse.d.mts +4 -2
- package/authoring/doctypes/parse.mjs +7 -3
- package/authoring/doctypes/reference/reference.doc.mjs +1 -1
- package/authoring/doctypes/reference/type.ts +2 -2
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +1 -2
- package/authoring/doctypes/template/template.doc.mjs +3 -3
- 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/index.d.mts +1 -0
- package/authoring/index.d.ts +6 -4
- package/authoring/index.mjs +2 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/type.ts +3 -9
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/build.doc.mjs +1 -1
- package/clients/cli/commands/component-package.test.mjs +17 -0
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/discover.doc.mjs +1 -1
- package/clients/cli/commands/docs.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -1
- 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 +15 -7
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- 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 +1 -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/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/swizzle.doc.mjs +1 -1
- package/clients/cli/commands/template.doc.mjs +1 -1
- 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.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 +1 -1
- package/clients/cli/lib/hook-format.mjs +14 -5
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +8 -0
- package/foundation/config/project.mjs +50 -21
- package/foundation/config/project.test.mjs +3 -16
- package/foundation/discovery/authoring-self-docs.d.mts +6 -0
- package/foundation/discovery/authoring-self-docs.mjs +17 -7
- 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 +113 -0
- package/foundation/discovery/cli-self-docs.mjs +514 -0
- package/foundation/discovery/cli-self-docs.test.mjs +437 -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 +3 -2
- package/foundation/discovery/docs-discovery.mjs +8 -12
- package/foundation/discovery/docs-discovery.test.mjs +8 -5
- package/foundation/discovery/template-adapter.d.mts +7 -0
- package/foundation/discovery/template-adapter.mjs +27 -40
- package/foundation/discovery/template-adapter.test.mjs +15 -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 +218 -0
- package/foundation/doc-compiler/bundle.test.mjs +255 -0
- package/foundation/doc-compiler/compile.d.mts +200 -0
- package/foundation/doc-compiler/compile.mjs +254 -5
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +277 -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 +286 -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 +189 -12
- package/foundation/doc-compiler/lower-doc.test.mjs +492 -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 +126 -0
- package/foundation/doc-compiler/read.mjs +320 -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/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -57
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +1 -1
- package/foundation/integrations/contribution-inventory.mjs +17 -20
- package/foundation/integrations/contribution-inventory.test.mjs +67 -27
- 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 +104 -10
- package/foundation/response/error-codes.doc.mjs +2 -2
- package/foundation/response/error-codes.mjs +1 -1
- package/foundation/response/response-types.doc.mjs +1 -1
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.mjs +22 -10
- package/package.json +9 -9
- package/assets/templates/themes/manifest.json +0 -95
package/README.md
CHANGED
|
@@ -15,6 +15,25 @@ npx @astryxdesign/cli template --list
|
|
|
15
15
|
|
|
16
16
|
Once it's a project dependency (`npm install -D @astryxdesign/cli`), drop the scope and use the shorter `astryx` — e.g. `npx astryx component Button` or `pnpm exec astryx component Button`. Bare `astryx` resolves to an unrelated npm package until the CLI is installed, so prefer the scoped form above for first-run/one-off use.
|
|
17
17
|
|
|
18
|
+
## Reading the CLI's own docs
|
|
19
|
+
|
|
20
|
+
The CLI documents itself, so these commands print what the installed version does:
|
|
21
|
+
|
|
22
|
+
- `astryx <command> --help`: one command's arguments and options.
|
|
23
|
+
- `astryx manifest --json`: every command, option, and response type, as JSON.
|
|
24
|
+
- `astryx docs cli --index`: one section for each command (`commands-<name>`)
|
|
25
|
+
and each API function, plus the JSON output envelope, error codes, and
|
|
26
|
+
response types (`api-<name>`). Read one with `astryx docs cli <key>`, for
|
|
27
|
+
example `astryx docs cli api-search`.
|
|
28
|
+
- `astryx docs authoring --index`: the authoring reference, with one section for
|
|
29
|
+
each file an author writes: the `astryx.config.*` file, the
|
|
30
|
+
`astryx.integration.*` manifest, codemods, and every doc type (`ComponentDoc`,
|
|
31
|
+
`TemplateDoc`, `ThemeDoc`, and the rest). Read one section with
|
|
32
|
+
`astryx docs authoring <section>`, for example `astryx docs authoring config`.
|
|
33
|
+
- `astryx docs cli-integrations`: the guide to building an integration package.
|
|
34
|
+
- `astryx docs`: every docs topic, including the design-system guides (for
|
|
35
|
+
example `tokens`, `theme`, and `layout`).
|
|
36
|
+
|
|
18
37
|
## Finding things: `astryx search`
|
|
19
38
|
|
|
20
39
|
When you don't know whether what you need is a component, a hook, a docs topic,
|
|
@@ -179,7 +198,7 @@ if (isError(result)) {
|
|
|
179
198
|
| `ERR_FILE_EXISTS` | Refused to overwrite an existing file. |
|
|
180
199
|
| `ERR_PATH_TRAVERSAL` | A path escaped its allowed root, or a name contained traversal markers. |
|
|
181
200
|
| `ERR_WRITE_FAILED` | Writing output files failed (and was rolled back). |
|
|
182
|
-
| `ERR_THEME_INVALID` | A theme definition or contributed theme
|
|
201
|
+
| `ERR_THEME_INVALID` | A theme definition or contributed theme descriptor is invalid. |
|
|
183
202
|
| `ERR_THEME_LOAD` | A theme file could not be loaded / parsed into a defineTheme result. |
|
|
184
203
|
| `ERR_PALETTE_GENERATION` | A palette generation request or one of its constraints was invalid. |
|
|
185
204
|
| `ERR_VERSION_DETECT` | The current `@astryxdesign/core` version could not be detected. |
|
package/api/blog/blog.doc.mjs
CHANGED
package/api/build/build.doc.mjs
CHANGED
|
@@ -12,6 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'function',
|
|
13
13
|
kind: 'api',
|
|
14
14
|
name: 'component',
|
|
15
|
+
namespace: 'cli/api',
|
|
15
16
|
displayName: 'component()',
|
|
16
17
|
summary:
|
|
17
18
|
'Resolve a component by name, or list the catalog, with optional focused slices (props, source, showcase, blocks).',
|
|
@@ -109,7 +110,7 @@ export const doc = {
|
|
|
109
110
|
{
|
|
110
111
|
type: 'component.list',
|
|
111
112
|
description:
|
|
112
|
-
"The catalog grouped by category. data.detail is the level ('names' | 'compact' | 'full') and data.components is the grouped map: names entries with name, package, and an optional canonical import for
|
|
113
|
+
"The catalog grouped by category. data.detail is the level ('names' | 'compact' | 'full') and data.components is the grouped map: names entries with name, package, and an optional canonical import for integration and legacy package components; brief entries; or full ComponentDoc entries.",
|
|
113
114
|
},
|
|
114
115
|
{
|
|
115
116
|
type: 'component.detail',
|
|
@@ -31,9 +31,10 @@ export type ComponentListData = ({
|
|
|
31
31
|
/**
|
|
32
32
|
* A single entry in a `component.list` group at `detail: 'names'`. Pre-1.0 the
|
|
33
33
|
* list moved from bare strings to package-qualified objects so consumers can
|
|
34
|
-
* disambiguate ownership (core vs. an integration package). Integration
|
|
35
|
-
* carry `import` — the
|
|
36
|
-
*
|
|
34
|
+
* disambiguate ownership (core vs. an integration package). Integration and
|
|
35
|
+
* legacy `astryx.docs` package entries carry `import` — the same specifier their
|
|
36
|
+
* `component.detail` reports; core entries omit it (the specifier is derived
|
|
37
|
+
* from the component name by the renderer).
|
|
37
38
|
*/
|
|
38
39
|
export type ComponentListEntry = {
|
|
39
40
|
name: string;
|
|
@@ -42,7 +43,7 @@ export type ComponentListEntry = {
|
|
|
42
43
|
*/
|
|
43
44
|
package: string;
|
|
44
45
|
/**
|
|
45
|
-
* - Import specifier; present for integration components, absent for core.
|
|
46
|
+
* - Import specifier; present for integration and legacy package components, absent for core.
|
|
46
47
|
*/
|
|
47
48
|
import?: string | undefined;
|
|
48
49
|
};
|
|
@@ -52,13 +52,14 @@
|
|
|
52
52
|
/**
|
|
53
53
|
* A single entry in a `component.list` group at `detail: 'names'`. Pre-1.0 the
|
|
54
54
|
* list moved from bare strings to package-qualified objects so consumers can
|
|
55
|
-
* disambiguate ownership (core vs. an integration package). Integration
|
|
56
|
-
* carry `import` — the
|
|
57
|
-
*
|
|
55
|
+
* disambiguate ownership (core vs. an integration package). Integration and
|
|
56
|
+
* legacy `astryx.docs` package entries carry `import` — the same specifier their
|
|
57
|
+
* `component.detail` reports; core entries omit it (the specifier is derived
|
|
58
|
+
* from the component name by the renderer).
|
|
58
59
|
* @typedef {object} ComponentListEntry
|
|
59
60
|
* @property {string} name
|
|
60
61
|
* @property {string} package - Owner package, e.g. '@astryxdesign/core' or '@acme/astryx-meta'.
|
|
61
|
-
* @property {string} [import] - Import specifier; present for integration components, absent for core.
|
|
62
|
+
* @property {string} [import] - Import specifier; present for integration and legacy package components, absent for core.
|
|
62
63
|
*/
|
|
63
64
|
|
|
64
65
|
/**
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
// @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import('../component.type.mjs').ComponentListResponse} ComponentListResponse
|
|
6
|
-
* @typedef {import('../component.type.mjs').ComponentListEntry} ComponentListEntry
|
|
7
|
-
* @typedef {import('../component.type.mjs').ComponentBriefEntry} ComponentBriefEntry
|
|
8
|
-
*/
|
|
9
4
|
/**
|
|
10
5
|
* Build the `component.list` envelope. The list taxonomy is collapsed: all
|
|
11
6
|
* three detail levels emit ONE `component.list` type; the depth rides in
|
|
@@ -17,13 +17,14 @@ import {
|
|
|
17
17
|
discoverExternalComponentsGrouped,
|
|
18
18
|
discoverIntegrationComponents,
|
|
19
19
|
findComponentReadme,
|
|
20
|
+
findExternalComponentDoc,
|
|
20
21
|
resolveImportPath,
|
|
21
22
|
resolveIntegrationImportPath,
|
|
22
23
|
} from '../../../foundation/discovery/component-discovery.mjs';
|
|
23
24
|
import {discoverExternalPackages} from '../../../foundation/fs/paths.mjs';
|
|
24
25
|
import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
|
|
25
26
|
import {AstryxError} from '../../error.mjs';
|
|
26
|
-
import {loadComponentDoc, loadIntegrationsSafely} from '../_adapter.mjs';
|
|
27
|
+
import {loadComponentDoc, loadIntegrationsSafely, withOwnership} from '../_adapter.mjs';
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* @typedef {import('../component.type.mjs').ComponentListResponse} ComponentListResponse
|
|
@@ -31,6 +32,29 @@ import {loadComponentDoc, loadIntegrationsSafely} from '../_adapter.mjs';
|
|
|
31
32
|
* @typedef {import('../component.type.mjs').ComponentBriefEntry} ComponentBriefEntry
|
|
32
33
|
*/
|
|
33
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The import a legacy `pkg.astryx.docs` component's detail reports, derived the
|
|
37
|
+
* same way (`withOwnership`) so list and detail agree.
|
|
38
|
+
* @param {{name: string, docsDir: string}} ext
|
|
39
|
+
* @param {string} name
|
|
40
|
+
* @param {string} coreDir
|
|
41
|
+
* @param {{zh: boolean, lang: string|null}} docOpts
|
|
42
|
+
* @returns {Promise<string>}
|
|
43
|
+
*/
|
|
44
|
+
async function legacyImport(ext, name, coreDir, docOpts) {
|
|
45
|
+
const docPath = findExternalComponentDoc(ext.docsDir, name);
|
|
46
|
+
/** @type {import('../_adapter.mjs').LoadedComponentDoc} */
|
|
47
|
+
let docs = {};
|
|
48
|
+
if (docPath && docPath.endsWith('.doc.mjs')) {
|
|
49
|
+
try {
|
|
50
|
+
docs = await loadComponentDoc(docPath, docOpts);
|
|
51
|
+
} catch {
|
|
52
|
+
// Keep list resilient; validation owns malformed docs.
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return withOwnership(docs, {package: ext.name, sourcePath: null}, name, coreDir).import;
|
|
56
|
+
}
|
|
57
|
+
|
|
34
58
|
/**
|
|
35
59
|
* Build the `component.list` envelope. The list taxonomy is collapsed: all
|
|
36
60
|
* three detail levels emit ONE `component.list` type; the depth rides in
|
|
@@ -267,20 +291,24 @@ export async function componentList(
|
|
|
267
291
|
k => grouped[k].length > 1 || grouped[k][0] !== k,
|
|
268
292
|
);
|
|
269
293
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
294
|
+
/** @param {string[]} names */
|
|
295
|
+
const entriesFor = names =>
|
|
296
|
+
Promise.all(
|
|
297
|
+
names.map(async n => ({
|
|
273
298
|
name: n,
|
|
274
299
|
package: ext.name,
|
|
275
|
-
|
|
300
|
+
import: await legacyImport(ext, n, coreDir, {zh, lang}),
|
|
301
|
+
})),
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
if (hasGroups) {
|
|
305
|
+
for (const [group, members] of Object.entries(grouped)) {
|
|
306
|
+
listData[`${group} (${ext.name})`] = await entriesFor(members);
|
|
276
307
|
}
|
|
277
308
|
} else {
|
|
278
309
|
const allComps = Object.values(grouped).flat().sort();
|
|
279
310
|
if (allComps.length > 0) {
|
|
280
|
-
listData[`${ext.category} (${ext.name})`] =
|
|
281
|
-
name: n,
|
|
282
|
-
package: ext.name,
|
|
283
|
-
}));
|
|
311
|
+
listData[`${ext.category} (${ext.name})`] = await entriesFor(allComps);
|
|
284
312
|
}
|
|
285
313
|
}
|
|
286
314
|
}
|
package/api/docs/_adapter.d.mts
CHANGED
|
@@ -15,12 +15,6 @@
|
|
|
15
15
|
* @returns {Promise<DocsCatalog>}
|
|
16
16
|
*/
|
|
17
17
|
export function loadDocsCatalog(cwd?: string): Promise<DocsCatalog>;
|
|
18
|
-
/**
|
|
19
|
-
* The overlay languages a topic ships for its own file or any extension.
|
|
20
|
-
* @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
|
|
21
|
-
* @returns {string[]}
|
|
22
|
-
*/
|
|
23
|
-
export function overlayLanguages(entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry): string[];
|
|
24
18
|
/**
|
|
25
19
|
* One topic, lowered for `lang`: overlaid, extensions merged, keys stamped.
|
|
26
20
|
* Memoized per catalog, so a read that references a topic twice loads it once.
|
|
@@ -76,6 +70,7 @@ export function resolveTopicDocs(topic: string, options?: {
|
|
|
76
70
|
node: import("../../foundation/doc-compiler/compile.mjs").CompiledReferenceNode;
|
|
77
71
|
lang: string | null;
|
|
78
72
|
}>;
|
|
79
|
-
/** The localized overlays a docs read can apply. */
|
|
80
|
-
export const OVERLAY_LANGUAGES: string[];
|
|
81
73
|
import { DocsCatalog } from '../../foundation/discovery/docs-discovery.mjs';
|
|
74
|
+
import { OVERLAY_LANGUAGES } from '../../foundation/doc-compiler/read.mjs';
|
|
75
|
+
import { overlayLanguages } from '../../foundation/doc-compiler/read.mjs';
|
|
76
|
+
export { OVERLAY_LANGUAGES, overlayLanguages };
|
package/api/docs/_adapter.mjs
CHANGED
|
@@ -10,24 +10,29 @@
|
|
|
10
10
|
* @output Catalog access, the compiler input for a topic, and the compiled
|
|
11
11
|
* node for it: lowered (overlaid, extensions merged, keys stamped) or linked
|
|
12
12
|
* (token references resolved too), memoized per catalog.
|
|
13
|
-
* @position Sits beside docs.mjs (api/docs/).
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* @position Sits beside docs.mjs (api/docs/). Hands topics to
|
|
14
|
+
* foundation/doc-compiler (which loads their files) and memoizes the nodes
|
|
15
|
+
* per catalog, so no leaf, doctor check or search loads, merges, or resolves
|
|
16
|
+
* docs on its own. Discovery itself lives in
|
|
16
17
|
* foundation/discovery/docs-discovery, which the catalog comes from.
|
|
17
18
|
*/
|
|
18
19
|
|
|
19
|
-
import * as fs from 'node:fs';
|
|
20
|
-
import * as path from 'node:path';
|
|
21
|
-
import {pathToFileURL} from 'node:url';
|
|
22
20
|
import {Project} from '../../foundation/config/project.mjs';
|
|
23
21
|
import {DocsCatalog} from '../../foundation/discovery/docs-discovery.mjs';
|
|
24
22
|
import {
|
|
25
23
|
linkReferenceTopic,
|
|
26
24
|
lowerReferenceTopic,
|
|
27
25
|
} from '../../foundation/doc-compiler/compile.mjs';
|
|
26
|
+
import {
|
|
27
|
+
deepFreeze,
|
|
28
|
+
loadTopicInput,
|
|
29
|
+
OVERLAY_LANGUAGES,
|
|
30
|
+
overlayLanguages,
|
|
31
|
+
} from '../../foundation/doc-compiler/read.mjs';
|
|
28
32
|
import {AstryxError} from '../error.mjs';
|
|
29
33
|
import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
|
|
30
|
-
|
|
34
|
+
|
|
35
|
+
export {OVERLAY_LANGUAGES, overlayLanguages};
|
|
31
36
|
|
|
32
37
|
/**
|
|
33
38
|
* The project's topics: the built-in ones plus whatever the configured
|
|
@@ -51,34 +56,6 @@ export async function loadDocsCatalog(cwd = process.cwd()) {
|
|
|
51
56
|
}
|
|
52
57
|
}
|
|
53
58
|
|
|
54
|
-
/** The localized overlays a docs read can apply. */
|
|
55
|
-
export const OVERLAY_LANGUAGES = ['zh', 'dense'];
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Where the `lang` overlay of a doc file lives: `{topic}.doc.{lang}.mjs`.
|
|
59
|
-
* @param {string} docPath
|
|
60
|
-
* @param {string} lang
|
|
61
|
-
* @returns {string}
|
|
62
|
-
*/
|
|
63
|
-
function overlayPath(docPath, lang) {
|
|
64
|
-
return path.join(
|
|
65
|
-
path.dirname(docPath),
|
|
66
|
-
`${path.basename(docPath, '.doc.mjs')}.doc.${lang}.mjs`,
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* The overlay languages a topic ships for its own file or any extension.
|
|
72
|
-
* @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
|
|
73
|
-
* @returns {string[]}
|
|
74
|
-
*/
|
|
75
|
-
export function overlayLanguages(entry) {
|
|
76
|
-
const files = [entry.path, ...entry.extensions.map(ext => ext.path)];
|
|
77
|
-
return OVERLAY_LANGUAGES.filter(lang =>
|
|
78
|
-
files.some(file => fs.existsSync(overlayPath(file, lang))),
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
59
|
/**
|
|
83
60
|
* The overlay a read applies: none for the authored language.
|
|
84
61
|
* @param {string | null | undefined} lang
|
|
@@ -88,61 +65,6 @@ function overlayLanguage(lang) {
|
|
|
88
65
|
return lang && lang !== 'en' ? lang : null;
|
|
89
66
|
}
|
|
90
67
|
|
|
91
|
-
/**
|
|
92
|
-
* Load one authored file and the overlay for `lang`. A failure is recorded on
|
|
93
|
-
* the result, not thrown, so the compiler reports it in reading order.
|
|
94
|
-
* @param {string} docPath
|
|
95
|
-
* @param {string | null} lang
|
|
96
|
-
* @returns {Promise<import('../../foundation/doc-compiler/compile.mjs').AuthoredFile>}
|
|
97
|
-
*/
|
|
98
|
-
async function loadAuthoredFile(docPath, lang) {
|
|
99
|
-
const file = path.basename(docPath);
|
|
100
|
-
let doc;
|
|
101
|
-
try {
|
|
102
|
-
const mod = await import(pathToFileURL(docPath).href);
|
|
103
|
-
doc = parseDoc(mod.docs ?? mod.default, file);
|
|
104
|
-
} catch (error) {
|
|
105
|
-
return {file, error};
|
|
106
|
-
}
|
|
107
|
-
if (!lang) return {file, doc};
|
|
108
|
-
const translationPath = overlayPath(docPath, lang);
|
|
109
|
-
if (!fs.existsSync(translationPath)) return {file, doc};
|
|
110
|
-
try {
|
|
111
|
-
const translationMod = await import(pathToFileURL(translationPath).href);
|
|
112
|
-
return {
|
|
113
|
-
file,
|
|
114
|
-
doc,
|
|
115
|
-
overlay: translationMod.docsZh || translationMod.docsDense || null,
|
|
116
|
-
};
|
|
117
|
-
} catch (overlayError) {
|
|
118
|
-
return {file, doc, overlayError};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Everything the compiler needs for one topic, read from disk.
|
|
124
|
-
* @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
|
|
125
|
-
* @param {string | null} lang
|
|
126
|
-
* @returns {Promise<import('../../foundation/doc-compiler/compile.mjs').ReferenceTopicInput>}
|
|
127
|
-
*/
|
|
128
|
-
async function loadCompilerInput(entry, lang) {
|
|
129
|
-
const extensions = [];
|
|
130
|
-
for (const extension of entry.extensions) {
|
|
131
|
-
extensions.push({
|
|
132
|
-
...(await loadAuthoredFile(extension.path, lang)),
|
|
133
|
-
provider: extension.package,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
id: entry.name,
|
|
138
|
-
provider: entry.package,
|
|
139
|
-
replaces: entry.replaces ?? null,
|
|
140
|
-
lang,
|
|
141
|
-
base: await loadAuthoredFile(entry.path, lang),
|
|
142
|
-
extensions,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
68
|
/** @type {WeakMap<DocsCatalog, Map<string, Promise<import('../../foundation/doc-compiler/compile.mjs').CompiledReferenceNode>>>} */
|
|
147
69
|
const loweredByCatalog = new WeakMap();
|
|
148
70
|
|
|
@@ -166,7 +88,7 @@ export function lowerTopic(catalog, entry, lang = null) {
|
|
|
166
88
|
const key = `${entry.name.toLowerCase()}\u0000${overlay ?? ''}`;
|
|
167
89
|
let lowered = cache.get(key);
|
|
168
90
|
if (!lowered) {
|
|
169
|
-
lowered =
|
|
91
|
+
lowered = loadTopicInput(entry, overlay).then(input =>
|
|
170
92
|
deepFreeze(lowerReferenceTopic(input)),
|
|
171
93
|
);
|
|
172
94
|
cache.set(key, lowered);
|
|
@@ -174,20 +96,6 @@ export function lowerTopic(catalog, entry, lang = null) {
|
|
|
174
96
|
return lowered;
|
|
175
97
|
}
|
|
176
98
|
|
|
177
|
-
/**
|
|
178
|
-
* Freeze a value and everything in it.
|
|
179
|
-
* @template T
|
|
180
|
-
* @param {T} value
|
|
181
|
-
* @returns {T}
|
|
182
|
-
*/
|
|
183
|
-
function deepFreeze(value) {
|
|
184
|
-
if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
185
|
-
Object.freeze(value);
|
|
186
|
-
for (const child of Object.values(value)) deepFreeze(child);
|
|
187
|
-
}
|
|
188
|
-
return value;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
99
|
/**
|
|
192
100
|
* How a token reference finds its target: the topic it names in `catalog`,
|
|
193
101
|
* lowered for the same language.
|
package/api/docs/docs.doc.mjs
CHANGED
package/api/docs/list/list.mjs
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @position Leaf under api/docs. Sibling of detail; both share _adapter.mjs.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import {loadTopicFile} from '../../../foundation/doc-compiler/read.mjs';
|
|
18
18
|
import {loadDocsCatalog} from '../_adapter.mjs';
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -29,12 +29,8 @@ export async function list({cwd} = {}) {
|
|
|
29
29
|
for (const entry of catalog.entries()) {
|
|
30
30
|
let description = entry.description ?? '';
|
|
31
31
|
if (entry.description == null) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
description = (mod.docs ?? mod.default)?.description ?? '';
|
|
35
|
-
} catch {
|
|
36
|
-
description = '';
|
|
37
|
-
}
|
|
32
|
+
const file = await loadTopicFile(entry.path, null);
|
|
33
|
+
description = file.doc?.description ?? '';
|
|
38
34
|
}
|
|
39
35
|
/** @type {import('../docs.type.mjs').DocsListEntry} */
|
|
40
36
|
const listed = {
|
package/api/doctor/doctor.d.mts
CHANGED
|
@@ -100,12 +100,34 @@ export function checkPackageManager(ctx: DoctorContext): DoctorCheck;
|
|
|
100
100
|
export function checkProviderIdentity(ctx: DoctorContext): DoctorCheck;
|
|
101
101
|
/**
|
|
102
102
|
* Every authoring self-doc is reachable from `astryx docs authoring`, loads,
|
|
103
|
-
* and fits in one read
|
|
104
|
-
*
|
|
103
|
+
* and fits in one read, and every type `@astryxdesign/cli/authoring` exports
|
|
104
|
+
* has its doc there: the self-doc beside the module that declares it. The
|
|
105
|
+
* audits are imported here, inside the try, so a malformed self-doc is
|
|
106
|
+
* reported rather than taking Doctor down.
|
|
105
107
|
* @param {DoctorContext} [_ctx]
|
|
108
|
+
* @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
|
|
109
|
+
* Another authoring tree, list, or topic index to audit (for tests).
|
|
106
110
|
* @returns {Promise<DoctorCheck>}
|
|
107
111
|
*/
|
|
108
|
-
export function checkAuthoringDocs(_ctx?: DoctorContext
|
|
112
|
+
export function checkAuthoringDocs(_ctx?: DoctorContext, options?: {
|
|
113
|
+
root?: string;
|
|
114
|
+
sources?: string[];
|
|
115
|
+
topicKeys?: Set<string> | null;
|
|
116
|
+
}): Promise<DoctorCheck>;
|
|
117
|
+
/**
|
|
118
|
+
* Every command, API function, schema, and enum doc the CLI ships declares a
|
|
119
|
+
* namespace, and the topic that namespace names reads it: `astryx docs cli`
|
|
120
|
+
* for `cli/commands` and `cli/api`, `astryx docs authoring` for `authoring`.
|
|
121
|
+
* @param {DoctorContext | Partial<DoctorContext>} _ctx
|
|
122
|
+
* @param {{root?: string, sources?: string[], authoringSources?: string[]}} [options]
|
|
123
|
+
* test seams: the CLI root, the docs to audit, and the authoring topic's list
|
|
124
|
+
* @returns {Promise<DoctorCheck>}
|
|
125
|
+
*/
|
|
126
|
+
export function checkCliDocs(_ctx: DoctorContext | Partial<DoctorContext>, options?: {
|
|
127
|
+
root?: string;
|
|
128
|
+
sources?: string[];
|
|
129
|
+
authoringSources?: string[];
|
|
130
|
+
}): Promise<DoctorCheck>;
|
|
109
131
|
/**
|
|
110
132
|
* Every topic reads progressively, in every language it ships: it loads, its
|
|
111
133
|
* section index and each of its sections fit in one read, and no contributed
|