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.
- package/README.md +5 -4
- package/package.json +1 -1
- package/dist/bin/index.d.ts +0 -8
- package/dist/bin/index.d.ts.map +0 -1
- package/dist/bin/index.js +0 -796
- package/dist/bin/index.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -292
- package/dist/index.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -4
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -25
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/process.d.ts +0 -7
- package/dist/lib/process.d.ts.map +0 -1
- package/dist/lib/process.js +0 -60
- package/dist/lib/process.js.map +0 -1
- package/dist/lib/state.d.ts +0 -8
- package/dist/lib/state.d.ts.map +0 -1
- package/dist/lib/state.js +0 -31
- package/dist/lib/state.js.map +0 -1
- package/dist/lib/types.d.ts +0 -17
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js +0 -2
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/ui.d.ts +0 -7
- package/dist/lib/ui.d.ts.map +0 -1
- package/dist/lib/ui.js +0 -124
- package/dist/lib/ui.js.map +0 -1
- package/dist/steps/configurePrisma.d.ts +0 -3
- package/dist/steps/configurePrisma.d.ts.map +0 -1
- package/dist/steps/configurePrisma.js +0 -41
- package/dist/steps/configurePrisma.js.map +0 -1
- package/dist/steps/createProject.d.ts +0 -5
- package/dist/steps/createProject.d.ts.map +0 -1
- package/dist/steps/createProject.js +0 -35
- package/dist/steps/createProject.js.map +0 -1
- package/dist/steps/finalSetup.d.ts +0 -7
- package/dist/steps/finalSetup.d.ts.map +0 -1
- package/dist/steps/finalSetup.js +0 -110
- package/dist/steps/finalSetup.js.map +0 -1
- package/dist/steps/installAuth.d.ts +0 -3
- package/dist/steps/installAuth.d.ts.map +0 -1
- package/dist/steps/installAuth.js +0 -18
- package/dist/steps/installAuth.js.map +0 -1
- package/dist/steps/installDeps.d.ts +0 -4
- package/dist/steps/installDeps.d.ts.map +0 -1
- package/dist/steps/installDeps.js +0 -50
- package/dist/steps/installDeps.js.map +0 -1
- package/dist/steps/prompts.d.ts +0 -3
- package/dist/steps/prompts.d.ts.map +0 -1
- package/dist/steps/prompts.js +0 -76
- package/dist/steps/prompts.js.map +0 -1
- package/dist/tests/helpers/generator.d.ts +0 -27
- package/dist/tests/helpers/generator.d.ts.map +0 -1
- package/dist/tests/helpers/generator.js +0 -282
- package/dist/tests/helpers/generator.js.map +0 -1
- package/dist/tests/integration/generator.test.d.ts +0 -2
- package/dist/tests/integration/generator.test.d.ts.map +0 -1
- package/dist/tests/integration/generator.test.js +0 -116
- package/dist/tests/integration/generator.test.js.map +0 -1
- package/dist/tests/integration/snapshot.test.d.ts +0 -2
- package/dist/tests/integration/snapshot.test.d.ts.map +0 -1
- package/dist/tests/integration/snapshot.test.js +0 -68
- package/dist/tests/integration/snapshot.test.js.map +0 -1
- package/dist/tests/setup.d.ts +0 -2
- package/dist/tests/setup.d.ts.map +0 -1
- package/dist/tests/setup.js +0 -10
- package/dist/tests/setup.js.map +0 -1
- package/dist/tests/unit/cli.test.d.ts +0 -2
- package/dist/tests/unit/cli.test.d.ts.map +0 -1
- package/dist/tests/unit/cli.test.js +0 -242
- package/dist/tests/unit/cli.test.js.map +0 -1
- package/dist/utils/hash.d.ts +0 -4
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/hash.js +0 -51
- package/dist/utils/hash.js.map +0 -1
- package/dist/utils/output.d.ts +0 -3
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -65
- package/dist/utils/output.js.map +0 -1
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -21
- package/dist/vitest.config.js.map +0 -1
- package/templates/prisma/postgresql/.env +0 -3
- 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 +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 +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"}
|
package/dist/tests/setup.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tests/setup.ts"],"names":[],"mappings":""}
|
package/dist/tests/setup.js
DELETED
package/dist/tests/setup.js.map
DELETED
|
@@ -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../../src/tests/unit/cli.test.ts"],"names":[],"mappings":""}
|