fix: create cache dir if it doesn't already exist
This commit is contained in:
@ -3,7 +3,8 @@ import { id } from "tsafe/id";
|
|||||||
import { parse as urlParse } from "url";
|
import { parse as urlParse } from "url";
|
||||||
import { typeGuard } from "tsafe/typeGuard";
|
import { typeGuard } from "tsafe/typeGuard";
|
||||||
import { symToStr } from "tsafe/symToStr";
|
import { symToStr } from "tsafe/symToStr";
|
||||||
import { Bundler, bundlers, getParsedPackageJson } from "./parsed-package-json";
|
import { bundlers, getParsedPackageJson } from "./parsed-package-json";
|
||||||
|
import type { Bundler } from "./parsed-package-json";
|
||||||
import { getAppInputPath, getKeycloakBuildPath } from "./build-paths";
|
import { getAppInputPath, getKeycloakBuildPath } from "./build-paths";
|
||||||
|
|
||||||
/** Consolidated build option gathered form CLI arguments and config in package.json */
|
/** Consolidated build option gathered form CLI arguments and config in package.json */
|
||||||
|
@ -28,6 +28,9 @@ export async function unzip(file: string, targetFolder: string, unzipSubPath?: s
|
|||||||
if (!targetFolder.endsWith("/") || !targetFolder.endsWith("\\")) {
|
if (!targetFolder.endsWith("/") || !targetFolder.endsWith("\\")) {
|
||||||
targetFolder += "/";
|
targetFolder += "/";
|
||||||
}
|
}
|
||||||
|
if (!fs.existsSync(targetFolder)) {
|
||||||
|
fs.mkdirSync(targetFolder, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
yauzl.open(file, { lazyEntries: true }, async (err, zipfile) => {
|
yauzl.open(file, { lazyEntries: true }, async (err, zipfile) => {
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
import * as fs from "fs";
|
|
||||||
import { getProjectRoot } from "keycloakify/bin/tools/getProjectRoot.js";
|
|
||||||
import { join as pathJoin } from "path";
|
|
||||||
import { downloadAndUnzip } from "keycloakify/bin/tools/downloadAndUnzip";
|
|
||||||
import { main as initializeEmailTheme } from "keycloakify/bin/initialize-email-theme";
|
|
||||||
import { it, describe, afterAll, beforeAll, beforeEach, vi } from "vitest";
|
|
||||||
import { getKeycloakBuildPath } from "keycloakify/bin/keycloakify/build-paths";
|
|
||||||
import { downloadBuiltinKeycloakTheme } from "keycloakify/bin/download-builtin-keycloak-theme";
|
|
||||||
|
|
||||||
export const sampleReactProjectDirPath = pathJoin(getProjectRoot(), "sample_custom_react_project");
|
|
||||||
|
|
||||||
async function setupSampleReactProject(destDir: string) {
|
|
||||||
await downloadAndUnzip({
|
|
||||||
"url": "https://github.com/keycloakify/keycloakify/releases/download/v0.0.1/sample_build_dir_and_package_json.zip",
|
|
||||||
"destDirPath": destDir
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const nativeCwd = process.cwd;
|
|
||||||
vi.mock("keycloakify/bin/keycloakify/parsed-package-json", async () => ({
|
|
||||||
...((await vi.importActual("keycloakify/bin/keycloakify/parsed-package-json")) as Record<string, unknown>),
|
|
||||||
getParsedPackageJson: () => ({
|
|
||||||
"keycloakify": {
|
|
||||||
"appInputPath": "./custom_input/build",
|
|
||||||
"keycloakBuildDir": "./custom_output"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}));
|
|
||||||
|
|
||||||
vi.mock("keycloakify/bin/promptKeycloakVersion", async () => ({
|
|
||||||
...((await vi.importActual("keycloakify/bin/promptKeycloakVersion")) as Record<string, unknown>),
|
|
||||||
promptKeycloakVersion: () => ({ "keycloakVersion": "11.0.3" })
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe("Sample Project", () => {
|
|
||||||
beforeAll(() => {
|
|
||||||
// Monkey patching the cwd to the app location for the duration of this testv
|
|
||||||
process.cwd = () => sampleReactProjectDirPath;
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(() => {
|
|
||||||
fs.rmSync(sampleReactProjectDirPath, { "recursive": true });
|
|
||||||
process.cwd = nativeCwd;
|
|
||||||
});
|
|
||||||
beforeEach(() => {
|
|
||||||
if (fs.existsSync(sampleReactProjectDirPath)) {
|
|
||||||
fs.rmSync(sampleReactProjectDirPath, { "recursive": true });
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.mkdirSync(pathJoin(sampleReactProjectDirPath, "src", "keycloak-theme"), { "recursive": true });
|
|
||||||
fs.mkdirSync(pathJoin(sampleReactProjectDirPath, "src", "login"), { "recursive": true });
|
|
||||||
});
|
|
||||||
it(
|
|
||||||
"Sets up the project with a custom input and output directory without error",
|
|
||||||
async () => {
|
|
||||||
await setupSampleReactProject(pathJoin(sampleReactProjectDirPath, "custom_input"));
|
|
||||||
await initializeEmailTheme();
|
|
||||||
|
|
||||||
const destDirPath = pathJoin(getKeycloakBuildPath(), "src", "main", "resources", "theme");
|
|
||||||
await downloadBuiltinKeycloakTheme({ destDirPath, keycloakVersion: "11.0.3", isSilent: false });
|
|
||||||
},
|
|
||||||
{ timeout: 30000 }
|
|
||||||
);
|
|
||||||
});
|
|
@ -15,10 +15,10 @@ async function setupSampleReactProject(destDir: string) {
|
|||||||
"destDirPath": destDir
|
"destDirPath": destDir
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
let parsedPackageJson: Record<string, unknown> = {};
|
||||||
vi.mock("keycloakify/bin/keycloakify/parsed-package-json", async () => ({
|
vi.mock("keycloakify/bin/keycloakify/parsed-package-json", async () => ({
|
||||||
...((await vi.importActual("keycloakify/bin/keycloakify/parsed-package-json")) as Record<string, unknown>),
|
...((await vi.importActual("keycloakify/bin/keycloakify/parsed-package-json")) as Record<string, unknown>),
|
||||||
getParsedPackageJson: () => ({})
|
getParsedPackageJson: () => parsedPackageJson
|
||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock("keycloakify/bin/promptKeycloakVersion", async () => ({
|
vi.mock("keycloakify/bin/promptKeycloakVersion", async () => ({
|
||||||
@ -55,6 +55,23 @@ describe("Sample Project", () => {
|
|||||||
const destDirPath = pathJoin(getKeycloakBuildPath(), "src", "main", "resources", "theme");
|
const destDirPath = pathJoin(getKeycloakBuildPath(), "src", "main", "resources", "theme");
|
||||||
await downloadBuiltinKeycloakTheme({ destDirPath, keycloakVersion: "11.0.3", isSilent: false });
|
await downloadBuiltinKeycloakTheme({ destDirPath, keycloakVersion: "11.0.3", isSilent: false });
|
||||||
},
|
},
|
||||||
{ timeout: 30000 }
|
{ timeout: 90000 }
|
||||||
|
);
|
||||||
|
it(
|
||||||
|
"Sets up the project with a custom input and output directory without error",
|
||||||
|
async () => {
|
||||||
|
parsedPackageJson = {
|
||||||
|
"keycloakify": {
|
||||||
|
"appInputPath": "./custom_input/build",
|
||||||
|
"keycloakBuildDir": "./custom_output"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
await setupSampleReactProject(pathJoin(sampleReactProjectDirPath, "custom_input"));
|
||||||
|
await initializeEmailTheme();
|
||||||
|
|
||||||
|
const destDirPath = pathJoin(getKeycloakBuildPath(), "src", "main", "resources", "theme");
|
||||||
|
await downloadBuiltinKeycloakTheme({ destDirPath, keycloakVersion: "11.0.3", isSilent: false });
|
||||||
|
},
|
||||||
|
{ timeout: 90000 }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,6 @@ export default defineConfig({
|
|||||||
"alias": {
|
"alias": {
|
||||||
"keycloakify": path.resolve(__dirname, "./src")
|
"keycloakify": path.resolve(__dirname, "./src")
|
||||||
},
|
},
|
||||||
"watchExclude": ["**/node_modules/**", "**/dist/**", "**/sample_react_project/**", "**/sample_custom_react_project/**"]
|
"watchExclude": ["**/node_modules/**", "**/dist/**", "**/sample_react_project/**"]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user