@byline/cli 3.21.0 → 4.1.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 (183) hide show
  1. package/README.md +29 -3
  2. package/dist/cli.js +5 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/doctor.d.ts.map +1 -1
  5. package/dist/commands/doctor.js +1 -0
  6. package/dist/commands/doctor.js.map +1 -1
  7. package/dist/commands/init.d.ts +3 -0
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +10 -14
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/setup-checks.d.ts +9 -0
  12. package/dist/commands/setup-checks.d.ts.map +1 -1
  13. package/dist/commands/setup-checks.js +43 -18
  14. package/dist/commands/setup-checks.js.map +1 -1
  15. package/dist/commands/setup.js +1 -1
  16. package/dist/commands/setup.js.map +1 -1
  17. package/dist/context.d.ts +2 -0
  18. package/dist/context.d.ts.map +1 -1
  19. package/dist/context.js +6 -0
  20. package/dist/context.js.map +1 -1
  21. package/dist/lib/dependency-version.d.ts +12 -0
  22. package/dist/lib/dependency-version.d.ts.map +1 -0
  23. package/dist/lib/dependency-version.js +101 -0
  24. package/dist/lib/dependency-version.js.map +1 -0
  25. package/dist/lib/planned-writes.d.ts +8 -0
  26. package/dist/lib/planned-writes.d.ts.map +1 -0
  27. package/dist/lib/planned-writes.js +177 -0
  28. package/dist/lib/planned-writes.js.map +1 -0
  29. package/dist/lib/planned-writes.test.d.ts +2 -0
  30. package/dist/lib/planned-writes.test.d.ts.map +1 -0
  31. package/dist/lib/planned-writes.test.js +113 -0
  32. package/dist/lib/planned-writes.test.js.map +1 -0
  33. package/dist/lib/release-policy.d.ts +12 -0
  34. package/dist/lib/release-policy.d.ts.map +1 -0
  35. package/dist/lib/release-policy.js +20 -0
  36. package/dist/lib/release-policy.js.map +1 -0
  37. package/dist/lib/release-policy.test.d.ts +2 -0
  38. package/dist/lib/release-policy.test.d.ts.map +1 -0
  39. package/dist/lib/release-policy.test.js +36 -0
  40. package/dist/lib/release-policy.test.js.map +1 -0
  41. package/dist/lib/route-config.d.ts +40 -0
  42. package/dist/lib/route-config.d.ts.map +1 -0
  43. package/dist/lib/route-config.js +322 -0
  44. package/dist/lib/route-config.js.map +1 -0
  45. package/dist/lib/static-config.d.ts +20 -0
  46. package/dist/lib/static-config.d.ts.map +1 -0
  47. package/dist/lib/static-config.js +444 -0
  48. package/dist/lib/static-config.js.map +1 -0
  49. package/dist/lib/static-config.test.d.ts +2 -0
  50. package/dist/lib/static-config.test.d.ts.map +1 -0
  51. package/dist/lib/static-config.test.js +105 -0
  52. package/dist/lib/static-config.test.js.map +1 -0
  53. package/dist/lib/template-hook-boundary.test.node.d.ts +2 -0
  54. package/dist/lib/template-hook-boundary.test.node.d.ts.map +1 -0
  55. package/dist/lib/template-hook-boundary.test.node.js +30 -0
  56. package/dist/lib/template-hook-boundary.test.node.js.map +1 -0
  57. package/dist/lib/template-path.d.ts +5 -0
  58. package/dist/lib/template-path.d.ts.map +1 -0
  59. package/dist/lib/template-path.js +9 -0
  60. package/dist/lib/template-path.js.map +1 -0
  61. package/dist/lib/workspace-root.d.ts +28 -0
  62. package/dist/lib/workspace-root.d.ts.map +1 -0
  63. package/dist/lib/workspace-root.js +205 -0
  64. package/dist/lib/workspace-root.js.map +1 -0
  65. package/dist/manifest/deps.d.ts +1 -1
  66. package/dist/manifest/deps.d.ts.map +1 -1
  67. package/dist/manifest/deps.js +24 -8
  68. package/dist/manifest/deps.js.map +1 -1
  69. package/dist/phases/deps.d.ts +14 -1
  70. package/dist/phases/deps.d.ts.map +1 -1
  71. package/dist/phases/deps.js +312 -137
  72. package/dist/phases/deps.js.map +1 -1
  73. package/dist/phases/deps.test.d.ts +2 -0
  74. package/dist/phases/deps.test.d.ts.map +1 -0
  75. package/dist/phases/deps.test.js +343 -0
  76. package/dist/phases/deps.test.js.map +1 -0
  77. package/dist/phases/preflight.d.ts.map +1 -1
  78. package/dist/phases/preflight.js +59 -11
  79. package/dist/phases/preflight.js.map +1 -1
  80. package/dist/phases/prompts.d.ts +2 -0
  81. package/dist/phases/prompts.d.ts.map +1 -1
  82. package/dist/phases/prompts.js +51 -2
  83. package/dist/phases/prompts.js.map +1 -1
  84. package/dist/phases/routes-ui.test.d.ts +2 -0
  85. package/dist/phases/routes-ui.test.d.ts.map +1 -0
  86. package/dist/phases/routes-ui.test.js +766 -0
  87. package/dist/phases/routes-ui.test.js.map +1 -0
  88. package/dist/phases/routes.d.ts +4 -1
  89. package/dist/phases/routes.d.ts.map +1 -1
  90. package/dist/phases/routes.js +610 -122
  91. package/dist/phases/routes.js.map +1 -1
  92. package/dist/phases/scaffold-smoke.test.d.ts +2 -0
  93. package/dist/phases/scaffold-smoke.test.d.ts.map +1 -0
  94. package/dist/phases/scaffold-smoke.test.js +175 -0
  95. package/dist/phases/scaffold-smoke.test.js.map +1 -0
  96. package/dist/phases/scaffold.d.ts +3 -2
  97. package/dist/phases/scaffold.d.ts.map +1 -1
  98. package/dist/phases/scaffold.js +268 -91
  99. package/dist/phases/scaffold.js.map +1 -1
  100. package/dist/phases/scaffold.test.js +171 -22
  101. package/dist/phases/scaffold.test.js.map +1 -1
  102. package/dist/phases/ui.d.ts +4 -1
  103. package/dist/phases/ui.d.ts.map +1 -1
  104. package/dist/phases/ui.js +51 -59
  105. package/dist/phases/ui.js.map +1 -1
  106. package/dist/phases/wire/index.d.ts.map +1 -1
  107. package/dist/phases/wire/index.js +10 -6
  108. package/dist/phases/wire/index.js.map +1 -1
  109. package/dist/phases/wire/shared.d.ts +4 -1
  110. package/dist/phases/wire/shared.d.ts.map +1 -1
  111. package/dist/phases/wire/vite-config.d.ts.map +1 -1
  112. package/dist/phases/wire/vite-config.js +69 -20
  113. package/dist/phases/wire/vite-config.js.map +1 -1
  114. package/dist/phases/wire/vite-config.test.d.ts +2 -0
  115. package/dist/phases/wire/vite-config.test.d.ts.map +1 -0
  116. package/dist/phases/wire/vite-config.test.js +97 -0
  117. package/dist/phases/wire/vite-config.test.js.map +1 -0
  118. package/dist/prompts.d.ts +1 -0
  119. package/dist/prompts.d.ts.map +1 -1
  120. package/dist/prompts.js +7 -2
  121. package/dist/prompts.js.map +1 -1
  122. package/dist/runner.js +1 -1
  123. package/dist/runner.js.map +1 -1
  124. package/dist/templates/byline/collection-types.contract.ts +26 -1
  125. package/dist/templates/byline/collections/index.ts +1 -1
  126. package/dist/templates/byline/collections/server-hooks.ts +7 -0
  127. package/dist/templates/byline/generated/collection-types.ts +14 -6
  128. package/dist/templates/byline/routes.ts +7 -6
  129. package/dist/templates/byline/server.config.ts +10 -1
  130. package/dist/templates/byline-examples/admin.config.ts +7 -12
  131. package/dist/templates/byline-examples/blocks/photo-block.ts +3 -2
  132. package/dist/templates/byline-examples/collection-types.contract.ts +26 -1
  133. package/dist/templates/byline-examples/collections/docs/hooks.ts +23 -13
  134. package/dist/templates/byline-examples/collections/docs/schema.ts +2 -11
  135. package/dist/templates/byline-examples/collections/index.ts +1 -1
  136. package/dist/templates/byline-examples/collections/media/components/media-list-view.tsx +11 -6
  137. package/dist/templates/byline-examples/collections/media/schema.ts +3 -0
  138. package/dist/templates/byline-examples/collections/news/schema.ts +4 -3
  139. package/dist/templates/byline-examples/collections/server-hooks.ts +8 -0
  140. package/dist/templates/byline-examples/fields/ai-text.ts +1 -1
  141. package/dist/templates/byline-examples/fields/ai-textarea.ts +1 -1
  142. package/dist/templates/byline-examples/fields/lexical-richtext-ai.tsx +3 -3
  143. package/dist/templates/byline-examples/generated/collection-types.ts +138 -130
  144. package/dist/templates/byline-examples/routes.ts +7 -6
  145. package/dist/templates/byline-examples/scripts/backfill-version-locales.ts +1 -1
  146. package/dist/templates/byline-examples/scripts/import-docs.ts +10 -11
  147. package/dist/templates/byline-examples/scripts/lib/mdast-to-lexical.test.node.ts +93 -233
  148. package/dist/templates/byline-examples/scripts/lib/mdast-to-lexical.ts +2 -2
  149. package/dist/templates/byline-examples/scripts/lib/strip-leading-h1.test.node.ts +0 -4
  150. package/dist/templates/byline-examples/scripts/re-anchor.ts +3 -3
  151. package/dist/templates/byline-examples/scripts/regenerate-media-operation.ts +112 -0
  152. package/dist/templates/byline-examples/scripts/regenerate-media.ts +129 -92
  153. package/dist/templates/byline-examples/server.config.ts +14 -6
  154. package/dist/templates/host/vite.config.ts +2 -0
  155. package/dist/templates/routes/_byline/route.lazy.tsx +1 -2
  156. package/dist/templates/routes/_byline/route.tsx +1 -1
  157. package/dist/templates/ui-byline/blocks/photo-block/index.tsx +18 -22
  158. package/dist/templates/ui-byline/blocks/richtext-block/index.tsx +1 -1
  159. package/dist/templates/ui-byline/components/admonition/index.tsx +11 -8
  160. package/dist/templates/ui-byline/components/code/code.tsx +6 -4
  161. package/dist/templates/ui-byline/components/link/lang-link.tsx +4 -8
  162. package/dist/templates/ui-byline/components/link/link-field.tsx +3 -2
  163. package/dist/templates/ui-byline/components/link/link-lexical.tsx +9 -8
  164. package/dist/templates/ui-byline/render-blocks.tsx +38 -34
  165. package/dist/templates/ui-byline/types/content.ts +25 -0
  166. package/dist/templates/ui-byline/types/i18n.ts +4 -8
  167. package/dist/test-helpers.d.ts +5 -0
  168. package/dist/test-helpers.d.ts.map +1 -0
  169. package/dist/test-helpers.js +52 -0
  170. package/dist/test-helpers.js.map +1 -0
  171. package/dist/types.d.ts +21 -1
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/ui-template-contract.test.d.ts +2 -0
  174. package/dist/ui-template-contract.test.d.ts.map +1 -0
  175. package/dist/ui-template-contract.test.js +150 -0
  176. package/dist/ui-template-contract.test.js.map +1 -0
  177. package/dist/workspace-root.test.d.ts +2 -0
  178. package/dist/workspace-root.test.d.ts.map +1 -0
  179. package/dist/workspace-root.test.js +311 -0
  180. package/dist/workspace-root.test.js.map +1 -0
  181. package/package.json +9 -1
  182. package/dist/templates/byline/client.server.ts +0 -32
  183. package/dist/templates/byline-examples/client.server.ts +0 -32
@@ -0,0 +1,322 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { evaluateExportedArrayObjectProperties, evaluateExportedObjectProperties, hasExportedCoreResolveRoutesCall, } from './static-config.js';
4
+ import { normalizeTemplateSource } from './template-path.js';
5
+ export const DEFAULT_ADMIN_PATH = '/admin';
6
+ export const DEFAULT_SIGN_IN_PATH = '/sign-in';
7
+ const ROUTE_SEGMENT_REGEX = /^[a-z][a-z0-9-]*$/;
8
+ const SYSTEM_ROUTE_SEGMENTS = new Set(['_serverfn', '_build', 'uploads', 'static', 'public']);
9
+ const FILESYSTEM_SPECIAL_SEGMENTS = new Set(['index', 'route']);
10
+ export const PREVIOUS_RELEASE_ROUTES_SOURCE = `/**
11
+ * This Source Code is subject to the terms of the Mozilla Public
12
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
13
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
14
+ *
15
+ * Copyright (c) Infonomic Company Limited
16
+ */
17
+
18
+ /**
19
+ * URL segments for admin and (future) public API routes. Defaults of
20
+ * \`/admin\` and \`/api\` are applied automatically by \`resolveRoutes()\` —
21
+ * keys only need to be set here when overriding either default.
22
+ */
23
+
24
+ import type { RoutesConfig } from '@byline/core'
25
+
26
+ export const routes: Partial<RoutesConfig> = {
27
+ admin: '/admin',
28
+ api: '/api',
29
+ }
30
+
31
+ /**
32
+ * Fallback used by both server and admin entry points when no
33
+ * \`VITE_SERVER_URL\` env var is set. Each entry resolves the env var
34
+ * itself (Vite's \`import.meta.env\` on the client, Node's \`process.env\`
35
+ * on the server) and falls back to this literal.
36
+ */
37
+ export const DEFAULT_SERVER_URL = 'http://localhost:5173/'
38
+ `;
39
+ export function validateRoutePaths(ctx, adminInput = DEFAULT_ADMIN_PATH, signInInput = DEFAULT_SIGN_IN_PATH, apiInput) {
40
+ let resolvedApiInput = apiInput;
41
+ if (resolvedApiInput === undefined) {
42
+ const configured = readConfiguredRoutes(ctx);
43
+ if (!configured.ok)
44
+ return configured;
45
+ resolvedApiInput = configured.value.api;
46
+ }
47
+ const admin = canonicalizePath(adminInput, 'admin', DEFAULT_ADMIN_PATH);
48
+ if (!admin.ok)
49
+ return admin;
50
+ const api = canonicalizePath(resolvedApiInput, 'API', '/api');
51
+ if (!api.ok)
52
+ return api;
53
+ const signIn = canonicalizePath(signInInput, 'sign-in', DEFAULT_SIGN_IN_PATH);
54
+ if (!signIn.ok)
55
+ return signIn;
56
+ const adminRoot = admin.segments[0];
57
+ const apiRoot = api.segments[0];
58
+ const signInRoot = signIn.segments[0];
59
+ if (!adminRoot || !apiRoot || !signInRoot) {
60
+ return { ok: false, error: 'route paths must not be empty' };
61
+ }
62
+ const reservedResult = reservedRouteSegments(ctx);
63
+ if (!reservedResult.ok)
64
+ return reservedResult;
65
+ const reserved = reservedResult.value;
66
+ if (reserved.has(adminRoot) || SYSTEM_ROUTE_SEGMENTS.has(adminRoot)) {
67
+ return {
68
+ ok: false,
69
+ error: `invalid admin path "${adminInput}" — "${adminRoot}" conflicts with a locale or system route tree`,
70
+ };
71
+ }
72
+ if (reserved.has(apiRoot) || SYSTEM_ROUTE_SEGMENTS.has(apiRoot)) {
73
+ return {
74
+ ok: false,
75
+ error: `invalid API path "${resolvedApiInput}" — "${apiRoot}" conflicts with a locale or system route tree`,
76
+ };
77
+ }
78
+ if (reserved.has(signInRoot) || SYSTEM_ROUTE_SEGMENTS.has(signInRoot)) {
79
+ return {
80
+ ok: false,
81
+ error: `invalid sign-in path "${signInInput}" — "${signInRoot}" conflicts with a locale or system route tree`,
82
+ };
83
+ }
84
+ if (pathsOverlap(admin.path, api.path)) {
85
+ return {
86
+ ok: false,
87
+ error: `invalid admin path "${adminInput}" — conflicts with API path "${api.path}"; they must use separate route trees`,
88
+ };
89
+ }
90
+ if (pathsOverlap(signIn.path, admin.path)) {
91
+ if (signIn.path === DEFAULT_SIGN_IN_PATH && admin.path !== DEFAULT_ADMIN_PATH) {
92
+ return {
93
+ ok: false,
94
+ error: `invalid admin path "${adminInput}" — conflicts with the sign-in route`,
95
+ };
96
+ }
97
+ return {
98
+ ok: false,
99
+ error: `invalid sign-in path "${signInInput}" — conflicts with the admin route tree`,
100
+ };
101
+ }
102
+ if (pathsOverlap(signIn.path, api.path)) {
103
+ return {
104
+ ok: false,
105
+ error: `invalid sign-in path "${signInInput}" — conflicts with the API route tree`,
106
+ };
107
+ }
108
+ const adminSpecial = admin.segments.find((segment) => FILESYSTEM_SPECIAL_SEGMENTS.has(segment));
109
+ if (adminSpecial !== undefined) {
110
+ return {
111
+ ok: false,
112
+ error: `invalid admin path "${adminInput}" — "${adminSpecial}" is reserved by TanStack file routing`,
113
+ };
114
+ }
115
+ const apiSpecial = api.segments.find((segment) => FILESYSTEM_SPECIAL_SEGMENTS.has(segment));
116
+ if (apiSpecial !== undefined) {
117
+ return {
118
+ ok: false,
119
+ error: `invalid API path "${resolvedApiInput}" — "${apiSpecial}" is reserved by TanStack file routing`,
120
+ };
121
+ }
122
+ const signInSpecial = signIn.segments.find((segment) => FILESYSTEM_SPECIAL_SEGMENTS.has(segment));
123
+ if (signInSpecial !== undefined) {
124
+ return {
125
+ ok: false,
126
+ error: `invalid sign-in path "${signInInput}" — "${signInSpecial}" is reserved by TanStack file routing`,
127
+ };
128
+ }
129
+ return {
130
+ ok: true,
131
+ value: {
132
+ adminPath: admin.path,
133
+ adminSegments: admin.segments,
134
+ apiPath: api.path,
135
+ apiSegments: api.segments,
136
+ signInPath: signIn.path,
137
+ signInSegments: signIn.segments,
138
+ },
139
+ };
140
+ }
141
+ /** Recognize only generated routes.ts sources with route literals as the sole variation. */
142
+ export function recognizeGeneratedRoutesSource(source, canonical) {
143
+ const parsed = readStaticRoutesSource(source);
144
+ if (!parsed.ok)
145
+ return null;
146
+ const current = renderGeneratedRoutesSource(canonical, parsed.value.admin, parsed.value.api, parsed.value.signIn);
147
+ if (normalizeTemplateSource(source) === normalizeTemplateSource(current)) {
148
+ return {
149
+ adminPath: parsed.value.admin,
150
+ apiPath: parsed.value.api,
151
+ signInPath: parsed.value.signIn,
152
+ };
153
+ }
154
+ const previous = renderGeneratedRoutesSource(PREVIOUS_RELEASE_ROUTES_SOURCE, parsed.value.admin, parsed.value.api, parsed.value.signIn);
155
+ return normalizeTemplateSource(source) === normalizeTemplateSource(previous)
156
+ ? {
157
+ adminPath: parsed.value.admin,
158
+ apiPath: parsed.value.api,
159
+ signInPath: parsed.value.signIn,
160
+ }
161
+ : null;
162
+ }
163
+ export function readStaticRoutesSource(source) {
164
+ const evaluated = evaluateExportedObjectProperties(source, 'routes', ['admin', 'api', 'signIn']);
165
+ if (!evaluated.ok)
166
+ return evaluated;
167
+ const routes = {
168
+ admin: evaluated.value.admin ?? DEFAULT_ADMIN_PATH,
169
+ api: evaluated.value.api ?? '/api',
170
+ signIn: evaluated.value.signIn ?? DEFAULT_SIGN_IN_PATH,
171
+ };
172
+ if (typeof routes.admin !== 'string' ||
173
+ typeof routes.api !== 'string' ||
174
+ typeof routes.signIn !== 'string') {
175
+ return staticFailure('routes.api, routes.admin, and routes.signIn must be static strings');
176
+ }
177
+ return { ok: true, value: routes };
178
+ }
179
+ export function routesSourceAligned(source, ctx, expected) {
180
+ const routes = readStaticRoutesSource(source);
181
+ if (!routes.ok)
182
+ return false;
183
+ const validated = validateRoutePaths(ctx, routes.value.admin, routes.value.signIn, routes.value.api);
184
+ return (validated.ok &&
185
+ validated.value.adminPath === expected.adminPath &&
186
+ validated.value.apiPath === expected.apiPath &&
187
+ validated.value.signInPath === expected.signInPath);
188
+ }
189
+ export function renderGeneratedRoutesSource(canonical, adminPath, apiPath, signInPath) {
190
+ return canonical
191
+ .replace(/(admin\s*:\s*['"])[^'"]+(['"])/, `$1${adminPath}$2`)
192
+ .replace(/(api\s*:\s*['"])[^'"]+(['"])/, `$1${apiPath}$2`)
193
+ .replace(/(signIn\s*:\s*['"])[^'"]+(['"])/, `$1${signInPath}$2`);
194
+ }
195
+ export function validateCanonicalRoutesSource(source) {
196
+ if (!hasExportedCoreResolveRoutesCall(source, 'routes')) {
197
+ return staticFailure('canonical routes.ts must export the recognized core resolveRoutes call');
198
+ }
199
+ const parsed = readStaticRoutesSource(source);
200
+ if (!parsed.ok)
201
+ return parsed;
202
+ if (parsed.value.admin !== DEFAULT_ADMIN_PATH ||
203
+ parsed.value.api !== '/api' ||
204
+ parsed.value.signIn !== DEFAULT_SIGN_IN_PATH) {
205
+ return staticFailure('canonical routes.ts must contain the default route values');
206
+ }
207
+ const probe = readStaticRoutesSource(renderGeneratedRoutesSource(source, '/probe/admin', '/probe/api', '/probe/sign-in'));
208
+ if (!probe.ok ||
209
+ probe.value.admin !== '/probe/admin' ||
210
+ probe.value.api !== '/probe/api' ||
211
+ probe.value.signIn !== '/probe/sign-in') {
212
+ return staticFailure('canonical routes.ts route literals cannot be transformed safely');
213
+ }
214
+ return parsed;
215
+ }
216
+ export function canonicalRoutesTemplatePath(ctx) {
217
+ const prefix = ctx.state.get().answers.examples !== false ? 'byline-examples' : 'byline';
218
+ return join(ctx.templatesDir(), prefix, 'routes.ts');
219
+ }
220
+ function canonicalizePath(input, label, fallback) {
221
+ const trimmed = input.trim() || fallback;
222
+ if (trimmed.startsWith('//') ||
223
+ trimmed.includes('\\') ||
224
+ trimmed.includes('?') ||
225
+ trimmed.includes('#') ||
226
+ trimmed.includes('%') ||
227
+ trimmed.includes(':') ||
228
+ /\s/.test(trimmed)) {
229
+ return {
230
+ ok: false,
231
+ error: `invalid ${label} path "${input}" — must be an unencoded root-relative URL path`,
232
+ };
233
+ }
234
+ const segments = trimmed.split('/').filter(Boolean);
235
+ if (segments.length === 0 || segments.some((segment) => !ROUTE_SEGMENT_REGEX.test(segment))) {
236
+ return {
237
+ ok: false,
238
+ error: `invalid ${label} path "${input}" — must contain one or more segments matching ${ROUTE_SEGMENT_REGEX}`,
239
+ };
240
+ }
241
+ return { ok: true, path: `/${segments.join('/')}`, segments };
242
+ }
243
+ function reservedRouteSegments(ctx) {
244
+ const reserved = new Set();
245
+ const examples = ctx.state.get().answers.examples !== false;
246
+ const localePath = ctx.resolve('byline/locales.ts');
247
+ const publicLocalePath = ctx.resolve('src/i18n/i18n-config.ts');
248
+ const templatePrefix = examples ? 'byline-examples' : 'byline';
249
+ const selectedLocalePath = existsSync(localePath)
250
+ ? localePath
251
+ : join(ctx.templatesDir(), templatePrefix, 'locales.ts');
252
+ if (existsSync(selectedLocalePath)) {
253
+ const locales = readContentLocaleCodes(readFileSync(selectedLocalePath, 'utf8'));
254
+ if (!locales.ok)
255
+ return configFailure(selectedLocalePath, locales.error);
256
+ for (const locale of locales.value)
257
+ reserved.add(locale.toLowerCase());
258
+ }
259
+ if (existsSync(publicLocalePath)) {
260
+ const locales = readPublicLocaleValues(readFileSync(publicLocalePath, 'utf8'));
261
+ if (!locales.ok)
262
+ return configFailure(publicLocalePath, locales.error);
263
+ for (const locale of [...locales.value.locales, locales.value.defaultLocale]) {
264
+ reserved.add(locale.toLowerCase());
265
+ }
266
+ }
267
+ return { ok: true, value: reserved };
268
+ }
269
+ function readConfiguredRoutes(ctx) {
270
+ const installedPath = ctx.resolve('byline/routes.ts');
271
+ const path = existsSync(installedPath) ? installedPath : canonicalRoutesTemplatePath(ctx);
272
+ if (!existsSync(path))
273
+ return configFailure(path, 'canonical routes.ts template is missing');
274
+ const source = readFileSync(path, 'utf8');
275
+ if (existsSync(installedPath)) {
276
+ const routes = readStaticRoutesSource(source);
277
+ return routes.ok ? routes : configFailure(path, routes.error);
278
+ }
279
+ const canonical = validateCanonicalRoutesSource(source);
280
+ return canonical.ok
281
+ ? canonical
282
+ : configFailure(path, `canonical routes.ts template is invalid (${canonical.error})`);
283
+ }
284
+ function readContentLocaleCodes(source) {
285
+ const evaluated = evaluateExportedArrayObjectProperties(source, 'contentLocales', ['code']);
286
+ if (!evaluated.ok)
287
+ return evaluated;
288
+ const codes = [];
289
+ for (const locale of evaluated.value) {
290
+ if (typeof locale.code !== 'string') {
291
+ return staticFailure('contentLocales entries must have static string codes');
292
+ }
293
+ codes.push(locale.code);
294
+ }
295
+ return { ok: true, value: codes };
296
+ }
297
+ function readPublicLocaleValues(source) {
298
+ const evaluated = evaluateExportedObjectProperties(source, 'i18nConfig', [
299
+ 'locales',
300
+ 'defaultLocale',
301
+ ]);
302
+ if (!evaluated.ok)
303
+ return evaluated;
304
+ const { locales, defaultLocale } = evaluated.value;
305
+ if (!Array.isArray(locales) || !locales.every((locale) => typeof locale === 'string')) {
306
+ return staticFailure('i18nConfig.locales must be a static string array');
307
+ }
308
+ if (typeof defaultLocale !== 'string') {
309
+ return staticFailure('i18nConfig.defaultLocale must be a static string');
310
+ }
311
+ return { ok: true, value: { locales, defaultLocale } };
312
+ }
313
+ function pathsOverlap(left, right) {
314
+ return left === right || left.startsWith(`${right}/`) || right.startsWith(`${left}/`);
315
+ }
316
+ function configFailure(path, error) {
317
+ return staticFailure(`${path}: manual — cannot safely resolve route configuration (${error})`);
318
+ }
319
+ function staticFailure(error) {
320
+ return { ok: false, error };
321
+ }
322
+ //# sourceMappingURL=route-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-config.js","sourceRoot":"","sources":["../../src/lib/route-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type StaticValue = string | number | boolean | null | StaticValue[] | StaticObject;
2
+ export interface StaticObject {
3
+ [key: string]: StaticValue;
4
+ }
5
+ export type StaticResult<T> = {
6
+ ok: true;
7
+ value: T;
8
+ } | {
9
+ ok: false;
10
+ error: string;
11
+ };
12
+ /** Parse one exported const without loading, transpiling, or executing its source. */
13
+ export declare function evaluateExportedConst(source: string, exportName: string): StaticResult<StaticValue>;
14
+ /** Evaluate only named properties; unrelated property initializers are never visited. */
15
+ export declare function evaluateExportedObjectProperties(source: string, exportName: string, propertyNames: readonly string[]): StaticResult<StaticObject>;
16
+ /** Evaluate named properties from each object in an exported array. */
17
+ export declare function evaluateExportedArrayObjectProperties(source: string, exportName: string, propertyNames: readonly string[]): StaticResult<StaticObject[]>;
18
+ export declare function hasExportedCoreResolveRoutesCall(source: string, exportName: string): boolean;
19
+ export declare function isStaticObject(value: StaticValue): value is StaticObject;
20
+ //# sourceMappingURL=static-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-config.d.ts","sourceRoot":"","sources":["../../src/lib/static-config.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,WAAW,EAAE,GAAG,YAAY,CAAA;AAEzF,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAC3B;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAcnF,sFAAsF;AACtF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,YAAY,CAAC,WAAW,CAAC,CAqB3B;AAED,yFAAyF;AACzF,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,YAAY,CAAC,YAAY,CAAC,CAI5B;AAED,uEAAuE;AACvE,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,YAAY,CAAC,YAAY,EAAE,CAAC,CAa9B;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAqB5F;AAoYD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,YAAY,CAExE"}