This repository has been archived by the owner on Apr 14, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
113 lines (93 loc) · 2.73 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
const { generateFonts } = require('@ramirezcgn/fantasticon');
const NativeModule = require('module');
const JSON5 = require('json5');
const specialValues = {
null: null,
true: true,
false: false,
};
function parseQuery(query) {
if (query.substr(0, 1) !== '?') {
throw new Error(
"A valid query string passed to parseQuery should begin with '?'"
);
}
query = query.substr(1);
if (!query) {
return {};
}
if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {
return JSON5.parse(query);
}
const queryArgs = query.split(/[,&]/g);
const result = {};
queryArgs.forEach((arg) => {
const idx = arg.indexOf('=');
if (idx >= 0) {
let name = arg.substr(0, idx);
let value = decodeURIComponent(arg.substr(idx + 1));
// eslint-disable-next-line no-prototype-builtins
if (specialValues.hasOwnProperty(value)) {
value = specialValues[value];
}
if (name.substr(-2) === '[]') {
name = decodeURIComponent(name.substr(0, name.length - 2));
if (!Array.isArray(result[name])) {
result[name] = [];
}
result[name].push(value);
} else {
name = decodeURIComponent(name);
result[name] = value;
}
} else {
if (arg.substr(0, 1) === '-') {
result[decodeURIComponent(arg.substr(1))] = false;
} else if (arg.substr(0, 1) === '+') {
result[decodeURIComponent(arg.substr(1))] = true;
} else {
result[decodeURIComponent(arg)] = true;
}
}
});
return result;
}
function wpGetOptions(context) {
const query = context.query;
if (typeof query === 'string' && query !== '') {
return parseQuery(context.query);
}
if (!query || typeof query !== 'object') {
// Not object-like queries are not supported.
return {};
}
return query;
}
module.exports = function (content) {
this.cacheable();
const callback = this.async();
const wOptions = wpGetOptions(this) || {};
let rawFontConfig;
try {
rawFontConfig = JSON.parse(content);
} catch (ex) {
const module = new NativeModule(this.resourcePath);
module.paths = NativeModule._nodeModulePaths(this.context);
module.filename = this.resourcePath;
module._compile(content, this.resourcePath);
rawFontConfig = module.exports;
}
const { runOnComplete = false, ...options } = wOptions;
const { onComplete = null, ...rawOptions } = rawFontConfig;
var fontConfig = Object.assign({}, options, rawOptions);
console.log('> Compiling Fonts!');
generateFonts(fontConfig)
.then(() => {
if (runOnComplete && onComplete) {
onComplete(fontConfig);
}
console.log('> Fonts Compiled!');
callback(null, '');
})
.catch((err) => callback(err));
};