-
Notifications
You must be signed in to change notification settings - Fork 7
/
hookSystem.ts
30 lines (28 loc) · 970 Bytes
/
hookSystem.ts
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
28
29
30
import type { Logger } from '@wener/utils';
import { createChildLogger } from '@wener/utils';
import { instantiatePackageProtocol } from '../hooks/instantiatePackageProtocol';
import { resolveBareSpecifier } from '../hooks/resolveBareSpecifier';
import type { SystemJS } from '../utils/getGlobalSystem';
export type SystemHookOption = [hook: (o: { System: SystemJS; logger: Logger }) => void, opts?: object];
export function hookSystem({
System,
logger,
hooks = true,
}: {
System: SystemJS;
logger: Logger;
hooks: boolean | Array<SystemHookOption>;
}) {
if (!hooks) {
return;
}
if (Array.isArray(hooks)) {
for (const [hook, opts] of hooks) {
hook({ System, logger, ...opts });
}
return;
}
// default hooks
resolveBareSpecifier({ System, logger: createChildLogger(logger, { c: 'resolveBareSpecifier' }) });
instantiatePackageProtocol({ System, logger: createChildLogger(logger, { c: 'instantiatePackageProtocol' }) });
}