99 lines
9.4 KiB
JavaScript
99 lines
9.4 KiB
JavaScript
import * as path from 'node:path';
|
|
import { pathInfoEx } from '@polymech/commons';
|
|
import { DEFAULT_ROOTS, DEFAULT_VARS } from '@polymech/commons';
|
|
import { sync as exists } from '@polymech/fs/exists';
|
|
export const sourceVariables = (filePath, projectPath) => {
|
|
const fileSpecificVariables = {};
|
|
const srcParts = path.parse(filePath);
|
|
fileSpecificVariables.SRC_NAME = srcParts.name;
|
|
fileSpecificVariables.SRC_DIR = srcParts.dir;
|
|
fileSpecificVariables.SRC_EXT = srcParts.ext.startsWith('.') ? srcParts.ext.substring(1) : srcParts.ext; // Remove leading dot from ext
|
|
fileSpecificVariables.SRC_BASENAME = srcParts.base;
|
|
fileSpecificVariables.SRC_PATH = filePath;
|
|
// Calculate SRC_REL relative to projectPath for the file's directory
|
|
if (projectPath && path.isAbsolute(srcParts.dir) && path.isAbsolute(projectPath)) {
|
|
fileSpecificVariables.SRC_REL = path.relative(projectPath, srcParts.dir);
|
|
}
|
|
else {
|
|
// If paths are not suitable for relative calculation (e.g., one is not absolute)
|
|
// or projectPath is not provided, SRC_REL might be less meaningful or empty.
|
|
fileSpecificVariables.SRC_REL = '';
|
|
}
|
|
const addIndexedParts = (baseKey, fullName, delimiter) => {
|
|
const parts = fullName.split(delimiter);
|
|
if (parts.length > 1) {
|
|
parts.forEach((part, i) => {
|
|
fileSpecificVariables[`${baseKey}${i}`] = part;
|
|
});
|
|
}
|
|
};
|
|
addIndexedParts('SRC_NAME-', srcParts.name, '-');
|
|
addIndexedParts('SRC_NAME.', srcParts.name, '.');
|
|
addIndexedParts('SRC_NAME_', srcParts.name, '_');
|
|
// Convert all keys to uppercase
|
|
const uppercasedVariables = {};
|
|
for (const key in fileSpecificVariables) {
|
|
uppercasedVariables[key.toUpperCase()] = fileSpecificVariables[key];
|
|
}
|
|
return uppercasedVariables;
|
|
};
|
|
export const variables = (options) => {
|
|
const { model, router, baseURL } = options;
|
|
let ret = {
|
|
model,
|
|
router,
|
|
baseURL,
|
|
...DEFAULT_ROOTS,
|
|
...DEFAULT_VARS({})
|
|
};
|
|
let sourcePath;
|
|
if (options.include && options.include[0]) {
|
|
sourcePath = options.include[0];
|
|
}
|
|
else if (options.prompt && exists(options.prompt)) {
|
|
sourcePath = options.prompt;
|
|
}
|
|
if (sourcePath) {
|
|
const include = sourcePath;
|
|
const {} = pathInfoEx(include);
|
|
const srcParts = path.parse(include);
|
|
const srcVariables = {};
|
|
srcVariables.SRC_NAME = srcParts.name;
|
|
srcVariables.SRC_DIR = srcParts.dir;
|
|
srcVariables.SRC_EXT = srcParts.ext;
|
|
if (ret.ROOT) {
|
|
srcVariables.SRC_REL = path.relative(ret.ROOT, srcParts.dir);
|
|
}
|
|
const dashed = srcParts.name.split('-');
|
|
if (dashed.length > 1) {
|
|
for (let i = 0; i < dashed.length; i++) {
|
|
srcVariables[`SRC_NAME-${i}`] = dashed[i];
|
|
}
|
|
}
|
|
const dotted = srcParts.name.split('.');
|
|
if (dotted.length > 1) {
|
|
for (let i = 0; i < dotted.length; i++) {
|
|
srcVariables[`SRC_NAME.${i}`] = dotted[i];
|
|
}
|
|
}
|
|
const underscored = srcParts.name.split('_');
|
|
if (underscored.length > 1) {
|
|
for (let i = 0; i < underscored.length; i++) {
|
|
srcVariables[`SRC_NAME_${i}`] = underscored[i];
|
|
}
|
|
}
|
|
ret = { ...ret, ...srcVariables };
|
|
}
|
|
// CLI argv variables
|
|
let variables = Object.assign({}, ...Object.keys(options).filter((k) => k.startsWith('var-')).map((k) => {
|
|
return {
|
|
[k.replace('var-', '')]: options[k]
|
|
};
|
|
}));
|
|
ret = Object.keys(ret).reduce((acc, key) => {
|
|
acc[key.toUpperCase()] = ret[key];
|
|
return acc;
|
|
}, {});
|
|
return { ...ret, ...variables };
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUUvRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXBELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWdCLEVBQUUsV0FBbUIsRUFBMEIsRUFBRTtJQUMvRixNQUFNLHFCQUFxQixHQUEyQixFQUFFLENBQUM7SUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0QyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUMvQyxxQkFBcUIsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUM3QyxxQkFBcUIsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsOEJBQThCO0lBQ3ZJLHFCQUFxQixDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ25ELHFCQUFxQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFFMUMscUVBQXFFO0lBQ3JFLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FB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SUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzdDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzdDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xELENBQUM7UUFDTCxDQUFDO1FBQ0QsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQTtJQUNyQyxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNwRyxPQUFPO1lBQ0gsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEMsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDSCxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDdkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFBO0FBQ25DLENBQUMsQ0FBQSJ9
|