-
Notifications
You must be signed in to change notification settings - Fork 640
/
index.js
55 lines (46 loc) · 1.63 KB
/
index.js
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import loader from "marko/src/taglib/taglib-loader";
import finder from "marko/src/taglib/taglib-finder";
import { registeredTaglibs } from "marko/src/taglib/taglib-lookup";
import TaglibLookup from "marko/src/taglib/taglib-lookup/TaglibLookup";
export { excludeDir, excludePackage } from "marko/src/taglib/taglib-finder";
let lookupCache = Object.create(null);
register(require.resolve("./html/marko.json"), require("./html/marko.json"));
register(require.resolve("./svg/marko.json"), require("./svg/marko.json"));
register(require.resolve("./math/marko.json"), require("./math/marko.json"));
export function buildLookup(dirname, translator) {
if (!translator || !Array.isArray(translator.taglibs)) {
throw new Error(
"@marko/compiler: Invalid translator provided to buildLookup(dir, translator)"
);
}
const taglibsForDir = finder.find(
dirname,
registeredTaglibs.concat(translator.taglibs)
);
const cacheKey = taglibsForDir.map(it => it.id).join();
let lookup = lookupCache[cacheKey];
if (!lookup) {
lookup = lookupCache[cacheKey] = new TaglibLookup();
for (const taglib of taglibsForDir) {
lookup.addTaglib(taglib);
if (taglib.imports) {
for (const importedTaglib of taglib.imports) {
if (!lookup.hasTaglib(importedTaglib)) {
lookup.addTaglib(importedTaglib);
}
}
}
}
}
return lookup;
}
export function register(id, props) {
registeredTaglibs.push(
loader.loadTaglibFromProps(loader.createTaglib(id), props)
);
}
export function clearCaches() {
loader.clearCache();
finder.clearCache();
lookupCache = Object.create(null);
}