wikiparser-node 1.33.0 → 1.34.0

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 (53) hide show
  1. package/README.md +3 -0
  2. package/bundle/bundle-es8.min.js +27 -27
  3. package/bundle/bundle-lsp.min.js +30 -30
  4. package/bundle/bundle.min.js +16 -16
  5. package/dist/base.d.mts +1 -1
  6. package/dist/base.d.ts +1 -1
  7. package/dist/base.js +1 -0
  8. package/dist/base.mjs +1 -0
  9. package/dist/bin/config.js +1 -1
  10. package/dist/index.js +8 -7
  11. package/dist/internal.d.ts +3 -0
  12. package/dist/lib/lintConfig.js +6 -0
  13. package/dist/lib/lsp.js +13 -3
  14. package/dist/lib/node.js +3 -11
  15. package/dist/lib/text.js +14 -14
  16. package/dist/lib/title.js +8 -10
  17. package/dist/src/attribute.d.ts +0 -1
  18. package/dist/src/attribute.js +4 -5
  19. package/dist/src/attributes.d.ts +0 -1
  20. package/dist/src/attributes.js +3 -4
  21. package/dist/src/converterFlags.js +5 -7
  22. package/dist/src/link/base.js +2 -1
  23. package/dist/src/link/categorytree.d.ts +1 -3
  24. package/dist/src/link/categorytree.js +11 -0
  25. package/dist/src/multiLine/imagemap.js +1 -1
  26. package/dist/src/nowiki/index.d.ts +1 -1
  27. package/dist/src/nowiki/index.js +59 -13
  28. package/dist/src/nowiki/list.d.ts +0 -1
  29. package/dist/src/nowiki/list.js +1 -0
  30. package/dist/src/nowiki/noinclude.d.ts +0 -1
  31. package/dist/src/nowiki/noinclude.js +1 -0
  32. package/dist/src/nowiki/quote.d.ts +0 -4
  33. package/dist/src/nowiki/quote.js +4 -0
  34. package/dist/src/parameter.js +5 -7
  35. package/dist/src/table/base.d.ts +0 -1
  36. package/dist/src/table/base.js +7 -8
  37. package/dist/src/table/index.d.ts +0 -1
  38. package/dist/src/table/index.js +1 -0
  39. package/dist/src/table/td.d.ts +0 -1
  40. package/dist/src/table/td.js +1 -0
  41. package/dist/src/tag/html.d.ts +0 -1
  42. package/dist/src/tag/html.js +1 -0
  43. package/dist/src/tag/tvar.d.ts +0 -1
  44. package/dist/src/tag/tvar.js +1 -0
  45. package/dist/src/tagPair/index.d.ts +4 -2
  46. package/dist/src/tagPair/index.js +47 -7
  47. package/dist/src/tagPair/translate.d.ts +1 -1
  48. package/dist/src/tagPair/translate.js +3 -1
  49. package/dist/src/transclude.js +2 -2
  50. package/dist/util/diff.js +6 -17
  51. package/extensions/dist/base.js +1 -1
  52. package/logo.png +0 -0
  53. package/package.json +3 -3
@@ -307,6 +307,7 @@ let TableToken = (() => {
307
307
  }
308
308
  return super.insertAt(token, i);
309
309
  }
310
+ /** @private */
310
311
  getRowCount() {
311
312
  return super.getRowCount()
312
313
  + this.childNodes.filter(child => child.is('tr') && child.getRowCount()).length;
@@ -51,7 +51,6 @@ export declare abstract class TdToken extends TableBaseToken {
51
51
  */
52
52
  isIndependent(): boolean;
53
53
  getAttr<T extends string>(key: T): TdAttrGetter<T>;
54
- escape(): void;
55
54
  cloneNode(): this;
56
55
  /**
57
56
  * Move to a new line
@@ -261,6 +261,7 @@ let TdToken = (() => {
261
261
  return (key === 'rowspan' || key === 'colspan' ? parseInt(value) || 1 : value);
262
262
  }
263
263
  }
264
+ /** @private */
264
265
  escape() {
265
266
  LSP: {
266
267
  super.escape();
@@ -48,5 +48,4 @@ export declare abstract class HtmlToken extends TagToken {
48
48
  * @throws `Error` 无法修复无效自封闭标签
49
49
  */
50
50
  fix(): void;
51
- getRange(): AstRange | undefined;
52
51
  }
@@ -339,6 +339,7 @@ let HtmlToken = (() => {
339
339
  }
340
340
  return result;
341
341
  }
342
+ /** @private */
342
343
  getRange() {
343
344
  const { selfClosing, name } = this, { html: [, selfClosingTags, voidTags] } = this.getAttribute('config');
344
345
  if (voidTags.includes(name) || selfClosing && selfClosingTags.includes(name)) {
@@ -23,7 +23,6 @@ export declare abstract class TvarToken extends TagToken {
23
23
  * @param closing 是否闭合
24
24
  */
25
25
  constructor(tag: string, attr: string, closing: boolean, config?: Config, accum?: Token[]);
26
- afterBuild(): void;
27
26
  cloneNode(): this;
28
27
  /**
29
28
  * Set the tvar name.
@@ -117,6 +117,7 @@ let TvarToken = (() => {
117
117
  }
118
118
  this.setAttribute('name', name);
119
119
  }
120
+ /** @private */
120
121
  afterBuild() {
121
122
  super.afterBuild();
122
123
  if (!this.closing) {
@@ -1,5 +1,5 @@
1
1
  import { Token } from '../index';
2
- import type { Config } from '../../base';
2
+ import type { Config, AST } from '../../base';
3
3
  import type { AstNodes } from '../../internal';
4
4
  /**
5
5
  * Paired tags
@@ -10,13 +10,15 @@ export declare abstract class TagPairToken extends Token {
10
10
  #private;
11
11
  readonly name: string;
12
12
  closed: boolean;
13
- selfClosing: boolean;
14
13
  abstract get type(): 'ext' | 'include' | 'translate';
15
14
  readonly childNodes: readonly [AstNodes, AstNodes];
16
15
  abstract get firstChild(): AstNodes;
17
16
  abstract get lastChild(): AstNodes;
18
17
  /** inner wikitext / 内部wikitext */
19
18
  get innerText(): string | undefined;
19
+ /** whether to be self-closing / 是否自封闭 */
20
+ get selfClosing(): boolean;
21
+ set selfClosing(value: boolean);
20
22
  /**
21
23
  * @param name 标签名
22
24
  * @param attr 标签属性
@@ -43,6 +43,7 @@ const noEscape_1 = require("../../mixin/noEscape");
43
43
  const index_1 = require("../index");
44
44
  /* NOT FOR BROWSER */
45
45
  const constants_1 = require("../../util/constants");
46
+ const debug_1 = require("../../util/debug");
46
47
  const fixed_1 = require("../../mixin/fixed");
47
48
  const index_2 = __importDefault(require("../../index"));
48
49
  /* NOT FOR BROWSER END */
@@ -67,12 +68,30 @@ let TagPairToken = (() => {
67
68
  __runInitializers(_classThis, _classExtraInitializers);
68
69
  }
69
70
  #tags;
71
+ #selfClosing;
70
72
  closed;
71
- selfClosing;
72
73
  /** inner wikitext / 内部wikitext */
73
74
  get innerText() {
74
- return this.selfClosing ? undefined : this.lastChild.text();
75
+ return this.#selfClosing ? undefined : this.lastChild.text();
75
76
  }
77
+ /** whether to be self-closing / 是否自封闭 */
78
+ get selfClosing() {
79
+ return this.#selfClosing;
80
+ }
81
+ /* NOT FOR BROWSER */
82
+ set selfClosing(value) {
83
+ this.#selfClosing = Boolean(value);
84
+ if (value) {
85
+ const { lastChild } = this;
86
+ if (lastChild.type === 'text') {
87
+ lastChild.replaceData('');
88
+ }
89
+ else {
90
+ lastChild.replaceChildren();
91
+ }
92
+ }
93
+ }
94
+ /* NOT FOR BROWSER END */
76
95
  /**
77
96
  * @param name 标签名
78
97
  * @param attr 标签属性
@@ -84,14 +103,14 @@ let TagPairToken = (() => {
84
103
  this.setAttribute('name', name.toLowerCase());
85
104
  this.#tags = [name, closed || name];
86
105
  this.closed = closed !== '';
87
- this.selfClosing = closed === undefined;
106
+ this.#selfClosing = closed === undefined;
88
107
  this.append(attr, inner);
89
108
  const index = typeof attr === 'string' ? -1 : accum.indexOf(attr);
90
109
  accum.splice(index === -1 ? Infinity : index, 0, this);
91
110
  }
92
111
  /** @private */
93
112
  toString(skip) {
94
- const { selfClosing, firstChild, lastChild,
113
+ const { firstChild, lastChild,
95
114
  /* NOT FOR BROWSER */
96
115
  nextSibling, name, closed, type, } = this, [opening, closing] = this.#tags;
97
116
  /* NOT FOR BROWSER */
@@ -101,14 +120,14 @@ let TagPairToken = (() => {
101
120
  this.closed = true;
102
121
  }
103
122
  /* NOT FOR BROWSER END */
104
- return selfClosing
123
+ return this.#selfClosing
105
124
  ? `<${opening}${firstChild.toString(skip)}/>`
106
125
  : `<${opening}${firstChild.toString(skip)}>${lastChild.toString(skip)}${this.closed ? `</${closing}>` : ''}`;
107
126
  }
108
127
  /** @private */
109
128
  text() {
110
129
  const [opening, closing] = this.#tags;
111
- return this.selfClosing
130
+ return this.#selfClosing
112
131
  ? `<${opening}${this.firstChild.text()}/>`
113
132
  : `<${opening}${super.text('>')}${this.closed ? `</${closing}>` : ''}`;
114
133
  }
@@ -125,11 +144,32 @@ let TagPairToken = (() => {
125
144
  print() {
126
145
  PRINT: {
127
146
  const [opening, closing] = this.#tags;
128
- return super.print(this.selfClosing
147
+ return super.print(this.#selfClosing
129
148
  ? { pre: `&lt;${opening}`, post: '/&gt;' }
130
149
  : { pre: `&lt;${opening}`, sep: '&gt;', post: this.closed ? `&lt;/${closing}&gt;` : '' });
131
150
  }
132
151
  }
152
+ /** @private */
153
+ json(_, start = this.getAbsoluteIndex()) {
154
+ LSP: {
155
+ const json = super.json(undefined, start);
156
+ json['selfClosing'] = this.#selfClosing;
157
+ return json;
158
+ }
159
+ }
160
+ /* NOT FOR BROWSER */
161
+ /** @private */
162
+ afterBuild() {
163
+ super.afterBuild();
164
+ const /** @implements */ tagPairListener = (e, data) => {
165
+ /* istanbul ignore if */
166
+ if (this.#selfClosing && e.prevTarget === this.lastChild && this.lastChild.toString()) {
167
+ (0, debug_1.undo)(e, data);
168
+ throw new Error('A self-closing tag does not have inner content.');
169
+ }
170
+ };
171
+ this.addEventListener(['insert', 'replace', 'text'], tagPairListener);
172
+ }
133
173
  };
134
174
  return TagPairToken = _classThis;
135
175
  })();
@@ -11,7 +11,6 @@ export declare abstract class TranslateToken extends TagPairToken implements Omi
11
11
  #private;
12
12
  name: 'translate';
13
13
  closed: true;
14
- selfClosing: false;
15
14
  readonly childNodes: readonly [SyntaxToken, Token];
16
15
  abstract get firstChild(): SyntaxToken;
17
16
  abstract get lastChild(): Token;
@@ -20,6 +19,7 @@ export declare abstract class TranslateToken extends TagPairToken implements Omi
20
19
  abstract get firstElementChild(): SyntaxToken;
21
20
  abstract get lastElementChild(): Token;
22
21
  get type(): 'translate';
22
+ get selfClosing(): false;
23
23
  /**
24
24
  * @param attr 标签属性
25
25
  * @param inner 内部wikitext
@@ -64,6 +64,9 @@ let TranslateToken = (() => {
64
64
  get type() {
65
65
  return 'translate';
66
66
  }
67
+ get selfClosing() {
68
+ return false;
69
+ }
67
70
  /**
68
71
  * @param attr 标签属性
69
72
  * @param inner 内部wikitext
@@ -89,7 +92,6 @@ let TranslateToken = (() => {
89
92
  __runInitializers(this, _instanceExtraInitializers);
90
93
  /* PRINT ONLY */
91
94
  this.seal('closed', true);
92
- this.seal('selfClosing', true);
93
95
  }
94
96
  /** @private */
95
97
  toString(skip) {
@@ -274,8 +274,8 @@ let TranscludeToken = (() => {
274
274
  * 当继续bubble到`template`时,处理并删除`oldKey`和`newKey`。
275
275
  * @implements
276
276
  */
277
- const transcludeListener = (e, data) => {
278
- const { prevTarget } = e, { oldKey, newKey } = data;
277
+ const transcludeListener = ({ prevTarget }, data) => {
278
+ const { oldKey, newKey } = data;
279
279
  if (typeof oldKey === 'string') {
280
280
  delete data.oldKey;
281
281
  delete data.newKey;
package/dist/util/diff.js CHANGED
@@ -3,8 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.info = exports.error = exports.loadChalk = exports.diff = exports.cmd = void 0;
6
+ exports.info = exports.error = exports.diff = exports.cmd = void 0;
7
7
  const promises_1 = __importDefault(require("fs/promises"));
8
+ const util_1 = __importDefault(require("util"));
8
9
  const child_process_1 = require("child_process");
9
10
  /* istanbul ignore next */
10
11
  process.on('unhandledRejection', e => {
@@ -76,29 +77,17 @@ const diff = async (oldStr, newStr, uid) => {
76
77
  await Promise.allSettled([promises_1.default.unlink(oldFile), promises_1.default.unlink(newFile)]);
77
78
  };
78
79
  exports.diff = diff;
79
- let chalk;
80
- /* istanbul ignore next */
81
- const loadChalk = () => {
82
- if (chalk === undefined) {
83
- try {
84
- chalk = require('chalk');
85
- }
86
- catch {
87
- chalk = null;
88
- }
89
- }
90
- return chalk;
91
- };
92
- exports.loadChalk = loadChalk;
93
80
  /* istanbul ignore next */
94
81
  /** @implements */
95
82
  const error = (msg, ...args) => {
96
- console.error((0, exports.loadChalk)()?.red(msg) ?? msg, ...args);
83
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
84
+ console.error(util_1.default.styleText?.('red', msg) ?? msg, ...args);
97
85
  };
98
86
  exports.error = error;
99
87
  /* istanbul ignore next */
100
88
  /** @implements */
101
89
  const info = (msg, ...args) => {
102
- console.info((0, exports.loadChalk)()?.green(msg) ?? msg, ...args);
90
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
91
+ console.info(util_1.default.styleText?.('green', msg) ?? msg, ...args);
103
92
  };
104
93
  exports.info = info;
@@ -1,6 +1,6 @@
1
1
  (() => {
2
2
  var _a;
3
- const version = '1.33.0', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
3
+ const version = '1.34.0', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
4
4
  ? src.replace(file, '')
5
5
  : `https://testingcf.jsdelivr.net/npm/wikiparser-node@${version}`;
6
6
  const workerJS = () => {
package/logo.png ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wikiparser-node",
3
- "version": "1.33.0",
3
+ "version": "1.34.0",
4
4
  "description": "A Node.js parser for MediaWiki markup with AST",
5
5
  "keywords": [
6
6
  "mediawiki",
@@ -23,6 +23,7 @@
23
23
  "!/extensions/*-page.css",
24
24
  "/printed/README",
25
25
  "/errors/README",
26
+ "/logo.png",
26
27
  "/config/",
27
28
  "!/config/mediawikiwiki.json",
28
29
  "!/config/testwiki.json",
@@ -81,13 +82,12 @@
81
82
  },
82
83
  "dependencies": {
83
84
  "@bhsd/cm-util": "^0.1.0",
84
- "@bhsd/common": "^1.0.1",
85
+ "@bhsd/common": "^1.2.0",
85
86
  "@bhsd/stylelint-util": "^0.1.0",
86
87
  "binary-search": "^1.3.6",
87
88
  "vscode-languageserver-types": "^3.17.5"
88
89
  },
89
90
  "optionalDependencies": {
90
- "chalk": "^4.1.2",
91
91
  "color-name": "^2.0.0",
92
92
  "entities": "^7.0.0",
93
93
  "mathoid-texvcjs": "^0.6.0",