move-qcp
Version:
Deploy CPQ Quote Calculator Plugin
105 lines • 3.87 kB
JavaScript
;
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