-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathloader.js
More file actions
20 lines (16 loc) · 839 Bytes
/
loader.js
File metadata and controls
20 lines (16 loc) · 839 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import {existsSync} from 'fs'
import {basename, dirname, extname, join} from 'path'
import {fileURLToPath} from 'url'
let extensions = ['mjs', 'js', 'json'], resolveDirs = false
let indexFiles = resolveDirs ? extensions.map(e => `index.${e}`) : []
let postfixes = extensions.map(e => `.${e}`).concat(indexFiles.map(p => `/${p}`))
let findPostfix = (specifier, context) => (specifier.endsWith('/') ? indexFiles : postfixes).find(p =>
existsSync(specifier.startsWith('/') ? specifier + p : join(dirname(fileURLToPath(context.parentURL)), specifier + p))
)
let prefixes = ['/', './', '../']
export function resolve(specifier, context, nextResolve) {
let postfix = prefixes.some(p => specifier.startsWith(p))
&& !extname(basename(specifier))
&& findPostfix(specifier, context) || ''
return nextResolve(specifier + postfix)
}