wikiparser-node 1.9.0-b → 1.9.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 (169) hide show
  1. package/config/.schema.json +181 -0
  2. package/config/enwiki.json +814 -1
  3. package/config/llwiki.json +35 -1
  4. package/config/moegirl.json +44 -1
  5. package/config/zhwiki.json +466 -1
  6. package/dist/addon/table.js +485 -0
  7. package/dist/addon/token.js +236 -0
  8. package/dist/addon/transclude.js +183 -0
  9. package/dist/base.d.ts +71 -0
  10. package/dist/base.js +39 -0
  11. package/dist/index.d.ts +33 -0
  12. package/dist/index.js +218 -0
  13. package/dist/internal.d.ts +46 -0
  14. package/dist/lib/element.d.ts +129 -0
  15. package/dist/lib/element.js +593 -0
  16. package/dist/lib/node.d.ts +166 -0
  17. package/dist/lib/node.js +480 -0
  18. package/dist/lib/range.d.ts +105 -0
  19. package/dist/lib/range.js +406 -0
  20. package/dist/lib/ranges.d.ts +28 -0
  21. package/dist/lib/ranges.js +126 -0
  22. package/dist/lib/text.d.ts +54 -0
  23. package/dist/lib/text.js +350 -0
  24. package/dist/lib/title.d.ts +40 -0
  25. package/dist/lib/title.js +197 -0
  26. package/dist/mixin/attributesParent.d.ts +49 -0
  27. package/dist/mixin/attributesParent.js +81 -0
  28. package/dist/mixin/fixed.d.ts +5 -0
  29. package/dist/mixin/fixed.js +30 -0
  30. package/dist/mixin/flagsParent.d.ts +41 -0
  31. package/dist/mixin/flagsParent.js +59 -0
  32. package/dist/mixin/hidden.d.ts +4 -0
  33. package/dist/mixin/hidden.js +24 -0
  34. package/dist/mixin/magicLinkParent.d.ts +19 -0
  35. package/dist/mixin/magicLinkParent.js +42 -0
  36. package/dist/mixin/singleLine.d.ts +5 -0
  37. package/dist/mixin/singleLine.js +26 -0
  38. package/dist/mixin/sol.d.ts +5 -0
  39. package/dist/mixin/sol.js +43 -0
  40. package/dist/mixin/syntax.d.ts +8 -0
  41. package/dist/mixin/syntax.js +50 -0
  42. package/dist/parser/braces.js +139 -0
  43. package/dist/parser/commentAndExt.js +89 -0
  44. package/dist/parser/converter.js +40 -0
  45. package/dist/parser/externalLinks.js +44 -0
  46. package/dist/parser/hrAndDoubleUnderscore.js +40 -0
  47. package/dist/parser/html.js +38 -0
  48. package/dist/parser/links.js +99 -0
  49. package/dist/parser/list.js +97 -0
  50. package/dist/parser/magicLinks.js +59 -0
  51. package/dist/parser/quotes.js +67 -0
  52. package/dist/parser/redirect.js +26 -0
  53. package/dist/parser/selector.js +190 -0
  54. package/dist/parser/table.js +123 -0
  55. package/dist/src/arg.d.ts +54 -0
  56. package/dist/src/arg.js +214 -0
  57. package/dist/src/atom.d.ts +12 -0
  58. package/dist/src/atom.js +27 -0
  59. package/dist/src/attribute.d.ts +67 -0
  60. package/dist/src/attribute.js +502 -0
  61. package/dist/src/attributes.d.ts +105 -0
  62. package/dist/src/attributes.js +356 -0
  63. package/dist/src/converter.d.ts +31 -0
  64. package/dist/src/converter.js +134 -0
  65. package/dist/src/converterFlags.d.ts +83 -0
  66. package/dist/src/converterFlags.js +242 -0
  67. package/dist/src/converterRule.d.ts +75 -0
  68. package/dist/src/converterRule.js +209 -0
  69. package/dist/src/extLink.d.ts +39 -0
  70. package/dist/src/extLink.js +191 -0
  71. package/dist/src/gallery.d.ts +50 -0
  72. package/dist/src/gallery.js +139 -0
  73. package/dist/src/heading.d.ts +43 -0
  74. package/dist/src/heading.js +190 -0
  75. package/dist/src/hidden.d.ts +7 -0
  76. package/dist/src/hidden.js +23 -0
  77. package/dist/src/html.d.ts +61 -0
  78. package/dist/src/html.js +358 -0
  79. package/dist/src/imageParameter.d.ts +61 -0
  80. package/dist/src/imageParameter.js +257 -0
  81. package/dist/src/imagemap.d.ts +50 -0
  82. package/dist/src/imagemap.js +144 -0
  83. package/dist/src/imagemapLink.d.ts +31 -0
  84. package/dist/src/imagemapLink.js +93 -0
  85. package/dist/src/index.d.ts +142 -0
  86. package/dist/src/index.js +717 -0
  87. package/dist/src/link/base.d.ts +48 -0
  88. package/dist/src/link/base.js +228 -0
  89. package/dist/src/link/category.d.ts +22 -0
  90. package/dist/src/link/category.js +30 -0
  91. package/dist/src/link/file.d.ts +96 -0
  92. package/dist/src/link/file.js +272 -0
  93. package/dist/src/link/galleryImage.d.ts +30 -0
  94. package/dist/src/link/galleryImage.js +157 -0
  95. package/dist/src/link/index.d.ts +54 -0
  96. package/dist/src/link/index.js +133 -0
  97. package/dist/src/link/redirectTarget.d.ts +49 -0
  98. package/dist/src/link/redirectTarget.js +101 -0
  99. package/dist/src/magicLink.d.ts +59 -0
  100. package/dist/src/magicLink.js +261 -0
  101. package/dist/src/nested.d.ts +41 -0
  102. package/dist/src/nested.js +105 -0
  103. package/dist/src/nowiki/base.d.ts +31 -0
  104. package/dist/src/nowiki/base.js +93 -0
  105. package/dist/src/nowiki/comment.d.ts +21 -0
  106. package/dist/src/nowiki/comment.js +76 -0
  107. package/dist/src/nowiki/dd.d.ts +8 -0
  108. package/dist/src/nowiki/dd.js +24 -0
  109. package/dist/src/nowiki/doubleUnderscore.d.ts +16 -0
  110. package/dist/src/nowiki/doubleUnderscore.js +101 -0
  111. package/dist/src/nowiki/hr.d.ts +5 -0
  112. package/dist/src/nowiki/hr.js +63 -0
  113. package/dist/src/nowiki/index.d.ts +14 -0
  114. package/dist/src/nowiki/index.js +27 -0
  115. package/dist/src/nowiki/list.d.ts +16 -0
  116. package/dist/src/nowiki/list.js +109 -0
  117. package/dist/src/nowiki/listBase.d.ts +5 -0
  118. package/dist/src/nowiki/listBase.js +61 -0
  119. package/dist/src/nowiki/noinclude.d.ts +10 -0
  120. package/dist/src/nowiki/noinclude.js +23 -0
  121. package/dist/src/nowiki/quote.d.ts +17 -0
  122. package/dist/src/nowiki/quote.js +137 -0
  123. package/dist/src/onlyinclude.d.ts +14 -0
  124. package/dist/src/onlyinclude.js +57 -0
  125. package/dist/src/paramTag/index.d.ts +33 -0
  126. package/dist/src/paramTag/index.js +77 -0
  127. package/dist/src/paramTag/inputbox.d.ts +8 -0
  128. package/dist/src/paramTag/inputbox.js +22 -0
  129. package/dist/src/parameter.d.ts +66 -0
  130. package/dist/src/parameter.js +264 -0
  131. package/dist/src/pre.d.ts +29 -0
  132. package/dist/src/pre.js +59 -0
  133. package/dist/src/redirect.d.ts +28 -0
  134. package/dist/src/redirect.js +119 -0
  135. package/dist/src/syntax.d.ts +17 -0
  136. package/dist/src/syntax.js +86 -0
  137. package/dist/src/table/base.d.ts +27 -0
  138. package/dist/src/table/base.js +81 -0
  139. package/dist/src/table/index.d.ts +240 -0
  140. package/dist/src/table/index.js +498 -0
  141. package/dist/src/table/td.d.ts +82 -0
  142. package/dist/src/table/td.js +358 -0
  143. package/dist/src/table/tr.d.ts +32 -0
  144. package/dist/src/table/tr.js +58 -0
  145. package/dist/src/table/trBase.d.ts +51 -0
  146. package/dist/src/table/trBase.js +156 -0
  147. package/dist/src/tagPair/ext.d.ts +30 -0
  148. package/dist/src/tagPair/ext.js +203 -0
  149. package/dist/src/tagPair/include.d.ts +33 -0
  150. package/dist/src/tagPair/include.js +74 -0
  151. package/dist/src/tagPair/index.d.ts +25 -0
  152. package/dist/src/tagPair/index.js +128 -0
  153. package/dist/src/transclude.d.ts +162 -0
  154. package/dist/src/transclude.js +584 -0
  155. package/dist/util/constants.js +27 -0
  156. package/dist/util/debug.js +81 -0
  157. package/dist/util/diff.js +83 -0
  158. package/dist/util/lint.js +31 -0
  159. package/dist/util/string.js +60 -0
  160. package/errors/README +1 -0
  161. package/package.json +19 -29
  162. package/printed/README +1 -0
  163. package/bundle/bundle.min.js +0 -38
  164. package/extensions/dist/base.js +0 -64
  165. package/extensions/dist/editor.js +0 -159
  166. package/extensions/dist/highlight.js +0 -58
  167. package/extensions/dist/lint.js +0 -72
  168. package/extensions/editor.css +0 -64
  169. package/extensions/ui.css +0 -144
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnlyincludeToken = void 0;
4
+ const debug_1 = require("../util/debug");
5
+ const constants_1 = require("../util/constants");
6
+ const index_1 = require("../index");
7
+ const index_2 = require("./index");
8
+ /**
9
+ * 嵌入时的`<onlyinclude>`
10
+ * @classdesc `{childNodes: ...AstText|Token}`
11
+ */
12
+ class OnlyincludeToken extends index_2.Token {
13
+ type = 'onlyinclude';
14
+ /* NOT FOR BROWSER */
15
+ /** 内部wikitext */
16
+ get innerText() {
17
+ return this.text();
18
+ }
19
+ /** @throws `RangeError` 不允许包含`</onlyinclude>` */
20
+ set innerText(text) {
21
+ if (text.includes('</onlyinclude>')) {
22
+ throw new RangeError('不允许包含 "</onlyinclude>"!');
23
+ }
24
+ this.replaceChildren(...index_1.default.parse(text, true, undefined, this.getAttribute('config')).childNodes);
25
+ }
26
+ /* NOT FOR BROWSER END */
27
+ /** @private */
28
+ toString() {
29
+ return `<onlyinclude>${super.toString()}</onlyinclude>`;
30
+ }
31
+ /** @private */
32
+ getAttribute(key) {
33
+ if (key === 'padding') {
34
+ return 13;
35
+ }
36
+ return (key === 'plain') || super.getAttribute(key);
37
+ }
38
+ /** @private */
39
+ print() {
40
+ return super.print({
41
+ pre: '<span class="wpb-ext">&lt;onlyinclude&gt;</span>',
42
+ post: '<span class="wpb-ext">&lt;/onlyinclude&gt;</span>',
43
+ });
44
+ }
45
+ /* NOT FOR BROWSER */
46
+ /** @override */
47
+ cloneNode() {
48
+ const cloned = this.cloneChildNodes();
49
+ return debug_1.Shadow.run(() => {
50
+ const token = new OnlyincludeToken(undefined, this.getAttribute('config'));
51
+ token.append(...cloned);
52
+ return token;
53
+ });
54
+ }
55
+ }
56
+ exports.OnlyincludeToken = OnlyincludeToken;
57
+ constants_1.classes['OnlyincludeToken'] = __filename;
@@ -0,0 +1,33 @@
1
+ import Parser from '../../index';
2
+ import { Token } from '../index';
3
+ import { AtomToken } from '../atom';
4
+ import type { LintError } from '../../base';
5
+ import type { AttributesToken, ExtToken } from '../../internal';
6
+ /**
7
+ * `<dynamicpagelist>`
8
+ * @classdesc `{childNodes: ...AtomToken}`
9
+ */
10
+ export declare abstract class ParamTagToken extends Token {
11
+ readonly type = "ext-inner";
12
+ readonly name: string;
13
+ readonly childNodes: readonly AtomToken[];
14
+ abstract get firstChild(): AtomToken | undefined;
15
+ abstract get lastChild(): AtomToken | undefined;
16
+ abstract get nextSibling(): undefined;
17
+ abstract get previousSibling(): AttributesToken;
18
+ abstract get parentNode(): ExtToken | undefined;
19
+ abstract get children(): AtomToken[];
20
+ abstract get firstElementChild(): AtomToken | undefined;
21
+ abstract get lastElementChild(): AtomToken | undefined;
22
+ abstract get nextElementSibling(): undefined;
23
+ abstract get previousElementSibling(): AttributesToken;
24
+ abstract get parentElement(): ExtToken | undefined;
25
+ /** @class */
26
+ constructor(wikitext?: string, config?: Parser.Config, accum?: Token[], acceptable?: Acceptable);
27
+ /** @override */
28
+ text(): string;
29
+ /** @override */
30
+ cloneNode(this: this & {
31
+ constructor: new (...args: any[]) => unknown;
32
+ }): this;
33
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParamTagToken = void 0;
4
+ const lint_1 = require("../../util/lint");
5
+ const debug_1 = require("../../util/debug");
6
+ const constants_1 = require("../../util/constants");
7
+ const singleLine_1 = require("../../mixin/singleLine");
8
+ const index_1 = require("../../index");
9
+ const index_2 = require("../index");
10
+ const atom_1 = require("../atom");
11
+ /**
12
+ * `<dynamicpagelist>`
13
+ * @classdesc `{childNodes: ...AtomToken}`
14
+ */
15
+ class ParamTagToken extends index_2.Token {
16
+ type = 'ext-inner';
17
+ /* NOT FOR BROWSER END */
18
+ /** @class */
19
+ constructor(wikitext, config = index_1.default.getConfig(), accum = [], acceptable = {}) {
20
+ super(undefined, config, accum, {
21
+ AtomToken: ':',
22
+ });
23
+ if (wikitext) {
24
+ const SingleLineAtomToken = (0, singleLine_1.singleLine)(atom_1.AtomToken);
25
+ this.append(...wikitext.split('\n').map(line => new SingleLineAtomToken(line, 'param-line', config, accum, {
26
+ AstText: ':', ...acceptable,
27
+ })));
28
+ }
29
+ }
30
+ /** @private */
31
+ toString() {
32
+ return super.toString('\n');
33
+ }
34
+ /** @override */
35
+ text() {
36
+ return super.text('\n');
37
+ }
38
+ /** @private */
39
+ getGaps() {
40
+ return 1;
41
+ }
42
+ /** @private */
43
+ lint(start = this.getAbsoluteIndex()) {
44
+ let rect;
45
+ return this.childNodes.filter(child => {
46
+ const { childNodes } = child, i = childNodes.findIndex(({ type }) => type !== 'text'), str = (i >= 0 ? childNodes.slice(0, i).map(String).join('') : child.toString()).trim();
47
+ return str && !(i >= 0 ? /^[a-z]+(?:\[\])?\s*(?:=|$)/iu : /^[a-z]+(?:\[\])?\s*=/iu).test(str);
48
+ }).map(child => {
49
+ rect ??= { start, ...this.getRootNode().posFromIndex(start) };
50
+ const e = (0, lint_1.generateForChild)(child, rect, 'no-ignored', index_1.default.msg('invalid parameter of <$1>', this.name));
51
+ e.suggestions = [
52
+ {
53
+ desc: 'remove',
54
+ range: [e.startIndex, e.endIndex],
55
+ text: '',
56
+ },
57
+ ];
58
+ return e;
59
+ });
60
+ }
61
+ /** @private */
62
+ print() {
63
+ return super.print({ sep: '\n' });
64
+ }
65
+ /* NOT FOR BROWSER */
66
+ /** @override */
67
+ cloneNode() {
68
+ const cloned = this.cloneChildNodes();
69
+ return debug_1.Shadow.run(() => {
70
+ const token = new this.constructor(undefined, this.getAttribute('config'));
71
+ token.append(...cloned);
72
+ return token;
73
+ });
74
+ }
75
+ }
76
+ exports.ParamTagToken = ParamTagToken;
77
+ constants_1.classes['ParamTagToken'] = __filename;
@@ -0,0 +1,8 @@
1
+ import Parser from '../../index';
2
+ import { ParamTagToken } from './index';
3
+ import type { Token } from '../index';
4
+ /** `<inputbox>` */
5
+ export declare abstract class InputboxToken extends ParamTagToken {
6
+ /** @class */
7
+ constructor(wikitext?: string, config?: Parser.Config, accum?: Token[]);
8
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InputboxToken = void 0;
4
+ const constants_1 = require("../../util/constants");
5
+ const braces_1 = require("../../parser/braces");
6
+ const index_1 = require("../../index");
7
+ const index_2 = require("./index");
8
+ /** `<inputbox>` */
9
+ class InputboxToken extends index_2.ParamTagToken {
10
+ /** @class */
11
+ constructor(wikitext, config = index_1.default.getConfig(), accum = []) {
12
+ const placeholder = Symbol('InputboxToken'), { length } = accum;
13
+ accum.push(placeholder);
14
+ wikitext &&= (0, braces_1.parseBraces)(wikitext, config, accum);
15
+ accum.splice(length, 1);
16
+ super(wikitext, config, accum, {
17
+ ArgToken: ':', TranscludeToken: ':',
18
+ });
19
+ }
20
+ }
21
+ exports.InputboxToken = InputboxToken;
22
+ constants_1.classes['InputboxToken'] = __filename;
@@ -0,0 +1,66 @@
1
+ import Parser from '../index';
2
+ import { Token } from './index';
3
+ import type { LintError, AST } from '../base';
4
+ import type { AtomToken, SyntaxToken, TranscludeToken } from '../internal';
5
+ /**
6
+ * 模板或魔术字参数
7
+ * @classdesc `{childNodes: [Token, Token]}`
8
+ */
9
+ export declare abstract class ParameterToken extends Token {
10
+ readonly type = "parameter";
11
+ readonly name: string;
12
+ readonly childNodes: readonly [Token, Token];
13
+ abstract get firstChild(): Token;
14
+ abstract get lastChild(): Token;
15
+ abstract get parentNode(): TranscludeToken | undefined;
16
+ abstract get nextSibling(): this | undefined;
17
+ abstract get previousSibling(): AtomToken | SyntaxToken | this;
18
+ abstract get children(): [Token, Token];
19
+ abstract get firstElementChild(): Token;
20
+ abstract get lastElementChild(): Token;
21
+ abstract get parentElement(): TranscludeToken | undefined;
22
+ abstract get nextElementSibling(): this | undefined;
23
+ abstract get previousElementSibling(): AtomToken | SyntaxToken | this;
24
+ /** 是否是匿名参数 */
25
+ get anon(): boolean;
26
+ set anon(value: boolean);
27
+ /** getValue()的getter */
28
+ get value(): string;
29
+ set value(value: string);
30
+ /** 是否是重复参数 */
31
+ get duplicated(): boolean;
32
+ set duplicated(value: boolean);
33
+ /**
34
+ * @param key 参数名
35
+ * @param value 参数值
36
+ */
37
+ constructor(key?: string | number, value?: string, config?: Parser.Config, accum?: Token[]);
38
+ /** @override */
39
+ text(): string;
40
+ /** @override */
41
+ json(): AST;
42
+ /** @override */
43
+ cloneNode(): this;
44
+ /**
45
+ * @override
46
+ * @param token 待替换的节点
47
+ */
48
+ safeReplaceWith(token: this): void;
49
+ /** 获取参数值 */
50
+ getValue(): string;
51
+ /**
52
+ * 设置参数值
53
+ * @param value 参数值
54
+ */
55
+ setValue(value: string): void;
56
+ /**
57
+ * 修改参数名
58
+ * @param key 新参数名
59
+ * @param force 是否无视冲突命名
60
+ * @throws `Error` 仅用于模板参数
61
+ * @throws `RangeError` 更名造成重复参数
62
+ */
63
+ rename(key: string, force?: boolean): void;
64
+ /** 转义 `=` */
65
+ escape(): void;
66
+ }
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.ParameterToken = void 0;
38
+ const string_1 = require("../util/string");
39
+ const lint_1 = require("../util/lint");
40
+ const debug_1 = require("../util/debug");
41
+ const constants_1 = require("../util/constants");
42
+ const fixed_1 = require("../mixin/fixed");
43
+ const index_1 = require("../index");
44
+ const index_2 = require("./index");
45
+ /**
46
+ * 准确获取参数名
47
+ * @param name 预定的参数名
48
+ */
49
+ const getName = (name) => name.text().replace(/^[ \t\n\0\v]+|([^ \t\n\0\v])[ \t\n\0\v]+$/gu, '$1');
50
+ /**
51
+ * 模板或魔术字参数
52
+ * @classdesc `{childNodes: [Token, Token]}`
53
+ */
54
+ let ParameterToken = (() => {
55
+ let _classDecorators = [fixed_1.fixedToken];
56
+ let _classDescriptor;
57
+ let _classExtraInitializers = [];
58
+ let _classThis;
59
+ let _classSuper = index_2.Token;
60
+ var ParameterToken = class extends _classSuper {
61
+ static { _classThis = this; }
62
+ static {
63
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
64
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
65
+ ParameterToken = _classThis = _classDescriptor.value;
66
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
67
+ __runInitializers(_classThis, _classExtraInitializers);
68
+ }
69
+ type = 'parameter';
70
+ /* NOT FOR BROWSER END */
71
+ /** 是否是匿名参数 */
72
+ get anon() {
73
+ return this.firstChild.length === 0;
74
+ }
75
+ /* NOT FOR BROWSER */
76
+ set anon(value) {
77
+ if (value) {
78
+ throw new Error('无法将命名参数转换为匿名参数!');
79
+ }
80
+ this.parentNode?.anonToNamed();
81
+ }
82
+ /** getValue()的getter */
83
+ get value() {
84
+ return this.getValue();
85
+ }
86
+ set value(value) {
87
+ this.setValue(value);
88
+ }
89
+ /** 是否是重复参数 */
90
+ get duplicated() {
91
+ try {
92
+ return Boolean(this.parentNode?.getDuplicatedArgs().some(([key]) => key === this.name));
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ set duplicated(value) {
99
+ if (this.duplicated && !value) {
100
+ this.parentNode.fixDuplication();
101
+ }
102
+ }
103
+ /* NOT FOR BROWSER END */
104
+ /**
105
+ * @param key 参数名
106
+ * @param value 参数值
107
+ */
108
+ constructor(key, value, config = index_1.default.getConfig(), accum = []) {
109
+ super(undefined, config, accum);
110
+ const keyToken = new index_2.Token(typeof key === 'number' ? undefined : key, config, accum, {
111
+ 'Stage-11': ':', '!HeadingToken': '',
112
+ }), token = new index_2.Token(value, config, accum);
113
+ keyToken.type = 'parameter-key';
114
+ token.type = 'parameter-value';
115
+ token.setAttribute('stage', 2);
116
+ this.append(keyToken, token);
117
+ }
118
+ /** @private */
119
+ afterBuild() {
120
+ if (!this.anon) {
121
+ const { parentNode, firstChild } = this, name = getName(firstChild);
122
+ this.setAttribute('name', name);
123
+ if (parentNode) {
124
+ parentNode.getArgs(name, false, false).add(this);
125
+ /* NOT FOR BROWSER */
126
+ parentNode.getAttribute('keys').add(name);
127
+ }
128
+ }
129
+ /* NOT FOR BROWSER */
130
+ const /** @implements */ parameterListener = ({ prevTarget }, data) => {
131
+ if (!this.anon) { // 匿名参数不管怎么变动还是匿名
132
+ const { firstChild, name } = this;
133
+ if (prevTarget === firstChild) {
134
+ const newKey = getName(firstChild);
135
+ data.oldKey = name;
136
+ data.newKey = newKey;
137
+ this.setAttribute('name', newKey);
138
+ }
139
+ }
140
+ };
141
+ this.addEventListener(['remove', 'insert', 'replace', 'text'], parameterListener);
142
+ }
143
+ /** @private */
144
+ toString() {
145
+ return this.anon ? this.lastChild.toString() : super.toString('=');
146
+ }
147
+ /** @override */
148
+ text() {
149
+ return this.anon ? this.lastChild.text() : super.text('=');
150
+ }
151
+ /** @private */
152
+ getGaps() {
153
+ return this.anon ? 0 : 1;
154
+ }
155
+ /** @private */
156
+ lint(start = this.getAbsoluteIndex(), re) {
157
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
158
+ /https?:\/\/(?:\[[\da-f:.]+\]|[^[\]<>"\t\n\p{Zs}])(?:[^[\]<>"\0\t\n\p{Zs}]|\0\d+c\x7F)*$/iu;
159
+ const errors = super.lint(start, re), { firstChild } = this, link = new RegExp(`https?://${string_1.extUrlCharFirst}${string_1.extUrlChar}$`, 'iu').exec(firstChild.text())?.[0];
160
+ if (link && new URL(link).search) {
161
+ const e = (0, lint_1.generateForChild)(firstChild, { start }, 'unescaped', 'unescaped query string in an anonymous parameter');
162
+ e.startIndex = e.endIndex;
163
+ e.startLine = e.endLine;
164
+ e.startCol = e.endCol;
165
+ e.endIndex++;
166
+ e.endCol++;
167
+ e.fix = {
168
+ range: [e.startIndex, e.endIndex],
169
+ text: '{{=}}',
170
+ };
171
+ errors.push(e);
172
+ }
173
+ return errors;
174
+ }
175
+ /** @private */
176
+ print() {
177
+ return super.print({ sep: this.anon ? '' : '=' });
178
+ }
179
+ /** @override */
180
+ json() {
181
+ const json = super.json();
182
+ json['anon'] = this.anon;
183
+ return json;
184
+ }
185
+ /* NOT FOR BROWSER */
186
+ /** @override */
187
+ cloneNode() {
188
+ const [key, value] = this.cloneChildNodes(), config = this.getAttribute('config');
189
+ return debug_1.Shadow.run(() => {
190
+ // @ts-expect-error abstract class
191
+ const token = new ParameterToken(this.anon ? Number(this.name) : undefined, undefined, config);
192
+ token.firstChild.safeReplaceWith(key);
193
+ token.lastChild.safeReplaceWith(value);
194
+ token.afterBuild();
195
+ if (this.anon) {
196
+ token.setAttribute('name', this.name);
197
+ }
198
+ return token;
199
+ });
200
+ }
201
+ /**
202
+ * @override
203
+ * @param token 待替换的节点
204
+ */
205
+ safeReplaceWith(token) {
206
+ index_1.default.warn(`${this.constructor.name}.safeReplaceWith 方法退化到 replaceWith。`);
207
+ this.replaceWith(token);
208
+ }
209
+ /** 获取参数值 */
210
+ getValue() {
211
+ const value = this.lastChild.text();
212
+ return this.anon && this.parentNode?.isTemplate() !== false ? value : value.trim();
213
+ }
214
+ /**
215
+ * 设置参数值
216
+ * @param value 参数值
217
+ */
218
+ setValue(value) {
219
+ const { childNodes } = index_1.default.parse(value, this.getAttribute('include'), undefined, this.getAttribute('config'));
220
+ this.lastChild.replaceChildren(...childNodes);
221
+ }
222
+ /**
223
+ * 修改参数名
224
+ * @param key 新参数名
225
+ * @param force 是否无视冲突命名
226
+ * @throws `Error` 仅用于模板参数
227
+ * @throws `RangeError` 更名造成重复参数
228
+ */
229
+ rename(key, force) {
230
+ const { parentNode, anon } = this;
231
+ // 必须检测是否是TranscludeToken
232
+ if (parentNode?.isTemplate() === false) {
233
+ throw new Error('rename 方法仅用于模板参数!');
234
+ }
235
+ else if (anon) {
236
+ parentNode?.anonToNamed();
237
+ }
238
+ const root = index_1.default.parse(key, this.getAttribute('include'), undefined, this.getAttribute('config')), name = getName(root);
239
+ if (this.name === name) {
240
+ index_1.default.warn('未改变实际参数名', name);
241
+ }
242
+ else if (parentNode?.hasArg(name)) {
243
+ if (force) {
244
+ index_1.default.warn('参数更名造成重复参数', name);
245
+ }
246
+ else {
247
+ throw new RangeError(`参数更名造成重复参数:${name}`);
248
+ }
249
+ }
250
+ this.firstChild.replaceChildren(...root.childNodes);
251
+ }
252
+ /** 转义 `=` */
253
+ escape() {
254
+ for (const child of this.lastChild.childNodes) {
255
+ if (child.type === 'text') {
256
+ child.escape();
257
+ }
258
+ }
259
+ }
260
+ };
261
+ return ParameterToken = _classThis;
262
+ })();
263
+ exports.ParameterToken = ParameterToken;
264
+ constants_1.classes['ParameterToken'] = __filename;
@@ -0,0 +1,29 @@
1
+ import Parser from '../index';
2
+ import { Token } from './index';
3
+ import { NoincludeToken } from './nowiki/noinclude';
4
+ import type { LintError } from '../base';
5
+ import type { AstText, AttributesToken, ExtToken, ConverterToken } from '../internal';
6
+ /**
7
+ * `<pre>`
8
+ * @classdesc `{childNodes: [...AstText|NoincludeToken|ConverterToken]}`
9
+ */
10
+ export declare abstract class PreToken extends Token {
11
+ readonly type = "ext-inner";
12
+ readonly name: 'pre';
13
+ readonly childNodes: readonly (AstText | NoincludeToken | ConverterToken)[];
14
+ abstract get firstChild(): AstText | NoincludeToken | ConverterToken | undefined;
15
+ abstract get lastChild(): AstText | NoincludeToken | ConverterToken | undefined;
16
+ abstract get nextSibling(): undefined;
17
+ abstract get previousSibling(): AttributesToken;
18
+ abstract get parentNode(): ExtToken | undefined;
19
+ abstract get children(): (NoincludeToken | ConverterToken)[];
20
+ abstract get firstElementChild(): NoincludeToken | ConverterToken | undefined;
21
+ abstract get lastElementChild(): NoincludeToken | ConverterToken | undefined;
22
+ abstract get previousElementSibling(): AttributesToken;
23
+ abstract get nextElementSibling(): undefined;
24
+ abstract get parentElement(): ExtToken | undefined;
25
+ /** @class */
26
+ constructor(wikitext?: string, config?: Parser.Config, accum?: Token[]);
27
+ /** @override */
28
+ cloneNode(): this;
29
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PreToken = void 0;
4
+ const constants_1 = require("../util/constants");
5
+ const debug_1 = require("../util/debug");
6
+ const index_1 = require("../index");
7
+ const index_2 = require("./index");
8
+ const noinclude_1 = require("./nowiki/noinclude");
9
+ /**
10
+ * `<pre>`
11
+ * @classdesc `{childNodes: [...AstText|NoincludeToken|ConverterToken]}`
12
+ */
13
+ class PreToken extends index_2.Token {
14
+ type = 'ext-inner';
15
+ /* NOT FOR BROWSER END */
16
+ /** @class */
17
+ constructor(wikitext, config = index_1.default.getConfig(), accum = []) {
18
+ if (wikitext) {
19
+ const opening = '<nowiki>', closing = '</nowiki>', { length } = opening;
20
+ let i = wikitext.indexOf(opening), j = wikitext.indexOf(closing, i + length), str = '';
21
+ while (i !== -1 && j !== -1) {
22
+ // @ts-expect-error abstract class
23
+ new noinclude_1.NoincludeToken(opening, config, accum);
24
+ // @ts-expect-error abstract class
25
+ new noinclude_1.NoincludeToken(closing, config, accum);
26
+ str += `${wikitext.slice(0, i)}\0${accum.length - 1}c\x7F${wikitext.slice(i + length, j)}\0${accum.length}c\x7F`;
27
+ wikitext = wikitext.slice(j + length + 1);
28
+ i = wikitext.indexOf(opening);
29
+ j = wikitext.indexOf(closing, i + length);
30
+ }
31
+ wikitext = str + wikitext;
32
+ }
33
+ super(wikitext, config, accum, {
34
+ AstText: ':', NoincludeToken: ':', ConverterToken: ':',
35
+ });
36
+ this.setAttribute('stage', constants_1.MAX_STAGE - 1);
37
+ }
38
+ /** @private */
39
+ getAttribute(key) {
40
+ return (key === 'plain') || super.getAttribute(key);
41
+ }
42
+ /** @private */
43
+ lint(start = this.getAbsoluteIndex()) {
44
+ return super.lint(start, /<\s*\/\s*(pre)\b/giu);
45
+ }
46
+ /* NOT FOR BROWSER */
47
+ /** @override */
48
+ cloneNode() {
49
+ const cloned = this.cloneChildNodes();
50
+ return debug_1.Shadow.run(() => {
51
+ // @ts-expect-error abstract class
52
+ const token = new PreToken(undefined, this.getAttribute('config'));
53
+ token.append(...cloned);
54
+ return token;
55
+ });
56
+ }
57
+ }
58
+ exports.PreToken = PreToken;
59
+ constants_1.classes['PreToken'] = __filename;
@@ -0,0 +1,28 @@
1
+ import Parser from '../index';
2
+ import { Token } from './index';
3
+ import { SyntaxToken } from './syntax';
4
+ import { RedirectTargetToken } from './link/redirectTarget';
5
+ import type { LintError } from '../base';
6
+ export declare abstract class RedirectToken extends Token {
7
+ #private;
8
+ readonly type = "redirect";
9
+ readonly childNodes: readonly [SyntaxToken, RedirectTargetToken];
10
+ abstract get firstChild(): SyntaxToken;
11
+ abstract get lastChild(): RedirectTargetToken;
12
+ abstract get previousSibling(): undefined;
13
+ abstract get children(): [SyntaxToken, RedirectTargetToken];
14
+ abstract get firstElementChild(): SyntaxToken;
15
+ abstract get lastElementChild(): RedirectTargetToken;
16
+ abstract get previousElementSibling(): undefined;
17
+ /**
18
+ * @param pre leading whitespace
19
+ * @param syntax 重定向魔术字
20
+ * @param link 重定向目标
21
+ * @param text 重定向显示文本(无效)
22
+ * @param post trailing whitespace
23
+ */
24
+ constructor(pre: string, syntax: string | undefined, link: string, text: string | undefined, post: string, config?: Parser.Config, accum?: Token[]);
25
+ /** @override */
26
+ cloneNode(): this;
27
+ }
28
+ export {};