postman-json-chopper
Version:
Splits up large postman collection json file into folders and smaller files and merges them back together
75 lines (74 loc) • 3.2 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.split = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const slug_1 = __importDefault(require("slug"));
function split(inFile, outFile, maxDepth) {
// If maxDepth is not provided, set it to the maximum safe integer value
maxDepth = maxDepth !== undefined ? maxDepth : Number.MAX_SAFE_INTEGER;
// read file to memory
var col;
try {
col = JSON.parse(fs_1.default.readFileSync(inFile).toString());
}
catch (e) {
console.info(e);
process.exit(0);
}
var visitedNames = {};
let outFilePath = path_1.default.parse(outFile);
var itemQueue = [
{
jsonObject: col,
directory: outFilePath.dir,
fileName: outFilePath.name,
depth: 0
}
];
while (itemQueue.length > 0) {
var currentItem = itemQueue.shift();
if (typeof currentItem !== "undefined") {
if (Array.isArray(currentItem.jsonObject.item) && currentItem.depth < maxDepth) {
for (let i = 0; i < currentItem.jsonObject.item.length; i++) {
let subItemJsonObject = currentItem.jsonObject.item[i];
let subItemDirectory = `${currentItem.directory}/${currentItem.fileName}`;
let subItemFileName = `${(0, slug_1.default)(subItemJsonObject["name"]).toLowerCase()}`;
let filePath = `${subItemDirectory}/${subItemFileName}`;
if (filePath in visitedNames) {
subItemFileName = `${subItemFileName}-${visitedNames[filePath]}`;
}
else {
visitedNames[filePath] = 1;
}
visitedNames[filePath]++;
let subItem = {
jsonObject: subItemJsonObject,
directory: subItemDirectory,
fileName: subItemFileName,
depth: currentItem.depth + 1
};
itemQueue.push(subItem);
let replacementReference = { "$ref": `#/${currentItem.fileName}/${subItem.fileName}.json` };
currentItem.jsonObject.item[i] = replacementReference;
}
}
if (!fs_1.default.existsSync(currentItem.directory)) {
fs_1.default.mkdirSync(currentItem.directory);
}
let filePath = `${currentItem.directory}/${currentItem.fileName}.json`;
if (filePath in visitedNames) {
filePath = `${currentItem.directory}/${currentItem.fileName}-${visitedNames[filePath]}.json`;
}
else {
visitedNames[filePath] = 1;
}
visitedNames[filePath]++;
fs_1.default.writeFileSync(filePath, JSON.stringify(currentItem.jsonObject, null, "\t"));
}
}
}
exports.split = split;
;