@storm-software/esbuild
Version:
A package containing `esbuild` utilities for building Storm Software libraries and applications
95 lines (86 loc) • 3.47 kB
JavaScript
;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;