UNPKG

@strapi/pack-up

Version:

Simple tools for creating interoperable CJS & ESM packages.

209 lines (208 loc) 7.18 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const chalk = require("chalk"); const esbuild = require("esbuild"); const ora = require("ora"); const os = require("os"); const path = require("path"); const createBuildContext = require("./createBuildContext-Degoc55x.js"); const errors = require("./errors-BG4CMlQA.js"); const files = require("./files-5NgqsTut.js"); const _interopDefault = (e) => e && e.__esModule ? e : { default: e }; const chalk__default = /* @__PURE__ */ _interopDefault(chalk); const esbuild__default = /* @__PURE__ */ _interopDefault(esbuild); const ora__default = /* @__PURE__ */ _interopDefault(ora); const os__default = /* @__PURE__ */ _interopDefault(os); const check$1 = async (opts = {}) => { const { silent, debug, cwd = process.cwd() } = opts; const logger = errors.createLogger({ silent, debug }); const packageJsonLoader = ora__default.default(`Verifying package.json ${os__default.default.EOL}`).start(); const rawPkg = await createBuildContext.loadPkg({ cwd, logger }).catch((err) => { packageJsonLoader.fail(); logger.error(err.message); logger.debug(`Path checked – ${cwd}`); process.exit(1); }); const validatedPkg = await createBuildContext.validatePkg({ pkg: rawPkg }).catch((err) => { packageJsonLoader.fail(); logger.error(err.message); process.exit(1); }); const packageJson = await createBuildContext.validateExportsOrdering({ pkg: validatedPkg, logger }).catch((err) => { packageJsonLoader.fail(); logger.error(err.message); process.exit(1); }); packageJsonLoader.succeed("Verified package.json"); const config = await createBuildContext.loadConfig({ cwd, logger }); const extMap = createBuildContext.getExportExtensionMap(); const ctx = await createBuildContext.createBuildContext({ config: { ...config }, cwd, extMap, logger, pkg: packageJson }).catch((err) => { logger.error(err.message); process.exit(1); }); logger.debug(`Build context: ${os__default.default.EOL}`, ctx); const missingExports = []; const checkingFilePathsLoader = ora__default.default("Checking files for exports").start(); for (const exp of Object.values(ctx.exports)) { if (exp.source && !await files.pathExists(path.resolve(ctx.cwd, exp.source))) { missingExports.push(exp.source); } if (exp.types && !await files.pathExists(path.resolve(ctx.cwd, exp.types))) { missingExports.push(exp.types); } if (exp.require && !await files.pathExists(path.resolve(ctx.cwd, exp.require))) { missingExports.push(exp.require); } if (exp.import && !await files.pathExists(path.resolve(ctx.cwd, exp.import))) { missingExports.push(exp.import); } if (exp.module && !await files.pathExists(path.resolve(ctx.cwd, exp.module))) { missingExports.push(exp.module); } if (exp.default && !await files.pathExists(path.resolve(ctx.cwd, exp.default))) { missingExports.push(exp.default); } if (exp.browser) { if (exp.browser.source && !await files.pathExists(path.resolve(ctx.cwd, exp.browser.source))) { missingExports.push(exp.browser.source); } if (exp.browser.import && !await files.pathExists(path.resolve(ctx.cwd, exp.browser.import))) { missingExports.push(exp.browser.import); } if (exp.browser.require && !await files.pathExists(path.resolve(ctx.cwd, exp.browser.require))) { missingExports.push(exp.browser.require); } } if (exp.node) { if (exp.node.source && !await files.pathExists(path.resolve(ctx.cwd, exp.node.source))) { missingExports.push(exp.node.source); } if (exp.node.import && !await files.pathExists(path.resolve(ctx.cwd, exp.node.import))) { missingExports.push(exp.node.import); } if (exp.node.require && !await files.pathExists(path.resolve(ctx.cwd, exp.node.require))) { missingExports.push(exp.node.require); } if (exp.node.module && !await files.pathExists(path.resolve(ctx.cwd, exp.node.module))) { missingExports.push(exp.node.module); } } } if (missingExports.length) { checkingFilePathsLoader.fail(""); logger.error( [ "Missing files for exports:", ...missingExports.map((str) => ` ${chalk__default.default.blue(str)} -> ${path.resolve(ctx.cwd, str)}`) ].join(os__default.default.EOL) ); process.exit(1); } checkingFilePathsLoader.succeed(""); const exportPaths = Object.values(ctx.exports).reduce( (acc, exp) => { if (exp.require) { acc.require.push(exp.require); } if (exp.import) { acc.import.push(exp.import); } return acc; }, { require: [], import: [] } ); if (exportPaths.import.length > 0) { await resolveExports(exportPaths.import, { cwd: ctx.cwd, external: ctx.external, format: "esm", logger }); } if (exportPaths.require.length > 0) { await resolveExports(exportPaths.require, { cwd: ctx.cwd, external: ctx.external, format: "cjs", logger }); } }; const resolveExports = async (paths, { cwd, format, external, logger }) => { const esbuildLoader = ora__default.default(`Resolving ${format} exports`).start(); const code = paths.map((id) => format === "esm" ? `import('${id}');` : `require('${id}');`).join(os__default.default.EOL); try { const esbuildResult = await esbuild__default.default.build({ bundle: true, external, format, logLevel: "silent", // otherwise output maps to stdout as we're using stdin outfile: "/dev/null", platform: "node", stdin: { contents: code, loader: "js", resolveDir: cwd } }); if (esbuildResult.errors.length > 0) { for (const msg of esbuildResult.errors) { printESBuildMessage(msg, logger.error); } esbuildLoader.fail(); process.exit(1); } const esbuildWarnings = esbuildResult.warnings.filter( (msg) => !(msg.detail || msg.text).includes("does not affect esbuild's own target setting") ); for (const msg of esbuildWarnings) { printESBuildMessage(msg, logger.warn); } esbuildLoader.succeed(); } catch (err) { if (isESBuildError(err)) { for (const msg of err.errors) { printESBuildMessage(msg, logger.error); } } esbuildLoader.fail(); process.exit(1); } }; const isESBuildError = (err) => { return errors.isError(err) && "errors" in err && "warnings" in err; }; const printESBuildMessage = (msg, log) => { if (msg.location) { log( [ `${msg.detail || msg.text}`, `${msg.location.line} | ${msg.location.lineText}`, `in ./${msg.location.file}:${msg.location.line}:${msg.location.column}` ].join(os__default.default.EOL) ); } else { log(msg.detail || msg.text); } }; const check = async (options) => { try { await check$1(options); } catch (err) { errors.handleError(err); } }; exports.check = check; //# sourceMappingURL=check-BacctXYn.js.map