@nestjs-mod/common
Version:
A collection of utilities for unifying NestJS applications and modules
218 lines • 10.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PackageJsonService = void 0;
const tslib_1 = require("tslib");
const common_1 = require("@nestjs/common");
const fs_1 = require("fs");
const project_utils_configuration_1 = require("../project-utils.configuration");
const project_utils_constants_1 = require("../project-utils.constants");
let PackageJsonService = class PackageJsonService {
constructor(projectUtilsConfiguration) {
this.projectUtilsConfiguration = projectUtilsConfiguration;
}
getPackageJsonFilePath() {
return this.projectUtilsConfiguration.packageJsonFile;
}
read() {
const packageJsonFile = this.getPackageJsonFilePath();
if (!packageJsonFile) {
return undefined;
}
try {
const basicJson = JSON.parse((0, fs_1.readFileSync)(packageJsonFile).toString());
return this.toStructure(basicJson);
}
catch (err) {
return undefined;
}
}
write(structuredJson) {
const packageJsonFile = this.getPackageJsonFilePath();
if (!packageJsonFile) {
return;
}
try {
const basicJson = JSON.parse((0, fs_1.readFileSync)(packageJsonFile).toString());
if (basicJson) {
const content = JSON.stringify(this.toPlain(basicJson, structuredJson), null, 2);
if (content) {
(0, fs_1.writeFileSync)(packageJsonFile, content);
}
}
}
catch (err) {
//
}
}
addScripts(category, commands, structuredJson) {
if (!structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]) {
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME] = {};
}
if (!structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category]) {
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category] = {};
}
for (const commandName of Object.keys(commands)) {
if (!structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category][commandName]) {
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category][commandName] = { commands: [], comments: [] };
}
if (structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category][commandName].commands.length === 0) {
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category][commandName].commands = commands[commandName].commands;
}
if (structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category][commandName].comments.length === 0) {
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME][category][commandName].comments = commands[commandName].comments;
}
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
toStructure(basicJson) {
let categoryIsExists = false;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const def = {};
for (const keyD of Object.keys(basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME] || {})) {
if (!keyD.startsWith('_____') && !categoryIsExists) {
def[keyD] = {
commands: basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[keyD].split('&&').map((s) => s.trim()) || [],
comments: basicJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME]?.[keyD] || [],
};
delete basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[keyD];
}
else {
categoryIsExists = true;
}
}
const structuredJson = { ...basicJson };
const scripts = {};
let category = project_utils_constants_1.DEFAULT_SCRIPTS_CATEGORY_NAME;
if (!categoryIsExists) {
scripts[category] = def;
}
for (const key of Object.keys(basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME] || {})) {
if (key.startsWith('_____')) {
category = key?.split('_____')[1];
}
else {
if (!scripts[category]) {
scripts[category] = {};
}
if (!scripts[category][key]) {
scripts[category][key] = {
commands: [],
comments: [],
};
}
scripts[category][key].commands = basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[key]?.split(' && ') || [];
scripts[category][key].comments = basicJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME]?.[key] || [];
}
}
const { utils, ...other } = scripts;
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME] = {
...Object.entries(other)
.sort((a, b) => {
let posA = 100, posB = 100;
if (a[0].includes('dev')) {
posA = 1;
}
if (b[0].includes('dev')) {
posB = 1;
}
if (a[0].includes('prod')) {
posA = 2;
}
if (b[0].includes('prod')) {
posB = 2;
}
if (a[0].includes('doc')) {
posA = 3;
}
if (b[0].includes('doc')) {
posB = 3;
}
if (a[0].includes('test')) {
posA = 4;
}
if (b[0].includes('test')) {
posB = 4;
}
if (a[0].includes('lint')) {
posA = 5;
}
if (b[0].includes('lint')) {
posB = 5;
}
return posA - posB;
})
.reduce((all, [key, value]) => ({ ...all, [key]: value }), {}),
utils: utils || {},
};
const categories = Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME] || {});
for (const category of categories) {
if (Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[category] || {}).length === 0) {
if (structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[category]) {
delete structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[category];
}
}
}
if (Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[project_utils_constants_1.DEFAULT_SCRIPTS_CATEGORY_NAME] || {}).length === 0) {
if (structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[project_utils_constants_1.DEFAULT_SCRIPTS_CATEGORY_NAME]) {
delete structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[project_utils_constants_1.DEFAULT_SCRIPTS_CATEGORY_NAME];
}
}
if (Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME] || {}).length === 0) {
if (structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]) {
delete structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME];
}
}
if (Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME] || {}).length === 0) {
if (structuredJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME]) {
delete structuredJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME];
}
}
return structuredJson;
}
toPlain(basicJson, structuredJson) {
const categories = Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME] || {});
basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME] = {};
basicJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME] = {};
const structuredJsonKeys = Object.keys(structuredJson);
for (const structuredJsonKey of structuredJsonKeys) {
if (![project_utils_constants_1.SCRIPTS_KEY_NAME, project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME].includes(structuredJsonKey)) {
// todo: remove any
try {
const untypedStructuredJson = structuredJson;
if (typeof untypedStructuredJson[structuredJsonKey] === 'object' &&
!Array.isArray(untypedStructuredJson[structuredJsonKey])) {
basicJson[structuredJsonKey] = {
...(basicJson[structuredJsonKey] || {}),
...(untypedStructuredJson[structuredJsonKey] || {}),
};
}
else {
// todo: remove any
basicJson[structuredJsonKey] = untypedStructuredJson[structuredJsonKey];
}
}
catch (err) {
//
}
}
}
for (const category of categories) {
const categoryName = `_____${category}_____`;
if (!basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME][categoryName]) {
basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME][categoryName] = categoryName;
}
for (const key of Object.keys(structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[category] || {})) {
basicJson[project_utils_constants_1.SCRIPTS_KEY_NAME][key] =
structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[category][key].commands.join(' && ') || '';
basicJson[project_utils_constants_1.SCRIPTS_COMMENTS_KEY_NAME][key] = structuredJson[project_utils_constants_1.SCRIPTS_KEY_NAME]?.[category][key].comments || [];
}
}
return basicJson;
}
};
exports.PackageJsonService = PackageJsonService;
exports.PackageJsonService = PackageJsonService = tslib_1.__decorate([
(0, common_1.Injectable)(),
tslib_1.__metadata("design:paramtypes", [project_utils_configuration_1.ProjectUtilsConfiguration])
], PackageJsonService);
//# sourceMappingURL=package-json.service.js.map