wikiparser-node 0.11.0 → 1.0.0-beta.1

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 (252) hide show
  1. package/config/.schema.json +26 -0
  2. package/dist/index.d.ts +61 -113
  3. package/dist/index.js +314 -0
  4. package/dist/lib/element.d.ts +122 -108
  5. package/dist/lib/element.js +656 -0
  6. package/dist/lib/node.d.ts +115 -221
  7. package/dist/lib/node.js +473 -0
  8. package/dist/lib/ranges.d.ts +27 -26
  9. package/dist/lib/ranges.js +130 -0
  10. package/dist/lib/text.d.ts +36 -28
  11. package/dist/lib/text.js +215 -0
  12. package/dist/lib/title.d.ts +26 -12
  13. package/dist/lib/title.js +108 -0
  14. package/dist/mixin/attributesParent.js +90 -0
  15. package/dist/mixin/fixed.js +29 -0
  16. package/dist/mixin/hidden.js +19 -0
  17. package/dist/mixin/singleLine.js +23 -0
  18. package/dist/mixin/sol.js +41 -0
  19. package/dist/parser/brackets.js +118 -0
  20. package/dist/parser/commentAndExt.js +48 -0
  21. package/dist/parser/converter.js +31 -0
  22. package/dist/parser/externalLinks.js +22 -0
  23. package/dist/parser/hrAndDoubleUnderscore.js +35 -0
  24. package/dist/parser/html.js +29 -0
  25. package/dist/parser/links.js +86 -0
  26. package/dist/parser/list.js +51 -0
  27. package/dist/parser/magicLinks.js +32 -0
  28. package/dist/parser/quotes.js +57 -0
  29. package/dist/parser/selector.js +158 -0
  30. package/dist/parser/table.js +108 -0
  31. package/dist/src/arg.d.ts +47 -23
  32. package/dist/src/arg.js +196 -0
  33. package/dist/src/atom.d.ts +12 -0
  34. package/dist/src/atom.js +22 -0
  35. package/dist/src/attribute.d.ts +74 -33
  36. package/dist/src/attribute.js +433 -0
  37. package/dist/src/attributes.d.ts +61 -55
  38. package/dist/src/attributes.js +371 -0
  39. package/dist/src/converter.d.ts +45 -71
  40. package/dist/src/converter.js +135 -0
  41. package/dist/src/converterFlags.d.ts +64 -39
  42. package/dist/src/converterFlags.js +235 -0
  43. package/dist/src/converterRule.d.ts +49 -27
  44. package/dist/src/converterRule.js +255 -0
  45. package/dist/src/extLink.d.ts +41 -38
  46. package/dist/src/extLink.js +154 -0
  47. package/dist/src/gallery.d.ts +59 -18
  48. package/dist/src/gallery.js +132 -0
  49. package/dist/src/heading.d.ts +60 -22
  50. package/dist/src/heading.js +135 -0
  51. package/dist/src/hidden.d.ts +20 -0
  52. package/dist/src/hidden.js +24 -0
  53. package/dist/src/html.d.ts +83 -29
  54. package/dist/src/html.js +242 -0
  55. package/dist/src/imageParameter.d.ts +59 -40
  56. package/dist/src/imageParameter.js +251 -0
  57. package/dist/src/imagemap.d.ts +65 -21
  58. package/dist/src/imagemap.js +169 -0
  59. package/dist/src/imagemapLink.d.ts +46 -14
  60. package/dist/src/imagemapLink.js +38 -0
  61. package/dist/src/index.d.ts +71 -105
  62. package/dist/src/index.js +826 -0
  63. package/dist/src/link/base.d.ts +71 -0
  64. package/dist/src/link/base.js +225 -0
  65. package/dist/src/link/category.d.ts +10 -11
  66. package/dist/src/link/category.js +26 -0
  67. package/dist/src/link/file.d.ts +61 -39
  68. package/dist/src/link/file.js +242 -0
  69. package/dist/src/link/galleryImage.d.ts +34 -12
  70. package/dist/src/link/galleryImage.js +98 -0
  71. package/dist/src/link/index.d.ts +25 -63
  72. package/dist/src/link/index.js +136 -0
  73. package/dist/src/magicLink.d.ts +22 -15
  74. package/dist/src/magicLink.js +126 -0
  75. package/dist/src/nested.d.ts +47 -0
  76. package/dist/src/nested.js +84 -0
  77. package/dist/src/nowiki/base.d.ts +39 -0
  78. package/dist/src/nowiki/base.js +29 -0
  79. package/dist/src/nowiki/comment.d.ts +31 -20
  80. package/dist/src/nowiki/comment.js +61 -0
  81. package/dist/src/nowiki/dd.d.ts +17 -11
  82. package/dist/src/nowiki/dd.js +50 -0
  83. package/dist/src/nowiki/doubleUnderscore.d.ts +28 -13
  84. package/dist/src/nowiki/doubleUnderscore.js +45 -0
  85. package/dist/src/nowiki/hr.d.ts +28 -10
  86. package/dist/src/nowiki/hr.js +33 -0
  87. package/dist/src/nowiki/index.d.ts +17 -23
  88. package/dist/src/nowiki/index.js +21 -0
  89. package/dist/src/nowiki/list.d.ts +15 -7
  90. package/dist/src/nowiki/list.js +11 -0
  91. package/dist/src/nowiki/noinclude.d.ts +20 -7
  92. package/dist/src/nowiki/noinclude.js +22 -0
  93. package/dist/src/nowiki/quote.d.ts +25 -10
  94. package/dist/src/nowiki/quote.js +55 -0
  95. package/dist/src/onlyinclude.d.ts +28 -12
  96. package/dist/src/onlyinclude.js +64 -0
  97. package/dist/src/paramTag/index.d.ts +40 -17
  98. package/dist/src/paramTag/index.js +76 -0
  99. package/dist/src/paramTag/inputbox.d.ts +8 -7
  100. package/dist/src/paramTag/inputbox.js +19 -0
  101. package/dist/src/parameter.d.ts +62 -41
  102. package/dist/src/parameter.js +201 -0
  103. package/dist/src/pre.d.ts +32 -0
  104. package/dist/src/pre.js +39 -0
  105. package/dist/src/syntax.d.ts +17 -14
  106. package/dist/src/syntax.js +65 -0
  107. package/dist/src/table/base.d.ts +55 -0
  108. package/dist/src/table/base.js +77 -0
  109. package/dist/src/table/index.d.ts +123 -156
  110. package/dist/src/table/index.js +811 -0
  111. package/dist/src/table/td.d.ts +90 -67
  112. package/dist/src/table/td.js +276 -0
  113. package/dist/src/table/tr.d.ts +30 -85
  114. package/dist/src/table/tr.js +48 -0
  115. package/dist/src/table/trBase.d.ts +72 -0
  116. package/dist/src/table/trBase.js +153 -0
  117. package/dist/src/tagPair/ext.d.ts +47 -11
  118. package/dist/src/tagPair/ext.js +127 -0
  119. package/dist/src/tagPair/include.d.ts +32 -13
  120. package/dist/src/tagPair/include.js +40 -0
  121. package/dist/src/tagPair/index.d.ts +44 -29
  122. package/dist/src/tagPair/index.js +111 -0
  123. package/dist/src/transclude.d.ts +88 -85
  124. package/dist/src/transclude.js +739 -0
  125. package/dist/util/base.js +26 -0
  126. package/dist/util/debug.js +52 -0
  127. package/dist/util/diff.js +69 -0
  128. package/dist/util/lint.js +38 -0
  129. package/dist/util/string.js +103 -0
  130. package/errors/README +1 -0
  131. package/i18n/zh-hans.json +1 -0
  132. package/i18n/zh-hant.json +1 -0
  133. package/package.json +21 -24
  134. package/printed/README +1 -0
  135. package/dist/mixin/attributeParent.d.ts +0 -9
  136. package/dist/mixin/fixedToken.d.ts +0 -8
  137. package/dist/mixin/hidden.d.ts +0 -8
  138. package/dist/mixin/singleLine.d.ts +0 -8
  139. package/dist/mixin/sol.d.ts +0 -8
  140. package/dist/parser/brackets.d.ts +0 -12
  141. package/dist/parser/commentAndExt.d.ts +0 -8
  142. package/dist/parser/converter.d.ts +0 -7
  143. package/dist/parser/externalLinks.d.ts +0 -7
  144. package/dist/parser/hrAndDoubleUnderscore.d.ts +0 -11
  145. package/dist/parser/html.d.ts +0 -7
  146. package/dist/parser/links.d.ts +0 -7
  147. package/dist/parser/list.d.ts +0 -7
  148. package/dist/parser/magicLinks.d.ts +0 -7
  149. package/dist/parser/quotes.d.ts +0 -7
  150. package/dist/parser/selector.d.ts +0 -12
  151. package/dist/parser/table.d.ts +0 -11
  152. package/dist/src/atom/hidden.d.ts +0 -5
  153. package/dist/src/atom/index.d.ts +0 -15
  154. package/dist/src/charinsert.d.ts +0 -32
  155. package/dist/src/hasNowiki/index.d.ts +0 -14
  156. package/dist/src/hasNowiki/pre.d.ts +0 -13
  157. package/dist/src/nested/choose.d.ts +0 -13
  158. package/dist/src/nested/combobox.d.ts +0 -13
  159. package/dist/src/nested/index.d.ts +0 -18
  160. package/dist/src/nested/references.d.ts +0 -13
  161. package/dist/tool/index.d.ts +0 -420
  162. package/dist/util/base.d.ts +0 -10
  163. package/dist/util/debug.d.ts +0 -20
  164. package/dist/util/diff.d.ts +0 -8
  165. package/dist/util/lint.d.ts +0 -28
  166. package/dist/util/string.d.ts +0 -55
  167. package/index.js +0 -333
  168. package/lib/element.js +0 -618
  169. package/lib/node.js +0 -730
  170. package/lib/ranges.js +0 -130
  171. package/lib/text.js +0 -265
  172. package/lib/title.js +0 -83
  173. package/mixin/attributeParent.js +0 -117
  174. package/mixin/fixedToken.js +0 -40
  175. package/mixin/hidden.js +0 -21
  176. package/mixin/singleLine.js +0 -31
  177. package/mixin/sol.js +0 -54
  178. package/parser/brackets.js +0 -128
  179. package/parser/commentAndExt.js +0 -62
  180. package/parser/converter.js +0 -46
  181. package/parser/externalLinks.js +0 -33
  182. package/parser/hrAndDoubleUnderscore.js +0 -49
  183. package/parser/html.js +0 -42
  184. package/parser/links.js +0 -94
  185. package/parser/list.js +0 -59
  186. package/parser/magicLinks.js +0 -41
  187. package/parser/quotes.js +0 -64
  188. package/parser/selector.js +0 -180
  189. package/parser/table.js +0 -114
  190. package/src/arg.js +0 -207
  191. package/src/atom/hidden.js +0 -13
  192. package/src/atom/index.js +0 -43
  193. package/src/attribute.js +0 -472
  194. package/src/attributes.js +0 -453
  195. package/src/charinsert.js +0 -97
  196. package/src/converter.js +0 -176
  197. package/src/converterFlags.js +0 -284
  198. package/src/converterRule.js +0 -256
  199. package/src/extLink.js +0 -180
  200. package/src/gallery.js +0 -149
  201. package/src/hasNowiki/index.js +0 -44
  202. package/src/hasNowiki/pre.js +0 -40
  203. package/src/heading.js +0 -134
  204. package/src/html.js +0 -254
  205. package/src/imageParameter.js +0 -303
  206. package/src/imagemap.js +0 -199
  207. package/src/imagemapLink.js +0 -41
  208. package/src/index.js +0 -938
  209. package/src/link/category.js +0 -44
  210. package/src/link/file.js +0 -287
  211. package/src/link/galleryImage.js +0 -120
  212. package/src/link/index.js +0 -388
  213. package/src/magicLink.js +0 -151
  214. package/src/nested/choose.js +0 -24
  215. package/src/nested/combobox.js +0 -23
  216. package/src/nested/index.js +0 -96
  217. package/src/nested/references.js +0 -23
  218. package/src/nowiki/comment.js +0 -71
  219. package/src/nowiki/dd.js +0 -59
  220. package/src/nowiki/doubleUnderscore.js +0 -56
  221. package/src/nowiki/hr.js +0 -41
  222. package/src/nowiki/index.js +0 -56
  223. package/src/nowiki/list.js +0 -16
  224. package/src/nowiki/noinclude.js +0 -28
  225. package/src/nowiki/quote.js +0 -69
  226. package/src/onlyinclude.js +0 -64
  227. package/src/paramTag/index.js +0 -89
  228. package/src/paramTag/inputbox.js +0 -35
  229. package/src/parameter.js +0 -239
  230. package/src/syntax.js +0 -91
  231. package/src/table/index.js +0 -985
  232. package/src/table/td.js +0 -343
  233. package/src/table/tr.js +0 -319
  234. package/src/tagPair/ext.js +0 -146
  235. package/src/tagPair/include.js +0 -50
  236. package/src/tagPair/index.js +0 -131
  237. package/src/transclude.js +0 -843
  238. package/tool/index.js +0 -1209
  239. package/typings/api.d.ts +0 -9
  240. package/typings/array.d.ts +0 -29
  241. package/typings/event.d.ts +0 -22
  242. package/typings/index.d.ts +0 -118
  243. package/typings/node.d.ts +0 -35
  244. package/typings/parser.d.ts +0 -12
  245. package/typings/table.d.ts +0 -10
  246. package/typings/token.d.ts +0 -31
  247. package/typings/tool.d.ts +0 -6
  248. package/util/base.js +0 -17
  249. package/util/debug.js +0 -73
  250. package/util/diff.js +0 -76
  251. package/util/lint.js +0 -57
  252. package/util/string.js +0 -126
package/index.js DELETED
@@ -1,333 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('fs'),
4
- path = require('path');
5
-
6
- const /** @type {import('./typings')} */ Parser = {
7
- config: './config/default',
8
- i18n: undefined,
9
-
10
- MAX_STAGE: 11,
11
-
12
- warning: true,
13
- debugging: false,
14
- running: false,
15
-
16
- classes: {},
17
- mixins: {},
18
- parsers: {},
19
- tool: {},
20
-
21
- aliases: [
22
- ['AstText'],
23
- ['CommentToken', 'ExtToken', 'IncludeToken', 'NoincludeToken'],
24
- ['ArgToken', 'TranscludeToken', 'HeadingToken'],
25
- ['HtmlToken'],
26
- ['TableToken'],
27
- ['HrToken', 'DoubleUnderscoreToken'],
28
- ['LinkToken', 'FileToken', 'CategoryToken'],
29
- ['QuoteToken'],
30
- ['ExtLinkToken'],
31
- ['MagicLinkToken'],
32
- ['ListToken', 'DdToken'],
33
- ['ConverterToken'],
34
- ],
35
- typeAliases: {
36
- text: ['string', 'str'],
37
- plain: ['regular', 'normal'],
38
- // comment and extension
39
- onlyinclude: ['only-include'],
40
- noinclude: ['no-include'],
41
- include: ['includeonly', 'include-only'],
42
- comment: undefined,
43
- ext: ['extension'],
44
- 'ext-attrs': ['extension-attrs', 'ext-attributes', 'extension-attributes'],
45
- 'ext-attr-dirty': ['extension-attr-dirty', 'ext-attribute-dirty', 'extension-attribute-dirty'],
46
- 'ext-attr': ['extension-attr', 'ext-attribute', 'extension-attribute'],
47
- 'attr-key': ['attribute-key'],
48
- 'attr-value': ['attribute-value', 'attr-val', 'attribute-val'],
49
- 'ext-inner': ['extension-inner'],
50
- // triple brackets
51
- arg: ['argument'],
52
- 'arg-name': ['argument-name'],
53
- 'arg-default': ['argument-default'],
54
- hidden: ['arg-redundant'],
55
- // double brackets
56
- 'magic-word': ['parser-function', 'parser-func'],
57
- 'magic-word-name': ['parser-function-name', 'parser-func-name'],
58
- 'invoke-function': ['invoke-func', 'lua-function', 'lua-func', 'module-function', 'module-func'],
59
- 'invoke-module': ['lua-module'],
60
- template: undefined,
61
- 'template-name': undefined,
62
- parameter: ['param'],
63
- 'parameter-key': ['param-key'],
64
- 'parameter-value': ['parameter-val', 'param-value', 'param-val'],
65
- // heading
66
- heading: ['header'],
67
- 'heading-title': ['header-title'],
68
- 'heading-trail': ['header-trail'],
69
- // html
70
- html: undefined,
71
- 'html-attrs': ['html-attributes'],
72
- 'html-attr-dirty': ['html-attribute-dirty'],
73
- 'html-attr': ['html-attribute'],
74
- // table
75
- table: undefined,
76
- tr: ['table-row'],
77
- td: ['table-cell', 'table-data'],
78
- 'table-syntax': undefined,
79
- 'table-attrs': ['tr-attrs', 'td-attrs', 'table-attributes', 'tr-attributes', 'td-attributes'],
80
- 'table-attr-dirty':
81
- ['tr-attr-dirty', 'td-attr-dirty', 'table-attribute-dirty', 'tr-attribute-dirty', 'td-attribute-dirty'],
82
- 'table-attr': ['tr-attr', 'td-attr', 'table-attribute', 'tr-attribute', 'td-attribute'],
83
- 'table-inter': undefined,
84
- 'td-inner': ['table-cell-inner', 'table-data-inner'],
85
- // hr and double-underscore
86
- hr: ['horizontal'],
87
- 'double-underscore': ['underscore', 'behavior-switch', 'behaviour-switch'],
88
- // link
89
- link: ['wikilink'],
90
- 'link-target': ['wikilink-target'],
91
- 'link-text': ['wikilink-text'],
92
- category: ['category-link', 'cat', 'cat-link'],
93
- file: ['file-link', 'image', 'image-link', 'img', 'img-link'],
94
- 'gallery-image': ['gallery-file', 'gallery-img'],
95
- 'imagemap-image': ['imagemap-file', 'imagemap-img', 'image-map-image', 'image-map-file', 'image-map-img'],
96
- 'image-parameter': ['img-parameter', 'image-param', 'img-param'],
97
- // quotes
98
- quote: ['quotes', 'quot', 'apostrophe', 'apostrophes', 'apos'],
99
- // external link
100
- 'ext-link': ['external-link'],
101
- 'ext-link-text': ['external-link-text'],
102
- 'ext-link-url': ['external-link-url'],
103
- // magic link
104
- 'free-ext-link': ['free-external-link', 'magic-link'],
105
- // list
106
- list: ['ol', 'ordered-list', 'ul', 'unordered-list', 'dl', 'description-list'],
107
- dd: ['indent', 'indentation'],
108
- // converter
109
- converter: ['convert', 'conversion'],
110
- 'converter-flags': ['convert-flags', 'conversion-flags'],
111
- 'converter-flag': ['convert-flag', 'conversion-flag'],
112
- 'converter-rule': ['convert-rule', 'conversion-rule'],
113
- 'converter-rule-noconvert': ['convert-rule-noconvert', 'conversion-rule-noconvert'],
114
- 'converter-rule-variant': ['convert-rule-variant', 'conversion-rule-variant'],
115
- 'converter-rule-to': ['convert-rule-to', 'conversion-rule-to'],
116
- 'converter-rule-from': ['convert-rule-from', 'conversion-rule-from'],
117
- // specific extensions
118
- 'param-line': ['parameter-line'],
119
- 'charinsert-line': undefined,
120
- 'imagemap-link': ['image-map-link'],
121
- },
122
-
123
- promises: [Promise.resolve()],
124
-
125
- getConfig() {
126
- if (typeof this.config === 'string') {
127
- this.config = require(this.config);
128
- }
129
- return {...this.config, excludes: []};
130
- },
131
-
132
- msg(msg, arg) {
133
- if (typeof this.i18n === 'string') {
134
- this.i18n = require(this.i18n);
135
- }
136
- msg = this.i18n?.[msg] ?? msg;
137
- return msg.replace('$1', arg);
138
- },
139
-
140
- normalizeTitle(
141
- title,
142
- defaultNs = 0,
143
- include = false,
144
- config = Parser.getConfig(),
145
- halfParsed = false,
146
- decode = false,
147
- selfLink = false,
148
- ) {
149
- let /** @type {Token} */ token;
150
- if (!halfParsed) {
151
- const Token = require('./src');
152
- token = this.run(() => {
153
- const newToken = new Token(String(title), config),
154
- parseOnce = newToken.getAttribute('parseOnce');
155
- parseOnce(0, include);
156
- return parseOnce();
157
- });
158
- title = token.firstChild;
159
- }
160
- const Title = require('./lib/title');
161
- const titleObj = new Title(String(title), defaultNs, config, decode, selfLink);
162
- if (token) {
163
- /**
164
- * 重建部分属性值
165
- * @param {string[]} keys 属性键
166
- */
167
- const build = keys => {
168
- for (const key of keys) {
169
- if (titleObj[key]?.includes('\0')) {
170
- titleObj[key] = token.getAttribute('buildFromStr')(titleObj[key], 'text');
171
- }
172
- }
173
- };
174
- this.run(() => {
175
- build(['title', 'main', 'fragment']);
176
- });
177
- }
178
- return titleObj;
179
- },
180
-
181
- parse(wikitext, include, maxStage = Parser.MAX_STAGE, config = Parser.getConfig()) {
182
- if (typeof wikitext !== 'string') {
183
- throw new TypeError('待解析的内容应为 String!');
184
- }
185
- const Token = require('./src');
186
- let /** @type {Token} */ token;
187
- this.run(() => {
188
- token = new Token(wikitext, config);
189
- try {
190
- token.parse(maxStage, include);
191
- } catch (e) {
192
- if (e instanceof Error) {
193
- const file = path.join(__dirname, 'errors', new Date().toISOString()),
194
- stage = token.getAttribute('stage');
195
- fs.writeFileSync(file, stage === this.MAX_STAGE ? wikitext : String(token));
196
- fs.writeFileSync(`${file}.err`, e.stack);
197
- fs.writeFileSync(`${file}.json`, JSON.stringify({
198
- stage, include: token.getAttribute('include'), config: this.config,
199
- }, null, '\t'));
200
- }
201
- throw e;
202
- }
203
- });
204
- if (this.debugging) {
205
- let restored = String(token),
206
- process = '解析';
207
- if (restored === wikitext) {
208
- const entities = {lt: '<', gt: '>', amp: '&'};
209
- restored = token.print().replace(
210
- /<[^<]+?>|&([lg]t|amp);/gu,
211
- /** @param {string} s */ (_, s) => s ? entities[s] : '',
212
- );
213
- process = '渲染HTML';
214
- }
215
- if (restored !== wikitext) {
216
- const diff = require('./util/diff');
217
- const {promises: {0: cur, length}} = this;
218
- this.promises.unshift((async () => {
219
- await cur;
220
- this.error(`${process}过程中不可逆地修改了原始文本!`);
221
- return diff(wikitext, restored, length);
222
- })());
223
- }
224
- }
225
- return token;
226
- },
227
-
228
- run(callback) {
229
- const {running} = this;
230
- this.running = true;
231
- try {
232
- const result = callback();
233
- this.running = running;
234
- return result;
235
- } catch (e) {
236
- this.running = running;
237
- throw e;
238
- }
239
- },
240
-
241
- warn(msg, ...args) {
242
- if (this.warning) {
243
- console.warn('\x1B[33m%s\x1B[0m', msg, ...args);
244
- }
245
- },
246
- debug(msg, ...args) {
247
- if (this.debugging) {
248
- console.debug('\x1B[34m%s\x1B[0m', msg, ...args);
249
- }
250
- },
251
- error(msg, ...args) {
252
- console.error('\x1B[31m%s\x1B[0m', msg, ...args);
253
- },
254
- info(msg, ...args) {
255
- console.info('\x1B[32m%s\x1B[0m', msg, ...args);
256
- },
257
-
258
- log(f) {
259
- if (typeof f === 'function') {
260
- console.log(String(f));
261
- }
262
- },
263
-
264
- clearCache() {
265
- const entries = [
266
- ...Object.entries(this.classes),
267
- ...Object.entries(this.mixins),
268
- ...Object.entries(this.parsers),
269
- ...Object.entries(this.tool),
270
- ];
271
- for (const [, filePath] of entries) {
272
- try {
273
- delete require.cache[require.resolve(filePath)];
274
- } catch {}
275
- }
276
- for (const [name, filePath] of entries) {
277
- if (name in global) {
278
- global[name] = require(filePath);
279
- }
280
- }
281
- },
282
-
283
- isInterwiki(title, {interwiki} = Parser.getConfig()) {
284
- title = String(title);
285
- return new RegExp(`^(${interwiki.join('|')})\\s*:`, 'iu')
286
- .exec(title.replaceAll('_', ' ').replace(/^\s*:?\s*/u, ''));
287
- },
288
-
289
- reparse(date) {
290
- const main = fs.readdirSync(path.join(__dirname, 'errors'))
291
- .find(name => name.startsWith(date) && name.endsWith('Z'));
292
- if (!main) {
293
- throw new RangeError(`找不到对应时间戳的错误记录:${date}`);
294
- }
295
- const file = path.join(__dirname, 'errors', main),
296
- wikitext = fs.readFileSync(file, 'utf8');
297
- const {stage, include, config} = require(`${file}.json`),
298
- Token = require('./src');
299
- this.config = config;
300
- return this.run(() => {
301
- const halfParsed = stage < this.MAX_STAGE,
302
- token = new Token(wikitext, this.getConfig(), halfParsed);
303
- if (halfParsed) {
304
- token.setAttribute('stage', stage).getAttribute('parseOnce')(stage, include);
305
- } else {
306
- token.parse(undefined, include);
307
- }
308
- fs.unlinkSync(file);
309
- fs.unlinkSync(`${file}.err`);
310
- fs.unlinkSync(`${file}.json`);
311
- return token;
312
- });
313
- },
314
-
315
- getTool() {
316
- delete require.cache[require.resolve('./tool')];
317
- return require('./tool');
318
- },
319
- };
320
-
321
- const /** @type {PropertyDescriptorMap} */ def = {},
322
- immutable = new Set(['MAX_STAGE', 'aliases', 'typeAliases', 'promises']),
323
- enumerable = new Set(['config', 'normalizeTitle', 'parse', 'isInterwiki', 'getTool']);
324
- for (const key in Parser) {
325
- if (immutable.has(key)) {
326
- def[key] = {enumerable: false, writable: false};
327
- } else if (!enumerable.has(key)) {
328
- def[key] = {enumerable: false};
329
- }
330
- }
331
- Object.defineProperties(Parser, def);
332
-
333
- module.exports = Parser;