-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathesbuild_plugin_sveltekit_shim_alias.ts
More file actions
27 lines (25 loc) · 965 Bytes
/
esbuild_plugin_sveltekit_shim_alias.ts
File metadata and controls
27 lines (25 loc) · 965 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import type * as esbuild from 'esbuild';
import {escape_regexp} from '@fuzdev/fuz_util/regexp.js';
import {join} from 'node:path';
export interface EsbuildPluginSveltekitShimAliasOptions {
dir?: string;
alias?: Record<string, string>;
}
export const esbuild_plugin_sveltekit_shim_alias = ({
dir = process.cwd(),
alias,
}: EsbuildPluginSveltekitShimAliasOptions): esbuild.Plugin => ({
name: 'sveltekit_shim_alias',
setup: (build) => {
const aliases: Record<string, string> = {$lib: 'src/lib', ...alias};
// Create a Go-compatible regexp
const filter = new RegExp(`^(?:${Object.keys(aliases).map(escape_regexp).join('|')})`);
build.onResolve({filter}, async (args) => {
const {path, ...rest} = args;
// Find which alias prefix matches
const prefix = Object.keys(aliases).find((key) => path.startsWith(key));
if (!prefix) return null;
return build.resolve(join(dir, aliases[prefix] + path.substring(prefix.length)), rest);
});
},
});