@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 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/phases/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Phase } from '../types.js';
2
+ export declare const depsPhase: Phase;
3
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/phases/deps.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,KAAK,EAAgB,MAAM,aAAa,CAAA;AAQtE,eAAO,MAAM,SAAS,EAAE,KA8DvB,CAAA"}
@@ -0,0 +1,115 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { execa } from 'execa';
3
+ import { DEP_SPECS } from '../manifest/deps.js';
4
+ export const depsPhase = {
5
+ id: 'deps',
6
+ title: 'Deps — install required @byline/* and runtime packages',
7
+ defaultMode: 'auto',
8
+ async detect(ctx) {
9
+ if (ctx.state.isComplete('deps'))
10
+ return 'done';
11
+ const missing = computeMissing(ctx);
12
+ if (missing === null)
13
+ return 'blocked';
14
+ return missing.length === 0 ? 'done' : 'pending';
15
+ },
16
+ async plan(ctx) {
17
+ const missing = computeMissing(ctx);
18
+ if (missing === null) {
19
+ return {
20
+ writes: [],
21
+ commands: [],
22
+ notes: ['package.json not readable — run host phase first'],
23
+ };
24
+ }
25
+ if (missing.length === 0) {
26
+ return { writes: [], commands: [], notes: ['all required dependencies already declared'] };
27
+ }
28
+ const notes = [
29
+ `${missing.length} package(s) to install via ${ctx.pm}`,
30
+ ...missing.map(({ spec }) => ` + ${spec.name}@${spec.version} (${spec.group}) — ${spec.note}`),
31
+ ];
32
+ return { writes: [], commands: buildInstallCommands(ctx.pm, missing), notes };
33
+ },
34
+ async apply(_plan, ctx) {
35
+ const missing = computeMissing(ctx);
36
+ if (missing === null)
37
+ return { state: 'blocked' };
38
+ if (missing.length === 0) {
39
+ ctx.logger.info('all required dependencies already declared — nothing to install');
40
+ return { state: 'done' };
41
+ }
42
+ const commands = buildInstallCommands(ctx.pm, missing);
43
+ for (const c of commands) {
44
+ ctx.logger.step(`${c.command} ${c.args.join(' ')}`);
45
+ try {
46
+ await execa(c.command, c.args, { cwd: ctx.cwd, stdio: 'inherit' });
47
+ }
48
+ catch (e) {
49
+ ctx.logger.error(`install failed: ${e.message}`);
50
+ return { state: 'blocked' };
51
+ }
52
+ }
53
+ const stillMissing = computeMissing(ctx);
54
+ if (stillMissing && stillMissing.length > 0) {
55
+ ctx.logger.warn(`${stillMissing.length} package(s) still missing after install — package.json may not have been updated`);
56
+ return { state: 'partial' };
57
+ }
58
+ return { state: 'done' };
59
+ },
60
+ };
61
+ function computeMissing(ctx) {
62
+ const pkgPath = ctx.resolve('package.json');
63
+ if (!existsSync(pkgPath))
64
+ return null;
65
+ let pkg;
66
+ try {
67
+ pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ const deps = pkg.dependencies ?? {};
73
+ const devDeps = pkg.devDependencies ?? {};
74
+ const missing = [];
75
+ for (const spec of DEP_SPECS) {
76
+ const inDeps = deps[spec.name];
77
+ const inDev = devDeps[spec.name];
78
+ const present = inDeps ?? inDev ?? null;
79
+ if (present !== null)
80
+ continue;
81
+ missing.push({
82
+ spec,
83
+ presentIn: inDeps !== undefined ? 'dependencies' : inDev !== undefined ? 'devDependencies' : null,
84
+ presentVersion: present,
85
+ });
86
+ }
87
+ return missing;
88
+ }
89
+ function buildInstallCommands(pm, missing) {
90
+ const runtime = missing
91
+ .filter((m) => m.spec.group !== 'dev')
92
+ .map((m) => `${m.spec.name}@${m.spec.version}`);
93
+ const dev = missing
94
+ .filter((m) => m.spec.group === 'dev')
95
+ .map((m) => `${m.spec.name}@${m.spec.version}`);
96
+ const cmds = [];
97
+ if (runtime.length > 0)
98
+ cmds.push(installCommand(pm, runtime, false));
99
+ if (dev.length > 0)
100
+ cmds.push(installCommand(pm, dev, true));
101
+ return cmds;
102
+ }
103
+ function installCommand(pm, packages, dev) {
104
+ switch (pm) {
105
+ case 'pnpm':
106
+ return { command: 'pnpm', args: ['add', ...(dev ? ['-D'] : []), ...packages] };
107
+ case 'yarn':
108
+ return { command: 'yarn', args: ['add', ...(dev ? ['-D'] : []), ...packages] };
109
+ case 'bun':
110
+ return { command: 'bun', args: ['add', ...(dev ? ['-d'] : []), ...packages] };
111
+ case 'npm':
112
+ return { command: 'npm', args: ['install', dev ? '--save-dev' : '--save', ...packages] };
113
+ }
114
+ }
115
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/phases/deps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Phase } from '../types.js';
2
+ export declare const envPhase: Phase;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/phases/env.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,eAAO,MAAM,QAAQ,EAAE,KA2GtB,CAAA"}
@@ -0,0 +1,172 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { buildPgUrl } from '../lib/pg-url.js';
4
+ import { ENV_SPECS } from '../manifest/env.js';
5
+ export const envPhase = {
6
+ id: 'env',
7
+ title: 'Env — generate .env (JWT secret, admin credentials, DB connection)',
8
+ defaultMode: 'confirm',
9
+ async detect(ctx) {
10
+ if (ctx.state.isComplete('env'))
11
+ return 'done';
12
+ const a = ctx.state.get().answers;
13
+ if (!a.dbHost || !a.dbName || !a.dbUser)
14
+ return 'blocked';
15
+ return 'pending';
16
+ },
17
+ async plan(ctx) {
18
+ const envPath = ctx.resolve('.env');
19
+ const existing = readEnvFile(envPath);
20
+ const missing = ENV_SPECS.filter((s) => !existing[s.key]);
21
+ const notes = [];
22
+ if (existsSync(envPath)) {
23
+ notes.push(`.env exists — preserving existing keys, appending what is missing`);
24
+ }
25
+ else {
26
+ notes.push('.env does not exist — will create');
27
+ }
28
+ if (missing.length === 0) {
29
+ notes.push('all required keys already present — nothing to do');
30
+ }
31
+ else {
32
+ for (const s of missing)
33
+ notes.push(` + ${s.key} (${s.description})`);
34
+ }
35
+ return { writes: [], commands: [], notes };
36
+ },
37
+ async apply(_plan, ctx) {
38
+ const envPath = ctx.resolve('.env');
39
+ const existing = readEnvFile(envPath);
40
+ const missing = new Set(ENV_SPECS.filter((s) => !existing[s.key]).map((s) => s.key));
41
+ if (missing.size === 0) {
42
+ ctx.logger.info('all required env vars already set — leaving .env unchanged');
43
+ return { state: 'done' };
44
+ }
45
+ const a = ctx.state.get().answers;
46
+ if (!a.dbHost || !a.dbName || !a.dbUser) {
47
+ ctx.logger.error('db answers missing — run the db phase first');
48
+ return { state: 'blocked' };
49
+ }
50
+ const values = { ...existing };
51
+ if (missing.has('VITE_SERVER_URL')) {
52
+ ctx.prompter.note([
53
+ 'The URL where this installation will be running.',
54
+ 'Used by SSR rendering and as the base for admin UI links.',
55
+ 'For local dev the default is fine; in production set this to your',
56
+ 'public origin (e.g. https://cms.example.com).',
57
+ ].join('\n'), 'VITE_SERVER_URL');
58
+ values.VITE_SERVER_URL = await ctx.prompter.text({
59
+ message: 'Public origin URL',
60
+ placeholder: 'http://localhost:5173/',
61
+ defaultValue: 'http://localhost:5173/',
62
+ });
63
+ }
64
+ if (missing.has('BYLINE_JWT_SECRET')) {
65
+ values.BYLINE_JWT_SECRET = randomBytes(64).toString('base64url');
66
+ ctx.logger.step('generated BYLINE_JWT_SECRET (64 random bytes, base64url)');
67
+ }
68
+ if (missing.has('BYLINE_SUPERADMIN_EMAIL')) {
69
+ const email = await ctx.prompter.text({
70
+ message: 'Super-admin email',
71
+ defaultValue: a.adminEmail ?? 'admin@byline.local',
72
+ });
73
+ ctx.state.patchAnswers({ adminEmail: email });
74
+ values.BYLINE_SUPERADMIN_EMAIL = email;
75
+ }
76
+ if (missing.has('BYLINE_SUPERADMIN_PASSWORD')) {
77
+ const pw = await ctx.prompter.password({
78
+ message: 'Super-admin password (min 12 chars)',
79
+ });
80
+ if (!pw || pw.length < 12) {
81
+ ctx.logger.error('password must be at least 12 characters');
82
+ return { state: 'blocked' };
83
+ }
84
+ values.BYLINE_SUPERADMIN_PASSWORD = pw;
85
+ }
86
+ if (missing.has('DB_CONNECTION_STRING')) {
87
+ const dbPassword = await resolveDbPassword(ctx);
88
+ if (!dbPassword)
89
+ return { state: 'blocked' };
90
+ values.DB_CONNECTION_STRING = buildPgUrl({
91
+ host: a.dbHost,
92
+ port: a.dbPort ?? 5432,
93
+ user: a.dbUser,
94
+ password: dbPassword,
95
+ database: a.dbName,
96
+ });
97
+ }
98
+ writeFileSync(envPath, renderEnvFile(values), 'utf8');
99
+ ctx.logger.success(`wrote ${envPath}`);
100
+ return { state: 'done' };
101
+ },
102
+ };
103
+ async function resolveDbPassword(ctx) {
104
+ if (ctx.secrets.dbPassword)
105
+ return ctx.secrets.dbPassword;
106
+ const fromEnv = process.env.BYLINE_DB_PASSWORD;
107
+ if (fromEnv) {
108
+ ctx.logger.info('using app role password from BYLINE_DB_PASSWORD');
109
+ return fromEnv;
110
+ }
111
+ const pw = await ctx.prompter.password({
112
+ message: 'Application database role password (re-enter to compose DB_CONNECTION_STRING)',
113
+ });
114
+ if (!pw) {
115
+ ctx.logger.error('password is required to compose DB_CONNECTION_STRING');
116
+ return null;
117
+ }
118
+ ctx.secrets.dbPassword = pw;
119
+ return pw;
120
+ }
121
+ function readEnvFile(path) {
122
+ if (!existsSync(path))
123
+ return {};
124
+ const out = {};
125
+ const raw = readFileSync(path, 'utf8');
126
+ for (const line of raw.split(/\r?\n/)) {
127
+ const m = line.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/);
128
+ if (!m)
129
+ continue;
130
+ const key = m[1];
131
+ let val = (m[2] ?? '').trim();
132
+ if (val.startsWith('"') && val.endsWith('"')) {
133
+ val = val.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
134
+ }
135
+ else if (val.startsWith("'") && val.endsWith("'")) {
136
+ val = val.slice(1, -1);
137
+ }
138
+ out[key] = val;
139
+ }
140
+ return out;
141
+ }
142
+ function renderEnvFile(values) {
143
+ const known = new Set(ENV_SPECS.map((s) => s.key));
144
+ const groups = { app: [], database: [], auth: [] };
145
+ for (const spec of ENV_SPECS) {
146
+ const v = values[spec.key];
147
+ if (v === undefined)
148
+ continue;
149
+ groups[spec.group].push(`# ${spec.description}\n${spec.key}=${formatEnvValue(v)}`);
150
+ }
151
+ const sections = [];
152
+ if (groups.app.length)
153
+ sections.push(`# App\n${groups.app.join('\n\n')}`);
154
+ if (groups.database.length)
155
+ sections.push(`# Database\n${groups.database.join('\n\n')}`);
156
+ if (groups.auth.length)
157
+ sections.push(`# Auth\n${groups.auth.join('\n\n')}`);
158
+ const extras = Object.entries(values)
159
+ .filter(([k]) => !known.has(k))
160
+ .map(([k, v]) => `${k}=${formatEnvValue(v)}`);
161
+ if (extras.length)
162
+ sections.push(`# Existing\n${extras.join('\n')}`);
163
+ return `${sections.join('\n\n')}\n`;
164
+ }
165
+ function formatEnvValue(v) {
166
+ if (v === '')
167
+ return '';
168
+ if (/^[A-Za-z0-9_\-./:@+]+$/.test(v))
169
+ return v;
170
+ return `"${v.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
171
+ }
172
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/phases/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Phase } from '../types.js';
2
+ export declare const hostPhase: Phase;
3
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/phases/host.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,aAAa,CAAA;AAyBpD,eAAO,MAAM,SAAS,EAAE,KAmCvB,CAAA"}
@@ -0,0 +1,99 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ const TANSTACK_DEP = '@tanstack/react-start';
4
+ const REQUIRED_FILE = 'src/routes/__root.tsx';
5
+ const CREATABLE_FILES = [
6
+ {
7
+ rel: 'src/server.ts',
8
+ stub: `import handler, { createServerEntry } from '@tanstack/react-start/server-entry'
9
+
10
+ export default createServerEntry({
11
+ fetch(request) {
12
+ return handler.fetch(request)
13
+ },
14
+ })
15
+ `,
16
+ },
17
+ {
18
+ rel: 'src/start.ts',
19
+ stub: `import { createStart } from '@tanstack/react-start'
20
+
21
+ export const startInstance = createStart(() => ({}))
22
+ `,
23
+ },
24
+ ];
25
+ export const hostPhase = {
26
+ id: 'host',
27
+ title: 'Host — detect TanStack Start application',
28
+ defaultMode: 'auto',
29
+ async detect(ctx) {
30
+ return inspectHost(ctx).state;
31
+ },
32
+ async plan(ctx) {
33
+ return { writes: [], commands: [], notes: inspectHost(ctx).notes };
34
+ },
35
+ async apply(_plan, ctx) {
36
+ const r = inspectHost(ctx);
37
+ if (r.state === 'blocked') {
38
+ ctx.logger.error('host detection failed:');
39
+ for (const n of r.notes)
40
+ ctx.logger.error(` ${n}`);
41
+ ctx.logger.info('see https://tanstack.com/start/latest/docs/framework/react/quick-start to bootstrap a new app');
42
+ return { state: 'blocked' };
43
+ }
44
+ for (const n of r.notes)
45
+ ctx.logger.info(n);
46
+ for (const f of CREATABLE_FILES) {
47
+ const abs = ctx.resolve(f.rel);
48
+ if (existsSync(abs))
49
+ continue;
50
+ mkdirSync(dirname(abs), { recursive: true });
51
+ writeFileSync(abs, f.stub, 'utf8');
52
+ ctx.logger.success(`created ${f.rel} (minimal stub — wire phase will register Byline)`);
53
+ }
54
+ return { state: 'done' };
55
+ },
56
+ };
57
+ function inspectHost(ctx) {
58
+ const notes = [];
59
+ const pkgPath = ctx.resolve('package.json');
60
+ if (!existsSync(pkgPath)) {
61
+ return { state: 'blocked', notes: ['no package.json in current directory'] };
62
+ }
63
+ let pkg;
64
+ try {
65
+ pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
66
+ }
67
+ catch (e) {
68
+ return { state: 'blocked', notes: [`package.json parse error: ${e.message}`] };
69
+ }
70
+ const deps = { ...(pkg.dependencies ?? {}) };
71
+ if (!deps[TANSTACK_DEP]) {
72
+ return {
73
+ state: 'blocked',
74
+ notes: [
75
+ `${TANSTACK_DEP} not found in dependencies — this doesn't look like a TanStack Start app`,
76
+ ],
77
+ };
78
+ }
79
+ notes.push(`${TANSTACK_DEP} ${deps[TANSTACK_DEP]} — detected`);
80
+ // __root.tsx is the only hard requirement — without it the app has no
81
+ // routes whatsoever and isn't really a TanStack Start app yet.
82
+ if (!existsSync(ctx.resolve(REQUIRED_FILE))) {
83
+ return {
84
+ state: 'blocked',
85
+ notes: [...notes, `missing required file: ${REQUIRED_FILE}`],
86
+ };
87
+ }
88
+ // server.ts / start.ts are optional in some bare TanStack Start templates
89
+ // — we'll create minimal stubs in apply() if they're absent so the wire
90
+ // phase has something to inject into.
91
+ const willCreate = CREATABLE_FILES.filter((f) => !existsSync(ctx.resolve(f.rel))).map((f) => f.rel);
92
+ if (willCreate.length > 0) {
93
+ notes.push(`will create minimal stubs for: ${willCreate.join(', ')}`);
94
+ return { state: 'pending', notes };
95
+ }
96
+ notes.push('found src/server.ts, src/start.ts, src/routes/__root.tsx');
97
+ return { state: 'done', notes };
98
+ }
99
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/phases/host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Phase, PhaseId } from '../types.js';
2
+ export declare const PHASES: Phase[];
3
+ export declare const PHASE_IDS: PhaseId[];
4
+ export declare function findPhase(id: PhaseId): Phase | undefined;
5
+ export declare function phasesFrom(id: PhaseId): Phase[];
6
+ export declare function phasesBetween(from: PhaseId | undefined, to: PhaseId | undefined): Phase[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/phases/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,MAAM,EAAE,KAAK,EAYzB,CAAA;AAED,eAAO,MAAM,SAAS,EAA8B,OAAO,EAAE,CAAA;AAE7D,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAExD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,CAG/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,EAAE,CAKzF"}
@@ -0,0 +1,40 @@
1
+ import { dbPhase } from './db.js';
2
+ import { dbInitPhase } from './db-init.js';
3
+ import { depsPhase } from './deps.js';
4
+ import { envPhase } from './env.js';
5
+ import { hostPhase } from './host.js';
6
+ import { preflightPhase } from './preflight.js';
7
+ import { routesPhase } from './routes.js';
8
+ import { scaffoldPhase } from './scaffold.js';
9
+ import { stubPhase } from './stub.js';
10
+ import { uiPhase } from './ui.js';
11
+ import { wirePhase } from './wire/index.js';
12
+ export const PHASES = [
13
+ preflightPhase,
14
+ hostPhase,
15
+ dbPhase,
16
+ dbInitPhase,
17
+ envPhase,
18
+ depsPhase,
19
+ scaffoldPhase,
20
+ wirePhase,
21
+ routesPhase,
22
+ uiPhase,
23
+ stubPhase('verify', 'Verify — typecheck and smoke-test admin route'),
24
+ ];
25
+ export const PHASE_IDS = PHASES.map((p) => p.id);
26
+ export function findPhase(id) {
27
+ return PHASES.find((p) => p.id === id);
28
+ }
29
+ export function phasesFrom(id) {
30
+ const idx = PHASES.findIndex((p) => p.id === id);
31
+ return idx === -1 ? [] : PHASES.slice(idx);
32
+ }
33
+ export function phasesBetween(from, to) {
34
+ const fromIdx = from ? PHASES.findIndex((p) => p.id === from) : 0;
35
+ const toIdx = to ? PHASES.findIndex((p) => p.id === to) : PHASES.length - 1;
36
+ if (fromIdx === -1 || toIdx === -1 || fromIdx > toIdx)
37
+ return [];
38
+ return PHASES.slice(fromIdx, toIdx + 1);
39
+ }
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,cAAc;IACd,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;IACR,SAAS;IACT,aAAa;IACb,SAAS;IACT,WAAW;IACX,OAAO;IACP,SAAS,CAAC,QAAQ,EAAE,+CAA+C,CAAC;CACrE,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAc,CAAA;AAE7D,MAAM,UAAU,SAAS,CAAC,EAAW;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAW;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAChD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAyB,EAAE,EAAuB;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3E,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,EAAE,CAAA;IAChE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PackageManager, Phase } from '../types.js';
2
+ export declare const preflightPhase: Phase;
3
+ export declare function detectPackageManager(cwd: string): PackageManager;
4
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/phases/preflight.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExD,eAAO,MAAM,cAAc,EAAE,KAoC5B,CAAA;AAwBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAgBhE"}
@@ -0,0 +1,81 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ export const preflightPhase = {
3
+ id: 'preflight',
4
+ title: 'Preflight — environment checks',
5
+ defaultMode: 'auto',
6
+ async detect(ctx) {
7
+ return ctx.state.isComplete('preflight') ? 'done' : 'pending';
8
+ },
9
+ async plan(_ctx) {
10
+ return { writes: [], commands: [], notes: ['check Node version, git repo, package manager'] };
11
+ },
12
+ async apply(_plan, ctx) {
13
+ const major = Number(process.versions.node.split('.')[0]);
14
+ if (major < 20) {
15
+ ctx.logger.error(`Node 20.9+ required (found ${process.versions.node})`);
16
+ return { state: 'blocked' };
17
+ }
18
+ if (!existsSync(ctx.resolve('.git'))) {
19
+ ctx.logger.warn('not a git repository — strongly recommended for installer rollback');
20
+ const ok = await ctx.prompter.confirm({
21
+ message: 'Continue without git?',
22
+ defaultValue: false,
23
+ });
24
+ if (!ok)
25
+ return { state: 'blocked' };
26
+ }
27
+ const pm = await resolvePackageManager(ctx);
28
+ ctx.pm = pm;
29
+ ctx.state.patchAnswers({ pm });
30
+ ctx.logger.info(`package manager: ${pm}`);
31
+ return { state: 'done' };
32
+ },
33
+ };
34
+ async function resolvePackageManager(ctx) {
35
+ const fromFlag = ctx.cliFlags.pm;
36
+ if (fromFlag) {
37
+ ctx.logger.info(`using --pm ${fromFlag}`);
38
+ return fromFlag;
39
+ }
40
+ const detected = detectPackageManager(ctx.cwd);
41
+ if (ctx.yes)
42
+ return detected;
43
+ // Put the detected manager first so --yes / pressing Enter accepts it,
44
+ // but let the user pick another if their fresh app has no lockfile yet
45
+ // and the detection defaulted to pnpm.
46
+ const others = ['pnpm', 'npm', 'yarn', 'bun'].filter((p) => p !== detected);
47
+ return ctx.prompter.select({
48
+ message: 'Package manager to use for installs',
49
+ options: [
50
+ { value: detected, label: detected, hint: 'detected' },
51
+ ...others.map((p) => ({ value: p, label: p })),
52
+ ],
53
+ });
54
+ }
55
+ export function detectPackageManager(cwd) {
56
+ if (existsSync(`${cwd}/pnpm-lock.yaml`))
57
+ return 'pnpm';
58
+ if (existsSync(`${cwd}/bun.lockb`) || existsSync(`${cwd}/bun.lock`))
59
+ return 'bun';
60
+ if (existsSync(`${cwd}/yarn.lock`))
61
+ return 'yarn';
62
+ if (existsSync(`${cwd}/package-lock.json`))
63
+ return 'npm';
64
+ const pkgPath = `${cwd}/package.json`;
65
+ if (existsSync(pkgPath)) {
66
+ try {
67
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
68
+ if (pkg.packageManager?.startsWith('pnpm'))
69
+ return 'pnpm';
70
+ if (pkg.packageManager?.startsWith('yarn'))
71
+ return 'yarn';
72
+ if (pkg.packageManager?.startsWith('bun'))
73
+ return 'bun';
74
+ if (pkg.packageManager?.startsWith('npm'))
75
+ return 'npm';
76
+ }
77
+ catch { }
78
+ }
79
+ return 'pnpm';
80
+ }
81
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/phases/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Phase } from '../types.js';
2
+ export declare const routesPhase: Phase;
3
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/phases/routes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAexC,eAAO,MAAM,WAAW,EAAE,KAsFzB,CAAA"}