@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,311 @@
1
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { afterEach, describe, expect, it } from 'vitest';
5
+ import { CLI_PACKAGE_VERSION } from './lib/release-policy.js';
6
+ import { resolveWorkspaceOwnership, validateWorkspacePackageManager, workspaceManagerConstraint, } from './lib/workspace-root.js';
7
+ import { DEP_SPECS } from './manifest/deps.js';
8
+ import { depsPhase } from './phases/deps.js';
9
+ import { detectPackageManager, preflightPhase } from './phases/preflight.js';
10
+ import { buildScaffoldPlan } from './phases/scaffold.js';
11
+ import { createTestContextAt } from './test-helpers.js';
12
+ const roots = [];
13
+ afterEach(() => {
14
+ for (const root of roots.splice(0))
15
+ rmSync(root, { recursive: true, force: true });
16
+ });
17
+ describe('workspace root ownership', () => {
18
+ it('plans root settings and targets a nested pnpm app without creating nested workspace files', async () => {
19
+ const root = monorepo('pnpm');
20
+ const app = join(root, 'apps/webapp');
21
+ const dependencies = compatibleDependencies();
22
+ delete dependencies.classnames;
23
+ writeFileSync(join(app, 'package.json'), `${JSON.stringify({ name: '@fixture/webapp', dependencies, scripts: {} }, null, 2)}\n`);
24
+ writeFileSync(join(root, 'pnpm-workspace.yaml'), 'packages:\n - apps/*\n');
25
+ writeFileSync(join(root, 'turbo.json'), '{"tasks":{}}\n');
26
+ mkdirSync(join(root, '.github/workflows'), { recursive: true });
27
+ writeFileSync(join(root, '.github/workflows/ci.yml'), 'steps:\n - run: pnpm typecheck\n');
28
+ const ctx = createTestContextAt(app, { examples: false });
29
+ ctx.pm = 'pnpm';
30
+ expect(ctx.workspaceRoot).toBe(root);
31
+ const deps = await depsPhase.plan(ctx);
32
+ expect(deps.writes.some((write) => write.path === join(root, 'pnpm-workspace.yaml'))).toBe(true);
33
+ expect(deps.writes.some((write) => write.path === join(app, 'pnpm-workspace.yaml'))).toBe(false);
34
+ expect(deps.commands[0]).toMatchObject({
35
+ cwd: root,
36
+ command: 'pnpm',
37
+ args: ['--filter', './apps/webapp', 'add', 'classnames@^2.5.1'],
38
+ });
39
+ const scaffold = buildScaffoldPlan(ctx);
40
+ expect(scaffold.writes.some((write) => write.path === join(root, 'turbo.json'))).toBe(true);
41
+ expect(scaffold.writes.some((write) => write.path === join(app, 'package.json'))).toBe(true);
42
+ expect(scaffold.notes.join('\n')).toContain(join(root, '.github/workflows/ci.yml'));
43
+ });
44
+ it('uses pnpm workspace-root mode when the app owns the root', async () => {
45
+ const root = mkdtempSync(join(tmpdir(), 'byline-pnpm-root-'));
46
+ roots.push(root);
47
+ const dependencies = compatibleDependencies();
48
+ delete dependencies.classnames;
49
+ writeFileSync(join(root, 'package.json'), `${JSON.stringify({ name: '@fixture/root-app', dependencies })}\n`);
50
+ const ctx = createTestContextAt(root, { examples: false });
51
+ ctx.pm = 'pnpm';
52
+ const command = (await depsPhase.plan(ctx)).commands[0];
53
+ expect(command).toEqual({
54
+ command: 'pnpm',
55
+ args: ['add', '-w', 'classnames@^2.5.1'],
56
+ cwd: root,
57
+ });
58
+ });
59
+ it.each([
60
+ ['yarn', 'yarn.lock'],
61
+ ['npm', 'package-lock.json'],
62
+ ['bun', 'bun.lock'],
63
+ ])('detects %s from a workspace ancestor', (manager, lockfile) => {
64
+ const root = monorepo(manager);
65
+ writeFileSync(join(root, lockfile), '');
66
+ expect(detectPackageManager(join(root, 'apps/webapp'))).toBe(manager);
67
+ });
68
+ it.each([
69
+ 'yarn',
70
+ 'npm',
71
+ 'bun',
72
+ ])('synchronizes a completed setup/doctor preflight from persisted %s state', async (manager) => {
73
+ const root = mkdtempSync(join(tmpdir(), 'byline-persisted-manager-'));
74
+ roots.push(root);
75
+ writeFileSync(join(root, 'package.json'), '{"name":"standalone"}\n');
76
+ const ctx = createTestContextAt(root);
77
+ ctx.state.patchAnswers({ pm: manager });
78
+ ctx.state.markPhaseComplete('preflight');
79
+ ctx.pm = 'pnpm';
80
+ expect(await preflightPhase.detect(ctx)).toBe('done');
81
+ expect(ctx.pm).toBe(manager);
82
+ });
83
+ it.each([
84
+ 'root',
85
+ 'nested',
86
+ ])('blocks noninteractive manager defaulting in a package.json-only %s workspace', async (location) => {
87
+ const root = packageJsonOnlyWorkspace();
88
+ const cwd = location === 'root' ? root : join(root, 'apps/webapp');
89
+ mkdirSync(join(cwd, '.git'), { recursive: true });
90
+ const ctx = createTestContextAt(cwd);
91
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('blocked');
92
+ });
93
+ it.each([
94
+ 'root',
95
+ 'nested',
96
+ ])('creates complete pnpm metadata for an explicit package.json-only %s workspace', async (location) => {
97
+ const root = packageJsonOnlyWorkspace();
98
+ const cwd = location === 'root' ? root : join(root, 'apps/webapp');
99
+ mkdirSync(join(cwd, '.git'), { recursive: true });
100
+ const packagePath = join(cwd, 'package.json');
101
+ const existing = JSON.parse(readFileSync(packagePath, 'utf8'));
102
+ writeFileSync(packagePath, `${JSON.stringify({ ...existing, dependencies: compatibleDependencies() })}\n`);
103
+ const ctx = createTestContextAt(cwd, { examples: false });
104
+ ctx.cliFlags.pm = 'pnpm';
105
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('done');
106
+ const deps = await depsPhase.plan(ctx);
107
+ const workspaceWrite = deps.writes.find((write) => write.path === join(root, 'pnpm-workspace.yaml'));
108
+ expect(workspaceWrite?.contents).toContain('packages:');
109
+ expect(workspaceWrite?.contents).toContain('apps/*');
110
+ expect(workspaceWrite?.contents).toContain('allowBuilds:');
111
+ expect((await depsPhase.apply(deps, ctx)).state).toBe('done');
112
+ expect(resolveWorkspaceOwnership(cwd)).toMatchObject({ root, kind: 'pnpm' });
113
+ });
114
+ it.each([
115
+ 'npm',
116
+ 'yarn',
117
+ 'bun',
118
+ ])('uses explicit %s in a package.json-only workspace without creating pnpm metadata', async (manager) => {
119
+ const root = packageJsonOnlyWorkspace();
120
+ const app = join(root, 'apps/webapp');
121
+ const dependencies = compatibleDependencies();
122
+ delete dependencies.classnames;
123
+ writeFileSync(join(app, 'package.json'), `${JSON.stringify({ name: '@fixture/webapp', dependencies })}\n`);
124
+ mkdirSync(join(app, '.git'));
125
+ const ctx = createTestContextAt(app, { examples: false });
126
+ ctx.cliFlags.pm = manager;
127
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('done');
128
+ const deps = await depsPhase.plan(ctx);
129
+ expect(deps.writes.some((write) => write.path.endsWith('pnpm-workspace.yaml'))).toBe(false);
130
+ expect(deps.commands[0]?.command).toBe(manager);
131
+ });
132
+ it.each([
133
+ 'yarn',
134
+ 'npm',
135
+ 'bun',
136
+ ])('targets a nested app safely with %s', async (manager) => {
137
+ const root = monorepo(manager);
138
+ const app = join(root, 'apps/webapp');
139
+ const dependencies = compatibleDependencies();
140
+ delete dependencies.classnames;
141
+ writeFileSync(join(app, 'package.json'), `${JSON.stringify({ name: '@fixture/webapp', dependencies })}\n`);
142
+ const ctx = createTestContextAt(app, { examples: false });
143
+ ctx.pm = manager;
144
+ const command = (await depsPhase.plan(ctx)).commands[0];
145
+ expect(command?.command).toBe(manager);
146
+ if (manager === 'yarn') {
147
+ expect(command).toMatchObject({ cwd: root });
148
+ expect(command?.args.slice(0, 3)).toEqual(['workspace', '@fixture/webapp', 'add']);
149
+ }
150
+ else if (manager === 'npm') {
151
+ expect(command).toMatchObject({ cwd: root });
152
+ expect(command?.args).toEqual(expect.arrayContaining(['--workspace', './apps/webapp', 'classnames@^2.5.1']));
153
+ }
154
+ else {
155
+ expect(command).toMatchObject({ cwd: app });
156
+ expect(command?.args).toContain('classnames@^2.5.1');
157
+ }
158
+ });
159
+ it('resolves a bare workspace link from local workspace package metadata', async () => {
160
+ const root = monorepo('pnpm');
161
+ const app = join(root, 'apps/webapp');
162
+ mkdirSync(join(root, 'packages/core'), { recursive: true });
163
+ writeFileSync(join(root, 'pnpm-workspace.yaml'), 'packages:\n - apps/*\n - packages/*\nallowBuilds:\n "@google/genai": true\n esbuild: true\n protobufjs: true\n sharp: true\n');
164
+ // The workspace-linked package's version must satisfy the CLI's derived
165
+ // release policy (`>=<cli version> <next major>`), which Changesets bumps
166
+ // every release — track it rather than pinning a literal that goes stale.
167
+ writeFileSync(join(root, 'packages/core/package.json'), `{"name":"@byline/core","version":"${CLI_PACKAGE_VERSION}"}\n`);
168
+ const dependencies = compatibleDependencies();
169
+ dependencies['@byline/core'] = 'workspace:*';
170
+ writeFileSync(join(app, 'package.json'), `${JSON.stringify({ dependencies })}\n`);
171
+ const ctx = createTestContextAt(app, { examples: false });
172
+ ctx.pm = 'pnpm';
173
+ expect(await depsPhase.detect(ctx)).toBe('done');
174
+ });
175
+ it('keeps an excluded nested standalone app isolated from an outer pnpm workspace', async () => {
176
+ const root = monorepo('pnpm');
177
+ writeFileSync(join(root, 'pnpm-workspace.yaml'), 'packages:\n - apps/*\n - "!apps/excluded"\n');
178
+ writeFileSync(join(root, 'turbo.json'), '{"tasks":{}}\n');
179
+ mkdirSync(join(root, '.github/workflows'), { recursive: true });
180
+ writeFileSync(join(root, '.github/workflows/ci.yml'), 'steps:\n - run: pnpm typecheck\n');
181
+ const standalone = join(root, 'apps/excluded');
182
+ mkdirSync(standalone, { recursive: true });
183
+ const standaloneDependencies = compatibleDependencies();
184
+ delete standaloneDependencies.classnames;
185
+ writeFileSync(join(standalone, 'package.json'), `${JSON.stringify({ packageManager: 'npm@11', dependencies: standaloneDependencies })}\n`);
186
+ const ctx = createTestContextAt(standalone, { examples: false });
187
+ expect(ctx.workspaceRoot).toBe(standalone);
188
+ expect(detectPackageManager(standalone)).toBe('npm');
189
+ const scaffold = buildScaffoldPlan(ctx);
190
+ expect(scaffold.writes.some((write) => write.path === join(root, 'turbo.json'))).toBe(false);
191
+ expect(scaffold.notes.join('\n')).not.toContain(join(root, '.github/workflows/ci.yml'));
192
+ ctx.pm = 'pnpm';
193
+ const deps = await depsPhase.plan(ctx);
194
+ expect(deps.writes.some((write) => write.path === join(root, 'pnpm-workspace.yaml'))).toBe(false);
195
+ expect(deps.writes.some((write) => write.path === join(standalone, 'pnpm-workspace.yaml'))).toBe(true);
196
+ expect(deps.commands[0]).toMatchObject({ cwd: standalone, command: 'pnpm' });
197
+ expect(deps.commands[0]?.args).not.toContain('--filter');
198
+ expect(existsSync(join(standalone, 'pnpm-workspace.yaml'))).toBe(false);
199
+ });
200
+ it.each([
201
+ ['pnpm', 'npm'],
202
+ ['npm', 'pnpm'],
203
+ ['yarn', 'npm'],
204
+ ['bun', 'yarn'],
205
+ ])('blocks %s workspace use with explicit %s', async (workspaceManager, selected) => {
206
+ const root = monorepo(workspaceManager);
207
+ const app = join(root, 'apps/webapp');
208
+ if (workspaceManager === 'pnpm') {
209
+ writeFileSync(join(root, 'pnpm-workspace.yaml'), 'packages:\n - apps/*\n');
210
+ }
211
+ writeFileSync(join(app, 'package.json'), '{"name":"@fixture/webapp"}\n');
212
+ mkdirSync(join(app, '.git'));
213
+ const ctx = createTestContextAt(app);
214
+ ctx.cliFlags.pm = selected;
215
+ const validation = validateWorkspacePackageManager(app, selected);
216
+ expect(validation).toEqual({
217
+ valid: false,
218
+ expected: workspaceManager,
219
+ reason: `owning workspace uses ${workspaceManager}; use --pm ${workspaceManager}`,
220
+ });
221
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('blocked');
222
+ });
223
+ it('uses the authoritative workspace manager instead of prompting for another', async () => {
224
+ const root = monorepo('yarn');
225
+ const app = join(root, 'apps/webapp');
226
+ writeFileSync(join(app, 'package.json'), '{"name":"@fixture/webapp"}\n');
227
+ mkdirSync(join(app, '.git'));
228
+ const ctx = createTestContextAt(app);
229
+ ctx.pm = 'pnpm';
230
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('done');
231
+ expect(ctx.pm).toBe('yarn');
232
+ });
233
+ it('blocks a previously prompted manager that conflicts with the workspace', async () => {
234
+ const root = monorepo('bun');
235
+ const app = join(root, 'apps/webapp');
236
+ writeFileSync(join(app, 'package.json'), '{"name":"@fixture/webapp"}\n');
237
+ mkdirSync(join(app, '.git'));
238
+ const ctx = createTestContextAt(app);
239
+ ctx.state.patchAnswers({ pm: 'npm' });
240
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('blocked');
241
+ });
242
+ it('allows an explicit manager for a standalone app without authoritative metadata', async () => {
243
+ const root = mkdtempSync(join(tmpdir(), 'byline-standalone-manager-'));
244
+ roots.push(root);
245
+ writeFileSync(join(root, 'package.json'), '{"name":"standalone"}\n');
246
+ mkdirSync(join(root, '.git'));
247
+ const ctx = createTestContextAt(root);
248
+ ctx.cliFlags.pm = 'bun';
249
+ expect((await preflightPhase.apply(await preflightPhase.plan(ctx), ctx)).state).toBe('done');
250
+ expect(ctx.pm).toBe('bun');
251
+ });
252
+ it('blocks ambiguous manager metadata consistently for root and nested apps', async () => {
253
+ const root = monorepo('npm');
254
+ const app = join(root, 'apps/webapp');
255
+ writeFileSync(join(root, 'yarn.lock'), '');
256
+ const rootConstraint = workspaceManagerConstraint(root);
257
+ const nestedConstraint = workspaceManagerConstraint(app);
258
+ expect(rootConstraint).toMatchObject({ authoritative: true, ambiguous: true });
259
+ expect(nestedConstraint).toEqual(rootConstraint);
260
+ expect(() => detectPackageManager(app)).toThrow('workspace package manager metadata conflicts');
261
+ });
262
+ it('blocks cross-manager dependency plans before creating workspace settings', async () => {
263
+ const root = monorepo('npm');
264
+ const app = join(root, 'apps/webapp');
265
+ writeFileSync(join(app, 'package.json'), `${JSON.stringify({ dependencies: compatibleDependencies() })}\n`);
266
+ const ctx = createTestContextAt(app, { examples: false });
267
+ ctx.pm = 'pnpm';
268
+ const plan = await depsPhase.plan(ctx);
269
+ expect(plan.writes).toEqual([]);
270
+ expect(plan.commands).toEqual([]);
271
+ expect(plan.notes.join('\n')).toContain('owning workspace uses npm; use --pm npm');
272
+ expect((await depsPhase.apply(plan, ctx)).state).toBe('blocked');
273
+ expect(existsSync(join(root, 'pnpm-workspace.yaml'))).toBe(false);
274
+ });
275
+ it.each([
276
+ 'npm',
277
+ 'yarn',
278
+ ])('does not emit %s workspace commands inside a pnpm workspace', async (manager) => {
279
+ const root = monorepo('pnpm');
280
+ const app = join(root, 'apps/webapp');
281
+ writeFileSync(join(root, 'pnpm-workspace.yaml'), 'packages:\n - apps/*\n');
282
+ const dependencies = compatibleDependencies();
283
+ delete dependencies.classnames;
284
+ writeFileSync(join(app, 'package.json'), `${JSON.stringify({ dependencies })}\n`);
285
+ const ctx = createTestContextAt(app, { examples: false });
286
+ ctx.pm = manager;
287
+ const plan = await depsPhase.plan(ctx);
288
+ expect(plan.commands).toEqual([]);
289
+ expect(plan.writes).toEqual([]);
290
+ expect((await depsPhase.apply(plan, ctx)).state).toBe('blocked');
291
+ });
292
+ });
293
+ function monorepo(packageManager) {
294
+ const root = mkdtempSync(join(tmpdir(), 'byline-monorepo-'));
295
+ roots.push(root);
296
+ mkdirSync(join(root, 'apps/webapp'), { recursive: true });
297
+ writeFileSync(join(root, 'package.json'), `${JSON.stringify({ private: true, packageManager: `${packageManager}@1.0.0`, workspaces: ['apps/*'] })}\n`);
298
+ return root;
299
+ }
300
+ function packageJsonOnlyWorkspace() {
301
+ const root = mkdtempSync(join(tmpdir(), 'byline-package-workspace-'));
302
+ roots.push(root);
303
+ mkdirSync(join(root, 'apps/webapp'), { recursive: true });
304
+ writeFileSync(join(root, 'package.json'), '{"private":true,"workspaces":["apps/*"],"name":"root"}\n');
305
+ writeFileSync(join(root, 'apps/webapp/package.json'), '{"name":"@fixture/webapp"}\n');
306
+ return root;
307
+ }
308
+ function compatibleDependencies() {
309
+ return Object.fromEntries(DEP_SPECS.filter((spec) => !spec.optional).map((spec) => [spec.name, spec.version]));
310
+ }
311
+ //# sourceMappingURL=workspace-root.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-root.test.js","sourceRoot":"","sources":["../src/workspace-root.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@byline/cli",
3
3
  "private": false,
4
4
  "license": "MPL-2.0",
5
- "version": "3.21.0",
5
+ "version": "4.1.0",
6
6
  "engines": {
7
7
  "node": ">=20.9.0"
8
8
  },
@@ -39,8 +39,10 @@
39
39
  "drizzle-orm": "^0.45.2",
40
40
  "execa": "^9.6.1",
41
41
  "jsonc-parser": "^3.3.1",
42
+ "minimatch": "^10.2.4",
42
43
  "pg": "^8.22.0",
43
44
  "picocolors": "^1.1.1",
45
+ "semver": "^7.7.3",
44
46
  "ts-morph": "^28.0.0",
45
47
  "yaml": "^2.9.0"
46
48
  },
@@ -49,10 +51,16 @@
49
51
  "@types/diff": "^8.0.0",
50
52
  "@types/node": "^26.1.0",
51
53
  "@types/pg": "^8.20.0",
54
+ "@types/semver": "^7.7.1",
55
+ "@types/mdast": "^4.0.4",
56
+ "mdast-util-to-string": "^4.0.0",
57
+ "remark-gfm": "^4.0.1",
58
+ "remark-parse": "^11.0.0",
52
59
  "rimraf": "^6.1.3",
53
60
  "tsc-alias": "^1.9.0",
54
61
  "tsx": "^4.23.0",
55
62
  "typescript": "^7.0.2",
63
+ "unified": "^11.0.5",
56
64
  "vitest": "^4.1.10"
57
65
  },
58
66
  "publishConfig": {
@@ -1,32 +0,0 @@
1
- /**
2
- * This Source Code is subject to the terms of the Mozilla Public
3
- * License, v. 2.0. If a copy of the MPL was not distributed with this
4
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
- *
6
- * Copyright (c) Infonomic Company Limited
7
- */
8
-
9
- /**
10
- * Server-only application boundary for the host-owned client singletons.
11
- * The host stays config-agnostic; this assertion binds it to the app registry.
12
- */
13
- import type { BylineClient } from '@byline/client'
14
- import {
15
- getAdminBylineClient as getHostAdminBylineClient,
16
- getSystemBylineClient as getHostSystemBylineClient,
17
- } from '@byline/host-tanstack-start/integrations/byline-client'
18
- import { getPublicBylineClient as getHostPublicBylineClient } from '@byline/host-tanstack-start/integrations/byline-public-client'
19
- import {
20
- getViewerBylineClient as getHostViewerBylineClient,
21
- isPreviewActive,
22
- } from '@byline/host-tanstack-start/integrations/byline-viewer-client'
23
-
24
- import type { BylineCollections } from './collections/index.js'
25
-
26
- type AppBylineClient = BylineClient<BylineCollections>
27
-
28
- export const getAdminBylineClient = getHostAdminBylineClient as () => AppBylineClient
29
- export const getPublicBylineClient = getHostPublicBylineClient as () => AppBylineClient
30
- export const getSystemBylineClient = getHostSystemBylineClient as () => AppBylineClient
31
- export const getViewerBylineClient = getHostViewerBylineClient as () => AppBylineClient
32
- export { isPreviewActive }
@@ -1,32 +0,0 @@
1
- /**
2
- * This Source Code is subject to the terms of the Mozilla Public
3
- * License, v. 2.0. If a copy of the MPL was not distributed with this
4
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
- *
6
- * Copyright (c) Infonomic Company Limited
7
- */
8
-
9
- /**
10
- * Server-only application boundary for the host-owned client singletons.
11
- * The host stays config-agnostic; this assertion binds it to the app registry.
12
- */
13
- import type { BylineClient } from '@byline/client'
14
- import {
15
- getAdminBylineClient as getHostAdminBylineClient,
16
- getSystemBylineClient as getHostSystemBylineClient,
17
- } from '@byline/host-tanstack-start/integrations/byline-client'
18
- import { getPublicBylineClient as getHostPublicBylineClient } from '@byline/host-tanstack-start/integrations/byline-public-client'
19
- import {
20
- getViewerBylineClient as getHostViewerBylineClient,
21
- isPreviewActive,
22
- } from '@byline/host-tanstack-start/integrations/byline-viewer-client'
23
-
24
- import type { BylineCollections } from './collections/index.js'
25
-
26
- type AppBylineClient = BylineClient<BylineCollections>
27
-
28
- export const getAdminBylineClient = getHostAdminBylineClient as () => AppBylineClient
29
- export const getPublicBylineClient = getHostPublicBylineClient as () => AppBylineClient
30
- export const getSystemBylineClient = getHostSystemBylineClient as () => AppBylineClient
31
- export const getViewerBylineClient = getHostViewerBylineClient as () => AppBylineClient
32
- export { isPreviewActive }