@astryxdesign/cli 0.7.2-canary.ebcc404 → 0.7.2-canary.f2b60a0

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.
Files changed (205) hide show
  1. package/README.md +15 -14
  2. package/api/build/help/help.mjs +1 -1
  3. package/api/component/_adapter.d.mts +14 -0
  4. package/api/component/_adapter.mjs +48 -0
  5. package/api/component/component.mjs +10 -2
  6. package/api/component/integration-export-name.test.mjs +233 -8
  7. package/api/docs/_adapter.d.mts +11 -0
  8. package/api/docs/_adapter.mjs +244 -1
  9. package/api/docs/integrationDocs.test.mjs +124 -0
  10. package/api/doctor/doctor.mjs +27 -3
  11. package/api/doctor/doctor.test.mjs +43 -0
  12. package/api/doctor/theme-checks.mjs +1 -1
  13. package/api/gap-report/gap-report.mjs +2 -1
  14. package/api/index.d.mts +2 -0
  15. package/api/index.mjs +2 -0
  16. package/api/init/run/run.mjs +2 -2
  17. package/api/integration/_adapter.d.mts +12 -0
  18. package/api/integration/_adapter.mjs +54 -0
  19. package/api/integration/add-contribution.component-names.test.mjs +66 -0
  20. package/api/integration/add-contribution.mjs +8 -4
  21. package/api/integration/add-contribution.test.mjs +4 -2
  22. package/api/integration/authoring-checks.mjs +11 -2
  23. package/api/integration/authoring-checks.test.mjs +39 -0
  24. package/api/integration/authoring-checks.type.d.mts +9 -0
  25. package/api/integration/authoring-checks.type.mjs +14 -1
  26. package/api/integration/check/check.d.mts +96 -0
  27. package/api/integration/check/check.mjs +357 -0
  28. package/api/integration/check/check.test.mjs +489 -0
  29. package/api/integration/integration-check.type.d.mts +118 -0
  30. package/api/integration/integration-check.type.mjs +84 -0
  31. package/api/integration/integrationCheck.doc.d.mts +10 -0
  32. package/api/integration/integrationCheck.doc.mjs +73 -0
  33. package/api/integration/integrationComponentConflicts.doc.mjs +36 -5
  34. package/api/integration/pack-check.mjs +48 -3
  35. package/api/integration/pack-check.test.mjs +247 -0
  36. package/api/integration/validate-integration.mjs +8 -0
  37. package/api/integration/validate-integration.test.mjs +11 -0
  38. package/api/integration/validate-integration.type.d.mts +8 -0
  39. package/api/integration/validate-integration.type.mjs +12 -1
  40. package/api/integration/validateIntegration.doc.mjs +17 -3
  41. package/api/search/search.d.mts +13 -6
  42. package/api/search/search.domain-priority.test.mjs +108 -18
  43. package/api/search/search.integration-check.test.mjs +24 -0
  44. package/api/search/search.mjs +53 -17
  45. package/api/theme/build/build.family.test.mjs +54 -6
  46. package/api/theme/build/build.mjs +114 -17
  47. package/api/theme/themeBuild.doc.mjs +4 -4
  48. package/assets/docs/README.md +10 -0
  49. package/assets/docs/author-a-theme.doc.mjs +1 -1
  50. package/assets/docs/getting-started.doc.mjs +3 -3
  51. package/assets/docs/styling-overview.doc.mjs +1 -1
  52. package/assets/docs/theme.doc.dense.mjs +1 -1
  53. package/assets/docs/theme.doc.mjs +1 -1
  54. package/assets/docs/theme.doc.zh.mjs +1 -1
  55. package/assets/docs/tree/add-a-component.doc.mjs +11 -1
  56. package/assets/docs/tree/add-a-theme.doc.mjs +1 -1
  57. package/assets/docs/tree/add-a-topic.doc.mjs +10 -7
  58. package/assets/docs/tree/agent-guidance.doc.mjs +2 -2
  59. package/assets/docs/tree/block-template.doc.mjs +8 -20
  60. package/assets/docs/tree/build-the-template.doc.mjs +1 -1
  61. package/assets/docs/tree/check-the-props.doc.mjs +196 -0
  62. package/assets/docs/tree/check-your-docs.doc.mjs +51 -5
  63. package/assets/docs/tree/checks.doc.mjs +24 -16
  64. package/assets/docs/tree/codemods.doc.mjs +4 -4
  65. package/assets/docs/tree/component-family.doc.mjs +8 -6
  66. package/assets/docs/tree/component-imports.doc.mjs +3 -3
  67. package/assets/docs/tree/components.doc.mjs +1 -1
  68. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +7 -18
  69. package/assets/docs/tree/define-the-theme.doc.mjs +6 -5
  70. package/assets/docs/tree/describe-the-component.doc.mjs +2 -2
  71. package/assets/docs/tree/docs.doc.mjs +3 -3
  72. package/assets/docs/tree/document-the-template.doc.mjs +1 -1
  73. package/assets/docs/tree/document-the-theme.doc.mjs +1 -1
  74. package/assets/docs/tree/export-template-assets.doc.mjs +1 -1
  75. package/assets/docs/tree/extend-or-replace.doc.mjs +6 -6
  76. package/assets/docs/tree/fonts-and-assets.doc.mjs +2 -2
  77. package/assets/docs/tree/generate-a-palette.doc.mjs +5 -3
  78. package/assets/docs/tree/grade-template-with-agent.doc.mjs +1 -1
  79. package/assets/docs/tree/integrations.doc.mjs +8 -0
  80. package/assets/docs/tree/links.doc.mjs +6 -5
  81. package/assets/docs/tree/migration-setup.doc.mjs +1 -0
  82. package/assets/docs/tree/migration-verification.doc.mjs +0 -1
  83. package/assets/docs/tree/migration.doc.mjs +0 -1
  84. package/assets/docs/tree/package-and-test.doc.mjs +1 -1
  85. package/assets/docs/tree/page-template.doc.mjs +4 -8
  86. package/assets/docs/tree/publishing.doc.mjs +1 -1
  87. package/assets/docs/tree/quick-start.doc.mjs +37 -21
  88. package/assets/docs/tree/replace-a-core-component.doc.mjs +4 -6
  89. package/assets/docs/tree/replace-a-core-template.doc.mjs +6 -8
  90. package/assets/docs/tree/sections-and-placement.doc.mjs +4 -6
  91. package/assets/docs/tree/see-it-in-an-app.doc.mjs +4 -2
  92. package/assets/docs/tree/short-and-findable.doc.mjs +6 -5
  93. package/assets/docs/tree/single-component.doc.mjs +15 -6
  94. package/assets/docs/tree/start-a-template.doc.mjs +3 -3
  95. package/assets/docs/tree/subcomponent.doc.mjs +6 -6
  96. package/assets/docs/tree/template-assets.doc.mjs +2 -2
  97. package/assets/docs/tree/template-doc-overview.doc.mjs +4 -15
  98. package/assets/docs/tree/template-fonts.doc.mjs +1 -1
  99. package/assets/docs/tree/template-icons.doc.mjs +1 -1
  100. package/assets/docs/tree/template-images-media.doc.mjs +1 -1
  101. package/assets/docs/tree/template-styles.doc.mjs +2 -2
  102. package/assets/docs/tree/templates.doc.mjs +1 -1
  103. package/assets/docs/tree/test-in-an-app.doc.mjs +3 -3
  104. package/assets/docs/tree/test-template-in-app.doc.mjs +1 -1
  105. package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
  106. package/assets/docs/tree/troubleshooting.doc.mjs +13 -5
  107. package/assets/docs/tree/type-scale.doc.mjs +3 -3
  108. package/assets/docs/tree/upgrading.doc.mjs +3 -3
  109. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +3 -1
  110. package/assets/docs/tree/verify-packed-template.doc.mjs +1 -1
  111. package/assets/docs/tree/versioning.doc.mjs +7 -6
  112. package/assets/docs/tree/write-the-template-file.doc.mjs +4 -3
  113. package/assets/docs/use-a-theme.doc.mjs +2 -2
  114. package/assets/theme.template.ts +1 -1
  115. package/authoring/codemod/codemod.doc.mjs +7 -3
  116. package/authoring/config/config.doc.mjs +9 -6
  117. package/authoring/config/type.ts +4 -2
  118. package/authoring/discover/discover.doc.mjs +1 -1
  119. package/authoring/doctypes/base/graph-fields.doc.mjs +6 -4
  120. package/authoring/doctypes/command/command.doc.mjs +14 -12
  121. package/authoring/doctypes/component/component.doc.mjs +29 -26
  122. package/authoring/doctypes/component/type.ts +7 -5
  123. package/authoring/doctypes/enum/enum.doc.mjs +7 -4
  124. package/authoring/doctypes/function/function.doc.mjs +9 -8
  125. package/authoring/doctypes/hook/hook.doc.mjs +5 -4
  126. package/authoring/doctypes/namespace/namespace.doc.mjs +7 -6
  127. package/authoring/doctypes/reference/reference.doc.mjs +11 -10
  128. package/authoring/doctypes/schema/schema.doc.mjs +9 -9
  129. package/authoring/doctypes/template/integration-template.doc.d.mts +11 -0
  130. package/authoring/doctypes/template/integration-template.doc.mjs +49 -0
  131. package/authoring/doctypes/template/parse.d.mts +6 -2
  132. package/authoring/doctypes/template/parse.mjs +3 -1
  133. package/authoring/doctypes/template/template.doc.mjs +3 -3
  134. package/authoring/doctypes/template/type.ts +22 -0
  135. package/authoring/doctypes/theme/theme.doc.mjs +2 -2
  136. package/authoring/gap-report/gap-report.doc.mjs +2 -2
  137. package/authoring/identity/identity.doc.mjs +3 -3
  138. package/authoring/index.d.ts +1 -0
  139. package/authoring/integration/integration.doc.mjs +12 -4
  140. package/authoring/integration/parse.test.mjs +10 -0
  141. package/authoring/integration/schema.d.mts +2 -0
  142. package/authoring/integration/schema.mjs +1 -0
  143. package/authoring/integration/type.ts +4 -0
  144. package/clients/cli/commands/build-theme.batch-report.test.mjs +3 -1
  145. package/clients/cli/commands/build-theme.mjs +1 -1
  146. package/clients/cli/commands/build-theme.path-safety.test.mjs +155 -21
  147. package/clients/cli/commands/cli-postinstall.test.mjs +49 -1
  148. package/clients/cli/commands/doctor-integration-components.doc.mjs +15 -4
  149. package/clients/cli/commands/doctor-integration-validate.doc.mjs +11 -2
  150. package/clients/cli/commands/doctor-integration.test.mjs +837 -0
  151. package/clients/cli/commands/doctor.mjs +190 -0
  152. package/clients/cli/commands/integration-check.doc.mjs +85 -0
  153. package/clients/cli/commands/integration-check.test.mjs +267 -0
  154. package/clients/cli/commands/integration.doc.mjs +6 -2
  155. package/clients/cli/commands/integration.mjs +107 -1
  156. package/clients/cli/commands/setup-nudge.test.mjs +79 -1
  157. package/clients/cli/commands/swizzle.mjs +5 -3
  158. package/clients/cli/commands/swizzle.routing.test.mjs +18 -1
  159. package/clients/cli/commands/text-json-parity.test.mjs +5 -0
  160. package/clients/cli/commands/theme-build.doc.mjs +2 -2
  161. package/clients/cli/index.mjs +30 -5
  162. package/foundation/agent-docs/agent-doc-state.d.mts +14 -0
  163. package/foundation/agent-docs/agent-doc-state.mjs +38 -0
  164. package/foundation/agent-docs/agent-docs.d.mts +2 -1
  165. package/foundation/agent-docs/agent-docs.mjs +8 -6
  166. package/foundation/config/project.mjs +82 -0
  167. package/foundation/discovery/authoring-self-docs.mjs +2 -1
  168. package/foundation/discovery/component-discovery.d.mts +108 -17
  169. package/foundation/discovery/component-discovery.export-names.test.mjs +469 -2
  170. package/foundation/discovery/component-discovery.mjs +380 -47
  171. package/foundation/discovery/component-replacement.test.mjs +20 -0
  172. package/foundation/discovery/doc-types.d.mts +157 -0
  173. package/foundation/discovery/doc-types.mjs +1224 -0
  174. package/foundation/discovery/doc-types.test.mjs +652 -0
  175. package/foundation/discovery/docs-discovery.d.mts +81 -0
  176. package/foundation/discovery/docs-discovery.mjs +57 -0
  177. package/foundation/discovery/integration-doc-files.d.mts +22 -0
  178. package/foundation/discovery/integration-doc-files.mjs +231 -0
  179. package/foundation/discovery/integration-doc-files.test.mjs +246 -0
  180. package/foundation/discovery/module-exports.d.mts +6 -0
  181. package/foundation/discovery/module-exports.mjs +15 -2
  182. package/foundation/discovery/package-tsconfig.d.mts +14 -0
  183. package/foundation/discovery/package-tsconfig.mjs +228 -0
  184. package/foundation/discovery/package-tsconfig.test.mjs +210 -0
  185. package/foundation/discovery/project-typescript.d.mts +23 -0
  186. package/foundation/discovery/project-typescript.mjs +61 -0
  187. package/foundation/discovery/prop-drift.d.mts +278 -0
  188. package/foundation/discovery/prop-drift.mjs +2263 -0
  189. package/foundation/discovery/prop-drift.test.mjs +2219 -0
  190. package/foundation/discovery/type-match.d.mts +53 -0
  191. package/foundation/discovery/type-match.mjs +660 -0
  192. package/foundation/discovery/type-match.test.mjs +169 -0
  193. package/foundation/discovery/type-text.d.mts +68 -0
  194. package/foundation/discovery/type-text.mjs +658 -0
  195. package/foundation/discovery/type-text.test.mjs +196 -0
  196. package/foundation/discovery/unresolved-references.d.mts +62 -0
  197. package/foundation/discovery/unresolved-references.mjs +790 -0
  198. package/foundation/discovery/unresolved-references.test.mjs +567 -0
  199. package/foundation/doc-compiler/doc-loads.test.mjs +6 -0
  200. package/foundation/doc-compiler/links.d.mts +9 -5
  201. package/foundation/doc-compiler/links.mjs +4 -2
  202. package/foundation/integrations/contribution-inventory.mjs +6 -1
  203. package/foundation/response/response-types.doc.mjs +7 -2
  204. package/package.json +9 -9
  205. package/scripts/postinstall.mjs +3 -3
@@ -34,20 +34,22 @@ export const docs = {
34
34
  },
35
35
  {
36
36
  type: 'prose',
37
- text: 'An integration starts as a normal npm package. Make a folder for it, create a package.json inside that folder, give the package a name, then install the Astryx CLI and Core for development.',
37
+ text: 'An integration starts as a normal npm package. Make a folder for it, create a package.json inside that folder, give the package a name, make it an ES module, then install the Astryx CLI, Core, and TypeScript for development.',
38
38
  },
39
39
  {
40
40
  type: 'code',
41
41
  lang: 'bash',
42
- code: "mkdir acme-widgets && cd acme-widgets\nnpm init -y\nnpm pkg set name=@acme/astryx-widgets\nnpm pkg set 'exports={}' --json\nnpm install -D @astryxdesign/cli @astryxdesign/core",
42
+ code: "mkdir acme-widgets && cd acme-widgets\nnpm init -y\nnpm pkg set name=@acme/astryx-widgets type=module\nnpm pkg set 'exports={}' --json\nnpm install -D @astryxdesign/cli @astryxdesign/core typescript@6",
43
43
  },
44
44
  {
45
45
  type: 'list',
46
46
  style: 'unordered',
47
47
  items: [
48
+ 'Set `"type": "module"`: the `.js` files the CLI generates, such as a built theme, are ES modules, and Node fails to load them in a package marked `"type": "commonjs"`, which `npm init -y` writes on npm 11.',
48
49
  'Start with `"exports": {}`: each component and template you add then writes the public import that `integration verify` resolves.',
49
50
  'Run the CLI as `npx astryx`, which runs the `@astryxdesign/cli` you installed as a devDependency.',
50
51
  'Component commands read Core, so they need `@astryxdesign/core` installed.',
52
+ "The checks compare your docs with your code through TypeScript's JavaScript compiler API, so they need `typescript` 5.0 through 6 installed. TypeScript 7 does not ship that API, and with it the checks skip those comparisons.",
51
53
  ],
52
54
  },
53
55
  {
@@ -86,6 +88,33 @@ export const docs = {
86
88
  type: 'prose',
87
89
  text: 'You now have an integration package with one exported component.',
88
90
  },
91
+ {
92
+ type: 'heading',
93
+ level: 3,
94
+ text: 'Check it in every build (required)',
95
+ },
96
+ {
97
+ type: 'prose',
98
+ text: 'Every integration runs `integration check --strict` in its own build, so a doc, prop, template, or link that stops matching the code fails your build instead of reaching the apps that install your package. Set it up now, as the `typecheck` script, and run it.',
99
+ },
100
+ {
101
+ type: 'code',
102
+ lang: 'bash',
103
+ code: 'npm pkg set scripts.typecheck="astryx integration check --strict"\nnpm run typecheck',
104
+ },
105
+ {
106
+ type: 'code',
107
+ lang: 'text',
108
+ code: '[ok] 0 errors, 0 warnings, 0 skipped. Every check passed.',
109
+ },
110
+ {
111
+ type: 'list',
112
+ style: 'unordered',
113
+ items: [
114
+ 'Run `typecheck` in CI and before every publish. When you add a `tsconfig.json`, put `tsc --noEmit && ` in front of the check so the same script checks your types.',
115
+ 'What each check covers, and what `--strict` adds: {@link generic:checks}.',
116
+ ],
117
+ },
89
118
  {
90
119
  type: 'heading',
91
120
  level: 3,
@@ -172,19 +201,19 @@ export const docs = {
172
201
  ],
173
202
  [
174
203
  '`peerDependencies`',
175
- '`@astryxdesign/cli`; add `@astryxdesign/core` when your code imports it',
204
+ '`@astryxdesign/core` when your code imports it; `@astryxdesign/cli`, optional, when you ship a feature that needs a newer CLI ({@link generic:versioning})',
176
205
  'The app supplies these packages for your integration.',
177
206
  ],
178
207
  [
179
208
  '`devDependencies`',
180
- '`@astryxdesign/cli` and `@astryxdesign/core`',
181
- 'Lets you run the CLI and build components while working on the integration.',
209
+ '`@astryxdesign/cli`, `@astryxdesign/core`, and `typescript`',
210
+ 'Lets you run the CLI, build components, and run the checks while working on the integration.',
182
211
  ],
183
212
  ],
184
213
  },
185
214
  {
186
215
  type: 'prose',
187
- text: 'Peer ranges and releases are covered in {@link generic:versioning}; `files` and publishing in {@link generic:publishing}.',
216
+ text: 'Peer ranges and releases are covered in {@link generic:versioning}; `files` and publishing in {@link generic:publishing}. Add `"typecheck": "tsc --noEmit && astryx integration check --strict"` to `scripts` so each run checks your types and that your docs, props, and links still match the code. It needs `typescript` and a `tsconfig.json`; see {@link generic:checks}.',
188
217
  },
189
218
  ],
190
219
  },
@@ -226,21 +255,8 @@ export const docs = {
226
255
  text: 'The file tells the CLI where this package keeps its integration items. Edit it only when you want a custom root or another optional setting. Paths are relative to package.json, and later adds keep a custom path you already set.',
227
256
  },
228
257
  {
229
- type: 'reference',
230
- target: 'schema:integration',
231
- projection: {
232
- fields: [
233
- 'providerId',
234
- 'components',
235
- 'templates',
236
- 'codemods',
237
- 'docs',
238
- 'themes',
239
- 'agentDocs',
240
- 'issuesUrl',
241
- ],
242
- },
243
- presentation: 'full',
258
+ type: 'prose',
259
+ text: 'Every field is in {@link schema:integration}.',
244
260
  },
245
261
  {
246
262
  type: 'heading',
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/components/replace-a-core-component`:
4
+ * @file `astryx docs cli/integrations/building-blocks/components/replace-a-core-component`:
5
5
  * intentionally make an integration component the default for a Core identity.
6
6
  */
7
7
 
@@ -65,10 +65,8 @@ export default {
65
65
  };`,
66
66
  },
67
67
  {
68
- type: 'reference',
69
- target: 'schema:component-doc',
70
- projection: {fields: ['replaces']},
71
- presentation: 'full',
68
+ type: 'prose',
69
+ text: 'Every field is in {@link schema:component-doc}.',
72
70
  },
73
71
  {
74
72
  type: 'prose',
@@ -87,7 +85,7 @@ export default {
87
85
  type: 'list',
88
86
  style: 'unordered',
89
87
  items: [
90
- 'Any `@astryxdesign/cli` range that starts at that release or later turns it on, including the `>=0.7.0` that earlier `integration add theme` and `integration add doc --parent` wrote.',
88
+ 'Any `@astryxdesign/cli` range that starts at that release or later turns it on, including the `>=0.7.0` that `integration add doc --parent` wrote in published 0.6.4 and 0.6.5, and `integration add theme` in published 0.6.5.',
91
89
  'Without such a range, the component keeps its own name, the Core component stays selected (a component named like its target stays ambiguous by that bare name, as before), and `doctor integration components` warns with the range to add. Apps that load such a package see no change.',
92
90
  '`replaces` names the Core `ComponentDoc` identity, not its display label, import path, or a standalone hook.',
93
91
  'Your component may keep a distinct name or use the same name as the target. A distinct name remains directly addressable on older CLIs that ignore `replaces`.',
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/document-the-template/replace-a-core-template`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/document-the-template/replace-a-core-template`:
5
5
  * deliberately replace one Core template through template metadata.
6
6
  */
7
7
 
@@ -54,7 +54,7 @@ export const docs = {
54
54
  type: 'code',
55
55
  lang: 'javascript',
56
56
  label: 'templates/acme-app-shell.doc.mjs',
57
- code: `/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
57
+ code: `/** @type {import('@astryxdesign/cli/authoring').IntegrationTemplateDoc} */
58
58
  export default {
59
59
  type: 'page',
60
60
  name: 'acme-app-shell',
@@ -67,10 +67,8 @@ export default {
67
67
  };`,
68
68
  },
69
69
  {
70
- type: 'reference',
71
- target: 'schema:template-doc',
72
- projection: {fields: ['replaces']},
73
- presentation: 'full',
70
+ type: 'prose',
71
+ text: 'Every field is in {@link schema:template-doc}.',
74
72
  },
75
73
  {
76
74
  type: 'prose',
@@ -84,7 +82,7 @@ export default {
84
82
  content: [
85
83
  {
86
84
  type: 'prose',
87
- text: 'Declare the CLI floor from the field above as an optional peer ({@link generic:versioning}).',
85
+ text: 'Declare the CLI floor that `integration verify` names as an optional peer ({@link generic:versioning}).',
88
86
  },
89
87
  {
90
88
  type: 'code',
@@ -103,7 +101,7 @@ export default {
103
101
  },
104
102
  {
105
103
  type: 'prose',
106
- text: '`integration verify` reports `replaces_needs_cli` when that peer is missing or too old. Without it, an older CLI drops that template and hides your doc topics.',
104
+ text: '`integration verify` reports `replaces_needs_cli` when that peer is missing or too old. Without it, published 0.6.3 and earlier drop that template and hide your doc topics.',
107
105
  },
108
106
  ],
109
107
  },
@@ -1,9 +1,9 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/docs/sections-and-placement`: give an
5
- * integration package its own section in the docs tree, place guides in it,
6
- * and fix a placement that fails.
4
+ * @file `astryx docs cli/integrations/building-blocks/docs/sections-and-placement`:
5
+ * give an integration package its own section in the docs tree, place guides
6
+ * in it, and fix a placement that fails.
7
7
  */
8
8
 
9
9
  /** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */
@@ -62,9 +62,7 @@ export const docs = {
62
62
  type: 'list',
63
63
  style: 'unordered',
64
64
  items: [
65
- "`parent` is `namespace:<name>`, a namespace that your own package ships. You cannot place a doc in the CLI's sections or in another package's.",
66
- "`slot` is a slot that the namespace declares for the doc's kind. You can leave it out when the namespace has only one slot.",
67
- '`order` is an integer that sorts the guides in the slot and sets their Previous and Next moves. Guides without one come last, by name.',
65
+ 'Every field is in {@link schema:authored-doc-graph-fields}.',
68
66
  'A placed guide opens only by its route, `acme/deploying`. Its bare name no longer opens it.',
69
67
  ],
70
68
  },
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/components/see-it-in-an-app`: inspect an
4
+ * @file `astryx docs cli/integrations/building-blocks/components/see-it-in-an-app`: inspect an
5
5
  * integration component from an app that installs the package.
6
6
  */
7
7
 
@@ -33,7 +33,9 @@ npx astryx search carousel`,
33
33
  {
34
34
  type: 'code',
35
35
  lang: 'text',
36
- code: `# AcmeCarousel
36
+ code: `package: @acme/astryx-widgets
37
+
38
+ # AcmeCarousel
37
39
 
38
40
  Cycles through slides one at a time. Use it for a small set of related cards.
39
41
 
@@ -1,8 +1,9 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/docs/short-and-findable`: keep each read
5
- * short, lead each section with its summary, and write docs that search finds.
4
+ * @file `astryx docs cli/integrations/building-blocks/docs/short-and-findable`:
5
+ * keep each read short, lead each section with its summary, and write docs
6
+ * that search finds.
6
7
  */
7
8
 
8
9
  /** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */
@@ -58,7 +59,7 @@ export const docs = {
58
59
  {
59
60
  type: 'code',
60
61
  lang: 'text',
61
- code: 'build-before-you-ship Build before you ship - Build the app, then upload the `dist` folder to your host.',
62
+ code: 'build-before-you-ship Build before you ship - Build the app, then upload the `dist` folder.',
62
63
  },
63
64
  ],
64
65
  },
@@ -68,14 +69,14 @@ export const docs = {
68
69
  content: [
69
70
  {
70
71
  type: 'prose',
71
- text: 'Search ranks a query that matches a whole title, or an identifier in backticks, above words in body text. Title each section with the task a reader searches for.',
72
+ text: 'In a topic with more than one section, search ranks a section whose title matches the query, or that names it in backticks, above words in body text. Title each section with the task a reader searches for.',
72
73
  },
73
74
  {
74
75
  type: 'list',
75
76
  style: 'unordered',
76
77
  items: [
77
78
  'Name the task in the words a reader types, such as "Deploy to production". Avoid titles such as "Overview" or "Details".',
78
- 'Write field names, file names, and error codes in backticks, such as `deployTarget`: search treats each one as a keyword.',
79
+ 'Write field names, file names, and error codes in backticks, such as `deployTarget`: in a topic with more than one section, search treats each one as a keyword.',
79
80
  'Other words in the summary and body match too, but rank below titles and identifiers. The summary shows under each hit, so make it answer the query.',
80
81
  ],
81
82
  },
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/components/describe-the-component/single-component`:
4
+ * @file `astryx docs cli/integrations/building-blocks/components/describe-the-component/single-component`:
5
5
  * write and maintain the default ComponentDoc for one public component.
6
6
  */
7
7
 
@@ -56,14 +56,13 @@ export default {
56
56
  style: 'unordered',
57
57
  items: [
58
58
  'Keep `props` on the top-level doc. Private implementation helpers do not need entries.',
59
- 'Keep the doc beside the source and change both in the same pull request.',
59
+ 'Name the doc after the source file beside it, such as `AcmeCarousel.doc.mjs` beside `AcmeCarousel.tsx`, and change both in the same pull request.',
60
60
  'If the module later exposes several related public exports, adapt this doc with {@link generic:component-family}.',
61
61
  ],
62
62
  },
63
63
  {
64
- type: 'reference',
65
- target: 'schema:component-doc',
66
- presentation: 'summary',
64
+ type: 'prose',
65
+ text: 'Every field is in {@link schema:component-doc}.',
67
66
  },
68
67
  ],
69
68
  },
@@ -87,6 +86,15 @@ export default {
87
86
  ],
88
87
  },`,
89
88
  },
89
+ {
90
+ type: 'prose',
91
+ text: "Set `keywords` to the words people search for: synonyms and the task the component does, such as `keywords: ['slider', 'slideshow', 'rotating cards']`. `astryx search` ranks a match on a component's name or keywords above one in its description, so without keywords a search for the component's task can list Core components first. Check with the words a person would type:",
92
+ },
93
+ {
94
+ type: 'code',
95
+ lang: 'bash',
96
+ code: 'npx astryx search "rotating cards" --type component',
97
+ },
90
98
  ],
91
99
  },
92
100
  {
@@ -122,6 +130,7 @@ export default {
122
130
  'Set `required: true` only when every caller must pass the prop.',
123
131
  'Write `default` exactly as the value should appear in documentation.',
124
132
  'Skip styling escape hatches such as `xstyle`, `className`, and `style`.',
133
+ '`npx astryx doctor integration components` lists a documented prop the code lacks, a public prop the doc misses, and a wrong `required`. See {@link generic:check-the-props}.',
125
134
  ],
126
135
  },
127
136
  ],
@@ -157,7 +166,7 @@ export default {
157
166
  {
158
167
  type: 'code',
159
168
  lang: 'bash',
160
- code: 'npx astryx component AcmeCarousel\nnpx astryx integration verify',
169
+ code: 'npx astryx component AcmeCarousel\nnpx astryx doctor integration components\nnpx astryx integration verify',
161
170
  },
162
171
  ],
163
172
  },
@@ -1,9 +1,9 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/start-a-template`: what a
5
- * template is, why an integration shares one, whether it is a page or a
6
- * block, and how to add one.
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/start-a-template`:
5
+ * what a template is, why an integration shares one, whether it is a page or
6
+ * a block, and how to add one.
7
7
  */
8
8
 
9
9
  /** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/components/describe-the-component/subcomponent`:
4
+ * @file `astryx docs cli/integrations/building-blocks/components/describe-the-component/subcomponent`:
5
5
  * give one member of a component family its own ComponentDoc.
6
6
  */
7
7
 
@@ -51,6 +51,7 @@ export default {
51
51
  type: 'component',
52
52
  name: 'AcmeDialog',
53
53
  displayName: 'Acme Dialog',
54
+ import: '@acme/astryx-widgets/components/AcmeDialog',
54
55
  usage: {description: 'Presents a focused task above the current page.'},
55
56
  components: [
56
57
  {
@@ -82,6 +83,7 @@ export default {
82
83
  type: 'component',
83
84
  name: 'AcmeDialogHeader',
84
85
  displayName: 'Acme Dialog Header',
86
+ import: '@acme/astryx-widgets/components/AcmeDialogHeader',
85
87
  subComponentOf: 'AcmeDialog',
86
88
  description: 'Labels an Acme Dialog and holds its close action.',
87
89
  props: [
@@ -95,10 +97,8 @@ export default {
95
97
  };`,
96
98
  },
97
99
  {
98
- type: 'reference',
99
- target: 'schema:component-doc',
100
- projection: {fields: ['subComponentOf', 'description', 'props']},
101
- presentation: 'full',
100
+ type: 'prose',
101
+ text: 'Every field is in {@link schema:component-doc}.',
102
102
  },
103
103
  {
104
104
  type: 'list',
@@ -106,7 +106,7 @@ export default {
106
106
  items: [
107
107
  '`subComponentOf` must exactly match the parent doc\'s `name`.',
108
108
  '`description` explains this member\'s role in the family. `usage` is optional; add it when the member needs guidance beyond that sentence.',
109
- 'The child inherits family fields such as `group`, `category`, `keywords`, `theming`, and `playground` unless it overrides them.',
109
+ 'The CLI does not copy family fields such as `group`, `category`, or `keywords` from the parent to the child. Set any the child needs in its own doc.',
110
110
  ],
111
111
  },
112
112
  ],
@@ -1,8 +1,8 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/template-assets`: make every
5
- * style, font, icon, and media dependency survive a template copy.
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/build-the-template/template-assets`:
5
+ * make every style, font, icon, and media dependency survive a template copy.
6
6
  */
7
7
 
8
8
  /** @type {import('@astryxdesign/cli/authoring').NamespaceDoc} */
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/document-the-template/template-doc-overview`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/document-the-template/template-doc-overview`:
5
5
  * the source and doc file pair, the fields every template doc shares, and how
6
6
  * to check what Astryx lists.
7
7
  */
@@ -54,22 +54,11 @@ export const docs = {
54
54
  content: [
55
55
  {
56
56
  type: 'prose',
57
- text: 'These fields apply to every page and block. The page, block, and replacement guides add the fields unique to each.',
57
+ text: 'The fields below apply to every page and block. The page, block, and replacement guides add the fields unique to each.',
58
58
  },
59
59
  {
60
- type: 'reference',
61
- target: 'schema:template-doc',
62
- projection: {
63
- fields: [
64
- 'type',
65
- 'name',
66
- 'displayName',
67
- 'description',
68
- 'keywords',
69
- 'isReady',
70
- ],
71
- },
72
- presentation: 'full',
60
+ type: 'prose',
61
+ text: 'Every field is in {@link schema:template-doc}.',
73
62
  },
74
63
  {
75
64
  type: 'list',
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/build-the-template/template-assets/template-fonts`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/build-the-template/template-assets/template-fonts`:
5
5
  * use the app typeface by default, and ship every font file a template needs
6
6
  * when it must bring its own.
7
7
  */
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/build-the-template/template-assets/template-icons`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/build-the-template/template-assets/template-icons`:
5
5
  * render template icons through Astryx and ship custom product icons from the
6
6
  * package.
7
7
  */
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/build-the-template/template-assets/template-images-media`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/build-the-template/template-assets/template-images-media`:
5
5
  * keep template images and video working after the copy, or make them clear
6
6
  * placeholders.
7
7
  */
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/build-the-template/template-assets/template-styles`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/build-the-template/template-assets/template-styles`:
5
5
  * style a template with Astryx first, keep editable styles in the file, and
6
6
  * ship shared CSS from the package.
7
7
  */
@@ -85,7 +85,7 @@ const styles = stylex.create({
85
85
  },
86
86
  {
87
87
  type: 'prose',
88
- text: 'Then export that path and include the file in the package ({@link generic:export-template-assets}). In a TypeScript app, this import type-checks only when the app declares `*.css` modules.',
88
+ text: 'Then export that path and include the file in the package ({@link generic:export-template-assets}). TypeScript 6 and later check side-effect imports by default, so this import type-checks only when the app or its framework declares `*.css` modules.',
89
89
  },
90
90
  ],
91
91
  },
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates`: guides for adding,
4
+ * @file `astryx docs cli/integrations/building-blocks/templates`: guides for adding,
5
5
  * documenting, packaging, and testing templates in an integration package.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/test-in-an-app`: install the packed
4
+ * @file `astryx docs cli/integrations/ship/test-in-an-app`: install the packed
5
5
  * package in an app and run the commands its users run.
6
6
  */
7
7
 
@@ -63,11 +63,11 @@ export const docs = {
63
63
  ],
64
64
  [
65
65
  '`template --list --package`',
66
- 'An `acme-dashboard` entry with `package: @acme/astryx-widgets`',
66
+ 'An `acme-dashboard` entry whose `package` is `@acme/astryx-widgets`',
67
67
  ],
68
68
  [
69
69
  '`theme list --package`',
70
- '`- ocean (maintained, @acme/astryx-widgets)`',
70
+ 'An `ocean` entry whose `package` is `@acme/astryx-widgets`',
71
71
  ],
72
72
  ['`docs acme`', 'Your section, with guides such as `deploying`'],
73
73
  [
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file `astryx docs cli/integrations/templates/build-the-template/package-and-test/test-template-in-app`:
4
+ * @file `astryx docs cli/integrations/building-blocks/templates/build-the-template/package-and-test/test-template-in-app`:
5
5
  * copy the packed template into a clean app, build it, and render it the way
6
6
  * apps will.
7
7
  */
@@ -15,13 +15,7 @@ export const docs = {
15
15
  category: 'guide',
16
16
  description:
17
17
  'Using design tokens in custom styles and configuring a StyleX compiler for swizzled components.',
18
- keywords: [
19
- 'StyleX setup',
20
- 'swizzle',
21
- 'webpack',
22
- 'Vite',
23
- 'Next.js',
24
- ],
18
+ keywords: ['StyleX setup', 'swizzle', 'webpack', 'Vite', 'Next.js'],
25
19
 
26
20
  sections: [
27
21
  {
@@ -77,30 +71,40 @@ const styles = stylex.create({
77
71
  content: [
78
72
  {
79
73
  type: 'prose',
80
- text: 'Astryx components ship pre-compiled: `astryx.css` and each package\'s own stylesheet hold all of their styles, so consuming the published packages needs no StyleX setup. But `astryx swizzle <Component>` copies the raw StyleX *source* into your app, and StyleX source requires a build-time StyleX compiler to produce atomic CSS. Without one the component compiles but renders completely unstyled: no error, no warning. If a swizzled component looks unstyled, a missing StyleX compiler is almost always why. The same applies if you author your own StyleX with `stylex.create()`.',
74
+ text: "Astryx components ship pre-compiled: `astryx.css` and each package's own stylesheet hold all of their styles, so consuming the published packages needs no StyleX setup. But `astryx swizzle <Component>` copies the raw StyleX *source* into your app, and StyleX source requires a build-time StyleX compiler to produce atomic CSS. Without one, importing the component throws an error that starts `Unexpected 'stylex.create' call at runtime`, and the page does not render. If a swizzled component throws that error, the app is missing a StyleX compiler. The same applies if you author your own StyleX with `stylex.create()`.",
81
75
  },
82
76
  {
83
77
  type: 'table',
84
78
  headers: ['Bundler', 'StyleX plugin'],
85
79
  rows: [
86
80
  ['Webpack', '@stylexjs/webpack-plugin'],
87
- ['Vite / Rollup', '@stylexjs/rollup-plugin (or a community Vite plugin)'],
88
- ['Babel (any bundler)', '@stylexjs/babel-plugin + @stylexjs/postcss-plugin'],
89
- ['Next.js (App Router, SWC)', 'An SWC-based transform; see the Next.js note below'],
81
+ [
82
+ 'Vite / Rollup',
83
+ '@stylexjs/rollup-plugin (or a community Vite plugin)',
84
+ ],
85
+ [
86
+ 'Babel (any bundler)',
87
+ '@stylexjs/babel-plugin + @stylexjs/postcss-plugin',
88
+ ],
89
+ [
90
+ 'Next.js (App Router, SWC)',
91
+ 'An SWC-based transform; see the Next.js note below',
92
+ ],
90
93
  ],
91
94
  },
92
95
  {
93
96
  type: 'prose',
94
- text: 'Next.js (App Router) is the sharp edge. StyleX\'s canonical compiler is a Babel plugin, but introducing a Babel config in Next.js disables the SWC compiler, and with it SWC-dependent features like `next/font`.',
97
+ text: "Next.js (App Router) is the sharp edge. StyleX's canonical compiler is a Babel plugin, but introducing a Babel config in Next.js disables the SWC compiler, and with it SWC-dependent features like `next/font`.",
95
98
  },
96
99
  {
97
100
  type: 'prose',
98
- text: 'The repo\'s `apps/example-nextjs-stylex` takes the Babel path (`next/babel`, `@stylexjs/babel-plugin`, `@stylexjs/postcss-plugin`). Babel turns off SWC, so that app does not use `next/font`. To keep `next/font`, use an SWC transform such as `@stylexswc/nextjs-plugin`.',
101
+ text: "The repo's `apps/example-nextjs-stylex` takes the Babel path (`next/babel`, `@stylexjs/babel-plugin`, `@stylexjs/postcss-plugin`). Babel turns off SWC, so that app does not use `next/font`. To keep `next/font`, use an SWC transform such as `@stylexswc/nextjs-plugin`.",
99
102
  },
100
103
  {
101
104
  type: 'code',
102
105
  lang: 'js',
103
- label: 'next.config.mjs: SWC-based StyleX transform (keeps next/font working)',
106
+ label:
107
+ 'next.config.mjs: SWC-based StyleX transform (keeps next/font working)',
104
108
  code: `import stylexPlugin from '@stylexswc/nextjs-plugin';
105
109
 
106
110
  export default stylexPlugin({
@@ -117,7 +121,7 @@ export default stylexPlugin({
117
121
  type: 'list',
118
122
  style: 'unordered',
119
123
  items: [
120
- 'Symptom of a missing compiler: swizzled component renders with no styles, but no build or runtime error.',
124
+ "Symptom of a missing compiler: importing a swizzled component throws an error that starts `Unexpected 'stylex.create' call at runtime`, and the page does not render.",
121
125
  'A Babel config turns off SWC in Next.js; skip it if you need `next/font`.',
122
126
  'Pure theming (defineTheme + astryx theme build) needs NO StyleX compiler; only swizzled/authored StyleX source does.',
123
127
  'Keep loading `astryx.css` with a StyleX compiler in place. The compiler builds your own and swizzled source only; never add `node_modules/@astryxdesign` to its inputs.',