nx-factory-cli 2.1.3 → 2.1.4

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 (93) hide show
  1. package/dist/commands/add-app.d.ts +10 -0
  2. package/dist/commands/add-app.d.ts.map +1 -0
  3. package/dist/commands/add-app.js +392 -0
  4. package/dist/commands/add-app.js.map +1 -0
  5. package/dist/commands/add-auth.d.ts +8 -0
  6. package/dist/commands/add-auth.d.ts.map +1 -0
  7. package/dist/commands/add-auth.js +182 -0
  8. package/dist/commands/add-auth.js.map +1 -0
  9. package/dist/commands/add-component.d.ts +2 -0
  10. package/dist/commands/add-component.d.ts.map +1 -0
  11. package/dist/commands/add-component.js +116 -0
  12. package/dist/commands/add-component.js.map +1 -0
  13. package/dist/commands/add-lib.d.ts +9 -0
  14. package/dist/commands/add-lib.d.ts.map +1 -0
  15. package/dist/commands/add-lib.js +190 -0
  16. package/dist/commands/add-lib.js.map +1 -0
  17. package/dist/commands/add-storybook.d.ts +6 -0
  18. package/dist/commands/add-storybook.d.ts.map +1 -0
  19. package/dist/commands/add-storybook.js +181 -0
  20. package/dist/commands/add-storybook.js.map +1 -0
  21. package/dist/commands/doctor.d.ts +2 -0
  22. package/dist/commands/doctor.d.ts.map +1 -0
  23. package/dist/commands/doctor.js +235 -0
  24. package/dist/commands/doctor.js.map +1 -0
  25. package/dist/commands/init.d.ts +9 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +527 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/list.d.ts +2 -0
  30. package/dist/commands/list.d.ts.map +1 -0
  31. package/dist/commands/list.js +130 -0
  32. package/dist/commands/list.js.map +1 -0
  33. package/dist/commands/publish.d.ts +8 -0
  34. package/dist/commands/publish.d.ts.map +1 -0
  35. package/dist/commands/publish.js +179 -0
  36. package/dist/commands/publish.js.map +1 -0
  37. package/dist/commands/remove-component.d.ts +5 -0
  38. package/dist/commands/remove-component.d.ts.map +1 -0
  39. package/dist/commands/remove-component.js +172 -0
  40. package/dist/commands/remove-component.js.map +1 -0
  41. package/dist/commands/update.d.ts +5 -0
  42. package/dist/commands/update.d.ts.map +1 -0
  43. package/dist/commands/update.js +126 -0
  44. package/dist/commands/update.js.map +1 -0
  45. package/dist/config.d.ts +14 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +35 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/exec.d.ts +25 -0
  50. package/dist/exec.d.ts.map +1 -0
  51. package/dist/exec.js +80 -0
  52. package/dist/exec.js.map +1 -0
  53. package/dist/files.d.ts +7 -0
  54. package/dist/files.d.ts.map +1 -0
  55. package/dist/files.js +23 -0
  56. package/dist/files.js.map +1 -0
  57. package/dist/index.d.ts +3 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +93 -42127
  60. package/dist/index.js.map +1 -0
  61. package/dist/resolve-root.d.ts +22 -0
  62. package/dist/resolve-root.d.ts.map +1 -0
  63. package/dist/resolve-root.js +65 -0
  64. package/dist/resolve-root.js.map +1 -0
  65. package/dist/setups/auth/base.d.ts +11 -0
  66. package/dist/setups/auth/base.d.ts.map +1 -0
  67. package/dist/setups/auth/base.js +91 -0
  68. package/dist/setups/auth/base.js.map +1 -0
  69. package/dist/setups/auth/index.d.ts +6 -0
  70. package/dist/setups/auth/index.d.ts.map +1 -0
  71. package/dist/setups/auth/index.js +5 -0
  72. package/dist/setups/auth/index.js.map +1 -0
  73. package/dist/setups/auth/systems/better-auth.d.ts +3 -0
  74. package/dist/setups/auth/systems/better-auth.d.ts.map +1 -0
  75. package/dist/setups/auth/systems/better-auth.js +357 -0
  76. package/dist/setups/auth/systems/better-auth.js.map +1 -0
  77. package/dist/setups/auth/systems/clerk.d.ts +3 -0
  78. package/dist/setups/auth/systems/clerk.d.ts.map +1 -0
  79. package/dist/setups/auth/systems/clerk.js +259 -0
  80. package/dist/setups/auth/systems/clerk.js.map +1 -0
  81. package/dist/setups/auth/systems/workos.d.ts +3 -0
  82. package/dist/setups/auth/systems/workos.d.ts.map +1 -0
  83. package/dist/setups/auth/systems/workos.js +273 -0
  84. package/dist/setups/auth/systems/workos.js.map +1 -0
  85. package/dist/setups/auth/types.d.ts +39 -0
  86. package/dist/setups/auth/types.d.ts.map +1 -0
  87. package/dist/setups/auth/types.js +2 -0
  88. package/dist/setups/auth/types.js.map +1 -0
  89. package/dist/ui.d.ts +44 -0
  90. package/dist/ui.d.ts.map +1 -0
  91. package/dist/ui.js +149 -0
  92. package/dist/ui.js.map +1 -0
  93. package/package.json +3 -3
@@ -0,0 +1,10 @@
1
+ interface AddAppOptions {
2
+ name?: string;
3
+ framework?: string;
4
+ yes?: boolean;
5
+ dryRun?: boolean;
6
+ }
7
+ export declare function addAppCommand(options: AddAppOptions): Promise<void>;
8
+ export declare function scaffoldExampleApp(workspaceRoot: string, appName: string, uiPkgName: string, pm: string): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=add-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-app.d.ts","sourceRoot":"","sources":["../../src/commands/add-app.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAO,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAQ,OAAO,CAAC;IACpB,MAAM,CAAC,EAAK,OAAO,CAAC;CACrB;AAOD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0JzE;AAwQD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAQ,MAAM,EACrB,SAAS,EAAM,MAAM,EACrB,EAAE,EAAa,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,392 @@
1
+ import inquirer from "inquirer";
2
+ import path from "path";
3
+ import { pathExists, writeFile, readJson } from "../files.js";
4
+ import { pmWorkspaceProtocol, detectPackageManager, pmx, pmxArgs, runInteractive } from "../exec.js";
5
+ import { loadConfig } from "../config";
6
+ import { requireMonorepoRoot, MonorepoRootNotFoundError } from "../resolve-root";
7
+ import { q, detected, createStepRunner, printSection, printSuccess, printError, c } from "../ui.js";
8
+ export async function addAppCommand(options) {
9
+ // ── Resolve monorepo root from wherever the user invokes this ──────────────
10
+ let workspaceRoot;
11
+ try {
12
+ workspaceRoot = await requireMonorepoRoot();
13
+ }
14
+ catch (err) {
15
+ if (err instanceof MonorepoRootNotFoundError) {
16
+ printError({
17
+ title: "Could not find monorepo root",
18
+ detail: String(err),
19
+ recovery: [{ label: "Run from inside your nx-factory workspace:", cmd: "cd <monorepo-root>" }],
20
+ });
21
+ }
22
+ else {
23
+ printError({
24
+ title: "Unexpected error",
25
+ detail: String(err),
26
+ recovery: [{ label: "", cmd: "cd <monorepo-root> && nx-factory add-app" }],
27
+ });
28
+ }
29
+ process.exit(1);
30
+ }
31
+ const pkgJsonPath = path.join(workspaceRoot, "package.json");
32
+ if (!(await pathExists(pkgJsonPath))) {
33
+ printError({
34
+ title: "No package.json found at workspace root",
35
+ detail: `Resolved root: ${workspaceRoot}`,
36
+ recovery: [{ label: "", cmd: "nx-factory init" }],
37
+ });
38
+ process.exit(1);
39
+ }
40
+ await readJson(pkgJsonPath);
41
+ const cfg = await loadConfig();
42
+ const packagesDir = path.join(workspaceRoot, "packages");
43
+ let detectedUiPkg = cfg?.uiPackage ?? "ui";
44
+ if (!cfg && await pathExists(packagesDir)) {
45
+ const { default: fs } = await import("fs-extra");
46
+ const pkgs = await fs.readdir(packagesDir);
47
+ if (pkgs.length > 0)
48
+ detectedUiPkg = pkgs[0];
49
+ }
50
+ const detectedPm = await detectPackageManager(workspaceRoot);
51
+ const defaults = {
52
+ appName: options.name ?? "my-app",
53
+ framework: options.framework ?? "nextjs",
54
+ uiPkgName: detectedUiPkg,
55
+ pkgManager: detectedPm ?? cfg?.pkgManager ?? "pnpm",
56
+ };
57
+ const answers = options.yes
58
+ ? defaults
59
+ : await inquirer.prompt([
60
+ {
61
+ type: "input",
62
+ name: "appName",
63
+ message: q("App name", "lowercase letters, numbers, dashes only"),
64
+ default: defaults.appName,
65
+ validate: (v) => /^[a-z0-9-]+$/.test(v) || c.red("Only lowercase letters, numbers, and dashes"),
66
+ },
67
+ {
68
+ type: "list",
69
+ name: "framework",
70
+ message: q("Framework"),
71
+ choices: [
72
+ { name: "Next.js — create-next-app@latest", value: "nextjs" },
73
+ { name: "Vite — create-vite@latest", value: "vite" },
74
+ { name: "Remix — create-remix@latest", value: "remix" },
75
+ { name: "Expo — create-expo-app@latest", value: "expo" },
76
+ ],
77
+ default: defaults.framework,
78
+ when: !options.framework,
79
+ },
80
+ {
81
+ type: "input",
82
+ name: "uiPkgName",
83
+ message: q("Shared UI package name"),
84
+ default: defaults.uiPkgName,
85
+ },
86
+ {
87
+ type: "list",
88
+ name: "pkgManager",
89
+ message: q("Package manager"),
90
+ choices: ["pnpm", "npm", "yarn", "bun"],
91
+ default: detectedPm ? detected(detectedPm) : defaults.pkgManager,
92
+ when: !detectedPm,
93
+ },
94
+ ]);
95
+ const appName = (answers.appName ?? defaults.appName);
96
+ const framework = (answers.framework ?? defaults.framework);
97
+ const uiPkgName = (answers.uiPkgName ?? defaults.uiPkgName);
98
+ const pm = (answers.pkgManager ?? detectedPm ?? defaults.pkgManager);
99
+ const appsDir = path.join(workspaceRoot, "apps");
100
+ const appDir = path.join(appsDir, appName);
101
+ if (await pathExists(appDir)) {
102
+ printError({
103
+ title: `apps/${appName} already exists`,
104
+ recovery: [{ label: "Choose a different name or delete the existing directory:", cmd: `rm -rf apps/${appName}` }],
105
+ });
106
+ process.exit(1);
107
+ }
108
+ // ─── Dry run ────────────────────────────────────────────────────────────────
109
+ if (options.dryRun) {
110
+ printSection(`[dry run] Scaffolding ${framework} app → apps/${appName}`);
111
+ const step = createStepRunner(3, true);
112
+ await step(`Run ${frameworkCliName(framework)}`, async () => { });
113
+ await step(`Add @workspace/${uiPkgName} dependency`, async () => { });
114
+ await step("Patch framework config for shared UI styles", async () => { });
115
+ printSuccess({
116
+ title: `apps/${appName} ready (dry run — nothing written)`,
117
+ commands: [
118
+ { cmd: `${pm} install` },
119
+ { cmd: devCmd(framework, pm, appName), comment: "start the app" },
120
+ ],
121
+ });
122
+ return;
123
+ }
124
+ // ─── Real scaffold ──────────────────────────────────────────────────────────
125
+ printSection(`Scaffolding ${framework} app → apps/${appName}`);
126
+ const step = createStepRunner(3);
127
+ await step(`Run ${frameworkCliName(framework)}`, async () => {
128
+ await scaffoldViaCli(framework, appName, appsDir, pm);
129
+ });
130
+ await step(`Add @workspace/${uiPkgName} dependency`, async () => {
131
+ await addUiDependency(appDir, uiPkgName, pm);
132
+ });
133
+ await step("Patch config for shared UI styles", async () => {
134
+ await patchConfig(framework, appDir, uiPkgName, appName);
135
+ });
136
+ printSuccess({
137
+ title: `apps/${appName} created`,
138
+ commands: [
139
+ { cmd: `${pm} install`, comment: "install workspace deps" },
140
+ { cmd: devCmd(framework, pm, appName), comment: framework === "expo" ? "start Expo dev server" : "start the app" },
141
+ ],
142
+ tips: [
143
+ { label: "Add auth:", cmd: "nx-factory add-auth" },
144
+ ...(framework === "expo"
145
+ ? [{ label: "Note:", cmd: "Expo uses NativeWind — shadcn components are web-only" }]
146
+ : []),
147
+ ],
148
+ });
149
+ }
150
+ // ─── CLI runner ───────────────────────────────────────────────────────────────
151
+ async function scaffoldViaCli(framework, appName, appsDir, pm) {
152
+ const { default: fs } = await import("fs-extra");
153
+ await fs.ensureDir(appsDir);
154
+ switch (framework) {
155
+ case "nextjs":
156
+ await runInteractive(pmx(pm), pmxArgs(pm, "create-next-app@latest", [
157
+ appName,
158
+ "--ts", "--tailwind", "--eslint", "--app", "--src-dir", "--no-import-alias",
159
+ `--use-${pm === "bun" ? "bun" : pm === "yarn" ? "yarn" : pm === "npm" ? "npm" : "pnpm"}`,
160
+ ]), { cwd: appsDir });
161
+ break;
162
+ case "vite":
163
+ await runInteractive(pmx(pm), pmxArgs(pm, "create-vite@latest", [appName, "--template", "react-ts"]), { cwd: appsDir });
164
+ break;
165
+ case "remix":
166
+ await runInteractive(pmx(pm), pmxArgs(pm, "create-remix@latest", [appName, "--yes"]), { cwd: appsDir });
167
+ break;
168
+ case "expo":
169
+ await runInteractive(pmx(pm), pmxArgs(pm, "create-expo-app@latest", [appName, "--template", "blank-typescript", "--no-install"]), { cwd: appsDir });
170
+ break;
171
+ }
172
+ }
173
+ // ─── Add UI package dep ───────────────────────────────────────────────────────
174
+ async function addUiDependency(appDir, uiPkgName, pm) {
175
+ const pkgJsonPath = path.join(appDir, "package.json");
176
+ const { default: fs } = await import("fs-extra");
177
+ if (!(await pathExists(pkgJsonPath))) {
178
+ throw new Error(`package.json not found in ${appDir} — did the CLI scaffold succeed?`);
179
+ }
180
+ const pkgJson = await fs.readJson(pkgJsonPath);
181
+ pkgJson.dependencies = {
182
+ ...pkgJson.dependencies,
183
+ [`@workspace/${uiPkgName}`]: pmWorkspaceProtocol(pm),
184
+ };
185
+ await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 });
186
+ }
187
+ // ─── Config patching ──────────────────────────────────────────────────────────
188
+ async function patchConfig(framework, appDir, uiPkgName, appName) {
189
+ switch (framework) {
190
+ case "nextjs":
191
+ await patchNextConfig(appDir, uiPkgName);
192
+ break;
193
+ case "vite":
194
+ await patchViteConfig(appDir, uiPkgName);
195
+ break;
196
+ case "remix":
197
+ await patchRemixConfig(appDir, uiPkgName);
198
+ break;
199
+ case "expo":
200
+ await patchExpoConfig(appDir, uiPkgName);
201
+ break;
202
+ }
203
+ }
204
+ async function patchNextConfig(appDir, uiPkgName) {
205
+ const { default: fs } = await import("fs-extra");
206
+ for (const cfgFile of ["next.config.ts", "next.config.js", "next.config.mjs"]) {
207
+ const cfgPath = path.join(appDir, cfgFile);
208
+ if (!(await pathExists(cfgPath)))
209
+ continue;
210
+ let src = await fs.readFile(cfgPath, "utf-8");
211
+ if (src.includes("transpilePackages")) {
212
+ if (!src.includes(`@workspace/${uiPkgName}`)) {
213
+ src = src.replace(/transpilePackages:\s*\[/, `transpilePackages: ["@workspace/${uiPkgName}", `);
214
+ }
215
+ }
216
+ else {
217
+ src = src.replace(/(const nextConfig[^=]*=\s*\{)/, `$1\n transpilePackages: ["@workspace/${uiPkgName}"],`);
218
+ }
219
+ await fs.writeFile(cfgPath, src, "utf-8");
220
+ break;
221
+ }
222
+ for (const layoutRel of ["src/app/layout.tsx", "app/layout.tsx", "src/app/layout.jsx"]) {
223
+ const layoutPath = path.join(appDir, layoutRel);
224
+ if (!(await pathExists(layoutPath)))
225
+ continue;
226
+ let src = await fs.readFile(layoutPath, "utf-8");
227
+ if (!src.includes(`@workspace/${uiPkgName}`)) {
228
+ src = src.replace(/((?:^import[^\n]+\n)+)/m, `$1import "@workspace/${uiPkgName}/styles/globals.css";\n`);
229
+ await fs.writeFile(layoutPath, src, "utf-8");
230
+ }
231
+ break;
232
+ }
233
+ for (const cssRel of ["src/app/globals.css", "app/globals.css"]) {
234
+ const cssPath = path.join(appDir, cssRel);
235
+ if (!(await pathExists(cssPath)))
236
+ continue;
237
+ let css = await fs.readFile(cssPath, "utf-8");
238
+ if (!css.includes("@source")) {
239
+ css = `/* Ensure Tailwind scans this app's source files */\n@import "@workspace/${uiPkgName}/styles/globals.css";\n\n${css}`;
240
+ await fs.writeFile(cssPath, css, "utf-8");
241
+ }
242
+ break;
243
+ }
244
+ await patchAppTsConfig(appDir);
245
+ }
246
+ async function patchViteConfig(appDir, uiPkgName) {
247
+ const { default: fs } = await import("fs-extra");
248
+ for (const cfgFile of ["vite.config.ts", "vite.config.js"]) {
249
+ const cfgPath = path.join(appDir, cfgFile);
250
+ if (!(await pathExists(cfgPath)))
251
+ continue;
252
+ let src = await fs.readFile(cfgPath, "utf-8");
253
+ if (!src.includes("@tailwindcss/vite") && !src.includes("tailwindcss")) {
254
+ src = `import tailwindcss from "@tailwindcss/vite";\n${src}`;
255
+ src = src.replace(/plugins:\s*\[/, `plugins: [tailwindcss(), `);
256
+ await fs.writeFile(cfgPath, src, "utf-8");
257
+ }
258
+ break;
259
+ }
260
+ const pkgPath = path.join(appDir, "package.json");
261
+ if (await pathExists(pkgPath)) {
262
+ const pkg = await fs.readJson(pkgPath);
263
+ pkg.devDependencies = { ...pkg.devDependencies, "@tailwindcss/vite": "^4.0.0" };
264
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
265
+ }
266
+ for (const mainRel of ["src/main.tsx", "src/main.jsx", "src/main.ts"]) {
267
+ const mainPath = path.join(appDir, mainRel);
268
+ if (!(await pathExists(mainPath)))
269
+ continue;
270
+ let src = await fs.readFile(mainPath, "utf-8");
271
+ if (!src.includes(`@workspace/${uiPkgName}`)) {
272
+ src = `import "@workspace/${uiPkgName}/styles/globals.css";\n${src}`;
273
+ await fs.writeFile(mainPath, src, "utf-8");
274
+ }
275
+ break;
276
+ }
277
+ await patchAppTsConfig(appDir);
278
+ }
279
+ async function patchRemixConfig(appDir, uiPkgName) {
280
+ const { default: fs } = await import("fs-extra");
281
+ for (const cfgFile of ["vite.config.ts", "vite.config.js"]) {
282
+ const cfgPath = path.join(appDir, cfgFile);
283
+ if (!(await pathExists(cfgPath)))
284
+ continue;
285
+ let src = await fs.readFile(cfgPath, "utf-8");
286
+ if (!src.includes("@tailwindcss/vite") && !src.includes("tailwindcss")) {
287
+ src = `import tailwindcss from "@tailwindcss/vite";\n${src}`;
288
+ src = src.replace(/plugins:\s*\[/, `plugins: [tailwindcss(), `);
289
+ await fs.writeFile(cfgPath, src, "utf-8");
290
+ }
291
+ break;
292
+ }
293
+ const pkgPath = path.join(appDir, "package.json");
294
+ if (await pathExists(pkgPath)) {
295
+ const pkg = await fs.readJson(pkgPath);
296
+ pkg.devDependencies = { ...pkg.devDependencies, "@tailwindcss/vite": "^4.0.0" };
297
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
298
+ }
299
+ for (const rootRel of ["app/root.tsx", "app/root.jsx"]) {
300
+ const rootPath = path.join(appDir, rootRel);
301
+ if (!(await pathExists(rootPath)))
302
+ continue;
303
+ let src = await fs.readFile(rootPath, "utf-8");
304
+ if (!src.includes(`@workspace/${uiPkgName}`)) {
305
+ src = src.replace(/((?:^import[^\n]+\n)+)/m, `$1import "@workspace/${uiPkgName}/styles/globals.css";\n`);
306
+ await fs.writeFile(rootPath, src, "utf-8");
307
+ }
308
+ break;
309
+ }
310
+ await patchAppTsConfig(appDir);
311
+ }
312
+ async function patchExpoConfig(appDir, uiPkgName) {
313
+ const { default: fs } = await import("fs-extra");
314
+ const pkgPath = path.join(appDir, "package.json");
315
+ if (await pathExists(pkgPath)) {
316
+ const pkg = await fs.readJson(pkgPath);
317
+ pkg.dependencies = { ...pkg.dependencies, nativewind: "^4.0.1", tailwindcss: "^3.4.0" };
318
+ pkg.devDependencies = { ...pkg.devDependencies, "babel-preset-expo": "~12.0.0" };
319
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
320
+ }
321
+ await writeFile(path.join(appDir, "tailwind.config.js"), `/** @type {import('tailwindcss').Config} */
322
+ module.exports = {
323
+ content: ["./app/**/*.{js,jsx,ts,tsx}", "./components/**/*.{js,jsx,ts,tsx}"],
324
+ presets: [require("nativewind/preset")],
325
+ theme: { extend: {} },
326
+ plugins: [],
327
+ };\n`);
328
+ await writeFile(path.join(appDir, "global.css"), `@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`);
329
+ await writeFile(path.join(appDir, "babel.config.js"), `module.exports = function (api) {
330
+ api.cache(true);
331
+ return {
332
+ presets: [
333
+ ["babel-preset-expo", { jsxImportSource: "nativewind" }],
334
+ "nativewind/babel",
335
+ ],
336
+ };
337
+ };\n`);
338
+ for (const layoutRel of ["app/_layout.tsx", "app/_layout.jsx"]) {
339
+ const layoutPath = path.join(appDir, layoutRel);
340
+ if (!(await pathExists(layoutPath)))
341
+ continue;
342
+ let src = await fs.readFile(layoutPath, "utf-8");
343
+ if (!src.includes("global.css")) {
344
+ src = `import "../global.css";\n${src}`;
345
+ await fs.writeFile(layoutPath, src, "utf-8");
346
+ }
347
+ break;
348
+ }
349
+ await patchAppTsConfig(appDir);
350
+ }
351
+ async function patchAppTsConfig(appDir) {
352
+ const { default: fs } = await import("fs-extra");
353
+ const tsConfigPath = path.join(appDir, "tsconfig.json");
354
+ if (!(await pathExists(tsConfigPath)))
355
+ return;
356
+ const tsConfig = await fs.readJson(tsConfigPath);
357
+ tsConfig.extends = "../../tsconfig.base.json";
358
+ const currentPaths = tsConfig.compilerOptions?.paths ?? {};
359
+ tsConfig.compilerOptions = {
360
+ ...(tsConfig.compilerOptions ?? {}),
361
+ paths: {
362
+ ...currentPaths,
363
+ "@/*": ["./src/*"],
364
+ "@workspace/*": ["../../packages/*"],
365
+ },
366
+ };
367
+ const includeEntries = Array.isArray(tsConfig.include) ? tsConfig.include : [];
368
+ tsConfig.include = Array.from(new Set([...includeEntries, "../../packages/**/*.ts", "../../packages/**/*.tsx"]));
369
+ await fs.writeJson(tsConfigPath, tsConfig, { spaces: 2 });
370
+ }
371
+ function frameworkCliName(framework) {
372
+ switch (framework) {
373
+ case "nextjs": return "create-next-app@latest";
374
+ case "vite": return "create-vite@latest";
375
+ case "remix": return "create-remix@latest";
376
+ case "expo": return "create-expo-app@latest";
377
+ default: return `create-${framework}@latest`;
378
+ }
379
+ }
380
+ function devCmd(framework, pm, appName) {
381
+ if (framework === "expo")
382
+ return `cd apps/${appName} && ${pm} start`;
383
+ return `${pm} dev --filter=${appName}`;
384
+ }
385
+ export async function scaffoldExampleApp(workspaceRoot, appName, uiPkgName, pm) {
386
+ const appsDir = path.join(workspaceRoot, "apps");
387
+ const appDir = path.join(appsDir, appName);
388
+ await scaffoldViaCli("nextjs", appName, appsDir, pm);
389
+ await addUiDependency(appDir, uiPkgName, pm);
390
+ await patchNextConfig(appDir, uiPkgName);
391
+ }
392
+ //# sourceMappingURL=add-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-app.js","sourceRoot":"","sources":["../../src/commands/add-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface AddAuthOptions {
2
+ provider?: string;
3
+ yes?: boolean;
4
+ dryRun?: boolean;
5
+ }
6
+ export declare function addAuthCommand(options: AddAuthOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=add-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-auth.d.ts","sourceRoot":"","sources":["../../src/commands/add-auth.ts"],"names":[],"mappings":"AAoBA,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAO,OAAO,CAAC;IACnB,MAAM,CAAC,EAAI,OAAO,CAAC;CACpB;AAkDD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwJ3E"}
@@ -0,0 +1,182 @@
1
+ import inquirer from "inquirer";
2
+ import path from "path";
3
+ import { pathExists } from "../files.js";
4
+ import { detectPackageManager, pmAdd, run } from "../exec.js";
5
+ import { loadConfig } from "../config";
6
+ import { requireMonorepoRoot, MonorepoRootNotFoundError } from "../resolve-root";
7
+ import { q, createStepRunner, printSection, printSuccess, printError, } from "../ui.js";
8
+ import { clerkScaffolder, betterAuthScaffolder, workosScaffolder, writeAuthPackageBase, } from "../setups/auth/index";
9
+ // ─── Provider menu ────────────────────────────────────────────────────────────
10
+ const PROVIDERS = [
11
+ { value: "clerk", name: "Clerk — hosted UI, zero-config, generous free tier" },
12
+ { value: "better-auth", name: "Better Auth — open-source, self-hosted, SQLite / Postgres" },
13
+ { value: "workos", name: "WorkOS — enterprise SSO, SCIM, MFA, hosted AuthKit UI" },
14
+ ];
15
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
16
+ function getScaffolder(provider) {
17
+ switch (provider) {
18
+ case "clerk": return clerkScaffolder;
19
+ case "better-auth": return betterAuthScaffolder;
20
+ case "workos": return workosScaffolder;
21
+ }
22
+ }
23
+ function providerDocs(provider) {
24
+ switch (provider) {
25
+ case "clerk": return "https://clerk.com/docs";
26
+ case "better-auth": return "https://www.better-auth.com/docs";
27
+ case "workos": return "https://workos.com/docs/user-management";
28
+ }
29
+ }
30
+ async function listApps(root) {
31
+ const appsDir = path.join(root, "apps");
32
+ if (!(await pathExists(appsDir)))
33
+ return [];
34
+ const { default: fs } = await import("fs-extra");
35
+ const entries = await fs.readdir(appsDir, { withFileTypes: true });
36
+ return entries.filter((e) => e.isDirectory()).map((e) => e.name);
37
+ }
38
+ async function wireApps(root, apps, pm) {
39
+ const { default: fs } = await import("fs-extra");
40
+ const protocol = pm === "npm" ? "*" : "workspace:*";
41
+ for (const appName of apps) {
42
+ const pkgPath = path.join(root, "apps", appName, "package.json");
43
+ if (!(await pathExists(pkgPath)))
44
+ continue;
45
+ const pkg = await fs.readJson(pkgPath);
46
+ pkg.dependencies = { ...pkg.dependencies, "@workspace/auth": protocol };
47
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
48
+ }
49
+ }
50
+ // ─── Main command ─────────────────────────────────────────────────────────────
51
+ export async function addAuthCommand(options) {
52
+ // ── Resolve root from wherever the user is running from ─────────────────────
53
+ let root;
54
+ try {
55
+ root = await requireMonorepoRoot();
56
+ }
57
+ catch (err) {
58
+ if (err instanceof MonorepoRootNotFoundError) {
59
+ printError({
60
+ title: "Could not find monorepo root",
61
+ detail: err.message,
62
+ recovery: [
63
+ { label: "Initialise a new workspace:", cmd: "nx-factory init" },
64
+ { label: "Or navigate to your workspace root first.", cmd: "" },
65
+ ],
66
+ });
67
+ }
68
+ else {
69
+ printError({
70
+ title: "Unexpected error resolving workspace root",
71
+ detail: String(err),
72
+ recovery: [{ label: "Try running from your monorepo root:", cmd: "cd <monorepo-root>" }],
73
+ });
74
+ }
75
+ process.exit(1);
76
+ }
77
+ // ── Guard: packages/auth must not already exist ──────────────────────────────
78
+ const authPkgDir = path.join(root, "packages", "auth");
79
+ if (await pathExists(authPkgDir)) {
80
+ printError({
81
+ title: "packages/auth already exists",
82
+ detail: "Remove or rename it before running add-auth again.",
83
+ recovery: [
84
+ { label: "Remove:", cmd: "rm -rf packages/auth" },
85
+ { label: "Then:", cmd: "nx-factory add-auth" },
86
+ ],
87
+ });
88
+ process.exit(1);
89
+ }
90
+ const cfg = await loadConfig();
91
+ const detectedPm = await detectPackageManager(root);
92
+ const pm = detectedPm ?? cfg?.pkgManager ?? "pnpm";
93
+ const apps = await listApps(root);
94
+ // ── Prompts ──────────────────────────────────────────────────────────────────
95
+ const defaults = {
96
+ provider: (options.provider ?? "clerk"),
97
+ selectedApps: apps,
98
+ };
99
+ const answers = options.yes
100
+ ? defaults
101
+ : await inquirer.prompt({
102
+ type: "list",
103
+ name: "provider",
104
+ message: q("Auth provider", "all production-ready — pick based on your needs"),
105
+ choices: PROVIDERS.map((p) => ({ name: p.name, value: p.value, short: p.value })),
106
+ default: defaults.provider,
107
+ when: !options.provider,
108
+ }, ...(apps.length > 0
109
+ ? [{
110
+ type: "checkbox",
111
+ name: "selectedApps",
112
+ message: q("Wire @workspace/auth into which apps?", "adds dep to package.json — run install after"),
113
+ choices: apps,
114
+ default: apps,
115
+ }]
116
+ : []));
117
+ const provider = (answers.provider ?? defaults.provider);
118
+ const selectedApps = (answers.selectedApps ?? defaults.selectedApps);
119
+ const scaffolder = getScaffolder(provider);
120
+ // ── Dry run ────────────────────────────────────────────────────────────────
121
+ if (options.dryRun) {
122
+ printSection(`[dry run] Creating packages/auth — ${scaffolder.label}`);
123
+ const step = createStepRunner(4, true);
124
+ await step("Write package.json, tsconfig.json, tsup.config.ts", async () => { });
125
+ await step(`Scaffold ${scaffolder.label} src/ files`, async () => { });
126
+ await step("Install provider npm packages", async () => { });
127
+ await step(selectedApps.length > 0 ? `Wire into: ${selectedApps.join(", ")}` : "No apps to wire", async () => { });
128
+ printSuccess({
129
+ title: "packages/auth ready (dry run — nothing written)",
130
+ commands: [{ cmd: `nx-factory add-auth --provider ${provider}`, comment: "run without --dry-run to apply" }],
131
+ });
132
+ return;
133
+ }
134
+ // ── Real scaffold ──────────────────────────────────────────────────────────
135
+ printSection(`Creating packages/auth — ${scaffolder.label}`);
136
+ const step = createStepRunner(4);
137
+ await step("Write package base files", async () => {
138
+ await writeAuthPackageBase(authPkgDir, scaffolder, pm);
139
+ });
140
+ await step(`Scaffold ${scaffolder.label} source files`, async () => {
141
+ await scaffolder.scaffold(authPkgDir, {
142
+ provider,
143
+ workspaceRoot: root,
144
+ workspaceName: cfg?.workspaceName ?? "workspace",
145
+ pm,
146
+ });
147
+ });
148
+ await step(`Install ${scaffolder.label} packages`, async () => {
149
+ const deps = Object.keys(scaffolder.dependencies);
150
+ const devDeps = Object.keys(scaffolder.devDependencies);
151
+ if (deps.length > 0) {
152
+ await run(pm, [pmAdd(pm), ...deps], { cwd: authPkgDir });
153
+ }
154
+ if (devDeps.length > 0) {
155
+ await run(pm, [pmAdd(pm), "-D", ...devDeps], { cwd: authPkgDir });
156
+ }
157
+ });
158
+ await step(selectedApps.length > 0
159
+ ? `Add @workspace/auth to: ${selectedApps.join(", ")}`
160
+ : "Skip app wiring (no apps found)", async () => {
161
+ if (selectedApps.length > 0)
162
+ await wireApps(root, selectedApps, pm);
163
+ });
164
+ // ── Success ────────────────────────────────────────────────────────────────
165
+ const nextSteps = [
166
+ { cmd: `${pm} install`, comment: "install new deps across the workspace" },
167
+ { cmd: "cat packages/auth/.env.example", comment: "copy vars to your app's .env.local" },
168
+ { cmd: "pnpm nx build @workspace/auth", comment: "build the auth package" },
169
+ ];
170
+ if (provider === "better-auth") {
171
+ nextSteps.push({ cmd: "npx better-auth migrate", comment: "create DB tables" });
172
+ }
173
+ printSuccess({
174
+ title: `packages/auth created (${scaffolder.label})`,
175
+ commands: nextSteps,
176
+ tips: [
177
+ { label: "Docs →", cmd: providerDocs(provider) },
178
+ { label: "Import →", cmd: `import { ... } from "@workspace/auth/server"` },
179
+ ],
180
+ });
181
+ }
182
+ //# sourceMappingURL=add-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-auth.js","sourceRoot":"","sources":["../../src/commands/add-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function addComponentCommand(components: string[]): Promise<void>;
2
+ //# sourceMappingURL=add-component.d.ts.map