131 lines
3.6 KiB
TypeScript
131 lines
3.6 KiB
TypeScript
|
|
||
|
import { execSync } from "child_process";
|
||
|
import { join as pathJoin, relative as pathRelative } from "path";
|
||
|
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 testAppNames = ["keycloakify-demo-app"] as const;
|
||
|
|
||
|
const getTestAppPath = (testAppName: typeof testAppNames[number]) =>
|
||
|
pathJoin(keycloakifyDirPath, "..", testAppName);
|
||
|
|
||
|
testAppNames.forEach(testAppName =>
|
||
|
execSync("yarn install", { "cwd": getTestAppPath(testAppName) }),
|
||
|
);
|
||
|
|
||
|
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 });
|
||
|
|
||
|
testAppNames.forEach(testAppName =>
|
||
|
execYarnLink({
|
||
|
"cwd": getTestAppPath(testAppName),
|
||
|
"targetModuleName": commonThirdPartyDep,
|
||
|
}),
|
||
|
);
|
||
|
});
|
||
|
|
||
|
console.log("=== Linking in house dependencies ===");
|
||
|
|
||
|
execYarnLink({ "cwd": pathJoin(keycloakifyDirPath, "dist") });
|
||
|
|
||
|
testAppNames.forEach(testAppName =>
|
||
|
execYarnLink({
|
||
|
"cwd": getTestAppPath(testAppName),
|
||
|
"targetModuleName": "keycloakify",
|
||
|
}),
|
||
|
);
|