convex-zen 0.0.1

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 (142) hide show
  1. package/dist/cli/generate.d.ts +14 -0
  2. package/dist/cli/generate.d.ts.map +1 -0
  3. package/dist/cli/generate.js +297 -0
  4. package/dist/cli/generate.js.map +1 -0
  5. package/dist/cli/index.d.ts +3 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +111 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/client/index.d.ts +300 -0
  10. package/dist/client/index.d.ts.map +1 -0
  11. package/dist/client/index.js +434 -0
  12. package/dist/client/index.js.map +1 -0
  13. package/dist/client/plugins/admin.d.ts +92 -0
  14. package/dist/client/plugins/admin.d.ts.map +1 -0
  15. package/dist/client/plugins/admin.js +165 -0
  16. package/dist/client/plugins/admin.js.map +1 -0
  17. package/dist/client/primitives.d.ts +57 -0
  18. package/dist/client/primitives.d.ts.map +1 -0
  19. package/dist/client/primitives.js +64 -0
  20. package/dist/client/primitives.js.map +1 -0
  21. package/dist/client/providers.d.ts +14 -0
  22. package/dist/client/providers.d.ts.map +1 -0
  23. package/dist/client/providers.js +25 -0
  24. package/dist/client/providers.js.map +1 -0
  25. package/dist/client/react.d.ts +23 -0
  26. package/dist/client/react.d.ts.map +1 -0
  27. package/dist/client/react.js +48 -0
  28. package/dist/client/react.js.map +1 -0
  29. package/dist/client/tanstack-start-client-plugins.d.ts +34 -0
  30. package/dist/client/tanstack-start-client-plugins.d.ts.map +1 -0
  31. package/dist/client/tanstack-start-client-plugins.js +32 -0
  32. package/dist/client/tanstack-start-client-plugins.js.map +1 -0
  33. package/dist/client/tanstack-start-client.d.ts +52 -0
  34. package/dist/client/tanstack-start-client.d.ts.map +1 -0
  35. package/dist/client/tanstack-start-client.js +130 -0
  36. package/dist/client/tanstack-start-client.js.map +1 -0
  37. package/dist/client/tanstack-start-plugins.d.ts +27 -0
  38. package/dist/client/tanstack-start-plugins.d.ts.map +1 -0
  39. package/dist/client/tanstack-start-plugins.js +145 -0
  40. package/dist/client/tanstack-start-plugins.js.map +1 -0
  41. package/dist/client/tanstack-start.d.ts +130 -0
  42. package/dist/client/tanstack-start.d.ts.map +1 -0
  43. package/dist/client/tanstack-start.js +331 -0
  44. package/dist/client/tanstack-start.js.map +1 -0
  45. package/dist/component/_generated/api.d.ts +50 -0
  46. package/dist/component/_generated/api.d.ts.map +1 -0
  47. package/dist/component/_generated/api.js +31 -0
  48. package/dist/component/_generated/api.js.map +1 -0
  49. package/dist/component/_generated/component.d.ts +92 -0
  50. package/dist/component/_generated/component.d.ts.map +1 -0
  51. package/dist/component/_generated/component.js +11 -0
  52. package/dist/component/_generated/component.js.map +1 -0
  53. package/dist/component/_generated/dataModel.d.ts +46 -0
  54. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  55. package/dist/component/_generated/dataModel.js +11 -0
  56. package/dist/component/_generated/dataModel.js.map +1 -0
  57. package/dist/component/_generated/server.d.ts +121 -0
  58. package/dist/component/_generated/server.d.ts.map +1 -0
  59. package/dist/component/_generated/server.js +78 -0
  60. package/dist/component/_generated/server.js.map +1 -0
  61. package/dist/component/convex.config.d.ts +3 -0
  62. package/dist/component/convex.config.d.ts.map +1 -0
  63. package/dist/component/convex.config.js +4 -0
  64. package/dist/component/convex.config.js.map +1 -0
  65. package/dist/component/core/sessions.d.ts +33 -0
  66. package/dist/component/core/sessions.d.ts.map +1 -0
  67. package/dist/component/core/sessions.js +186 -0
  68. package/dist/component/core/sessions.js.map +1 -0
  69. package/dist/component/core/users.d.ts +19 -0
  70. package/dist/component/core/users.d.ts.map +1 -0
  71. package/dist/component/core/users.js +154 -0
  72. package/dist/component/core/users.js.map +1 -0
  73. package/dist/component/core/verifications.d.ts +34 -0
  74. package/dist/component/core/verifications.d.ts.map +1 -0
  75. package/dist/component/core/verifications.js +135 -0
  76. package/dist/component/core/verifications.js.map +1 -0
  77. package/dist/component/gateway.d.ts +16 -0
  78. package/dist/component/gateway.d.ts.map +1 -0
  79. package/dist/component/gateway.js +229 -0
  80. package/dist/component/gateway.js.map +1 -0
  81. package/dist/component/lib/crypto.d.ts +24 -0
  82. package/dist/component/lib/crypto.d.ts.map +1 -0
  83. package/dist/component/lib/crypto.js +57 -0
  84. package/dist/component/lib/crypto.js.map +1 -0
  85. package/dist/component/lib/rateLimit.d.ts +26 -0
  86. package/dist/component/lib/rateLimit.d.ts.map +1 -0
  87. package/dist/component/lib/rateLimit.js +96 -0
  88. package/dist/component/lib/rateLimit.js.map +1 -0
  89. package/dist/component/lib/validators.d.ts +19 -0
  90. package/dist/component/lib/validators.d.ts.map +1 -0
  91. package/dist/component/lib/validators.js +12 -0
  92. package/dist/component/lib/validators.js.map +1 -0
  93. package/dist/component/plugins/admin.d.ts +72 -0
  94. package/dist/component/plugins/admin.d.ts.map +1 -0
  95. package/dist/component/plugins/admin.js +152 -0
  96. package/dist/component/plugins/admin.js.map +1 -0
  97. package/dist/component/providers/emailPassword.d.ts +49 -0
  98. package/dist/component/providers/emailPassword.d.ts.map +1 -0
  99. package/dist/component/providers/emailPassword.js +316 -0
  100. package/dist/component/providers/emailPassword.js.map +1 -0
  101. package/dist/component/providers/oauth.d.ts +33 -0
  102. package/dist/component/providers/oauth.d.ts.map +1 -0
  103. package/dist/component/providers/oauth.js +256 -0
  104. package/dist/component/providers/oauth.js.map +1 -0
  105. package/dist/component/schema.d.ts +132 -0
  106. package/dist/component/schema.d.ts.map +1 -0
  107. package/dist/component/schema.js +82 -0
  108. package/dist/component/schema.js.map +1 -0
  109. package/dist/types.d.ts +67 -0
  110. package/dist/types.d.ts.map +1 -0
  111. package/dist/types.js +5 -0
  112. package/dist/types.js.map +1 -0
  113. package/package.json +121 -0
  114. package/src/cli/generate.ts +360 -0
  115. package/src/cli/index.ts +133 -0
  116. package/src/client/index.ts +707 -0
  117. package/src/client/plugins/admin.ts +205 -0
  118. package/src/client/primitives.ts +100 -0
  119. package/src/client/providers.ts +35 -0
  120. package/src/client/react.ts +97 -0
  121. package/src/client/tanstack-start-client-plugins.ts +113 -0
  122. package/src/client/tanstack-start-client.ts +259 -0
  123. package/src/client/tanstack-start-plugins.ts +203 -0
  124. package/src/client/tanstack-start.ts +535 -0
  125. package/src/component/_generated/api.ts +70 -0
  126. package/src/component/_generated/component.ts +184 -0
  127. package/src/component/_generated/dataModel.ts +60 -0
  128. package/src/component/_generated/server.ts +156 -0
  129. package/src/component/convex.config.ts +5 -0
  130. package/src/component/core/sessions.ts +228 -0
  131. package/src/component/core/users.ts +199 -0
  132. package/src/component/core/verifications.ts +173 -0
  133. package/src/component/gateway.ts +321 -0
  134. package/src/component/lib/crypto.ts +63 -0
  135. package/src/component/lib/internalApi.ts +66 -0
  136. package/src/component/lib/rateLimit.ts +111 -0
  137. package/src/component/lib/validators.ts +12 -0
  138. package/src/component/plugins/admin.ts +178 -0
  139. package/src/component/providers/emailPassword.ts +374 -0
  140. package/src/component/providers/oauth.ts +324 -0
  141. package/src/component/schema.ts +88 -0
  142. package/src/types.ts +68 -0
@@ -0,0 +1,14 @@
1
+ export interface GenerateOptions {
2
+ cwd: string;
3
+ check: boolean;
4
+ verbose: boolean;
5
+ }
6
+ export interface GenerateResult {
7
+ created: string[];
8
+ updated: string[];
9
+ deleted: string[];
10
+ unchanged: string[];
11
+ warnings: string[];
12
+ }
13
+ export declare function generateAuthFunctions(options: GenerateOptions): Promise<GenerateResult>;
14
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA2RD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAyDzB"}
@@ -0,0 +1,297 @@
1
+ import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ const GENERATED_MARKER = "// @generated by convex-zen generate. DO NOT EDIT.";
4
+ function normalizeContent(content) {
5
+ return content.endsWith("\n") ? content : `${content}\n`;
6
+ }
7
+ async function fileExists(filePath) {
8
+ try {
9
+ await access(filePath);
10
+ return true;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ function isGeneratedFile(content) {
17
+ return content.startsWith(GENERATED_MARKER);
18
+ }
19
+ function detectEnabledPlugins(indexSource) {
20
+ const plugins = new Set();
21
+ if (/adminPlugin\s*\(/.test(indexSource)) {
22
+ plugins.add("admin");
23
+ }
24
+ return plugins;
25
+ }
26
+ function renderCoreFile() {
27
+ return normalizeContent(`${GENERATED_MARKER}
28
+ import { v } from "convex/values";
29
+ import { action } from "../_generated/server";
30
+ import { auth } from "./index";
31
+
32
+ export const signUp = action({
33
+ args: {
34
+ email: v.string(),
35
+ password: v.string(),
36
+ name: v.optional(v.string()),
37
+ ipAddress: v.optional(v.string()),
38
+ },
39
+ handler: async (ctx, args) => {
40
+ return auth.signUp(ctx, args);
41
+ },
42
+ });
43
+
44
+ export const signInWithEmail = action({
45
+ args: {
46
+ email: v.string(),
47
+ password: v.string(),
48
+ ipAddress: v.optional(v.string()),
49
+ userAgent: v.optional(v.string()),
50
+ },
51
+ handler: async (ctx, args) => {
52
+ return auth.signIn(ctx, args);
53
+ },
54
+ });
55
+
56
+ export const verifyEmail = action({
57
+ args: {
58
+ email: v.string(),
59
+ code: v.string(),
60
+ },
61
+ handler: async (ctx, args) => {
62
+ return auth.verifyEmail(ctx, args);
63
+ },
64
+ });
65
+
66
+ export const requestPasswordReset = action({
67
+ args: {
68
+ email: v.string(),
69
+ ipAddress: v.optional(v.string()),
70
+ },
71
+ handler: async (ctx, args) => {
72
+ return auth.requestPasswordReset(ctx, args);
73
+ },
74
+ });
75
+
76
+ export const resetPassword = action({
77
+ args: {
78
+ email: v.string(),
79
+ code: v.string(),
80
+ newPassword: v.string(),
81
+ },
82
+ handler: async (ctx, args) => {
83
+ return auth.resetPassword(ctx, args);
84
+ },
85
+ });
86
+
87
+ export const signOut = action({
88
+ args: {
89
+ token: v.string(),
90
+ },
91
+ handler: async (ctx, args) => {
92
+ await auth.signOut(ctx, args.token);
93
+ },
94
+ });
95
+
96
+ export const validateSession = action({
97
+ args: {
98
+ token: v.string(),
99
+ },
100
+ handler: async (ctx, args) => {
101
+ return auth.session.validate(ctx, args.token);
102
+ },
103
+ });
104
+
105
+ export const currentUser = action({
106
+ args: {
107
+ token: v.optional(v.string()),
108
+ },
109
+ handler: async (ctx, args) => {
110
+ return auth.user.safeGet(ctx, args.token);
111
+ },
112
+ });
113
+
114
+ export const getOAuthUrl = action({
115
+ args: {
116
+ providerId: v.string(),
117
+ redirectUrl: v.optional(v.string()),
118
+ },
119
+ handler: async (ctx, args) => {
120
+ return auth.getOAuthUrl(ctx, args.providerId, args.redirectUrl);
121
+ },
122
+ });
123
+
124
+ export const handleOAuthCallback = action({
125
+ args: {
126
+ providerId: v.string(),
127
+ code: v.string(),
128
+ state: v.string(),
129
+ redirectUrl: v.optional(v.string()),
130
+ ipAddress: v.optional(v.string()),
131
+ userAgent: v.optional(v.string()),
132
+ },
133
+ handler: async (ctx, args) => {
134
+ return auth.handleCallback(ctx, args);
135
+ },
136
+ });
137
+ `);
138
+ }
139
+ function renderAdminFile() {
140
+ return normalizeContent(`${GENERATED_MARKER}
141
+ import { v } from "convex/values";
142
+ import { action } from "../_generated/server";
143
+ import { auth } from "./index";
144
+
145
+ export const listUsers = action({
146
+ args: {
147
+ token: v.optional(v.string()),
148
+ limit: v.optional(v.number()),
149
+ cursor: v.optional(v.string()),
150
+ },
151
+ handler: async (ctx, args) => {
152
+ if (!auth.admin) {
153
+ throw new Error("Admin plugin is not enabled");
154
+ }
155
+ return auth.admin.listUsers(ctx, args);
156
+ },
157
+ });
158
+
159
+ export const banUser = action({
160
+ args: {
161
+ token: v.optional(v.string()),
162
+ userId: v.string(),
163
+ reason: v.optional(v.string()),
164
+ expiresAt: v.optional(v.number()),
165
+ },
166
+ handler: async (ctx, args) => {
167
+ if (!auth.admin) {
168
+ throw new Error("Admin plugin is not enabled");
169
+ }
170
+ return auth.admin.banUser(ctx, args);
171
+ },
172
+ });
173
+
174
+ export const unbanUser = action({
175
+ args: {
176
+ token: v.optional(v.string()),
177
+ userId: v.string(),
178
+ },
179
+ handler: async (ctx, args) => {
180
+ if (!auth.admin) {
181
+ throw new Error("Admin plugin is not enabled");
182
+ }
183
+ return auth.admin.unbanUser(ctx, args);
184
+ },
185
+ });
186
+
187
+ export const setRole = action({
188
+ args: {
189
+ token: v.optional(v.string()),
190
+ userId: v.string(),
191
+ role: v.string(),
192
+ },
193
+ handler: async (ctx, args) => {
194
+ if (!auth.admin) {
195
+ throw new Error("Admin plugin is not enabled");
196
+ }
197
+ return auth.admin.setRole(ctx, args);
198
+ },
199
+ });
200
+
201
+ export const deleteUser = action({
202
+ args: {
203
+ token: v.optional(v.string()),
204
+ userId: v.string(),
205
+ },
206
+ handler: async (ctx, args) => {
207
+ if (!auth.admin) {
208
+ throw new Error("Admin plugin is not enabled");
209
+ }
210
+ return auth.admin.deleteUser(ctx, args);
211
+ },
212
+ });
213
+ `);
214
+ }
215
+ async function upsertGeneratedFile(file, options, result) {
216
+ const exists = await fileExists(file.absolutePath);
217
+ if (!exists) {
218
+ if (options.check) {
219
+ result.updated.push(file.relativePath);
220
+ return;
221
+ }
222
+ await mkdir(path.dirname(file.absolutePath), { recursive: true });
223
+ await writeFile(file.absolutePath, file.content, "utf8");
224
+ result.created.push(file.relativePath);
225
+ return;
226
+ }
227
+ const existing = await readFile(file.absolutePath, "utf8");
228
+ if (!isGeneratedFile(existing)) {
229
+ throw new Error(`Refusing to overwrite non-generated file: ${file.relativePath}`);
230
+ }
231
+ if (existing === file.content) {
232
+ result.unchanged.push(file.relativePath);
233
+ return;
234
+ }
235
+ if (options.check) {
236
+ result.updated.push(file.relativePath);
237
+ return;
238
+ }
239
+ await writeFile(file.absolutePath, file.content, "utf8");
240
+ result.updated.push(file.relativePath);
241
+ }
242
+ async function deleteGeneratedFileIfExists(absolutePath, relativePath, options, result) {
243
+ if (!(await fileExists(absolutePath))) {
244
+ return;
245
+ }
246
+ const existing = await readFile(absolutePath, "utf8");
247
+ if (!isGeneratedFile(existing)) {
248
+ throw new Error(`Refusing to delete non-generated file: ${relativePath}`);
249
+ }
250
+ if (options.check) {
251
+ result.deleted.push(relativePath);
252
+ return;
253
+ }
254
+ await rm(absolutePath);
255
+ result.deleted.push(relativePath);
256
+ }
257
+ export async function generateAuthFunctions(options) {
258
+ const result = {
259
+ created: [],
260
+ updated: [],
261
+ deleted: [],
262
+ unchanged: [],
263
+ warnings: [],
264
+ };
265
+ const authDir = path.join(options.cwd, "convex", "auth");
266
+ const indexPath = path.join(authDir, "index.ts");
267
+ if (!(await fileExists(indexPath))) {
268
+ throw new Error(`Missing auth source file at ${path.relative(options.cwd, indexPath)}`);
269
+ }
270
+ const indexSource = await readFile(indexPath, "utf8");
271
+ const enabledPlugins = detectEnabledPlugins(indexSource);
272
+ if (!/export\s+const\s+authOptions\s*=/.test(indexSource)) {
273
+ result.warnings.push("authOptions export was not found in convex/auth/index.ts (recommended for generator compatibility).");
274
+ }
275
+ const filesToGenerate = [
276
+ {
277
+ absolutePath: path.join(authDir, "core.ts"),
278
+ relativePath: path.join("convex", "auth", "core.ts"),
279
+ content: renderCoreFile(),
280
+ },
281
+ ];
282
+ if (enabledPlugins.has("admin")) {
283
+ filesToGenerate.push({
284
+ absolutePath: path.join(authDir, "admin.ts"),
285
+ relativePath: path.join("convex", "auth", "admin.ts"),
286
+ content: renderAdminFile(),
287
+ });
288
+ }
289
+ for (const file of filesToGenerate) {
290
+ await upsertGeneratedFile(file, options, result);
291
+ }
292
+ if (!enabledPlugins.has("admin")) {
293
+ await deleteGeneratedFileIfExists(path.join(authDir, "admin.ts"), path.join("convex", "auth", "admin.ts"), options, result);
294
+ }
295
+ return result;
296
+ }
297
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ import path from "node:path";
3
+ import process from "node:process";
4
+ import { generateAuthFunctions, } from "./generate.js";
5
+ function printHelp() {
6
+ console.log(`convex-zen CLI
7
+
8
+ Usage:
9
+ convex-zen generate [--cwd <path>] [--check] [--verbose]
10
+
11
+ Commands:
12
+ generate Generate Convex auth function wrappers in convex/auth/
13
+
14
+ Flags:
15
+ --cwd Workspace root (default: current working directory)
16
+ --check Check for drift without writing files
17
+ --verbose Print additional details
18
+ -h, --help Show this help message
19
+ `);
20
+ }
21
+ function parseArgs(argv) {
22
+ let command = null;
23
+ const options = {
24
+ cwd: process.cwd(),
25
+ check: false,
26
+ verbose: false,
27
+ };
28
+ for (let i = 0; i < argv.length; i += 1) {
29
+ const arg = argv[i];
30
+ if (!arg) {
31
+ continue;
32
+ }
33
+ if (arg === "-h" || arg === "--help") {
34
+ return { command: null, options };
35
+ }
36
+ if (!command && !arg.startsWith("-")) {
37
+ command = arg;
38
+ continue;
39
+ }
40
+ if (arg === "--check") {
41
+ options.check = true;
42
+ continue;
43
+ }
44
+ if (arg === "--verbose") {
45
+ options.verbose = true;
46
+ continue;
47
+ }
48
+ if (arg === "--cwd") {
49
+ const next = argv[i + 1];
50
+ if (!next) {
51
+ throw new Error("--cwd requires a path value");
52
+ }
53
+ options.cwd = path.resolve(next);
54
+ i += 1;
55
+ continue;
56
+ }
57
+ throw new Error(`Unknown argument: ${arg}`);
58
+ }
59
+ return { command, options };
60
+ }
61
+ function printSummary(result) {
62
+ const totalChanges = result.created.length + result.updated.length + result.deleted.length;
63
+ console.log("convex-zen generate summary");
64
+ console.log(` created: ${result.created.length}`);
65
+ console.log(` updated: ${result.updated.length}`);
66
+ console.log(` deleted: ${result.deleted.length}`);
67
+ console.log(` unchanged:${result.unchanged.length}`);
68
+ if (totalChanges === 0) {
69
+ console.log(" status: up-to-date");
70
+ }
71
+ for (const warning of result.warnings) {
72
+ console.warn(`warning: ${warning}`);
73
+ }
74
+ }
75
+ async function main() {
76
+ const { command, options } = parseArgs(process.argv.slice(2));
77
+ if (!command) {
78
+ printHelp();
79
+ return;
80
+ }
81
+ if (command !== "generate") {
82
+ throw new Error(`Unknown command: ${command}`);
83
+ }
84
+ const result = await generateAuthFunctions(options);
85
+ printSummary(result);
86
+ if (options.verbose) {
87
+ for (const file of result.created) {
88
+ console.log(`created: ${file}`);
89
+ }
90
+ for (const file of result.updated) {
91
+ console.log(`updated: ${file}`);
92
+ }
93
+ for (const file of result.deleted) {
94
+ console.log(`deleted: ${file}`);
95
+ }
96
+ }
97
+ if (options.check) {
98
+ const hasDrift = result.created.length > 0 ||
99
+ result.updated.length > 0 ||
100
+ result.deleted.length > 0;
101
+ if (hasDrift) {
102
+ throw new Error("Generated auth function files are out of date.");
103
+ }
104
+ }
105
+ }
106
+ main().catch((error) => {
107
+ const message = error instanceof Error ? error.message : String(error);
108
+ console.error(`convex-zen: ${message}`);
109
+ process.exit(1);
110
+ });
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}