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.
Files changed (60) hide show
  1. package/bundle/bundle.es7.js +26 -29
  2. package/data/signatures.json +82 -4
  3. package/dist/addon/table.js +9 -3
  4. package/dist/addon/token.js +73 -90
  5. package/dist/addon/transclude.js +3 -3
  6. package/dist/base.d.mts +10 -2
  7. package/dist/base.d.ts +10 -2
  8. package/dist/index.d.ts +0 -1
  9. package/dist/index.js +6 -6
  10. package/dist/lib/attributes.d.ts +24 -0
  11. package/dist/lib/attributes.js +67 -0
  12. package/dist/lib/element.js +9 -9
  13. package/dist/lib/lsp.d.ts +16 -2
  14. package/dist/lib/lsp.js +159 -148
  15. package/dist/lib/node.d.ts +2 -0
  16. package/dist/lib/node.js +93 -50
  17. package/dist/lib/ranges.d.ts +4 -8
  18. package/dist/lib/ranges.js +12 -19
  19. package/dist/lib/text.js +6 -4
  20. package/dist/lib/title.js +3 -1
  21. package/dist/parser/braces.js +3 -3
  22. package/dist/parser/commentAndExt.js +2 -3
  23. package/dist/parser/hrAndDoubleUnderscore.js +1 -2
  24. package/dist/parser/links.js +1 -2
  25. package/dist/parser/magicLinks.js +4 -2
  26. package/dist/parser/selector.js +37 -30
  27. package/dist/src/html.js +6 -4
  28. package/dist/src/imageParameter.js +12 -13
  29. package/dist/src/imagemap.js +3 -3
  30. package/dist/src/index.d.ts +23 -19
  31. package/dist/src/index.js +74 -48
  32. package/dist/src/link/file.js +1 -2
  33. package/dist/src/magicLink.js +8 -6
  34. package/dist/src/nested.js +4 -1
  35. package/dist/src/nowiki/index.js +3 -3
  36. package/dist/src/nowiki/list.js +1 -1
  37. package/dist/src/redirect.js +1 -2
  38. package/dist/src/table/index.js +10 -4
  39. package/dist/src/table/td.js +47 -55
  40. package/dist/src/transclude.js +5 -5
  41. package/dist/util/constants.js +2 -0
  42. package/dist/util/debug.js +14 -18
  43. package/dist/util/html.js +2 -0
  44. package/dist/util/lint.js +24 -4
  45. package/dist/util/string.js +9 -5
  46. package/extensions/es7/base.js +22 -4
  47. package/extensions/es7/lint.js +20 -11
  48. package/extensions/typings.d.ts +1 -2
  49. package/package.json +4 -3
  50. package/bundle/bundle.lsp.js +0 -42
  51. package/bundle/bundle.min.js +0 -38
  52. package/extensions/dist/base.js +0 -268
  53. package/extensions/dist/codejar.js +0 -56
  54. package/extensions/dist/editor.js +0 -159
  55. package/extensions/dist/highlight.js +0 -30
  56. package/extensions/dist/lint.js +0 -72
  57. package/extensions/dist/lsp.js +0 -67
  58. package/extensions/dist/test-page.js +0 -89
  59. package/extensions/editor.css +0 -59
  60. package/extensions/ui.css +0 -162
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.undo = exports.compare = exports.typeError = exports.mixin = exports.emptyArray = exports.setChildNodes = exports.isToken = exports.Shadow = void 0;
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 childNodes = [...parent.childNodes], removed = childNodes.splice(position, deleteCount, ...inserted);
41
- parent.setAttribute('childNodes', childNodes);
42
- for (const node of inserted) {
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
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
+ /* NOT FOR BROWSER */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.font = exports.html = exports.getCommon = void 0;
5
+ /* NOT FOR BROWSER END */
4
6
  /**
5
7
  * get common prefix length
6
8
  * @param prefix
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, width, height) => ({
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, offsetWidth, offsetHeight);
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;
@@ -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
- ? require('entities').decodeHTMLStrict(str).replace(/\xA0/gu, ' ')
43
- : /* istanbul ignore next */ decodeHtmlBasic(str);
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)));
@@ -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.1', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
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
- const id = Math.floor(qid);
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,
@@ -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
- var _a;
34
- __classPrivateFieldSet(this, _Linter_wikitext, wikitext, "f");
35
- __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");
36
- return __classPrivateFieldGet(this, _Linter_running, "f");
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)).map(({ startLine, startCol, endLine, endCol, severity, message, rule }) => ({
63
- source: `WikiLint(${rule})`,
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");
@@ -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
- id: number;
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.1",
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",