create-authenik8-app 2.1.6 → 2.1.7

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.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
 
2
2
  <h1 align="center">⚡ create-authenik8-app</h1>
3
3
 
4
+ **See a real generated example → [create-authenik8-app-example](https://github.com/COD434/create-authenik8-app-example)**
5
+
4
6
 
5
7
  if this saved you time, a ⭐ helps a lot
6
8
 
@@ -14,7 +16,7 @@ if this saved you time, a ⭐ helps a lot
14
16
  ![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)
15
17
  ![Maintained](https://img.shields.io/badge/maintained-yes-success)
16
18
  ![CI](https://github.com/COD434/create-authenik8-app/actions/workflows/ci.yml/badge.svg)
17
-
19
+ [![Coverage](https://img.shields.io/badge/coverage-48%25-yellow)](https://github.com/COD434/create-authenik8-app/actions/workflows/ci.yml)
18
20
 
19
21
  ![subtitle](https://readme-typing-svg.demolab.com?font=Fira+Code&size=18&pause=1000&color=00C2FF&width=600&lines=Production-ready+Auth+Generator;JWT+%2B+OAuth+%2B+Prisma+%2B+Redis;Identity+Engine+powered+authentication+system)
20
22
 
@@ -129,6 +131,14 @@ app.get("/admin", auth.requireAdmin, (req, res) => {
129
131
 
130
132
  ---
131
133
 
134
+ ### Testing
135
+
136
+ - Full test suite with ``48%`` coverage (actively improving)
137
+
138
+ - CI runs tests + coverage on every push and PR
139
+
140
+ ---
141
+
132
142
  ## How It Works (Key Concept)
133
143
 
134
144
  Authenik8 is not just another auth library.
package/dist/index.js CHANGED
@@ -29,6 +29,32 @@ const targetDir = path.resolve(process.cwd(), projectName);
29
29
  const templateRoot = path.resolve(__dirname, "../templates");
30
30
  const globalStateDir = path.join(process.cwd(), ".authenik8");
31
31
  const stateFile = path.join(globalStateDir, `${projectName}.json`);
32
+ //handles shutdown during resume
33
+ let shuttingDown = false;
34
+ const handleShutdown = async () => {
35
+ if (shuttingDown)
36
+ return;
37
+ shuttingDown = true;
38
+ console.log("\n");
39
+ spinner.stop();
40
+ killAllProcesses();
41
+ console.log(chalk.yellow("⏸ Setup interrupted."));
42
+ try {
43
+ const current = getState();
44
+ if (current && current.step && current.step !== "done") {
45
+ saveState({ ...current });
46
+ }
47
+ }
48
+ catch (_) { }
49
+ console.log(chalk.gray(`↻ Resume anytime with:`));
50
+ console.log(chalk.cyan(` npx create-authenik8-app ${projectName} --resume`));
51
+ process.exit(0);
52
+ };
53
+ process.prependListener('SIGINT', handleShutdown);
54
+ process.prependListener('SIGTERM', handleShutdown);
55
+ process.on('exit', () => {
56
+ killAllProcesses();
57
+ });
32
58
  let projectCreated = false;
33
59
  initState({ step: "start", projectName }, stateFile);
34
60
  async function cleanupIncompleteProject() {
@@ -44,14 +70,14 @@ function assertRequired(value, name) {
44
70
  }
45
71
  }
46
72
  async function main() {
47
- process.on("SIGINT", async () => {
48
- console.log("\n");
49
- spinner.stop();
50
- killAllProcesses();
51
- console.log(chalk.yellow("⏸ Setup interrupted."));
52
- console.log(chalk.gray(`↻ Resume with: create-authenik8-app ${projectName} --resume`));
53
- process.exit(0);
54
- });
73
+ //process.on("SIGINT", async () => {
74
+ //console.log("\n");
75
+ //spinner.stop();
76
+ //killAllProcesses();
77
+ //console.log(chalk.yellow("⏸ Setup interrupted."));
78
+ // console.log(chalk.gray(`↻ Resume with: create-authenik8-app ${projectName} --resume`));
79
+ //process.exit(0);
80
+ //});
55
81
  try {
56
82
  await showBootLogo();
57
83
  if (args.includes("--help")) {
@@ -212,7 +238,8 @@ Resumable steps:
212
238
  }
213
239
  else {
214
240
  //configurePackageJson(targetDir, getState().usePrisma ?? false);
215
- await installDependencies(targetDir);
241
+ //await installDependencies(targetDir);
242
+ console.log(chalk.gray("↷ Skipping dependency installation (already completed)"));
216
243
  }
217
244
  // Production setup
218
245
  if (isProduction && !hasReachedStep(currentStep, "production-configured")) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"createProject.d.ts","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAiBhF;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"createProject.d.ts","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAsBhF;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -15,11 +15,15 @@ export function configurePackageJson(targetDir, usePrisma) {
15
15
  pkg.scripts.postinstall = "npx prisma@5.22.0 generate";
16
16
  }
17
17
  if (usePrisma) {
18
- pkg.scripts ??= {};
19
- pkg.scripts.postinstall = "npx prisma@5.22.0 generate";
20
- pkg.scripts.dev = pkg.scripts.dev
21
- ? `npx prisma@5.22.0 generate && ${pkg.scripts.dev}`
22
- : "npx prisma@5.22.0 generate";
18
+ const currentDev = pkg.scripts.dev || "tsx watch src/index.ts";
19
+ if (!currentDev.includes("prisma@5.22.0 generate")) {
20
+ pkg.scripts.dev = `npx prisma@5.22.0 generate && ${currentDev}`;
21
+ }
22
+ //pkg.scripts ??= {};
23
+ // pkg.scripts.postinstall = "npx prisma@5.22.0 generate";
24
+ //pkg.scripts.dev = pkg.scripts.dev
25
+ // ? `npx prisma@5.22.0 generate && ${pkg.scripts.dev}`
26
+ //: "npx prisma@5.22.0 generate";
23
27
  }
24
28
  fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
25
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IAC/C,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,eAAe,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,SAAkB;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,4BAA4B,CAAC;IACzD,CAAC;IAEH,IAAI,SAAS,EAAE,CAAC;QACd,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC;QACnB,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,4BAA4B,CAAC;QACvD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG;YAC/B,CAAC,CAAC,iCAAiC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;YACpD,CAAC,CAAC,4BAA4B,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAe,EACf,SAAiB,EACjB,YAAoB;IAEpB,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IAC/C,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,eAAe,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,SAAkB;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,4BAA4B,CAAC;IACzD,CAAC;IAEH,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,wBAAwB,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,iCAAiC,UAAU,EAAE,CAAC;QAClE,CAAC;QAEF,qBAAqB;QACrB,0DAA0D;QACzD,mCAAmC;QAClC,uDAAuD;QACtD,iCAAiC;IACrC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAe,EACf,SAAiB,EACjB,YAAoB;IAEpB,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { CliState } from "../../lib/types.js";
2
+ type TemplateKind = "base" | "auth" | "auth-oauth";
3
+ export type GeneratedProject = {
4
+ rootDir: string;
5
+ targetDir: string;
6
+ state: CliState;
7
+ cleanup: () => Promise<void>;
8
+ hashLib?: string;
9
+ };
10
+ export type GenerateProjectOptions = {
11
+ template: TemplateKind;
12
+ database?: "sqlite" | "postgresql";
13
+ usePrisma?: boolean;
14
+ productionRuntime?: "node" | "bun";
15
+ hashLib?: "argon2" | "bcryptjs";
16
+ };
17
+ export declare function generateProjectFixture(options: GenerateProjectOptions): Promise<GeneratedProject>;
18
+ export declare function collectProjectTree(rootDir: string): Promise<string[]>;
19
+ export declare function readProjectFiles(rootDir: string, relativePaths: string[]): Promise<Record<string, string>>;
20
+ export declare function installGeneratedAppStubs(targetDir: string): Promise<void>;
21
+ export declare function runGeneratedServerSmoke(targetDir: string, entryPath: string): Promise<{
22
+ code: number | null;
23
+ stdout: string;
24
+ stderr: string;
25
+ }>;
26
+ export {};
27
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/tests/helpers/generator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAOnD,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACnC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACjC,CAAC;AAsCF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA8C3B;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgC3E;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,mCAS9E;AAED,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJ/E;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;UAc/C,MAAM,GAAG,IAAI;YAAU,MAAM;YAAU,MAAM;GA8C/E"}
@@ -0,0 +1,282 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/tests/helpers/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/generator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../src/tests/integration/generator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=snapshot.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integration/snapshot.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tests/setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../../src/tests/unit/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,242 @@
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 { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
8
+ const mockModules = vi.hoisted(() => {
9
+ const state = {
10
+ promptAnswers: {
11
+ framework: "Express",
12
+ authMode: "base",
13
+ usePrisma: true,
14
+ database: "sqlite",
15
+ useGit: false,
16
+ runtime: "node",
17
+ },
18
+ showBootLogo: vi.fn(async () => { }),
19
+ renderStep: vi.fn(),
20
+ runPrompts: vi.fn(async () => state.promptAnswers),
21
+ createProject: vi.fn(async () => { }),
22
+ configurePackageJson: vi.fn(),
23
+ installAuth: vi.fn(async () => "bcryptjs"),
24
+ configurePrisma: vi.fn(async () => { }),
25
+ installDependencies: vi.fn(async () => { }),
26
+ detectPackageManager: vi.fn(() => "npm"),
27
+ configureProduction: vi.fn(async () => { }),
28
+ initGit: vi.fn(async () => { }),
29
+ appendProductionReadme: vi.fn(),
30
+ resolveRuntime: vi.fn((runtime) => runtime ?? "node"),
31
+ printSummary: vi.fn(),
32
+ spinner: {
33
+ start: vi.fn(),
34
+ stop: vi.fn(),
35
+ succeed: vi.fn(),
36
+ fail: vi.fn(),
37
+ text: "",
38
+ },
39
+ };
40
+ return state;
41
+ });
42
+ vi.mock("./lib/ui.js", () => ({
43
+ showBootLogo: mockModules.showBootLogo,
44
+ renderStep: mockModules.renderStep,
45
+ spinner: mockModules.spinner,
46
+ }));
47
+ vi.mock("./steps/prompts.js", () => ({
48
+ runPrompts: mockModules.runPrompts,
49
+ }));
50
+ vi.mock("./steps/createProject.js", () => ({
51
+ createProject: mockModules.createProject,
52
+ configurePackageJson: mockModules.configurePackageJson,
53
+ }));
54
+ vi.mock("./src/steps/installAuth.js", () => ({
55
+ installAuth: mockModules.installAuth,
56
+ }));
57
+ vi.mock("./steps/configurePrisma.js", () => ({
58
+ configurePrisma: mockModules.configurePrisma,
59
+ }));
60
+ vi.mock("./steps/installDeps.js", () => ({
61
+ installDependencies: mockModules.installDependencies,
62
+ detectPackageManager: mockModules.detectPackageManager,
63
+ }));
64
+ vi.mock("./steps/finalSetup.js", () => ({
65
+ configureProduction: mockModules.configureProduction,
66
+ initGit: mockModules.initGit,
67
+ appendProductionReadme: mockModules.appendProductionReadme,
68
+ resolveRuntime: mockModules.resolveRuntime,
69
+ }));
70
+ vi.mock("./utils/output.js", () => ({
71
+ printSummary: mockModules.printSummary,
72
+ }));
73
+ const __filename = fileURLToPath(import.meta.url);
74
+ const __dirname = path.dirname(__filename);
75
+ const repoRoot = path.resolve(__dirname, "../..");
76
+ const tsxLoaderPath = path.join(repoRoot, "node_modules", "tsx", "dist", "loader.mjs");
77
+ function normalizeText(value) {
78
+ return value.replace(/\r\n/g, "\n").trim();
79
+ }
80
+ async function runCliSubprocess(argv, cwd) {
81
+ return await new Promise((resolve, reject) => {
82
+ const child = spawn(process.execPath, ["--import", tsxLoaderPath, path.join(repoRoot, "src/index.ts"), ...argv], {
83
+ cwd,
84
+ env: {
85
+ ...process.env,
86
+ FORCE_COLOR: "0",
87
+ CI: "true",
88
+ },
89
+ stdio: ["ignore", "pipe", "pipe"],
90
+ });
91
+ let stdout = "";
92
+ let stderr = "";
93
+ child.stdout.on("data", (chunk) => {
94
+ stdout += chunk.toString();
95
+ });
96
+ child.stderr.on("data", (chunk) => {
97
+ stderr += chunk.toString();
98
+ });
99
+ child.on("error", reject);
100
+ child.on("exit", (code) => {
101
+ resolve({
102
+ code,
103
+ stdout: normalizeText(stdout),
104
+ stderr: normalizeText(stderr),
105
+ });
106
+ });
107
+ });
108
+ }
109
+ async function runCli(argv, options = {}) {
110
+ const cwd = await mkdtemp(path.join(os.tmpdir(), "authenik8-cli-"));
111
+ const previousArgv = [...process.argv];
112
+ const previousCwd = process.cwd();
113
+ const previousSigintListeners = process.listeners("SIGINT");
114
+ const logs = [];
115
+ const errors = [];
116
+ let exitCode;
117
+ mockModules.promptAnswers = {
118
+ framework: "Express",
119
+ authMode: "base",
120
+ usePrisma: true,
121
+ database: "sqlite",
122
+ useGit: false,
123
+ runtime: "node",
124
+ ...options.promptAnswers,
125
+ };
126
+ const projectName = argv.find((arg) => !arg.startsWith("--"));
127
+ if (options.createExistingTargetDir && projectName) {
128
+ await fs.ensureDir(path.join(cwd, projectName));
129
+ }
130
+ const logSpy = vi.spyOn(console, "log").mockImplementation((...args) => {
131
+ logs.push(args.join(" "));
132
+ });
133
+ const errorSpy = vi.spyOn(console, "error").mockImplementation((...args) => {
134
+ errors.push(args.join(" "));
135
+ });
136
+ const exitSpy = vi
137
+ .spyOn(process, "exit")
138
+ .mockImplementation(((code) => {
139
+ exitCode = code ?? 0;
140
+ throw new Error(`process.exit:${exitCode}`);
141
+ }));
142
+ process.chdir(cwd);
143
+ process.argv = ["node", "src/index.ts", ...argv];
144
+ try {
145
+ vi.resetModules();
146
+ await import("../../index.js");
147
+ }
148
+ catch (error) {
149
+ if (!(error instanceof Error) || !error.message.startsWith("process.exit:")) {
150
+ throw error;
151
+ }
152
+ }
153
+ finally {
154
+ exitSpy.mockRestore();
155
+ errorSpy.mockRestore();
156
+ logSpy.mockRestore();
157
+ process.argv = previousArgv;
158
+ process.chdir(previousCwd);
159
+ for (const listener of process.listeners("SIGINT")) {
160
+ if (!previousSigintListeners.includes(listener)) {
161
+ process.removeListener("SIGINT", listener);
162
+ }
163
+ }
164
+ }
165
+ return {
166
+ exitCode,
167
+ logs,
168
+ errors,
169
+ cwd,
170
+ };
171
+ }
172
+ beforeEach(() => {
173
+ vi.clearAllMocks();
174
+ });
175
+ afterEach(async () => {
176
+ const tempDirs = await fs.readdir(os.tmpdir());
177
+ await Promise.all(tempDirs
178
+ .filter((name) => name.startsWith("authenik8-cli-"))
179
+ .map((name) => fs.remove(path.join(os.tmpdir(), name))));
180
+ });
181
+ describe("CLI", () => {
182
+ it("fails fast when no project name is provided", async () => {
183
+ const cwd = await mkdtemp(path.join(os.tmpdir(), "authenik8-cli-"));
184
+ const result = await runCliSubprocess(["--production-ready"], cwd);
185
+ expect(result.code).toBe(1);
186
+ expect(result.stdout).toContain("Please provide a project name");
187
+ expect(mockModules.runPrompts).not.toHaveBeenCalled();
188
+ });
189
+ it("prints help output for --help without starting generation", async () => {
190
+ const cwd = await mkdtemp(path.join(os.tmpdir(), "authenik8-cli-"));
191
+ const result = await runCliSubprocess(["demo-app", "--help"], cwd);
192
+ expect(result.code).toBe(0);
193
+ expect(result.stdout).toContain("Authenik8 CLI");
194
+ expect(result.stdout).toContain("Usage:");
195
+ expect(mockModules.runPrompts).not.toHaveBeenCalled();
196
+ expect(mockModules.createProject).not.toHaveBeenCalled();
197
+ });
198
+ it("reports an existing target directory before running prompts", async () => {
199
+ const cwd = await mkdtemp(path.join(os.tmpdir(), "authenik8-cli-"));
200
+ await fs.ensureDir(path.join(cwd, "demo-app"));
201
+ const result = await runCliSubprocess(["demo-app"], cwd);
202
+ expect(result.code).toBe(1);
203
+ expect(result.stdout).toContain('Directory "demo-app" already exists.');
204
+ expect(mockModules.runPrompts).not.toHaveBeenCalled();
205
+ });
206
+ it("runs the common base-template flow without crashing", async () => {
207
+ const result = await runCli(["demo-app"]);
208
+ expect(result.exitCode).toBeUndefined();
209
+ expect(mockModules.runPrompts).toHaveBeenCalledTimes(1);
210
+ expect(mockModules.createProject).toHaveBeenCalledTimes(1);
211
+ expect(mockModules.configurePrisma).toHaveBeenCalledTimes(1);
212
+ expect(mockModules.installDependencies).toHaveBeenCalledTimes(1);
213
+ expect(mockModules.printSummary).toHaveBeenCalledWith(expect.objectContaining({
214
+ projectName: "demo-app",
215
+ authMode: "base",
216
+ usePrisma: true,
217
+ }), false);
218
+ expect(result.errors).toHaveLength(0);
219
+ });
220
+ it("parses flags around the project name and runs the production auth flow", async () => {
221
+ const result = await runCli(["--production-ready", "demo-auth"], {
222
+ promptAnswers: {
223
+ authMode: "auth",
224
+ usePrisma: false,
225
+ database: "postgresql",
226
+ runtime: "node",
227
+ },
228
+ });
229
+ expect(result.exitCode).toBeUndefined();
230
+ expect(mockModules.installAuth).toHaveBeenCalledTimes(1);
231
+ expect(mockModules.configureProduction).toHaveBeenCalledTimes(1);
232
+ expect(mockModules.appendProductionReadme).toHaveBeenCalledTimes(1);
233
+ expect(mockModules.printSummary).toHaveBeenCalledWith(expect.objectContaining({
234
+ projectName: "demo-auth",
235
+ authMode: "auth",
236
+ usePrisma: true,
237
+ database: "postgresql",
238
+ }), true);
239
+ expect(result.logs.join("\n")).toContain("require Prisma");
240
+ });
241
+ });
242
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/tests/unit/cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;IAClC,MAAM,KAAK,GAAG;QACZ,aAAa,EAAE;YACb,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,MAAM;SAChB;QACD,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QACnC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;QAClD,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QACpC,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC7B,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC;QAC1C,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QACtC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAC1C,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QACxC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAC9B,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC/B,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAmC,EAAE,EAAE,CAAC,OAAO,IAAI,MAAM,CAAC;QACjF,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;QACrB,OAAO,EAAE;YACP,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;YACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YACb,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;YAChB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YACb,IAAI,EAAE,EAAE;SACT;KACF,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,YAAY,EAAE,WAAW,CAAC,YAAY;IACtC,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,OAAO,EAAE,WAAW,CAAC,OAAO;CAC7B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,WAAW,CAAC,UAAU;CACnC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,aAAa,EAAE,WAAW,CAAC,aAAa;IACxC,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;CACvD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC,WAAW;CACrC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,eAAe,EAAE,WAAW,CAAC,eAAe;CAC7C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;IACpD,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;CACvD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;IACpD,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,sBAAsB,EAAE,WAAW,CAAC,sBAAsB;IAC1D,cAAc,EAAE,WAAW,CAAC,cAAc;CAC3C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,YAAY,EAAE,WAAW,CAAC,YAAY;CACvC,CAAC,CAAC,CAAC;AAeJ,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAEvF,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAc,EAAE,GAAW;IACzD,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;YAC/G,GAAG;YACH,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,WAAW,EAAE,GAAG;gBAChB,EAAE,EAAE,MAAM;aACX;YACD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC;gBACN,IAAI;gBACJ,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;gBAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,IAAc,EACd,UAGI,EAAE;IAEN,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAA4B,CAAC;IAEjC,WAAW,CAAC,aAAa,GAAG;QAC1B,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,MAAM;QACf,GAAG,OAAO,CAAC,aAAa;KACzB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,IAAI,OAAO,CAAC,uBAAuB,IAAI,WAAW,EAAE,CAAC;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;QACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;QACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,EAAE;SACf,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;SACtB,kBAAkB,CAAC,CAAC,CAAC,IAAa,EAAE,EAAE;QACrC,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAU,CAAC,CAAC;IAEf,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE3B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/C,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ;SACL,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;SACnD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,EAAE,GAAG,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACpE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;QAEzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACxE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAE1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACnD,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI;SAChB,CAAC,EACF,KAAK,CACN,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAAE;YAC/D,aAAa,EAAE;gBACb,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,MAAM;aAChB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACnD,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,YAAY;SACvB,CAAC,EACF,IAAI,CACL,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("vite").UserConfig;
2
+ export default _default;
3
+ //# sourceMappingURL=vitest.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../src/vitest.config.ts"],"names":[],"mappings":";AAEA,wBAkBG"}
@@ -0,0 +1,21 @@
1
+ import { defineConfig } from "vitest/config";
2
+ export default defineConfig({
3
+ test: {
4
+ environment: "node",
5
+ setupFiles: ["./tests/setup.ts"],
6
+ include: ["tests/**/*.test.ts"],
7
+ fileParallelism: false,
8
+ restoreMocks: true,
9
+ clearMocks: true,
10
+ mockReset: true,
11
+ testTimeout: 30_000,
12
+ coverage: {
13
+ provider: "v8",
14
+ reporter: ["text", "json-summary", "html"],
15
+ reportsDirectory: "./coverage",
16
+ include: ["src/**/*.ts"],
17
+ exclude: ["src/bin/**", "src/**/*.d.ts", "tests/**"],
18
+ },
19
+ },
20
+ });
21
+ //# sourceMappingURL=vitest.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../src/vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,EAAC,MAAM,CAAC;YACzC,gBAAgB,EAAE,YAAY;YAC9B,OAAO,EAAE,CAAC,aAAa,CAAC;YACxB,OAAO,EAAE,CAAC,YAAY,EAAC,eAAe,EAAE,UAAU,CAAC;SACpD;KACF;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-authenik8-app",
3
- "version": "2.1.6",
3
+ "version": "2.1.7",
4
4
  "description": "⚡ Fast Express + TypeScript auth starter with secure JWT, refresh rotation, Redis, RBAC, OAuth & Prisma.\nPowered by the Authenik8 Identity Engine.",
5
5
  "bin": {
6
6
  "create-authenik8-app": "dist/index.js"
@@ -42,12 +42,17 @@
42
42
  "templates"
43
43
  ],
44
44
  "scripts": {
45
+ "test": "vitest run",
46
+ "test:watch": "vitest",
47
+ "test:coverage": "vitest run --coverage",
45
48
  "test:templates": "node --import tsx --test tests/template-servers.test.mjs"
46
49
  },
47
50
  "devDependencies": {
48
51
  "@types/express": "^5.0.6",
49
52
  "@types/fs-extra": "^11.0.4",
50
- "@types/node": "^25.5.2"
53
+ "@types/node": "^25.5.2",
54
+ "@vitest/coverage-v8": "^3.2.4",
55
+ "vitest": "^3.2.4"
51
56
  },
52
57
  "repository": {
53
58
  "type": "git",