@apillon/sdk
Version:
▶◀ Apillon SDK for NodeJS ▶◀
101 lines • 3.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compressIndexerSourceCode = exports.getIgnorePatterns = exports.createSquidIgnore = void 0;
/* eslint-disable security/detect-non-literal-fs-filename */
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const glob_1 = require("glob");
const ignore_1 = __importDefault(require("ignore"));
const targz_1 = __importDefault(require("targz"));
const apillon_logger_1 = require("../lib/apillon-logger");
function createSquidIgnore(squidDir) {
const ig = (0, ignore_1.default)().add(
// default ignore patterns
['node_modules', '.git']);
const ignoreFilePaths = (0, glob_1.globSync)(['.squidignore', '**/.squidignore'], {
cwd: squidDir,
nodir: true,
posix: true,
});
if (!ignoreFilePaths.length) {
return ig.add([
// squid uploaded archives directory
'/builds',
// squid built files
'/lib',
// IDE files
'.idea',
'.vscode',
]);
}
for (const ignoreFilePath of ignoreFilePaths) {
const raw = node_fs_1.default
.readFileSync(node_path_1.default.resolve(squidDir, ignoreFilePath))
.toString();
const ignoreDir = node_path_1.default.dirname(ignoreFilePath);
const patterns = getIgnorePatterns(ignoreDir, raw);
ig.add(patterns);
}
return ig;
}
exports.createSquidIgnore = createSquidIgnore;
function getIgnorePatterns(ignoreDir, raw) {
const lines = raw.split('\n');
const patterns = [];
for (let line of lines) {
line = line.trim();
if (line.length === 0)
continue;
if (line.startsWith('#'))
continue;
let pattern = line.startsWith('/') || line.startsWith('*/') || line.startsWith('**/')
? line
: `**/${line}`;
pattern =
ignoreDir === '.'
? pattern
: `${toRootPattern(ignoreDir)}${toRootPattern(pattern)}`;
patterns.push(pattern);
}
return patterns;
}
exports.getIgnorePatterns = getIgnorePatterns;
function toRootPattern(pattern) {
return pattern.startsWith('/') ? pattern : `/${pattern}`;
}
function compressIndexerSourceCode(srcDir, destDir) {
const squidIgnore = createSquidIgnore(srcDir);
let filesCount = 0;
node_fs_1.default.mkdirSync(node_path_1.default.dirname(destDir), { recursive: true });
return new Promise((resolve, reject) => {
targz_1.default.compress({
src: srcDir,
dest: destDir,
tar: {
ignore: (name) => {
const relativePath = node_path_1.default.relative(node_path_1.default.resolve(srcDir), node_path_1.default.resolve(name));
if (squidIgnore.ignores(relativePath)) {
apillon_logger_1.ApillonLogger.log(`ignoring ${relativePath}`);
return true;
}
apillon_logger_1.ApillonLogger.log(`adding ${relativePath}`);
filesCount++;
return false;
},
},
}, (err) => {
if (err) {
apillon_logger_1.ApillonLogger.log(err);
reject(`Compression failed. ${err.message ? `Error: ${err.message}` : ''}`);
}
else {
resolve(filesCount);
}
});
});
}
exports.compressIndexerSourceCode = compressIndexerSourceCode;
//# sourceMappingURL=indexer-utils.js.map