129 lines
3.7 KiB
TypeScript
129 lines
3.7 KiB
TypeScript
import { execSync } from "child_process";
|
|
import { join as pathJoin, relative as pathRelative } from "path";
|
|
import { exclude } from "tsafe/exclude";
|
|
import * as fs from "fs";
|
|
|
|
const keycloakifyDirPath = pathJoin(__dirname, "..", "..");
|
|
|
|
fs.writeFileSync(
|
|
pathJoin(keycloakifyDirPath, "dist", "package.json"),
|
|
Buffer.from(
|
|
JSON.stringify(
|
|
(() => {
|
|
const packageJsonParsed = JSON.parse(fs.readFileSync(pathJoin(keycloakifyDirPath, "package.json")).toString("utf8"));
|
|
|
|
return {
|
|
...packageJsonParsed,
|
|
"main": packageJsonParsed["main"].replace(/^dist\//, ""),
|
|
"types": packageJsonParsed["types"].replace(/^dist\//, "")
|
|
};
|
|
})(),
|
|
null,
|
|
2
|
|
),
|
|
"utf8"
|
|
)
|
|
);
|
|
|
|
const commonThirdPartyDeps = (() => {
|
|
const namespaceModuleNames = ["@emotion"];
|
|
const standaloneModuleNames = ["react", "@types/react", "powerhooks", "tss-react", "evt"];
|
|
|
|
return [
|
|
...namespaceModuleNames
|
|
.map(namespaceModuleName =>
|
|
fs
|
|
.readdirSync(pathJoin(keycloakifyDirPath, "node_modules", namespaceModuleName))
|
|
.map(submoduleName => `${namespaceModuleName}/${submoduleName}`)
|
|
)
|
|
.reduce((prev, curr) => [...prev, ...curr], []),
|
|
...standaloneModuleNames
|
|
];
|
|
})();
|
|
|
|
const yarnHomeDirPath = pathJoin(keycloakifyDirPath, ".yarn_home");
|
|
|
|
execSync(["rm -rf", "mkdir"].map(cmd => `${cmd} ${yarnHomeDirPath}`).join(" && "));
|
|
|
|
const execYarnLink = (params: { targetModuleName?: string; cwd: string }) => {
|
|
const { targetModuleName, cwd } = params;
|
|
|
|
const cmd = ["yarn", "link", ...(targetModuleName !== undefined ? [targetModuleName] : [])].join(" ");
|
|
|
|
console.log(`$ cd ${pathRelative(keycloakifyDirPath, cwd) || "."} && ${cmd}`);
|
|
|
|
execSync(cmd, {
|
|
cwd,
|
|
"env": {
|
|
...process.env,
|
|
"HOME": yarnHomeDirPath
|
|
}
|
|
});
|
|
};
|
|
|
|
const testAppPaths = (() => {
|
|
const arg = process.argv[2];
|
|
|
|
const testAppNames = arg !== undefined ? [arg] : ["keycloakify-starter", "keycloakify-advanced-starter"];
|
|
|
|
return testAppNames
|
|
.map(testAppName => {
|
|
const testAppPath = pathJoin(keycloakifyDirPath, "..", testAppName);
|
|
|
|
if (fs.existsSync(testAppPath)) {
|
|
return testAppPath;
|
|
}
|
|
|
|
console.warn(`Skipping ${testAppName} since it cant be found here: ${testAppPath}`);
|
|
|
|
return undefined;
|
|
})
|
|
.filter(exclude(undefined));
|
|
})();
|
|
|
|
console.log(testAppPaths);
|
|
|
|
if (testAppPaths.length === 0) {
|
|
console.error("No test app to link into!");
|
|
process.exit(-1);
|
|
}
|
|
|
|
testAppPaths.forEach(testAppPath => execSync("yarn install", { "cwd": testAppPath }));
|
|
|
|
console.log("=== Linking common dependencies ===");
|
|
|
|
const total = commonThirdPartyDeps.length;
|
|
let current = 0;
|
|
|
|
commonThirdPartyDeps.forEach(commonThirdPartyDep => {
|
|
current++;
|
|
|
|
console.log(`${current}/${total} ${commonThirdPartyDep}`);
|
|
|
|
const localInstallPath = pathJoin(
|
|
...[keycloakifyDirPath, "node_modules", ...(commonThirdPartyDep.startsWith("@") ? commonThirdPartyDep.split("/") : [commonThirdPartyDep])]
|
|
);
|
|
|
|
execYarnLink({ "cwd": localInstallPath });
|
|
});
|
|
|
|
commonThirdPartyDeps.forEach(commonThirdPartyDep =>
|
|
testAppPaths.forEach(testAppPath =>
|
|
execYarnLink({
|
|
"cwd": testAppPath,
|
|
"targetModuleName": commonThirdPartyDep
|
|
})
|
|
)
|
|
);
|
|
|
|
console.log("=== Linking in house dependencies ===");
|
|
|
|
execYarnLink({ "cwd": pathJoin(keycloakifyDirPath, "dist") });
|
|
|
|
testAppPaths.forEach(testAppPath =>
|
|
execYarnLink({
|
|
"cwd": testAppPath,
|
|
"targetModuleName": "keycloakify"
|
|
})
|
|
);
|