in packages/ice/src/esbuild/scan.ts [75:163]
setup(build) {
// external urls
build.onResolve({ filter: httpUrlRE }, ({ path }) => ({
path,
external: true,
}));
// data urls
build.onResolve({ filter: dataUrlRE }, ({ path }) => ({
path,
external: true,
}));
// css & json
build.onResolve(
{
filter: /\.(css|less|sass|scss|styl|stylus|pcss|postcss|json)$/,
}, ({ path }) => ({
path,
external: true,
}),
);
build.onResolve(
{
filter: new RegExp(`\\.(${ASSET_TYPES.join('|')})$`),
}, ({ path }) => ({
path,
external: true,
}),
);
build.onResolve({ filter: /.*/ }, async ({ path: id, importer }) => {
if (
// match exclude
exclude?.some((dep) => dep === id || id.startsWith(`${dep}/`)) ||
// already recorded
deps[id]
) {
return {
path: id,
external: true,
};
}
const resolved = resolve(id, importer);
if (resolved) {
// aliased dependencies
if (!path.isAbsolute(resolved) && !resolved.startsWith('.') && !id.startsWith('.')) {
const resolvePath = require.resolve(resolved, { paths: [path.dirname(importer)] });
const { pkgPath } = getPackageData(resolvePath);
deps[id] = {
name: resolved,
pkgPath,
};
return {
path: resolved,
external: true,
};
// deal with aliased absolute path
} else if (id !== resolved && path.isAbsolute(resolved)) {
if (
// dependencies with absolute path
resolved.includes('node_modules') ||
// in case of package with system link when development
!formatPath(resolved).includes(formatPath(rootDir))) {
const { name, pkgPath } = getPackageData(resolved);
deps[id] = {
name,
pkgPath,
};
return {
path: resolved,
external: true,
};
}
}
}
if (ignores.includes(id)) {
// alias set to be false
return {
path: id,
namespace: 'EMPTY',
};
}
});
build.onLoad({ filter: /.*/, namespace: 'EMPTY' }, () => ({ contents: '' }));
},