@jayfong/x-utils 1.0.0-202407012223

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 (77) hide show
  1. package/_cjs/ai.js +80 -0
  2. package/_cjs/cli.js +51 -0
  3. package/_cjs/clipboard.js +65 -0
  4. package/_cjs/cmd.js +42 -0
  5. package/_cjs/crawler.js +341 -0
  6. package/_cjs/csv.js +97 -0
  7. package/_cjs/data_set.js +115 -0
  8. package/_cjs/env.js +63 -0
  9. package/_cjs/fs.js +35 -0
  10. package/_cjs/html.js +62 -0
  11. package/_cjs/http_server.js +56 -0
  12. package/_cjs/json.js +49 -0
  13. package/_cjs/ksb.js +217 -0
  14. package/_cjs/number.js +39 -0
  15. package/_cjs/ocr.js +74 -0
  16. package/_cjs/path.js +35 -0
  17. package/_cjs/pinyin.js +32 -0
  18. package/_cjs/puppeteer.js +271 -0
  19. package/_cjs/runner.js +88 -0
  20. package/_cjs/task.js +41 -0
  21. package/_cjs/text.js +136 -0
  22. package/_cjs/unicode/lib_unicode.js +58643 -0
  23. package/_cjs/unicode/unicode.js +441 -0
  24. package/_cjs/upload.js +100 -0
  25. package/_cjs/yaml.js +52 -0
  26. package/ai.d.ts +26 -0
  27. package/ai.js +60 -0
  28. package/cli.d.ts +14 -0
  29. package/cli.js +21 -0
  30. package/clipboard.d.ts +6 -0
  31. package/clipboard.js +35 -0
  32. package/cmd.d.ts +5 -0
  33. package/cmd.js +22 -0
  34. package/crawler.d.ts +162 -0
  35. package/crawler.js +332 -0
  36. package/csv.d.ts +14 -0
  37. package/csv.js +67 -0
  38. package/data_set.d.ts +22 -0
  39. package/data_set.js +85 -0
  40. package/env.d.ts +4 -0
  41. package/env.js +32 -0
  42. package/fs.d.ts +2 -0
  43. package/fs.js +5 -0
  44. package/html.d.ts +7 -0
  45. package/html.js +45 -0
  46. package/http_server.d.ts +10 -0
  47. package/http_server.js +26 -0
  48. package/json.d.ts +6 -0
  49. package/json.js +19 -0
  50. package/ksb.d.ts +32 -0
  51. package/ksb.js +197 -0
  52. package/number.d.ts +3 -0
  53. package/number.js +9 -0
  54. package/ocr.d.ts +10 -0
  55. package/ocr.js +54 -0
  56. package/ofd.d.ts +1 -0
  57. package/package.json +158 -0
  58. package/path.d.ts +2 -0
  59. package/path.js +5 -0
  60. package/pinyin.d.ts +3 -0
  61. package/pinyin.js +12 -0
  62. package/puppeteer.d.ts +38 -0
  63. package/puppeteer.js +241 -0
  64. package/runner.d.ts +13 -0
  65. package/runner.js +58 -0
  66. package/task.d.ts +6 -0
  67. package/task.js +21 -0
  68. package/text.d.ts +63 -0
  69. package/text.js +119 -0
  70. package/unicode/lib_unicode.d.ts +4 -0
  71. package/unicode/lib_unicode.js +58623 -0
  72. package/unicode/unicode.d.ts +347 -0
  73. package/unicode/unicode.js +426 -0
  74. package/upload.d.ts +22 -0
  75. package/upload.js +70 -0
  76. package/yaml.d.ts +6 -0
  77. package/yaml.js +22 -0
package/_cjs/ocr.js ADDED
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ocr_exports = {};
20
+ __export(ocr_exports, {
21
+ XOcr: () => XOcr
22
+ });
23
+ module.exports = __toCommonJS(ocr_exports);
24
+ var import_x_request = require("@jayfong/x-request");
25
+ var import_env = require("./env.js");
26
+ class XOcr {
27
+ static async recognize(url, {
28
+ serverUrl
29
+ } = {}) {
30
+ if (serverUrl == null) {
31
+ serverUrl = await import_env.XEnv.getEnvVar("X_OCR_RECOGNIZE_SERVER_URL");
32
+ }
33
+ const { data: buffer } = await import_x_request.xr.get({
34
+ url,
35
+ autoReferer: true
36
+ });
37
+ const base64 = buffer.toString("base64");
38
+ const { data: res } = await import_x_request.xr.postJson({
39
+ url: serverUrl,
40
+ data: {
41
+ base64,
42
+ options: {}
43
+ }
44
+ });
45
+ if (res.code !== 100) {
46
+ if (res.data.includes("No text found in image")) {
47
+ return "";
48
+ }
49
+ throw new Error(res.data);
50
+ }
51
+ return res.data.map((item) => item.text).join(" ");
52
+ }
53
+ static async recognizeCaptcha(buffer, {
54
+ serverUrl,
55
+ serverToken
56
+ } = {}) {
57
+ if (serverUrl == null) {
58
+ serverUrl = await import_env.XEnv.getEnvVar("X_OCR_RECOGNIZE_CAPTCHA_SERVER_URL");
59
+ }
60
+ if (serverToken == null) {
61
+ serverToken = await import_env.XEnv.getEnvVar(
62
+ "X_OCR_RECOGNIZE_CAPTCHA_SERVER_TOKEN"
63
+ );
64
+ }
65
+ const res = await import_x_request.xr.postJson({
66
+ url: serverUrl,
67
+ data: import_x_request.xr.formData({
68
+ token: serverToken,
69
+ file: import_x_request.xr.formFile(buffer, { name: "xx.png" })
70
+ })
71
+ });
72
+ return res.data.text;
73
+ }
74
+ }
package/_cjs/path.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var path_exports = {};
30
+ __export(path_exports, {
31
+ XPath: () => XPath
32
+ });
33
+ module.exports = __toCommonJS(path_exports);
34
+ var import_pathe = __toESM(require("pathe"), 1);
35
+ const XPath = import_pathe.default;
package/_cjs/pinyin.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var pinyin_exports = {};
20
+ __export(pinyin_exports, {
21
+ XPinyin: () => XPinyin
22
+ });
23
+ module.exports = __toCommonJS(pinyin_exports);
24
+ var import_pinyin_pro = require("pinyin-pro");
25
+ class XPinyin {
26
+ static getTonelessPinyin(text) {
27
+ return (0, import_pinyin_pro.pinyin)(text, {
28
+ type: "array",
29
+ toneType: "none"
30
+ });
31
+ }
32
+ }
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var puppeteer_exports = {};
30
+ __export(puppeteer_exports, {
31
+ XPuppeteer: () => XPuppeteer
32
+ });
33
+ module.exports = __toCommonJS(puppeteer_exports);
34
+ var import_x_request = require("@jayfong/x-request");
35
+ var import_exit_hook = require("exit-hook");
36
+ var import_puppeteer = __toESM(require("puppeteer"), 1);
37
+ var import_vtils = require("vtils");
38
+ var import_clipboard = require("./clipboard.js");
39
+ class XPuppeteer {
40
+ browser;
41
+ async connectSystemBrowser() {
42
+ const {
43
+ data: { webSocketDebuggerUrl }
44
+ } = await import_x_request.xr.getJson({
45
+ url: "http://localhost:9222/json/version"
46
+ });
47
+ const browser = await import_puppeteer.default.connect({
48
+ browserWSEndpoint: webSocketDebuggerUrl,
49
+ // 都设为 0 以保持原有的宽高
50
+ defaultViewport: {
51
+ width: 0,
52
+ height: 0
53
+ }
54
+ });
55
+ this.browser = browser;
56
+ (0, import_exit_hook.asyncExitHook)(() => this.disconnect(), {
57
+ wait: 1e3
58
+ });
59
+ return browser;
60
+ }
61
+ async openBrowser(options = {}) {
62
+ const browser = await import_puppeteer.default.launch({
63
+ headless: options.headful ? false : true,
64
+ defaultViewport: {
65
+ width: 1440,
66
+ height: 900
67
+ },
68
+ userDataDir: options.dataDir,
69
+ args: options.proxy ? [`--proxy-server=${options.proxy}`] : void 0
70
+ });
71
+ this.browser = browser;
72
+ (0, import_exit_hook.asyncExitHook)(() => this.close(), {
73
+ wait: 1e3
74
+ });
75
+ return browser;
76
+ }
77
+ async openPage(urlOrHtml, options = {}) {
78
+ const isUrl = /^https?:\/\//i.test(urlOrHtml);
79
+ const pages = await this.browser.pages();
80
+ if (isUrl) {
81
+ const inputUrl = new URL(urlOrHtml);
82
+ const foundPage = pages.find((item) => {
83
+ const pageUrl = item.url();
84
+ const url = new URL(pageUrl);
85
+ return inputUrl.origin === url.origin && (pageUrl === urlOrHtml || !!options.match && (typeof options.match === "string" ? `${url.pathname}${url.search}`.includes(options.match) : options.match.test(`${url.pathname}${url.search}`)));
86
+ });
87
+ if (foundPage) {
88
+ return foundPage;
89
+ }
90
+ }
91
+ const page2 = await this.browser.newPage();
92
+ await page2.setUserAgent(
93
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
94
+ );
95
+ if (options.blockAssets) {
96
+ await page2.setRequestInterception(true);
97
+ page2.on("request", (req) => {
98
+ const resourceType = req.resourceType();
99
+ if (resourceType === "stylesheet" || resourceType === "font" || resourceType === "image") {
100
+ req.abort();
101
+ } else {
102
+ req.continue();
103
+ }
104
+ });
105
+ }
106
+ if (isUrl) {
107
+ await page2.goto(urlOrHtml, {
108
+ referer: options.referer || urlOrHtml
109
+ });
110
+ } else {
111
+ await page2.setContent(urlOrHtml);
112
+ }
113
+ return page2;
114
+ }
115
+ async input(page2, selector, textOrHtml, frameIndex) {
116
+ const mainPage = page2;
117
+ const keyboard = page2.keyboard;
118
+ if (frameIndex != null) {
119
+ page2 = page2.frames()[frameIndex];
120
+ }
121
+ const el2 = await page2.$(selector);
122
+ const isText = await el2.evaluate((el3) => {
123
+ const isInput = el3.tagName === "INPUT" || el3.tagName === "TEXTAREA";
124
+ const isText2 = isInput || el3.tagName === "SPAN";
125
+ return isText2;
126
+ });
127
+ if (isText) {
128
+ await import_clipboard.XClipboard.writeText(textOrHtml);
129
+ } else {
130
+ await import_clipboard.XClipboard.writeHtml(textOrHtml);
131
+ }
132
+ await el2.click();
133
+ await this.selectAll(page2);
134
+ await keyboard.press("Backspace");
135
+ await this.paste(mainPage);
136
+ }
137
+ async selectAll(page2) {
138
+ await page2.evaluate(() => {
139
+ const isMac = /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);
140
+ document.activeElement.dispatchEvent(
141
+ new KeyboardEvent("keydown", {
142
+ bubbles: true,
143
+ cancelable: true,
144
+ key: isMac ? "Meta" : "Control",
145
+ code: isMac ? "MetaLeft" : "ControlLeft",
146
+ location: window.KeyboardEvent.DOM_KEY_LOCATION_LEFT,
147
+ // @ts-ignore
148
+ getModifierState: (keyArg) => keyArg === (isMac ? "Meta" : "Control"),
149
+ ctrlKey: !isMac,
150
+ metaKey: isMac,
151
+ charCode: 0,
152
+ keyCode: isMac ? 93 : 17,
153
+ which: isMac ? 93 : 17
154
+ })
155
+ );
156
+ const preventableEvent = new KeyboardEvent("keydown", {
157
+ bubbles: true,
158
+ cancelable: true,
159
+ key: "a",
160
+ code: "KeyA",
161
+ location: window.KeyboardEvent.DOM_KEY_LOCATION_STANDARD,
162
+ // @ts-ignore
163
+ getModifierState: (keyArg) => keyArg === (isMac ? "Meta" : "Control"),
164
+ ctrlKey: !isMac,
165
+ metaKey: isMac,
166
+ charCode: 0,
167
+ keyCode: 65,
168
+ which: 65
169
+ });
170
+ const wasPrevented = !document.activeElement.dispatchEvent(preventableEvent) || preventableEvent.defaultPrevented;
171
+ if (!wasPrevented) {
172
+ document.execCommand("selectall", false, null);
173
+ }
174
+ document.activeElement.dispatchEvent(
175
+ new KeyboardEvent("keyup", {
176
+ bubbles: true,
177
+ cancelable: true,
178
+ key: isMac ? "Meta" : "Control",
179
+ code: isMac ? "MetaLeft" : "ControlLeft",
180
+ location: window.KeyboardEvent.DOM_KEY_LOCATION_LEFT,
181
+ // @ts-ignore
182
+ getModifierState: () => false,
183
+ charCode: 0,
184
+ keyCode: isMac ? 93 : 17,
185
+ which: isMac ? 93 : 17
186
+ })
187
+ );
188
+ });
189
+ }
190
+ async paste(page2) {
191
+ await page2.keyboard.down("Shift");
192
+ await page2.keyboard.press("Insert");
193
+ await page2.keyboard.up("Shift");
194
+ }
195
+ async queryByText(page, text) {
196
+ const el = await page.evaluateHandle(
197
+ (text, isRegExp, isFunction) => {
198
+ const textRe = isRegExp ? (() => {
199
+ const m = text.match(/^\/(.+)\/([^/]*)$/);
200
+ return new RegExp(m[1], m[2] || void 0);
201
+ })() : void 0;
202
+ const textFn = isFunction ? eval(`(() => {return ${text}})()`) : void 0;
203
+ const walker = document.createTreeWalker(
204
+ document.body,
205
+ NodeFilter.SHOW_TEXT,
206
+ {
207
+ acceptNode: (node) => {
208
+ return (isRegExp ? textRe.test(node.textContent) : isFunction ? textFn(node) : node.textContent.includes(text)) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
209
+ }
210
+ }
211
+ );
212
+ walker.nextNode();
213
+ return walker.currentNode.parentElement;
214
+ },
215
+ String(text),
216
+ (0, import_vtils.isRegExp)(text),
217
+ (0, import_vtils.isFunction)(text)
218
+ );
219
+ return el;
220
+ }
221
+ async disconnect() {
222
+ await this.browser.disconnect();
223
+ }
224
+ async close() {
225
+ await this.browser.close();
226
+ }
227
+ static async openBrowser(options = {}) {
228
+ const xp = new XPuppeteer();
229
+ await xp.openBrowser(options);
230
+ return xp;
231
+ }
232
+ static async openPage(urlOrHtml, options = {}) {
233
+ const xp = new XPuppeteer();
234
+ await xp.openBrowser(options);
235
+ const page2 = await xp.openPage(urlOrHtml, options);
236
+ page2.close = () => xp.close();
237
+ return page2;
238
+ }
239
+ static getPageHtmlXp = (0, import_vtils.memoize)(
240
+ async (options) => {
241
+ const xp = new XPuppeteer();
242
+ await (options.useSystemBrowser ? xp.connectSystemBrowser() : xp.openBrowser(options));
243
+ return xp;
244
+ },
245
+ (options) => options.instanceId
246
+ );
247
+ static async getPageHtml(url, options = {}) {
248
+ const hasInstanceId = !!options.instanceId;
249
+ options.instanceId ||= Date.now();
250
+ const xp = await XPuppeteer.getPageHtmlXp(options);
251
+ try {
252
+ const page2 = await xp.openPage(url, options);
253
+ if (options.afterOpenPage) {
254
+ await options.afterOpenPage({
255
+ browser: xp,
256
+ page: page2
257
+ });
258
+ }
259
+ const html = await page2.content();
260
+ return html;
261
+ } finally {
262
+ if (!hasInstanceId) {
263
+ if (options.useSystemBrowser) {
264
+ await xp.disconnect();
265
+ } else {
266
+ await xp.close();
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
package/_cjs/runner.js ADDED
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var runner_exports = {};
30
+ __export(runner_exports, {
31
+ XRunner: () => XRunner
32
+ });
33
+ module.exports = __toCommonJS(runner_exports);
34
+ var import_inquirer = __toESM(require("inquirer"), 1);
35
+ var import_vtils = require("vtils");
36
+ var import_fs = require("./fs.js");
37
+ class XRunner {
38
+ constructor(options) {
39
+ this.options = options;
40
+ }
41
+ async run() {
42
+ await import_fs.XFs.ensureFile(this.options.configFile);
43
+ const savedConfig = await import_fs.XFs.readJson(this.options.configFile, { throws: false }) || {};
44
+ const config = await import_inquirer.default.prompt(
45
+ this.options.questions.map((item) => {
46
+ return {
47
+ ...item,
48
+ default: savedConfig[item.name] ?? item.default
49
+ };
50
+ })
51
+ );
52
+ await import_fs.XFs.writeJson(this.options.configFile, config, { spaces: 2 });
53
+ let retryCount = 0;
54
+ while (true) {
55
+ try {
56
+ await this.options.run(config);
57
+ retryCount = 0;
58
+ } catch (err) {
59
+ const delay = typeof this.options.delay === "function" ? this.options.delay(retryCount) : this.options.delay;
60
+ console.log(err);
61
+ console.log(`\u6267\u884C\u62A5\u9519, \u7B49\u5F85${delay}`);
62
+ await (0, import_vtils.wait)((0, import_vtils.ms)(delay));
63
+ retryCount++;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ new XRunner({
69
+ configFile: "./temp/test.json",
70
+ delay: "1s",
71
+ questions: [
72
+ {
73
+ name: "perCount",
74
+ message: "\u6BCF\u8F6E\u5904\u7406\u6761\u6570",
75
+ type: "number",
76
+ default: 500
77
+ },
78
+ {
79
+ name: "concurrencyCount",
80
+ message: "\u6BCF\u8F6E\u5E76\u884C\u5904\u7406\u6761\u6570",
81
+ type: "number",
82
+ default: 1
83
+ }
84
+ ],
85
+ run: (config) => {
86
+ console.log(config);
87
+ }
88
+ }).run();
package/_cjs/task.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var task_exports = {};
20
+ __export(task_exports, {
21
+ XTask: () => XTask
22
+ });
23
+ module.exports = __toCommonJS(task_exports);
24
+ var import_consola = require("consola");
25
+ var import_exit_hook = require("exit-hook");
26
+ class XTask {
27
+ log = import_consola.consola;
28
+ async dispose() {
29
+ }
30
+ run() {
31
+ (0, import_exit_hook.asyncExitHook)(() => this.dispose(), {
32
+ wait: 3e3
33
+ });
34
+ return this.start().then(() => {
35
+ (0, import_exit_hook.gracefulExit)(0);
36
+ }).catch((err) => {
37
+ import_consola.consola.error(err);
38
+ (0, import_exit_hook.gracefulExit)(1);
39
+ });
40
+ }
41
+ }
package/_cjs/text.js ADDED
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var text_exports = {};
20
+ __export(text_exports, {
21
+ XText: () => XText
22
+ });
23
+ module.exports = __toCommonJS(text_exports);
24
+ var import_html_entities = require("html-entities");
25
+ class XText {
26
+ constructor(text) {
27
+ this.text = text;
28
+ }
29
+ /**
30
+ * 将字符串分割为字符数组。
31
+ *
32
+ * @see https://stackoverflow.com/a/71619350
33
+ */
34
+ static split(text) {
35
+ return [...new Intl.Segmenter().segment(text)].map((x) => x.segment);
36
+ }
37
+ /**
38
+ * 纯粹为了书写 HTML 有提示。
39
+ */
40
+ static html(literals, ...interpolations) {
41
+ let result = "";
42
+ for (let i = 0; i < interpolations.length; i++) {
43
+ result += literals[i];
44
+ result += interpolations[i];
45
+ }
46
+ result += literals[literals.length - 1];
47
+ return result;
48
+ }
49
+ /**
50
+ * 切割字符串。
51
+ */
52
+ static cut(text, start, end) {
53
+ text = text.split(start)[1].split(end)[0];
54
+ return text;
55
+ }
56
+ /**
57
+ * 移除全部空白字符。
58
+ */
59
+ static stripWhitespace(text) {
60
+ text = text.replace(/\s+/g, "");
61
+ return text;
62
+ }
63
+ /**
64
+ * 移除首尾空白字符。
65
+ */
66
+ static stripMarginWhitespace(text) {
67
+ text = text.trim();
68
+ return text;
69
+ }
70
+ /**
71
+ * HTML 实体编码。
72
+ */
73
+ static encodeHtmlEntity(text) {
74
+ text = (0, import_html_entities.encode)(text);
75
+ return text;
76
+ }
77
+ /**
78
+ * HTML 实体解码。
79
+ */
80
+ static decodeHtmlEntity(text) {
81
+ text = (0, import_html_entities.decode)(text);
82
+ return text;
83
+ }
84
+ /**
85
+ * 移除 HTML 代码。
86
+ */
87
+ static stripHtml(text) {
88
+ text = text.replace(/<script[\s>].+?<\/script>/g, "").replace(/<style[\s>].+?<\/style>/g, "").replace(/<(.+?)>/g, "");
89
+ return text;
90
+ }
91
+ /**
92
+ * 切割字符串。
93
+ */
94
+ cut(start, end) {
95
+ this.text = XText.cut(this.text, start, end);
96
+ return this;
97
+ }
98
+ /**
99
+ * 移除全部空白字符。
100
+ */
101
+ stripWhitespace() {
102
+ this.text = XText.stripWhitespace(this.text);
103
+ return this;
104
+ }
105
+ /**
106
+ * 移除首尾空白字符。
107
+ */
108
+ stripMarginWhitespace() {
109
+ this.text = XText.stripMarginWhitespace(this.text);
110
+ return this;
111
+ }
112
+ /**
113
+ * HTML 实体编码。
114
+ */
115
+ encodeHtmlEntity() {
116
+ this.text = XText.encodeHtmlEntity(this.text);
117
+ return this;
118
+ }
119
+ /**
120
+ * HTML 实体解码。
121
+ */
122
+ decodeHtmlEntity() {
123
+ this.text = XText.decodeHtmlEntity(this.text);
124
+ return this;
125
+ }
126
+ /**
127
+ * 移除 HTML 代码。
128
+ */
129
+ stripHtml() {
130
+ this.text = XText.stripHtml(this.text);
131
+ return this;
132
+ }
133
+ toString() {
134
+ return this.text;
135
+ }
136
+ }