create-authenik8-app 2.1.7 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +5 -4
  2. package/package.json +1 -1
  3. package/dist/bin/index.d.ts +0 -8
  4. package/dist/bin/index.d.ts.map +0 -1
  5. package/dist/bin/index.js +0 -796
  6. package/dist/bin/index.js.map +0 -1
  7. package/dist/index.d.ts +0 -3
  8. package/dist/index.d.ts.map +0 -1
  9. package/dist/index.js +0 -292
  10. package/dist/index.js.map +0 -1
  11. package/dist/lib/constants.d.ts +0 -4
  12. package/dist/lib/constants.d.ts.map +0 -1
  13. package/dist/lib/constants.js +0 -25
  14. package/dist/lib/constants.js.map +0 -1
  15. package/dist/lib/process.d.ts +0 -7
  16. package/dist/lib/process.d.ts.map +0 -1
  17. package/dist/lib/process.js +0 -60
  18. package/dist/lib/process.js.map +0 -1
  19. package/dist/lib/state.d.ts +0 -8
  20. package/dist/lib/state.d.ts.map +0 -1
  21. package/dist/lib/state.js +0 -31
  22. package/dist/lib/state.js.map +0 -1
  23. package/dist/lib/types.d.ts +0 -17
  24. package/dist/lib/types.d.ts.map +0 -1
  25. package/dist/lib/types.js +0 -2
  26. package/dist/lib/types.js.map +0 -1
  27. package/dist/lib/ui.d.ts +0 -7
  28. package/dist/lib/ui.d.ts.map +0 -1
  29. package/dist/lib/ui.js +0 -124
  30. package/dist/lib/ui.js.map +0 -1
  31. package/dist/steps/configurePrisma.d.ts +0 -3
  32. package/dist/steps/configurePrisma.d.ts.map +0 -1
  33. package/dist/steps/configurePrisma.js +0 -41
  34. package/dist/steps/configurePrisma.js.map +0 -1
  35. package/dist/steps/createProject.d.ts +0 -5
  36. package/dist/steps/createProject.d.ts.map +0 -1
  37. package/dist/steps/createProject.js +0 -35
  38. package/dist/steps/createProject.js.map +0 -1
  39. package/dist/steps/finalSetup.d.ts +0 -7
  40. package/dist/steps/finalSetup.d.ts.map +0 -1
  41. package/dist/steps/finalSetup.js +0 -110
  42. package/dist/steps/finalSetup.js.map +0 -1
  43. package/dist/steps/installAuth.d.ts +0 -3
  44. package/dist/steps/installAuth.d.ts.map +0 -1
  45. package/dist/steps/installAuth.js +0 -18
  46. package/dist/steps/installAuth.js.map +0 -1
  47. package/dist/steps/installDeps.d.ts +0 -4
  48. package/dist/steps/installDeps.d.ts.map +0 -1
  49. package/dist/steps/installDeps.js +0 -50
  50. package/dist/steps/installDeps.js.map +0 -1
  51. package/dist/steps/prompts.d.ts +0 -3
  52. package/dist/steps/prompts.d.ts.map +0 -1
  53. package/dist/steps/prompts.js +0 -76
  54. package/dist/steps/prompts.js.map +0 -1
  55. package/dist/tests/helpers/generator.d.ts +0 -27
  56. package/dist/tests/helpers/generator.d.ts.map +0 -1
  57. package/dist/tests/helpers/generator.js +0 -282
  58. package/dist/tests/helpers/generator.js.map +0 -1
  59. package/dist/tests/integration/generator.test.d.ts +0 -2
  60. package/dist/tests/integration/generator.test.d.ts.map +0 -1
  61. package/dist/tests/integration/generator.test.js +0 -116
  62. package/dist/tests/integration/generator.test.js.map +0 -1
  63. package/dist/tests/integration/snapshot.test.d.ts +0 -2
  64. package/dist/tests/integration/snapshot.test.d.ts.map +0 -1
  65. package/dist/tests/integration/snapshot.test.js +0 -68
  66. package/dist/tests/integration/snapshot.test.js.map +0 -1
  67. package/dist/tests/setup.d.ts +0 -2
  68. package/dist/tests/setup.d.ts.map +0 -1
  69. package/dist/tests/setup.js +0 -10
  70. package/dist/tests/setup.js.map +0 -1
  71. package/dist/tests/unit/cli.test.d.ts +0 -2
  72. package/dist/tests/unit/cli.test.d.ts.map +0 -1
  73. package/dist/tests/unit/cli.test.js +0 -242
  74. package/dist/tests/unit/cli.test.js.map +0 -1
  75. package/dist/utils/hash.d.ts +0 -4
  76. package/dist/utils/hash.d.ts.map +0 -1
  77. package/dist/utils/hash.js +0 -51
  78. package/dist/utils/hash.js.map +0 -1
  79. package/dist/utils/output.d.ts +0 -3
  80. package/dist/utils/output.d.ts.map +0 -1
  81. package/dist/utils/output.js +0 -65
  82. package/dist/utils/output.js.map +0 -1
  83. package/dist/vitest.config.d.ts +0 -3
  84. package/dist/vitest.config.d.ts.map +0 -1
  85. package/dist/vitest.config.js +0 -21
  86. package/dist/vitest.config.js.map +0 -1
  87. package/templates/prisma/postgresql/.env +0 -3
  88. package/templates/prisma/sqlite/.env +0 -1
@@ -1,282 +0,0 @@
1
- import { spawn } from "child_process";
2
- import { mkdtemp } from "fs/promises";
3
- import os from "os";
4
- import path from "path";
5
- import { fileURLToPath } from "url";
6
- import fs from "fs-extra";
7
- import { vi } from "vitest";
8
- import { createProject, configurePackageJson } from "../../steps/createProject.js";
9
- import { configurePrisma } from "../../steps/configurePrisma.js";
10
- import { installAuth } from "../../steps/installAuth.js";
11
- import { configureProduction } from "../../steps/finalSetup.js";
12
- import * as hashUtils from "../../utils/hash.js";
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = path.dirname(__filename);
15
- const repoRoot = path.resolve(__dirname, "../..");
16
- const templateRoot = path.join(repoRoot, "src", "templates");
17
- const tsxLoaderPath = path.join(repoRoot, "node_modules", "tsx", "dist", "loader.mjs");
18
- const templateToAuthMode = {
19
- base: "base",
20
- auth: "auth",
21
- "auth-oauth": "auth-oauth",
22
- };
23
- function toPosixPath(value) {
24
- return value.split(path.sep).join("/");
25
- }
26
- function normalizeText(value) {
27
- return value.replace(/\r\n/g, "\n").trim();
28
- }
29
- async function writePackageStub(targetDir, name, source) {
30
- const moduleDir = path.join(targetDir, "node_modules", name);
31
- await fs.ensureDir(moduleDir);
32
- await fs.writeJson(path.join(moduleDir, "package.json"), {
33
- name,
34
- type: "module",
35
- main: "./index.js",
36
- exports: "./index.js",
37
- }, { spaces: 2 });
38
- await fs.writeFile(path.join(moduleDir, "index.js"), source);
39
- }
40
- export async function generateProjectFixture(options) {
41
- const rootDir = await mkdtemp(path.join(os.tmpdir(), "authenik8-vitest-"));
42
- const targetDir = path.join(rootDir, "generated-app");
43
- const state = {
44
- step: "prompts",
45
- projectName: "generated-app",
46
- framework: "Express",
47
- authMode: templateToAuthMode[options.template],
48
- usePrisma: options.usePrisma ?? true,
49
- database: options.database ?? "sqlite",
50
- useGit: false,
51
- runtime: options.productionRuntime,
52
- };
53
- await createProject(state, targetDir, templateRoot);
54
- let hashLib;
55
- if (state.authMode !== "base") {
56
- const hashSpy = vi
57
- .spyOn(hashUtils, "getBestHashLib")
58
- .mockReturnValue(options.hashLib ?? "bcryptjs");
59
- try {
60
- hashLib = await installAuth(targetDir, "npm");
61
- }
62
- finally {
63
- hashSpy.mockRestore();
64
- }
65
- }
66
- await configurePrisma(state, targetDir, templateRoot);
67
- configurePackageJson(targetDir, state.usePrisma ?? false);
68
- if (options.productionRuntime) {
69
- await configureProduction(targetDir, state.projectName, options.productionRuntime);
70
- }
71
- return {
72
- rootDir,
73
- targetDir,
74
- state,
75
- hashLib,
76
- cleanup: async () => {
77
- await fs.remove(rootDir);
78
- },
79
- };
80
- }
81
- export async function collectProjectTree(rootDir) {
82
- const entries = [];
83
- const ignored = new Set(["node_modules", ".git", ".authenik8"]);
84
- async function walk(currentDir, relativeDir = "") {
85
- const names = (await fs.readdir(currentDir)).sort();
86
- for (const name of names) {
87
- if (ignored.has(name)) {
88
- continue;
89
- }
90
- const absolutePath = path.join(currentDir, name);
91
- const relativePath = relativeDir ? path.join(relativeDir, name) : name;
92
- const stats = await fs.stat(absolutePath);
93
- if (stats.isDirectory()) {
94
- entries.push(`${toPosixPath(relativePath)}/`);
95
- await walk(absolutePath, relativePath);
96
- continue;
97
- }
98
- if (toPosixPath(relativePath) === "src/package-lock.json") {
99
- continue;
100
- }
101
- entries.push(toPosixPath(relativePath));
102
- }
103
- }
104
- await walk(rootDir);
105
- return entries;
106
- }
107
- export async function readProjectFiles(rootDir, relativePaths) {
108
- const result = {};
109
- for (const relativePath of relativePaths) {
110
- const absolutePath = path.join(rootDir, relativePath);
111
- result[toPosixPath(relativePath)] = normalizeText(await fs.readFile(absolutePath, "utf8"));
112
- }
113
- return result;
114
- }
115
- export async function installGeneratedAppStubs(targetDir) {
116
- await writePackageStub(targetDir, "authenik8-core", `export async function createAuthenik8(config) {
117
- globalThis.__authenik8MockConfig = config;
118
- return {
119
- helmet(req, res, next) {
120
- if (typeof next === "function") next();
121
- },
122
- rateLimit(req, res, next) {
123
- if (typeof next === "function") next();
124
- },
125
- requireAdmin(req, res, next) {
126
- if (typeof next === "function") next();
127
- },
128
- signToken() {
129
- return "access-token";
130
- },
131
- async generateRefreshToken() {
132
- return "refresh-token";
133
- },
134
- async refreshToken() {
135
- return {
136
- accessToken: "access-token",
137
- refreshToken: "refresh-token",
138
- };
139
- },
140
- oauth: {
141
- google: {
142
- redirect() {},
143
- async handleCallback() {
144
- return { accessToken: "google-token" };
145
- },
146
- },
147
- github: {
148
- redirect() {},
149
- async handleCallback() {
150
- return { accessToken: "github-token" };
151
- },
152
- },
153
- },
154
- };
155
- }
156
- `);
157
- await writePackageStub(targetDir, "dotenv", `export default {
158
- config() {
159
- return {};
160
- },
161
- };
162
- `);
163
- await writePackageStub(targetDir, "express", `function createRouter() {
164
- return {
165
- get() {},
166
- post() {},
167
- use() {},
168
- };
169
- }
170
-
171
- function express() {
172
- return {
173
- use() {},
174
- listen(_port, callback) {
175
- if (typeof callback === "function") callback();
176
- return {
177
- close() {},
178
- };
179
- },
180
- };
181
- }
182
-
183
- express.json = function json() {
184
- return function jsonMiddleware(_req, _res, next) {
185
- if (typeof next === "function") next();
186
- };
187
- };
188
-
189
- express.Router = createRouter;
190
-
191
- export const Router = createRouter;
192
- export default express;
193
- `);
194
- await writePackageStub(targetDir, "@prisma/client", `export class PrismaClient {
195
- constructor() {
196
- this.user = {
197
- async create({ data }) {
198
- return { id: "user-1", ...data };
199
- },
200
- async findUnique({ where }) {
201
- if (!where?.email) {
202
- return null;
203
- }
204
- return {
205
- id: "user-1",
206
- email: where.email,
207
- password: "hashed:password",
208
- };
209
- },
210
- };
211
- }
212
- }
213
- `);
214
- await writePackageStub(targetDir, "bcryptjs", `export default {
215
- async hash(value) {
216
- return "hashed:" + value;
217
- },
218
- async compare(value, hash) {
219
- return hash === "hashed:" + value;
220
- },
221
- };
222
- `);
223
- await writePackageStub(targetDir, "argon2", `export default {
224
- async hash(value) {
225
- return "hashed:" + value;
226
- },
227
- async verify(hash, value) {
228
- return hash === "hashed:" + value;
229
- },
230
- };
231
- `);
232
- }
233
- export async function runGeneratedServerSmoke(targetDir, entryPath) {
234
- await installGeneratedAppStubs(targetDir);
235
- const smokeScriptPath = path.join(targetDir, "smoke-runner.mjs");
236
- const entryImportPath = `./${toPosixPath(entryPath)}`;
237
- await fs.writeFile(smokeScriptPath, `globalThis.setInterval = () => ({ unref() {} });
238
- process.memoryUsage = () => ({ heapUsed: 32 * 1024 * 1024 });
239
- await import(${JSON.stringify(entryImportPath)});
240
- `);
241
- return await new Promise((resolve, reject) => {
242
- const child = spawn(process.execPath, ["--import", tsxLoaderPath, smokeScriptPath], {
243
- cwd: targetDir,
244
- env: {
245
- ...process.env,
246
- NODE_ENV: "test",
247
- JWT_SECRET: "test-jwt-secret",
248
- REFRESH_SECRET: "test-refresh-secret",
249
- GOOGLE_CLIENT_ID: "google-client-id",
250
- GOOGLE_CLIENT_SECRET: "google-client-secret",
251
- GITHUB_CLIENT_ID: "github-client-id",
252
- GITHUB_CLIENT_SECRET: "github-client-secret",
253
- },
254
- stdio: ["ignore", "pipe", "pipe"],
255
- });
256
- let stdout = "";
257
- let stderr = "";
258
- const timeout = setTimeout(() => {
259
- child.kill("SIGTERM");
260
- reject(new Error(`Generated server smoke test timed out for ${entryPath}`));
261
- }, 10_000);
262
- child.stdout.on("data", (chunk) => {
263
- stdout += chunk.toString();
264
- });
265
- child.stderr.on("data", (chunk) => {
266
- stderr += chunk.toString();
267
- });
268
- child.on("error", (error) => {
269
- clearTimeout(timeout);
270
- reject(error);
271
- });
272
- child.on("exit", (code) => {
273
- clearTimeout(timeout);
274
- resolve({
275
- code,
276
- stdout: normalizeText(stdout),
277
- stderr: normalizeText(stderr),
278
- });
279
- });
280
- });
281
- }
282
- //# sourceMappingURL=generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/tests/helpers/generator.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=generator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/generator.test.ts"],"names":[],"mappings":""}
@@ -1,116 +0,0 @@
1
- import fs from "fs-extra";
2
- import { describe, expect, it } from "vitest";
3
- import { generateProjectFixture, readProjectFiles, runGeneratedServerSmoke, } from "../helpers/generator.js";
4
- describe("generator happy paths", () => {
5
- it("generates the base template with Prisma SQLite wiring", async () => {
6
- const project = await generateProjectFixture({
7
- template: "base",
8
- database: "sqlite",
9
- });
10
- try {
11
- const pkg = await fs.readJson(`${project.targetDir}/package.json`);
12
- const files = await readProjectFiles(project.targetDir, [
13
- "app.ts",
14
- "routes/base.routes.ts",
15
- "src/server.ts",
16
- "prisma/schema.prisma",
17
- ]);
18
- expect(pkg.scripts.postinstall).toBe("npx prisma@5.22.0 generate");
19
- expect(pkg.scripts.dev).toContain("npx prisma@5.22.0 generate");
20
- expect(pkg.dependencies["@prisma/client"]).toBe("5.22.0");
21
- expect(files["app.ts"]).toContain("app.use(auth.helmet)");
22
- expect(files["routes/base.routes.ts"]).toContain('router.get("/protected"');
23
- expect(files["prisma/schema.prisma"]).toContain('provider = "sqlite"');
24
- }
25
- finally {
26
- await project.cleanup();
27
- }
28
- });
29
- it("generates the email/password template with a mocked bcrypt hash module", async () => {
30
- const project = await generateProjectFixture({
31
- template: "auth",
32
- database: "postgresql",
33
- hashLib: "bcryptjs",
34
- });
35
- try {
36
- const pkg = await fs.readJson(`${project.targetDir}/package.json`);
37
- const files = await readProjectFiles(project.targetDir, [
38
- "src/app.ts",
39
- "src/routes/auth.routes.ts",
40
- "src/routes/protected.routes.ts",
41
- "src/utils/hash.ts",
42
- "prisma/schema.prisma",
43
- ]);
44
- expect(project.hashLib).toBe("bcryptjs");
45
- expect(pkg.dependencies.bcryptjs).toBe("^2.4.3");
46
- expect(pkg.dependencies.ioredis).toBe("^5.8.1");
47
- expect(files["src/app.ts"]).toContain('app.use("/auth", createAuthRoutes(auth))');
48
- expect(files["src/routes/auth.routes.ts"]).toContain('router.post("/register"');
49
- expect(files["src/utils/hash.ts"]).toContain('import bcrypt from "bcryptjs"');
50
- expect(files["prisma/schema.prisma"]).toContain('provider = "postgresql"');
51
- }
52
- finally {
53
- await project.cleanup();
54
- }
55
- });
56
- it("generates the OAuth template with production runtime files", async () => {
57
- const project = await generateProjectFixture({
58
- template: "auth-oauth",
59
- database: "sqlite",
60
- hashLib: "bcryptjs",
61
- productionRuntime: "node",
62
- });
63
- try {
64
- const pkg = await fs.readJson(`${project.targetDir}/package.json`);
65
- const files = await readProjectFiles(project.targetDir, [
66
- "src/server.ts",
67
- "src/auth/auth.ts",
68
- "src/auth/oauth.routes.ts",
69
- "src/auth/password.route.ts",
70
- "ecosystem.config.js",
71
- ]);
72
- expect(pkg.dependencies.pm2).toBe("^5.4.2");
73
- expect(pkg.dependencies["ts-node"]).toBe("^10.9.2");
74
- expect(pkg.scripts["pm2:start"]).toBe("npx pm2 start ecosystem.config.js");
75
- expect(files["src/auth/auth.ts"]).toContain('redirectUri: "http://localhost:3000/auth/google/callback"');
76
- expect(files["src/auth/oauth.routes.ts"]).toContain('router.get("/github/callback"');
77
- expect(files["src/auth/password.route.ts"]).toContain("generateRefreshToken");
78
- expect(files["ecosystem.config.js"]).toContain('interpreter_args: "-r ts-node/register"');
79
- }
80
- finally {
81
- await project.cleanup();
82
- }
83
- });
84
- it.each([
85
- {
86
- template: "base",
87
- entryPath: "src/server.ts",
88
- expectedOutput: "Server running on http://localhost:3000",
89
- },
90
- {
91
- template: "auth",
92
- entryPath: "src/server.ts",
93
- expectedOutput: "Server running on http://localhost:3000",
94
- },
95
- {
96
- template: "auth-oauth",
97
- entryPath: "src/server.ts",
98
- expectedOutput: "Auth system running on http://localhost:3000",
99
- },
100
- ])("boots the generated $template server with mocked runtime packages", async (scenario) => {
101
- const project = await generateProjectFixture({
102
- template: scenario.template,
103
- hashLib: "bcryptjs",
104
- });
105
- try {
106
- const result = await runGeneratedServerSmoke(project.targetDir, scenario.entryPath);
107
- expect(result.code).toBe(0);
108
- expect(result.stderr).toBe("");
109
- expect(result.stdout).toContain(scenario.expectedOutput);
110
- }
111
- finally {
112
- await project.cleanup();
113
- }
114
- });
115
- });
116
- //# sourceMappingURL=generator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../src/tests/integration/generator.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=snapshot.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/snapshot.test.ts"],"names":[],"mappings":""}
@@ -1,68 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { collectProjectTree, generateProjectFixture, readProjectFiles, } from "../helpers/generator.js";
3
- describe("generator snapshots", () => {
4
- it.each([
5
- {
6
- name: "express-base",
7
- options: {
8
- template: "base",
9
- database: "sqlite",
10
- },
11
- keyFiles: ["app.ts", "routes/base.routes.ts", "src/server.ts", "prisma/schema.prisma"],
12
- },
13
- {
14
- name: "express-auth",
15
- options: {
16
- template: "auth",
17
- database: "postgresql",
18
- hashLib: "bcryptjs",
19
- },
20
- keyFiles: [
21
- "src/app.ts",
22
- "src/routes/auth.routes.ts",
23
- "src/routes/protected.routes.ts",
24
- "src/utils/hash.ts",
25
- "prisma/schema.prisma",
26
- ],
27
- },
28
- {
29
- name: "express-auth-oauth",
30
- options: {
31
- template: "auth-oauth",
32
- database: "sqlite",
33
- hashLib: "bcryptjs",
34
- },
35
- keyFiles: [
36
- "src/server.ts",
37
- "src/auth/auth.ts",
38
- "src/auth/password.route.ts",
39
- "src/auth/oauth.routes.ts",
40
- "src/auth/protected.routes.ts",
41
- "src/utils/hash.ts",
42
- "prisma/schema.prisma",
43
- ],
44
- },
45
- ])("$name folder tree and key files match the snapshot", async ({ options, keyFiles }) => {
46
- const project = await generateProjectFixture(options);
47
- try {
48
- const rawTree = await collectProjectTree(project.targetDir);
49
- const files = await readProjectFiles(project.targetDir, keyFiles);
50
- const stableTree = rawTree
51
- .filter((path) => !path.includes("node_modules") &&
52
- !path.endsWith(".env") &&
53
- !path.endsWith(".env.example") &&
54
- !path.includes("package-lock.json")).sort();
55
- const filesContent = await readProjectFiles(project.targetDir, keyFiles);
56
- const snapshotData = {
57
- template: options.template,
58
- tree: stableTree,
59
- keyFiles: filesContent,
60
- };
61
- expect(snapshotData).toMatchSnapshot();
62
- }
63
- finally {
64
- await project.cleanup();
65
- }
66
- });
67
- });
68
- //# sourceMappingURL=snapshot.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.test.js","sourceRoot":"","sources":["../../../src/tests/integration/snapshot.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,IAAI,CAAC;QACN;YACE,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAe;gBACzB,QAAQ,EAAE,QAAiB;aAC5B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,uBAAuB,EAAE,eAAe,EAAE,sBAAsB,CAAC;SACvF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAe;gBACzB,QAAQ,EAAE,YAAqB;gBAC/B,OAAO,EAAE,UAAmB;aAC7B;YACD,QAAQ,EAAE;gBACR,YAAY;gBACZ,2BAA2B;gBAC3B,gCAAgC;gBAChC,mBAAmB;gBACnB,sBAAsB;aACvB;SACF;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE;gBACP,QAAQ,EAAE,YAAqB;gBAC/B,QAAQ,EAAE,QAAiB;gBAC3B,OAAO,EAAE,UAAmB;aAC7B;YACD,QAAQ,EAAE;gBACR,eAAe;gBACf,kBAAkB;gBAClB,4BAA4B;gBAC5B,0BAA0B;gBAC1B,8BAA8B;gBAC9B,mBAAmB;gBACnB,sBAAsB;aACvB;SACF;KACF,CAAC,CAAC,oDAAoD,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvF,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEtD,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAG3D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAGnE,MAAM,UAAU,GAAG,OAAO;iBACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACzB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC9B,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CACzC,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAEzE,MAAM,YAAY,GAAG;gBACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,YAAY;aACvB,CAAC;YAEF,MAAM,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,CAAC;QACzC,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tests/setup.ts"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- import { afterEach, beforeEach, vi } from "vitest";
2
- beforeEach(() => {
3
- process.env.FORCE_COLOR = "0";
4
- process.env.CI = "true";
5
- });
6
- afterEach(() => {
7
- vi.unstubAllEnvs();
8
- vi.unstubAllGlobals();
9
- });
10
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/tests/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEnD,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACnB,EAAE,CAAC,gBAAgB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cli.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../../src/tests/unit/cli.test.ts"],"names":[],"mappings":""}