wikiparser-node 1.16.1 → 1.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/bundle.es7.js +26 -29
- package/data/signatures.json +82 -4
- package/dist/addon/table.js +9 -3
- package/dist/addon/token.js +73 -90
- package/dist/addon/transclude.js +3 -3
- package/dist/base.d.mts +10 -2
- package/dist/base.d.ts +10 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +6 -6
- package/dist/lib/attributes.d.ts +24 -0
- package/dist/lib/attributes.js +67 -0
- package/dist/lib/element.js +9 -9
- package/dist/lib/lsp.d.ts +16 -2
- package/dist/lib/lsp.js +159 -148
- package/dist/lib/node.d.ts +2 -0
- package/dist/lib/node.js +93 -50
- package/dist/lib/ranges.d.ts +4 -8
- package/dist/lib/ranges.js +12 -19
- package/dist/lib/text.js +6 -4
- package/dist/lib/title.js +3 -1
- package/dist/parser/braces.js +3 -3
- package/dist/parser/commentAndExt.js +2 -3
- package/dist/parser/hrAndDoubleUnderscore.js +1 -2
- package/dist/parser/links.js +1 -2
- package/dist/parser/magicLinks.js +4 -2
- package/dist/parser/selector.js +37 -30
- package/dist/src/html.js +6 -4
- package/dist/src/imageParameter.js +12 -13
- package/dist/src/imagemap.js +3 -3
- package/dist/src/index.d.ts +23 -19
- package/dist/src/index.js +74 -48
- package/dist/src/link/file.js +1 -2
- package/dist/src/magicLink.js +8 -6
- package/dist/src/nested.js +4 -1
- package/dist/src/nowiki/index.js +3 -3
- package/dist/src/nowiki/list.js +1 -1
- package/dist/src/redirect.js +1 -2
- package/dist/src/table/index.js +10 -4
- package/dist/src/table/td.js +47 -55
- package/dist/src/transclude.js +5 -5
- package/dist/util/constants.js +2 -0
- package/dist/util/debug.js +14 -18
- package/dist/util/html.js +2 -0
- package/dist/util/lint.js +24 -4
- package/dist/util/string.js +9 -5
- package/extensions/es7/base.js +22 -4
- package/extensions/es7/lint.js +20 -11
- package/extensions/typings.d.ts +1 -2
- package/package.json +4 -3
- package/bundle/bundle.lsp.js +0 -42
- package/bundle/bundle.min.js +0 -38
- package/extensions/dist/base.js +0 -268
- package/extensions/dist/codejar.js +0 -56
- package/extensions/dist/editor.js +0 -159
- package/extensions/dist/highlight.js +0 -30
- package/extensions/dist/lint.js +0 -72
- package/extensions/dist/lsp.js +0 -67
- package/extensions/dist/test-page.js +0 -89
- package/extensions/editor.css +0 -59
- package/extensions/ui.css +0 -162
package/dist/util/debug.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.undo = exports.
|
|
3
|
+
exports.undo = exports.typeError = exports.mixin = exports.setChildNodes = exports.isToken = exports.Shadow = void 0;
|
|
4
|
+
/* NOT FOR BROWSER END */
|
|
4
5
|
exports.Shadow = {
|
|
5
6
|
running: false,
|
|
6
7
|
/** @private */
|
|
@@ -37,12 +38,21 @@ exports.isToken = isToken;
|
|
|
37
38
|
* @param inserted 插入的子节点
|
|
38
39
|
*/
|
|
39
40
|
const setChildNodes = (parent, position, deleteCount, inserted = []) => {
|
|
40
|
-
const
|
|
41
|
-
parent.
|
|
42
|
-
|
|
41
|
+
const Parser = require('../index');
|
|
42
|
+
const { childNodes } = parent, nodes = Object.isFrozen(childNodes)
|
|
43
|
+
|| !Parser.viewOnly
|
|
44
|
+
? [...childNodes]
|
|
45
|
+
: childNodes, removed = nodes.splice(position, deleteCount, ...inserted);
|
|
46
|
+
for (let i = 0; i < inserted.length; i++) {
|
|
47
|
+
const node = inserted[i];
|
|
43
48
|
node.setAttribute('parentNode', parent);
|
|
49
|
+
node.setAttribute('nextSibling', nodes[position + i + 1]);
|
|
50
|
+
node.setAttribute('previousSibling', nodes[position + i - 1]);
|
|
44
51
|
}
|
|
52
|
+
nodes[position - 1]?.setAttribute('nextSibling', nodes[position]);
|
|
53
|
+
nodes[position + inserted.length]?.setAttribute('previousSibling', nodes[position + inserted.length - 1]);
|
|
45
54
|
/* NOT FOR BROWSER */
|
|
55
|
+
parent.setAttribute('childNodes', nodes);
|
|
46
56
|
for (const node of removed) {
|
|
47
57
|
node.setAttribute('parentNode', undefined);
|
|
48
58
|
}
|
|
@@ -50,13 +60,6 @@ const setChildNodes = (parent, position, deleteCount, inserted = []) => {
|
|
|
50
60
|
return removed;
|
|
51
61
|
};
|
|
52
62
|
exports.setChildNodes = setChildNodes;
|
|
53
|
-
/**
|
|
54
|
-
* 生成一个指定长度的空数组
|
|
55
|
-
* @param n 数组长度
|
|
56
|
-
* @param callback 回调函数
|
|
57
|
-
*/
|
|
58
|
-
const emptyArray = (n, callback) => new Array(n).fill(undefined).map((_, i) => callback(i));
|
|
59
|
-
exports.emptyArray = emptyArray;
|
|
60
63
|
/**
|
|
61
64
|
* 同步混入的类名
|
|
62
65
|
* @param target 混入的目标
|
|
@@ -79,13 +82,6 @@ const typeError = ({ name }, method, ...args) => {
|
|
|
79
82
|
};
|
|
80
83
|
exports.typeError = typeError;
|
|
81
84
|
/* NOT FOR BROWSER */
|
|
82
|
-
/**
|
|
83
|
-
* 比较两个数
|
|
84
|
-
* @param a
|
|
85
|
-
* @param b
|
|
86
|
-
*/
|
|
87
|
-
const compare = (a, b) => a - b;
|
|
88
|
-
exports.compare = compare;
|
|
89
85
|
/**
|
|
90
86
|
* 撤销最近一次Mutation
|
|
91
87
|
* @param e 事件
|
package/dist/util/html.js
CHANGED
package/dist/util/lint.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateForSelf = exports.generateForChild = exports.getEndPos = void 0;
|
|
3
|
+
exports.cache = exports.generateForSelf = exports.generateForChild = exports.getEndPos = void 0;
|
|
4
|
+
const debug_1 = require("./debug");
|
|
4
5
|
const rect_1 = require("../lib/rect");
|
|
5
6
|
const index_1 = require("../index");
|
|
6
7
|
/**
|
|
7
8
|
* 计算结束位置
|
|
8
9
|
* @param top 起始行
|
|
9
10
|
* @param left 起始列
|
|
10
|
-
* @param width 宽度
|
|
11
11
|
* @param height 高度
|
|
12
|
+
* @param width 宽度
|
|
12
13
|
*/
|
|
13
|
-
const getEndPos = (top, left,
|
|
14
|
+
const getEndPos = (top, left, height, width) => ({
|
|
14
15
|
line: top + height - 1,
|
|
15
16
|
character: (height === 1 ? left : 0) + width,
|
|
16
17
|
});
|
|
@@ -20,7 +21,7 @@ exports.getEndPos = getEndPos;
|
|
|
20
21
|
* @param func lint函数
|
|
21
22
|
*/
|
|
22
23
|
const factory = (func) => (token, rect, rule, msg, severity = 'error') => {
|
|
23
|
-
const { start } = rect, { top, left } = rect instanceof rect_1.BoundingRect ? rect : new rect_1.BoundingRect(token, start), { offsetHeight, offsetWidth } = token, { startIndex, startLine, startCol } = func(token, start, top, left), { line, character } = (0, exports.getEndPos)(startLine, startCol,
|
|
24
|
+
const { start } = rect, { top, left } = rect instanceof rect_1.BoundingRect ? rect : new rect_1.BoundingRect(token, start), { offsetHeight, offsetWidth } = token, { startIndex, startLine, startCol } = func(token, start, top, left), { line, character } = (0, exports.getEndPos)(startLine, startCol, offsetHeight, offsetWidth);
|
|
24
25
|
return {
|
|
25
26
|
rule,
|
|
26
27
|
message: index_1.default.msg(msg),
|
|
@@ -42,3 +43,22 @@ exports.generateForChild = factory((child, start, line, col) => {
|
|
|
42
43
|
};
|
|
43
44
|
});
|
|
44
45
|
exports.generateForSelf = factory((_, startIndex, startLine, startCol) => ({ startIndex, startLine, startCol }));
|
|
46
|
+
/**
|
|
47
|
+
* 缓存计算结果
|
|
48
|
+
* @param store 缓存的值
|
|
49
|
+
* @param compute 计算新值的函数
|
|
50
|
+
* @param update 更新缓存的函数
|
|
51
|
+
*/
|
|
52
|
+
const cache = (store, compute, update) => {
|
|
53
|
+
if (store
|
|
54
|
+
&& store[0] === debug_1.Shadow.rev
|
|
55
|
+
&& index_1.default.viewOnly) {
|
|
56
|
+
return store[1];
|
|
57
|
+
}
|
|
58
|
+
const result = compute();
|
|
59
|
+
if (index_1.default.viewOnly) {
|
|
60
|
+
update([debug_1.Shadow.rev, result]);
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
exports.cache = cache;
|
package/dist/util/string.js
CHANGED
|
@@ -36,11 +36,15 @@ const decodeHtmlBasic = factory(/&(?:#(\d+|[Xx][\da-fA-F]+)|([lg]t|[LG]T|[lr]bra
|
|
|
36
36
|
* decode HTML entities
|
|
37
37
|
* @param str
|
|
38
38
|
*/
|
|
39
|
-
const decodeHtml = (str) =>
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
41
|
-
typeof process === 'object' && typeof process.versions?.node === 'string'
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
const decodeHtml = (str) => {
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
41
|
+
if (typeof process === 'object' && typeof process.versions?.node === 'string') {
|
|
42
|
+
const { decodeHTMLStrict } = require('entities');
|
|
43
|
+
return decodeHTMLStrict(str).replace(/\xA0/gu, ' ');
|
|
44
|
+
}
|
|
45
|
+
/* istanbul ignore next */
|
|
46
|
+
return decodeHtmlBasic(str);
|
|
47
|
+
};
|
|
44
48
|
exports.decodeHtml = decodeHtml;
|
|
45
49
|
/** decode numbered HTML entities */
|
|
46
50
|
exports.decodeNumber = factory(/&#(\d+|x[\da-f]+);/giu, (_, code) => String.fromCodePoint(Number((/^x/iu.test(code) ? '0' : '') + code)));
|
package/extensions/es7/base.js
CHANGED
|
@@ -9,14 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
var _a;
|
|
12
|
-
const version = '1.16.
|
|
12
|
+
const version = '1.16.2', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
|
|
13
13
|
? src.replace(file, '')
|
|
14
14
|
: `https://testingcf.jsdelivr.net/npm/wikiparser-node@${version}`;
|
|
15
15
|
const workerJS = () => {
|
|
16
16
|
importScripts('$CDN/bundle/bundle.es7.js');
|
|
17
17
|
const entities = { '&': 'amp', '<': 'lt', '>': 'gt' }, lsps = new Map();
|
|
18
|
-
const getLSP = (qid) => {
|
|
19
|
-
|
|
18
|
+
const getLSP = (qid, signature) => {
|
|
19
|
+
let id = Math.floor(qid);
|
|
20
|
+
if (signature) {
|
|
21
|
+
id += 0.5;
|
|
22
|
+
}
|
|
20
23
|
if (lsps.has(id)) {
|
|
21
24
|
return lsps.get(id);
|
|
22
25
|
}
|
|
@@ -76,10 +79,13 @@ const workerJS = () => {
|
|
|
76
79
|
break;
|
|
77
80
|
case 'destroy':
|
|
78
81
|
getLSP(qid).destroy();
|
|
82
|
+
getLSP(qid, true).destroy();
|
|
79
83
|
lsps.delete(qid);
|
|
84
|
+
lsps.delete(qid + 0.5);
|
|
80
85
|
break;
|
|
81
86
|
case 'data':
|
|
82
87
|
getLSP(qid).data = wikitext;
|
|
88
|
+
getLSP(qid, true).data = wikitext;
|
|
83
89
|
break;
|
|
84
90
|
case 'colorPresentations':
|
|
85
91
|
postMessage([qid, getLSP(qid).provideColorPresentations(wikitext)]);
|
|
@@ -101,7 +107,7 @@ const workerJS = () => {
|
|
|
101
107
|
break;
|
|
102
108
|
case 'diagnostics':
|
|
103
109
|
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
104
|
-
postMessage([qid, yield getLSP(qid).provideDiagnostics(wikitext), wikitext]);
|
|
110
|
+
postMessage([qid, yield getLSP(qid).provideDiagnostics(wikitext, include), wikitext]);
|
|
105
111
|
}))();
|
|
106
112
|
break;
|
|
107
113
|
case 'completionItems':
|
|
@@ -133,6 +139,16 @@ const workerJS = () => {
|
|
|
133
139
|
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
134
140
|
postMessage([qid, yield getLSP(qid).provideHover(wikitext, include), wikitext]);
|
|
135
141
|
}))();
|
|
142
|
+
break;
|
|
143
|
+
case 'signatureHelp':
|
|
144
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
145
|
+
postMessage([qid, yield getLSP(qid, true).provideSignatureHelp(wikitext, include), wikitext]);
|
|
146
|
+
}))();
|
|
147
|
+
break;
|
|
148
|
+
case 'inlayHints':
|
|
149
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
150
|
+
postMessage([qid, yield getLSP(qid).provideInlayHints(wikitext), wikitext]);
|
|
151
|
+
}))();
|
|
136
152
|
}
|
|
137
153
|
};
|
|
138
154
|
};
|
|
@@ -152,6 +168,7 @@ const setI18N = (i18n) => {
|
|
|
152
168
|
};
|
|
153
169
|
const setConfig = (config) => {
|
|
154
170
|
worker.postMessage(['setConfig', config]);
|
|
171
|
+
wikiparse.config = config;
|
|
155
172
|
};
|
|
156
173
|
const getFeedback = (command, qid, strict, raw, ...args) => new Promise(resolve => {
|
|
157
174
|
worker.addEventListener('message', getListener(qid, resolve, strict ? raw : undefined));
|
|
@@ -264,6 +281,7 @@ const wikiparse = {
|
|
|
264
281
|
version,
|
|
265
282
|
CDN,
|
|
266
283
|
id: 0,
|
|
284
|
+
config: {},
|
|
267
285
|
setI18N,
|
|
268
286
|
setConfig,
|
|
269
287
|
getConfig,
|
package/extensions/es7/lint.js
CHANGED
|
@@ -19,21 +19,28 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
19
19
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
20
20
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
21
|
};
|
|
22
|
-
var _Linter_instances, _Linter_id, _Linter_wikitext, _Linter_running, _Linter_lint;
|
|
22
|
+
var _Linter_instances, _Linter_id, _Linter_wikitext, _Linter_running, _Linter_done, _Linter_config, _Linter_lint;
|
|
23
23
|
class Linter {
|
|
24
24
|
constructor(include) {
|
|
25
25
|
_Linter_instances.add(this);
|
|
26
26
|
_Linter_id.set(this, void 0);
|
|
27
27
|
_Linter_wikitext.set(this, void 0);
|
|
28
28
|
_Linter_running.set(this, void 0);
|
|
29
|
+
_Linter_done.set(this, void 0);
|
|
30
|
+
_Linter_config.set(this, void 0);
|
|
29
31
|
__classPrivateFieldSet(this, _Linter_id, wikiparse.id++, "f");
|
|
30
32
|
this.include = Boolean(include);
|
|
31
33
|
}
|
|
32
34
|
queue(wikitext) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
var _a;
|
|
37
|
+
if (__classPrivateFieldGet(this, _Linter_wikitext, "f") === wikitext && __classPrivateFieldGet(this, _Linter_config, "f") === wikiparse.config && !__classPrivateFieldGet(this, _Linter_running, "f")) {
|
|
38
|
+
return __classPrivateFieldGet(this, _Linter_done, "f");
|
|
39
|
+
}
|
|
40
|
+
__classPrivateFieldSet(this, _Linter_wikitext, wikitext, "f");
|
|
41
|
+
__classPrivateFieldSet(this, _Linter_running, (_a = __classPrivateFieldGet(this, _Linter_running, "f")) !== null && _a !== void 0 ? _a : __classPrivateFieldGet(this, _Linter_instances, "m", _Linter_lint).call(this, wikitext), "f");
|
|
42
|
+
return __classPrivateFieldGet(this, _Linter_running, "f");
|
|
43
|
+
});
|
|
37
44
|
}
|
|
38
45
|
codemirror(wikitext) {
|
|
39
46
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -43,7 +50,6 @@ class Linter {
|
|
|
43
50
|
from: startIndex,
|
|
44
51
|
to: endIndex,
|
|
45
52
|
severity,
|
|
46
|
-
rule,
|
|
47
53
|
message: `${message} (${rule})`,
|
|
48
54
|
actions: [
|
|
49
55
|
...fix ? [{ name: `Fix: ${fix.desc}`, fix }] : [],
|
|
@@ -59,24 +65,27 @@ class Linter {
|
|
|
59
65
|
}
|
|
60
66
|
monaco(wikitext) {
|
|
61
67
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
return (yield this.queue(wikitext))
|
|
63
|
-
|
|
68
|
+
return (yield this.queue(wikitext))
|
|
69
|
+
.map(({ startLine, startCol, endLine, endCol, severity, message, rule }) => ({
|
|
70
|
+
source: `WikiLint`,
|
|
64
71
|
startLineNumber: startLine + 1,
|
|
65
72
|
startColumn: startCol + 1,
|
|
66
73
|
endLineNumber: endLine + 1,
|
|
67
74
|
endColumn: endCol + 1,
|
|
68
75
|
severity: severity === 'error' ? 8 : 4,
|
|
69
|
-
rule,
|
|
76
|
+
code: rule,
|
|
70
77
|
message,
|
|
71
78
|
}));
|
|
72
79
|
});
|
|
73
80
|
}
|
|
74
81
|
}
|
|
75
|
-
_Linter_id = new WeakMap(), _Linter_wikitext = new WeakMap(), _Linter_running = new WeakMap(), _Linter_instances = new WeakSet(), _Linter_lint = function _Linter_lint(wikitext) {
|
|
82
|
+
_Linter_id = new WeakMap(), _Linter_wikitext = new WeakMap(), _Linter_running = new WeakMap(), _Linter_done = new WeakMap(), _Linter_config = new WeakMap(), _Linter_instances = new WeakSet(), _Linter_lint = function _Linter_lint(wikitext) {
|
|
76
83
|
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
__classPrivateFieldSet(this, _Linter_config, wikiparse.config, "f");
|
|
77
85
|
const { include } = this, errors = yield wikiparse.lint(wikitext, include, __classPrivateFieldGet(this, _Linter_id, "f"));
|
|
78
|
-
if (this.include === include && __classPrivateFieldGet(this, _Linter_wikitext, "f") === wikitext) {
|
|
86
|
+
if (this.include === include && __classPrivateFieldGet(this, _Linter_wikitext, "f") === wikitext && __classPrivateFieldGet(this, _Linter_config, "f") === wikiparse.config) {
|
|
79
87
|
__classPrivateFieldSet(this, _Linter_running, undefined, "f");
|
|
88
|
+
__classPrivateFieldSet(this, _Linter_done, errors, "f");
|
|
80
89
|
return errors;
|
|
81
90
|
}
|
|
82
91
|
__classPrivateFieldSet(this, _Linter_running, __classPrivateFieldGet(this, _Linter_instances, "m", _Linter_lint).call(this, __classPrivateFieldGet(this, _Linter_wikitext, "f")), "f");
|
package/extensions/typings.d.ts
CHANGED
|
@@ -37,8 +37,7 @@ export interface LanguageServiceBase extends Omit<LanguageService, 'provideDocum
|
|
|
37
37
|
export interface wikiparse {
|
|
38
38
|
version: string;
|
|
39
39
|
CDN: string;
|
|
40
|
-
|
|
41
|
-
setI18N: (i18n: Record<string, string>) => void;
|
|
40
|
+
setI18N: (i18n?: Record<string, string>) => void;
|
|
42
41
|
setConfig: (config: Config) => void;
|
|
43
42
|
getConfig: () => Promise<Config>;
|
|
44
43
|
json: (wikitext: string, include: boolean, qid?: number, stage?: number) => Promise<AST>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wikiparser-node",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.2",
|
|
4
4
|
"description": "A Node.js parser for MediaWiki markup with AST",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mediawiki",
|
|
@@ -14,8 +14,6 @@
|
|
|
14
14
|
"license": "GPL-3.0",
|
|
15
15
|
"author": "Bhsd",
|
|
16
16
|
"files": [
|
|
17
|
-
"/errors/README",
|
|
18
|
-
"/printed/README",
|
|
19
17
|
"/bundle/bundle.*.js",
|
|
20
18
|
"/extensions/typings.d.ts",
|
|
21
19
|
"/extensions/*/*.js",
|
|
@@ -26,6 +24,8 @@
|
|
|
26
24
|
"!/extensions/test-page.css",
|
|
27
25
|
"!/extensions/dist/compare.js",
|
|
28
26
|
"!/extensions/compare.css",
|
|
27
|
+
"/printed/README",
|
|
28
|
+
"/errors/README",
|
|
29
29
|
"/config/",
|
|
30
30
|
"/data/",
|
|
31
31
|
"/i18n/",
|
|
@@ -82,6 +82,7 @@
|
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@stylistic/eslint-plugin": "^3.1.0",
|
|
84
84
|
"@stylistic/stylelint-plugin": "^3.1.2",
|
|
85
|
+
"@types/color-rgba": "^2.1.3",
|
|
85
86
|
"@types/mocha": "^10.0.10",
|
|
86
87
|
"@types/node": "^22.13.1",
|
|
87
88
|
"@typescript-eslint/eslint-plugin": "^8.23.0",
|