nx-factory-cli 2.1.24 → 2.1.26

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 (48) hide show
  1. package/dist/commands/add-app.d.ts.map +1 -1
  2. package/dist/commands/add-app.js +92 -90
  3. package/dist/commands/add-app.js.map +1 -1
  4. package/dist/commands/add-auth.d.ts.map +1 -1
  5. package/dist/commands/add-auth.js +42 -3
  6. package/dist/commands/add-auth.js.map +1 -1
  7. package/dist/commands/add-lib.d.ts.map +1 -1
  8. package/dist/commands/add-lib.js +76 -40
  9. package/dist/commands/add-lib.js.map +1 -1
  10. package/dist/commands/doctor.js +1 -1
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +131 -59
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/migrate.d.ts +12 -0
  16. package/dist/commands/migrate.d.ts.map +1 -0
  17. package/dist/commands/migrate.js +644 -0
  18. package/dist/commands/migrate.js.map +1 -0
  19. package/dist/config.d.ts +2 -0
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js.map +1 -1
  22. package/dist/exec.d.ts +3 -1
  23. package/dist/exec.d.ts.map +1 -1
  24. package/dist/exec.js +7 -2
  25. package/dist/exec.js.map +1 -1
  26. package/dist/index.js +61 -8
  27. package/dist/index.js.map +1 -1
  28. package/dist/setups/auth/base.d.ts.map +1 -1
  29. package/dist/setups/auth/base.js +5 -21
  30. package/dist/setups/auth/base.js.map +1 -1
  31. package/dist/setups/auth/index.d.ts +1 -1
  32. package/dist/setups/auth/index.d.ts.map +1 -1
  33. package/dist/setups/auth/systems/better-auth.d.ts.map +1 -1
  34. package/dist/setups/auth/systems/better-auth.js +88 -266
  35. package/dist/setups/auth/systems/better-auth.js.map +1 -1
  36. package/dist/setups/auth/systems/clerk.d.ts.map +1 -1
  37. package/dist/setups/auth/systems/clerk.js +61 -142
  38. package/dist/setups/auth/systems/clerk.js.map +1 -1
  39. package/dist/setups/auth/systems/workos.d.ts.map +1 -1
  40. package/dist/setups/auth/systems/workos.js +92 -203
  41. package/dist/setups/auth/systems/workos.js.map +1 -1
  42. package/dist/setups/auth/types.d.ts +12 -10
  43. package/dist/setups/auth/types.d.ts.map +1 -1
  44. package/dist/tsconfigs.d.ts +88 -0
  45. package/dist/tsconfigs.d.ts.map +1 -0
  46. package/dist/tsconfigs.js +296 -0
  47. package/dist/tsconfigs.js.map +1 -0
  48. package/package.json +1 -1
@@ -1,10 +1,24 @@
1
1
  import path from "path";
2
2
  import { writeFile, ensureDir } from "../../../files.js";
3
3
  import { scopedPackageName } from "../../../config.js";
4
+ /**
5
+ * WorkOS package selection by framework.
6
+ * @workos-inc/authkit-nextjs is Next.js-specific.
7
+ * @workos-inc/node is the universal server SDK — always included.
8
+ */
9
+ function workosDepsForFrameworks(frameworks) {
10
+ const deps = {
11
+ "@workos-inc/node": "latest",
12
+ };
13
+ if (frameworks.includes("nextjs")) {
14
+ deps["@workos-inc/authkit-nextjs"] = "latest";
15
+ }
16
+ return deps;
17
+ }
4
18
  export const workosScaffolder = {
5
19
  label: "WorkOS AuthKit",
20
+ // Base deps computed dynamically in scaffold(); static field left empty.
6
21
  dependencies: {
7
- "@workos-inc/authkit-nextjs": "latest",
8
22
  "@workos-inc/node": "latest",
9
23
  },
10
24
  devDependencies: {
@@ -16,10 +30,19 @@ export const workosScaffolder = {
16
30
  },
17
31
  async scaffold(pkgDir, opts) {
18
32
  const authPackageName = scopedPackageName(opts.scope, "auth");
33
+ const frameworkDeps = workosDepsForFrameworks(opts.frameworks);
34
+ // Merge framework-specific deps into package.json (base already written)
35
+ const { default: fs } = await import("fs-extra");
36
+ const pkgPath = path.join(pkgDir, "package.json");
37
+ if (await fs.pathExists(pkgPath)) {
38
+ const pkg = await fs.readJson(pkgPath);
39
+ pkg.dependencies = { ...pkg.dependencies, ...frameworkDeps };
40
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
41
+ }
19
42
  await ensureDir(path.join(pkgDir, "."));
20
- // ── index.ts ──────────────────────────────────────────────────────────
43
+ // ── index.ts ────────────────────────────────────────────────────────────
21
44
  await writeFile(path.join(pkgDir, "index.ts"), `/**
22
- * ${authPackageName} — WorkOS AuthKit latest setup.
45
+ * ${authPackageName} — WorkOS AuthKit.
23
46
  *
24
47
  * Prefer sub-path imports:
25
48
  * import { getUser, withAuth } from "${authPackageName}/server"
@@ -29,266 +52,132 @@ export const workosScaffolder = {
29
52
  export * from "./server.js";
30
53
  export * from "./client.js";
31
54
  `);
32
- await writeFile(path.join(pkgDir, "next.ts"), `/** Next.js adapter for ${authPackageName} (WorkOS). */
55
+ // ── next.ts ─────────────────────────────────────────────────────────────
56
+ if (opts.frameworks.includes("nextjs")) {
57
+ await writeFile(path.join(pkgDir, "next.ts"), `/** Next.js adapter for ${authPackageName} (WorkOS). */
33
58
  export {
34
59
  authMiddleware,
35
60
  buildMiddleware,
36
61
  middlewareConfig,
37
62
  } from "./middleware.js";
38
63
  `);
39
- // ── server.ts ─────────────────────────────────────────────────────────
40
- // AuthKit v1+: getUser() replaces getSession(), withAuth() HOC
64
+ }
65
+ // ── server.ts ───────────────────────────────────────────────────────────
41
66
  await writeFile(path.join(pkgDir, "server.ts"), `/**
42
67
  * WorkOS AuthKit v1+ — server-side helpers.
43
68
  *
44
- * AuthKit v1 changes from v0:
45
- * - getSession() → getUser() (returns { user, sessionId, accessToken })
46
- * - withAuth() — HOC now passes { user } prop (no session wrapper)
47
- * - handleAuth() — still the catch-all callback handler
48
- *
49
- * @example Server Component (manual check)
69
+ * @example Next.js App Router (Server Component)
50
70
  * import { getUser } from "${authPackageName}/server";
51
71
  * const { user } = await getUser();
52
- * if (!user) redirect("/sign-in");
53
72
  *
54
- * @example Server Component (HOC auto-redirects)
73
+ * @example Next.js Route Handler / Remix loader
55
74
  * import { withAuth } from "${authPackageName}/server";
56
- * export default withAuth(async function Page({ user }) {
57
- * return <h1>Hello {user.firstName}</h1>;
75
+ * export const GET = withAuth(async ({ user }) => {
76
+ * return Response.json({ user });
58
77
  * });
59
78
  *
60
- * @example Sign-in redirect
61
- * import { getSignInUrl } from "${authPackageName}/server";
62
- * redirect(await getSignInUrl());
63
- */
64
-
65
- export {
66
- getUser, // Replaces getSession() in AuthKit v1
67
- withAuth, // HOC — passes { user } to your component
68
- getSignInUrl, // Returns the WorkOS hosted sign-in URL
69
- getSignUpUrl, // Returns the WorkOS hosted sign-up URL
70
- signOut, // Server-side sign out (clears session cookie)
71
- refreshSession, // Extend the session lifetime
72
- handleAuth, // Catch-all callback route handler (GET)
73
- verifyAccessToken, // Verify a JWT access token
74
- encryptSession, // For custom session storage scenarios
75
- terminateSession, // Force-terminate a specific session
76
- } from "@workos-inc/authkit-nextjs";
77
-
78
- export type {
79
- User,
80
- AuthKitSession,
81
- } from "@workos-inc/authkit-nextjs";
82
-
83
- /**
84
- * Low-level WorkOS Node SDK.
85
- * Use for organization management, directory sync, audit logs, etc.
86
- *
79
+ * @example Vite / Express API (node SDK)
87
80
  * import { workos } from "${authPackageName}/server";
88
- * const orgs = await workos.organizations.listOrganizations();
81
+ * const { user } = await workos.userManagement.getUser(userId);
89
82
  */
83
+ ${opts.frameworks.includes("nextjs") ? `export { getUser, withAuth, signOut } from "@workos-inc/authkit-nextjs";` : ""}
90
84
  import WorkOS from "@workos-inc/node";
91
85
 
92
- if (!process.env.WORKOS_API_KEY) {
93
- throw new Error("Missing WORKOS_API_KEY — set it in your app's .env.local");
94
- }
86
+ export const workos = new WorkOS(process.env.WORKOS_API_KEY!);
95
87
 
96
- export const workos = new WorkOS(process.env.WORKOS_API_KEY);
97
- export const workosClientId = process.env.WORKOS_CLIENT_ID!;
88
+ export type { User } from "@workos-inc/node";
98
89
  `);
99
- // ── client.ts ─────────────────────────────────────────────────────────
100
- // AuthKit v1: useAuth() hook from the /components sub-path
90
+ // ── client.ts ───────────────────────────────────────────────────────────
101
91
  await writeFile(path.join(pkgDir, "client.ts"), `/**
102
- * WorkOS AuthKit v1+ — client-side hooks.
103
- *
104
- * The AuthKitProvider is required at the root of apps that use useAuth().
105
- *
106
- * @example Root layout
107
- * import { AuthKitProvider } from "${authPackageName}/client";
108
- * export default function Layout({ children }) {
109
- * return <AuthKitProvider>{children}</AuthKitProvider>;
110
- * }
111
- *
112
- * @example Any client component
113
- * "use client";
114
- * import { useAuth } from "${authPackageName}/client";
115
- * const { user, loading, getAccessToken } = useAuth();
92
+ * WorkOS AuthKit — client-side helper.
93
+ * WorkOS uses server-side sessions; there is no React client SDK.
94
+ * This module re-exports the auth URL helpers used in client components.
116
95
  */
117
96
  "use client";
118
97
 
119
- export {
120
- useAuth, // { user, loading, getAccessToken, getRawAccessToken }
121
- AuthKitProvider, // Required root context provider
122
- } from "@workos-inc/authkit-nextjs/components";
98
+ export function getAuthorizationUrl(opts?: { returnPathname?: string }): string {
99
+ const base = process.env.NEXT_PUBLIC_WORKOS_REDIRECT_URI ?? "/api/auth/callback";
100
+ if (opts?.returnPathname) {
101
+ return \`\${base}?returnPathname=\${encodeURIComponent(opts.returnPathname)}\`;
102
+ }
103
+ return base;
104
+ }
123
105
  `);
124
- // ── middleware.ts ─────────────────────────────────────────────────────
125
- // AuthKit v1: authkitMiddleware with middlewareAuth option
126
- await writeFile(path.join(pkgDir, "middleware.ts"), `/**
127
- * WorkOS AuthKit v1+ — Next.js middleware.
128
- *
129
- * Quick start — copy into apps/<your-app>/middleware.ts:
130
- *
131
- * import type { NextRequest } from "next/server";
132
- * import { authMiddleware, middlewareConfig } from "${authPackageName}/middleware";
106
+ // ── middleware.ts (Next.js only) ─────────────────────────────────────────
107
+ if (opts.frameworks.includes("nextjs")) {
108
+ await writeFile(path.join(pkgDir, "middleware.ts"), `/**
109
+ * WorkOS AuthKit — Next.js middleware.
133
110
  *
134
- * export default function middleware(request: NextRequest) {
135
- * return authMiddleware(request);
136
- * }
111
+ * Copy into apps/<your-app>/middleware.ts:
137
112
  *
113
+ * import { authMiddleware, middlewareConfig } from "${authPackageName}/next";
114
+ * export default authMiddleware;
138
115
  * export const config = middlewareConfig;
139
- *
140
- * Custom public paths:
141
- *
142
- * import { buildMiddleware } from "${authPackageName}/middleware";
143
- * export default buildMiddleware({ unauthenticatedPaths: ["/", "/about"] });
144
- * export { middlewareConfig as config } from "${authPackageName}/middleware";
145
116
  */
146
117
  import { authkitMiddleware } from "@workos-inc/authkit-nextjs";
147
- import type { AuthkitMiddlewareOptions } from "@workos-inc/authkit-nextjs";
118
+
119
+ export const authMiddleware = authkitMiddleware();
120
+
121
+ export function buildMiddleware(opts?: Parameters<typeof authkitMiddleware>[0]) {
122
+ return authkitMiddleware(opts);
123
+ }
148
124
 
149
125
  export const middlewareConfig = {
150
126
  matcher: [
151
- "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)",
152
- "/(api|trpc)(.*)",
127
+ "/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)",
153
128
  ],
154
129
  };
155
-
156
- const defaultUnauthenticatedPaths = [
157
- "/",
158
- "/sign-in",
159
- "/sign-up",
160
- "/api/webhooks(.*)",
161
- ];
162
-
163
- /** Default middleware — requires auth on all paths except the ones above */
164
- export const authMiddleware = authkitMiddleware({
165
- middlewareAuth: {
166
- enabled: true,
167
- unauthenticatedPaths: defaultUnauthenticatedPaths,
168
- },
169
- });
170
-
171
- /**
172
- * Build a middleware with configurable unauthenticated paths.
173
- *
174
- * @param unauthenticatedPaths - Paths that do NOT require authentication
175
- * @param options - Additional AuthKit middleware options
176
- */
177
- export function buildMiddleware({
178
- unauthenticatedPaths = defaultUnauthenticatedPaths,
179
- ...options
180
- }: {
181
- unauthenticatedPaths?: string[];
182
- } & Omit<AuthkitMiddlewareOptions, "middlewareAuth"> = {}) {
183
- return authkitMiddleware({
184
- ...options,
185
- middlewareAuth: {
186
- enabled: true,
187
- unauthenticatedPaths,
188
- },
189
- });
190
- }
191
130
  `);
192
- // ── .env.example ─────────────────────────────────────────────────────────
193
- await writeFile(path.join(pkgDir, ".env.example"), `# ─── WorkOS AuthKit v1+ ──────────────────────────────────────────────────────
194
- # Get these from: https://dashboard.workos.com → your app → API Keys
131
+ }
132
+ // ── .env.example ────────────────────────────────────────────────────────
133
+ await writeFile(path.join(pkgDir, ".env.example"), `# WorkOS — https://dashboard.workos.com → API Keys
195
134
  WORKOS_API_KEY=sk_REPLACE_ME
196
135
  WORKOS_CLIENT_ID=client_REPLACE_ME
197
136
 
198
- # Must match the redirect URI configured in your WorkOS dashboard
199
- WORKOS_REDIRECT_URI=http://localhost:3000/callback
137
+ # AuthKit redirect URI (register this in your WorkOS dashboard)
138
+ WORKOS_REDIRECT_URI=http://localhost:3000/api/auth/callback
139
+ NEXT_PUBLIC_WORKOS_REDIRECT_URI=http://localhost:3000/api/auth/callback
200
140
 
201
- # Cookie encryption secret — generate with: openssl rand -base64 32
202
- # Must be at least 32 characters
203
- WORKOS_COOKIE_PASSWORD=REPLACE_WITH_RANDOM_32_CHAR_STRING
204
-
205
- # The public URL of your app
206
- NEXT_PUBLIC_APP_URL=http://localhost:3000
141
+ # Cookie secret — generate with: openssl rand -base64 32
142
+ WORKOS_COOKIE_PASSWORD=REPLACE_WITH_32_CHAR_RANDOM_STRING
207
143
  `);
208
- // ── README.md ─────────────────────────────────────────────────────────────
209
- await writeFile(path.join(pkgDir, "README.md"), `# ${authPackageName} — WorkOS AuthKit v1+
144
+ // ── README.md ────────────────────────────────────────────────────────────
145
+ await writeFile(path.join(pkgDir, "README.md"), `# ${authPackageName} — WorkOS AuthKit
210
146
 
211
- Shared authentication powered by [WorkOS AuthKit](https://workos.com/docs/user-management) — enterprise SSO, SCIM, MFA, magic auth, and a hosted sign-in UI.
147
+ Shared authentication package powered by [WorkOS AuthKit](https://workos.com/docs/user-management).
212
148
 
213
- > **AuthKit v1 notes:** \`getSession()\` was renamed to \`getUser()\`. The HOC \`withAuth()\` now passes \`{ user }\` directly (no session wrapper). \`AuthKitProvider\` is now required for \`useAuth()\`.
149
+ ## Installed packages
150
+ ${Object.keys(frameworkDeps).map((d) => `- \`${d}\``).join("\n")}
214
151
 
215
152
  ## Setup
216
153
 
217
- ### 1. Copy env vars to your app
154
+ ### 1. Copy env vars
218
155
  \`\`\`bash
219
156
  cp packages/auth/.env.example apps/<your-app>/.env.local
220
157
  \`\`\`
221
158
 
222
- Fill in from your [WorkOS Dashboard](https://dashboard.workos.com):
223
- - \`WORKOS_API_KEY\`
224
- - \`WORKOS_CLIENT_ID\`
225
- - \`WORKOS_COOKIE_PASSWORD\` (run: \`openssl rand -base64 32\`)
226
- - Add \`WORKOS_REDIRECT_URI\` in the WorkOS dashboard → Redirects
227
-
228
- ### 2. Add the dependency
229
- \`\`\`json
230
- { "dependencies": { "${authPackageName}": "workspace:*" } }
231
- \`\`\`
232
-
233
- ### 3. Add the callback route
159
+ ${opts.frameworks.includes("nextjs") ? `### 2. Add the callback route (Next.js)
234
160
  \`\`\`ts
235
- // apps/<your-app>/app/callback/route.ts
236
- export { handleAuth as GET } from "${authPackageName}/server";
161
+ // apps/<your-app>/app/api/auth/callback/route.ts
162
+ import { handleAuth } from "@workos-inc/authkit-nextjs";
163
+ export const GET = handleAuth();
237
164
  \`\`\`
238
165
 
239
- ### 4. Add the middleware
166
+ ### 3. Add middleware
240
167
  \`\`\`ts
241
168
  // apps/<your-app>/middleware.ts
242
- import type { NextRequest } from "next/server";
243
- import { authMiddleware, middlewareConfig } from "${authPackageName}/next";
244
-
245
- export default function middleware(request: NextRequest) {
246
- return authMiddleware(request);
247
- }
248
-
249
- export const config = middlewareConfig;
250
- \`\`\`
251
-
252
- ### 5. Wrap your layout with AuthKitProvider
253
- \`\`\`tsx
254
- // apps/<your-app>/app/layout.tsx
255
- import { AuthKitProvider } from "${authPackageName}/client";
256
- export default function Layout({ children }) {
257
- return <AuthKitProvider>{children}</AuthKitProvider>;
258
- }
169
+ export { authMiddleware as default, middlewareConfig as config } from "${authPackageName}/next";
259
170
  \`\`\`
260
171
 
261
- ### 6. Use in your pages
262
- \`\`\`tsx
263
- // Server component — HOC (auto-redirects if not signed in)
264
- import { withAuth } from "${authPackageName}/server";
265
- export default withAuth(async function Page({ user }) {
266
- return <h1>Hello, {user.firstName}</h1>;
267
- });
268
-
269
- // Server component — manual
172
+ ### 4. Use in server components
173
+ \`\`\`ts
270
174
  import { getUser } from "${authPackageName}/server";
271
175
  const { user } = await getUser();
272
-
273
- // Client component
274
- "use client";
275
- import { useAuth } from "${authPackageName}/client";
276
- const { user, loading } = useAuth();
277
-
278
- // Sign-in redirect page
279
- import { getSignInUrl } from "${authPackageName}/server";
280
- import { redirect } from "next/navigation";
281
- export default async function SignIn() { redirect(await getSignInUrl()); }
282
- \`\`\`
283
-
284
- ## API
285
-
286
- | Sub-path | Key exports |
287
- |---|---|
288
- | \`${authPackageName}/server\` | \`getUser()\`, \`withAuth()\`, \`getSignInUrl()\`, \`handleAuth\`, \`workos\`, \`signOut()\` |
289
- | \`${authPackageName}/client\` | \`useAuth\`, \`AuthKitProvider\` |
290
- | \`${authPackageName}/middleware\` | \`authMiddleware\`, \`buildMiddleware()\`, \`middlewareConfig\` |
291
- | \`${authPackageName}/next\` | \`authMiddleware\`, \`buildMiddleware()\`, \`middlewareConfig\` |
176
+ \`\`\`` : `### 2. Use the node SDK
177
+ \`\`\`ts
178
+ import { workos } from "${authPackageName}/server";
179
+ const user = await workos.userManagement.getUser(userId);
180
+ \`\`\``}
292
181
  `);
293
182
  },
294
183
  };
@@ -1 +1 @@
1
- {"version":3,"file":"workos.js","sourceRoot":"","sources":["../../../../src/setups/auth/systems/workos.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACtD,KAAK,EAAE,gBAAgB;IAEvB,YAAY,EAAE;QACb,4BAA4B,EAAE,QAAQ;QACtC,kBAAkB,EAAE,QAAQ;KAC5B;IAED,eAAe,EAAE;QAChB,cAAc,EAAE,SAAS;KACzB;IAED,gBAAgB,EAAE;QACjB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,YAAY;KACzB;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,IAAwB;QACtD,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE9D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QAExC,yEAAyE;QACzE,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAC7B;KACE,eAAe;;;2CAGuB,eAAe;2CACf,eAAe;2CACf,eAAe;;;;CAIzD,CACE,CAAC;QAEF,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAC5B,2BAA2B,eAAe;;;;;;CAM5C,CACE,CAAC;QAEF,yEAAyE;QACzE,+DAA+D;QAC/D,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9B;;;;;;;;;gCAS6B,eAAe;;;;;iCAKd,eAAe;;;;;;qCAMX,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;+BA0BrB,eAAe;;;;;;;;;;;CAW7C,CACE,CAAC;QAEF,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9B;;;;;;wCAMqC,eAAe;;;;;;;gCAOvB,eAAe;;;;;;;;;CAS9C,CACE,CAAC;QAEF,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAClC;;;;;;yDAMsD,eAAe;;;;;;;;;;wCAUhC,eAAe;;mDAEJ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CjE,CACE,CAAC;QAEF,4EAA4E;QAC5E,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC;;;;;;;;;;;;;;CAcF,CACE,CAAC;QAEF,6EAA6E;QAC7E,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9B,KAAK,eAAe;;;;;;;;;;;;;;;;;;;;;uBAqBA,eAAe;;;;;;qCAMD,eAAe;;;;;;;oDAOA,eAAe;;;;;;;;;;;;mCAYhC,eAAe;;;;;;;;;4BAStB,eAAe;;;;;;2BAMhB,eAAe;;;;;2BAKf,eAAe;;;;gCAIV,eAAe;;;;;;;;;MASzC,eAAe;MACf,eAAe;MACf,eAAe;MACf,eAAe;CACpB,CACE,CAAC;IACH,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"workos.js","sourceRoot":"","sources":["../../../../src/setups/auth/systems/workos.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export type AuthProvider = "clerk" | "better-auth" | "workos";
2
+ /** Frameworks the auth package can target. */
3
+ export type AppFramework = "nextjs" | "vite" | "remix" | "expo";
2
4
  export interface AuthPackageOptions {
3
5
  /** The chosen provider */
4
6
  provider: AuthProvider;
@@ -10,25 +12,25 @@ export interface AuthPackageOptions {
10
12
  scope: string;
11
13
  /** The package manager in use */
12
14
  pm: string;
15
+ /**
16
+ * Frameworks detected across apps/ in the workspace.
17
+ * Scaffolders use this to only install the packages actually needed.
18
+ */
19
+ frameworks: AppFramework[];
13
20
  /** If true, print what would happen but write nothing */
14
21
  dryRun?: boolean;
15
22
  }
16
23
  /**
17
24
  * Everything a provider scaffolder must implement.
18
- *
19
- * The CLI calls scaffold() once — it creates the entire packages/auth
20
- * directory for that provider, including:
21
- * - package.json
22
- * - tsconfig.json
23
- * - index.ts (the public barrel)
24
- * - <provider>-specific files
25
- * - .env.example
26
- * - README.md
27
25
  */
28
26
  export interface AuthPackageScaffolder {
29
27
  /** Pretty label used in step output */
30
28
  label: string;
31
- /** npm deps that go into the auth package's package.json dependencies */
29
+ /**
30
+ * npm deps that go into the auth package's package.json dependencies.
31
+ * Scaffolders can use opts.frameworks to compute these dynamically —
32
+ * this static field is for the base set always required.
33
+ */
32
34
  dependencies: Record<string, string>;
33
35
  /** npm devDeps for the auth package */
34
36
  devDependencies: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/setups/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IAClC,0BAA0B;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IACrC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/setups/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE9D,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IAClC,0BAA0B;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * tsconfigs.ts — single source of truth for every tsconfig file the CLI writes.
3
+ *
4
+ * ── Architecture of the generated workspace ───────────────────────────────────
5
+ *
6
+ * The CLI scaffolds a `packages/typescript` workspace package at init time.
7
+ * It is a private, never-built package whose only purpose is to own and
8
+ * distribute the shared tsconfig presets for the whole monorepo.
9
+ *
10
+ * my-monorepo/
11
+ * ├── tsconfig.base.json ← strict settings + global paths (no module/resolution)
12
+ * ├── tsconfig.json ← solution file: references all packages + apps
13
+ * └── packages/
14
+ * └── typescript/ ← workspace package: @scope/typescript
15
+ * ├── package.json ← private: true, exports all tsconfig files
16
+ * ├── tsconfig.base.json ← re-exports root base (one hop)
17
+ * ├── tsconfig.internal.json ← ESNext + Bundler, noEmit — for source-only packages
18
+ * ├── tsconfig.package.json ← NodeNext + NodeNext, composite — for published packages
19
+ * ├── tsconfig.nextjs.json ← ESNext + Bundler, jsx:preserve, Next.js plugin
20
+ * ├── tsconfig.vite.json ← ESNext + Bundler, jsx:react-jsx
21
+ * ├── tsconfig.remix.json ← ESNext + Bundler, jsx:react-jsx
22
+ * └── tsconfig.expo.json ← ESNext + Bundler, jsx:react-native
23
+ *
24
+ * Packages and apps extend like this:
25
+ *
26
+ * packages/ui/tsconfig.json:
27
+ * { "extends": "@scope/typescript/tsconfig.internal.json" }
28
+ *
29
+ * apps/dashboard/tsconfig.json:
30
+ * { "extends": "@scope/typescript/tsconfig.nextjs.json" }
31
+ *
32
+ * ── Two strategies for packages ───────────────────────────────────────────────
33
+ *
34
+ * INTERNAL (private: true, never published):
35
+ * - noEmit: true — no dist/, no build script, no build step ever
36
+ * - Consumed via path alias: @scope/pkg → packages/pkg/index.ts (source)
37
+ * - ESNext + Bundler: the bundler (Vite/Next.js/esbuild) handles resolution
38
+ * at app build time, so no .js extensions needed in source imports
39
+ *
40
+ * PUBLIC (published to npm):
41
+ * - Emits to dist/ via tsc
42
+ * - NodeNext + NodeNext: Node.js ESM requires .js extensions in source
43
+ * - composite + incremental for Nx project reference caching
44
+ *
45
+ * ── The root tsconfig.base.json ───────────────────────────────────────────────
46
+ * Only holds: target, strict flags, esModuleInterop, isolatedModules, and
47
+ * the global paths map. Does NOT set module or moduleResolution — those
48
+ * belong in the per-preset files inside packages/typescript/.
49
+ */
50
+ import type { PackageVisibility } from "./config.js";
51
+ export type { PackageVisibility };
52
+ export type AppFramework = "nextjs" | "vite" | "remix" | "expo";
53
+ export declare function rootTsConfigBase(scope: string): object;
54
+ /**
55
+ * Returns the package.json for the @scope/typescript workspace package.
56
+ * Private, never published. Its exports point at the tsconfig preset files
57
+ * so other packages can extend them by package name.
58
+ */
59
+ export declare function typescriptPackageJson(scope: string): object;
60
+ /**
61
+ * Returns a map of filename → content for every file inside packages/typescript/.
62
+ * Written by `init` and regenerated by `migrate`.
63
+ */
64
+ export declare function typescriptPresets(): Record<string, object>;
65
+ interface PackageTsConfigOptions {
66
+ scope: string;
67
+ pkgName: string;
68
+ visibility: PackageVisibility;
69
+ /** true for React packages — adds jsx:react-jsx and DOM lib */
70
+ react?: boolean;
71
+ }
72
+ export declare function packageTsConfig(opts: PackageTsConfigOptions): object;
73
+ interface AppTsConfigOptions {
74
+ scope: string;
75
+ framework: AppFramework;
76
+ hasSrcDir: boolean;
77
+ /**
78
+ * Whether packages/typescript/ exists in the workspace.
79
+ * Falls back to ../../tsconfig.base.json for pre-migration workspaces.
80
+ * Defaults to true — all new workspaces have it.
81
+ */
82
+ typescriptPkgExists?: boolean;
83
+ }
84
+ export declare function appTsConfig(opts: AppTsConfigOptions): object;
85
+ export declare function rootTsConfigSolution(packages: string[], apps: string[]): object;
86
+ /** @deprecated Use typescriptPresets() instead */
87
+ export declare const toolingPresets: typeof typescriptPresets;
88
+ //# sourceMappingURL=tsconfigs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfigs.d.ts","sourceRoot":"","sources":["../src/tsconfigs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAIhE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBtD;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8G1D;AAID,UAAU,sBAAsB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAuCpE;AAID,UAAU,kBAAkB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAyB5D;AAiBD,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,EAAE,GACZ,MAAM,CAUR;AAKD,kDAAkD;AAClD,eAAO,MAAM,cAAc,0BAAoB,CAAC"}