wikiparser-node 1.4.2-b → 1.4.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 (162) hide show
  1. package/config/.schema.json +172 -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.d.ts +6 -0
  7. package/dist/addon/table.js +560 -0
  8. package/dist/base.d.ts +53 -0
  9. package/dist/index.d.ts +32 -0
  10. package/dist/index.js +211 -0
  11. package/dist/internal.d.ts +44 -0
  12. package/dist/lib/element.d.ts +154 -0
  13. package/dist/lib/element.js +643 -0
  14. package/dist/lib/node.d.ts +146 -0
  15. package/dist/lib/node.js +425 -0
  16. package/dist/lib/range.d.ts +104 -0
  17. package/dist/lib/range.js +385 -0
  18. package/dist/lib/ranges.d.ts +26 -0
  19. package/dist/lib/ranges.js +118 -0
  20. package/dist/lib/text.d.ts +62 -0
  21. package/dist/lib/text.js +306 -0
  22. package/dist/lib/title.d.ts +38 -0
  23. package/dist/lib/title.js +172 -0
  24. package/dist/mixin/attributesParent.d.ts +20 -0
  25. package/dist/mixin/attributesParent.js +89 -0
  26. package/dist/mixin/fixed.d.ts +5 -0
  27. package/dist/mixin/fixed.js +28 -0
  28. package/dist/mixin/flagsParent.d.ts +61 -0
  29. package/dist/mixin/flagsParent.js +72 -0
  30. package/dist/mixin/hidden.d.ts +5 -0
  31. package/dist/mixin/hidden.js +24 -0
  32. package/dist/mixin/magicLinkParent.d.ts +34 -0
  33. package/dist/mixin/magicLinkParent.js +43 -0
  34. package/dist/mixin/singleLine.d.ts +5 -0
  35. package/dist/mixin/singleLine.js +25 -0
  36. package/dist/mixin/sol.d.ts +8 -0
  37. package/dist/mixin/sol.js +41 -0
  38. package/dist/mixin/syntax.d.ts +6 -0
  39. package/dist/mixin/syntax.js +54 -0
  40. package/dist/parser/braces.js +131 -0
  41. package/dist/parser/commentAndExt.js +90 -0
  42. package/dist/parser/converter.js +41 -0
  43. package/dist/parser/externalLinks.js +32 -0
  44. package/dist/parser/hrAndDoubleUnderscore.js +41 -0
  45. package/dist/parser/html.js +39 -0
  46. package/dist/parser/links.js +97 -0
  47. package/dist/parser/list.js +68 -0
  48. package/dist/parser/magicLinks.js +43 -0
  49. package/dist/parser/quotes.js +68 -0
  50. package/dist/parser/selector.js +162 -0
  51. package/dist/parser/table.js +124 -0
  52. package/dist/src/arg.d.ts +58 -0
  53. package/dist/src/arg.js +196 -0
  54. package/dist/src/atom.d.ts +12 -0
  55. package/dist/src/atom.js +27 -0
  56. package/dist/src/attribute.d.ts +67 -0
  57. package/dist/src/attribute.js +422 -0
  58. package/dist/src/attributes.d.ts +109 -0
  59. package/dist/src/attributes.js +347 -0
  60. package/dist/src/converter.d.ts +28 -0
  61. package/dist/src/converter.js +85 -0
  62. package/dist/src/converterFlags.d.ts +87 -0
  63. package/dist/src/converterFlags.js +227 -0
  64. package/dist/src/converterRule.d.ts +77 -0
  65. package/dist/src/converterRule.js +210 -0
  66. package/dist/src/extLink.d.ts +38 -0
  67. package/dist/src/extLink.js +137 -0
  68. package/dist/src/gallery.d.ts +54 -0
  69. package/dist/src/gallery.js +127 -0
  70. package/dist/src/heading.d.ts +47 -0
  71. package/dist/src/heading.js +143 -0
  72. package/dist/src/hidden.d.ts +7 -0
  73. package/dist/src/hidden.js +23 -0
  74. package/dist/src/html.d.ts +62 -0
  75. package/dist/src/html.js +286 -0
  76. package/dist/src/imageParameter.d.ts +65 -0
  77. package/dist/src/imageParameter.js +247 -0
  78. package/dist/src/imagemap.d.ts +56 -0
  79. package/dist/src/imagemap.js +156 -0
  80. package/dist/src/imagemapLink.d.ts +28 -0
  81. package/dist/src/imagemapLink.js +44 -0
  82. package/dist/src/index.d.ts +143 -0
  83. package/dist/src/index.js +804 -0
  84. package/dist/src/link/base.d.ts +52 -0
  85. package/dist/src/link/base.js +212 -0
  86. package/dist/src/link/category.d.ts +13 -0
  87. package/dist/src/link/category.js +28 -0
  88. package/dist/src/link/file.d.ts +96 -0
  89. package/dist/src/link/file.js +266 -0
  90. package/dist/src/link/galleryImage.d.ts +31 -0
  91. package/dist/src/link/galleryImage.js +109 -0
  92. package/dist/src/link/index.d.ts +56 -0
  93. package/dist/src/link/index.js +134 -0
  94. package/dist/src/magicLink.d.ts +51 -0
  95. package/dist/src/magicLink.js +149 -0
  96. package/dist/src/nested.d.ts +43 -0
  97. package/dist/src/nested.js +91 -0
  98. package/dist/src/nowiki/base.d.ts +27 -0
  99. package/dist/src/nowiki/base.js +42 -0
  100. package/dist/src/nowiki/comment.d.ts +27 -0
  101. package/dist/src/nowiki/comment.js +77 -0
  102. package/dist/src/nowiki/dd.d.ts +8 -0
  103. package/dist/src/nowiki/dd.js +24 -0
  104. package/dist/src/nowiki/doubleUnderscore.d.ts +18 -0
  105. package/dist/src/nowiki/doubleUnderscore.js +51 -0
  106. package/dist/src/nowiki/hr.d.ts +8 -0
  107. package/dist/src/nowiki/hr.js +14 -0
  108. package/dist/src/nowiki/index.d.ts +16 -0
  109. package/dist/src/nowiki/index.js +20 -0
  110. package/dist/src/nowiki/list.d.ts +19 -0
  111. package/dist/src/nowiki/list.js +48 -0
  112. package/dist/src/nowiki/listBase.d.ts +5 -0
  113. package/dist/src/nowiki/listBase.js +11 -0
  114. package/dist/src/nowiki/noinclude.d.ts +10 -0
  115. package/dist/src/nowiki/noinclude.js +23 -0
  116. package/dist/src/nowiki/quote.d.ts +14 -0
  117. package/dist/src/nowiki/quote.js +68 -0
  118. package/dist/src/onlyinclude.d.ts +16 -0
  119. package/dist/src/onlyinclude.js +57 -0
  120. package/dist/src/paramTag/index.d.ts +37 -0
  121. package/dist/src/paramTag/index.js +68 -0
  122. package/dist/src/paramTag/inputbox.d.ts +8 -0
  123. package/dist/src/paramTag/inputbox.js +22 -0
  124. package/dist/src/parameter.d.ts +67 -0
  125. package/dist/src/parameter.js +213 -0
  126. package/dist/src/pre.d.ts +28 -0
  127. package/dist/src/pre.js +54 -0
  128. package/dist/src/syntax.d.ts +14 -0
  129. package/dist/src/syntax.js +35 -0
  130. package/dist/src/table/base.d.ts +27 -0
  131. package/dist/src/table/base.js +81 -0
  132. package/dist/src/table/index.d.ts +230 -0
  133. package/dist/src/table/index.js +390 -0
  134. package/dist/src/table/td.d.ts +88 -0
  135. package/dist/src/table/td.js +284 -0
  136. package/dist/src/table/tr.d.ts +32 -0
  137. package/dist/src/table/tr.js +57 -0
  138. package/dist/src/table/trBase.d.ts +53 -0
  139. package/dist/src/table/trBase.js +154 -0
  140. package/dist/src/tagPair/ext.d.ts +29 -0
  141. package/dist/src/tagPair/ext.js +153 -0
  142. package/dist/src/tagPair/include.d.ts +37 -0
  143. package/dist/src/tagPair/include.js +71 -0
  144. package/dist/src/tagPair/index.d.ts +27 -0
  145. package/dist/src/tagPair/index.js +79 -0
  146. package/dist/src/transclude.d.ts +167 -0
  147. package/dist/src/transclude.js +715 -0
  148. package/dist/util/constants.js +113 -0
  149. package/dist/util/debug.js +90 -0
  150. package/dist/util/diff.js +82 -0
  151. package/dist/util/lint.js +30 -0
  152. package/dist/util/string.js +53 -0
  153. package/errors/README +1 -0
  154. package/package.json +15 -30
  155. package/printed/README +1 -0
  156. package/bundle/bundle.min.js +0 -36
  157. package/extensions/dist/base.js +0 -64
  158. package/extensions/dist/editor.js +0 -159
  159. package/extensions/dist/highlight.js +0 -59
  160. package/extensions/dist/lint.js +0 -48
  161. package/extensions/editor.css +0 -63
  162. package/extensions/ui.css +0 -141
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.promises = exports.typeAliases = exports.aliases = exports.parsers = exports.mixins = exports.classes = exports.BuildMethod = exports.MAX_STAGE = void 0;
4
+ exports.MAX_STAGE = 11;
5
+ var BuildMethod;
6
+ (function (BuildMethod) {
7
+ BuildMethod[BuildMethod["String"] = 0] = "String";
8
+ BuildMethod[BuildMethod["Text"] = 1] = "Text";
9
+ })(BuildMethod || (exports.BuildMethod = BuildMethod = {}));
10
+ /* NOT FOR BROWSER */
11
+ exports.classes = {};
12
+ exports.mixins = {};
13
+ exports.parsers = {};
14
+ exports.aliases = [
15
+ ['AstText'],
16
+ ['CommentToken', 'ExtToken', 'IncludeToken', 'NoincludeToken'],
17
+ ['ArgToken', 'TranscludeToken', 'HeadingToken'],
18
+ ['HtmlToken'],
19
+ ['TableToken'],
20
+ ['HrToken', 'DoubleUnderscoreToken'],
21
+ ['LinkToken', 'FileToken', 'CategoryToken'],
22
+ ['QuoteToken'],
23
+ ['ExtLinkToken'],
24
+ ['MagicLinkToken'],
25
+ ['ListToken', 'DdToken'],
26
+ ['ConverterToken'],
27
+ ];
28
+ exports.typeAliases = {
29
+ text: ['string', 'str'],
30
+ plain: ['regular', 'normal'],
31
+ root: undefined,
32
+ // comment and extension
33
+ onlyinclude: ['only-include'],
34
+ noinclude: ['no-include'],
35
+ include: ['includeonly', 'include-only'],
36
+ comment: undefined,
37
+ ext: ['extension'],
38
+ 'ext-attrs': ['extension-attrs', 'ext-attributes', 'extension-attributes'],
39
+ 'ext-attr-dirty': ['extension-attr-dirty', 'ext-attribute-dirty', 'extension-attribute-dirty'],
40
+ 'ext-attr': ['extension-attr', 'ext-attribute', 'extension-attribute'],
41
+ 'attr-key': ['attribute-key'],
42
+ 'attr-value': ['attribute-value', 'attr-val', 'attribute-val'],
43
+ 'ext-inner': ['extension-inner'],
44
+ // triple braces
45
+ arg: ['argument'],
46
+ 'arg-name': ['argument-name'],
47
+ 'arg-default': ['argument-default'],
48
+ hidden: ['arg-redundant'],
49
+ // double braces
50
+ 'magic-word': ['parser-function', 'parser-func'],
51
+ 'magic-word-name': ['parser-function-name', 'parser-func-name'],
52
+ 'invoke-function': ['invoke-func', 'lua-function', 'lua-func', 'module-function', 'module-func'],
53
+ 'invoke-module': ['lua-module'],
54
+ template: undefined,
55
+ 'template-name': undefined,
56
+ parameter: ['param'],
57
+ 'parameter-key': ['param-key'],
58
+ 'parameter-value': ['parameter-val', 'param-value', 'param-val'],
59
+ // heading
60
+ heading: ['header'],
61
+ 'heading-title': ['header-title'],
62
+ 'heading-trail': ['header-trail'],
63
+ // html
64
+ html: undefined,
65
+ 'html-attrs': ['html-attributes'],
66
+ 'html-attr-dirty': ['html-attribute-dirty'],
67
+ 'html-attr': ['html-attribute'],
68
+ // table
69
+ table: undefined,
70
+ tr: ['table-row'],
71
+ td: ['table-cell', 'table-data'],
72
+ 'table-syntax': undefined,
73
+ 'table-attrs': ['tr-attrs', 'td-attrs', 'table-attributes', 'tr-attributes', 'td-attributes'],
74
+ 'table-attr-dirty': ['tr-attr-dirty', 'td-attr-dirty', 'table-attribute-dirty', 'tr-attribute-dirty', 'td-attribute-dirty'],
75
+ 'table-attr': ['tr-attr', 'td-attr', 'table-attribute', 'tr-attribute', 'td-attribute'],
76
+ 'table-inter': undefined,
77
+ 'td-inner': ['table-cell-inner', 'table-data-inner'],
78
+ // hr and double-underscore
79
+ hr: ['horizontal'],
80
+ 'double-underscore': ['underscore', 'behavior-switch', 'behaviour-switch'],
81
+ // link
82
+ link: ['wikilink'],
83
+ 'link-target': ['wikilink-target'],
84
+ 'link-text': ['wikilink-text'],
85
+ category: ['category-link', 'cat', 'cat-link'],
86
+ file: ['file-link', 'image', 'image-link', 'img', 'img-link'],
87
+ 'gallery-image': ['gallery-file', 'gallery-img'],
88
+ 'imagemap-image': ['imagemap-file', 'imagemap-img', 'image-map-image', 'image-map-file', 'image-map-img'],
89
+ 'image-parameter': ['img-parameter', 'image-param', 'img-param'],
90
+ // quotes
91
+ quote: ['quotes', 'quot', 'apostrophe', 'apostrophes', 'apos'],
92
+ // external link
93
+ 'ext-link': ['external-link'],
94
+ 'ext-link-text': ['external-link-text'],
95
+ 'ext-link-url': ['external-link-url'],
96
+ // magic link
97
+ 'free-ext-link': ['free-external-link', 'magic-link'],
98
+ // list
99
+ list: ['ol', 'ordered-list', 'ul', 'unordered-list', 'dl', 'description-list'],
100
+ dd: ['indent', 'indentation'],
101
+ // converter
102
+ converter: ['convert', 'conversion'],
103
+ 'converter-flags': ['convert-flags', 'conversion-flags'],
104
+ 'converter-flag': ['convert-flag', 'conversion-flag'],
105
+ 'converter-rule': ['convert-rule', 'conversion-rule'],
106
+ 'converter-rule-variant': ['convert-rule-variant', 'conversion-rule-variant'],
107
+ 'converter-rule-to': ['convert-rule-to', 'conversion-rule-to', 'converter-rule-noconvert'],
108
+ 'converter-rule-from': ['convert-rule-from', 'conversion-rule-from'],
109
+ // specific extensions
110
+ 'param-line': ['parameter-line'],
111
+ 'imagemap-link': ['image-map-link'],
112
+ };
113
+ exports.promises = [Promise.resolve()];
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.undo = exports.emptyArray = exports.setChildNodes = exports.isToken = exports.Shadow = void 0;
4
+ exports.Shadow = {
5
+ /* NOT FOR BROWSER */
6
+ running: false,
7
+ /* NOT FOR BROWSER END */
8
+ /** @private */
9
+ run(callback) {
10
+ /* NOT FOR BROWSER */
11
+ const { running } = this;
12
+ this.running = true;
13
+ try {
14
+ /* NOT FOR BROWSER END */
15
+ const result = callback();
16
+ /* NOT FOR BROWSER */
17
+ this.running = running;
18
+ /* NOT FOR BROWSER END */
19
+ return result;
20
+ /* NOT FOR BROWSER */
21
+ }
22
+ catch (e) {
23
+ this.running = running;
24
+ throw e;
25
+ }
26
+ },
27
+ };
28
+ /**
29
+ * 是否是某一特定类型的节点
30
+ * @param type 节点类型
31
+ */
32
+ const isToken = (type) => (node) => node.type === type;
33
+ exports.isToken = isToken;
34
+ /**
35
+ * 更新chldNodes
36
+ * @param parent 父节点
37
+ * @param position 子节点位置
38
+ * @param deleteCount 移除的子节点数量
39
+ * @param inserted 插入的子节点
40
+ */
41
+ const setChildNodes = (parent, position, deleteCount, inserted = []) => {
42
+ const childNodes = [...parent.childNodes], removed = childNodes.splice(position, deleteCount, ...inserted);
43
+ parent.setAttribute('childNodes', childNodes);
44
+ for (const node of inserted) {
45
+ node.setAttribute('parentNode', parent);
46
+ }
47
+ /* NOT FOR BROWSER */
48
+ for (const node of removed) {
49
+ node.setAttribute('parentNode', undefined);
50
+ }
51
+ /* NOT FOR BROWSER END */
52
+ return removed;
53
+ };
54
+ exports.setChildNodes = setChildNodes;
55
+ /* NOT FOR BROWSER */
56
+ /**
57
+ * 生成一个指定长度的空数组
58
+ * @param n 数组长度
59
+ * @param callback 回调函数
60
+ */
61
+ const emptyArray = (n, callback) => new Array(n).fill(undefined).map((_, i) => callback(i));
62
+ exports.emptyArray = emptyArray;
63
+ /**
64
+ * 撤销最近一次Mutation
65
+ * @param e 事件
66
+ * @param data 事件数据
67
+ * @throws `RangeError` 无法撤销的事件类型
68
+ */
69
+ const undo = (e, data) => {
70
+ const { target, type } = e;
71
+ switch (data.type) {
72
+ case 'remove':
73
+ (0, exports.setChildNodes)(target, data.position, 0, [data.removed]);
74
+ break;
75
+ case 'insert':
76
+ (0, exports.setChildNodes)(target, data.position, 1);
77
+ break;
78
+ case 'replace':
79
+ (0, exports.setChildNodes)(target.parentNode, data.position, 1, [data.oldToken]);
80
+ break;
81
+ case 'text':
82
+ if (target.type === 'text') {
83
+ target.replaceData(data.oldText);
84
+ }
85
+ break;
86
+ default:
87
+ throw new RangeError(`无法撤销未知类型的事件:${String(type)}`);
88
+ }
89
+ };
90
+ exports.undo = undo;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.info = exports.error = exports.diff = exports.cmd = void 0;
4
+ const fs = require("fs/promises");
5
+ const child_process_1 = require("child_process");
6
+ process.on('unhandledRejection', e => {
7
+ console.error(e);
8
+ });
9
+ /**
10
+ * 将shell命令转化为Promise对象
11
+ * @param command shell指令
12
+ * @param args shell输入参数
13
+ */
14
+ const cmd = (command, args) => new Promise(resolve => {
15
+ let timer, shell;
16
+ /**
17
+ * 清除进程并返回
18
+ * @param val 返回值
19
+ */
20
+ const r = (val) => {
21
+ clearTimeout(timer);
22
+ shell?.kill('SIGINT');
23
+ resolve(val);
24
+ };
25
+ try {
26
+ shell = (0, child_process_1.spawn)(command, args);
27
+ timer = setTimeout(() => {
28
+ shell.kill('SIGINT');
29
+ }, 60 * 1000);
30
+ let buf = '';
31
+ shell.stdout.on('data', data => {
32
+ buf += String(data);
33
+ });
34
+ shell.stdout.on('end', () => {
35
+ r(buf);
36
+ });
37
+ shell.on('exit', () => {
38
+ r(shell.killed ? undefined : '');
39
+ });
40
+ shell.on('error', () => {
41
+ r(undefined);
42
+ });
43
+ }
44
+ catch {
45
+ r(undefined);
46
+ }
47
+ });
48
+ exports.cmd = cmd;
49
+ /**
50
+ * 比较两个文件
51
+ * @param oldStr 旧文本
52
+ * @param newStr 新文本
53
+ * @param uid 唯一标识
54
+ */
55
+ const diff = async (oldStr, newStr, uid = -1) => {
56
+ if (oldStr === newStr) {
57
+ return;
58
+ }
59
+ const oldFile = `diffOld${uid}`, newFile = `diffNew${uid}`;
60
+ await Promise.all([fs.writeFile(oldFile, oldStr), fs.writeFile(newFile, newStr)]);
61
+ const stdout = await (0, exports.cmd)('git', [
62
+ 'diff',
63
+ '--color-words=[\xC0-\xFF][\x80-\xBF]+|<?/?\\w+/?>?|[^[:space:]]',
64
+ '-U0',
65
+ '--no-index',
66
+ oldFile,
67
+ newFile,
68
+ ]);
69
+ await Promise.all([fs.unlink(oldFile), fs.unlink(newFile)]);
70
+ console.log(stdout?.split('\n').slice(4).join('\n'));
71
+ };
72
+ exports.diff = diff;
73
+ /** @implements */
74
+ const error = (msg, ...args) => {
75
+ console.error('\x1B[31m%s\x1B[0m', msg, ...args);
76
+ };
77
+ exports.error = error;
78
+ /** @implements */
79
+ const info = (msg, ...args) => {
80
+ console.info('\x1B[32m%s\x1B[0m', msg, ...args);
81
+ };
82
+ exports.info = info;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateForSelf = exports.generateForChild = void 0;
4
+ const index_1 = require("../index");
5
+ /**
6
+ * 生成lint函数
7
+ * @param func lint函数
8
+ */
9
+ const factory = (func) => (token, boundingRect, msg, severity = 'error') => {
10
+ const { start } = boundingRect, { top, left } = 'top' in boundingRect ? boundingRect : token.getRootNode().posFromIndex(start), { offsetHeight, offsetWidth } = token, { startIndex, startLine, startCol } = func(token, start, top, left);
11
+ return {
12
+ message: index_1.default.msg(msg),
13
+ severity,
14
+ startIndex,
15
+ endIndex: startIndex + String(token).length,
16
+ startLine,
17
+ endLine: startLine + offsetHeight - 1,
18
+ startCol,
19
+ endCol: offsetHeight === 1 ? startCol + offsetWidth : offsetWidth,
20
+ };
21
+ };
22
+ exports.generateForChild = factory((child, start, line, col) => {
23
+ const index = child.getRelativeIndex(), { top, left } = child.parentNode.posFromIndex(index);
24
+ return {
25
+ startIndex: start + index,
26
+ startLine: line + top,
27
+ startCol: top ? left : col + left,
28
+ };
29
+ });
30
+ exports.generateForSelf = factory((_, startIndex, startLine, startCol) => ({ startIndex, startLine, startCol }));
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeSpace = exports.print = exports.noWrap = exports.decodeHtml = exports.text = exports.escapeRegExp = exports.removeComment = exports.tidy = exports.extUrlChar = exports.extUrlCharFirst = void 0;
4
+ exports.extUrlCharFirst = '(?:\\[[\\da-f:.]+\\]|[^[\\]<>"\0-\x1F\x7F\\p{Zs}\uFFFD])';
5
+ exports.extUrlChar = '(?:[^[\\]<>"\0-\x1F\x7F\\p{Zs}\uFFFD]|\0\\d+[c!~]\x7F)*';
6
+ /**
7
+ * 生成正则替换函数
8
+ * @param regex 正则表达式
9
+ * @param replace 替换字符串或函数
10
+ */
11
+ const factory = (regex, replace) => (str) => str.replace(regex, replace);
12
+ /** 清理解析专用的不可见字符 */
13
+ exports.tidy = factory(/[\0\x7F]/gu, '');
14
+ /** remove half-parsed comment-like tokens */
15
+ exports.removeComment = factory(/\0\d+c\x7F/gu, '');
16
+ /** escape special chars for RegExp constructor */
17
+ exports.escapeRegExp = factory(/[\\{}()|.?*+^$[\]]/gu, '\\$&');
18
+ /**
19
+ * extract effective wikitext
20
+ * @param childNodes a Token's contents
21
+ * @param separator delimiter between nodes
22
+ */
23
+ const text = (childNodes, separator = '') => childNodes.map(child => typeof child === 'string' ? child : child.text()).join(separator);
24
+ exports.text = text;
25
+ /** decode HTML entities */
26
+ exports.decodeHtml = factory(/&#(\d+|x[\da-f]+);/giu, (_, code) => String.fromCodePoint(Number(`${code.toLowerCase().startsWith('x') ? '0' : ''}${code}`)));
27
+ /** escape newlines */
28
+ exports.noWrap = factory(/\n/gu, '\\n');
29
+ /**
30
+ * 以HTML格式打印
31
+ * @param childNodes 子节点
32
+ * @param opt 选项
33
+ */
34
+ const print = (childNodes, opt = {}) => {
35
+ const { pre = '', post = '', sep = '' } = opt;
36
+ return `${pre}${childNodes.map(child => child.print()).join(sep)}${post}`;
37
+ };
38
+ exports.print = print;
39
+ /* NOT FOR BROWSER */
40
+ /**
41
+ * convert newline in text nodes to single whitespace
42
+ * @param token 父节点
43
+ */
44
+ const normalizeSpace = (token) => {
45
+ if (token) {
46
+ for (const child of token.childNodes) {
47
+ if (child.type === 'text') {
48
+ child.replaceData(child.data.replace(/\n+/gu, ' '));
49
+ }
50
+ }
51
+ }
52
+ };
53
+ exports.normalizeSpace = normalizeSpace;
package/errors/README ADDED
@@ -0,0 +1 @@
1
+ 这里记录解析失败时处于半解析状态的维基文本以及错误信息。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wikiparser-node",
3
- "version": "1.4.2-b",
3
+ "version": "1.4.2",
4
4
  "description": "A Node.js parser for MediaWiki markup with AST",
5
5
  "keywords": [
6
6
  "mediawiki",
@@ -14,52 +14,40 @@
14
14
  "license": "GPL-3.0",
15
15
  "author": "Bhsd",
16
16
  "files": [
17
- "/bundle/bundle.min.js",
18
- "/extensions/dist/",
19
- "/extensions/*.css",
20
- "!/extensions/dist/gh-page.js",
21
- "!/extensions/gh-page.css",
17
+ "/errors/README",
18
+ "/printed/README",
22
19
  "/config/",
23
20
  "/i18n/",
24
- "!/config/.schema.json"
21
+ "/dist/",
22
+ "!/dist/[bt]*/"
25
23
  ],
26
- "browser": "/bundle/bundle.min.js",
27
- "main": "./bundle/bundle.js",
28
- "types": "./extensions/typings.d.ts",
24
+ "main": "./dist/index.js",
29
25
  "repository": {
30
26
  "type": "git",
31
27
  "url": "git+https://github.com/bhsd-harry/wikiparser-node.git"
32
28
  },
33
29
  "scripts": {
34
- "prepublishOnly": "npm run build:prod && npm run build:ext",
35
- "build:dev": "esbuild index.ts --bundle --target=es2018 --outfile=bundle/bundle.js",
36
- "build:prod": "esbuild index.ts --bundle --minify --target=es2018 --outfile=bundle/bundle.min.js",
37
- "build:core": "rm bundle/*.js; npm run build:dev && npm run build:prod && eslint --no-eslintrc -c .eslintrc.browser.json bundle/",
38
- "build:ext": "bash build-ext.sh",
39
- "build": "npm run build:core && npm run build:ext",
30
+ "toc": "node ./dist/bin/toc.js",
31
+ "declaration": "grep -rl --include='*.d.ts' '@private' dist/ | xargs bash sed.sh -i -E '/^\\s+\\/\\*\\* @private/,+1d'; node ./dist/bin/declaration.js",
32
+ "prepublishOnly": "npm run build && rm dist/internal.js dist/base.js dist/[pu]*/*.d.ts",
33
+ "build": "bash build.sh",
40
34
  "diff": "git diff --ignore-all-space --color-moved",
41
- "lint:ts": "tsc --noEmit && tsc --noEmit --project extensions/tsconfig.json && eslint --cache .",
35
+ "lint:ts": "tsc --noEmit && eslint --cache .",
42
36
  "lint:json": "ajv -s config/.schema.json -d 'config/*.json' --strict=true --strict-required=false",
43
- "lint:css": "stylelint extensions/*.css",
44
- "lint": "npm run lint:ts && npm run lint:json && npm run lint:css",
45
- "server": "npm run test:end; http-server .. -c-1 --cors &",
46
- "test": "npm run build:prod && npm run build:ext && npm run server",
37
+ "lint": "npm run lint:ts && npm run lint:json",
38
+ "test": "node dist/test/test.js",
47
39
  "test:end": "pkill -x http-server",
48
- "test:real": "tsc --project tsconfig.test.json && node dist/test/real.js",
49
- "test:single": "node dist/test/single.js"
40
+ "test:real": "node dist/test/real.js",
41
+ "test:single": "node dist/test/single.js && node --prof dist/test/single.js && node --prof-process isolate-0x*-v8.log > test/processed.txt && rm isolate-0x*-v8.log"
50
42
  },
51
43
  "devDependencies": {
52
- "@bhsd/codemirror-mediawiki": "^2.1.11",
53
- "@codemirror/lint": "^6.4.2",
54
44
  "@cypress/request": "^3.0.1",
55
45
  "@stylistic/eslint-plugin": "^1.5.4",
56
- "@stylistic/stylelint-plugin": "^2.0.0",
57
46
  "@types/node": "^20.11.6",
58
47
  "@types/request": "^2.48.12",
59
48
  "@typescript-eslint/eslint-plugin": "^6.19.1",
60
49
  "@typescript-eslint/parser": "^6.19.1",
61
50
  "ajv-cli": "^5.0.0",
62
- "esbuild": "^0.19.12",
63
51
  "eslint": "^8.56.0",
64
52
  "eslint-plugin-es-x": "^7.5.0",
65
53
  "eslint-plugin-eslint-comments": "^3.2.0",
@@ -69,9 +57,6 @@
69
57
  "eslint-plugin-promise": "^6.1.1",
70
58
  "eslint-plugin-regexp": "^2.2.0",
71
59
  "eslint-plugin-unicorn": "^50.0.1",
72
- "http-server": "^14.1.0",
73
- "stylelint": "^16.1.0",
74
- "stylelint-config-recommended": "^14.0.0",
75
60
  "typescript": "^5.3.3"
76
61
  },
77
62
  "engines": {
package/printed/README ADDED
@@ -0,0 +1 @@
1
+ 这里存放以 JSON 格式打印的 AST。