netsuite-companion
Version:
NetSuite account customizations scaffold
107 lines (102 loc) • 4.13 kB
text/typescript
import fs from "fs";
import path from "path";
import paths from "../paths.js";
import handlebars from "handlebars";
import {storage} from "./storage.js";
import moment from "moment";
const cleanTemplate = (template: string): string => {
return template
.replace(/'/g, "'")
.replace(/&/g, "&");
}
export const printTemplate = (fileName: string, outPath: string, outFile: string, answer: any, defaults = false): Promise<unknown> => {
return new Promise(resolve => {
if (defaults) {
answer.project = process.env.PROJECT_NAME;
answer.date = moment(new Date()).format("MM/DD/YYYY");
answer.company_name = storage.vendor;
answer.user_name = process.env.USER_NAME;
answer.user_email = process.env.USER_EMAIL;
}
const templatePath = path.join(paths.app.templates, fileName);
if (!fs.existsSync(templatePath)) throw new Error(`Template ${fileName} does not exist`);
const contents = String(fs.readFileSync(templatePath));
const template = handlebars.compile(contents);
fs.existsSync(outPath) || fs.mkdirSync(outPath, {recursive: true});
const writePath = path.join(outPath, outFile);
!fs.existsSync(writePath) ?
fs.writeFile(writePath, cleanTemplate(template(answer)), resolve) :
console.error(`File ${outFile} already exists`);
});
}
export const printScriptTemplate = (fileName: string, outFile: string, answer: any): Promise<unknown> => {
return new Promise(resolve => {
const templatePath = path.join(paths.app.templates, fileName);
if (!fs.existsSync(templatePath)) throw new Error(`Template ${fileName} does not exist`);
const contents = String(fs.readFileSync(templatePath));
const template = handlebars.compile(contents);
const outPath = path.join(paths.client.src.Objects.root, "scripts");
fs.existsSync(outPath) || fs.mkdirSync(outPath, {recursive: true});
const scriptName = `customscript_${outFile}.xml`;
const writePath = path.join(outPath, scriptName);
answer.scriptfile = `/SuiteScripts${answer.path.split("SuiteScripts")[1]}/${outFile}.js`;
answer.scriptfile = answer.scriptfile.replace(/\\/g, "/");
!fs.existsSync(writePath) ?
fs.writeFile(writePath, cleanTemplate(template(answer)), resolve) :
console.error(`File ${scriptName} already exists`);
});
}
export const nsCast = (type: string): string => {
switch (type.toUpperCase()) {
case "TEXT":
return "string";
case "STRING":
return "string";
case "RICHTEXT":
return "string";
case "CLOBTEXT":
return "string";
case "SELECT":
return "string";
case "TEXTAREA":
return "string";
case "CCVALIDFORM":
return "string";
case "EMAIL":
return "string";
case "ADDRESS":
return "string";
case "RTEXT":
return "string";
case "CHECKBOX":
return "boolean";
case "BOOLEAN":
return "boolean";
case "DATE":
return "Date";
case "DATETIME":
return "Date";
case "CURRENCY":
return "number";
case "FLOAT":
return "number";
case "NUMBER":
return "number";
case "INTEGER":
return "number";
case "RATE":
return "number";
default:
console.error(`Unmapped type: ${type}`);
return "string";
}
}
export const formatFileName = (name: string): string => {
name = name.replace(/\s+/g, ' ');
const nArr = name.split(" ");
for (let i = 0; i < nArr.length; i++) {
nArr[i] = nArr[i][0].toUpperCase() + nArr[i].substring(1, nArr[i].length).toLowerCase();
nArr[i] = nArr[i].replace(/[^a-zA-Z0-9]/g, "");
}
return nArr.join("");
}