nx-factory-cli 2.1.2 → 2.1.3

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/index.js +42127 -93
  2. package/package.json +3 -2
  3. package/dist/commands/add-app.d.ts +0 -10
  4. package/dist/commands/add-app.d.ts.map +0 -1
  5. package/dist/commands/add-app.js +0 -392
  6. package/dist/commands/add-app.js.map +0 -1
  7. package/dist/commands/add-auth.d.ts +0 -8
  8. package/dist/commands/add-auth.d.ts.map +0 -1
  9. package/dist/commands/add-auth.js +0 -182
  10. package/dist/commands/add-auth.js.map +0 -1
  11. package/dist/commands/add-component.d.ts +0 -2
  12. package/dist/commands/add-component.d.ts.map +0 -1
  13. package/dist/commands/add-component.js +0 -116
  14. package/dist/commands/add-component.js.map +0 -1
  15. package/dist/commands/add-lib.d.ts +0 -9
  16. package/dist/commands/add-lib.d.ts.map +0 -1
  17. package/dist/commands/add-lib.js +0 -190
  18. package/dist/commands/add-lib.js.map +0 -1
  19. package/dist/commands/add-storybook.d.ts +0 -6
  20. package/dist/commands/add-storybook.d.ts.map +0 -1
  21. package/dist/commands/add-storybook.js +0 -181
  22. package/dist/commands/add-storybook.js.map +0 -1
  23. package/dist/commands/doctor.d.ts +0 -2
  24. package/dist/commands/doctor.d.ts.map +0 -1
  25. package/dist/commands/doctor.js +0 -235
  26. package/dist/commands/doctor.js.map +0 -1
  27. package/dist/commands/init.d.ts +0 -9
  28. package/dist/commands/init.d.ts.map +0 -1
  29. package/dist/commands/init.js +0 -527
  30. package/dist/commands/init.js.map +0 -1
  31. package/dist/commands/list.d.ts +0 -2
  32. package/dist/commands/list.d.ts.map +0 -1
  33. package/dist/commands/list.js +0 -130
  34. package/dist/commands/list.js.map +0 -1
  35. package/dist/commands/publish.d.ts +0 -8
  36. package/dist/commands/publish.d.ts.map +0 -1
  37. package/dist/commands/publish.js +0 -179
  38. package/dist/commands/publish.js.map +0 -1
  39. package/dist/commands/remove-component.d.ts +0 -5
  40. package/dist/commands/remove-component.d.ts.map +0 -1
  41. package/dist/commands/remove-component.js +0 -172
  42. package/dist/commands/remove-component.js.map +0 -1
  43. package/dist/commands/update.d.ts +0 -5
  44. package/dist/commands/update.d.ts.map +0 -1
  45. package/dist/commands/update.js +0 -126
  46. package/dist/commands/update.js.map +0 -1
  47. package/dist/config.d.ts +0 -14
  48. package/dist/config.d.ts.map +0 -1
  49. package/dist/config.js +0 -35
  50. package/dist/config.js.map +0 -1
  51. package/dist/exec.d.ts +0 -25
  52. package/dist/exec.d.ts.map +0 -1
  53. package/dist/exec.js +0 -80
  54. package/dist/exec.js.map +0 -1
  55. package/dist/files.d.ts +0 -7
  56. package/dist/files.d.ts.map +0 -1
  57. package/dist/files.js +0 -23
  58. package/dist/files.js.map +0 -1
  59. package/dist/index.d.ts +0 -3
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js.map +0 -1
  62. package/dist/resolve-root.d.ts +0 -22
  63. package/dist/resolve-root.d.ts.map +0 -1
  64. package/dist/resolve-root.js +0 -65
  65. package/dist/resolve-root.js.map +0 -1
  66. package/dist/setups/auth/base.d.ts +0 -11
  67. package/dist/setups/auth/base.d.ts.map +0 -1
  68. package/dist/setups/auth/base.js +0 -91
  69. package/dist/setups/auth/base.js.map +0 -1
  70. package/dist/setups/auth/index.d.ts +0 -6
  71. package/dist/setups/auth/index.d.ts.map +0 -1
  72. package/dist/setups/auth/index.js +0 -5
  73. package/dist/setups/auth/index.js.map +0 -1
  74. package/dist/setups/auth/systems/better-auth.d.ts +0 -3
  75. package/dist/setups/auth/systems/better-auth.d.ts.map +0 -1
  76. package/dist/setups/auth/systems/better-auth.js +0 -357
  77. package/dist/setups/auth/systems/better-auth.js.map +0 -1
  78. package/dist/setups/auth/systems/clerk.d.ts +0 -3
  79. package/dist/setups/auth/systems/clerk.d.ts.map +0 -1
  80. package/dist/setups/auth/systems/clerk.js +0 -259
  81. package/dist/setups/auth/systems/clerk.js.map +0 -1
  82. package/dist/setups/auth/systems/workos.d.ts +0 -3
  83. package/dist/setups/auth/systems/workos.d.ts.map +0 -1
  84. package/dist/setups/auth/systems/workos.js +0 -273
  85. package/dist/setups/auth/systems/workos.js.map +0 -1
  86. package/dist/setups/auth/types.d.ts +0 -39
  87. package/dist/setups/auth/types.d.ts.map +0 -1
  88. package/dist/setups/auth/types.js +0 -2
  89. package/dist/setups/auth/types.js.map +0 -1
  90. package/dist/ui.d.ts +0 -44
  91. package/dist/ui.d.ts.map +0 -1
  92. package/dist/ui.js +0 -149
  93. package/dist/ui.js.map +0 -1
@@ -1,273 +0,0 @@
1
- import path from "path";
2
- import { writeFile, ensureDir } from "../../../files.js";
3
- export const workosScaffolder = {
4
- label: "WorkOS AuthKit",
5
- dependencies: {
6
- "@workos-inc/authkit-nextjs": "latest",
7
- "@workos-inc/node": "latest",
8
- },
9
- devDependencies: {
10
- "@types/react": "^19.0.0",
11
- },
12
- peerDependencies: {
13
- react: "^18 || ^19",
14
- "react-dom": "^18 || ^19",
15
- },
16
- async scaffold(pkgDir, _opts) {
17
- await ensureDir(path.join(pkgDir, "src"));
18
- // ── src/index.ts ──────────────────────────────────────────────────────────
19
- await writeFile(path.join(pkgDir, "src/index.ts"), `/**
20
- * @workspace/auth — WorkOS AuthKit latest setup.
21
- *
22
- * Prefer sub-path imports:
23
- * import { getUser, withAuth } from "@workspace/auth/server"
24
- * import { useAuth } from "@workspace/auth/client"
25
- * import { authMiddleware } from "@workspace/auth/middleware"
26
- */
27
- export * from "./server.js";
28
- export * from "./client.js";
29
- `);
30
- // ── src/server.ts ─────────────────────────────────────────────────────────
31
- // AuthKit v1+: getUser() replaces getSession(), withAuth() HOC
32
- await writeFile(path.join(pkgDir, "src/server.ts"), `/**
33
- * WorkOS AuthKit v1+ — server-side helpers.
34
- *
35
- * AuthKit v1 changes from v0:
36
- * - getSession() → getUser() (returns { user, sessionId, accessToken })
37
- * - withAuth() — HOC now passes { user } prop (no session wrapper)
38
- * - handleAuth() — still the catch-all callback handler
39
- *
40
- * @example Server Component (manual check)
41
- * import { getUser } from "@workspace/auth/server";
42
- * const { user } = await getUser();
43
- * if (!user) redirect("/sign-in");
44
- *
45
- * @example Server Component (HOC — auto-redirects)
46
- * import { withAuth } from "@workspace/auth/server";
47
- * export default withAuth(async function Page({ user }) {
48
- * return <h1>Hello {user.firstName}</h1>;
49
- * });
50
- *
51
- * @example Sign-in redirect
52
- * import { getSignInUrl } from "@workspace/auth/server";
53
- * redirect(await getSignInUrl());
54
- */
55
-
56
- export {
57
- getUser, // Replaces getSession() in AuthKit v1
58
- withAuth, // HOC — passes { user } to your component
59
- getSignInUrl, // Returns the WorkOS hosted sign-in URL
60
- getSignUpUrl, // Returns the WorkOS hosted sign-up URL
61
- signOut, // Server-side sign out (clears session cookie)
62
- refreshSession, // Extend the session lifetime
63
- handleAuth, // Catch-all callback route handler (GET)
64
- verifyAccessToken, // Verify a JWT access token
65
- encryptSession, // For custom session storage scenarios
66
- terminateSession, // Force-terminate a specific session
67
- } from "@workos-inc/authkit-nextjs";
68
-
69
- export type {
70
- User,
71
- AuthKitSession,
72
- } from "@workos-inc/authkit-nextjs";
73
-
74
- /**
75
- * Low-level WorkOS Node SDK.
76
- * Use for organization management, directory sync, audit logs, etc.
77
- *
78
- * import { workos } from "@workspace/auth/server";
79
- * const orgs = await workos.organizations.listOrganizations();
80
- */
81
- import WorkOS from "@workos-inc/node";
82
-
83
- if (!process.env.WORKOS_API_KEY) {
84
- throw new Error("Missing WORKOS_API_KEY — set it in your app's .env.local");
85
- }
86
-
87
- export const workos = new WorkOS(process.env.WORKOS_API_KEY);
88
- export const workosClientId = process.env.WORKOS_CLIENT_ID!;
89
- `);
90
- // ── src/client.ts ─────────────────────────────────────────────────────────
91
- // AuthKit v1: useAuth() hook from the /components sub-path
92
- await writeFile(path.join(pkgDir, "src/client.ts"), `/**
93
- * WorkOS AuthKit v1+ — client-side hooks.
94
- *
95
- * The AuthKitProvider is required at the root of apps that use useAuth().
96
- *
97
- * @example Root layout
98
- * import { AuthKitProvider } from "@workspace/auth/client";
99
- * export default function Layout({ children }) {
100
- * return <AuthKitProvider>{children}</AuthKitProvider>;
101
- * }
102
- *
103
- * @example Any client component
104
- * "use client";
105
- * import { useAuth } from "@workspace/auth/client";
106
- * const { user, loading, getAccessToken } = useAuth();
107
- */
108
- "use client";
109
-
110
- export {
111
- useAuth, // { user, loading, getAccessToken, getRawAccessToken }
112
- AuthKitProvider, // Required root context provider
113
- } from "@workos-inc/authkit-nextjs/components";
114
- `);
115
- // ── src/middleware.ts ─────────────────────────────────────────────────────
116
- // AuthKit v1: authkitMiddleware with middlewareAuth option
117
- await writeFile(path.join(pkgDir, "src/middleware.ts"), `/**
118
- * WorkOS AuthKit v1+ — Next.js middleware.
119
- *
120
- * Quick start — copy into apps/<your-app>/middleware.ts:
121
- *
122
- * export { authMiddleware as default, middlewareConfig as config }
123
- * from "@workspace/auth/middleware";
124
- *
125
- * Custom public paths:
126
- *
127
- * import { buildMiddleware } from "@workspace/auth/middleware";
128
- * export default buildMiddleware({ unauthenticatedPaths: ["/", "/about"] });
129
- * export { middlewareConfig as config } from "@workspace/auth/middleware";
130
- */
131
- import { authkitMiddleware } from "@workos-inc/authkit-nextjs";
132
- import type { AuthkitMiddlewareOptions } from "@workos-inc/authkit-nextjs";
133
-
134
- export const middlewareConfig = {
135
- matcher: [
136
- "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)",
137
- "/(api|trpc)(.*)",
138
- ],
139
- };
140
-
141
- const defaultUnauthenticatedPaths = [
142
- "/",
143
- "/sign-in",
144
- "/sign-up",
145
- "/api/webhooks(.*)",
146
- ];
147
-
148
- /** Default middleware — requires auth on all paths except the ones above */
149
- export const authMiddleware = authkitMiddleware({
150
- middlewareAuth: {
151
- enabled: true,
152
- unauthenticatedPaths: defaultUnauthenticatedPaths,
153
- },
154
- });
155
-
156
- /**
157
- * Build a middleware with configurable unauthenticated paths.
158
- *
159
- * @param unauthenticatedPaths - Paths that do NOT require authentication
160
- * @param options - Additional AuthKit middleware options
161
- */
162
- export function buildMiddleware({
163
- unauthenticatedPaths = defaultUnauthenticatedPaths,
164
- ...options
165
- }: {
166
- unauthenticatedPaths?: string[];
167
- } & Omit<AuthkitMiddlewareOptions, "middlewareAuth"> = {}) {
168
- return authkitMiddleware({
169
- ...options,
170
- middlewareAuth: {
171
- enabled: true,
172
- unauthenticatedPaths,
173
- },
174
- });
175
- }
176
- `);
177
- // ── .env.example ─────────────────────────────────────────────────────────
178
- await writeFile(path.join(pkgDir, ".env.example"), `# ─── WorkOS AuthKit v1+ ──────────────────────────────────────────────────────
179
- # Get these from: https://dashboard.workos.com → your app → API Keys
180
- WORKOS_API_KEY=sk_REPLACE_ME
181
- WORKOS_CLIENT_ID=client_REPLACE_ME
182
-
183
- # Must match the redirect URI configured in your WorkOS dashboard
184
- WORKOS_REDIRECT_URI=http://localhost:3000/callback
185
-
186
- # Cookie encryption secret — generate with: openssl rand -base64 32
187
- # Must be at least 32 characters
188
- WORKOS_COOKIE_PASSWORD=REPLACE_WITH_RANDOM_32_CHAR_STRING
189
-
190
- # The public URL of your app
191
- NEXT_PUBLIC_APP_URL=http://localhost:3000
192
- `);
193
- // ── README.md ─────────────────────────────────────────────────────────────
194
- await writeFile(path.join(pkgDir, "README.md"), `# @workspace/auth — WorkOS AuthKit v1+
195
-
196
- Shared authentication powered by [WorkOS AuthKit](https://workos.com/docs/user-management) — enterprise SSO, SCIM, MFA, magic auth, and a hosted sign-in UI.
197
-
198
- > **AuthKit v1 notes:** \`getSession()\` was renamed to \`getUser()\`. The HOC \`withAuth()\` now passes \`{ user }\` directly (no session wrapper). \`AuthKitProvider\` is now required for \`useAuth()\`.
199
-
200
- ## Setup
201
-
202
- ### 1. Copy env vars to your app
203
- \`\`\`bash
204
- cp packages/auth/.env.example apps/<your-app>/.env.local
205
- \`\`\`
206
-
207
- Fill in from your [WorkOS Dashboard](https://dashboard.workos.com):
208
- - \`WORKOS_API_KEY\`
209
- - \`WORKOS_CLIENT_ID\`
210
- - \`WORKOS_COOKIE_PASSWORD\` (run: \`openssl rand -base64 32\`)
211
- - Add \`WORKOS_REDIRECT_URI\` in the WorkOS dashboard → Redirects
212
-
213
- ### 2. Add the dependency
214
- \`\`\`json
215
- { "dependencies": { "@workspace/auth": "workspace:*" } }
216
- \`\`\`
217
-
218
- ### 3. Add the callback route
219
- \`\`\`ts
220
- // apps/<your-app>/src/app/callback/route.ts
221
- export { handleAuth as GET } from "@workspace/auth/server";
222
- \`\`\`
223
-
224
- ### 4. Add the middleware
225
- \`\`\`ts
226
- // apps/<your-app>/middleware.ts
227
- export { authMiddleware as default, middlewareConfig as config }
228
- from "@workspace/auth/middleware";
229
- \`\`\`
230
-
231
- ### 5. Wrap your layout with AuthKitProvider
232
- \`\`\`tsx
233
- // apps/<your-app>/src/app/layout.tsx
234
- import { AuthKitProvider } from "@workspace/auth/client";
235
- export default function Layout({ children }) {
236
- return <AuthKitProvider>{children}</AuthKitProvider>;
237
- }
238
- \`\`\`
239
-
240
- ### 6. Use in your pages
241
- \`\`\`tsx
242
- // Server component — HOC (auto-redirects if not signed in)
243
- import { withAuth } from "@workspace/auth/server";
244
- export default withAuth(async function Page({ user }) {
245
- return <h1>Hello, {user.firstName}</h1>;
246
- });
247
-
248
- // Server component — manual
249
- import { getUser } from "@workspace/auth/server";
250
- const { user } = await getUser();
251
-
252
- // Client component
253
- "use client";
254
- import { useAuth } from "@workspace/auth/client";
255
- const { user, loading } = useAuth();
256
-
257
- // Sign-in redirect page
258
- import { getSignInUrl } from "@workspace/auth/server";
259
- import { redirect } from "next/navigation";
260
- export default async function SignIn() { redirect(await getSignInUrl()); }
261
- \`\`\`
262
-
263
- ## API
264
-
265
- | Sub-path | Key exports |
266
- |---|---|
267
- | \`@workspace/auth/server\` | \`getUser()\`, \`withAuth()\`, \`getSignInUrl()\`, \`handleAuth\`, \`workos\`, \`signOut()\` |
268
- | \`@workspace/auth/client\` | \`useAuth\`, \`AuthKitProvider\` |
269
- | \`@workspace/auth/middleware\` | \`authMiddleware\`, \`buildMiddleware()\`, \`middlewareConfig\` |
270
- `);
271
- },
272
- };
273
- //# sourceMappingURL=workos.js.map
@@ -1 +0,0 @@
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;AAGzD,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACrD,KAAK,EAAE,gBAAgB;IAEvB,YAAY,EAAE;QACZ,4BAA4B,EAAE,QAAQ;QACtC,kBAAkB,EAAY,QAAQ;KACvC;IAED,eAAe,EAAE;QACf,cAAc,EAAE,SAAS;KAC1B;IAED,gBAAgB,EAAE;QAChB,KAAK,EAAQ,YAAY;QACzB,WAAW,EAAE,YAAY;KAC1B;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,KAAyB;QACtD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1C,6EAA6E;QAC7E,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC;;;;;;;;;;CAUL,CACI,CAAC;QAEF,6EAA6E;QAC7E,+DAA+D;QAC/D,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDL,CACI,CAAC;QAEF,6EAA6E;QAC7E,2DAA2D;QAC3D,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAClC;;;;;;;;;;;;;;;;;;;;;;CAsBL,CACI,CAAC;QAEF,6EAA6E;QAC7E,2DAA2D;QAC3D,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DL,CACI,CAAC;QAEF,4EAA4E;QAC5E,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC;;;;;;;;;;;;;;CAcL,CACI,CAAC;QAEF,6EAA6E;QAC7E,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EL,CACI,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,39 +0,0 @@
1
- export type AuthProvider = "clerk" | "better-auth" | "workos";
2
- export interface AuthPackageOptions {
3
- /** The chosen provider */
4
- provider: AuthProvider;
5
- /** Absolute path to the monorepo root (where packages/ lives) */
6
- workspaceRoot: string;
7
- /** The workspace name (from nx-factory.config.json) */
8
- workspaceName: string;
9
- /** The package manager in use */
10
- pm: string;
11
- /** If true, print what would happen but write nothing */
12
- dryRun?: boolean;
13
- }
14
- /**
15
- * Everything a provider scaffolder must implement.
16
- *
17
- * The CLI calls scaffold() once — it creates the entire packages/auth
18
- * directory for that provider, including:
19
- * - package.json
20
- * - tsconfig.json
21
- * - tsup.config.ts
22
- * - src/index.ts (the public barrel)
23
- * - src/<provider>-specific files
24
- * - .env.example
25
- * - README.md
26
- */
27
- export interface AuthPackageScaffolder {
28
- /** Pretty label used in step output */
29
- label: string;
30
- /** npm deps that go into the auth package's package.json dependencies */
31
- dependencies: Record<string, string>;
32
- /** npm devDeps for the auth package */
33
- devDependencies: Record<string, string>;
34
- /** peerDeps (e.g. react) */
35
- peerDependencies: Record<string, string>;
36
- /** Write every file into pkgDir */
37
- scaffold(pkgDir: string, opts: AuthPackageOptions): Promise<void>;
38
- }
39
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
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;IACjC,0BAA0B;IAC1B,QAAQ,EAAK,YAAY,CAAC;IAC1B,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,EAAE,EAAW,MAAM,CAAC;IACpB,yDAAyD;IACzD,MAAM,CAAC,EAAM,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,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;CACnE"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/setups/auth/types.ts"],"names":[],"mappings":""}
package/dist/ui.d.ts DELETED
@@ -1,44 +0,0 @@
1
- export declare const c: {
2
- purple: import("chalk").ChalkInstance;
3
- purpleDim: import("chalk").ChalkInstance;
4
- purpleBold: import("chalk").ChalkInstance;
5
- green: import("chalk").ChalkInstance;
6
- greenBold: import("chalk").ChalkInstance;
7
- yellow: import("chalk").ChalkInstance;
8
- red: import("chalk").ChalkInstance;
9
- cyan: import("chalk").ChalkInstance;
10
- white: import("chalk").ChalkInstance;
11
- whiteBold: import("chalk").ChalkInstance;
12
- dim: import("chalk").ChalkInstance;
13
- dimItalic: import("chalk").ChalkInstance;
14
- muted: import("chalk").ChalkInstance;
15
- };
16
- export declare function printBanner(): void;
17
- export declare function printSection(label: string): void;
18
- export type StepRunner = (label: string, fn: () => Promise<void>) => Promise<void>;
19
- export declare function createStepRunner(total: number, dryRun?: boolean): StepRunner;
20
- export declare function q(label: string, hint?: string): string;
21
- export declare function detected(value: string): string;
22
- export interface SuccessOptions {
23
- title: string;
24
- commands: Array<{
25
- cmd: string;
26
- comment?: string;
27
- }>;
28
- tips?: Array<{
29
- label: string;
30
- cmd: string;
31
- }>;
32
- }
33
- export declare function printSuccess(opts: SuccessOptions): void;
34
- export interface ErrorOptions {
35
- title: string;
36
- detail?: string;
37
- recovery: Array<{
38
- label: string;
39
- cmd: string;
40
- }>;
41
- }
42
- export declare function printError(opts: ErrorOptions): void;
43
- export declare function printWarn(message: string, hint?: string): void;
44
- //# sourceMappingURL=ui.d.ts.map
package/dist/ui.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;CAcb,CAAC;AAGF,wBAAgB,WAAW,IAAI,IAAI,CAkBlC;AASD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKhD;AAOD,MAAM,MAAM,UAAU,GAAG,CACvB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,UAAU,CAuB1E;AAKD,wBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtD;AAID,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAK,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,IAAI,CAAC,EAAK,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAYD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CA8BvD;AAGD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAK,MAAM,CAAC;IACjB,MAAM,CAAC,EAAG,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAsBnD;AAID,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9D"}
package/dist/ui.js DELETED
@@ -1,149 +0,0 @@
1
- import chalk from "chalk";
2
- import { createRequire } from "module";
3
- const require = createRequire(import.meta.url);
4
- const pkg = require("../package.json");
5
- // ─── Palette ──────────────────────────────────────────────────────────────────
6
- // One place to change colors for the whole CLI.
7
- export const c = {
8
- purple: chalk.hex("#818cf8"),
9
- purpleDim: chalk.hex("#4f46a8"),
10
- purpleBold: chalk.hex("#818cf8").bold,
11
- green: chalk.hex("#86efac"),
12
- greenBold: chalk.hex("#86efac").bold,
13
- yellow: chalk.hex("#fde68a"),
14
- red: chalk.hex("#fca5a5"),
15
- cyan: chalk.hex("#67e8f9"),
16
- white: chalk.hex("#f1f5f9"),
17
- whiteBold: chalk.hex("#f1f5f9").bold,
18
- dim: chalk.hex("#6b7280"),
19
- dimItalic: chalk.hex("#6b7280").italic,
20
- muted: chalk.hex("#4b5563"),
21
- };
22
- // ─── Banner ───────────────────────────────────────────────────────────────────
23
- export function printBanner() {
24
- const version = c.dim(`v${pkg.version}`);
25
- const logo = c.purpleBold("NX↗");
26
- const name = c.whiteBold("nx-factory");
27
- const tagline = c.dim("Monorepo scaffold · shadcn/ui + Tailwind v4");
28
- const pills = [
29
- pill("Nx", "green"),
30
- pill("shadcn/ui", "yellow"),
31
- pill("Tailwind v4", "cyan"),
32
- pill("TypeScript", "purple"),
33
- ].join(" ");
34
- console.log();
35
- console.log(` ${logo} ${name} ${version}`);
36
- console.log(` ${tagline}`);
37
- console.log(` ${pills}`);
38
- console.log();
39
- }
40
- function pill(label, color) {
41
- const colorfn = c[color];
42
- return colorfn(`[${label}]`);
43
- }
44
- // ─── Section header ───────────────────────────────────────────────────────────
45
- // Prints a faint divider with a label — used between major phases of init.
46
- export function printSection(label) {
47
- const line = c.muted("─".repeat(36));
48
- console.log(`\n ${line}`);
49
- console.log(` ${c.dim(label)}`);
50
- console.log(` ${line}`);
51
- }
52
- export function createStepRunner(total, dryRun = false) {
53
- let current = 0;
54
- return async (label, fn) => {
55
- current++;
56
- const counter = c.dim(`[${current}/${total}]`);
57
- const dryLabel = dryRun ? c.dim(" [dry run]") : "";
58
- if (dryRun) {
59
- console.log(`\n ${c.purpleDim("│")} ${counter} ${c.dim(label)}${dryLabel}`);
60
- return;
61
- }
62
- process.stdout.write(`\n ${c.purpleDim("│")} ${counter} ${c.white(label)}…`);
63
- try {
64
- await fn();
65
- process.stdout.write(`\r ${c.green("│")} ${counter} ${c.white(label)} ${c.green("✓")}\n`);
66
- }
67
- catch (err) {
68
- process.stdout.write(`\r ${c.red("│")} ${counter} ${c.white(label)} ${c.red("✗")}\n`);
69
- throw err;
70
- }
71
- };
72
- }
73
- // ─── Prompt prefix ────────────────────────────────────────────────────────────
74
- // Returns a chalk-formatted "? label" string for use in inquirer's `message`.
75
- // Inquirer renders the message as-is, so we pre-color it here.
76
- export function q(label, hint) {
77
- const base = ` ${c.purple("?")} ${c.white(label)}`;
78
- return hint ? `${base}\n ${c.dim(hint)}` : base;
79
- }
80
- // ─── Detected-value label ─────────────────────────────────────────────────────
81
- // Appends a dim "(detected)" label to the default value shown in a list prompt.
82
- export function detected(value) {
83
- return `${value} ${c.dim("(detected)")}`;
84
- }
85
- // Strip ANSI escape codes to get the visible character width
86
- function visibleLen(s) {
87
- return s.replace(/\x1b\[[0-9;]*m/g, "").length;
88
- }
89
- function boxRow(content, w, borderFn) {
90
- const pad = w - visibleLen(content);
91
- return `${borderFn("│")} ${content}${" ".repeat(Math.max(0, pad))} ${borderFn("│")}`;
92
- }
93
- export function printSuccess(opts) {
94
- const { title, commands, tips = [] } = opts;
95
- const w = 56;
96
- const top = c.green("╭" + "─".repeat(w) + "╮");
97
- const bot = c.green("╰" + "─".repeat(w) + "╯");
98
- const row = (s) => boxRow(s, w, c.green);
99
- const blank = row("");
100
- console.log();
101
- console.log(` ${top}`);
102
- console.log(` ${row(c.greenBold("✓ " + title))}`);
103
- console.log(` ${blank}`);
104
- for (const { cmd, comment } of commands) {
105
- const line = comment
106
- ? c.cyan(cmd) + " " + c.muted("# " + comment)
107
- : c.cyan(cmd);
108
- console.log(` ${row(line)}`);
109
- }
110
- if (tips.length > 0) {
111
- console.log(` ${blank}`);
112
- for (const { label, cmd } of tips) {
113
- console.log(` ${row(c.dim(label))}`);
114
- console.log(` ${row(" " + c.purple(cmd))}`);
115
- }
116
- }
117
- console.log(` ${bot}`);
118
- console.log();
119
- }
120
- export function printError(opts) {
121
- const { title, detail, recovery } = opts;
122
- const w = 56;
123
- const top = c.red("╭" + "─".repeat(w) + "╮");
124
- const bot = c.red("╰" + "─".repeat(w) + "╯");
125
- const row = (s) => boxRow(s, w, c.red);
126
- const blank = row("");
127
- console.log();
128
- console.log(` ${top}`);
129
- console.log(` ${row(c.red("✗ " + title))}`);
130
- if (detail)
131
- console.log(` ${row(c.dim(" " + detail))}`);
132
- console.log(` ${blank}`);
133
- console.log(` ${row(c.dim("Recover manually:"))}`);
134
- for (const { label, cmd } of recovery) {
135
- if (label)
136
- console.log(` ${row(c.dim(" " + label))}`);
137
- console.log(` ${row(" " + c.purple(cmd))}`);
138
- }
139
- console.log(` ${bot}`);
140
- console.log();
141
- }
142
- // ─── Inline step fail (non-fatal) ─────────────────────────────────────────────
143
- // For steps that fail but shouldn't abort the whole command.
144
- export function printWarn(message, hint) {
145
- console.log(`\n ${c.yellow("⚠")} ${c.yellow(message)}`);
146
- if (hint)
147
- console.log(` ${c.dim(hint)}`);
148
- }
149
- //# sourceMappingURL=ui.js.map
package/dist/ui.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,iFAAiF;AACjF,gDAAgD;AAChD,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,MAAM,EAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,SAAS,EAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI;IACrC,KAAK,EAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,SAAS,EAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI;IACrC,MAAM,EAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,GAAG,EAAS,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,IAAI,EAAQ,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,KAAK,EAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,SAAS,EAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI;IACrC,GAAG,EAAS,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,SAAS,EAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM;IACvC,KAAK,EAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;CACjC,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,IAAI,GAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAErE,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,EAAW,OAAO,CAAC;QAC5B,IAAI,CAAC,WAAW,EAAI,QAAQ,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAG,QAAQ,CAAC;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,KAAa,EAAE,KAAqB;IAChD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAA0B,CAAC;IAClD,OAAO,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,iFAAiF;AACjF,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC3B,CAAC;AAYD,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAM,GAAG,KAAK;IAC5D,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,KAAK,EAAE,KAAa,EAAE,EAAuB,EAAE,EAAE;QACtD,OAAO,EAAE,CAAC;QACV,MAAM,OAAO,GAAI,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9E,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvF,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,UAAU,CAAC,CAAC,KAAa,EAAE,IAAa;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACpD,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,iFAAiF;AACjF,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;AAC5C,CAAC;AASD,6DAA6D;AAC7D,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,SAAS,MAAM,CAAC,OAAe,EAAE,CAAS,EAAE,QAA+B;IACzE,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,GAAK,EAAE,CAAC;IACf,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IAEtB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAE1B,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO;YAClB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QAC1B,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AASD,MAAM,UAAU,UAAU,CAAC,IAAkB;IAC3C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,GAAK,EAAE,CAAC;IACf,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IAEtB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpD,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,IAAa;IACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC"}