wikiparser-node 1.3.9 → 1.4.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 (85) hide show
  1. package/dist/base.d.ts +3 -1
  2. package/dist/lib/element.d.ts +10 -11
  3. package/dist/lib/element.js +34 -21
  4. package/dist/lib/node.d.ts +2 -3
  5. package/dist/lib/node.js +4 -4
  6. package/dist/lib/range.d.ts +2 -3
  7. package/dist/lib/ranges.d.ts +2 -3
  8. package/dist/lib/text.d.ts +0 -1
  9. package/dist/lib/title.d.ts +0 -1
  10. package/dist/mixin/attributesParent.d.ts +80 -0
  11. package/dist/mixin/fixed.d.ts +31 -0
  12. package/dist/mixin/fixed.js +8 -5
  13. package/dist/mixin/flagsParent.d.ts +61 -0
  14. package/dist/mixin/hidden.d.ts +18 -0
  15. package/dist/mixin/hidden.js +4 -5
  16. package/dist/mixin/magicLinkParent.d.ts +34 -0
  17. package/dist/mixin/singleLine.d.ts +14 -0
  18. package/dist/mixin/sol.d.ts +18 -0
  19. package/dist/mixin/syntax.d.ts +19 -0
  20. package/dist/parser/hrAndDoubleUnderscore.js +3 -3
  21. package/dist/src/arg.d.ts +1 -2
  22. package/dist/src/attribute.d.ts +3 -21
  23. package/dist/src/attribute.js +1 -1
  24. package/dist/src/attributes.d.ts +2 -3
  25. package/dist/src/converter.d.ts +3 -21
  26. package/dist/src/converterFlags.d.ts +2 -3
  27. package/dist/src/converterRule.d.ts +1 -1
  28. package/dist/src/extLink.d.ts +3 -22
  29. package/dist/src/gallery.d.ts +2 -3
  30. package/dist/src/heading.d.ts +6 -33
  31. package/dist/src/heading.js +1 -1
  32. package/dist/src/hidden.d.ts +1 -15
  33. package/dist/src/hidden.js +1 -1
  34. package/dist/src/html.d.ts +6 -35
  35. package/dist/src/html.js +19 -3
  36. package/dist/src/imageParameter.d.ts +2 -3
  37. package/dist/src/imageParameter.js +8 -8
  38. package/dist/src/imagemap.d.ts +2 -2
  39. package/dist/src/imagemapLink.d.ts +5 -32
  40. package/dist/src/imagemapLink.js +1 -1
  41. package/dist/src/index.d.ts +7 -8
  42. package/dist/src/link/base.d.ts +1 -2
  43. package/dist/src/link/base.js +2 -6
  44. package/dist/src/link/file.d.ts +12 -13
  45. package/dist/src/link/file.js +11 -8
  46. package/dist/src/link/galleryImage.d.ts +2 -18
  47. package/dist/src/link/galleryImage.js +1 -1
  48. package/dist/src/link/index.d.ts +4 -2
  49. package/dist/src/link/index.js +11 -0
  50. package/dist/src/magicLink.d.ts +2 -15
  51. package/dist/src/nested.d.ts +1 -2
  52. package/dist/src/nowiki/base.d.ts +3 -20
  53. package/dist/src/nowiki/base.js +1 -1
  54. package/dist/src/nowiki/comment.d.ts +1 -15
  55. package/dist/src/nowiki/comment.js +1 -1
  56. package/dist/src/nowiki/doubleUnderscore.d.ts +6 -27
  57. package/dist/src/nowiki/doubleUnderscore.js +7 -7
  58. package/dist/src/nowiki/hr.d.ts +4 -23
  59. package/dist/src/nowiki/list.d.ts +2 -15
  60. package/dist/src/nowiki/listBase.d.ts +1 -11
  61. package/dist/src/nowiki/noinclude.d.ts +1 -15
  62. package/dist/src/nowiki/noinclude.js +1 -1
  63. package/dist/src/nowiki/quote.d.ts +1 -11
  64. package/dist/src/nowiki/quote.js +9 -1
  65. package/dist/src/paramTag/index.d.ts +1 -1
  66. package/dist/src/parameter.d.ts +3 -20
  67. package/dist/src/parameter.js +1 -1
  68. package/dist/src/pre.d.ts +1 -1
  69. package/dist/src/syntax.d.ts +1 -12
  70. package/dist/src/table/base.d.ts +4 -26
  71. package/dist/src/table/index.d.ts +3 -3
  72. package/dist/src/table/index.js +1 -1
  73. package/dist/src/table/td.d.ts +3 -21
  74. package/dist/src/table/td.js +1 -1
  75. package/dist/src/table/tr.d.ts +1 -2
  76. package/dist/src/table/trBase.d.ts +0 -1
  77. package/dist/src/tagPair/ext.d.ts +3 -21
  78. package/dist/src/tagPair/include.d.ts +2 -19
  79. package/dist/src/tagPair/include.js +1 -1
  80. package/dist/src/tagPair/index.d.ts +3 -18
  81. package/dist/src/tagPair/index.js +1 -1
  82. package/dist/src/transclude.d.ts +8 -9
  83. package/i18n/zh-hans.json +1 -0
  84. package/i18n/zh-hant.json +1 -0
  85. package/package.json +4 -3
package/dist/base.d.ts CHANGED
@@ -27,7 +27,7 @@ export interface LintError {
27
27
  /** 类似Node */
28
28
  export interface AstNode {
29
29
  type: string;
30
- readonly childNodes: AstNode[];
30
+ readonly childNodes: readonly AstNode[];
31
31
  /** Linter */
32
32
  lint(): LintError[];
33
33
  /** 以HTML格式打印 */
@@ -41,6 +41,8 @@ interface AstElement extends AstNode {
41
41
  export interface Parser {
42
42
  config: string | Config;
43
43
  i18n: string | Record<string, string> | undefined;
44
+ /** 获取解析设置 */
45
+ getConfig(): Config;
44
46
  /**
45
47
  * 解析wikitext
46
48
  * @param include 是否嵌入
@@ -1,15 +1,14 @@
1
1
  import { AstNode } from './node';
2
2
  import type { LintError } from '../base';
3
- import type { AstNodes, AstText, Token, HtmlToken, ExtToken } from '../internal';
3
+ import type { AstNodes, AstText, Token } from '../internal';
4
4
  /** 类似HTMLElement */
5
5
  export declare abstract class AstElement extends AstNode {
6
- #private;
7
6
  readonly name?: string;
8
7
  readonly data: undefined;
9
8
  /** 子节点总数 */
10
9
  get length(): number;
11
10
  /** 全部非文本子节点 */
12
- get children(): readonly Token[];
11
+ get children(): Token[];
13
12
  /** 首位非文本子节点 */
14
13
  get firstElementChild(): Token | undefined;
15
14
  /** 末位非文本子节点 */
@@ -54,7 +53,7 @@ export declare abstract class AstElement extends AstNode {
54
53
  * 最近的祖先节点
55
54
  * @param selector 选择器
56
55
  */
57
- closest<T extends Token>(selector: string): T | undefined;
56
+ closest<T = Token>(selector: string): T | undefined;
58
57
  /**
59
58
  * 在末尾批量插入子节点
60
59
  * @param elements 插入节点
@@ -93,37 +92,37 @@ export declare abstract class AstElement extends AstNode {
93
92
  * 检查是否符合选择器
94
93
  * @param selector 选择器
95
94
  */
96
- matches(selector?: string): boolean;
95
+ matches<T>(selector?: string): this is T;
97
96
  /**
98
97
  * 符合选择器的第一个后代节点
99
98
  * @param selector 选择器
100
99
  */
101
- querySelector<T extends Token>(selector: string): T | undefined;
100
+ querySelector<T = Token>(selector: string): T | undefined;
102
101
  /**
103
102
  * 类型选择器
104
103
  * @param types
105
104
  */
106
- getElementByTypes<T extends Token>(types: string): T | undefined;
105
+ getElementByTypes<T = Token>(types: string): T | undefined;
107
106
  /**
108
107
  * id选择器
109
108
  * @param id id名
110
109
  */
111
- getElementById(id: string): Token | undefined;
110
+ getElementById<T = Token>(id: string): T | undefined;
112
111
  /**
113
112
  * 符合选择器的所有后代节点
114
113
  * @param selector 选择器
115
114
  */
116
- querySelectorAll<T extends Token>(selector: string): readonly T[];
115
+ querySelectorAll<T = Token>(selector: string): T[];
117
116
  /**
118
117
  * 类选择器
119
118
  * @param className 类名之一
120
119
  */
121
- getElementsByClassName(className: string): readonly Token[];
120
+ getElementsByClassName<T = Token>(className: string): T[];
122
121
  /**
123
122
  * 标签名选择器
124
123
  * @param tag 标签名
125
124
  */
126
- getElementsByTagName(tag: string): readonly (HtmlToken | ExtToken)[];
125
+ getElementsByTagName<T = Token>(tag: string): T[];
127
126
  /**
128
127
  * 获取某一行的wikitext
129
128
  * @param n 行号
@@ -6,6 +6,8 @@ const path = require("path");
6
6
  const string_1 = require("../util/string");
7
7
  const constants_1 = require("../util/constants");
8
8
  const debug_1 = require("../util/debug");
9
+ const debug_2 = require("../util/debug");
10
+ const lint_1 = require("../util/lint");
9
11
  const selector_1 = require("../parser/selector");
10
12
  const ranges_1 = require("./ranges");
11
13
  const title_1 = require("./title");
@@ -156,19 +158,28 @@ class AstElement extends node_1.AstNode {
156
158
  return node;
157
159
  }
158
160
  /**
159
- * 最近的祖先节点
161
+ * 将选择器转化为类型谓词
160
162
  * @param selector 选择器
161
163
  */
162
- closest(selector) {
163
- let { parentNode } = this, condition;
164
+ #getCondition(selector) {
165
+ let condition;
164
166
  if (/[^a-z\-,\s]/u.test(selector)) {
165
167
  const stack = (0, selector_1.parseSelector)(selector);
166
- condition = /** @implements */ (token) => token.#matchesStack(stack);
168
+ condition = (token => stack.some(copy => token.#matchesArray(copy)));
167
169
  }
168
170
  else {
169
171
  const types = new Set(selector.split(',').map(str => str.trim()));
170
- condition = /** @implements */ (token) => types.has(token.type);
172
+ condition = (token => types.has(token.type));
171
173
  }
174
+ return condition;
175
+ }
176
+ /**
177
+ * 最近的祖先节点
178
+ * @param selector 选择器
179
+ */
180
+ closest(selector) {
181
+ const condition = this.#getCondition(selector);
182
+ let { parentNode } = this;
172
183
  while (parentNode) {
173
184
  if (condition(parentNode)) {
174
185
  return parentNode;
@@ -225,9 +236,18 @@ class AstElement extends node_1.AstNode {
225
236
  */
226
237
  lint(start = this.getAbsoluteIndex()) {
227
238
  const errors = [];
239
+ const cats = new Set(), isCategory = (0, debug_2.isToken)('category');
228
240
  for (let i = 0, cur = start + this.getAttribute('padding'); i < this.length; i++) {
229
241
  const child = this.childNodes[i];
230
242
  errors.push(...child.lint(cur));
243
+ if (isCategory(child)) {
244
+ if (cats.has(child.name)) {
245
+ errors.push((0, lint_1.generateForSelf)(child, { start: cur }, 'duplicated category'));
246
+ }
247
+ else {
248
+ cats.add(child.name);
249
+ }
250
+ }
231
251
  cur += String(child).length + this.getGaps(i);
232
252
  }
233
253
  return errors;
@@ -458,19 +478,12 @@ class AstElement extends node_1.AstNode {
458
478
  }
459
479
  return false;
460
480
  }
461
- /**
462
- * 检查是否符合解析后的组合选择器
463
- * @param stack 解析后的一组选择器
464
- */
465
- #matchesStack(stack) {
466
- return stack.some(condition => this.#matchesArray(condition));
467
- }
468
481
  /**
469
482
  * 检查是否符合选择器
470
483
  * @param selector 选择器
471
484
  */
472
485
  matches(selector) {
473
- return selector === undefined || this.#matchesStack((0, selector_1.parseSelector)(selector));
486
+ return selector === undefined || this.#getCondition(selector)(this);
474
487
  }
475
488
  /**
476
489
  * 符合条件的第一个后代节点
@@ -493,8 +506,8 @@ class AstElement extends node_1.AstNode {
493
506
  * @param selector 选择器
494
507
  */
495
508
  querySelector(selector) {
496
- const stack = (0, selector_1.parseSelector)(selector);
497
- return this.#getElementBy(token => token.#matchesStack(stack));
509
+ const condition = this.#getCondition(selector);
510
+ return this.#getElementBy(condition);
498
511
  }
499
512
  /**
500
513
  * 类型选择器
@@ -502,14 +515,14 @@ class AstElement extends node_1.AstNode {
502
515
  */
503
516
  getElementByTypes(types) {
504
517
  const typeSet = new Set(types.split(',').map(str => str.trim()));
505
- return this.#getElementBy(({ type }) => typeSet.has(type));
518
+ return this.#getElementBy((({ type }) => typeSet.has(type)));
506
519
  }
507
520
  /**
508
521
  * id选择器
509
522
  * @param id id名
510
523
  */
511
524
  getElementById(id) {
512
- return this.#getElementBy(token => 'id' in token && token.id === id);
525
+ return this.#getElementBy((token => 'id' in token && token.id === id));
513
526
  }
514
527
  /**
515
528
  * 符合条件的所有后代节点
@@ -530,22 +543,22 @@ class AstElement extends node_1.AstNode {
530
543
  * @param selector 选择器
531
544
  */
532
545
  querySelectorAll(selector) {
533
- const stack = (0, selector_1.parseSelector)(selector);
534
- return this.#getElementsBy(token => token.#matchesStack(stack));
546
+ const condition = this.#getCondition(selector);
547
+ return this.#getElementsBy(condition);
535
548
  }
536
549
  /**
537
550
  * 类选择器
538
551
  * @param className 类名之一
539
552
  */
540
553
  getElementsByClassName(className) {
541
- return this.#getElementsBy(token => 'classList' in token && token.classList.has(className));
554
+ return this.#getElementsBy((token => 'classList' in token && token.classList.has(className)));
542
555
  }
543
556
  /**
544
557
  * 标签名选择器
545
558
  * @param tag 标签名
546
559
  */
547
560
  getElementsByTagName(tag) {
548
- return this.#getElementsBy(({ type, name }) => name === tag && (type === 'html' || type === 'ext'));
561
+ return this.#getElementsBy((({ type, name }) => name === tag && (type === 'html' || type === 'ext')));
549
562
  }
550
563
  /**
551
564
  * 获取某一行的wikitext
@@ -16,10 +16,9 @@ export interface CaretPosition {
16
16
  }
17
17
  /** 类似Node */
18
18
  export declare abstract class AstNode implements AstNodeBase {
19
- #private;
20
19
  type: TokenTypes | 'text';
21
20
  data?: string | undefined;
22
- readonly childNodes: AstNodes[];
21
+ readonly childNodes: readonly AstNodes[];
23
22
  abstract lint(): LintError[];
24
23
  abstract print(): string;
25
24
  /** 首位子节点 */
@@ -120,7 +119,7 @@ export declare abstract class AstNode implements AstNodeBase {
120
119
  * 列举事件监听
121
120
  * @param type 事件类型
122
121
  */
123
- listEventListeners(type: string): readonly Function[];
122
+ listEventListeners(type: string): Function[];
124
123
  /**
125
124
  * 触发事件
126
125
  * @param e 事件对象
package/dist/lib/node.js CHANGED
@@ -94,7 +94,7 @@ class AstNode {
94
94
  }
95
95
  /** @private */
96
96
  get fixed() {
97
- return 'fixed' in this.constructor;
97
+ return false;
98
98
  }
99
99
  constructor() {
100
100
  Object.defineProperty(this, 'childNodes', { writable: false });
@@ -203,13 +203,13 @@ class AstNode {
203
203
  throw new Error(`${this.constructor.name} ${msg}!`);
204
204
  }
205
205
  /** @private */
206
- seal(key, hidden) {
207
- if (!hidden) {
206
+ seal(key, permanent) {
207
+ if (!permanent) {
208
208
  this.#optional.add(key);
209
209
  }
210
210
  Object.defineProperty(this, key, {
211
211
  writable: false,
212
- enumerable: !hidden && Boolean(this[key]),
212
+ enumerable: !permanent && Boolean(this[key]),
213
213
  configurable: true,
214
214
  });
215
215
  }
@@ -2,7 +2,6 @@ import type { AstNodes } from '../internal';
2
2
  import type { Dimension, Position } from './node';
3
3
  /** 模拟Range对象 */
4
4
  export declare class AstRange {
5
- #private;
6
5
  /** 起点容器 */
7
6
  get startContainer(): AstNodes;
8
7
  /** 起点位置 */
@@ -98,7 +97,7 @@ export declare class AstRange {
98
97
  */
99
98
  insertNode(newNode: AstNodes | string): void;
100
99
  /** 获取范围内的全部节点 */
101
- extractContents(): readonly AstNodes[];
100
+ extractContents(): AstNodes[];
102
101
  /** 在满足条件时拷贝范围内的全部节点 */
103
- cloneContents(): readonly AstNodes[];
102
+ cloneContents(): AstNodes[];
104
103
  }
@@ -1,6 +1,5 @@
1
1
  /** 模拟Python的Range对象。除`step`至少为`1`外,允许负数、小数或`end < start`的情形。 */
2
2
  export declare class Range {
3
- #private;
4
3
  /**
5
4
  * @param s 表达式
6
5
  * @throws `RangeError` 起点、终点和步长均应为整数
@@ -12,7 +11,7 @@ export declare class Range {
12
11
  * 将Range转换为针对特定数组的下标集
13
12
  * @param arr 参考数组`[0, 1, 2, ...]`
14
13
  */
15
- applyTo(arr: readonly number[]): readonly number[];
14
+ applyTo(arr: readonly number[]): number[];
16
15
  }
17
16
  /** @extends {Array<number|Range>} */
18
17
  export declare class Ranges extends Array<number | Range> {
@@ -22,5 +21,5 @@ export declare class Ranges extends Array<number | Range> {
22
21
  * 将Ranges转换为针对特定Array的下标集
23
22
  * @param arr 参考数组
24
23
  */
25
- applyTo(arr: number | readonly unknown[]): readonly number[];
24
+ applyTo(arr: number | readonly unknown[]): number[];
26
25
  }
@@ -2,7 +2,6 @@ import { AstNode } from './node';
2
2
  import type { LintError } from '../base';
3
3
  /** 文本节点 */
4
4
  export declare class AstText extends AstNode {
5
- #private;
6
5
  readonly type = "text";
7
6
  readonly name: undefined;
8
7
  readonly data: string;
@@ -1,7 +1,6 @@
1
1
  import * as Parser from '../index';
2
2
  /** MediaWiki页面标题对象 */
3
3
  export declare class Title {
4
- #private;
5
4
  readonly valid: boolean;
6
5
  ns: number;
7
6
  fragment: string | undefined;
@@ -0,0 +1,80 @@
1
+ import type { AstNodes, AttributesToken } from '../internal';
2
+ export interface AttributesParentBase {
3
+ attributes: Record<string, string | true>;
4
+ className: string;
5
+ classList: Set<string>;
6
+ id: string;
7
+ hasAttr(key: string): boolean;
8
+ getAttr(key: string): string | true | undefined;
9
+ getAttrNames(): Set<string>;
10
+ getAttrs(): Record<string, string | true>;
11
+ setAttr(key: string, value: string | boolean): void;
12
+ setAttr(prop: Record<string, string | boolean>): void;
13
+ removeAttr(key: string): void;
14
+ toggleAttr(key: string, force?: boolean): void;
15
+ }
16
+ /**
17
+ * 子节点含有AttributesToken的类
18
+ * @param constructor 基类
19
+ * @param i AttributesToken子节点的位置
20
+ */
21
+ export declare const attributesParent: <T extends AstConstructor>(constructor: T, i?: number) => (abstract new (...args: any[]) => {
22
+ readonly childNodes: readonly AstNodes[];
23
+ /** AttributesToken子节点 */
24
+ readonly "__#7@#attributesChild": AttributesToken;
25
+ /** getAttrs()方法的getter写法 */
26
+ attributes: Record<string, string | true>;
27
+ /** 以字符串表示的class属性 */
28
+ className: string;
29
+ /** 以Set表示的class属性 */
30
+ classList: Set<string>;
31
+ /** id属性 */
32
+ id: string;
33
+ /**
34
+ * AttributesToken子节点是否具有某属性
35
+ * @param key 属性键
36
+ */
37
+ hasAttr(key: string): boolean;
38
+ /**
39
+ * 获取AttributesToken子节点的属性
40
+ * @param key 属性键
41
+ */
42
+ getAttr(key: string): string | true | undefined;
43
+ /** 列举AttributesToken子节点的属性键 */
44
+ getAttrNames(): Set<string>;
45
+ /** 获取AttributesToken子节点的全部标签属性 */
46
+ getAttrs(): Record<string, string | true>;
47
+ /**
48
+ * 对AttributesToken子节点设置属性
49
+ * @param key 属性键
50
+ * @param value 属性值
51
+ * @param prop 属性对象
52
+ */
53
+ setAttr(key: string, value: string | boolean): void;
54
+ /**
55
+ * 对AttributesToken子节点设置属性
56
+ * @param key 属性键
57
+ * @param value 属性值
58
+ * @param prop 属性对象
59
+ */
60
+ setAttr(prop: Record<string, string | boolean>): void;
61
+ /**
62
+ * 移除AttributesToken子节点的某属性
63
+ * @param key 属性键
64
+ */
65
+ removeAttr(key: string): void;
66
+ /**
67
+ * 开关AttributesToken子节点的某属性
68
+ * @param key 属性键
69
+ * @param force 强制开启或关闭
70
+ */
71
+ toggleAttr(key: string, force?: boolean): void;
72
+ toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
73
+ text(separator?: string | undefined): string;
74
+ insertAt(token: unknown, i?: number | undefined): unknown;
75
+ getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
76
+ setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
77
+ addEventListener(events: string | string[], listener: AstListener): void;
78
+ replaceChildren(...elements: (string | AstNodes)[]): void;
79
+ constructorError(msg: string): never;
80
+ }) & T;
@@ -0,0 +1,31 @@
1
+ import type { AstNodes, AstText } from '../internal';
2
+ export interface FixedTokenBase {
3
+ removeAt(): never;
4
+ }
5
+ /**
6
+ * 不可增删子节点的类
7
+ * @param constructor 基类
8
+ */
9
+ export declare const fixedToken: <S extends AstConstructor>(constructor: S) => (abstract new (...args: any[]) => {
10
+ /** @override */
11
+ removeAt(): never;
12
+ /**
13
+ * @override
14
+ * @param token 待插入的子节点
15
+ * @param i 插入位置
16
+ */
17
+ insertAt(token: string, i?: number): AstText;
18
+ /**
19
+ * @override
20
+ * @param token 待插入的子节点
21
+ * @param i 插入位置
22
+ */
23
+ insertAt<T extends AstNodes>(token: T, i?: number): T;
24
+ toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
25
+ text(separator?: string | undefined): string; /** @private */
26
+ getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
27
+ setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
28
+ addEventListener(events: string | string[], listener: AstListener): void;
29
+ replaceChildren(...elements: (string | AstNodes)[]): void;
30
+ constructorError(msg: string): never;
31
+ }) & S;
@@ -1,16 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fixed = void 0;
3
+ exports.fixedToken = void 0;
4
4
  const debug_1 = require("../util/debug");
5
5
  const constants_1 = require("../util/constants");
6
6
  /**
7
7
  * 不可增删子节点的类
8
8
  * @param constructor 基类
9
9
  */
10
- const fixed = (constructor) => {
10
+ const fixedToken = (constructor) => {
11
11
  /** 不可增删子节点的类 */
12
12
  class FixedToken extends constructor {
13
- static fixed = true;
13
+ /** @private */
14
+ get fixed() {
15
+ return true;
16
+ }
14
17
  /** @override */
15
18
  removeAt() {
16
19
  this.constructorError('不可删除元素');
@@ -21,5 +24,5 @@ const fixed = (constructor) => {
21
24
  }
22
25
  return FixedToken;
23
26
  };
24
- exports.fixed = fixed;
25
- constants_1.mixins['fixed'] = __filename;
27
+ exports.fixedToken = fixedToken;
28
+ constants_1.mixins['fixedToken'] = __filename;
@@ -0,0 +1,61 @@
1
+ import type { ConverterFlagsToken } from '../src/converterFlags';
2
+ export interface FlagsParentBase {
3
+ flags: Set<string>;
4
+ getAllFlags(): Set<string>;
5
+ getEffectiveFlags(): Set<string>;
6
+ getUnknownFlags(): Set<string>;
7
+ hasFlag(flag: string): boolean;
8
+ hasEffectiveFlag(flag: string): boolean;
9
+ removeFlag(flag: string): void;
10
+ setFlag(flag: string): void;
11
+ toggleFlag(flag: string): void;
12
+ }
13
+ /**
14
+ * ConverterToken
15
+ * @param constructor 基类
16
+ */
17
+ export declare const flagsParent: <T extends AstConstructor>(constructor: T) => (abstract new (...args: any[]) => {
18
+ readonly firstChild: ConverterFlagsToken;
19
+ readonly firstElementChild: ConverterFlagsToken;
20
+ /** 所有转换类型标记 */
21
+ flags: Set<string>;
22
+ /** 获取所有转换类型标记 */
23
+ getAllFlags(): Set<string>;
24
+ /** 获取有效的转换类型标记 */
25
+ getEffectiveFlags(): Set<string>;
26
+ /** 获取未知的转换类型标记 */
27
+ getUnknownFlags(): Set<string>;
28
+ /**
29
+ * 是否具有某转换类型标记
30
+ * @param flag 转换类型标记
31
+ */
32
+ hasFlag(flag: string): boolean;
33
+ /**
34
+ * 是否具有某有效的转换类型标记
35
+ * @param flag 转换类型标记
36
+ */
37
+ hasEffectiveFlag(flag: string): boolean;
38
+ /**
39
+ * 移除转换类型标记
40
+ * @param flag 转换类型标记
41
+ */
42
+ removeFlag(flag: string): void;
43
+ /**
44
+ * 设置转换类型标记
45
+ * @param flag 转换类型标记
46
+ */
47
+ setFlag(flag: string): void;
48
+ /**
49
+ * 开关某转换类型标记
50
+ * @param flag 转换类型标记
51
+ */
52
+ toggleFlag(flag: string): void;
53
+ toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
54
+ text(separator?: string | undefined): string;
55
+ insertAt(token: unknown, i?: number | undefined): unknown;
56
+ getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
57
+ setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
58
+ addEventListener(events: string | string[], listener: AstListener): void;
59
+ replaceChildren(...elements: (string | import("..").AstNodes)[]): void;
60
+ constructorError(msg: string): never;
61
+ }) & T;
@@ -0,0 +1,18 @@
1
+ import type { LintError } from '../base';
2
+ /**
3
+ * 解析后不可见的类
4
+ * @param constructor 基类
5
+ */
6
+ export declare const hiddenToken: <T extends AstConstructor>(constructor: T) => (abstract new (...args: any[]) => {
7
+ /** 没有可见部分 */
8
+ text(): string;
9
+ /** @override */
10
+ lint(): LintError[];
11
+ toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
12
+ insertAt(token: unknown, i?: number | undefined): unknown;
13
+ getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
14
+ setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
15
+ addEventListener(events: string | string[], listener: AstListener): void;
16
+ replaceChildren(...elements: (string | import("..").AstNodes)[]): void;
17
+ constructorError(msg: string): never;
18
+ }) & T;
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hidden = void 0;
3
+ exports.hiddenToken = void 0;
4
4
  const constants_1 = require("../util/constants");
5
5
  /**
6
6
  * 解析后不可见的类
7
7
  * @param constructor 基类
8
8
  */
9
- const hidden = (constructor) => {
9
+ const hiddenToken = (constructor) => {
10
10
  /** 解析后不可见的类 */
11
11
  class AnyHiddenToken extends constructor {
12
- static hidden = true;
13
12
  /** 没有可见部分 */
14
13
  text() {
15
14
  return '';
@@ -21,5 +20,5 @@ const hidden = (constructor) => {
21
20
  }
22
21
  return AnyHiddenToken;
23
22
  };
24
- exports.hidden = hidden;
25
- constants_1.mixins['hidden'] = __filename;
23
+ exports.hiddenToken = hiddenToken;
24
+ constants_1.mixins['hiddenToken'] = __filename;
@@ -0,0 +1,34 @@
1
+ import type { MagicLinkToken } from '../src/magicLink';
2
+ export interface MagicLinkParentBase {
3
+ protocol: string | undefined;
4
+ link: string;
5
+ getUrl(): URL;
6
+ setTarget(url: string): void;
7
+ }
8
+ /**
9
+ * ExtLinkToken
10
+ * @param constructor 基类
11
+ */
12
+ export declare const magicLinkParent: <T extends AstConstructor>(constructor: T) => (abstract new (...args: any[]) => {
13
+ readonly firstChild: MagicLinkToken;
14
+ readonly firstElementChild: MagicLinkToken;
15
+ /** 协议 */
16
+ protocol: string | undefined;
17
+ /** 和内链保持一致 */
18
+ link: string;
19
+ /** 获取网址 */
20
+ getUrl(): URL;
21
+ /**
22
+ * 设置链接目标
23
+ * @param url 网址
24
+ */
25
+ setTarget(url: string): void;
26
+ toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
27
+ text(separator?: string | undefined): string;
28
+ insertAt(token: unknown, i?: number | undefined): unknown;
29
+ getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
30
+ setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
31
+ addEventListener(events: string | string[], listener: AstListener): void;
32
+ replaceChildren(...elements: (string | import("..").AstNodes)[]): void;
33
+ constructorError(msg: string): never;
34
+ }) & T;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 不可包含换行符的类
3
+ * @param constructor 基类
4
+ */
5
+ export declare const singleLine: <T extends AstConstructor>(constructor: T) => (abstract new (...args: any[]) => {
6
+ /** @override */
7
+ text(): string;
8
+ insertAt(token: unknown, i?: number | undefined): unknown;
9
+ getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
10
+ setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
11
+ addEventListener(events: string | string[], listener: AstListener): void;
12
+ replaceChildren(...elements: (string | import("..").AstNodes)[]): void;
13
+ constructorError(msg: string): never;
14
+ }) & T;
@@ -0,0 +1,18 @@
1
+ export interface SolTokenBase {
2
+ prependNewLine(): string;
3
+ }
4
+ /**
5
+ * 只能位于行首的类
6
+ * @param constructor 基类
7
+ */
8
+ export declare const sol: <T extends AstConstructor>(constructor: T) => (abstract new (...args: any[]) => {
9
+ /** 在前方插入newline */
10
+ prependNewLine(): string;
11
+ /** @override */
12
+ text(): string;
13
+ insertAt(token: unknown, i?: number | undefined): unknown;
14
+ setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
15
+ addEventListener(events: string | string[], listener: AstListener): void;
16
+ replaceChildren(...elements: (string | import("..").AstNodes)[]): void; /** @private */
17
+ constructorError(msg: string): never;
18
+ }) & T;