@o3r/workspace
Version:
Workspace tooling of the Otter Framework
72 lines • 2.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("node:fs");
const path = require("node:path");
const commander_1 = require("commander");
const globby_1 = require("globby");
const semver_1 = require("semver");
const winston = require("winston");
const defaultIncludedFiles = ['**/package.json', '!/**/templates/**/package.json', '!**/node_modules/**/package.json', '**/lerna.json'];
const collect = (pattern, patterns) => {
if (patterns === defaultIncludedFiles && pattern) {
patterns = [];
}
patterns.push(pattern);
return patterns;
};
const logger = winston.createLogger({
format: winston.format.combine(winston.format.colorize(), winston.format.simple()),
transports: new winston.transports.Console()
});
let replaceVersion;
commander_1.program
.arguments('<version>')
.description('Replace the packages version in a monorepos')
.option('-p, --placeholder <placeholder>', 'Pattern of the version placeholder', '0.0.0(-placeholder)?')
.option('--include <file>', 'Add files pattern to apply the version replacement', collect, defaultIncludedFiles)
.option('-v, --verbose', 'Display debug logs')
.action((version) => {
const cleanVersion = (0, semver_1.clean)(version);
if (!cleanVersion) {
// eslint-disable-next-line no-console -- no other logger available
console.error(`The version "${version}" is invalid`);
return process.exit(1);
}
replaceVersion = cleanVersion;
})
.parse(process.argv);
const options = commander_1.program.opts();
logger.level = options.verbose ? 'debug' : 'info';
const cliFn = () => {
(0, globby_1.sync)(options.include, { cwd: process.cwd() })
.map((file) => path.join(process.cwd(), file))
.map((filePath) => ({
path: filePath,
content: fs.readFileSync(filePath).toString()
}))
.forEach((pathWithContent) => {
const newContent = pathWithContent.content
.replace(new RegExp('"([~^]?)' + options.placeholder.replace(/[$()+.?[\\\]^{|}]/g, '\\$&').replace(/\\*\./g, '\\.') + '"', 'g'), `"$1${replaceVersion}"`)
.replace(/"workspace:([^~]?)[^"]*"(,?)$/gm, `"$1${replaceVersion}"$2`);
if (newContent === pathWithContent.content) {
logger.debug(`No change in ${pathWithContent.path}`);
}
else {
logger.info(`update version in ${pathWithContent.path}`);
fs.writeFileSync(pathWithContent.path, newContent);
}
});
};
void (async () => {
let wrapper = (fn) => fn;
try {
const { createCliWithMetrics } = await Promise.resolve().then(() => require('@o3r/telemetry'));
wrapper = createCliWithMetrics;
}
catch {
// Do not throw if `@o3r/telemetry` is not installed
}
return wrapper(cliFn, '@o3r/workspace:set-version', { logger, preParsedOptions: options })();
})();
//# sourceMappingURL=set-version.cjs.map