UNPKG

move-qcp

Version:
105 lines 3.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCustomScript = exports.deployQCP = exports.readFileAsync = void 0; const fs_1 = require("fs"); const path_1 = require("path"); const util_1 = require("util"); const terser_1 = require("terser"); const rollup_1 = require("rollup"); exports.readFileAsync = (0, util_1.promisify)(fs_1.readFile); async function deployQCP(conn, sourcedir, noCodeMinification) { try { const [rolledUpCode, qcp] = await Promise.all([rollupCode(sourcedir), getCustomScript(sourcedir)]); qcp['SBQQ__Code__c'] = noCodeMinification ? rolledUpCode : await minifyCode(rolledUpCode); await fetchQPCId(conn, qcp); const dmlResult = await upsertQuoteCalculatorPlugin(conn, qcp); return { isSuccess: dmlResult.success, recordId: dmlResult.id, error: dmlResult.success ? undefined : dmlResult.errors[0].message, }; } catch (err) { return { isSuccess: false, error: err instanceof Error ? err.message : String(err), }; } } exports.deployQCP = deployQCP; async function rollupCode(path) { const bundle = await (0, rollup_1.rollup)({ input: `${path}/main.js`, output: { format: 'esm' }, }); const { output } = await bundle.generate({ format: 'esm' }); const code = output[0].code; return code; } async function minifyCode(code) { // eslint-disable-next-line @typescript-eslint/no-unsafe-call const minified = await (0, terser_1.minify)(code); return minified.code; } async function getCustomScript(path) { const result = await (0, exports.readFileAsync)(`${createAbsolutePath(path)}/config.json`, 'utf8'); const customScriptUnFormatted = JSON.parse(result); const customScript = formatCustomScript(customScriptUnFormatted); return customScript; } exports.getCustomScript = getCustomScript; function formatCustomScript(customScript) { const formattedCustomScript = {}; const fieldsToReplace = new Set([ 'SBQQ__GroupFields__c', 'SBQQ__ConsumptionScheduleFields__c', 'SBQQ__ConsumptionRateFields__c', 'SBQQ__QuoteLineFields__c', 'SBQQ__QuoteFields__c', ]); const fieldsToCopy = new Set(['Name']); Object.keys(customScript).forEach((key) => { if (fieldsToReplace.has(key)) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call formattedCustomScript[key] = customScript[key].join('\r\n'); } else if (fieldsToCopy.has(key)) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment formattedCustomScript[key] = customScript[key]; } }); return formattedCustomScript; } function createAbsolutePath(path) { if ((0, path_1.isAbsolute)(path)) { // The user input is already an absolute path return path; } else { // The user input is a relative path const absolutePath = (0, path_1.resolve)(process.cwd(), path); return absolutePath; } } async function fetchQPCId(conn, qcp) { const result = await conn.query(`SELECT Id FROM SBQQ__CustomScript__c WHERE Name = '${qcp.Name}' ORDER BY CreatedDate DESC`); if (result?.records && result.records.length > 0) { qcp.Id = result.records[0].Id; } } async function upsertQuoteCalculatorPlugin(conn, qcp) { let result; if (!qcp.Id) { result = await conn.insert('SBQQ__CustomScript__c', qcp); } else { const res = await conn.update('SBQQ__CustomScript__c', [ qcp, ]); if (res.length > 0) { result = res[0]; } } return result; } //# sourceMappingURL=HandleDeployQCP.js.map