@rsdoctor/utils 1.1.9 → 1.2.0-beta.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.
- package/dist/cjs/build/envinfo.js +107 -95
- package/dist/cjs/build/file/cache.js +65 -56
- package/dist/cjs/build/file/index.js +78 -41
- package/dist/cjs/build/file/sharding.js +90 -78
- package/dist/cjs/build/index.js +49 -47
- package/dist/cjs/build/json.js +91 -98
- package/dist/cjs/build/process.js +47 -42
- package/dist/cjs/build/server.js +110 -87
- package/dist/cjs/common/alerts.js +46 -44
- package/dist/cjs/common/algorithm.js +63 -54
- package/dist/cjs/common/bundle.js +52 -46
- package/dist/cjs/common/crypto.js +47 -46
- package/dist/cjs/common/data/index.js +381 -455
- package/dist/cjs/common/file.js +44 -0
- package/dist/cjs/common/global-config.js +72 -64
- package/dist/cjs/common/graph/assets.js +274 -308
- package/dist/cjs/common/graph/chunk.js +66 -63
- package/dist/cjs/common/graph/dependency.js +42 -32
- package/dist/cjs/common/graph/entrypoints.js +33 -25
- package/dist/cjs/common/graph/index.js +93 -27
- package/dist/cjs/common/graph/modules.js +113 -98
- package/dist/cjs/common/index.js +101 -83
- package/dist/cjs/common/loader.js +277 -273
- package/dist/cjs/common/lodash.js +73 -62
- package/dist/cjs/common/manifest.js +57 -59
- package/dist/cjs/common/package.js +79 -80
- package/dist/cjs/common/plugin.js +78 -73
- package/dist/cjs/common/resolver.js +79 -69
- package/dist/cjs/common/rspack.js +43 -34
- package/dist/cjs/common/summary.js +39 -31
- package/dist/cjs/common/time.js +73 -78
- package/dist/cjs/common/url.js +44 -36
- package/dist/cjs/error/error.js +183 -220
- package/dist/cjs/error/index.js +70 -28
- package/dist/cjs/error/transform.js +150 -143
- package/dist/cjs/error/utils.js +54 -58
- package/dist/cjs/index.js +37 -38
- package/dist/cjs/logger.js +99 -73
- package/dist/cjs/rule-utils/document/document.js +83 -82
- package/dist/cjs/rule-utils/document/index.js +75 -23
- package/dist/cjs/rule-utils/document/server.js +42 -35
- package/dist/cjs/rule-utils/document/types.js +17 -15
- package/dist/cjs/rule-utils/index.js +66 -21
- package/dist/cjs/rule-utils/parser/asserts.js +129 -147
- package/dist/cjs/rule-utils/parser/index.js +84 -25
- package/dist/cjs/rule-utils/parser/parser.js +50 -85
- package/dist/cjs/rule-utils/parser/types.js +38 -30
- package/dist/cjs/rule-utils/parser/utils.js +141 -168
- package/dist/esm/build/envinfo.mjs +57 -0
- package/dist/esm/build/file/cache.mjs +23 -0
- package/dist/esm/build/file/index.mjs +4 -0
- package/dist/esm/build/file/sharding.mjs +50 -0
- package/dist/esm/build/index.mjs +6 -0
- package/dist/esm/build/json.mjs +66 -0
- package/dist/esm/build/process.mjs +17 -0
- package/dist/esm/build/server.mjs +96 -0
- package/dist/esm/common/alerts.mjs +17 -0
- package/dist/esm/common/algorithm.mjs +32 -0
- package/dist/esm/common/bundle.mjs +22 -0
- package/dist/esm/common/crypto.mjs +17 -0
- package/dist/esm/common/data/index.mjs +354 -0
- package/dist/esm/common/file.mjs +7 -0
- package/dist/esm/common/global-config.mjs +32 -0
- package/dist/esm/common/graph/assets.mjs +238 -0
- package/dist/esm/common/graph/chunk.mjs +32 -0
- package/dist/esm/common/graph/dependency.mjs +10 -0
- package/dist/esm/common/graph/entrypoints.mjs +4 -0
- package/dist/esm/common/graph/index.mjs +5 -0
- package/dist/esm/common/graph/modules.mjs +78 -0
- package/dist/esm/common/index.mjs +19 -0
- package/dist/esm/common/loader.mjs +247 -0
- package/dist/esm/common/lodash.mjs +32 -0
- package/dist/esm/common/manifest.mjs +30 -0
- package/dist/esm/common/package.mjs +56 -0
- package/dist/esm/common/plugin.mjs +48 -0
- package/dist/esm/common/resolver.mjs +46 -0
- package/dist/esm/common/rspack.mjs +9 -0
- package/dist/esm/common/summary.mjs +8 -0
- package/dist/esm/common/time.mjs +43 -0
- package/dist/esm/common/url.mjs +14 -0
- package/dist/esm/error/error.mjs +154 -0
- package/dist/esm/error/index.mjs +3 -0
- package/dist/esm/error/transform.mjs +138 -0
- package/dist/esm/error/utils.mjs +22 -0
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/logger.mjs +49 -0
- package/dist/esm/rule-utils/document/document.mjs +58 -0
- package/dist/esm/rule-utils/document/index.mjs +3 -0
- package/dist/esm/rule-utils/document/server.mjs +12 -0
- package/dist/esm/rule-utils/index.mjs +2 -0
- package/dist/esm/rule-utils/parser/asserts.mjs +104 -0
- package/dist/esm/rule-utils/parser/index.mjs +4 -0
- package/dist/esm/rule-utils/parser/parser.mjs +23 -0
- package/dist/esm/rule-utils/parser/types.mjs +7 -0
- package/dist/esm/rule-utils/parser/utils.mjs +109 -0
- package/dist/type/common/file.d.ts +3 -0
- package/dist/type/common/file.d.ts.map +1 -0
- package/dist/type/common/graph/modules.d.ts +1 -1
- package/dist/type/common/graph/modules.d.ts.map +1 -1
- package/dist/type/common/index.d.ts +1 -0
- package/dist/type/common/index.d.ts.map +1 -1
- package/dist/type/logger.d.ts +3 -0
- package/dist/type/logger.d.ts.map +1 -1
- package/package.json +13 -12
- package/dist/esm/build/envinfo.js +0 -75
- package/dist/esm/build/file/cache.js +0 -30
- package/dist/esm/build/file/index.js +0 -7
- package/dist/esm/build/file/sharding.js +0 -50
- package/dist/esm/build/index.js +0 -12
- package/dist/esm/build/json.js +0 -85
- package/dist/esm/build/process.js +0 -24
- package/dist/esm/build/server.js +0 -96
- package/dist/esm/common/alerts.js +0 -25
- package/dist/esm/common/algorithm.js +0 -39
- package/dist/esm/common/bundle.js +0 -30
- package/dist/esm/common/crypto.js +0 -28
- package/dist/esm/common/data/index.js +0 -428
- package/dist/esm/common/global-config.js +0 -38
- package/dist/esm/common/graph/assets.js +0 -310
- package/dist/esm/common/graph/chunk.js +0 -49
- package/dist/esm/common/graph/dependency.js +0 -14
- package/dist/esm/common/graph/entrypoints.js +0 -6
- package/dist/esm/common/graph/index.js +0 -5
- package/dist/esm/common/graph/modules.js +0 -90
- package/dist/esm/common/index.js +0 -36
- package/dist/esm/common/loader.js +0 -279
- package/dist/esm/common/lodash.js +0 -49
- package/dist/esm/common/manifest.js +0 -46
- package/dist/esm/common/package.js +0 -71
- package/dist/esm/common/plugin.js +0 -59
- package/dist/esm/common/resolver.js +0 -54
- package/dist/esm/common/rspack.js +0 -12
- package/dist/esm/common/summary.js +0 -10
- package/dist/esm/common/time.js +0 -64
- package/dist/esm/common/url.js +0 -20
- package/dist/esm/error/error.js +0 -202
- package/dist/esm/error/index.js +0 -5
- package/dist/esm/error/transform.js +0 -141
- package/dist/esm/error/utils.js +0 -40
- package/dist/esm/index.js +0 -6
- package/dist/esm/logger.js +0 -43
- package/dist/esm/rule-utils/document/document.js +0 -67
- package/dist/esm/rule-utils/document/index.js +0 -3
- package/dist/esm/rule-utils/document/server.js +0 -17
- package/dist/esm/rule-utils/index.js +0 -2
- package/dist/esm/rule-utils/parser/asserts.js +0 -132
- package/dist/esm/rule-utils/parser/index.js +0 -4
- package/dist/esm/rule-utils/parser/parser.js +0 -58
- package/dist/esm/rule-utils/parser/types.js +0 -9
- package/dist/esm/rule-utils/parser/utils.js +0 -164
- /package/dist/esm/rule-utils/document/{types.js → types.mjs} +0 -0
package/dist/esm/build/json.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { JsonStreamStringify } from "json-stream-stringify";
|
|
2
|
-
import { dirname, join } from "path";
|
|
3
|
-
import { Package } from "../common";
|
|
4
|
-
import { Transform } from "stream";
|
|
5
|
-
const maxFileSize = 1024 * 1024 * 400;
|
|
6
|
-
function stringify(json, replacer, space, cycle) {
|
|
7
|
-
const jsonList = [];
|
|
8
|
-
if (json && typeof json === "object") {
|
|
9
|
-
return new Promise((resolve, reject) => {
|
|
10
|
-
const stream = new JsonStreamStringify(json, replacer, space, cycle);
|
|
11
|
-
let currentLength = 0;
|
|
12
|
-
let currentContent = "";
|
|
13
|
-
const batchProcessor = new Transform({
|
|
14
|
-
readableObjectMode: true,
|
|
15
|
-
transform(chunk, _encoding, callback) {
|
|
16
|
-
const lines = chunk.toString().split("\\n");
|
|
17
|
-
lines.forEach((line) => {
|
|
18
|
-
if (currentLength + line.length > maxFileSize) {
|
|
19
|
-
jsonList.push(currentContent);
|
|
20
|
-
currentContent = "";
|
|
21
|
-
currentLength = 0;
|
|
22
|
-
}
|
|
23
|
-
if (line.length) {
|
|
24
|
-
currentContent += line;
|
|
25
|
-
currentLength += line.length;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
callback();
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
stream.pipe(batchProcessor).on("data", (line) => {
|
|
32
|
-
if (currentLength + line.length > maxFileSize) {
|
|
33
|
-
jsonList.push(currentContent);
|
|
34
|
-
currentContent = "";
|
|
35
|
-
currentLength = 0;
|
|
36
|
-
}
|
|
37
|
-
if (line.length) {
|
|
38
|
-
currentContent += line;
|
|
39
|
-
currentLength += line.length;
|
|
40
|
-
}
|
|
41
|
-
}).on("end", () => {
|
|
42
|
-
if (jsonList.length < 1) {
|
|
43
|
-
jsonList.push(currentContent);
|
|
44
|
-
}
|
|
45
|
-
resolve(jsonList);
|
|
46
|
-
}).on("error", (err) => {
|
|
47
|
-
return reject(err);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
return Promise.resolve(JSON.stringify(json, replacer, space));
|
|
52
|
-
}
|
|
53
|
-
const readPackageJson = (file, readFile) => {
|
|
54
|
-
let result;
|
|
55
|
-
let current = file;
|
|
56
|
-
while (current !== "/" && !result) {
|
|
57
|
-
const parent = dirname(current);
|
|
58
|
-
if (parent === current) {
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
current = parent;
|
|
62
|
-
if (readFile) {
|
|
63
|
-
result = readFile(join(current, "package.json"));
|
|
64
|
-
}
|
|
65
|
-
if (!readFile) {
|
|
66
|
-
result = Package.getPackageMetaFromModulePath(file);
|
|
67
|
-
} else if (!result?.name) {
|
|
68
|
-
result = void 0;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (!result) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
if (readFile && (!result.name || !result.version)) {
|
|
75
|
-
return readPackageJson(dirname(current), readFile);
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
...result,
|
|
79
|
-
root: current
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
export {
|
|
83
|
-
readPackageJson,
|
|
84
|
-
stringify
|
|
85
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { filesize } from "filesize";
|
|
2
|
-
import { memoryUsage, pid } from "process";
|
|
3
|
-
function getMemoryUsage() {
|
|
4
|
-
return memoryUsage();
|
|
5
|
-
}
|
|
6
|
-
function getMemoryUsageMessage() {
|
|
7
|
-
const usage = getMemoryUsage();
|
|
8
|
-
const msgs = [
|
|
9
|
-
`RSS: ${filesize(usage.rss)}`,
|
|
10
|
-
`Heap Total: ${filesize(usage.heapTotal)}`,
|
|
11
|
-
`Heap Used: ${filesize(usage.heapUsed)}`
|
|
12
|
-
];
|
|
13
|
-
if (usage.arrayBuffers) {
|
|
14
|
-
msgs.push(`ArrayBuffers: ${filesize(usage.arrayBuffers)}`);
|
|
15
|
-
}
|
|
16
|
-
if (usage.external) {
|
|
17
|
-
msgs.push(`External: ${filesize(usage.external)}`);
|
|
18
|
-
}
|
|
19
|
-
return `["${pid}" Memory Usage] ${msgs.join(", ")}`;
|
|
20
|
-
}
|
|
21
|
-
export {
|
|
22
|
-
getMemoryUsage,
|
|
23
|
-
getMemoryUsageMessage
|
|
24
|
-
};
|
package/dist/esm/build/server.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import connect from "connect";
|
|
2
|
-
import http from "http";
|
|
3
|
-
import os from "os";
|
|
4
|
-
import gp from "get-port";
|
|
5
|
-
import { execSync } from "child_process";
|
|
6
|
-
import { random } from "../common/algorithm";
|
|
7
|
-
const RESTRICTED_PORTS = [3659, 4045, 6e3, 6665, 6666, 6667, 6668, 6669];
|
|
8
|
-
function getRandomPort(min, max) {
|
|
9
|
-
let port;
|
|
10
|
-
do {
|
|
11
|
-
port = random(min, max);
|
|
12
|
-
} while (RESTRICTED_PORTS.includes(port));
|
|
13
|
-
return port;
|
|
14
|
-
}
|
|
15
|
-
const defaultPort = getRandomPort(3e3, 8999);
|
|
16
|
-
async function getPort(expectPort) {
|
|
17
|
-
return gp({ port: expectPort });
|
|
18
|
-
}
|
|
19
|
-
const createGetPortSyncFunctionString = (expectPort) => `
|
|
20
|
-
(() => {
|
|
21
|
-
const net = require('net');
|
|
22
|
-
|
|
23
|
-
function getPort(expectPort) {
|
|
24
|
-
return new Promise((resolve, reject) => {
|
|
25
|
-
const server = net.createServer();
|
|
26
|
-
server.unref();
|
|
27
|
-
server.on('error', reject);
|
|
28
|
-
server.listen(expectPort, () => {
|
|
29
|
-
const { port } = server.address();
|
|
30
|
-
server.close(() => {
|
|
31
|
-
resolve(port);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async function getAvailablePort(expectPort) {
|
|
38
|
-
let port = expectPort;
|
|
39
|
-
while (true) {
|
|
40
|
-
try {
|
|
41
|
-
const res = await getPort(port);
|
|
42
|
-
return res;
|
|
43
|
-
} catch (error) {
|
|
44
|
-
port += Math.floor(Math.random() * 100 + 1);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
getAvailablePort(${expectPort}).then(port => process.stdout.write(port.toString()));
|
|
50
|
-
})();
|
|
51
|
-
`.trim();
|
|
52
|
-
function getPortSync(expectPort) {
|
|
53
|
-
const statement = os.EOL === "\n" ? createGetPortSyncFunctionString(expectPort) : createGetPortSyncFunctionString(expectPort).replace(/\n/g, "");
|
|
54
|
-
const port = execSync(`node -e "${statement}"`, { encoding: "utf-8" });
|
|
55
|
-
return Number(port);
|
|
56
|
-
}
|
|
57
|
-
function createApp() {
|
|
58
|
-
return connect();
|
|
59
|
-
}
|
|
60
|
-
async function createServer(port) {
|
|
61
|
-
const app = createApp();
|
|
62
|
-
const server = http.createServer(app);
|
|
63
|
-
const res = {
|
|
64
|
-
app,
|
|
65
|
-
server,
|
|
66
|
-
port,
|
|
67
|
-
close() {
|
|
68
|
-
return new Promise((resolve, reject) => {
|
|
69
|
-
if ("closeAllConnections" in server) {
|
|
70
|
-
server.closeAllConnections();
|
|
71
|
-
}
|
|
72
|
-
if ("closeIdleConnections" in server) {
|
|
73
|
-
server.closeIdleConnections();
|
|
74
|
-
}
|
|
75
|
-
server.close((err) => {
|
|
76
|
-
if (err)
|
|
77
|
-
reject(err);
|
|
78
|
-
resolve();
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
return new Promise((resolve) => {
|
|
84
|
-
server.listen(port, () => {
|
|
85
|
-
resolve(res);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
export {
|
|
90
|
-
createApp,
|
|
91
|
-
createGetPortSyncFunctionString,
|
|
92
|
-
createServer,
|
|
93
|
-
defaultPort,
|
|
94
|
-
getPort,
|
|
95
|
-
getPortSync
|
|
96
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { relative } from "path";
|
|
2
|
-
function getPackageRelationAlertDetails(modules, dependencies, root, packageDependencies, moduleCodeMap) {
|
|
3
|
-
return packageDependencies.slice().reverse().map((dep) => {
|
|
4
|
-
const dependency = dependencies.find(
|
|
5
|
-
(item) => item.id === dep.dependencyId
|
|
6
|
-
);
|
|
7
|
-
if (!dependency) {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
const module = modules.find((item) => item.id === dependency.module);
|
|
11
|
-
if (!module) {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
group: dep.group,
|
|
16
|
-
module,
|
|
17
|
-
dependency,
|
|
18
|
-
relativePath: relative(root, module.path),
|
|
19
|
-
moduleCode: moduleCodeMap?.[module.id]
|
|
20
|
-
};
|
|
21
|
-
}).filter(Boolean);
|
|
22
|
-
}
|
|
23
|
-
export {
|
|
24
|
-
getPackageRelationAlertDetails
|
|
25
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { deflateSync, inflateSync } from "zlib";
|
|
2
|
-
import { Buffer } from "buffer";
|
|
3
|
-
import { debug } from "../logger";
|
|
4
|
-
function mergeIntervals(intervals) {
|
|
5
|
-
intervals.sort((a, b) => a[0] - b[0]);
|
|
6
|
-
let previous;
|
|
7
|
-
let current;
|
|
8
|
-
const result = [];
|
|
9
|
-
for (let i = 0; i < intervals.length; i++) {
|
|
10
|
-
current = intervals[i];
|
|
11
|
-
if (!previous || current[0] > previous[1]) {
|
|
12
|
-
previous = current;
|
|
13
|
-
result.push(current);
|
|
14
|
-
} else {
|
|
15
|
-
previous[1] = Math.max(previous[1], current[1]);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return result;
|
|
19
|
-
}
|
|
20
|
-
function compressText(input) {
|
|
21
|
-
try {
|
|
22
|
-
return deflateSync(input).toString("base64");
|
|
23
|
-
} catch (e) {
|
|
24
|
-
debug(() => `compressText error: ${e}`);
|
|
25
|
-
return "";
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function decompressText(input) {
|
|
29
|
-
return inflateSync(Buffer.from(input, "base64")).toString();
|
|
30
|
-
}
|
|
31
|
-
function random(min, max) {
|
|
32
|
-
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
33
|
-
}
|
|
34
|
-
export {
|
|
35
|
-
compressText,
|
|
36
|
-
decompressText,
|
|
37
|
-
mergeIntervals,
|
|
38
|
-
random
|
|
39
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Client } from "@rsdoctor/types";
|
|
2
|
-
const sep = ",";
|
|
3
|
-
function getBundleDiffPageQueryString(files) {
|
|
4
|
-
let qs = encodeURIComponent(files.join(sep));
|
|
5
|
-
if (qs) {
|
|
6
|
-
qs = `?${Client.RsdoctorClientUrlQuery.BundleDiffFiles}=${qs}`;
|
|
7
|
-
}
|
|
8
|
-
return qs;
|
|
9
|
-
}
|
|
10
|
-
function getBundleDiffPageUrl(files) {
|
|
11
|
-
let qs = getBundleDiffPageQueryString(files);
|
|
12
|
-
if (process.env.NODE_ENV === "development") {
|
|
13
|
-
if (typeof location !== "undefined") {
|
|
14
|
-
const { search = "", origin } = location;
|
|
15
|
-
if (search) {
|
|
16
|
-
qs += `&${search.slice(1)}`;
|
|
17
|
-
}
|
|
18
|
-
return `${origin}${qs}#${Client.RsdoctorClientRoutes.BundleDiff}`;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return `${qs}#${Client.RsdoctorClientRoutes.BundleDiff}`;
|
|
22
|
-
}
|
|
23
|
-
function parseFilesFromBundlePageUrlQuery(queryValue) {
|
|
24
|
-
return decodeURIComponent(queryValue).split(sep);
|
|
25
|
-
}
|
|
26
|
-
export {
|
|
27
|
-
getBundleDiffPageQueryString,
|
|
28
|
-
getBundleDiffPageUrl,
|
|
29
|
-
parseFilesFromBundlePageUrlQuery
|
|
30
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
const sep = "!";
|
|
2
|
-
function encode(str) {
|
|
3
|
-
let res = `${str.charCodeAt(0)}`;
|
|
4
|
-
for (let i = 1; i < str.length; i++) {
|
|
5
|
-
res += `${sep}${str.charCodeAt(i)}`;
|
|
6
|
-
}
|
|
7
|
-
return res;
|
|
8
|
-
}
|
|
9
|
-
function decode(str) {
|
|
10
|
-
let res = "";
|
|
11
|
-
let tmp = "";
|
|
12
|
-
for (let i = 0; i < str.length; i++) {
|
|
13
|
-
if (str[i] === sep) {
|
|
14
|
-
res += String.fromCharCode(+tmp);
|
|
15
|
-
tmp = "";
|
|
16
|
-
} else {
|
|
17
|
-
tmp += str[i];
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
if (tmp) {
|
|
21
|
-
res += String.fromCharCode(+tmp);
|
|
22
|
-
}
|
|
23
|
-
return res;
|
|
24
|
-
}
|
|
25
|
-
export {
|
|
26
|
-
decode,
|
|
27
|
-
encode
|
|
28
|
-
};
|