@byline/cli 0.1.1

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 (251) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +23 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +72 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +2 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +36 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/init.d.ts +16 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +76 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/context.d.ts +38 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +37 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/index.d.ts +5 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +4 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/lib/pg-url.d.ts +11 -0
  24. package/dist/lib/pg-url.d.ts.map +1 -0
  25. package/dist/lib/pg-url.js +22 -0
  26. package/dist/lib/pg-url.js.map +1 -0
  27. package/dist/manifest/deps.d.ts +29 -0
  28. package/dist/manifest/deps.d.ts.map +1 -0
  29. package/dist/manifest/deps.js +97 -0
  30. package/dist/manifest/deps.js.map +1 -0
  31. package/dist/manifest/env.d.ts +18 -0
  32. package/dist/manifest/env.d.ts.map +1 -0
  33. package/dist/manifest/env.js +38 -0
  34. package/dist/manifest/env.js.map +1 -0
  35. package/dist/phases/db-init.d.ts +3 -0
  36. package/dist/phases/db-init.d.ts.map +1 -0
  37. package/dist/phases/db-init.js +163 -0
  38. package/dist/phases/db-init.js.map +1 -0
  39. package/dist/phases/db.d.ts +11 -0
  40. package/dist/phases/db.d.ts.map +1 -0
  41. package/dist/phases/db.js +93 -0
  42. package/dist/phases/db.js.map +1 -0
  43. package/dist/phases/deps.d.ts +3 -0
  44. package/dist/phases/deps.d.ts.map +1 -0
  45. package/dist/phases/deps.js +115 -0
  46. package/dist/phases/deps.js.map +1 -0
  47. package/dist/phases/env.d.ts +3 -0
  48. package/dist/phases/env.d.ts.map +1 -0
  49. package/dist/phases/env.js +172 -0
  50. package/dist/phases/env.js.map +1 -0
  51. package/dist/phases/host.d.ts +3 -0
  52. package/dist/phases/host.d.ts.map +1 -0
  53. package/dist/phases/host.js +99 -0
  54. package/dist/phases/host.js.map +1 -0
  55. package/dist/phases/index.d.ts +7 -0
  56. package/dist/phases/index.d.ts.map +1 -0
  57. package/dist/phases/index.js +40 -0
  58. package/dist/phases/index.js.map +1 -0
  59. package/dist/phases/preflight.d.ts +4 -0
  60. package/dist/phases/preflight.d.ts.map +1 -0
  61. package/dist/phases/preflight.js +81 -0
  62. package/dist/phases/preflight.js.map +1 -0
  63. package/dist/phases/routes.d.ts +3 -0
  64. package/dist/phases/routes.d.ts.map +1 -0
  65. package/dist/phases/routes.js +145 -0
  66. package/dist/phases/routes.js.map +1 -0
  67. package/dist/phases/scaffold.d.ts +3 -0
  68. package/dist/phases/scaffold.d.ts.map +1 -0
  69. package/dist/phases/scaffold.js +113 -0
  70. package/dist/phases/scaffold.js.map +1 -0
  71. package/dist/phases/stub.d.ts +3 -0
  72. package/dist/phases/stub.d.ts.map +1 -0
  73. package/dist/phases/stub.js +25 -0
  74. package/dist/phases/stub.js.map +1 -0
  75. package/dist/phases/ui.d.ts +3 -0
  76. package/dist/phases/ui.d.ts.map +1 -0
  77. package/dist/phases/ui.js +93 -0
  78. package/dist/phases/ui.js.map +1 -0
  79. package/dist/phases/wire/index.d.ts +3 -0
  80. package/dist/phases/wire/index.d.ts.map +1 -0
  81. package/dist/phases/wire/index.js +67 -0
  82. package/dist/phases/wire/index.js.map +1 -0
  83. package/dist/phases/wire/root-tsx.d.ts +3 -0
  84. package/dist/phases/wire/root-tsx.d.ts.map +1 -0
  85. package/dist/phases/wire/root-tsx.js +57 -0
  86. package/dist/phases/wire/root-tsx.js.map +1 -0
  87. package/dist/phases/wire/server-ts.d.ts +3 -0
  88. package/dist/phases/wire/server-ts.d.ts.map +1 -0
  89. package/dist/phases/wire/server-ts.js +54 -0
  90. package/dist/phases/wire/server-ts.js.map +1 -0
  91. package/dist/phases/wire/shared.d.ts +34 -0
  92. package/dist/phases/wire/shared.d.ts.map +1 -0
  93. package/dist/phases/wire/shared.js +2 -0
  94. package/dist/phases/wire/shared.js.map +1 -0
  95. package/dist/phases/wire/start-ts.d.ts +3 -0
  96. package/dist/phases/wire/start-ts.d.ts.map +1 -0
  97. package/dist/phases/wire/start-ts.js +149 -0
  98. package/dist/phases/wire/start-ts.js.map +1 -0
  99. package/dist/phases/wire/tsconfig.d.ts +3 -0
  100. package/dist/phases/wire/tsconfig.d.ts.map +1 -0
  101. package/dist/phases/wire/tsconfig.js +105 -0
  102. package/dist/phases/wire/tsconfig.js.map +1 -0
  103. package/dist/phases/wire/vite-config.d.ts +3 -0
  104. package/dist/phases/wire/vite-config.d.ts.map +1 -0
  105. package/dist/phases/wire/vite-config.js +46 -0
  106. package/dist/phases/wire/vite-config.js.map +1 -0
  107. package/dist/prompts.d.ts +34 -0
  108. package/dist/prompts.d.ts.map +1 -0
  109. package/dist/prompts.js +49 -0
  110. package/dist/prompts.js.map +1 -0
  111. package/dist/runner.d.ts +5 -0
  112. package/dist/runner.d.ts.map +1 -0
  113. package/dist/runner.js +91 -0
  114. package/dist/runner.js.map +1 -0
  115. package/dist/state.d.ts +18 -0
  116. package/dist/state.d.ts.map +1 -0
  117. package/dist/state.js +68 -0
  118. package/dist/state.js.map +1 -0
  119. package/dist/templates/byline/admin.config.ts +41 -0
  120. package/dist/templates/byline/i18n.ts +47 -0
  121. package/dist/templates/byline/routes.ts +28 -0
  122. package/dist/templates/byline/seed.ts +19 -0
  123. package/dist/templates/byline/seeds/admin.ts +62 -0
  124. package/dist/templates/byline/server.config.ts +92 -0
  125. package/dist/templates/byline-examples/admin.config.ts +74 -0
  126. package/dist/templates/byline-examples/blocks/photo-block.ts +59 -0
  127. package/dist/templates/byline-examples/blocks/richtext-block.ts +35 -0
  128. package/dist/templates/byline-examples/collections/doc-example-flat-locale-all.ts +373 -0
  129. package/dist/templates/byline-examples/collections/doc-example-flat-locale-en.ts +283 -0
  130. package/dist/templates/byline-examples/collections/doc-example-tree-locale-all.ts +278 -0
  131. package/dist/templates/byline-examples/collections/doc-example-tree-locale-en.ts +205 -0
  132. package/dist/templates/byline-examples/collections/docs/admin.tsx +204 -0
  133. package/dist/templates/byline-examples/collections/docs/components/.gitkeep +0 -0
  134. package/dist/templates/byline-examples/collections/docs/components/feature-formatter.tsx +10 -0
  135. package/dist/templates/byline-examples/collections/docs/hooks/.gitkeep +0 -0
  136. package/dist/templates/byline-examples/collections/docs/index.ts +10 -0
  137. package/dist/templates/byline-examples/collections/docs/schema.ts +209 -0
  138. package/dist/templates/byline-examples/collections/docs-categories/admin.tsx +78 -0
  139. package/dist/templates/byline-examples/collections/docs-categories/components/.gitkeep +0 -0
  140. package/dist/templates/byline-examples/collections/docs-categories/hooks/.gitkeep +0 -0
  141. package/dist/templates/byline-examples/collections/docs-categories/index.ts +10 -0
  142. package/dist/templates/byline-examples/collections/docs-categories/schema.ts +33 -0
  143. package/dist/templates/byline-examples/collections/media/admin.tsx +188 -0
  144. package/dist/templates/byline-examples/collections/media/components/media-list-view.tsx +330 -0
  145. package/dist/templates/byline-examples/collections/media/components/media-thumbnail.tsx +63 -0
  146. package/dist/templates/byline-examples/collections/media/hooks/.gitkeep +0 -0
  147. package/dist/templates/byline-examples/collections/media/index.ts +10 -0
  148. package/dist/templates/byline-examples/collections/media/schema.ts +157 -0
  149. package/dist/templates/byline-examples/collections/news/admin.tsx +192 -0
  150. package/dist/templates/byline-examples/collections/news/components/.gitkeep +0 -0
  151. package/dist/templates/byline-examples/collections/news/hooks/.gitkeep +0 -0
  152. package/dist/templates/byline-examples/collections/news/index.ts +10 -0
  153. package/dist/templates/byline-examples/collections/news/schema.ts +91 -0
  154. package/dist/templates/byline-examples/collections/news-categories/admin.tsx +78 -0
  155. package/dist/templates/byline-examples/collections/news-categories/components/.gitkeep +0 -0
  156. package/dist/templates/byline-examples/collections/news-categories/hooks/.gitkeep +0 -0
  157. package/dist/templates/byline-examples/collections/news-categories/index.ts +10 -0
  158. package/dist/templates/byline-examples/collections/news-categories/schema.ts +33 -0
  159. package/dist/templates/byline-examples/collections/pages/admin.tsx +183 -0
  160. package/dist/templates/byline-examples/collections/pages/components/.gitkeep +0 -0
  161. package/dist/templates/byline-examples/collections/pages/hooks/.gitkeep +0 -0
  162. package/dist/templates/byline-examples/collections/pages/index.ts +10 -0
  163. package/dist/templates/byline-examples/collections/pages/schema.ts +96 -0
  164. package/dist/templates/byline-examples/components/length-indicator.tsx +138 -0
  165. package/dist/templates/byline-examples/components/pill.tsx +38 -0
  166. package/dist/templates/byline-examples/components/summary-length.tsx +39 -0
  167. package/dist/templates/byline-examples/fields/available-languages-field.ts +90 -0
  168. package/dist/templates/byline-examples/fields/lexical-richtext-compact.ts +88 -0
  169. package/dist/templates/byline-examples/i18n.ts +47 -0
  170. package/dist/templates/byline-examples/routes.ts +28 -0
  171. package/dist/templates/byline-examples/scripts/regenerate-media.ts +275 -0
  172. package/dist/templates/byline-examples/seed.ts +25 -0
  173. package/dist/templates/byline-examples/seeds/admin.ts +62 -0
  174. package/dist/templates/byline-examples/seeds/doc-categories.ts +71 -0
  175. package/dist/templates/byline-examples/seeds/docs.ts +293 -0
  176. package/dist/templates/byline-examples/seeds/news-categories.ts +71 -0
  177. package/dist/templates/byline-examples/server.config.ts +179 -0
  178. package/dist/templates/host/vite.config.ts +41 -0
  179. package/dist/templates/migrations/0000_condemned_kronos.sql +324 -0
  180. package/dist/templates/migrations/0001_sudden_phantom_reporter.sql +1 -0
  181. package/dist/templates/migrations/meta/0000_snapshot.json +2793 -0
  182. package/dist/templates/migrations/meta/0001_snapshot.json +2799 -0
  183. package/dist/templates/migrations/meta/_journal.json +20 -0
  184. package/dist/templates/routes/(byline)/admin/account/index.tsx +11 -0
  185. package/dist/templates/routes/(byline)/admin/collections/$collection/$id/api.tsx +16 -0
  186. package/dist/templates/routes/(byline)/admin/collections/$collection/$id/history.tsx +19 -0
  187. package/dist/templates/routes/(byline)/admin/collections/$collection/$id/index.tsx +16 -0
  188. package/dist/templates/routes/(byline)/admin/collections/$collection/create.tsx +11 -0
  189. package/dist/templates/routes/(byline)/admin/collections/$collection/index.tsx +11 -0
  190. package/dist/templates/routes/(byline)/admin/index.tsx +11 -0
  191. package/dist/templates/routes/(byline)/admin/permissions/index.tsx +11 -0
  192. package/dist/templates/routes/(byline)/admin/roles/$id/index.tsx +11 -0
  193. package/dist/templates/routes/(byline)/admin/roles/index.tsx +11 -0
  194. package/dist/templates/routes/(byline)/admin/route.tsx +11 -0
  195. package/dist/templates/routes/(byline)/admin/users/$id/index.tsx +11 -0
  196. package/dist/templates/routes/(byline)/admin/users/index.tsx +11 -0
  197. package/dist/templates/routes/(byline)/sign-in.tsx +11 -0
  198. package/dist/templates/ui-byline/blocks/photo-block/index.tsx +80 -0
  199. package/dist/templates/ui-byline/blocks/richtext-block/index.tsx +46 -0
  200. package/dist/templates/ui-byline/components/admonition/index.tsx +40 -0
  201. package/dist/templates/ui-byline/components/code/code-serializer.tsx +20 -0
  202. package/dist/templates/ui-byline/components/code/code.tsx +50 -0
  203. package/dist/templates/ui-byline/components/code/index.module.scss +137 -0
  204. package/dist/templates/ui-byline/components/code/index.ts +2 -0
  205. package/dist/templates/ui-byline/components/code/types.ts +5 -0
  206. package/dist/templates/ui-byline/components/code/utils.ts +20 -0
  207. package/dist/templates/ui-byline/components/heading-anchor/heading-anchor.tsx +69 -0
  208. package/dist/templates/ui-byline/components/heading-anchor/index.ts +1 -0
  209. package/dist/templates/ui-byline/components/heading-anchor/utils.ts +15 -0
  210. package/dist/templates/ui-byline/components/inline-image/index.tsx +109 -0
  211. package/dist/templates/ui-byline/components/layout/index.tsx +63 -0
  212. package/dist/templates/ui-byline/components/link/lang-link.tsx +70 -0
  213. package/dist/templates/ui-byline/components/link/link-field.tsx +298 -0
  214. package/dist/templates/ui-byline/components/link/link-lexical.tsx +191 -0
  215. package/dist/templates/ui-byline/components/list/index.ts +2 -0
  216. package/dist/templates/ui-byline/components/list/list-item.tsx +32 -0
  217. package/dist/templates/ui-byline/components/list/list.tsx +17 -0
  218. package/dist/templates/ui-byline/components/responsive-image/index.tsx +205 -0
  219. package/dist/templates/ui-byline/components/richtext-lexical/index.tsx +31 -0
  220. package/dist/templates/ui-byline/components/richtext-lexical/serialize/index.tsx +249 -0
  221. package/dist/templates/ui-byline/components/richtext-lexical/serialize/richtext-node-formats.ts +66 -0
  222. package/dist/templates/ui-byline/components/richtext-lexical/serialize/types.ts +48 -0
  223. package/dist/templates/ui-byline/components/richtext-lexical/serialize/utils.ts +15 -0
  224. package/dist/templates/ui-byline/components/table-cell/index.tsx +36 -0
  225. package/dist/templates/ui-byline/components/vimeo/index.tsx +21 -0
  226. package/dist/templates/ui-byline/components/youtube/index.tsx +22 -0
  227. package/dist/templates/ui-byline/render-blocks.tsx +71 -0
  228. package/dist/templates/ui-byline/types/i18n.ts +14 -0
  229. package/dist/templates/ui-byline/utils/image-sources.ts +102 -0
  230. package/dist/templates/ui-byline/utils/to-kebab-case.ts +5 -0
  231. package/dist/types.d.ts +54 -0
  232. package/dist/types.d.ts.map +1 -0
  233. package/dist/types.js +2 -0
  234. package/dist/types.js.map +1 -0
  235. package/dist/ui/diff.d.ts +4 -0
  236. package/dist/ui/diff.d.ts.map +1 -0
  237. package/dist/ui/diff.js +23 -0
  238. package/dist/ui/diff.js.map +1 -0
  239. package/dist/ui/grid.d.ts +7 -0
  240. package/dist/ui/grid.d.ts.map +1 -0
  241. package/dist/ui/grid.js +24 -0
  242. package/dist/ui/grid.js.map +1 -0
  243. package/dist/ui/logger.d.ts +14 -0
  244. package/dist/ui/logger.d.ts.map +1 -0
  245. package/dist/ui/logger.js +30 -0
  246. package/dist/ui/logger.js.map +1 -0
  247. package/dist/ui/snippet.d.ts +2 -0
  248. package/dist/ui/snippet.d.ts.map +1 -0
  249. package/dist/ui/snippet.js +7 -0
  250. package/dist/ui/snippet.js.map +1 -0
  251. package/package.json +69 -0
@@ -0,0 +1,54 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { Project } from 'ts-morph';
3
+ const REL = 'src/server.ts';
4
+ const IMPORT_SPECIFIER = '../byline/server.config';
5
+ const SNIPPET = `// Initialize Byline server config (DB adapter, etc.) before handling any requests.
6
+ import '${IMPORT_SPECIFIER}'
7
+ `;
8
+ export const wireServerTs = {
9
+ key: 'server-ts',
10
+ title: `Inject side-effect import into ${REL}`,
11
+ async preview(ctx) {
12
+ return run(ctx, true);
13
+ },
14
+ async apply(ctx) {
15
+ return run(ctx, false);
16
+ },
17
+ };
18
+ async function run(ctx, dryRun) {
19
+ const path = ctx.resolve(REL);
20
+ if (!existsSync(path)) {
21
+ return { status: 'blocked', message: `${REL} not found — host phase should have caught this` };
22
+ }
23
+ const text = readFileSync(path, 'utf8');
24
+ if (hasImport(text, IMPORT_SPECIFIER)) {
25
+ return { status: 'skipped', message: `${REL}: side-effect import already present` };
26
+ }
27
+ if (dryRun) {
28
+ return { status: 'done', message: `${REL}: will inject \`import '${IMPORT_SPECIFIER}'\`` };
29
+ }
30
+ const project = new Project({ useInMemoryFileSystem: false, skipAddingFilesFromTsConfig: true });
31
+ let source;
32
+ try {
33
+ source = project.addSourceFileAtPath(path);
34
+ }
35
+ catch (_e) {
36
+ return {
37
+ status: 'manual',
38
+ message: `${REL}: could not parse — please add the import manually`,
39
+ snippet: SNIPPET,
40
+ };
41
+ }
42
+ // Place the side-effect import at the very top of the imports block so the
43
+ // Byline runtime is registered before any other module side effects fire.
44
+ source.insertImportDeclaration(0, { moduleSpecifier: IMPORT_SPECIFIER });
45
+ source.saveSync();
46
+ return { status: 'done', message: `${REL}: injected \`import '${IMPORT_SPECIFIER}'\`` };
47
+ }
48
+ function hasImport(source, specifier) {
49
+ // Match either form: with or without `.ts` extension, single or double quote.
50
+ const escaped = specifier.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
51
+ const re = new RegExp(`import\\s+['"]${escaped}(?:\\.ts)?['"]`);
52
+ return re.test(source);
53
+ }
54
+ //# sourceMappingURL=server-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-ts.js","sourceRoot":"","sources":["../../../src/phases/wire/server-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElD,OAAO,EAAE,OAAO,EAAmB,MAAM,UAAU,CAAA;AAKnD,MAAM,GAAG,GAAG,eAAe,CAAA;AAC3B,MAAM,gBAAgB,GAAG,yBAAyB,CAAA;AAClD,MAAM,OAAO,GAAG;UACN,gBAAgB;CACzB,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,GAAG,EAAE,WAAW;IAChB,KAAK,EAAE,kCAAkC,GAAG,EAAE;IAC9C,KAAK,CAAC,OAAO,CAAC,GAAG;QACf,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvB,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,KAAK,UAAU,GAAG,CAAC,GAAY,EAAE,MAAe;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,iDAAiD,EAAE,CAAA;IAChG,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,sCAAsC,EAAE,CAAA;IACrF,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,2BAA2B,gBAAgB,KAAK,EAAE,CAAA;IAC5F,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,CAAA;IAChG,IAAI,MAAkB,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,GAAG,GAAG,oDAAoD;YACnE,OAAO,EAAE,OAAO;SACjB,CAAA;IACH,CAAC;IAED,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACxE,MAAM,CAAC,QAAQ,EAAE,CAAA;IAEjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,wBAAwB,gBAAgB,KAAK,EAAE,CAAA;AACzF,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,SAAiB;IAClD,8EAA8E;IAC9E,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IAChE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,iBAAiB,OAAO,gBAAgB,CAAC,CAAA;IAC/D,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACxB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Context } from '../../context.js';
2
+ /**
3
+ * Outcome of a single wire sub-edit.
4
+ *
5
+ * done — the file changed (or the change is being applied right now in apply()).
6
+ * skipped — the file already had the wiring; no edit needed.
7
+ * manual — the change is too risky to automate (custom code, AST shape we don't
8
+ * recognise, file diverges from a known canonical) — the user must apply
9
+ * the printed `snippet` themselves.
10
+ * blocked — a hard error (file missing, unparseable, etc.) — installer cannot
11
+ * continue this sub-edit at all.
12
+ *
13
+ * Persisted into `state.wireSubEdits[<key>]` (only `'done' | 'manual' | 'skipped' |
14
+ * 'pending'` — `blocked` collapses to `'pending'` so re-run picks it up).
15
+ */
16
+ export type SubEditStatus = 'done' | 'skipped' | 'manual' | 'blocked';
17
+ export interface SubEditResult {
18
+ status: SubEditStatus;
19
+ /** Human-readable, single line — used in plan() notes and apply() logs. */
20
+ message: string;
21
+ /** Set on `manual` to print the exact text the user should paste. */
22
+ snippet?: string;
23
+ }
24
+ export interface SubEdit {
25
+ /** Stable key persisted into state.wireSubEdits. */
26
+ key: string;
27
+ /** Title shown in plan/preview. */
28
+ title: string;
29
+ /** Idempotent dry-check — no side effects. */
30
+ preview(ctx: Context): Promise<SubEditResult>;
31
+ /** Make the edit. May write files. */
32
+ apply(ctx: Context): Promise<SubEditResult>;
33
+ }
34
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,CAAA;IACrB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7C,sCAAsC;IACtC,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/phases/wire/shared.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { SubEdit } from './shared.js';
2
+ export declare const wireStartTs: SubEdit;
3
+ //# sourceMappingURL=start-ts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-ts.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/start-ts.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AAczD,eAAO,MAAM,WAAW,EAAE,OASzB,CAAA"}
@@ -0,0 +1,149 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { Node, Project, SyntaxKind, } from 'ts-morph';
3
+ const REL = 'src/start.ts';
4
+ const ADAPTER_NAME = 'bylineCodedErrorAdapter';
5
+ const ADAPTER_MODULE = '@byline/host-tanstack-start/integrations/start-errors';
6
+ const SNIPPET = `import { createStart } from '@tanstack/react-start'
7
+
8
+ import { ${ADAPTER_NAME} } from '${ADAPTER_MODULE}'
9
+
10
+ export const startInstance = createStart(() => ({
11
+ serializationAdapters: [${ADAPTER_NAME}],
12
+ }))
13
+ `;
14
+ export const wireStartTs = {
15
+ key: 'start-ts',
16
+ title: `Register ${ADAPTER_NAME} in ${REL}`,
17
+ async preview(ctx) {
18
+ return run(ctx, true);
19
+ },
20
+ async apply(ctx) {
21
+ return run(ctx, false);
22
+ },
23
+ };
24
+ async function run(ctx, dryRun) {
25
+ const path = ctx.resolve(REL);
26
+ if (!existsSync(path)) {
27
+ return { status: 'blocked', message: `${REL} not found — host phase should have caught this` };
28
+ }
29
+ const text = readFileSync(path, 'utf8');
30
+ // Cheap pre-check: if the adapter identifier is already referenced anywhere,
31
+ // assume the wiring is in place. Avoids a full AST round-trip on the common
32
+ // case where wire has already been run.
33
+ if (text.includes(ADAPTER_NAME)) {
34
+ return { status: 'skipped', message: `${REL}: ${ADAPTER_NAME} already registered` };
35
+ }
36
+ const project = new Project({ useInMemoryFileSystem: false, skipAddingFilesFromTsConfig: true });
37
+ let source;
38
+ try {
39
+ source = project.addSourceFileAtPath(path);
40
+ }
41
+ catch {
42
+ return manualBail(`${REL}: could not parse`);
43
+ }
44
+ const createStartCall = findCreateStartCall(source);
45
+ if (!createStartCall) {
46
+ return manualBail(`${REL}: no \`createStart(...)\` call found`);
47
+ }
48
+ const optionsLiteral = findReturnedOptionsObject(createStartCall);
49
+ if (!optionsLiteral) {
50
+ return manualBail(`${REL}: \`createStart\` factory does not return an inline object literal — cannot safely auto-edit`);
51
+ }
52
+ if (dryRun) {
53
+ return {
54
+ status: 'done',
55
+ message: `${REL}: will add ${ADAPTER_NAME} to serializationAdapters`,
56
+ };
57
+ }
58
+ ensureImport(source);
59
+ ensureAdapterInOptions(optionsLiteral);
60
+ source.saveSync();
61
+ return { status: 'done', message: `${REL}: registered ${ADAPTER_NAME}` };
62
+ }
63
+ function manualBail(message) {
64
+ return { status: 'manual', message, snippet: SNIPPET };
65
+ }
66
+ function findCreateStartCall(source) {
67
+ // Walk top-level descendants looking for any `createStart(...)` call.
68
+ for (const call of source.getDescendantsOfKind(SyntaxKind.CallExpression)) {
69
+ const expr = call.getExpression();
70
+ if (expr.getText() === 'createStart')
71
+ return call;
72
+ }
73
+ return undefined;
74
+ }
75
+ function findReturnedOptionsObject(call) {
76
+ const args = call.getArguments();
77
+ if (args.length === 0)
78
+ return undefined;
79
+ const factory = args[0];
80
+ if (!factory)
81
+ return undefined;
82
+ // Two supported shapes:
83
+ // createStart(() => ({ ... })) <- ArrowFunction with parenthesised object body
84
+ // createStart(() => { return { ... } }) <- ArrowFunction with return statement
85
+ if (Node.isArrowFunction(factory) || Node.isFunctionExpression(factory)) {
86
+ const body = factory.getBody();
87
+ if (Node.isParenthesizedExpression(body)) {
88
+ const inner = body.getExpression();
89
+ if (Node.isObjectLiteralExpression(inner))
90
+ return inner;
91
+ }
92
+ if (Node.isObjectLiteralExpression(body))
93
+ return body;
94
+ if (Node.isBlock(body)) {
95
+ const ret = body.getStatements().find(Node.isReturnStatement);
96
+ if (ret) {
97
+ const expr = ret.getExpression();
98
+ if (expr && Node.isObjectLiteralExpression(expr))
99
+ return expr;
100
+ if (expr && Node.isParenthesizedExpression(expr)) {
101
+ const inner = expr.getExpression();
102
+ if (Node.isObjectLiteralExpression(inner))
103
+ return inner;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ return undefined;
109
+ }
110
+ function ensureImport(source) {
111
+ const existing = source
112
+ .getImportDeclarations()
113
+ .find((d) => d.getModuleSpecifierValue() === ADAPTER_MODULE);
114
+ if (existing) {
115
+ const already = existing.getNamedImports().some((n) => n.getName() === ADAPTER_NAME);
116
+ if (!already)
117
+ existing.addNamedImport(ADAPTER_NAME);
118
+ return;
119
+ }
120
+ // Insert after the last existing import; if none, at the top.
121
+ const imports = source.getImportDeclarations();
122
+ source.insertImportDeclaration(imports.length, {
123
+ moduleSpecifier: ADAPTER_MODULE,
124
+ namedImports: [ADAPTER_NAME],
125
+ });
126
+ }
127
+ function ensureAdapterInOptions(options) {
128
+ const prop = options.getProperty('serializationAdapters');
129
+ if (!prop) {
130
+ options.addPropertyAssignment({
131
+ name: 'serializationAdapters',
132
+ initializer: `[${ADAPTER_NAME}]`,
133
+ });
134
+ return;
135
+ }
136
+ if (!Node.isPropertyAssignment(prop))
137
+ return;
138
+ const init = prop.getInitializer();
139
+ if (!init || !Node.isArrayLiteralExpression(init))
140
+ return;
141
+ ensureAdapterInArray(init);
142
+ }
143
+ function ensureAdapterInArray(arr) {
144
+ const already = arr.getElements().some((el) => el.getText() === ADAPTER_NAME);
145
+ if (already)
146
+ return;
147
+ arr.addElement(ADAPTER_NAME);
148
+ }
149
+ //# sourceMappingURL=start-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-ts.js","sourceRoot":"","sources":["../../../src/phases/wire/start-ts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SubEdit } from './shared.js';
2
+ export declare const wireTsconfig: SubEdit;
3
+ //# sourceMappingURL=tsconfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/tsconfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AAczD,eAAO,MAAM,YAAY,EAAE,OAS1B,CAAA"}
@@ -0,0 +1,105 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { applyEdits, modify, parse, parseTree } from 'jsonc-parser';
3
+ const REL = 'tsconfig.json';
4
+ const PATH_KEY = '~/*';
5
+ const PATH_VALUE = ['./byline/*'];
6
+ const SNIPPET = `// In tsconfig.json, ensure compilerOptions.paths contains the "~/*" alias:
7
+ {
8
+ "compilerOptions": {
9
+ "paths": {
10
+ "~/*": ["./byline/*"]
11
+ }
12
+ }
13
+ }`;
14
+ export const wireTsconfig = {
15
+ key: 'tsconfig',
16
+ title: `Add compilerOptions.paths["${PATH_KEY}"] to ${REL}`,
17
+ async preview(ctx) {
18
+ return run(ctx, true);
19
+ },
20
+ async apply(ctx) {
21
+ return run(ctx, false);
22
+ },
23
+ };
24
+ async function run(ctx, dryRun) {
25
+ const path = ctx.resolve(REL);
26
+ if (!existsSync(path)) {
27
+ return { status: 'blocked', message: `${REL} not found at the project root` };
28
+ }
29
+ const raw = readFileSync(path, 'utf8');
30
+ const errors = [];
31
+ const parsed = parse(raw, errors, { allowTrailingComma: true });
32
+ if (errors.length > 0 || !parsed) {
33
+ return {
34
+ status: 'manual',
35
+ message: `${REL}: could not parse as JSON / JSONC — please add the path mapping manually`,
36
+ snippet: SNIPPET,
37
+ };
38
+ }
39
+ const existing = parsed.compilerOptions?.paths?.[PATH_KEY];
40
+ if (Array.isArray(existing) && arraysEqual(existing, PATH_VALUE)) {
41
+ return { status: 'skipped', message: `${REL}: ${PATH_KEY} alias already correctly set` };
42
+ }
43
+ // The user has a *different* mapping for `~/*` — refuse to overwrite,
44
+ // bail to manual so they can decide how to reconcile.
45
+ if (existing !== undefined) {
46
+ return {
47
+ status: 'manual',
48
+ message: `${REL}: ${PATH_KEY} is mapped to a different value — refusing to overwrite`,
49
+ snippet: SNIPPET,
50
+ };
51
+ }
52
+ if (dryRun) {
53
+ return { status: 'done', message: `${REL}: will set ${PATH_KEY} → ${PATH_VALUE[0]}` };
54
+ }
55
+ const tree = parseTree(raw, [], { allowTrailingComma: true });
56
+ if (!tree) {
57
+ return {
58
+ status: 'manual',
59
+ message: `${REL}: could not build a syntax tree — please apply manually`,
60
+ snippet: SNIPPET,
61
+ };
62
+ }
63
+ // Inspect what already exists so we can choose the right anchor for `modify`.
64
+ const compilerOptions = findChild(tree, 'compilerOptions');
65
+ const paths = compilerOptions ? findChild(compilerOptions, 'paths') : undefined;
66
+ const indentChar = detectIndent(raw);
67
+ const edits = paths
68
+ ? modify(raw, ['compilerOptions', 'paths', PATH_KEY], PATH_VALUE, {
69
+ formattingOptions: { tabSize: indentChar.size, insertSpaces: indentChar.spaces },
70
+ })
71
+ : compilerOptions
72
+ ? modify(raw, ['compilerOptions', 'paths'], { [PATH_KEY]: PATH_VALUE }, {
73
+ formattingOptions: { tabSize: indentChar.size, insertSpaces: indentChar.spaces },
74
+ })
75
+ : modify(raw, ['compilerOptions'], { paths: { [PATH_KEY]: PATH_VALUE } }, { formattingOptions: { tabSize: indentChar.size, insertSpaces: indentChar.spaces } });
76
+ const next = applyEdits(raw, edits);
77
+ writeFileSync(path, next, 'utf8');
78
+ return { status: 'done', message: `${REL}: added ${PATH_KEY} → ${PATH_VALUE[0]}` };
79
+ }
80
+ function findChild(node, key) {
81
+ if (node.type !== 'object' || !node.children)
82
+ return undefined;
83
+ for (const prop of node.children) {
84
+ if (prop.type !== 'property' || !prop.children)
85
+ continue;
86
+ const [k, v] = prop.children;
87
+ if (k?.value === key)
88
+ return v;
89
+ }
90
+ return undefined;
91
+ }
92
+ function detectIndent(text) {
93
+ // Look at the first indented line.
94
+ const m = text.match(/\n([ \t]+)\S/);
95
+ if (!m)
96
+ return { size: 2, spaces: true };
97
+ const indent = m[1];
98
+ if (indent.startsWith('\t'))
99
+ return { size: 1, spaces: false };
100
+ return { size: indent.length, spaces: true };
101
+ }
102
+ function arraysEqual(a, b) {
103
+ return a.length === b.length && a.every((v, i) => v === b[i]);
104
+ }
105
+ //# sourceMappingURL=tsconfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../../../src/phases/wire/tsconfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SubEdit } from './shared.js';
2
+ export declare const wireViteConfig: SubEdit;
3
+ //# sourceMappingURL=vite-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AAKzD,eAAO,MAAM,cAAc,EAAE,OAS5B,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const REL = 'vite.config.ts';
4
+ const TEMPLATE_REL = 'host/vite.config.ts';
5
+ export const wireViteConfig = {
6
+ key: 'vite-config',
7
+ title: `Verify ${REL} matches the canonical Byline-on-TanStack-Start config`,
8
+ async preview(ctx) {
9
+ return run(ctx, true);
10
+ },
11
+ async apply(ctx) {
12
+ return run(ctx, false);
13
+ },
14
+ };
15
+ async function run(ctx, _dryRun) {
16
+ const path = ctx.resolve(REL);
17
+ if (!existsSync(path)) {
18
+ return {
19
+ status: 'blocked',
20
+ message: `${REL} not found — host phase should have caught this`,
21
+ };
22
+ }
23
+ const canonicalPath = join(ctx.templatesDir(), TEMPLATE_REL);
24
+ if (!existsSync(canonicalPath)) {
25
+ return {
26
+ status: 'blocked',
27
+ message: 'canonical vite.config.ts template missing from cli dist — was the package built?',
28
+ };
29
+ }
30
+ const userText = readFileSync(path, 'utf8');
31
+ const canonical = readFileSync(canonicalPath, 'utf8');
32
+ if (normalize(userText) === normalize(canonical)) {
33
+ return { status: 'skipped', message: `${REL}: already matches the canonical Byline config` };
34
+ }
35
+ // Per design decision #2: do not attempt to merge. Print canonical, bail to manual.
36
+ return {
37
+ status: 'manual',
38
+ message: `${REL}: differs from canonical — see snippet for required content`,
39
+ snippet: canonical,
40
+ };
41
+ }
42
+ function normalize(text) {
43
+ // Trailing whitespace + final newline differences shouldn't trigger manual.
44
+ return text.replace(/\s+$/g, '').replace(/\r\n/g, '\n');
45
+ }
46
+ //# sourceMappingURL=vite-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAKhC,MAAM,GAAG,GAAG,gBAAgB,CAAA;AAC5B,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,GAAG,EAAE,aAAa;IAClB,KAAK,EAAE,UAAU,GAAG,wDAAwD;IAC5E,KAAK,CAAC,OAAO,CAAC,GAAG;QACf,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvB,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,KAAK,UAAU,GAAG,CAAC,GAAY,EAAE,OAAgB;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,GAAG,GAAG,iDAAiD;SACjE,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC,CAAA;IAC5D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,kFAAkF;SAC5F,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACrD,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,+CAA+C,EAAE,CAAA;IAC9F,CAAC;IAED,oFAAoF;IACpF,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,GAAG,GAAG,6DAA6D;QAC5E,OAAO,EAAE,SAAS;KACnB,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,4EAA4E;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface Prompter {
2
+ text(opts: {
3
+ message: string;
4
+ placeholder?: string;
5
+ defaultValue?: string;
6
+ }): Promise<string>;
7
+ password(opts: {
8
+ message: string;
9
+ }): Promise<string>;
10
+ select<T extends string>(opts: {
11
+ message: string;
12
+ options: {
13
+ value: T;
14
+ label: string;
15
+ hint?: string;
16
+ }[];
17
+ }): Promise<T>;
18
+ confirm(opts: {
19
+ message: string;
20
+ defaultValue?: boolean;
21
+ }): Promise<boolean>;
22
+ spinner(): {
23
+ start(msg: string): void;
24
+ stop(msg?: string): void;
25
+ };
26
+ intro(msg: string): void;
27
+ outro(msg: string): void;
28
+ note(body: string, title?: string): void;
29
+ cancel(msg: string): never;
30
+ }
31
+ export declare function createPrompter(opts?: {
32
+ yes?: boolean;
33
+ }): Prompter;
34
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7F,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE;YAAE,KAAK,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KACtD,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACd,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5E,OAAO,IAAI;QAAE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACjE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;CAC3B;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,QAAQ,CAoCrE"}
@@ -0,0 +1,49 @@
1
+ import * as p from '@clack/prompts';
2
+ export function createPrompter(opts = {}) {
3
+ const yes = opts.yes === true;
4
+ return {
5
+ async text({ message, placeholder, defaultValue }) {
6
+ if (yes && defaultValue !== undefined)
7
+ return defaultValue;
8
+ const v = await p.text({ message, placeholder, defaultValue });
9
+ if (p.isCancel(v))
10
+ cancel('cancelled');
11
+ return v;
12
+ },
13
+ async password({ message }) {
14
+ const v = await p.password({ message });
15
+ if (p.isCancel(v))
16
+ cancel('cancelled');
17
+ return v;
18
+ },
19
+ async select({ message, options }) {
20
+ const first = options[0];
21
+ if (yes && first !== undefined)
22
+ return first.value;
23
+ const v = await p.select({ message, options: options });
24
+ if (p.isCancel(v))
25
+ cancel('cancelled');
26
+ return v;
27
+ },
28
+ async confirm({ message, defaultValue = true }) {
29
+ if (yes)
30
+ return defaultValue;
31
+ const v = await p.confirm({ message, initialValue: defaultValue });
32
+ if (p.isCancel(v))
33
+ cancel('cancelled');
34
+ return v;
35
+ },
36
+ spinner() {
37
+ return p.spinner();
38
+ },
39
+ intro: (m) => p.intro(m),
40
+ outro: (m) => p.outro(m),
41
+ note: (body, title) => p.note(body, title),
42
+ cancel,
43
+ };
44
+ }
45
+ function cancel(msg) {
46
+ p.cancel(msg);
47
+ process.exit(0);
48
+ }
49
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AAiBnC,MAAM,UAAU,cAAc,CAAC,OAA0B,EAAE;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAA;IAE7B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;YAC/C,IAAI,GAAG,IAAI,YAAY,KAAK,SAAS;gBAAE,OAAO,YAAY,CAAA;YAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,OAAO,CAAW,CAAA;QACpB,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE;YACxB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YACvC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,OAAO,CAAW,CAAA;QACpB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,GAAG,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC,KAAK,CAAA;YAClD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAgB,EAAE,CAAC,CAAA;YAChE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,OAAO,CAAU,CAAA;QACnB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,EAAE;YAC5C,IAAI,GAAG;gBAAE,OAAO,YAAY,CAAA;YAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAA;YAClE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,OAAO,CAAY,CAAA;QACrB,CAAC;QACD,OAAO;YACL,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;QACpB,CAAC;QACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1C,MAAM;KACP,CAAA;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Context } from './context.js';
2
+ import type { Phase, Plan } from './types.js';
3
+ export declare function runPhase(phase: Phase, ctx: Context): Promise<void>;
4
+ export declare function executePlan(plan: Plan, ctx: Context): Promise<void>;
5
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAE7C,wBAAsB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CxE;AAkCD,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE"}