keycloak_theme/src/tools/transformCodebase.ts

63 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-02-21 17:38:59 +01:00
import * as fs from "fs";
import * as path from "path";
import { crawl } from "denoify/tools/crawl";
import { createDirectoryIfNotExistsRecursive } from "denoify/tools/createDirectoryIfNotExistsRecursive";
/** Apply a transformation function to every file of directory */
2021-02-21 18:05:26 +01:00
export function transformCodebase(
2021-02-21 17:38:59 +01:00
params: {
srcDirPath: string;
destDirPath: string;
transformSourceCodeString: (params: {
sourceCode: Buffer;
filePath: string;
}) => {
modifiedSourceCode: Buffer;
newFileName?: string;
} | undefined;
}
) {
const { srcDirPath, destDirPath, transformSourceCodeString } = params;
for (const file_relative_path of crawl(srcDirPath)) {
const filePath = path.join(srcDirPath, file_relative_path);
const transformSourceCodeStringResult = transformSourceCodeString({
"sourceCode": fs.readFileSync(filePath),
"filePath": path.join(srcDirPath, file_relative_path)
});
if (transformSourceCodeStringResult === undefined) {
continue;
}
2021-02-21 18:05:26 +01:00
createDirectoryIfNotExistsRecursive(
2021-02-21 17:38:59 +01:00
path.dirname(
path.join(
destDirPath,
file_relative_path
)
)
);
const { newFileName, modifiedSourceCode } = transformSourceCodeStringResult;
fs.writeFileSync(
path.join(
path.dirname(path.join(destDirPath, file_relative_path)),
newFileName ?? path.basename(file_relative_path)
),
modifiedSourceCode
);
}
}