@adaptabletools/adaptable-mcp 0.1.0-canary.0 → 0.1.0-canary.2

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 (348) hide show
  1. package/README.md +58 -61
  2. package/data/changes/21-22.json +542 -0
  3. package/data/changes/22-23.json +639 -0
  4. package/data/changes/23-24.json +1874 -0
  5. package/data/manifest.snapshot.json +202 -0
  6. package/data/templates/angular/src/app/adaptableOptions.ts +40 -0
  7. package/data/templates/angular/src/app/agGridModules.ts +7 -0
  8. package/data/templates/angular/src/app/app.component.ts +66 -0
  9. package/data/templates/angular/src/app/app.module.ts +14 -0
  10. package/data/templates/angular/src/app/columnDefs.ts +121 -0
  11. package/data/templates/angular/src/app/gridOptions.ts +32 -0
  12. package/data/templates/angular/src/app/onAdaptableReady.ts +11 -0
  13. package/data/templates/angular/src/app/rowData.ts +851 -0
  14. package/data/templates/angular/src/app/styles.css +50 -0
  15. package/data/templates/angular/src/index.html +17 -0
  16. package/data/templates/angular/src/main.ts +18 -0
  17. package/data/templates/angular/src/polyfills.ts +1 -0
  18. package/data/templates/angular/tsconfig.json +16 -0
  19. package/data/templates/manifest.json +406 -0
  20. package/data/templates/react/src/App.tsx +71 -0
  21. package/data/templates/react/src/adaptableOptions.ts +40 -0
  22. package/data/templates/react/src/agGridModules.ts +7 -0
  23. package/data/templates/react/src/columnDefs.ts +121 -0
  24. package/data/templates/react/src/gridOptions.ts +32 -0
  25. package/data/templates/react/src/index.tsx +8 -0
  26. package/data/templates/react/src/onAdaptableReady.ts +11 -0
  27. package/data/templates/react/src/rowData.ts +851 -0
  28. package/data/templates/react/src/styles.css +50 -0
  29. package/data/templates/react/tsconfig.json +9 -0
  30. package/data/templates/vanilla/index.html +18 -0
  31. package/data/templates/vanilla/src/adaptableOptions.ts +40 -0
  32. package/data/templates/vanilla/src/agGridModules.ts +7 -0
  33. package/data/templates/vanilla/src/columnDefs.ts +121 -0
  34. package/data/templates/vanilla/src/gridOptions.ts +32 -0
  35. package/data/templates/vanilla/src/index.ts +41 -0
  36. package/data/templates/vanilla/src/onAdaptableReady.ts +11 -0
  37. package/data/templates/vanilla/src/rowData.ts +851 -0
  38. package/data/templates/vanilla/src/styles.css +50 -0
  39. package/data/templates/vanilla/tsconfig.json +14 -0
  40. package/data/templates/vue/.babelrc +3 -0
  41. package/data/templates/vue/public/index.html +19 -0
  42. package/data/templates/vue/src/App.vue +35 -0
  43. package/data/templates/vue/src/adaptableOptions.ts +40 -0
  44. package/data/templates/vue/src/agGridModules.ts +7 -0
  45. package/data/templates/vue/src/columnDefs.ts +121 -0
  46. package/data/templates/vue/src/gridOptions.ts +32 -0
  47. package/data/templates/vue/src/main.ts +6 -0
  48. package/data/templates/vue/src/onAdaptableReady.ts +11 -0
  49. package/data/templates/vue/src/rowData.ts +851 -0
  50. package/data/templates/vue/src/shims-vue.d.ts +6 -0
  51. package/data/templates/vue/src/styles.css +50 -0
  52. package/data/templates/vue/tsconfig.json +30 -0
  53. package/dist/bin.js +23 -0
  54. package/dist/bin.js.map +1 -0
  55. package/dist/cli/build-commands.js +200 -0
  56. package/dist/cli/build-commands.js.map +1 -0
  57. package/dist/cli/index.js +94 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/render.js +57 -0
  60. package/dist/cli/render.js.map +1 -0
  61. package/dist/core/anonymise/anonymise.js +315 -0
  62. package/dist/core/anonymise/anonymise.js.map +1 -0
  63. package/dist/core/anonymise/capabilities.js +94 -0
  64. package/dist/core/anonymise/capabilities.js.map +1 -0
  65. package/dist/core/aql/capabilities.js +339 -0
  66. package/dist/core/aql/capabilities.js.map +1 -0
  67. package/dist/core/aql/check.js +204 -0
  68. package/dist/core/aql/check.js.map +1 -0
  69. package/dist/core/aql/engine.js +92 -0
  70. package/dist/core/aql/engine.js.map +1 -0
  71. package/dist/core/aql/functions.js +108 -0
  72. package/dist/core/aql/functions.js.map +1 -0
  73. package/dist/core/aql/migrate.js +62 -0
  74. package/dist/core/aql/migrate.js.map +1 -0
  75. package/dist/core/capabilities.js +105 -0
  76. package/dist/core/capabilities.js.map +1 -0
  77. package/dist/core/changes/capabilities.js +92 -0
  78. package/dist/core/changes/capabilities.js.map +1 -0
  79. package/dist/core/changes/changes.js +101 -0
  80. package/dist/core/changes/changes.js.map +1 -0
  81. package/dist/core/changes/grep.js +183 -0
  82. package/dist/core/changes/grep.js.map +1 -0
  83. package/dist/core/changes/records.js +172 -0
  84. package/dist/core/changes/records.js.map +1 -0
  85. package/dist/core/changes/render-md.js +101 -0
  86. package/dist/core/changes/render-md.js.map +1 -0
  87. package/dist/core/changes/with-docs.js +86 -0
  88. package/dist/core/changes/with-docs.js.map +1 -0
  89. package/dist/core/compat/capabilities.js +127 -0
  90. package/dist/core/compat/capabilities.js.map +1 -0
  91. package/dist/core/compat/manifest.js +203 -0
  92. package/dist/core/compat/manifest.js.map +1 -0
  93. package/dist/core/constants.js +38 -0
  94. package/dist/core/constants.js.map +1 -0
  95. package/dist/core/context/capabilities.js +106 -0
  96. package/dist/core/context/capabilities.js.map +1 -0
  97. package/dist/core/context/detect.js +370 -0
  98. package/dist/core/context/detect.js.map +1 -0
  99. package/dist/core/context/projects.js +159 -0
  100. package/dist/core/context/projects.js.map +1 -0
  101. package/dist/core/context/resolve.js +85 -0
  102. package/dist/core/context/resolve.js.map +1 -0
  103. package/dist/core/convert/capabilities.js +86 -0
  104. package/dist/core/convert/capabilities.js.map +1 -0
  105. package/dist/core/convert/coldefs.js +313 -0
  106. package/dist/core/convert/coldefs.js.map +1 -0
  107. package/dist/core/docs/areas.js +22 -0
  108. package/dist/core/docs/areas.js.map +1 -0
  109. package/dist/core/docs/cache.js +133 -0
  110. package/dist/core/docs/cache.js.map +1 -0
  111. package/dist/core/docs/capabilities.js +377 -0
  112. package/dist/core/docs/capabilities.js.map +1 -0
  113. package/dist/core/docs/corpus.js.map +1 -0
  114. package/dist/core/docs/demos.js +105 -0
  115. package/dist/core/docs/demos.js.map +1 -0
  116. package/dist/core/docs/get-page.js +182 -0
  117. package/dist/core/docs/get-page.js.map +1 -0
  118. package/dist/core/docs/hosts.js +74 -0
  119. package/dist/core/docs/hosts.js.map +1 -0
  120. package/dist/core/docs/search.js.map +1 -0
  121. package/dist/core/envelope.js +79 -0
  122. package/dist/core/envelope.js.map +1 -0
  123. package/dist/core/extract/imports.js +163 -0
  124. package/dist/core/extract/imports.js.map +1 -0
  125. package/dist/core/extract/input.js +140 -0
  126. package/dist/core/extract/input.js.map +1 -0
  127. package/dist/core/extract/line-map.js +90 -0
  128. package/dist/core/extract/line-map.js.map +1 -0
  129. package/dist/core/extract/ts-literal.js +963 -0
  130. package/dist/core/extract/ts-literal.js.map +1 -0
  131. package/dist/core/index.js +13 -0
  132. package/dist/core/index.js.map +1 -0
  133. package/dist/core/migrate/capabilities.js +143 -0
  134. package/dist/core/migrate/capabilities.js.map +1 -0
  135. package/dist/core/migrate/leftovers.js +119 -0
  136. package/dist/core/migrate/leftovers.js.map +1 -0
  137. package/dist/core/migrate/state.js +295 -0
  138. package/dist/core/migrate/state.js.map +1 -0
  139. package/dist/core/packages/cache.js +139 -0
  140. package/dist/core/packages/cache.js.map +1 -0
  141. package/dist/core/packages/capabilities.js +95 -0
  142. package/dist/core/packages/capabilities.js.map +1 -0
  143. package/dist/{adaptable/types.js → core/packages/entry-types.js} +1 -1
  144. package/dist/core/packages/entry-types.js.map +1 -0
  145. package/dist/core/packages/exec.js +37 -0
  146. package/dist/core/packages/exec.js.map +1 -0
  147. package/dist/core/packages/load-entry.js +123 -0
  148. package/dist/core/packages/load-entry.js.map +1 -0
  149. package/dist/core/packages/prepare.js +122 -0
  150. package/dist/core/packages/prepare.js.map +1 -0
  151. package/dist/core/packages/registry.js +75 -0
  152. package/dist/core/packages/registry.js.map +1 -0
  153. package/dist/core/packages/resolve.js +94 -0
  154. package/dist/core/packages/resolve.js.map +1 -0
  155. package/dist/core/packages/versions.js +71 -0
  156. package/dist/core/packages/versions.js.map +1 -0
  157. package/dist/core/ping.js +22 -0
  158. package/dist/core/ping.js.map +1 -0
  159. package/dist/core/register.js +18 -0
  160. package/dist/core/register.js.map +1 -0
  161. package/dist/core/scaffold/capabilities.js +434 -0
  162. package/dist/core/scaffold/capabilities.js.map +1 -0
  163. package/dist/core/scaffold/generate.js +409 -0
  164. package/dist/core/scaffold/generate.js.map +1 -0
  165. package/dist/core/scaffold/infer.js +441 -0
  166. package/dist/core/scaffold/infer.js.map +1 -0
  167. package/dist/core/scaffold/overlay.js +290 -0
  168. package/dist/core/scaffold/overlay.js.map +1 -0
  169. package/dist/core/scaffold/readers/csv.js +146 -0
  170. package/dist/core/scaffold/readers/csv.js.map +1 -0
  171. package/dist/core/scaffold/readers/dataset.js +53 -0
  172. package/dist/core/scaffold/readers/dataset.js.map +1 -0
  173. package/dist/core/scaffold/readers/index.js +62 -0
  174. package/dist/core/scaffold/readers/index.js.map +1 -0
  175. package/dist/core/scaffold/readers/json.js +101 -0
  176. package/dist/core/scaffold/readers/json.js.map +1 -0
  177. package/dist/core/scaffold/readers/xlsx.js +81 -0
  178. package/dist/core/scaffold/readers/xlsx.js.map +1 -0
  179. package/dist/core/scaffold/suggestions.js +57 -0
  180. package/dist/core/scaffold/suggestions.js.map +1 -0
  181. package/dist/core/scaffold/templates.js +59 -0
  182. package/dist/core/scaffold/templates.js.map +1 -0
  183. package/dist/core/setup/audit.js +91 -0
  184. package/dist/core/setup/audit.js.map +1 -0
  185. package/dist/core/setup/capabilities.js +80 -0
  186. package/dist/core/setup/capabilities.js.map +1 -0
  187. package/dist/core/setup/context.js +118 -0
  188. package/dist/core/setup/context.js.map +1 -0
  189. package/dist/core/setup/rules/cell-data-type.js +40 -0
  190. package/dist/core/setup/rules/cell-data-type.js.map +1 -0
  191. package/dist/core/setup/rules/coldef-ownership.js +67 -0
  192. package/dist/core/setup/rules/coldef-ownership.js.map +1 -0
  193. package/dist/core/setup/rules/css-import.js +34 -0
  194. package/dist/core/setup/rules/css-import.js.map +1 -0
  195. package/dist/core/setup/rules/direct-grid.js +42 -0
  196. package/dist/core/setup/rules/direct-grid.js.map +1 -0
  197. package/dist/core/setup/rules/index.js +53 -0
  198. package/dist/core/setup/rules/index.js.map +1 -0
  199. package/dist/core/setup/rules/licence-literal.js +23 -0
  200. package/dist/core/setup/rules/licence-literal.js.map +1 -0
  201. package/dist/core/setup/rules/modules.js +86 -0
  202. package/dist/core/setup/rules/modules.js.map +1 -0
  203. package/dist/core/setup/rules/react-stable-refs.js +20 -0
  204. package/dist/core/setup/rules/react-stable-refs.js.map +1 -0
  205. package/dist/core/setup/rules/ready-hook.js +33 -0
  206. package/dist/core/setup/rules/ready-hook.js.map +1 -0
  207. package/dist/core/setup/rules/required-options.js +43 -0
  208. package/dist/core/setup/rules/required-options.js.map +1 -0
  209. package/dist/core/setup/rules/rule.js +10 -0
  210. package/dist/core/setup/rules/rule.js.map +1 -0
  211. package/dist/core/setup/rules/version-skew.js +65 -0
  212. package/dist/core/setup/rules/version-skew.js.map +1 -0
  213. package/dist/core/state/capabilities.js +78 -0
  214. package/dist/core/state/capabilities.js.map +1 -0
  215. package/dist/core/state/check.js +216 -0
  216. package/dist/core/state/check.js.map +1 -0
  217. package/dist/core/state/columns.js +130 -0
  218. package/dist/core/state/columns.js.map +1 -0
  219. package/dist/core/state/did-you-mean.js +83 -0
  220. package/dist/core/state/did-you-mean.js.map +1 -0
  221. package/dist/core/state/expressions.js +170 -0
  222. package/dist/core/state/expressions.js.map +1 -0
  223. package/dist/core/state/known-names.js +96 -0
  224. package/dist/core/state/known-names.js.map +1 -0
  225. package/dist/core/state/rules/aql-legacy-shape.js +42 -0
  226. package/dist/core/state/rules/aql-legacy-shape.js.map +1 -0
  227. package/dist/core/state/rules/aql-missing.js +21 -0
  228. package/dist/core/state/rules/aql-missing.js.map +1 -0
  229. package/dist/core/state/rules/aql-syntax.js +77 -0
  230. package/dist/core/state/rules/aql-syntax.js.map +1 -0
  231. package/dist/core/state/rules/calculated-settings.js +23 -0
  232. package/dist/core/state/rules/calculated-settings.js.map +1 -0
  233. package/dist/core/state/rules/column-id-exists.js +29 -0
  234. package/dist/core/state/rules/column-id-exists.js.map +1 -0
  235. package/dist/core/state/rules/dashboard-module-names.js +31 -0
  236. package/dist/core/state/rules/dashboard-module-names.js.map +1 -0
  237. package/dist/core/state/rules/dashboard-toolbar-names.js +48 -0
  238. package/dist/core/state/rules/dashboard-toolbar-names.js.map +1 -0
  239. package/dist/core/state/rules/format-column-pivot-display-format.js +43 -0
  240. package/dist/core/state/rules/format-column-pivot-display-format.js.map +1 -0
  241. package/dist/core/state/rules/helpers.js +39 -0
  242. package/dist/core/state/rules/helpers.js.map +1 -0
  243. package/dist/core/state/rules/index.js +80 -0
  244. package/dist/core/state/rules/index.js.map +1 -0
  245. package/dist/core/state/rules/layout-column-refs.js +60 -0
  246. package/dist/core/state/rules/layout-column-refs.js.map +1 -0
  247. package/dist/core/state/rules/layout-current-exists.js +27 -0
  248. package/dist/core/state/rules/layout-current-exists.js.map +1 -0
  249. package/dist/core/state/rules/layout-non-empty.js +32 -0
  250. package/dist/core/state/rules/layout-non-empty.js.map +1 -0
  251. package/dist/core/state/rules/rule.js +2 -0
  252. package/dist/core/state/rules/rule.js.map +1 -0
  253. package/dist/core/state/rules/scope-column-refs.js +32 -0
  254. package/dist/core/state/rules/scope-column-refs.js.map +1 -0
  255. package/dist/core/state/rules/scope-shape.js +61 -0
  256. package/dist/core/state/rules/scope-shape.js.map +1 -0
  257. package/dist/core/state/rules/state-unique-name.js +40 -0
  258. package/dist/core/state/rules/state-unique-name.js.map +1 -0
  259. package/dist/core/state/rules/state-unknown-section.js +30 -0
  260. package/dist/core/state/rules/state-unknown-section.js.map +1 -0
  261. package/dist/core/state/rules/type-discriminator.js +70 -0
  262. package/dist/core/state/rules/type-discriminator.js.map +1 -0
  263. package/dist/core/state/type-check.js +408 -0
  264. package/dist/core/state/type-check.js.map +1 -0
  265. package/dist/mcp/index.js +109 -0
  266. package/dist/mcp/index.js.map +1 -0
  267. package/dist/mcp/server.js +110 -0
  268. package/dist/mcp/server.js.map +1 -0
  269. package/dist/skills/adaptable-debug/SKILL.md +145 -0
  270. package/dist/skills/adaptable-debug/VERSION.md +1 -0
  271. package/dist/skills/adaptable-debug/references/_shared/agents-snippet.md +3 -0
  272. package/dist/skills/adaptable-debug/references/_shared/capabilities.md +35 -0
  273. package/dist/skills/adaptable-debug/references/_shared/conversation.md +20 -0
  274. package/dist/skills/adaptable-debug/references/_shared/docs-protocol.md +36 -0
  275. package/dist/skills/adaptable-debug/references/_shared/grounding.md +54 -0
  276. package/dist/skills/adaptable-debug/references/_shared/guards.md +20 -0
  277. package/dist/skills/adaptable-debug/references/_shared/validation-loop.md +42 -0
  278. package/dist/skills/adaptable-debug/references/devtools-api.md +36 -0
  279. package/dist/skills/adaptable-debug/references/feedback-template.md +36 -0
  280. package/dist/skills/adaptable-debug/references/symptoms.md +37 -0
  281. package/dist/skills/adaptable-debug/references/ticket-template.md +50 -0
  282. package/dist/skills/adaptable-dev/SKILL.md +97 -0
  283. package/dist/skills/adaptable-dev/VERSION.md +1 -0
  284. package/dist/skills/adaptable-dev/references/_shared/agents-snippet.md +3 -0
  285. package/dist/skills/adaptable-dev/references/_shared/capabilities.md +35 -0
  286. package/dist/skills/adaptable-dev/references/_shared/conversation.md +20 -0
  287. package/dist/skills/adaptable-dev/references/_shared/docs-protocol.md +36 -0
  288. package/dist/skills/adaptable-dev/references/_shared/grounding.md +54 -0
  289. package/dist/skills/adaptable-dev/references/_shared/guards.md +20 -0
  290. package/dist/skills/adaptable-dev/references/_shared/validation-loop.md +42 -0
  291. package/dist/skills/adaptable-dev/references/recommendations.md +93 -0
  292. package/dist/skills/adaptable-setup/SKILL.md +158 -0
  293. package/dist/skills/adaptable-setup/VERSION.md +1 -0
  294. package/dist/skills/adaptable-setup/references/_shared/agents-snippet.md +3 -0
  295. package/dist/skills/adaptable-setup/references/_shared/capabilities.md +35 -0
  296. package/dist/skills/adaptable-setup/references/_shared/conversation.md +20 -0
  297. package/dist/skills/adaptable-setup/references/_shared/docs-protocol.md +36 -0
  298. package/dist/skills/adaptable-setup/references/_shared/grounding.md +54 -0
  299. package/dist/skills/adaptable-setup/references/_shared/guards.md +20 -0
  300. package/dist/skills/adaptable-setup/references/_shared/validation-loop.md +42 -0
  301. package/dist/skills/adaptable-setup/references/paths.md +45 -0
  302. package/dist/skills/adaptable-upgrade/SKILL.md +269 -0
  303. package/dist/skills/adaptable-upgrade/VERSION.md +1 -0
  304. package/dist/skills/adaptable-upgrade/references/_shared/agents-snippet.md +3 -0
  305. package/dist/skills/adaptable-upgrade/references/_shared/capabilities.md +35 -0
  306. package/dist/skills/adaptable-upgrade/references/_shared/conversation.md +20 -0
  307. package/dist/skills/adaptable-upgrade/references/_shared/docs-protocol.md +36 -0
  308. package/dist/skills/adaptable-upgrade/references/_shared/grounding.md +54 -0
  309. package/dist/skills/adaptable-upgrade/references/_shared/guards.md +20 -0
  310. package/dist/skills/adaptable-upgrade/references/_shared/validation-loop.md +42 -0
  311. package/dist/skills/adaptable-upgrade/references/apply-order.md +171 -0
  312. package/dist/skills/adaptable-upgrade/references/plan-preamble.md +151 -0
  313. package/dist/skills/adaptable-upgrade/scripts/adaptable.mjs +24 -0
  314. package/package.json +34 -13
  315. package/dist/adaptable/loadEntry.js +0 -94
  316. package/dist/adaptable/loadEntry.js.map +0 -1
  317. package/dist/adaptable/types.js.map +0 -1
  318. package/dist/cache.js +0 -11
  319. package/dist/cache.js.map +0 -1
  320. package/dist/checks/stateRules.js +0 -389
  321. package/dist/checks/stateRules.js.map +0 -1
  322. package/dist/checks/stateTypes.js +0 -142
  323. package/dist/checks/stateTypes.js.map +0 -1
  324. package/dist/context.js +0 -39
  325. package/dist/context.js.map +0 -1
  326. package/dist/docs/corpus.js.map +0 -1
  327. package/dist/docs/search.js.map +0 -1
  328. package/dist/docs/source.js +0 -151
  329. package/dist/docs/source.js.map +0 -1
  330. package/dist/environment.js +0 -181
  331. package/dist/environment.js.map +0 -1
  332. package/dist/index.js +0 -7
  333. package/dist/index.js.map +0 -1
  334. package/dist/prompts.js +0 -84
  335. package/dist/prompts.js.map +0 -1
  336. package/dist/resources.js +0 -59
  337. package/dist/resources.js.map +0 -1
  338. package/dist/server.js +0 -23
  339. package/dist/server.js.map +0 -1
  340. package/dist/tools/checks.js +0 -250
  341. package/dist/tools/checks.js.map +0 -1
  342. package/dist/tools/docs.js +0 -173
  343. package/dist/tools/docs.js.map +0 -1
  344. package/dist/tools/environment.js +0 -52
  345. package/dist/tools/environment.js.map +0 -1
  346. package/skills/adaptable-dev/SKILL.md +0 -42
  347. /package/dist/{docs → core/docs}/corpus.js +0 -0
  348. /package/dist/{docs → core/docs}/search.js +0 -0
@@ -0,0 +1,182 @@
1
+ /** Accepts a slug, a route path or a docs URL (with or without `.md` / `/index.md`) */
2
+ export function findPage(corpus, page) {
3
+ const routePath = page
4
+ .trim()
5
+ .replace(/^https?:\/\/[^/]+/, '')
6
+ .replace(/[?#].*$/, '')
7
+ .replace(/\/index\.md$|\.md$/, '')
8
+ .replace(/\/+$/, '');
9
+ const candidates = /^\/(docs|support)(\/|$)/.test(routePath)
10
+ ? [routePath]
11
+ : [`/docs/${routePath}`, `/docs/reference/${routePath.toLowerCase()}`, `/support/${routePath}`];
12
+ for (const candidate of candidates) {
13
+ const found = corpus.pages.get(candidate) ?? corpus.pages.get(candidate.toLowerCase());
14
+ if (found) {
15
+ return found;
16
+ }
17
+ }
18
+ return undefined;
19
+ }
20
+ /** The slug skills use: the route path without `/docs/` (`/support/...` keeps its prefix) */
21
+ export const slugOf = (routePath) => routePath.replace(/^\/docs\//, '');
22
+ /**
23
+ * Closest slugs for a request that matched no page: slugs or titles sharing
24
+ * words with the request, then the search index's best sections.
25
+ */
26
+ export function suggestSlugs(corpus, request, limit = 5) {
27
+ const words = request
28
+ .toLowerCase()
29
+ .replace(/^https?:\/\/[^/]+/, '')
30
+ .split(/[^a-z0-9]+/)
31
+ .filter((w) => w.length >= 3 && w !== 'docs');
32
+ const scored = [];
33
+ for (const page of corpus.pages.values()) {
34
+ const slug = slugOf(page.routePath);
35
+ const haystack = `${slug} ${page.title}`.toLowerCase();
36
+ let score = 0;
37
+ for (const word of words) {
38
+ if (haystack.includes(word)) {
39
+ score += word.length;
40
+ }
41
+ else if (word.length >= 5 && haystack.includes(word.slice(0, -1))) {
42
+ score += word.length - 2; // one trailing character off (`layoutz`)
43
+ }
44
+ }
45
+ if (score > 0) {
46
+ scored.push({ slug, score });
47
+ }
48
+ }
49
+ const bySlug = scored.sort((a, b) => b.score - a.score || a.slug.localeCompare(b.slug)).map((s) => s.slug);
50
+ const byIndex = corpus.index.search(words.join(' '), { limit }).map((h) => slugOf(h.section.routePath));
51
+ return [...new Set([...bySlug, ...byIndex])].slice(0, limit);
52
+ }
53
+ const FENCE = /^\s*(```|~~~)/;
54
+ const HEADING = /^(#{1,6})\s+(.+?)\s*#*\s*$/;
55
+ function parseLines(markdown) {
56
+ let inFence = false;
57
+ return markdown.split('\n').map((text) => {
58
+ if (FENCE.test(text)) {
59
+ inFence = !inFence;
60
+ return { text };
61
+ }
62
+ if (inFence) {
63
+ return { text };
64
+ }
65
+ const match = text.match(HEADING);
66
+ return match ? { text, level: match[1].length, heading: match[2] } : { text };
67
+ });
68
+ }
69
+ /** The section under the first heading containing `heading` (case-insensitive), up to the next heading of the same or a higher level */
70
+ export function extractHeading(markdown, heading) {
71
+ const lines = parseLines(markdown);
72
+ const target = heading.trim().toLowerCase();
73
+ let start = -1;
74
+ let level = 0;
75
+ for (let i = 0; i < lines.length; i++) {
76
+ const line = lines[i];
77
+ if (line.level === undefined) {
78
+ continue;
79
+ }
80
+ if (start < 0 && line.heading.toLowerCase().includes(target)) {
81
+ start = i;
82
+ level = line.level;
83
+ }
84
+ else if (start >= 0 && line.level <= level) {
85
+ return lines
86
+ .slice(start, i)
87
+ .map((l) => l.text)
88
+ .join('\n')
89
+ .trimEnd();
90
+ }
91
+ }
92
+ return start >= 0
93
+ ? lines
94
+ .slice(start)
95
+ .map((l) => l.text)
96
+ .join('\n')
97
+ .trimEnd()
98
+ : undefined;
99
+ }
100
+ /** The page's `##`–`####` headings, skipping code fences */
101
+ export function outline(markdown) {
102
+ return parseLines(markdown)
103
+ .filter((l) => l.level !== undefined && l.level >= 2 && l.level <= 4)
104
+ .map((l) => l.text);
105
+ }
106
+ /** Rough token count (≈ 4 characters per token) */
107
+ export const estimateTokens = (text) => Math.ceil(text.length / 4);
108
+ const DEMO_START = /^Demo project \(([^)]+)\);?/;
109
+ /**
110
+ * Replaces every embedded demo (the "Demo project (…)" paragraph, its file tree and
111
+ * the per-file code blocks, up to the next heading) with one line naming the demo's
112
+ * own files, so a page costs a fraction of its tokens; `docs demo` returns the code.
113
+ */
114
+ export function trimDemos(markdown) {
115
+ const lines = parseLines(markdown);
116
+ const out = [];
117
+ let trimmed = 0;
118
+ for (let i = 0; i < lines.length; i++) {
119
+ const start = lines[i].text.match(DEMO_START);
120
+ if (!start) {
121
+ out.push(lines[i].text);
122
+ continue;
123
+ }
124
+ // collect until the next heading
125
+ let end = i + 1;
126
+ while (end < lines.length && lines[end].level === undefined) {
127
+ end++;
128
+ }
129
+ const block = lines.slice(i, end).map((l) => l.text);
130
+ // the demo's own files are the ones whose code follows, introduced as **`src/file.ts`**
131
+ const files = block.map((l) => l.match(/^\*\*`([^`]+)`\*\*\s*$/)?.[1]).filter((f) => !!f);
132
+ const names = files.length ? files.join(', ') : 'its files';
133
+ out.push(`_Demo project (${start[1]}): ${names} — run \`adaptable docs demo <name>\` for the code, or \`docs get --full\` to inline it._`);
134
+ trimmed++;
135
+ // keep a blank line before the next heading
136
+ out.push('');
137
+ i = end - 1;
138
+ }
139
+ return { markdown: out.join('\n').replace(/\n{3,}/g, '\n\n'), trimmed };
140
+ }
141
+ /**
142
+ * Cuts the Markdown at a heading boundary: whole sections (a heading and the text
143
+ * up to the next heading) are kept while the running total stays within
144
+ * `maxTokens`; the preamble before the first heading is always kept. The headings
145
+ * of the dropped sections are listed in `omitted` so `--section` can fetch one.
146
+ */
147
+ export function truncateAtHeadings(markdown, maxTokens) {
148
+ if (estimateTokens(markdown) <= maxTokens) {
149
+ return { markdown, truncated: false, omitted: [] };
150
+ }
151
+ const lines = parseLines(markdown);
152
+ const sections = [];
153
+ let current = { lines: [] };
154
+ for (const line of lines) {
155
+ if (line.level !== undefined && (current.lines.length || current.heading)) {
156
+ sections.push({ heading: current.heading, text: current.lines.join('\n') });
157
+ current = { heading: line, lines: [line.text] };
158
+ }
159
+ else {
160
+ current.lines.push(line.text);
161
+ }
162
+ }
163
+ sections.push({ heading: current.heading, text: current.lines.join('\n') });
164
+ const kept = [];
165
+ const omitted = [];
166
+ let tokens = 0;
167
+ let cutting = false;
168
+ sections.forEach((section, index) => {
169
+ const cost = estimateTokens(section.text) + 1;
170
+ if (index > 0 && (cutting || tokens + cost > maxTokens)) {
171
+ cutting = true;
172
+ if (section.heading && section.heading.level <= 3) {
173
+ omitted.push(section.heading.text);
174
+ }
175
+ return;
176
+ }
177
+ kept.push(section.text);
178
+ tokens += cost;
179
+ });
180
+ return { markdown: kept.join('\n').trimEnd(), truncated: true, omitted };
181
+ }
182
+ //# sourceMappingURL=get-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page.js","sourceRoot":"","sources":["../../../src/core/docs/get-page.ts"],"names":[],"mappings":"AAOA,uFAAuF;AACvF,MAAM,UAAU,QAAQ,CAAC,MAAiC,EAAE,IAAY;IACtE,MAAM,SAAS,GAAG,IAAI;SACnB,IAAI,EAAE;SACN,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvB,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1D,CAAC,CAAC,CAAC,SAAS,CAAC;QACb,CAAC,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,mBAAmB,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC;IAClG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAExF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA2C,EAAE,OAAe,EAAE,KAAK,GAAG,CAAC;IAClG,MAAM,KAAK,GAAG,OAAO;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,KAAK,CAAC,YAAY,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAsC,EAAE,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yCAAyC;YACrE,CAAC;QACH,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,KAAK,GAAG,eAAe,CAAC;AAC9B,MAAM,OAAO,GAAG,4BAA4B,CAAC;AAS7C,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACvC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wIAAwI;AACxI,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,KAAK,GAAG,CAAC,CAAC;YACV,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;YAC7C,OAAO,KAAK;iBACT,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC;iBACV,OAAO,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,IAAI,CAAC;QACf,CAAC,CAAC,KAAK;aACF,KAAK,CAAC,KAAK,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC;aACV,OAAO,EAAE;QACd,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;SACpE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,GAAG,6BAA6B,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,iCAAiC;QACjC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,GAAG,EAAE,CAAC;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,wFAAwF;QACxF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5D,GAAG,CAAC,IAAI,CACN,kBAAkB,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,2FAA2F,CACjI,CAAC;QACF,OAAO,EAAE,CAAC;QACV,4CAA4C;QAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACd,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1E,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;IACpE,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAuC,EAAE,CAAC;IACxD,IAAI,OAAO,GAAwC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE5E,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,KAAM,IAAI,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Which docs host serves a major (plan §7.4): the override, the manifest's
3
+ * `docsHosts`, the current host for the current major, else the archived-host
4
+ * pattern. The host's own manifest is then fetched (§8.3 freshness) so the
5
+ * corpus loader knows which files to read.
6
+ */
7
+ import { fetchManifest, getManifestInfo, ManifestUnavailable, } from '../compat/manifest.js';
8
+ import { CURRENT_DOCS_HOST, DOCS_HOST_ENV } from '../constants.js';
9
+ import { CapabilityError } from '../envelope.js';
10
+ /**
11
+ * The docs host for a major: the override (`--docs-host` / `ADAPTABLE_MCP_DOCS_HOST`) when
12
+ * given; the manifest's `docsHosts` entry; the current host for the current (or an unknown)
13
+ * major; else the archived-host pattern.
14
+ */
15
+ export function docsHostFor(major, info = {}, override = process.env[DOCS_HOST_ENV]) {
16
+ if (override) {
17
+ return override.replace(/\/+$/, '');
18
+ }
19
+ if (major === undefined) {
20
+ return CURRENT_DOCS_HOST;
21
+ }
22
+ const mapped = info.docsHosts?.[String(major)];
23
+ if (mapped) {
24
+ return mapped.replace(/\/+$/, '');
25
+ }
26
+ if (info.latestMajor === undefined || major >= info.latestMajor) {
27
+ return CURRENT_DOCS_HOST;
28
+ }
29
+ return major >= 21 ? `https://v${major}.adaptabletools.com` : `https://v${major}.docs.adaptabletools.com`;
30
+ }
31
+ export function pageUrl(baseUrl, routePath, framework) {
32
+ return `${baseUrl}${routePath}${framework && framework !== 'vanilla' ? `?framework=${framework}` : ''}`;
33
+ }
34
+ export const docsNotAvailable = (host, reason) => new CapabilityError('DOCS_NOT_AVAILABLE', `${reason} (${host}).`, `Read the HTML documentation at ${host}/docs, pass --docs-host <url> for a host with machine-readable docs, or retry with network access.`);
35
+ /**
36
+ * Resolves the host for `major` and fetches that host's manifest. The current
37
+ * host's manifest is consulted first (for `docsHosts`) unless an override is given.
38
+ */
39
+ export async function resolveDocsSource(options = {}) {
40
+ const warnings = [];
41
+ const override = options.docsHost ?? process.env[DOCS_HOST_ENV];
42
+ let current;
43
+ if (!override) {
44
+ current = await getManifestInfo({ offline: options.offline, maxAgeMs: options.maxAgeMs });
45
+ }
46
+ const host = docsHostFor(options.major, current ? { latestMajor: current.latest.adaptableMajor, docsHosts: current.docsHosts } : {}, override);
47
+ const isCurrentHost = host === (current?.host ?? CURRENT_DOCS_HOST);
48
+ let fetched;
49
+ try {
50
+ fetched =
51
+ current && host === current.host
52
+ ? { manifest: current.manifest, source: current.source, warning: current.warning }
53
+ : await fetchManifest({
54
+ docsHost: host,
55
+ offline: options.offline,
56
+ maxAgeMs: options.maxAgeMs,
57
+ allowSnapshot: isCurrentHost,
58
+ });
59
+ }
60
+ catch (error) {
61
+ if (error instanceof ManifestUnavailable) {
62
+ throw docsNotAvailable(host, `No machine-readable docs could be read: ${error.message}`);
63
+ }
64
+ throw error;
65
+ }
66
+ if (fetched.warning) {
67
+ warnings.push(fetched.warning);
68
+ }
69
+ if (options.major !== undefined && fetched.manifest.major !== options.major) {
70
+ warnings.push(`The docs at ${host} are for AdapTable ${fetched.manifest.major}, not ${options.major}; pass --docs-host for a host that serves ${options.major}.`);
71
+ }
72
+ return { host, manifest: fetched.manifest, manifestSource: fetched.source, current, warnings };
73
+ }
74
+ //# sourceMappingURL=hosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../../src/core/docs/hosts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/core/docs/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ export const SCHEMA_VERSION = 1;
2
+ export const ERROR_CODES = [
3
+ 'USAGE',
4
+ 'NOT_FOUND',
5
+ 'NO_ADAPTABLE_DEPENDENCY',
6
+ 'MULTIPLE_PROJECTS',
7
+ 'VERSION_NOT_SUPPORTED',
8
+ 'UNSUPPORTED_FOR_MAJOR',
9
+ 'PACKAGE_REQUIRED',
10
+ 'DOCS_NOT_AVAILABLE',
11
+ 'INPUT_TOO_LARGE',
12
+ 'NETWORK_REQUIRED',
13
+ 'NOT_AVAILABLE_OVER_MCP',
14
+ 'NOT_AVAILABLE_REMOTELY',
15
+ 'EXTRACTION_FAILED',
16
+ 'RECORDS_INVALID',
17
+ ];
18
+ export function ok(data, extra = {}) {
19
+ return {
20
+ schemaVersion: SCHEMA_VERSION,
21
+ ok: true,
22
+ ...(extra.resolvedContext ? { resolvedContext: extra.resolvedContext } : {}),
23
+ warnings: extra.warnings ?? [],
24
+ issues: extra.issues ?? [],
25
+ data,
26
+ };
27
+ }
28
+ export function fail(code, message, hint, details) {
29
+ return {
30
+ schemaVersion: SCHEMA_VERSION,
31
+ ok: false,
32
+ error: { code, message, hint, ...(details ? { details } : {}) },
33
+ };
34
+ }
35
+ /** Thrown inside a capability (or context resolution); `runCapability` turns it into a failure envelope. */
36
+ export class CapabilityError extends Error {
37
+ code;
38
+ hint;
39
+ details;
40
+ constructor(code, message, hint, details) {
41
+ super(message);
42
+ this.name = 'CapabilityError';
43
+ this.code = code;
44
+ this.hint = hint;
45
+ this.details = details;
46
+ }
47
+ toEnvelope() {
48
+ return fail(this.code, this.message, this.hint, this.details);
49
+ }
50
+ }
51
+ export const EXIT_CODES = { ok: 0, findings: 1, usage: 2, environment: 3 };
52
+ /** Which exit class each error code belongs to (plan §7.1: 2 usage, 3 environment) */
53
+ export const ERROR_EXIT_CLASS = {
54
+ USAGE: 'usage',
55
+ NOT_FOUND: 'usage',
56
+ INPUT_TOO_LARGE: 'usage',
57
+ EXTRACTION_FAILED: 'usage',
58
+ NOT_AVAILABLE_OVER_MCP: 'usage',
59
+ NOT_AVAILABLE_REMOTELY: 'usage',
60
+ NO_ADAPTABLE_DEPENDENCY: 'environment',
61
+ MULTIPLE_PROJECTS: 'environment',
62
+ VERSION_NOT_SUPPORTED: 'environment',
63
+ UNSUPPORTED_FOR_MAJOR: 'environment',
64
+ PACKAGE_REQUIRED: 'environment',
65
+ DOCS_NOT_AVAILABLE: 'environment',
66
+ NETWORK_REQUIRED: 'environment',
67
+ RECORDS_INVALID: 'environment',
68
+ };
69
+ /** Issue severities that make a successful call a "findings" exit (1); `info` does not. */
70
+ export const FINDING_SEVERITIES = ['error', 'warning'];
71
+ export function exitCodeFor(envelope) {
72
+ if (!envelope.ok) {
73
+ return EXIT_CODES[ERROR_EXIT_CLASS[envelope.error.code]];
74
+ }
75
+ return envelope.issues.some((issue) => FINDING_SEVERITIES.includes(issue.severity))
76
+ ? EXIT_CODES.findings
77
+ : EXIT_CODES.ok;
78
+ }
79
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/core/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * One hop of relative imports (plan §8.4 Input): an identifier used inside a
3
+ * located literal that is imported from `./x` / `../x` is resolved to
4
+ * `x.{ts,tsx,js,jsx,vue,…}` or `x/index.*`, and its `export const` /
5
+ * `export default` taken with the same evaluator. A second hop, a re-export
6
+ * chain, a non-relative specifier, a missing or oversized file, or a cycle is
7
+ * `unverifiable` (`unresolved-import` / `non-relative-import`) with the
8
+ * specifier in the reason — never an error.
9
+ */
10
+ import { existsSync, readFileSync, statSync } from 'node:fs';
11
+ import { basename, dirname, join, resolve } from 'node:path';
12
+ import ts from 'typescript';
13
+ import { SOURCE_EXTENSIONS, SyntaxErrorInSource, createContext, parseSource, } from './ts-literal.js';
14
+ /** `./x` from `/dir/a.ts` → `/dir/x.ts`, `/dir/x/index.tsx`, …; TS-style `./x.js` also tries `x.ts` */
15
+ export function resolveSpecifier(fromFile, specifier) {
16
+ const base = resolve(dirname(fromFile), specifier);
17
+ const candidates = [base, ...SOURCE_EXTENSIONS.map((ext) => base + ext)];
18
+ const jsLike = /\.(m|c)?jsx?$/.exec(base);
19
+ if (jsLike) {
20
+ const stem = base.slice(0, -jsLike[0].length);
21
+ candidates.push(`${stem}.ts`, `${stem}.tsx`, `${stem}.mts`, `${stem}.cts`);
22
+ }
23
+ candidates.push(...SOURCE_EXTENSIONS.map((ext) => join(base, `index${ext}`)));
24
+ return candidates.find((candidate) => {
25
+ try {
26
+ return existsSync(candidate) && statSync(candidate).isFile();
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ });
32
+ }
33
+ function fail(reason) {
34
+ return { ok: false, kind: 'unresolved-import', reason };
35
+ }
36
+ function hasExportModifier(node) {
37
+ return !!ts.getModifiers(node)?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
38
+ }
39
+ function hasDefaultModifier(node) {
40
+ return !!ts.getModifiers(node)?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
41
+ }
42
+ /** The node an export of `parsed` evaluates to, or why it cannot be found */
43
+ function findExport(parsed, name, specifier) {
44
+ const file = basename(parsed.file);
45
+ let starReexport;
46
+ for (const statement of parsed.sf.statements) {
47
+ if (name === 'default') {
48
+ if (ts.isExportAssignment(statement) && !statement.isExportEquals) {
49
+ return { node: statement.expression };
50
+ }
51
+ if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement)) && hasDefaultModifier(statement)) {
52
+ return { node: statement, decl: statement };
53
+ }
54
+ continue;
55
+ }
56
+ if (ts.isVariableStatement(statement) && hasExportModifier(statement)) {
57
+ const declaration = statement.declarationList.declarations.find((d) => ts.isIdentifier(d.name) && d.name.text === name);
58
+ if (declaration) {
59
+ return declaration.initializer
60
+ ? { node: declaration.initializer, decl: declaration }
61
+ : fail(`\`${name}\` in '${specifier}' is declared without an initializer`);
62
+ }
63
+ }
64
+ else if ((ts.isFunctionDeclaration(statement) || ts.isEnumDeclaration(statement) || ts.isClassDeclaration(statement)) &&
65
+ hasExportModifier(statement) &&
66
+ statement.name?.text === name) {
67
+ return { node: statement, decl: statement };
68
+ }
69
+ else if (ts.isExportDeclaration(statement)) {
70
+ if (statement.exportClause && ts.isNamedExports(statement.exportClause)) {
71
+ const element = statement.exportClause.elements.find((e) => e.name.text === name);
72
+ if (element) {
73
+ if (statement.moduleSpecifier) {
74
+ return fail(`\`${name}\` is re-exported by ${file} from '${statement.moduleSpecifier.text}'; the extractor follows one hop of relative imports`);
75
+ }
76
+ return { node: element.propertyName ?? element.name };
77
+ }
78
+ }
79
+ else if (!statement.exportClause && statement.moduleSpecifier) {
80
+ starReexport ??= statement.moduleSpecifier.text;
81
+ }
82
+ }
83
+ }
84
+ if (starReexport) {
85
+ return fail(`\`${name}\` is not declared in ${file}, which re-exports '${starReexport}'; the extractor follows one hop of relative imports`);
86
+ }
87
+ return fail(`'${specifier}' (${file}) has no export named \`${name}\``);
88
+ }
89
+ function isReference(result) {
90
+ return 'ok' in result;
91
+ }
92
+ /**
93
+ * Builds the resolver for one extraction. Parsed files are cached for the
94
+ * extraction; the chain of files is tracked so a cycle cannot recurse.
95
+ */
96
+ export function createImportResolver(options) {
97
+ const maxHops = options.maxHops ?? 1;
98
+ const parsedFiles = new Map();
99
+ const parse = (file) => {
100
+ let parsed = parsedFiles.get(file);
101
+ if (!parsed) {
102
+ try {
103
+ parsed = parseSource(readFileSync(file, 'utf8'), file);
104
+ }
105
+ catch (error) {
106
+ if (!(error instanceof SyntaxErrorInSource)) {
107
+ throw error;
108
+ }
109
+ parsed = error;
110
+ }
111
+ parsedFiles.set(file, parsed);
112
+ }
113
+ return parsed;
114
+ };
115
+ const chainOf = (ctx) => new Set([...(ctx.chain ?? []), ctx.parsed.file]);
116
+ const resolver = {
117
+ resolve(binding, member, from) {
118
+ const what = member ? `\`${binding.local}.${member}\`` : `\`${binding.local}\``;
119
+ const { specifier } = binding;
120
+ const target = resolveSpecifier(from.parsed.file, specifier);
121
+ if (!target) {
122
+ return fail(`${what}: '${specifier}' (imported in ${basename(from.parsed.file)}) does not resolve to a file`);
123
+ }
124
+ const chain = chainOf(from);
125
+ if (chain.has(target)) {
126
+ return fail(`${what}: '${specifier}' is part of an import cycle (${[...chain, target].map((f) => basename(f)).join(' → ')})`);
127
+ }
128
+ let size = 0;
129
+ try {
130
+ size = statSync(target).size;
131
+ }
132
+ catch {
133
+ // reported by the read below
134
+ }
135
+ if (size > options.maxBytes) {
136
+ return fail(`${what}: '${specifier}' resolves to ${basename(target)} (${size} bytes), above the ${options.maxBytes}-byte input cap`);
137
+ }
138
+ const parsed = parse(target);
139
+ if (parsed instanceof SyntaxErrorInSource) {
140
+ return fail(`${what}: '${specifier}' (${basename(target)}) has a syntax error at ${parsed.line}:${parsed.column}: ${parsed.detail}`);
141
+ }
142
+ const exportName = binding.kind === 'namespace' ? member : binding.kind === 'default' ? 'default' : binding.imported;
143
+ if (exportName === undefined) {
144
+ return fail(`${what} is a namespace import used as a whole; its members are not visible statically`);
145
+ }
146
+ const found = findExport(parsed, exportName, specifier);
147
+ if (isReference(found)) {
148
+ return found;
149
+ }
150
+ const hop = from.hop + 1;
151
+ const ctx = createContext(parsed, {
152
+ imports: hop < maxHops ? resolver : undefined,
153
+ sink: from.sink,
154
+ stack: from.stack,
155
+ hop,
156
+ chain: new Set([...chain, target]),
157
+ });
158
+ return { ok: true, node: found.node, ctx, decls: found.decl ? [found.decl] : [] };
159
+ },
160
+ };
161
+ return resolver;
162
+ }
163
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../src/core/extract/imports.ts"],"names":[],"mappings":"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"}