UNPKG

sb-babel-cli

Version:
85 lines (84 loc) 3.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const del_1 = __importDefault(require("del")); const path_1 = __importDefault(require("path")); const p_map_1 = __importDefault(require("p-map")); const make_dir_1 = __importDefault(require("make-dir")); const anymatch_1 = __importDefault(require("anymatch")); const helpers_1 = require("./helpers"); async function iterate({ config, callback, getOutputFilePath, }) { const contents = await fs_1.default.promises.readdir(config.sourceDirectory); let outputStats = null; let outputDirectoryExists = false; try { outputStats = await fs_1.default.promises.stat(config.outputDirectory); } catch (_) { /* No Op */ } if (outputStats) { if (outputStats.isDirectory()) { outputDirectoryExists = true; } else { await del_1.default(config.outputDirectory); outputStats = null; } } const outputContents = outputStats ? await fs_1.default.promises.readdir(config.outputDirectory) : []; if (!config.keepExtraFiles) { let whitelist = contents.map(getOutputFilePath); if (config.sourceMaps === true) { whitelist = whitelist.concat(whitelist.map((item) => `${item}.map`)); } const filesToDelete = outputContents .filter((item) => !whitelist.includes(item)) .map((item) => path_1.default.resolve(config.outputDirectory, item)); await Promise.all(filesToDelete.map((item) => del_1.default(item))); } await p_map_1.default(contents, async function (itemName) { const filePath = path_1.default.join(config.sourceDirectory, itemName); const stats = await fs_1.default.promises.lstat(filePath); if (stats.isSymbolicLink()) { // NOTE: We ignore symlinks return; } if (config.ignored && (anymatch_1.default(config.ignored, itemName) || anymatch_1.default(config.ignored, helpers_1.posixifyPath(filePath)) || anymatch_1.default(config.ignored, helpers_1.posixifyPath(path_1.default.relative(config.rootDirectory, filePath)))) // TODO: Convert above to posix ) { // NOTE: We ignore ignored files return; } if (stats.isFile()) { const foundExt = config.extensions.find((ext) => itemName.endsWith(ext)); if (!foundExt) { return; } if (!outputDirectoryExists) { await make_dir_1.default(config.outputDirectory); outputDirectoryExists = true; } const outputFile = getOutputFilePath(path_1.default.join(config.outputDirectory, itemName)); await callback(filePath, outputFile, stats); } else if (stats.isDirectory()) { await iterate({ config: { ...config, sourceDirectory: path_1.default.join(config.sourceDirectory, itemName), outputDirectory: path_1.default.join(config.outputDirectory, itemName), }, getOutputFilePath, callback, }); } }); } exports.default = iterate;