UNPKG

@nestjs-mod/common

Version:

A collection of utilities for unifying NestJS applications and modules

218 lines 10.4 kB
"use strict"; 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