@storm-software/build-tools
Version:
A comprehensive set of tools for building and managing projects within a Storm workspace. Includes builders such as rollup, rolldown, tsup, and unbuild, along with various utilities.
96 lines (93 loc) • 2.56 kB
JavaScript
import {
writeDebug
} from "./chunk-RBJMCJYF.mjs";
// src/plugins/ts-resolve.ts
import fs from "node:fs";
import { builtinModules } from "node:module";
import path from "node:path";
import _resolve from "resolve";
var resolveModule = (id, opts) => new Promise((resolve, reject) => {
_resolve(id, opts, (err, res) => {
if (err?.code === "MODULE_NOT_FOUND") {
return resolve(null);
}
if (err) {
return reject(err);
}
resolve(res || null);
});
});
var tsResolvePlugin = ({
resolveOnly,
ignore
} = {}) => {
const resolveExtensions = [".d.ts", ".ts"];
return {
name: `storm:ts-resolve`,
async resolveId(source, importer) {
writeDebug(`ts-resolve - resolveId source: ${source}`);
writeDebug(`ts-resolve - resolveId importer: ${importer}`);
if (!importer) {
return null;
}
if (/\0/.test(source)) {
return null;
}
if (builtinModules.includes(source)) {
return false;
}
if (ignore && ignore(source, importer)) {
writeDebug(`ts-resolve - ignored ${source}`);
return null;
}
if (resolveOnly) {
const shouldResolve = resolveOnly.some((v) => {
if (typeof v === "string") return v === source;
return v.test(source);
});
if (!shouldResolve) {
writeDebug(`ts-resolve - skipped by matching resolveOnly ${source}`);
return null;
}
}
if (path.isAbsolute(source)) {
writeDebug(`ts-resolve - skipped absolute path: ${source}`);
return null;
}
const basedir = importer ? await fs.promises.realpath(path.dirname(importer)) : process.cwd();
if (source[0] === ".") {
return resolveModule(source, {
basedir,
extensions: resolveExtensions
});
}
let id = null;
if (!importer) {
id = await resolveModule(`./${source}`, {
basedir,
extensions: resolveExtensions
});
}
if (!id) {
id = await resolveModule(source, {
basedir,
extensions: resolveExtensions,
packageFilter(pkg) {
pkg.main = pkg.types || pkg.typings;
return pkg;
},
paths: ["node_modules", "node_modules/@types"]
});
}
if (id) {
writeDebug(`ts-resolve - resolved ${source} to ${id}`);
return id;
}
writeDebug(`ts-resolve - mark ${source} as external`);
return false;
}
};
};
export {
tsResolvePlugin
};