UNPKG

@storm-software/esbuild

Version:

A package containing `esbuild` utilities for building Storm Software libraries and applications

95 lines (86 loc) 3.47 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _chunk7DZ3NOLBcjs = require('../chunk-7DZ3NOLB.cjs'); var _chunkJG7MZJV2cjs = require('../chunk-JG7MZJV2.cjs'); // src/plugins/deps-check.ts _chunkJG7MZJV2cjs.init_cjs_shims.call(void 0, ); var _module = require('module'); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var unusedIgnore = [ // these are our dev dependencies /@types\/.*?/, /@typescript-eslint.*?/, /eslint.*?/, "esbuild", "husky", "is-ci", "lint-staged", "prettier", "typescript", "ts-node", "ts-jest", "@swc/core", "@swc/jest", "jest", // these are missing 3rd party deps "spdx-exceptions", "spdx-license-ids", // type-only, so it is not detected "ts-toolbelt", // these are indirectly used by build "buffer" ]; var missingIgnore = [".prisma", "@prisma/client", "ts-toolbelt"]; var depsCheckPlugin = (bundle) => ({ name: "storm:deps-check", setup(build) { const pkgJsonPath = _path2.default.join(process.cwd(), "package.json"); const pkgContents = _chunkJG7MZJV2cjs.__require.call(void 0, pkgJsonPath); const regDependencies = Object.keys(_nullishCoalesce(pkgContents["dependencies"], () => ( {}))); const devDependencies = Object.keys(_nullishCoalesce(pkgContents["devDependencies"], () => ( {}))); const peerDependencies = Object.keys(_nullishCoalesce(pkgContents["peerDependencies"], () => ( {}))); const dependencies = [ ...regDependencies, ...bundle ? devDependencies : [] ]; const collectedDependencies = /* @__PURE__ */ new Set(); const onlyPackages = /^[^./](?!:)|^\.[^./]|^\.\.[^/]/; build.onResolve({ filter: onlyPackages }, (args) => { if (args.importer.includes(process.cwd())) { if (args.path[0] === "@") { const [org, pkg] = args.path.split("/"); collectedDependencies.add(`${org}/${pkg}`); } else { const [pkg] = args.path.split("/"); collectedDependencies.add(pkg); } } return { external: true }; }); build.onEnd(() => { const unusedDependencies = [...dependencies].filter((dep) => { return !collectedDependencies.has(dep) || _module.builtinModules.includes(dep); }); const missingDependencies = [...collectedDependencies].filter((dep) => { return !dependencies.includes(dep) && !_module.builtinModules.includes(dep); }); const filteredUnusedDeps = unusedDependencies.filter((dep) => { return !unusedIgnore.some((pattern) => dep.match(pattern)); }); const filteredMissingDeps = missingDependencies.filter((dep) => { return !missingIgnore.some((pattern) => dep.match(pattern)) && !peerDependencies.includes(dep); }); _chunk7DZ3NOLBcjs.writeWarning.call(void 0, `Unused Dependencies: ${JSON.stringify(filteredUnusedDeps)}` ); _chunk7DZ3NOLBcjs.writeError.call(void 0, `Missing Dependencies: ${JSON.stringify(filteredMissingDeps)}` ); if (filteredMissingDeps.length > 0) { throw new Error(`Missing dependencies detected - please install them: ${JSON.stringify(filteredMissingDeps)} `); } }); } }); exports.depsCheckPlugin = depsCheckPlugin;