@ng-doc/builder 22.0.0-beta.1 → 22.0.0

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 (439) hide show
  1. package/README.md +19 -28
  2. package/application/index.js +7 -2
  3. package/application/index.js.map +1 -1
  4. package/application/schema.json +11 -4
  5. package/builders.json +23 -13
  6. package/classes/observable-map.d.ts +1 -0
  7. package/classes/observable-map.js +14 -3
  8. package/classes/observable-map.js.map +1 -1
  9. package/classes/observable-set.js +2 -1
  10. package/classes/observable-set.js.map +1 -1
  11. package/dev-server/index.js +5 -3
  12. package/dev-server/index.js.map +1 -1
  13. package/engine/build-ng-doc.js +1 -16
  14. package/engine/build-ng-doc.js.map +1 -1
  15. package/engine/builders/api-list/api-list-component.builder.js +4 -4
  16. package/engine/builders/api-list/api-list-component.builder.js.map +1 -1
  17. package/engine/builders/api-list/api-page-template.builder.js +2 -2
  18. package/engine/builders/api-list/api-page-template.builder.js.map +1 -1
  19. package/engine/builders/global/keywords.builder.d.ts +1 -4
  20. package/engine/builders/global/keywords.builder.js +5 -9
  21. package/engine/builders/global/keywords.builder.js.map +1 -1
  22. package/engine/builders/global/search-indexes.builder.js +1 -1
  23. package/engine/builders/global/search-indexes.builder.js.map +1 -1
  24. package/engine/builders/helpers/create-entry-metadata.js +2 -1
  25. package/engine/builders/helpers/create-entry-metadata.js.map +1 -1
  26. package/engine/builders/helpers/create-import-path.js.map +1 -1
  27. package/engine/builders/helpers/get-entry-relative-path.js.map +1 -1
  28. package/engine/builders/page/demo-assets.builder.js +8 -5
  29. package/engine/builders/page/demo-assets.builder.js.map +1 -1
  30. package/engine/builders/page/playground.builder.js +1 -0
  31. package/engine/builders/page/playground.builder.js.map +1 -1
  32. package/engine/builders/shared/content.builder.js +3 -3
  33. package/engine/builders/shared/content.builder.js.map +1 -1
  34. package/engine/builders/shared/entry.builder.js +1 -13
  35. package/engine/builders/shared/entry.builder.js.map +1 -1
  36. package/engine/builders/shared/page-component.builder.js +16 -6
  37. package/engine/builders/shared/page-component.builder.js.map +1 -1
  38. package/engine/builders/shared/page-wrapper.builder.js +8 -5
  39. package/engine/builders/shared/page-wrapper.builder.js.map +1 -1
  40. package/engine/core/operators/distinct-pending.js.map +1 -1
  41. package/engine/core/operators/entries-emitter.js +2 -6
  42. package/engine/core/operators/entries-emitter.js.map +1 -1
  43. package/engine/core/operators/factory.js +1 -4
  44. package/engine/core/operators/factory.js.map +1 -1
  45. package/engine/core/operators/merge-factory.js +19 -17
  46. package/engine/core/operators/merge-factory.js.map +1 -1
  47. package/engine/core/operators/when-builders-done.js.map +1 -1
  48. package/engine/core/stores/index.d.ts +0 -1
  49. package/engine/core/stores/index.js +0 -1
  50. package/engine/core/stores/index.js.map +1 -1
  51. package/engine/core/triggers/on-dependencies-change.d.ts +1 -1
  52. package/engine/core/triggers/on-dependencies-change.js +2 -2
  53. package/engine/core/triggers/on-dependencies-change.js.map +1 -1
  54. package/engine/core/watcher/watch.js +19 -1
  55. package/engine/core/watcher/watch.js.map +1 -1
  56. package/engine/variables.d.ts +1 -0
  57. package/engine/variables.js +1 -0
  58. package/engine/variables.js.map +1 -1
  59. package/generator/artifacts/index.d.ts +317 -0
  60. package/generator/bootstrap/bin.d.ts +18 -0
  61. package/generator/bootstrap/bin.js +7274 -0
  62. package/generator/bootstrap/candidate-output-committer.d.ts +12 -0
  63. package/generator/bootstrap/cli.d.ts +42 -0
  64. package/generator/bootstrap/cli.js +7123 -0
  65. package/generator/bootstrap/constants.d.ts +4 -0
  66. package/generator/bootstrap/index.d.ts +111 -0
  67. package/generator/bootstrap/index.js +5020 -0
  68. package/generator/bootstrap/prerender-command.d.ts +31 -0
  69. package/generator/bootstrap/process-tree.d.ts +49 -0
  70. package/generator/build-metafile.json +11701 -0
  71. package/generator/build-provenance.json +119 -0
  72. package/generator/compiler/assemble.d.ts +41 -0
  73. package/generator/compiler/classify.d.ts +161 -0
  74. package/generator/compiler/closure-store.d.ts +55 -0
  75. package/generator/compiler/common.d.ts +32 -0
  76. package/generator/compiler/describe.d.ts +21 -0
  77. package/generator/compiler/dry-run.d.ts +108 -0
  78. package/generator/compiler/fast-start.d.ts +104 -0
  79. package/generator/compiler/fold.d.ts +116 -0
  80. package/generator/compiler/index.d.ts +111 -0
  81. package/generator/compiler/index.js +17759 -0
  82. package/generator/compiler/link.d.ts +38 -0
  83. package/generator/compiler/memo.d.ts +44 -0
  84. package/generator/compiler/plan.d.ts +92 -0
  85. package/generator/compiler/progress.d.ts +54 -0
  86. package/generator/compiler/render.d.ts +27 -0
  87. package/generator/compiler/retention.d.ts +181 -0
  88. package/generator/compiler/semantic-closure.d.ts +46 -0
  89. package/generator/compiler/targeted.d.ts +280 -0
  90. package/generator/content/content-compiler.d.ts +118 -0
  91. package/generator/content/highlight-cache.d.ts +139 -0
  92. package/generator/content/html-pipeline.d.ts +170 -0
  93. package/generator/content/html-pool.d.ts +239 -0
  94. package/generator/content/html-worker.js +1598 -0
  95. package/generator/content-module-ids.d.ts +8 -0
  96. package/generator/contracts.d.ts +1063 -0
  97. package/generator/contracts.js +15 -0
  98. package/generator/discovery/index.d.ts +77 -0
  99. package/generator/graph/index.d.ts +211 -0
  100. package/generator/graph/unit-index.d.ts +216 -0
  101. package/generator/kernel/canonical.d.ts +57 -0
  102. package/generator/kernel/flags.d.ts +49 -0
  103. package/generator/kernel/footprint.d.ts +88 -0
  104. package/generator/kernel/observations.d.ts +68 -0
  105. package/generator/kernel/paths.d.ts +22 -0
  106. package/generator/kernel/runtime-identity.d.ts +11 -0
  107. package/generator/outputs/index.d.ts +67 -0
  108. package/generator/package.json +3 -0
  109. package/generator/progress/ci.d.ts +22 -0
  110. package/generator/progress/detect.d.ts +60 -0
  111. package/generator/progress/events.d.ts +126 -0
  112. package/generator/progress/format.d.ts +83 -0
  113. package/generator/progress/gate.d.ts +49 -0
  114. package/generator/progress/host.d.ts +29 -0
  115. package/generator/progress/lines.d.ts +42 -0
  116. package/generator/progress/live.d.ts +115 -0
  117. package/generator/progress/model.d.ts +85 -0
  118. package/generator/progress/reporter.d.ts +87 -0
  119. package/generator/progress/settings.d.ts +60 -0
  120. package/generator/semantic/angular.d.ts +9 -0
  121. package/generator/semantic/api-enumeration.d.ts +19 -0
  122. package/generator/semantic/api-summary.d.ts +33 -0
  123. package/generator/semantic/dependencies.d.ts +20 -0
  124. package/generator/semantic/derived-classes.d.ts +58 -0
  125. package/generator/semantic/documentation-cache.d.ts +23 -0
  126. package/generator/semantic/fragments.d.ts +28 -0
  127. package/generator/semantic/owned-roots.d.ts +59 -0
  128. package/generator/semantic/program-builder.d.ts +55 -0
  129. package/generator/semantic/program-index.d.ts +124 -0
  130. package/generator/semantic/program-inputs.d.ts +26 -0
  131. package/generator/semantic/program-observations.d.ts +158 -0
  132. package/generator/semantic/program-retention.d.ts +147 -0
  133. package/generator/semantic/program-state.d.ts +196 -0
  134. package/generator/semantic/program-verify.d.ts +22 -0
  135. package/generator/semantic/recorder.d.ts +89 -0
  136. package/generator/semantic/rendering.d.ts +34 -0
  137. package/generator/semantic/semantic-closure.d.ts +129 -0
  138. package/generator/semantic/semantic-service.d.ts +186 -0
  139. package/generator/semantic/type-text.d.ts +5 -0
  140. package/generator/session/build-session.d.ts +206 -0
  141. package/generator/session/input-verification.d.ts +38 -0
  142. package/generator/session/parcel-event-source.d.ts +22 -0
  143. package/generator/session/progress.d.ts +72 -0
  144. package/generator/session/unchanged-saves.d.ts +63 -0
  145. package/generator/session/watch-inputs.d.ts +6 -0
  146. package/generator/session/watch-signals.d.ts +10 -0
  147. package/generator/templates/api/base.html.nunj +26 -0
  148. package/generator/templates/api/class-declaration.html.nunj +57 -0
  149. package/generator/templates/api/details/class-declaration.html.nunj +47 -0
  150. package/generator/templates/api/details/enum-declaration.html.nunj +0 -0
  151. package/generator/templates/api/details/function-declaration.html.nunj +14 -0
  152. package/generator/templates/api/details/helpers/decorators.html.nunj +14 -0
  153. package/generator/templates/api/details/helpers/extends.html.nunj +6 -0
  154. package/generator/templates/api/details/helpers/selectors.html.nunj +12 -0
  155. package/generator/templates/api/details/helpers/type-parameters.html.nunj +14 -0
  156. package/generator/templates/api/details/interface-declaration.html.nunj +27 -0
  157. package/generator/templates/api/details/type-alias-declaration.html.nunj +14 -0
  158. package/generator/templates/api/details/variable-declaration.html.nunj +0 -0
  159. package/generator/templates/api/details.html.nunj +9 -0
  160. package/generator/templates/api/enum-declaration.html.nunj +12 -0
  161. package/generator/templates/api/function-declaration.html.nunj +35 -0
  162. package/generator/templates/api/interface-declaration.html.nunj +37 -0
  163. package/generator/templates/api/type-alias-declaration.html.nunj +16 -0
  164. package/generator/templates/api/variable-declaration.html.nunj +8 -0
  165. package/generator/templates/api-header.html.nunj +11 -0
  166. package/generator/templates/api-list.ts.nunj +22 -0
  167. package/generator/templates/api-page-content.html.nunj +1 -0
  168. package/generator/templates/api-scope.ts.nunj +22 -0
  169. package/generator/templates/category.ts.nunj +22 -0
  170. package/generator/templates/code.html.nunj +3 -0
  171. package/generator/templates/context.ts.nunj +55 -0
  172. package/generator/templates/demo-assets.ts.nunj +25 -0
  173. package/generator/templates/helpers/accessor.html.nunj +76 -0
  174. package/generator/templates/helpers/accessors.html.nunj +7 -0
  175. package/generator/templates/helpers/badge.html.nunj +4 -0
  176. package/generator/templates/helpers/call-signature.html.nunj +70 -0
  177. package/generator/templates/helpers/code.html.nunj +3 -0
  178. package/generator/templates/helpers/constructor.html.nunj +32 -0
  179. package/generator/templates/helpers/declaration-modifiers.html.nunj +45 -0
  180. package/generator/templates/helpers/decorators.html.nunj +11 -0
  181. package/generator/templates/helpers/members.html.nunj +29 -0
  182. package/generator/templates/helpers/method.html.nunj +89 -0
  183. package/generator/templates/helpers/methods.html.nunj +7 -0
  184. package/generator/templates/helpers/modifier.html.nunj +4 -0
  185. package/generator/templates/helpers/no-content.html.nunj +3 -0
  186. package/generator/templates/helpers/overload.html.nunj +57 -0
  187. package/generator/templates/helpers/parameters.html.nunj +44 -0
  188. package/generator/templates/helpers/properties.html.nunj +61 -0
  189. package/generator/templates/helpers/status.html.nunj +33 -0
  190. package/generator/templates/helpers/tag.html.nunj +4 -0
  191. package/generator/templates/helpers/type.html.nunj +11 -0
  192. package/generator/templates/index.ts.nunj +2 -0
  193. package/generator/templates/page-header.html.nunj +5 -0
  194. package/generator/templates/page-wrapper.ts.nunj +64 -0
  195. package/generator/templates/page.ts.nunj +97 -0
  196. package/generator/templates/parts/examples.html.nunj +11 -0
  197. package/generator/templates/parts/member-examples.html.nunj +12 -0
  198. package/generator/templates/parts/member-remarks.html.nunj +8 -0
  199. package/generator/templates/parts/page-tags.html.nunj +10 -0
  200. package/generator/templates/parts/remarks.html.nunj +10 -0
  201. package/generator/templates/parts/see-also.html.nunj +23 -0
  202. package/generator/templates/parts/usage-notes.html.nunj +8 -0
  203. package/generator/templates/playgrounds.ts.nunj +63 -0
  204. package/generator/templates/routes.ts.nunj +49 -0
  205. package/generator/templates/symbol/decorators.html.nunj +12 -0
  206. package/generator/templates/symbol/details.html.nunj +62 -0
  207. package/generator/templates/symbol/extended-by.html.nunj +17 -0
  208. package/generator/templates/symbol/header.html.nunj +22 -0
  209. package/generator/templates/symbol/members.html.nunj +301 -0
  210. package/generator/templates/symbol/page.html.nunj +76 -0
  211. package/generator/templates/symbol/see-also.html.nunj +16 -0
  212. package/generator/vite/angular/ANALOG-LICENSE +21 -0
  213. package/generator/vite/angular/analog-provenance.json +880 -0
  214. package/generator/vite/angular/index.d.ts +14 -0
  215. package/generator/vite/angular/index.js +7300 -0
  216. package/generator/vite/angular-compatibility.d.ts +6 -0
  217. package/generator/vite/angular-composition.d.ts +68 -0
  218. package/generator/vite/angular-version.d.ts +38 -0
  219. package/generator/vite/application-builder.js +331 -0
  220. package/generator/vite/application-builder.schema.json +46 -0
  221. package/generator/vite/application.d.ts +91 -0
  222. package/generator/vite/assets.d.ts +11 -0
  223. package/generator/vite/bounded-close.d.ts +33 -0
  224. package/generator/vite/component-updates.d.ts +21 -0
  225. package/generator/vite/configuration.d.ts +3 -0
  226. package/generator/vite/dev-server-builder.js +334 -0
  227. package/generator/vite/dev-server-builder.schema.json +27 -0
  228. package/generator/vite/dev-styles.d.ts +65 -0
  229. package/generator/vite/diagnostics.d.ts +4 -0
  230. package/generator/vite/external-probes.d.ts +40 -0
  231. package/generator/vite/host-updates.d.ts +145 -0
  232. package/generator/vite/index.d.ts +13 -0
  233. package/generator/vite/index.js +11589 -0
  234. package/generator/vite/lease.d.ts +6 -0
  235. package/generator/vite/lifecycle.d.ts +119 -0
  236. package/generator/vite/mime.d.ts +2 -0
  237. package/generator/vite/missing-paths.d.ts +44 -0
  238. package/generator/vite/options.d.ts +87 -0
  239. package/generator/vite/output-watch.d.ts +41 -0
  240. package/generator/vite/paths.d.ts +7 -0
  241. package/generator/vite/plugin.d.ts +3 -0
  242. package/generator/vite/prerender-entry.js +395 -0
  243. package/generator/vite/prerender-runtime.d.ts +66 -0
  244. package/generator/vite/prerender.d.ts +27 -0
  245. package/generator/vite/production.d.ts +66 -0
  246. package/generator/vite/progress.d.ts +33 -0
  247. package/generator/vite/restore-theme.js +13 -0
  248. package/generator/vite/route-inventory.d.ts +24 -0
  249. package/generator/vite/ssr-renderer-control.d.ts +1 -0
  250. package/generator/vite/ssr-renderer-entry.js +444 -0
  251. package/generator/vite/ssr-renderer-protocol.d.ts +101 -0
  252. package/generator/vite/ssr-renderer.d.ts +74 -0
  253. package/generator/vite/theme-index.d.ts +13 -0
  254. package/generator/vite/tsconfig-paths.d.ts +64 -0
  255. package/generator/vite/vite-event-source.d.ts +198 -0
  256. package/generator/vite/vite-version.d.ts +26 -0
  257. package/generator/vite/watch-inputs.d.ts +39 -0
  258. package/generator/worker/entry.d.ts +1 -0
  259. package/generator/worker/entry.js +614 -0
  260. package/generator/worker/index.d.ts +156 -0
  261. package/generator/worker/index.js +1030 -0
  262. package/generator/worker/protocol.d.ts +160 -0
  263. package/helpers/angular/get-component-decorator.js +6 -6
  264. package/helpers/angular/get-component-decorator.js.map +1 -1
  265. package/helpers/angular/get-directive-decorator.js +3 -3
  266. package/helpers/angular/get-directive-decorator.js.map +1 -1
  267. package/helpers/angular/get-pipe-decorator.js +3 -3
  268. package/helpers/angular/get-pipe-decorator.js.map +1 -1
  269. package/helpers/build-indexes.js +5 -2
  270. package/helpers/build-indexes.js.map +1 -1
  271. package/helpers/construct-page-keyword.js +2 -1
  272. package/helpers/construct-page-keyword.js.map +1 -1
  273. package/helpers/extract-selectors.d.ts +1 -1
  274. package/helpers/extract-selectors.js +5 -3
  275. package/helpers/extract-selectors.js.map +1 -1
  276. package/helpers/filter-useless-members.d.ts +1 -1
  277. package/helpers/format-code.d.ts +2 -1
  278. package/helpers/format-code.js +13 -4
  279. package/helpers/format-code.js.map +1 -1
  280. package/helpers/import-fresh-esm.js.map +1 -1
  281. package/helpers/index.d.ts +2 -0
  282. package/helpers/index.js +2 -0
  283. package/helpers/index.js.map +1 -1
  284. package/helpers/keyword-heading-title.d.ts +7 -0
  285. package/helpers/keyword-heading-title.js +21 -0
  286. package/helpers/keyword-heading-title.js.map +1 -0
  287. package/helpers/markdown-to-html.js +3 -3
  288. package/helpers/markdown-to-html.js.map +1 -1
  289. package/helpers/navigation-title-order.d.ts +8 -0
  290. package/helpers/navigation-title-order.js +15 -0
  291. package/helpers/navigation-title-order.js.map +1 -0
  292. package/helpers/playground/get-playground-inputs.js +8 -4
  293. package/helpers/playground/get-playground-inputs.js.map +1 -1
  294. package/helpers/playground/get-playground-template-inputs.js +2 -1
  295. package/helpers/playground/get-playground-template-inputs.js.map +1 -1
  296. package/helpers/presentation.d.ts +7 -7
  297. package/helpers/presentation.js +23 -23
  298. package/helpers/presentation.js.map +1 -1
  299. package/helpers/print.js +32 -5
  300. package/helpers/print.js.map +1 -1
  301. package/helpers/process-snippets.d.ts +1 -1
  302. package/helpers/process-snippets.js +3 -3
  303. package/helpers/process-snippets.js.map +1 -1
  304. package/helpers/snippets-from-asset.d.ts +1 -1
  305. package/helpers/snippets-from-asset.js +2 -2
  306. package/helpers/snippets-from-asset.js.map +1 -1
  307. package/helpers/sort-navigation-entities.js +2 -1
  308. package/helpers/sort-navigation-entities.js.map +1 -1
  309. package/helpers/stable-generated-id.d.ts +2 -0
  310. package/helpers/stable-generated-id.js +12 -0
  311. package/helpers/stable-generated-id.js.map +1 -0
  312. package/helpers/text-order.d.ts +8 -0
  313. package/helpers/text-order.js +26 -0
  314. package/helpers/text-order.js.map +1 -0
  315. package/helpers/typescript/member/get-inherited-parent.d.ts +1 -1
  316. package/helpers/typescript/member/get-inherited-parent.js +2 -2
  317. package/helpers/typescript/member/get-inherited-parent.js.map +1 -1
  318. package/helpers/typescript/node/sort-by-nodes-name.d.ts +4 -2
  319. package/helpers/typescript/node/sort-by-nodes-name.js +6 -3
  320. package/helpers/typescript/node/sort-by-nodes-name.js.map +1 -1
  321. package/helpers/typescript/property/get-property-assignment.js.map +1 -1
  322. package/interfaces/schema.d.ts +1 -0
  323. package/package.json +87 -30
  324. package/parsers/helpers/number.d.ts +1 -1
  325. package/parsers/helpers/number.js +2 -2
  326. package/parsers/helpers/number.js.map +1 -1
  327. package/parsers/helpers/param-value.d.ts +1 -1
  328. package/parsers/helpers/param-value.js +2 -2
  329. package/parsers/helpers/param-value.js.map +1 -1
  330. package/parsers/helpers/param.js +3 -3
  331. package/parsers/helpers/param.js.map +1 -1
  332. package/parsers/parse-code-block-params.d.ts +1 -1
  333. package/parsers/parse-code-block-params.js +22 -16
  334. package/parsers/parse-code-block-params.js.map +1 -1
  335. package/parsers/parse-snippet.js +10 -10
  336. package/parsers/parse-snippet.js.map +1 -1
  337. package/schematics/collection.json +34 -23
  338. package/schematics/migrate-to-vite/analyze.d.ts +76 -0
  339. package/schematics/migrate-to-vite/analyze.js +816 -0
  340. package/schematics/migrate-to-vite/analyze.js.map +1 -0
  341. package/schematics/migrate-to-vite/index.d.ts +9 -0
  342. package/schematics/migrate-to-vite/index.js +585 -0
  343. package/schematics/migrate-to-vite/index.js.map +1 -0
  344. package/schematics/migrate-to-vite/legacy-folder.d.ts +84 -0
  345. package/schematics/migrate-to-vite/legacy-folder.js +340 -0
  346. package/schematics/migrate-to-vite/legacy-folder.js.map +1 -0
  347. package/schematics/migrate-to-vite/report.d.ts +32 -0
  348. package/schematics/migrate-to-vite/report.js +97 -0
  349. package/schematics/migrate-to-vite/report.js.map +1 -0
  350. package/schematics/migrate-to-vite/schema.d.ts +13 -0
  351. package/schematics/migrate-to-vite/schema.js +3 -0
  352. package/schematics/migrate-to-vite/schema.js.map +1 -0
  353. package/schematics/migrate-to-vite/schema.json +31 -0
  354. package/schematics/migrate-to-vite/setup/dependencies.d.ts +64 -0
  355. package/schematics/migrate-to-vite/setup/dependencies.js +183 -0
  356. package/schematics/migrate-to-vite/setup/dependencies.js.map +1 -0
  357. package/schematics/migrate-to-vite/setup/index.d.ts +6 -0
  358. package/schematics/migrate-to-vite/setup/index.js +13 -0
  359. package/schematics/migrate-to-vite/setup/index.js.map +1 -0
  360. package/schematics/migrate-to-vite/setup/json-file.d.ts +51 -0
  361. package/schematics/migrate-to-vite/setup/json-file.js +115 -0
  362. package/schematics/migrate-to-vite/setup/json-file.js.map +1 -0
  363. package/schematics/migrate-to-vite/setup/source.d.ts +30 -0
  364. package/schematics/migrate-to-vite/setup/source.js +202 -0
  365. package/schematics/migrate-to-vite/setup/source.js.map +1 -0
  366. package/schematics/migrate-to-vite/setup/targets.d.ts +51 -0
  367. package/schematics/migrate-to-vite/setup/targets.js +48 -0
  368. package/schematics/migrate-to-vite/setup/targets.js.map +1 -0
  369. package/schematics/migrate-to-vite/setup/vite-config.d.ts +100 -0
  370. package/schematics/migrate-to-vite/setup/vite-config.js +175 -0
  371. package/schematics/migrate-to-vite/setup/vite-config.js.map +1 -0
  372. package/schematics/migrate-to-vite/setup/workspace.d.ts +100 -0
  373. package/schematics/migrate-to-vite/setup/workspace.js +225 -0
  374. package/schematics/migrate-to-vite/setup/workspace.js.map +1 -0
  375. package/schematics/migrate-to-vite/state.d.ts +65 -0
  376. package/schematics/migrate-to-vite/state.js +92 -0
  377. package/schematics/migrate-to-vite/state.js.map +1 -0
  378. package/schematics/migrate-to-vite/testing/fixtures.d.ts +18 -0
  379. package/schematics/migrate-to-vite/testing/fixtures.js +279 -0
  380. package/schematics/migrate-to-vite/testing/fixtures.js.map +1 -0
  381. package/schematics/migrate-to-vite/update-note.d.ts +6 -0
  382. package/schematics/migrate-to-vite/update-note.js +23 -0
  383. package/schematics/migrate-to-vite/update-note.js.map +1 -0
  384. package/schematics/migration.json +5 -0
  385. package/schematics/migrations/standalone-pages/index.js +7 -6
  386. package/schematics/migrations/standalone-pages/index.js.map +1 -1
  387. package/schematics/vite-setup/index.d.ts +20 -0
  388. package/schematics/vite-setup/index.js +206 -0
  389. package/schematics/vite-setup/index.js.map +1 -0
  390. package/schematics/vite-setup/schema.d.ts +7 -0
  391. package/schematics/vite-setup/schema.js +3 -0
  392. package/schematics/vite-setup/schema.js.map +1 -0
  393. package/schematics/vite-setup/schema.json +19 -0
  394. package/scripts/restore-theme.js +9 -2
  395. package/templates/context.ts.nunj +3 -0
  396. package/templates/helpers/badge.html.nunj +1 -1
  397. package/templates/helpers/status.html.nunj +4 -8
  398. package/templates/page-wrapper.ts.nunj +24 -1
  399. package/templates/page.ts.nunj +25 -0
  400. package/templates/parts/page-tags.html.nunj +1 -1
  401. package/templates/playgrounds.ts.nunj +8 -9
  402. package/templates/routes.ts.nunj +6 -1
  403. package/templates/symbol/decorators.html.nunj +12 -0
  404. package/templates/symbol/details.html.nunj +62 -0
  405. package/templates/symbol/extended-by.html.nunj +17 -0
  406. package/templates/symbol/header.html.nunj +22 -0
  407. package/templates/symbol/members.html.nunj +301 -0
  408. package/templates/symbol/page.html.nunj +76 -0
  409. package/templates/symbol/see-also.html.nunj +16 -0
  410. package/engine/.cache/apps/ng-doc/docs/api-documentation/auto-generation/ng-doc.page.mjs +0 -20
  411. package/engine/.cache/apps/ng-doc/docs/api-documentation/documenting-declarations/ng-doc.page.mjs +0 -20
  412. package/engine/.cache/apps/ng-doc/docs/api-documentation/rendering-api/ng-doc.page.mjs +0 -19
  413. package/engine/.cache/apps/ng-doc/docs/customization/icons/ng-doc.page.mjs +0 -19
  414. package/engine/.cache/apps/ng-doc/docs/customization/layout/ng-doc.page.mjs +0 -19
  415. package/engine/.cache/apps/ng-doc/docs/customization/page-processors/ng-doc.page.mjs +0 -19
  416. package/engine/.cache/apps/ng-doc/docs/customization/page-skeleton/ng-doc.page.mjs +0 -19
  417. package/engine/.cache/apps/ng-doc/docs/customization/search/ng-doc.page.mjs +0 -19
  418. package/engine/.cache/apps/ng-doc/docs/customization/themes/ng-doc.page.mjs +0 -19
  419. package/engine/.cache/apps/ng-doc/docs/develop/ng-doc.page.mjs +0 -36
  420. package/engine/.cache/apps/ng-doc/docs/getting-started/configuration/ng-doc.page.mjs +0 -19
  421. package/engine/.cache/apps/ng-doc/docs/getting-started/installation/ng-doc.page.mjs +0 -19
  422. package/engine/.cache/apps/ng-doc/docs/getting-started/migrations/ng-doc.page.mjs +0 -18
  423. package/engine/.cache/apps/ng-doc/docs/getting-started/ssr/ng-doc.page.mjs +0 -19
  424. package/engine/.cache/apps/ng-doc/docs/getting-started/what-is-ng-doc/ng-doc.page.mjs +0 -19
  425. package/engine/.cache/apps/ng-doc/docs/ng-doc.api.mjs +0 -42
  426. package/engine/.cache/apps/ng-doc/docs/recipes/ignoring-file-lines/ng-doc.page.mjs +0 -18
  427. package/engine/.cache/apps/ng-doc/docs/recipes/performance/ng-doc.page.mjs +0 -19
  428. package/engine/.cache/apps/ng-doc/docs/writing-content/blockquotes/ng-doc.page.mjs +0 -18
  429. package/engine/.cache/apps/ng-doc/docs/writing-content/code-blocks/ng-doc.page.mjs +0 -18
  430. package/engine/.cache/apps/ng-doc/docs/writing-content/demo-and-demo-pane/ng-doc.page.mjs +0 -19
  431. package/engine/.cache/apps/ng-doc/docs/writing-content/images-videos-and-embeds/ng-doc.page.mjs +0 -18
  432. package/engine/.cache/apps/ng-doc/docs/writing-content/keywords/ng-doc.page.mjs +0 -17
  433. package/engine/.cache/apps/ng-doc/docs/writing-content/mermaid-diagrams/ng-doc.page.mjs +0 -18
  434. package/engine/.cache/apps/ng-doc/docs/writing-content/nunjucks/ng-doc.page.mjs +0 -18
  435. package/engine/.cache/apps/ng-doc/docs/writing-content/pages-and-categories/ng-doc.page.mjs +0 -18
  436. package/engine/.cache/apps/ng-doc/docs/writing-content/playground/ng-doc.page.mjs +0 -33
  437. package/engine/core/stores/entry-status.d.ts +0 -23
  438. package/engine/core/stores/entry-status.js +0 -36
  439. package/engine/core/stores/entry-status.js.map +0 -1
@@ -0,0 +1,1030 @@
1
+ // libs/builder/generator/worker/index.ts
2
+ import { fork } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ // libs/builder/generator/worker/protocol.ts
6
+ function encode(value) {
7
+ const result = JSON.stringify(
8
+ value,
9
+ function(key, item) {
10
+ const original = this[key];
11
+ if (typeof item === "function" || typeof item === "symbol" || typeof item === "bigint" || typeof item === "number" && !Number.isFinite(item) || original !== null && typeof original === "object" && !Array.isArray(original) && (Object.getPrototypeOf(original) !== Object.prototype && Object.getPrototypeOf(original) !== null || typeof original.toJSON === "function"))
12
+ throw new Error("Worker transport requires JSON values");
13
+ return item;
14
+ }
15
+ );
16
+ if (result === void 0) throw new Error("Worker transport requires a JSON value");
17
+ return result;
18
+ }
19
+ function decode(value) {
20
+ if (typeof value !== "string") throw new Error("Worker message must be JSON text");
21
+ const parsed = JSON.parse(value);
22
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
23
+ throw new Error("Worker message must be an object");
24
+ }
25
+ return parsed;
26
+ }
27
+ function resultFrom(value) {
28
+ if (value === null || typeof value !== "object") throw new Error("Invalid compilation result");
29
+ const result = value;
30
+ if (!Array.isArray(result.dependencies) || !Array.isArray(result.diagnostics) || !Array.isArray(result.whyRebuilt) || result.candidate !== void 0 && (result.candidate === null || typeof result.candidate !== "object" || !Array.isArray(result.candidate.artifacts))) {
31
+ throw new Error("Invalid compilation result");
32
+ }
33
+ return result;
34
+ }
35
+ function errorMessage(error) {
36
+ return error instanceof Error ? error.message : String(error);
37
+ }
38
+ function object(value, what) {
39
+ if (value === null || typeof value !== "object" || Array.isArray(value))
40
+ throw new Error(`Invalid snapshot delta: ${what}`);
41
+ return value;
42
+ }
43
+ function strings(value, what) {
44
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string"))
45
+ throw new Error(`Invalid snapshot delta: ${what}`);
46
+ return value;
47
+ }
48
+ function assemble(keys, set, base, what, artifacts) {
49
+ const result = {};
50
+ for (const key of keys) {
51
+ if (key === "__proto__" || Object.hasOwn(result, key))
52
+ throw new Error(`Invalid snapshot delta: ${what} key ${key}`);
53
+ if (artifacts && key === "artifacts") result[key] = artifacts;
54
+ else if (Object.hasOwn(set, key)) result[key] = set[key];
55
+ else if (base && Object.hasOwn(base, key)) result[key] = base[key];
56
+ else throw new Error(`Invalid snapshot delta: ${what} has no base value for ${key}`);
57
+ }
58
+ return result;
59
+ }
60
+ function applySnapshotDelta(base, value) {
61
+ const delta = object(value, "delta");
62
+ if (delta["base"] !== (base?.revision ?? null))
63
+ throw new Error(
64
+ `Invalid snapshot delta: base ${String(delta["base"])} is not ${String(base?.revision ?? null)}`
65
+ );
66
+ const previous = /* @__PURE__ */ new Map();
67
+ for (const artifact of base?.artifacts ?? []) {
68
+ if (previous.has(artifact.id))
69
+ throw new Error(`Invalid snapshot delta: duplicate base artifact ${artifact.id}`);
70
+ previous.set(artifact.id, artifact);
71
+ }
72
+ if (!Array.isArray(delta["artifacts"])) throw new Error("Invalid snapshot delta: artifacts");
73
+ const seen = /* @__PURE__ */ new Set();
74
+ const artifacts = delta["artifacts"].map((item) => {
75
+ const entry = object(item, "artifact entry");
76
+ const id = entry["id"];
77
+ const revision = entry["revision"];
78
+ if (typeof id !== "string" || typeof revision !== "string" || seen.has(id))
79
+ throw new Error(`Invalid snapshot delta: artifact ${String(id)}`);
80
+ seen.add(id);
81
+ const old = previous.get(id);
82
+ if (!("keys" in entry)) {
83
+ if (!old || old.revision !== revision)
84
+ throw new Error(`Invalid snapshot delta: no base artifact ${id} at ${revision}`);
85
+ return old;
86
+ }
87
+ const artifact = assemble(
88
+ strings(entry["keys"], `artifact ${id} keys`),
89
+ object(entry["set"], `artifact ${id} values`),
90
+ old,
91
+ `artifact ${id}`
92
+ );
93
+ if (artifact["id"] !== id || artifact["revision"] !== revision)
94
+ throw new Error(`Invalid snapshot delta: artifact ${id} identity`);
95
+ return artifact;
96
+ });
97
+ const keys = strings(delta["keys"], "snapshot keys");
98
+ if (!keys.includes("artifacts")) throw new Error("Invalid snapshot delta: snapshot artifacts");
99
+ const snapshot = assemble(
100
+ keys,
101
+ object(delta["set"], "snapshot values"),
102
+ base,
103
+ "snapshot",
104
+ artifacts
105
+ );
106
+ if (typeof snapshot["revision"] !== "string" || typeof snapshot["projectId"] !== "string")
107
+ throw new Error("Invalid snapshot delta: snapshot identity");
108
+ return snapshot;
109
+ }
110
+ function deepFreeze(value) {
111
+ const pending = [value];
112
+ while (pending.length) {
113
+ const item = pending.pop();
114
+ if (item === null || typeof item !== "object" || Object.isFrozen(item)) continue;
115
+ Object.freeze(item);
116
+ for (const child of Object.values(item)) pending.push(child);
117
+ }
118
+ return value;
119
+ }
120
+ var PROGRESS_PHASES = /* @__PURE__ */ new Set([
121
+ "boot",
122
+ "discovery",
123
+ "restore",
124
+ "semantic",
125
+ "plan",
126
+ "describe",
127
+ "render",
128
+ "keywords",
129
+ "link",
130
+ "assemble",
131
+ "aggregate",
132
+ "persist",
133
+ "transfer"
134
+ ]);
135
+ var count = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
136
+ function progressUpdate(value) {
137
+ if (value === null || typeof value !== "object" || Array.isArray(value)) return void 0;
138
+ const raw = value;
139
+ const { phase, state, completed, total, reused, pass, reason } = raw;
140
+ if (typeof phase !== "string" || !PROGRESS_PHASES.has(phase)) return void 0;
141
+ if (state !== "start" && state !== "advance" && state !== "end") return void 0;
142
+ if (completed !== void 0 && !count(completed) || total !== void 0 && !count(total) || reused !== void 0 && !count(reused) || pass !== void 0 && pass !== "targeted" && pass !== "full" && pass !== "restored" || reason !== void 0 && typeof reason !== "string" || completed !== void 0 && total !== void 0 && completed > total || reused !== void 0 && completed !== void 0 && reused > completed)
143
+ return void 0;
144
+ return {
145
+ phase,
146
+ state,
147
+ ...completed !== void 0 ? { completed } : {},
148
+ ...total !== void 0 ? { total } : {},
149
+ ...reused !== void 0 ? { reused } : {},
150
+ ...pass !== void 0 ? { pass } : {},
151
+ ...typeof reason === "string" ? { reason: reason.slice(0, 200) } : {}
152
+ };
153
+ }
154
+ var ProgressRelay = class {
155
+ constructor(sink, signal) {
156
+ this.sink = sink;
157
+ this.signal = signal;
158
+ this.transferring = false;
159
+ this.done = false;
160
+ /** A compiler update was relayed: a retry of the compile need not ask for progress again. */
161
+ this.reported = false;
162
+ }
163
+ boot(state) {
164
+ this.emit({ phase: "boot", state });
165
+ }
166
+ /** A `progress` message's update, as received. */
167
+ forward(value) {
168
+ const update = progressUpdate(value);
169
+ if (!update || update.phase === "boot" || update.phase === "transfer") return;
170
+ if (update.state === "start" && update.pass === "full") this.transferring = false;
171
+ this.emit(update);
172
+ this.reported = true;
173
+ if ((update.phase === "persist" || update.phase === "restore" && update.pass === "restored") && update.state === "end" && !this.transferring) {
174
+ this.transferring = true;
175
+ this.emit({ phase: "transfer", state: "start" });
176
+ }
177
+ }
178
+ /** The job's result is ready for the caller: the transfer ends and the relay goes quiet. */
179
+ settled() {
180
+ if (this.transferring) this.emit({ phase: "transfer", state: "end" });
181
+ this.done = true;
182
+ }
183
+ emit(update) {
184
+ if (this.done || this.signal.aborted) return;
185
+ try {
186
+ this.sink(update);
187
+ } catch {
188
+ }
189
+ }
190
+ };
191
+
192
+ // libs/builder/generator/worker/index.ts
193
+ var INCREMENTAL_SKIP_ENV = "NGDOC_INCREMENTAL_SKIP";
194
+ function failure(code, message) {
195
+ return {
196
+ dependencies: [],
197
+ diagnostics: [{ code, message, severity: "error", stage: "evaluation" }],
198
+ whyRebuilt: []
199
+ };
200
+ }
201
+ function positive(value, fallback) {
202
+ const number = value ?? fallback;
203
+ if (!Number.isSafeInteger(number) || number < 1 || number > 2147483647) {
204
+ throw new Error("Worker limits must be positive timer-safe integers");
205
+ }
206
+ return number;
207
+ }
208
+ function bytes(value, fallback) {
209
+ const number = value ?? fallback;
210
+ if (!Number.isSafeInteger(number) || number < 1) {
211
+ throw new Error("Worker memory limits must be positive safe integers");
212
+ }
213
+ return number;
214
+ }
215
+ var PROCESS_GROUPS = process.platform !== "win32";
216
+ var GROUP_EXIT_DEADLINE_MS = 2e3;
217
+ function signalRuntime(child, signal) {
218
+ if (PROCESS_GROUPS && child.pid) {
219
+ try {
220
+ process.kill(-child.pid, signal);
221
+ return;
222
+ } catch {
223
+ }
224
+ }
225
+ child.kill(signal);
226
+ }
227
+ function groupAlive(pid) {
228
+ try {
229
+ process.kill(-pid, 0);
230
+ return true;
231
+ } catch (error) {
232
+ return error.code === "EPERM";
233
+ }
234
+ }
235
+ async function joinGroup(child) {
236
+ const pid = child.pid;
237
+ if (!PROCESS_GROUPS || !pid || !groupAlive(pid)) return;
238
+ signalRuntime(child, "SIGKILL");
239
+ const deadline = Date.now() + GROUP_EXIT_DEADLINE_MS;
240
+ while (groupAlive(pid) && Date.now() < deadline) {
241
+ await new Promise((resolve) => setTimeout(resolve, 5));
242
+ }
243
+ }
244
+ var ABORTED = () => failure("WORKER_ABORTED", "Compilation aborted");
245
+ var DISPOSED = () => failure("WORKER_DISPOSED", "Compilation service is disposed");
246
+ var switchedOff = (value) => value !== void 0 && /^(0|false|off|no)$/i.test(value.trim());
247
+ function record(value) {
248
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
249
+ }
250
+ function factoryReuseOff(value) {
251
+ return value !== null && typeof value === "object" && !Array.isArray(value) && value["incrementalReuse"] === false;
252
+ }
253
+ function primeOutcome(result, reply, aborted) {
254
+ if (aborted) return { status: "aborted" };
255
+ const primed = reply !== null && typeof reply === "object" ? reply : {};
256
+ if (!result.diagnostics.length && typeof primed["revision"] === "string") {
257
+ return { status: "primed", revision: primed["revision"] };
258
+ }
259
+ const code = result.diagnostics[0]?.code ?? String(primed["code"] ?? "WORKER_PROTOCOL");
260
+ const message = result.diagnostics[0]?.message ?? String(primed["message"] ?? "The warm-up produced no candidate");
261
+ return { status: "failed", code, message };
262
+ }
263
+ function createWorkerCompilationService(options) {
264
+ const startupTimeout = positive(options.startupTimeoutMs, 3e4);
265
+ const compileTimeout = positive(options.compileTimeoutMs, 12e4);
266
+ const limit = positive(options.maxPendingRequests, 8);
267
+ const persistentOptions = options["persistent"] === false ? void 0 : options["persistent"] === true || options["persistent"] === void 0 ? {} : options["persistent"];
268
+ const persistent = persistentOptions && {
269
+ abortGraceMs: positive(persistentOptions.abortGraceMs, 1500),
270
+ maxGenerations: positive(persistentOptions.maxGenerations, 50),
271
+ maxRssBytes: bytes(persistentOptions.maxRssBytes, 3 * 1024 ** 3),
272
+ prime: persistentOptions.prime !== false,
273
+ delta: persistentOptions.delta === false ? false : persistentOptions.delta === "verify" ? "verify" : true
274
+ };
275
+ const verify = persistent?.delta === "verify";
276
+ const statistics = {
277
+ deltas: 0,
278
+ snapshotResyncs: 0,
279
+ promotions: 0,
280
+ fallbacks: 0,
281
+ mismatches: 0,
282
+ sentCharacters: 0,
283
+ receivedCharacters: 0
284
+ };
285
+ const dryRuns = { records: 0, misses: 0 };
286
+ const targetedResults = /* @__PURE__ */ new WeakSet();
287
+ const dryRunReported = (record2, result) => {
288
+ if (record2 === null || typeof record2 !== "object") return;
289
+ dryRuns.records++;
290
+ dryRuns.last = record2;
291
+ const { generation, misses, mismatch, published } = record2;
292
+ if (published === "targeted") targetedResults.add(result);
293
+ const missed = Array.isArray(misses) && misses.length > 0;
294
+ if (!missed && typeof mismatch !== "string") return;
295
+ dryRuns.misses++;
296
+ process.emitWarning(
297
+ `Targeted rebuild: generation ${String(generation)}` + (typeof mismatch === "string" ? ` differs from the full generation at ${mismatch}; the full result is published` : "") + (missed ? ` changed ${misses.length} unit(s) outside the targeted closure: ${misses.join(", ")}` : ""),
298
+ { code: "COMPILATION_TARGETED_MISMATCH" }
299
+ );
300
+ };
301
+ const moduleUrl = new URL(options["moduleUrl"]).href;
302
+ const workerData = encode({ moduleUrl, factoryOptions: options["factoryOptions"] });
303
+ const persistentData = encode({
304
+ moduleUrl,
305
+ factoryOptions: options["factoryOptions"],
306
+ persistent: true
307
+ });
308
+ const entry = options.workerEntryUrl ?? new URL("./entry.js", import.meta.url);
309
+ const queue = [];
310
+ let sequence = 0;
311
+ let disposed = false;
312
+ let watching = false;
313
+ let watchEnded = false;
314
+ let watchServed = false;
315
+ let active;
316
+ let runtime;
317
+ const runtimes = /* @__PURE__ */ new Set();
318
+ const ending = () => Promise.all([...runtimes].filter((each) => each !== runtime).map((each) => each.exited)).then(
319
+ () => void 0
320
+ );
321
+ let disposing;
322
+ const retainedProgramOff = () => switchedOff(process.env[INCREMENTAL_SKIP_ENV]) || factoryReuseOff(options.factoryOptions);
323
+ function servesStartup(request, context) {
324
+ return context?.lifetime === "generation" && request?.mode === "development" && persistent?.prime === true && !watching && !watchEnded && !watchServed && !retainedProgramOff();
325
+ }
326
+ function pump() {
327
+ if (active || disposed) return;
328
+ const job = queue.shift();
329
+ if (!job) return;
330
+ if (job.lifetime === "watch" && persistent) runPersistent(job);
331
+ else runFresh(job);
332
+ }
333
+ function runFresh(job) {
334
+ let worker;
335
+ try {
336
+ worker = fork(fileURLToPath(entry), [], {
337
+ execArgv: [],
338
+ detached: PROCESS_GROUPS,
339
+ stdio: ["ignore", "ignore", "ignore", "ipc"],
340
+ serialization: "json"
341
+ });
342
+ } catch (error) {
343
+ job.signal.removeEventListener("abort", job.abort);
344
+ job.resolve(failure("WORKER_STARTUP", errorMessage(error)));
345
+ pump();
346
+ return;
347
+ }
348
+ let ended = false;
349
+ let completed;
350
+ let ready = false;
351
+ let stopped;
352
+ const stopping = new Promise((resolve) => {
353
+ stopped = resolve;
354
+ });
355
+ let timer;
356
+ const finish = (result) => {
357
+ if (ended) return;
358
+ ended = true;
359
+ clearTimeout(timer);
360
+ job.signal.removeEventListener("abort", job.abort);
361
+ job.progress?.settled();
362
+ completed = result;
363
+ signalRuntime(worker, "SIGKILL");
364
+ };
365
+ active = {
366
+ job,
367
+ abort: () => finish(ABORTED()),
368
+ dispose: () => finish(DISPOSED()),
369
+ stopped: stopping
370
+ };
371
+ timer = setTimeout(
372
+ () => finish(failure("WORKER_STARTUP_TIMEOUT", "Compilation worker startup deadline exceeded")),
373
+ startupTimeout
374
+ );
375
+ job.progress?.boot("start");
376
+ worker.on("message", (message) => {
377
+ if (ended) return;
378
+ try {
379
+ const reply = decode(message);
380
+ if (reply["type"] === "progress") {
381
+ if (ready && reply["id"] === job.id) job.progress?.forward(reply["update"]);
382
+ } else if (reply["type"] === "ready" && !ready) {
383
+ ready = true;
384
+ job.progress?.boot("end");
385
+ clearTimeout(timer);
386
+ timer = setTimeout(
387
+ () => finish(failure("WORKER_COMPILE_TIMEOUT", "Compilation deadline exceeded")),
388
+ compileTimeout
389
+ );
390
+ worker.send(job.request, (error) => {
391
+ if (error) finish(failure("WORKER_PROTOCOL", error.message));
392
+ });
393
+ } else if (reply["type"] === "failure" && (!ready || reply["id"] === job.id)) {
394
+ finish(failure(ready ? "WORKER_COMPILE" : "WORKER_STARTUP", String(reply["message"])));
395
+ } else if (reply["type"] === "result" && ready && reply["id"] === job.id) {
396
+ finish(resultFrom(reply["result"]));
397
+ }
398
+ } catch (error) {
399
+ finish(failure("WORKER_PROTOCOL", errorMessage(error)));
400
+ }
401
+ });
402
+ worker.on(
403
+ "error",
404
+ (error) => finish(failure(ready ? "WORKER_CRASH" : "WORKER_STARTUP", error.message))
405
+ );
406
+ worker.on("close", (code) => {
407
+ if (!ended)
408
+ finish(failure("WORKER_EXIT", `Compilation worker exited before replying (${code})`));
409
+ worker.removeAllListeners();
410
+ void joinGroup(worker).then(() => {
411
+ active = void 0;
412
+ job.resolve(job.signal.aborted ? ABORTED() : disposed ? DISPOSED() : completed);
413
+ stopped();
414
+ pump();
415
+ });
416
+ });
417
+ worker.send(workerData, (error) => {
418
+ if (error) finish(failure("WORKER_STARTUP", error.message));
419
+ });
420
+ }
421
+ function spawn() {
422
+ const child = fork(fileURLToPath(entry), [], {
423
+ // Only flag: lets the idle runtime collect a finished generation (see entry.ts).
424
+ execArgv: ["--expose-gc"],
425
+ detached: PROCESS_GROUPS,
426
+ stdio: ["ignore", "ignore", "ignore", "ipc"],
427
+ // Messages are still JSON text (`encode`), validated and normalised once. With the delta
428
+ // transport the advanced channel carries that string as is, where a `json` channel would
429
+ // stringify (escape) and parse it a second time (about half of a large message's
430
+ // transport). Without it (`delta: false`) the `json` channel is kept.
431
+ serialization: persistent?.delta ? "advanced" : "json"
432
+ });
433
+ let exited;
434
+ let settleReady;
435
+ const created = {
436
+ child,
437
+ ready: new Promise((resolve) => {
438
+ settleReady = resolve;
439
+ }),
440
+ base: null,
441
+ committed: null,
442
+ working: null,
443
+ delta: false,
444
+ busy: false,
445
+ started: false,
446
+ generations: 0,
447
+ closed: false,
448
+ exited: new Promise((resolve) => {
449
+ exited = resolve;
450
+ })
451
+ };
452
+ runtimes.add(created);
453
+ let starting = true;
454
+ const startupFailed = (result) => {
455
+ if (!starting) return;
456
+ starting = false;
457
+ clearTimeout(timer);
458
+ created.startupFailure = result;
459
+ settleReady(false);
460
+ signalRuntime(child, "SIGKILL");
461
+ };
462
+ const timer = setTimeout(
463
+ () => startupFailed(
464
+ failure("WORKER_STARTUP_TIMEOUT", "Compilation worker startup deadline exceeded")
465
+ ),
466
+ startupTimeout
467
+ );
468
+ child.on("message", (message) => {
469
+ if (typeof message === "string") statistics.receivedCharacters += message.length;
470
+ let reply;
471
+ try {
472
+ reply = decode(message);
473
+ } catch (error) {
474
+ if (starting) startupFailed(failure("WORKER_PROTOCOL", errorMessage(error)));
475
+ else created.handler?.({ type: "invalid", message: errorMessage(error) });
476
+ return;
477
+ }
478
+ if (starting) {
479
+ if (reply["type"] === "ready") {
480
+ starting = false;
481
+ clearTimeout(timer);
482
+ created.started = true;
483
+ created.delta = reply["delta"] === true;
484
+ settleReady(true);
485
+ } else if (reply["type"] === "failure") {
486
+ startupFailed(failure("WORKER_STARTUP", String(reply["message"])));
487
+ }
488
+ return;
489
+ }
490
+ if (reply["type"] === "idle") {
491
+ if (typeof reply["rss"] === "number") {
492
+ created.idleRss = statistics.idleRss = reply["rss"];
493
+ if (!created.busy && runtime === created && reply["rss"] > persistent.maxRssBytes) {
494
+ void retire(created, true);
495
+ queueMicrotask(prepare);
496
+ }
497
+ }
498
+ return;
499
+ }
500
+ if (reply["type"] === "progress") {
501
+ created.progress?.(reply);
502
+ return;
503
+ }
504
+ created.handler?.({ type: "reply", reply });
505
+ });
506
+ child.on("error", (error) => {
507
+ if (starting) startupFailed(failure("WORKER_STARTUP", error.message));
508
+ else created.handler?.({ type: "invalid", message: error.message });
509
+ });
510
+ child.on("close", (code) => {
511
+ created.closed = true;
512
+ startupFailed(failure("WORKER_STARTUP", `Compilation worker exited before ready (${code})`));
513
+ child.removeAllListeners();
514
+ if (runtime === created) runtime = void 0;
515
+ created.handler?.({ type: "close", code });
516
+ void joinGroup(child).then(() => {
517
+ runtimes.delete(created);
518
+ exited();
519
+ });
520
+ });
521
+ child.send(persistentData, (error) => {
522
+ if (error) startupFailed(failure("WORKER_STARTUP", error.message));
523
+ });
524
+ return created;
525
+ }
526
+ function retire(target, graceful) {
527
+ if (runtime === target) runtime = void 0;
528
+ if (target.closed) return target.exited;
529
+ if (graceful && persistent) {
530
+ target.child.send(encode({ type: "dispose" }), () => {
531
+ });
532
+ const timer = setTimeout(
533
+ () => signalRuntime(target.child, "SIGKILL"),
534
+ persistent.abortGraceMs
535
+ );
536
+ void target.exited.then(() => clearTimeout(timer));
537
+ } else {
538
+ signalRuntime(target.child, "SIGKILL");
539
+ }
540
+ return target.exited;
541
+ }
542
+ function prepare() {
543
+ if (!persistent || disposed || !watching || runtime) return;
544
+ try {
545
+ runtime = spawn();
546
+ } catch {
547
+ }
548
+ }
549
+ function next(target, accept, timeoutMs) {
550
+ let timer;
551
+ let settle;
552
+ const event = new Promise((resolve) => {
553
+ settle = resolve;
554
+ });
555
+ const done = (value) => {
556
+ clearTimeout(timer);
557
+ if (target.handler === handler) target.handler = void 0;
558
+ settle(value);
559
+ };
560
+ const handler = (value) => {
561
+ if (value.type === "reply" && !accept(value.reply)) return;
562
+ done(value);
563
+ };
564
+ if (target.closed) settle({ type: "close", code: null });
565
+ else {
566
+ target.handler = handler;
567
+ timer = setTimeout(() => done({ type: "timeout" }), timeoutMs);
568
+ }
569
+ return { event };
570
+ }
571
+ function send(target, message) {
572
+ target.child.send(message, (error) => {
573
+ if (error) target.handler?.({ type: "invalid", message: error.message });
574
+ });
575
+ }
576
+ function observe(target, reply) {
577
+ const state = record(reply["state"]);
578
+ if (state && (state["base"] === null || typeof state["base"] === "string"))
579
+ target.base = state["base"];
580
+ target.committed = typeof state?.["committed"] === "string" ? state["committed"] : null;
581
+ target.working = typeof state?.["working"] === "string" ? state["working"] : null;
582
+ if (target.committedSource?.revision !== target.committed) target.committedSource = void 0;
583
+ if (target.workingSource?.revision !== target.working) target.workingSource = void 0;
584
+ }
585
+ function runPersistent(job) {
586
+ let stopped;
587
+ const stopping = new Promise((resolve) => {
588
+ stopped = resolve;
589
+ });
590
+ let abortRequested;
591
+ let killed = false;
592
+ let target;
593
+ const kill = () => {
594
+ killed = true;
595
+ if (target) void retire(target, false);
596
+ };
597
+ active = {
598
+ job,
599
+ abort: () => abortRequested?.(),
600
+ dispose: kill,
601
+ stopped: stopping
602
+ };
603
+ const broken = async (current, message) => {
604
+ void retire(current, false);
605
+ await current.exited;
606
+ return failure("WORKER_PROTOCOL", message);
607
+ };
608
+ const exchange = async (current, id, message) => {
609
+ const replied = next(
610
+ current,
611
+ (reply) => (reply["type"] === "result" || reply["type"] === "failure") && reply["id"] === id,
612
+ compileTimeout
613
+ );
614
+ const relay = job.progress;
615
+ current.progress = relay ? (reply) => {
616
+ if (reply["id"] === id) relay.forward(reply["update"]);
617
+ } : void 0;
618
+ abortRequested = () => {
619
+ abortRequested = void 0;
620
+ send(current, encode({ type: "abort", id }));
621
+ const grace = setTimeout(() => {
622
+ if (!current.closed) void retire(current, false);
623
+ }, persistent.abortGraceMs);
624
+ void replied.event.then(() => clearTimeout(grace));
625
+ };
626
+ send(current, message);
627
+ const event = await replied.event;
628
+ current.progress = void 0;
629
+ if (event.type === "timeout") {
630
+ void retire(current, false);
631
+ await current.exited;
632
+ return {
633
+ result: job.signal.aborted ? ABORTED() : failure("WORKER_COMPILE_TIMEOUT", "Compilation deadline exceeded")
634
+ };
635
+ }
636
+ if (event.type === "close") {
637
+ return {
638
+ result: failure(
639
+ "WORKER_EXIT",
640
+ `Compilation worker exited before replying (${event.code})`
641
+ )
642
+ };
643
+ }
644
+ if (event.type === "invalid") return { result: await broken(current, event.message) };
645
+ return { reply: event.reply };
646
+ };
647
+ const resync = async (current, snapshot) => {
648
+ let message;
649
+ try {
650
+ message = encode({
651
+ type: "resync",
652
+ base: job.base,
653
+ ...snapshot ? { snapshot } : {},
654
+ ...snapshot && verify ? { verify: true } : {}
655
+ });
656
+ } catch (error) {
657
+ return failure("WORKER_INPUT", errorMessage(error));
658
+ }
659
+ const resynced = next(
660
+ current,
661
+ (reply) => reply["type"] === "resynced",
662
+ snapshot ? compileTimeout : startupTimeout
663
+ );
664
+ send(current, message);
665
+ if (job.delta) statistics.sentCharacters += message.length;
666
+ const event = await resynced.event;
667
+ if (event.type !== "reply" || event.reply["base"] !== job.base || snapshot && record(event.reply["state"])?.["committed"] !== job.base) {
668
+ void retire(current, false);
669
+ if (killed || disposed) return DISPOSED();
670
+ return event.type === "close" ? failure("WORKER_EXIT", `Compilation worker exited before replying (${event.code})`) : failure("WORKER_PROTOCOL", "Compilation worker did not acknowledge the base revision");
671
+ }
672
+ current.base = job.base;
673
+ observe(current, event.reply);
674
+ current.promote = void 0;
675
+ current.workingSource = void 0;
676
+ current.committedSource = snapshot && job.base !== null ? { revision: job.base, snapshot: new WeakRef(snapshot) } : void 0;
677
+ if (snapshot) statistics.snapshotResyncs++;
678
+ return void 0;
679
+ };
680
+ const served = (current, reply, result) => {
681
+ current.generations++;
682
+ if (typeof reply["rss"] === "number") statistics.replyRss = reply["rss"];
683
+ if (reply["dryRun"] !== void 0) dryRunReported(reply["dryRun"], result);
684
+ recycle(current, reply);
685
+ return result;
686
+ };
687
+ const runFull = async (current) => {
688
+ if (current.base !== job.base) {
689
+ const failed = await resync(current, void 0);
690
+ if (failed) return failed;
691
+ }
692
+ if (job.signal.aborted) return ABORTED();
693
+ const out = await exchange(current, job.id, job.request);
694
+ if ("result" in out) return out.result;
695
+ const reply = out.reply;
696
+ observe(current, reply);
697
+ if (reply["type"] === "failure") {
698
+ if (reply["code"] === "WORKER_BASE_MISMATCH")
699
+ return broken(current, String(reply["message"]));
700
+ return served(current, reply, failure("WORKER_COMPILE", String(reply["message"])));
701
+ }
702
+ let result;
703
+ try {
704
+ result = resultFrom(reply["result"]);
705
+ if (job.prime) job.prime.reply = reply["primed"];
706
+ } catch (error) {
707
+ return broken(current, errorMessage(error));
708
+ }
709
+ return served(current, reply, result);
710
+ };
711
+ const runDelta = async (current) => {
712
+ const { previous, host } = job.delta;
713
+ let full = false;
714
+ for (let attempt = 0; ; attempt++) {
715
+ const promoting = !full && current.promote !== void 0 && current.promote === job.base && current.working === job.base && current.workingSource?.snapshot.deref() === previous;
716
+ const retained = current.base === job.base && (job.base === null || current.committed === job.base && current.committedSource?.snapshot.deref() === previous);
717
+ if (!promoting && !retained) {
718
+ const failed = await resync(current, job.base === null ? void 0 : previous);
719
+ if (failed) return failed;
720
+ }
721
+ if (job.signal.aborted) return ABORTED();
722
+ current.promote = void 0;
723
+ if (promoting) statistics.promotions++;
724
+ const id = attempt ? ++sequence : job.id;
725
+ const head = encode({
726
+ type: "compile",
727
+ id,
728
+ base: job.base,
729
+ delta: true,
730
+ ...job.base !== null ? { retained: true } : {},
731
+ ...promoting ? { promote: job.base } : {},
732
+ ...full ? { full: true } : {},
733
+ ...verify ? { verify: true } : {},
734
+ ...job.prime ? { prime: true } : {},
735
+ // A retry compiles again from the start: it reports its phases only when the first
736
+ // attempt reported none (it failed before compiling), never a second sequence.
737
+ ...job.progress && (!attempt || !job.progress.reported) ? { progress: true } : {},
738
+ host
739
+ });
740
+ const message = `${head.slice(0, -1)},"request":${job.request}}`;
741
+ statistics.sentCharacters += message.length;
742
+ const out = await exchange(current, id, message);
743
+ if ("result" in out) return out.result;
744
+ const reply = out.reply;
745
+ observe(current, reply);
746
+ if (previous && job.base !== null && current.committed === job.base)
747
+ current.committedSource = { revision: job.base, snapshot: new WeakRef(previous) };
748
+ if (reply["type"] === "failure") {
749
+ if (reply["code"] === "WORKER_RESYNC_REQUIRED" || reply["code"] === "WORKER_BASE_MISMATCH") {
750
+ if (attempt) return broken(current, String(reply["message"]));
751
+ statistics.fallbacks++;
752
+ current.committed = null;
753
+ continue;
754
+ }
755
+ return served(current, reply, failure("WORKER_COMPILE", String(reply["message"])));
756
+ }
757
+ let result;
758
+ try {
759
+ result = resultFrom(reply["result"]);
760
+ } catch (error) {
761
+ return broken(current, errorMessage(error));
762
+ }
763
+ if (job.prime) {
764
+ job.prime.reply = reply["primed"];
765
+ return served(current, reply, result);
766
+ }
767
+ if (reply["delta"] === void 0) return served(current, reply, result);
768
+ let candidate;
769
+ try {
770
+ candidate = applySnapshotDelta(previous, reply["delta"]);
771
+ } catch (error) {
772
+ if (attempt) return broken(current, errorMessage(error));
773
+ statistics.fallbacks++;
774
+ current.generations++;
775
+ current.committed = null;
776
+ current.working = null;
777
+ full = true;
778
+ continue;
779
+ }
780
+ let replaced = false;
781
+ if (verify) {
782
+ if (JSON.stringify(candidate) !== JSON.stringify(reply["full"])) {
783
+ statistics.mismatches++;
784
+ candidate = reply["full"];
785
+ current.committed = null;
786
+ current.working = null;
787
+ current.committedSource = void 0;
788
+ current.workingSource = void 0;
789
+ replaced = true;
790
+ }
791
+ deepFreeze(candidate);
792
+ }
793
+ if (!replaced) {
794
+ statistics.deltas++;
795
+ if (current.working === candidate.revision)
796
+ current.workingSource = {
797
+ revision: candidate.revision,
798
+ snapshot: new WeakRef(candidate)
799
+ };
800
+ }
801
+ return served(current, reply, { ...result, candidate });
802
+ }
803
+ };
804
+ const run = async () => {
805
+ try {
806
+ target = runtime && !runtime.closed ? runtime : runtime = spawn();
807
+ } catch (error) {
808
+ return failure("WORKER_STARTUP", errorMessage(error));
809
+ }
810
+ const current = target;
811
+ current.busy = true;
812
+ const aborted = new Promise((resolve) => {
813
+ abortRequested = () => resolve(false);
814
+ if (job.signal.aborted) resolve(false);
815
+ });
816
+ const booting = !current.started;
817
+ if (booting) job.progress?.boot("start");
818
+ const ready = await Promise.race([current.ready, aborted]);
819
+ if (booting && ready) job.progress?.boot("end");
820
+ if (killed || disposed) return DISPOSED();
821
+ if (job.signal.aborted) return ABORTED();
822
+ if (!ready) return current.startupFailure ?? failure("WORKER_STARTUP", "Worker is not ready");
823
+ if (!job.delta) return runFull(current);
824
+ if (current.delta) return runDelta(current);
825
+ const { previous, host } = job.delta;
826
+ let request = job.request;
827
+ try {
828
+ if (previous)
829
+ request = `${request.slice(0, -1)}${request.length > 2 ? "," : ""}"previous":${encode(previous)}}`;
830
+ } catch (error) {
831
+ return failure("WORKER_INPUT", errorMessage(error));
832
+ }
833
+ const head = encode({
834
+ type: "compile",
835
+ id: job.id,
836
+ base: job.base,
837
+ host,
838
+ ...job.prime ? { prime: true } : {},
839
+ ...job.progress ? { progress: true } : {}
840
+ });
841
+ job.request = `${head.slice(0, -1)},"request":${request}}`;
842
+ delete job.delta;
843
+ return runFull(current);
844
+ };
845
+ void run().catch((error) => failure("WORKER_PROTOCOL", errorMessage(error))).then(async (result) => {
846
+ if (killed && target && !target.closed) await target.exited;
847
+ if (target) target.busy = false;
848
+ if (target && target === runtime && !target.closed && (target.idleRss ?? 0) > persistent.maxRssBytes) {
849
+ void retire(target, true);
850
+ queueMicrotask(prepare);
851
+ }
852
+ job.signal.removeEventListener("abort", job.abort);
853
+ job.progress?.settled();
854
+ active = void 0;
855
+ job.resolve(job.signal.aborted ? ABORTED() : disposed ? DISPOSED() : result);
856
+ stopped();
857
+ if (watchEnded && runtime && !queue.some((next2) => next2.lifetime === "watch")) {
858
+ void retire(runtime, true);
859
+ }
860
+ pump();
861
+ });
862
+ }
863
+ function recycle(target, reply) {
864
+ const rss = target.delta ? 0 : typeof reply["rss"] === "number" ? reply["rss"] : 0;
865
+ if (reply["recycle"] !== true && target.generations < persistent.maxGenerations && rss <= persistent.maxRssBytes)
866
+ return;
867
+ void retire(target, true);
868
+ queueMicrotask(prepare);
869
+ }
870
+ const service = {
871
+ compile(request, signal, context) {
872
+ if (disposed) return Promise.resolve(DISPOSED());
873
+ if (signal.aborted) return Promise.resolve(ABORTED());
874
+ const priming = active?.job.prime;
875
+ if (queue.length + Number(Boolean(active) && !priming) >= limit) {
876
+ return Promise.resolve(
877
+ failure("WORKER_QUEUE_FULL", "Compilation pending-request limit exceeded")
878
+ );
879
+ }
880
+ let serialized;
881
+ let delta;
882
+ const id = ++sequence;
883
+ if (context?.lifetime === "watch") watchServed = true;
884
+ const lifetime = context?.lifetime === "watch" || servesStartup(request, context) ? "watch" : "generation";
885
+ const base = typeof request?.previous?.revision === "string" ? request.previous.revision : null;
886
+ const sink = context?.progress;
887
+ const progress = typeof sink === "function" ? new ProgressRelay(sink, signal) : void 0;
888
+ const wanted = progress ? { progress: true } : {};
889
+ try {
890
+ const host = () => ({ env: { ...process.env }, cwd: process.cwd() });
891
+ if (lifetime === "watch" && persistent?.delta && context?.delta === true) {
892
+ const { previous, ...rest } = request;
893
+ serialized = encode(rest);
894
+ delta = { ...previous ? { previous } : {}, host: host() };
895
+ } else {
896
+ serialized = encode(
897
+ lifetime === "watch" && persistent ? { type: "compile", id, base, request, host: host(), ...wanted } : { type: "compile", id, request, ...wanted }
898
+ );
899
+ }
900
+ } catch (error) {
901
+ return Promise.resolve(failure("WORKER_INPUT", errorMessage(error)));
902
+ }
903
+ return new Promise((resolve) => {
904
+ const job = {
905
+ id,
906
+ request: serialized,
907
+ base,
908
+ lifetime,
909
+ ...delta ? { delta } : {},
910
+ ...progress ? { progress } : {},
911
+ signal,
912
+ resolve,
913
+ abort() {
914
+ if (active?.job === job) {
915
+ active.abort();
916
+ } else {
917
+ const index = queue.indexOf(job);
918
+ if (index >= 0) queue.splice(index, 1);
919
+ signal.removeEventListener("abort", job.abort);
920
+ resolve(ABORTED());
921
+ }
922
+ }
923
+ };
924
+ signal.addEventListener("abort", job.abort, { once: true });
925
+ queue.push(job);
926
+ priming?.supersede();
927
+ pump();
928
+ });
929
+ },
930
+ prime(request, signal) {
931
+ const skipped = (reason) => Promise.resolve({ status: "skipped", reason });
932
+ if (disposed || !watching) return skipped("not watching");
933
+ if (active || queue.length) return skipped("busy");
934
+ if (retainedProgramOff()) return skipped("retained program disabled");
935
+ if (request?.mode !== "development" || typeof request.previous?.revision !== "string")
936
+ return skipped("not a development request with a previous snapshot");
937
+ if (signal.aborted) return Promise.resolve({ status: "aborted" });
938
+ const id = ++sequence;
939
+ const base = request.previous.revision;
940
+ const host = { env: { ...process.env }, cwd: process.cwd() };
941
+ let serialized;
942
+ let delta;
943
+ try {
944
+ if (persistent.delta) {
945
+ const { previous, ...rest } = request;
946
+ serialized = encode(rest);
947
+ delta = { previous, host };
948
+ } else {
949
+ serialized = encode({ type: "compile", id, base, request, host, prime: true });
950
+ }
951
+ } catch (error) {
952
+ return Promise.resolve({
953
+ status: "failed",
954
+ code: "WORKER_INPUT",
955
+ message: errorMessage(error)
956
+ });
957
+ }
958
+ const controller = new AbortController();
959
+ const forward = () => controller.abort();
960
+ signal.addEventListener("abort", forward, { once: true });
961
+ return new Promise((resolve) => {
962
+ const job = {
963
+ id,
964
+ request: serialized,
965
+ base,
966
+ lifetime: "watch",
967
+ ...delta ? { delta } : {},
968
+ prime: { supersede: () => controller.abort() },
969
+ signal: controller.signal,
970
+ resolve(result) {
971
+ signal.removeEventListener("abort", forward);
972
+ resolve(primeOutcome(result, job.prime.reply, controller.signal.aborted || disposed));
973
+ },
974
+ abort() {
975
+ if (active?.job === job) active.abort();
976
+ }
977
+ };
978
+ controller.signal.addEventListener("abort", job.abort, { once: true });
979
+ queue.push(job);
980
+ pump();
981
+ });
982
+ },
983
+ acknowledge(acknowledgement) {
984
+ const current = runtime;
985
+ if (!current || current.closed) return;
986
+ current.promote = acknowledgement?.status === "committed" && acknowledgement.revision === current.working ? current.working : void 0;
987
+ },
988
+ transport() {
989
+ return { ...statistics };
990
+ },
991
+ targetedResult: (result) => targetedResults.has(result),
992
+ targetedDryRun() {
993
+ return structuredClone(dryRuns);
994
+ },
995
+ watching(value) {
996
+ watching = value && !disposed;
997
+ watchEnded = !watching;
998
+ if (watching) {
999
+ prepare();
1000
+ return Promise.resolve();
1001
+ }
1002
+ active?.job.prime?.supersede();
1003
+ if (active?.job.lifetime === "watch") return active.stopped.then(ending);
1004
+ if (runtime) void retire(runtime, true);
1005
+ return ending();
1006
+ },
1007
+ dispose() {
1008
+ if (disposing) return disposing;
1009
+ disposed = true;
1010
+ watching = false;
1011
+ for (const job of queue.splice(0)) {
1012
+ job.signal.removeEventListener("abort", job.abort);
1013
+ job.resolve(DISPOSED());
1014
+ }
1015
+ const running = active;
1016
+ running?.dispose();
1017
+ disposing = Promise.all([
1018
+ running?.stopped ?? Promise.resolve(),
1019
+ ...[...runtimes].map((each) => retire(each, false))
1020
+ ]).then(() => void 0);
1021
+ return disposing;
1022
+ }
1023
+ };
1024
+ if (!persistent?.prime) delete service.prime;
1025
+ if (!persistent?.delta) delete service.acknowledge;
1026
+ return service;
1027
+ }
1028
+ export {
1029
+ createWorkerCompilationService
1030
+ };