@rsdoctor/utils 0.0.0-next-20240620044732

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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/dist/cjs/build/envinfo.js +109 -0
  4. package/dist/cjs/build/file/cache.js +67 -0
  5. package/dist/cjs/build/file/index.js +44 -0
  6. package/dist/cjs/build/file/sharding.js +84 -0
  7. package/dist/cjs/build/index.js +50 -0
  8. package/dist/cjs/build/json.js +52 -0
  9. package/dist/cjs/build/process.js +49 -0
  10. package/dist/cjs/build/server.js +127 -0
  11. package/dist/cjs/common/alerts.js +49 -0
  12. package/dist/cjs/common/algorithm.js +60 -0
  13. package/dist/cjs/common/bundle.js +56 -0
  14. package/dist/cjs/common/crypto.js +53 -0
  15. package/dist/cjs/common/data/index.js +299 -0
  16. package/dist/cjs/common/graph/assets.js +322 -0
  17. package/dist/cjs/common/graph/chunk.js +67 -0
  18. package/dist/cjs/common/graph/dependency.js +40 -0
  19. package/dist/cjs/common/graph/entrypoints.js +30 -0
  20. package/dist/cjs/common/graph/index.js +30 -0
  21. package/dist/cjs/common/graph/modules.js +98 -0
  22. package/dist/cjs/common/index.js +80 -0
  23. package/dist/cjs/common/loader.js +261 -0
  24. package/dist/cjs/common/manifest.js +72 -0
  25. package/dist/cjs/common/package.js +97 -0
  26. package/dist/cjs/common/plugin.js +86 -0
  27. package/dist/cjs/common/resolver.js +82 -0
  28. package/dist/cjs/common/rspack.js +37 -0
  29. package/dist/cjs/common/summary.js +34 -0
  30. package/dist/cjs/common/time.js +91 -0
  31. package/dist/cjs/common/url.js +46 -0
  32. package/dist/cjs/error/error.js +236 -0
  33. package/dist/cjs/error/index.js +31 -0
  34. package/dist/cjs/error/transform.js +175 -0
  35. package/dist/cjs/error/utils.js +66 -0
  36. package/dist/cjs/index.js +41 -0
  37. package/dist/cjs/logger.js +51 -0
  38. package/dist/cjs/rule-utils/document/document.js +91 -0
  39. package/dist/cjs/rule-utils/document/index.js +26 -0
  40. package/dist/cjs/rule-utils/document/server.js +42 -0
  41. package/dist/cjs/rule-utils/document/types.js +16 -0
  42. package/dist/cjs/rule-utils/index.js +24 -0
  43. package/dist/cjs/rule-utils/parser/asserts.js +156 -0
  44. package/dist/cjs/rule-utils/parser/index.js +28 -0
  45. package/dist/cjs/rule-utils/parser/parser.js +92 -0
  46. package/dist/cjs/rule-utils/parser/types.js +33 -0
  47. package/dist/cjs/rule-utils/parser/utils.js +197 -0
  48. package/dist/esm/build/envinfo.js +75 -0
  49. package/dist/esm/build/file/cache.js +30 -0
  50. package/dist/esm/build/file/index.js +7 -0
  51. package/dist/esm/build/file/sharding.js +50 -0
  52. package/dist/esm/build/index.js +12 -0
  53. package/dist/esm/build/json.js +28 -0
  54. package/dist/esm/build/process.js +24 -0
  55. package/dist/esm/build/server.js +88 -0
  56. package/dist/esm/common/alerts.js +25 -0
  57. package/dist/esm/common/algorithm.js +33 -0
  58. package/dist/esm/common/bundle.js +30 -0
  59. package/dist/esm/common/crypto.js +28 -0
  60. package/dist/esm/common/data/index.js +265 -0
  61. package/dist/esm/common/graph/assets.js +286 -0
  62. package/dist/esm/common/graph/chunk.js +38 -0
  63. package/dist/esm/common/graph/dependency.js +14 -0
  64. package/dist/esm/common/graph/entrypoints.js +6 -0
  65. package/dist/esm/common/graph/index.js +5 -0
  66. package/dist/esm/common/graph/modules.js +70 -0
  67. package/dist/esm/common/index.js +32 -0
  68. package/dist/esm/common/loader.js +225 -0
  69. package/dist/esm/common/manifest.js +46 -0
  70. package/dist/esm/common/package.js +71 -0
  71. package/dist/esm/common/plugin.js +59 -0
  72. package/dist/esm/common/resolver.js +54 -0
  73. package/dist/esm/common/rspack.js +12 -0
  74. package/dist/esm/common/summary.js +10 -0
  75. package/dist/esm/common/time.js +64 -0
  76. package/dist/esm/common/url.js +20 -0
  77. package/dist/esm/error/error.js +202 -0
  78. package/dist/esm/error/index.js +5 -0
  79. package/dist/esm/error/transform.js +141 -0
  80. package/dist/esm/error/utils.js +40 -0
  81. package/dist/esm/index.js +6 -0
  82. package/dist/esm/logger.js +15 -0
  83. package/dist/esm/rule-utils/document/document.js +67 -0
  84. package/dist/esm/rule-utils/document/index.js +3 -0
  85. package/dist/esm/rule-utils/document/server.js +17 -0
  86. package/dist/esm/rule-utils/document/types.js +0 -0
  87. package/dist/esm/rule-utils/index.js +2 -0
  88. package/dist/esm/rule-utils/parser/asserts.js +132 -0
  89. package/dist/esm/rule-utils/parser/index.js +4 -0
  90. package/dist/esm/rule-utils/parser/parser.js +58 -0
  91. package/dist/esm/rule-utils/parser/types.js +9 -0
  92. package/dist/esm/rule-utils/parser/utils.js +164 -0
  93. package/dist/type/build/envinfo.d.ts +14 -0
  94. package/dist/type/build/envinfo.d.ts.map +1 -0
  95. package/dist/type/build/file/cache.d.ts +6 -0
  96. package/dist/type/build/file/cache.d.ts.map +1 -0
  97. package/dist/type/build/file/index.d.ts +4 -0
  98. package/dist/type/build/file/index.d.ts.map +1 -0
  99. package/dist/type/build/file/sharding.d.ts +23 -0
  100. package/dist/type/build/file/sharding.d.ts.map +1 -0
  101. package/dist/type/build/index.d.ts +6 -0
  102. package/dist/type/build/index.d.ts.map +1 -0
  103. package/dist/type/build/json.d.ts +2 -0
  104. package/dist/type/build/json.d.ts.map +1 -0
  105. package/dist/type/build/process.d.ts +4 -0
  106. package/dist/type/build/process.d.ts.map +1 -0
  107. package/dist/type/build/server.d.ts +16 -0
  108. package/dist/type/build/server.d.ts.map +1 -0
  109. package/dist/type/common/alerts.d.ts +3 -0
  110. package/dist/type/common/alerts.d.ts.map +1 -0
  111. package/dist/type/common/algorithm.d.ts +5 -0
  112. package/dist/type/common/algorithm.d.ts.map +1 -0
  113. package/dist/type/common/bundle.d.ts +4 -0
  114. package/dist/type/common/bundle.d.ts.map +1 -0
  115. package/dist/type/common/crypto.d.ts +3 -0
  116. package/dist/type/common/crypto.d.ts.map +1 -0
  117. package/dist/type/common/data/index.d.ts +11 -0
  118. package/dist/type/common/data/index.d.ts.map +1 -0
  119. package/dist/type/common/graph/assets.d.ts +53 -0
  120. package/dist/type/common/graph/assets.d.ts.map +1 -0
  121. package/dist/type/common/graph/chunk.d.ts +8 -0
  122. package/dist/type/common/graph/chunk.d.ts.map +1 -0
  123. package/dist/type/common/graph/dependency.d.ts +5 -0
  124. package/dist/type/common/graph/dependency.d.ts.map +1 -0
  125. package/dist/type/common/graph/entrypoints.d.ts +3 -0
  126. package/dist/type/common/graph/entrypoints.d.ts.map +1 -0
  127. package/dist/type/common/graph/index.d.ts +6 -0
  128. package/dist/type/common/graph/index.d.ts.map +1 -0
  129. package/dist/type/common/graph/modules.d.ts +10 -0
  130. package/dist/type/common/graph/modules.d.ts.map +1 -0
  131. package/dist/type/common/index.d.ts +16 -0
  132. package/dist/type/common/index.d.ts.map +1 -0
  133. package/dist/type/common/loader.d.ts +19 -0
  134. package/dist/type/common/loader.d.ts.map +1 -0
  135. package/dist/type/common/manifest.d.ts +5 -0
  136. package/dist/type/common/manifest.d.ts.map +1 -0
  137. package/dist/type/common/package.d.ts +8 -0
  138. package/dist/type/common/package.d.ts.map +1 -0
  139. package/dist/type/common/plugin.d.ts +6 -0
  140. package/dist/type/common/plugin.d.ts.map +1 -0
  141. package/dist/type/common/resolver.d.ts +7 -0
  142. package/dist/type/common/resolver.d.ts.map +1 -0
  143. package/dist/type/common/rspack.d.ts +8 -0
  144. package/dist/type/common/rspack.d.ts.map +1 -0
  145. package/dist/type/common/summary.d.ts +7 -0
  146. package/dist/type/common/summary.d.ts.map +1 -0
  147. package/dist/type/common/time.d.ts +5 -0
  148. package/dist/type/common/time.d.ts.map +1 -0
  149. package/dist/type/common/url.d.ts +4 -0
  150. package/dist/type/common/url.d.ts.map +1 -0
  151. package/dist/type/error/error.d.ts +36 -0
  152. package/dist/type/error/error.d.ts.map +1 -0
  153. package/dist/type/error/index.d.ts +3 -0
  154. package/dist/type/error/index.d.ts.map +1 -0
  155. package/dist/type/error/transform.d.ts +4 -0
  156. package/dist/type/error/transform.d.ts.map +1 -0
  157. package/dist/type/error/utils.d.ts +5 -0
  158. package/dist/type/error/utils.d.ts.map +1 -0
  159. package/dist/type/index.d.ts +3 -0
  160. package/dist/type/index.d.ts.map +1 -0
  161. package/dist/type/logger.d.ts +8 -0
  162. package/dist/type/logger.d.ts.map +1 -0
  163. package/dist/type/rule-utils/document/document.d.ts +17 -0
  164. package/dist/type/rule-utils/document/document.d.ts.map +1 -0
  165. package/dist/type/rule-utils/document/index.d.ts +4 -0
  166. package/dist/type/rule-utils/document/index.d.ts.map +1 -0
  167. package/dist/type/rule-utils/document/server.d.ts +5 -0
  168. package/dist/type/rule-utils/document/server.d.ts.map +1 -0
  169. package/dist/type/rule-utils/document/types.d.ts +32 -0
  170. package/dist/type/rule-utils/document/types.d.ts.map +1 -0
  171. package/dist/type/rule-utils/index.d.ts +3 -0
  172. package/dist/type/rule-utils/index.d.ts.map +1 -0
  173. package/dist/type/rule-utils/parser/asserts.d.ts +82 -0
  174. package/dist/type/rule-utils/parser/asserts.d.ts.map +1 -0
  175. package/dist/type/rule-utils/parser/index.d.ts +5 -0
  176. package/dist/type/rule-utils/parser/index.d.ts.map +1 -0
  177. package/dist/type/rule-utils/parser/parser.d.ts +119 -0
  178. package/dist/type/rule-utils/parser/parser.d.ts.map +1 -0
  179. package/dist/type/rule-utils/parser/types.d.ts +31 -0
  180. package/dist/type/rule-utils/parser/types.d.ts.map +1 -0
  181. package/dist/type/rule-utils/parser/utils.d.ts +31 -0
  182. package/dist/type/rule-utils/parser/utils.d.ts.map +1 -0
  183. package/package.json +111 -0
@@ -0,0 +1,197 @@
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 utils_exports = {};
20
+ __export(utils_exports, {
21
+ canParse: () => canParse,
22
+ detectECMAVersion: () => detectECMAVersion,
23
+ getDefaultImports: () => getDefaultImports,
24
+ getIdentifierInDeclaration: () => getIdentifierInDeclaration,
25
+ getIdentifierInExport: () => getIdentifierInExport,
26
+ getIdentifierInImport: () => getIdentifierInImport,
27
+ getIdentifierInPattern: () => getIdentifierInPattern,
28
+ isES5: () => isES5,
29
+ isES6: () => isES6,
30
+ isSameSemantics: () => isSameSemantics
31
+ });
32
+ module.exports = __toCommonJS(utils_exports);
33
+ var import_acorn = require("acorn");
34
+ var import_types = require("./types");
35
+ var import_asserts = require("./asserts");
36
+ function isSameSemantics(node1, node2) {
37
+ if (node1.type !== node2.type) {
38
+ return false;
39
+ }
40
+ switch (node1.type) {
41
+ case "CallExpression": {
42
+ const next = node2;
43
+ return node1.arguments.length === next.arguments.length && Boolean(node1.optional) === Boolean(next.optional) && isSameSemantics(node1.callee, next.callee) && node1.arguments.every(
44
+ (node, i) => isSameSemantics(node, next.arguments[i])
45
+ );
46
+ }
47
+ case "MemberExpression": {
48
+ const next = node2;
49
+ return node1.computed === next.computed && Boolean(node1.optional) === Boolean(next.optional) && isSameSemantics(node1.object, next.object) && isSameSemantics(node1.property, next.property);
50
+ }
51
+ case "Identifier": {
52
+ return node1.name === node2.name;
53
+ }
54
+ case "Literal": {
55
+ if (import_asserts.asserts.isSimpleLiteral(node1) && import_asserts.asserts.isSimpleLiteral(node2)) {
56
+ return node1.value === node2.value;
57
+ }
58
+ return node1.raw === node2.raw;
59
+ }
60
+ case "ObjectExpression": {
61
+ const next = node2;
62
+ return node1.properties.length === next.properties.length && node1.properties.every(
63
+ (prop, i) => isSameSemantics(prop, next.properties[i])
64
+ );
65
+ }
66
+ case "Property": {
67
+ const next = node2;
68
+ return node1.computed === next.computed && node1.kind === next.kind && node1.method === next.method && isSameSemantics(node1.key, next.key) && isSameSemantics(node1.value, next.value);
69
+ }
70
+ default: {
71
+ throw new Error(`Unknown node type: ${node1.type}`);
72
+ }
73
+ }
74
+ }
75
+ function getDefaultImports(node) {
76
+ return node.body.filter((statement) => {
77
+ if (statement.type !== "ImportDeclaration") {
78
+ return false;
79
+ }
80
+ const specifier = statement?.specifiers?.[0];
81
+ if (specifier?.type === "ImportDefaultSpecifier") {
82
+ return true;
83
+ }
84
+ return false;
85
+ });
86
+ }
87
+ function getIdentifierInPattern(name, node) {
88
+ if (import_asserts.asserts.isIdentifier(node) && node.name === name) {
89
+ return node;
90
+ }
91
+ if (import_asserts.asserts.isObjectPattern(node)) {
92
+ for (const prop of node.properties) {
93
+ if (import_asserts.asserts.isAssignmentProperty(prop)) {
94
+ return getIdentifierInPattern(name, prop.value);
95
+ }
96
+ if (import_asserts.asserts.isRestElement(prop)) {
97
+ return getIdentifierInPattern(name, prop);
98
+ }
99
+ }
100
+ }
101
+ if (import_asserts.asserts.isArrayPattern(node)) {
102
+ for (const el of node.elements) {
103
+ if (el) {
104
+ const result = getIdentifierInPattern(name, el);
105
+ if (result) {
106
+ return result;
107
+ }
108
+ }
109
+ }
110
+ }
111
+ if (import_asserts.asserts.isRestElement(node)) {
112
+ return getIdentifierInPattern(name, node.argument);
113
+ }
114
+ if (import_asserts.asserts.isAssignmentPattern(node)) {
115
+ return getIdentifierInPattern(name, node.left);
116
+ }
117
+ }
118
+ function getIdentifierInDeclaration(name, node) {
119
+ function getId(node2) {
120
+ return import_asserts.asserts.isIdentifier(node2.id) && node2.id.name === name ? node2.id : void 0;
121
+ }
122
+ if (import_asserts.asserts.isFunctionDeclaration(node)) {
123
+ return getId(node);
124
+ }
125
+ if (import_asserts.asserts.isClassDeclaration(node)) {
126
+ return getId(node);
127
+ }
128
+ if (import_asserts.asserts.isVariableDeclaration(node)) {
129
+ return node.declarations.find(
130
+ (item) => getIdentifierInPattern(name, item.id)
131
+ )?.id;
132
+ }
133
+ }
134
+ function getIdentifierInImport(name, node) {
135
+ if (import_asserts.asserts.isImportDeclaration(node)) {
136
+ for (const specifier of node.specifiers ?? []) {
137
+ if (specifier.local.name === name) {
138
+ return specifier.local;
139
+ }
140
+ }
141
+ }
142
+ }
143
+ function getIdentifierInExport(name, node) {
144
+ if (import_asserts.asserts.isExportNamedDeclaration(node)) {
145
+ if (node.declaration) {
146
+ return getIdentifierInDeclaration(name, node.declaration);
147
+ }
148
+ for (const specifier of node.specifiers ?? []) {
149
+ if (specifier.exported.name === name) {
150
+ return specifier.exported;
151
+ }
152
+ }
153
+ }
154
+ if (import_asserts.asserts.isExportAllDeclaration(node) && node.exported) {
155
+ if (node.exported.name === name) {
156
+ return node.exported;
157
+ }
158
+ }
159
+ }
160
+ function canParse(code, ecmaVersion2) {
161
+ try {
162
+ (0, import_acorn.parse)(code, {
163
+ ecmaVersion: ecmaVersion2,
164
+ sourceType: typeof ecmaVersion2 === "number" && ecmaVersion2 <= 5 ? "script" : "module"
165
+ });
166
+ return true;
167
+ } catch (err) {
168
+ return false;
169
+ }
170
+ }
171
+ function isES5(code) {
172
+ return canParse(code, 5);
173
+ }
174
+ function isES6(code) {
175
+ return canParse(code, 6);
176
+ }
177
+ function detectECMAVersion(code) {
178
+ if (isES6(code)) {
179
+ if (isES5(code))
180
+ return import_types.ECMAVersion.ES5;
181
+ return import_types.ECMAVersion.ES6;
182
+ }
183
+ return import_types.ECMAVersion.ES7P;
184
+ }
185
+ // Annotate the CommonJS export names for ESM import in node:
186
+ 0 && (module.exports = {
187
+ canParse,
188
+ detectECMAVersion,
189
+ getDefaultImports,
190
+ getIdentifierInDeclaration,
191
+ getIdentifierInExport,
192
+ getIdentifierInImport,
193
+ getIdentifierInPattern,
194
+ isES5,
195
+ isES6,
196
+ isSameSemantics
197
+ });
@@ -0,0 +1,75 @@
1
+ import { helpers, run } from "envinfo";
2
+ import { exec } from "child_process";
3
+ const getCPUInfo = () => helpers.getCPUInfo().then((res) => res[1]);
4
+ const getOSInfo = () => helpers.getOSInfo().then((res) => res[1]);
5
+ const getMemoryInfo = () => helpers.getMemoryInfo().then((res) => res[1]);
6
+ const getNodeVersion = () => helpers.getNodeInfo().then((res) => res[1]);
7
+ const getYarnVersion = () => helpers.getYarnInfo().then((res) => res[1]);
8
+ const getNpmVersion = () => helpers.getnpmInfo().then((res) => res[1]);
9
+ const getPnpmVersion = () => helpers.getpnpmInfo().then((res) => res[1]);
10
+ function getNpmPackageVersion(pkg) {
11
+ const isArray = Array.isArray(pkg);
12
+ return run(
13
+ {
14
+ npmPackages: isArray ? pkg : [pkg]
15
+ },
16
+ { json: true, showNotFound: true }
17
+ ).then((res) => {
18
+ const { npmPackages = {} } = JSON.parse(res) || {};
19
+ return isArray ? pkg.map((e) => npmPackages[e] || "Not Found") : npmPackages[pkg];
20
+ });
21
+ }
22
+ function getGlobalNpmPackageVersion(pkg) {
23
+ const isArray = Array.isArray(pkg);
24
+ return run(
25
+ {
26
+ npmGlobalPackages: isArray ? pkg : [pkg]
27
+ },
28
+ { json: true, showNotFound: true }
29
+ ).then((res) => {
30
+ const { npmGlobalPackages = {} } = JSON.parse(res) || {};
31
+ return isArray ? pkg.map((e) => npmGlobalPackages[e] || "Not Found") : npmGlobalPackages[pkg];
32
+ });
33
+ }
34
+ function getGitBranch() {
35
+ return new Promise((resolve, reject) => {
36
+ exec("git branch --show-current", (err, stdout) => {
37
+ if (err) {
38
+ exec("git branch", (err2, stdout2) => {
39
+ if (err2) {
40
+ reject(err2);
41
+ } else {
42
+ resolve(
43
+ stdout2.split("\n").map((e) => e.replace("* ", "")).join("").trim()
44
+ );
45
+ }
46
+ });
47
+ } else {
48
+ resolve(stdout.trim());
49
+ }
50
+ });
51
+ });
52
+ }
53
+ function getGitRepo() {
54
+ return new Promise((resolve, reject) => {
55
+ exec("git config --get remote.origin.url", (err, stdout) => {
56
+ if (err)
57
+ reject(err);
58
+ else
59
+ resolve(stdout.trim());
60
+ });
61
+ });
62
+ }
63
+ export {
64
+ getCPUInfo,
65
+ getGitBranch,
66
+ getGitRepo,
67
+ getGlobalNpmPackageVersion,
68
+ getMemoryInfo,
69
+ getNodeVersion,
70
+ getNpmPackageVersion,
71
+ getNpmVersion,
72
+ getOSInfo,
73
+ getPnpmVersion,
74
+ getYarnVersion
75
+ };
@@ -0,0 +1,30 @@
1
+ import fse from "fs-extra";
2
+ const cache = /* @__PURE__ */ new Map();
3
+ async function readFile(path) {
4
+ if (cache.has(path))
5
+ return cache.get(path);
6
+ const res = await fse.readFile(path, "utf-8");
7
+ cache.set(path, res);
8
+ return res;
9
+ }
10
+ function readFileSync(path) {
11
+ if (cache.has(path))
12
+ return cache.get(path);
13
+ const res = fse.readFileSync(path, "utf-8");
14
+ cache.set(path, res);
15
+ return res;
16
+ }
17
+ async function readJSON(path) {
18
+ const str = await readFile(path);
19
+ return JSON.parse(str);
20
+ }
21
+ function readJSONSync(path) {
22
+ const str = readFileSync(path);
23
+ return JSON.parse(str);
24
+ }
25
+ export {
26
+ readFile,
27
+ readFileSync,
28
+ readJSON,
29
+ readJSONSync
30
+ };
@@ -0,0 +1,7 @@
1
+ export * from "./sharding";
2
+ import * as fse from "fs-extra";
3
+ import * as cache from "./cache";
4
+ export {
5
+ cache,
6
+ fse
7
+ };
@@ -0,0 +1,50 @@
1
+ import fse from "fs-extra";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ class FileSharding {
5
+ constructor(content, limitBytes = 1024 * 1024 * 10, encoding = "utf-8") {
6
+ this.content = content;
7
+ this.limitBytes = limitBytes;
8
+ this.encoding = encoding;
9
+ }
10
+ /**
11
+ * @param ext the extension name of the output file (must starts with ".")
12
+ */
13
+ createVirtualShardingFiles(ext = "") {
14
+ const bf = Buffer.from(this.content, this.encoding);
15
+ const res = [];
16
+ const threshold = this.limitBytes;
17
+ let tmpBytes = 0;
18
+ while (bf.byteLength > tmpBytes) {
19
+ res.push(bf.subarray(tmpBytes, tmpBytes + threshold));
20
+ tmpBytes += threshold;
21
+ }
22
+ return res.map((e, i) => ({ filename: `${i}${ext}`, content: e }));
23
+ }
24
+ /**
25
+ * @param folder absolute path of folder which used to save string sharding files.
26
+ * @param ext the extension name of the output file (must starts with ".")
27
+ */
28
+ async writeStringToFolder(folder, ext = "") {
29
+ const dist = path.resolve(folder);
30
+ await fse.ensureDir(dist);
31
+ const res = this.createVirtualShardingFiles(ext);
32
+ await Promise.all(
33
+ res.map(
34
+ (e) => new Promise((resolve, reject) => {
35
+ const stream = fs.createWriteStream(
36
+ path.join(dist, e.filename),
37
+ this.encoding
38
+ );
39
+ stream.end(e.content);
40
+ stream.once("close", () => resolve(void 0));
41
+ stream.once("error", (err) => reject(err));
42
+ })
43
+ )
44
+ );
45
+ return res;
46
+ }
47
+ }
48
+ export {
49
+ FileSharding
50
+ };
@@ -0,0 +1,12 @@
1
+ import * as File from "./file";
2
+ import * as Json from "./json";
3
+ import * as Server from "./server";
4
+ import * as EnvInfo from "./envinfo";
5
+ import * as Process from "./process";
6
+ export {
7
+ EnvInfo,
8
+ File,
9
+ Json,
10
+ Process,
11
+ Server
12
+ };
@@ -0,0 +1,28 @@
1
+ import { JsonStreamStringify } from "json-stream-stringify";
2
+ import { PassThrough } from "stream";
3
+ function stringify(json, replacer, space, cycle) {
4
+ if (json && typeof json === "object") {
5
+ return new Promise((resolve, reject) => {
6
+ let res = "";
7
+ const pt = new PassThrough();
8
+ const stream = new JsonStreamStringify(json, replacer, space, cycle);
9
+ pt.on("data", (chunk) => {
10
+ res += chunk;
11
+ });
12
+ pt.on("end", () => {
13
+ return resolve(res);
14
+ });
15
+ pt.on("error", (err) => {
16
+ return reject(err);
17
+ });
18
+ stream.on("error", (err) => {
19
+ return reject(err);
20
+ });
21
+ stream.pipe(pt);
22
+ });
23
+ }
24
+ return Promise.resolve(JSON.stringify(json, replacer, space));
25
+ }
26
+ export {
27
+ stringify
28
+ };
@@ -0,0 +1,24 @@
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
+ };
@@ -0,0 +1,88 @@
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 defaultPort = random(3e3, 8999);
8
+ async function getPort(expectPort) {
9
+ return gp({ port: expectPort });
10
+ }
11
+ const createGetPortSyncFunctionString = (expectPort) => `
12
+ (() => {
13
+ const net = require('net');
14
+
15
+ function getPort(expectPort) {
16
+ return new Promise((resolve, reject) => {
17
+ const server = net.createServer();
18
+ server.unref();
19
+ server.on('error', reject);
20
+ server.listen(expectPort, () => {
21
+ const { port } = server.address();
22
+ server.close(() => {
23
+ resolve(port);
24
+ });
25
+ });
26
+ });
27
+ }
28
+
29
+ async function getAvailablePort(expectPort) {
30
+ let port = expectPort;
31
+ while (true) {
32
+ try {
33
+ const res = await getPort(port);
34
+ return res;
35
+ } catch (error) {
36
+ port += Math.floor(Math.random() * 100 + 1);
37
+ }
38
+ }
39
+ }
40
+
41
+ getAvailablePort(${expectPort}).then(port => process.stdout.write(port.toString()));
42
+ })();
43
+ `.trim();
44
+ function getPortSync(expectPort) {
45
+ const statement = os.EOL === "\n" ? createGetPortSyncFunctionString(expectPort) : createGetPortSyncFunctionString(expectPort).replace(/\n/g, "");
46
+ const port = execSync(`node -e "${statement}"`, { encoding: "utf-8" });
47
+ return Number(port);
48
+ }
49
+ function createApp() {
50
+ return connect();
51
+ }
52
+ async function createServer(port) {
53
+ const app = createApp();
54
+ const server = http.createServer(app);
55
+ const res = {
56
+ app,
57
+ server,
58
+ port,
59
+ close() {
60
+ return new Promise((resolve, reject) => {
61
+ if ("closeAllConnections" in server) {
62
+ server.closeAllConnections();
63
+ }
64
+ if ("closeIdleConnections" in server) {
65
+ server.closeIdleConnections();
66
+ }
67
+ server.close((err) => {
68
+ if (err)
69
+ reject(err);
70
+ resolve();
71
+ });
72
+ });
73
+ }
74
+ };
75
+ return new Promise((resolve) => {
76
+ server.listen(port, () => {
77
+ resolve(res);
78
+ });
79
+ });
80
+ }
81
+ export {
82
+ createApp,
83
+ createGetPortSyncFunctionString,
84
+ createServer,
85
+ defaultPort,
86
+ getPort,
87
+ getPortSync
88
+ };
@@ -0,0 +1,25 @@
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
+ };
@@ -0,0 +1,33 @@
1
+ import { deflateSync, inflateSync } from "zlib";
2
+ import { Buffer } from "buffer";
3
+ function mergeIntervals(intervals) {
4
+ intervals.sort((a, b) => a[0] - b[0]);
5
+ let previous;
6
+ let current;
7
+ const result = [];
8
+ for (let i = 0; i < intervals.length; i++) {
9
+ current = intervals[i];
10
+ if (!previous || current[0] > previous[1]) {
11
+ previous = current;
12
+ result.push(current);
13
+ } else {
14
+ previous[1] = Math.max(previous[1], current[1]);
15
+ }
16
+ }
17
+ return result;
18
+ }
19
+ function compressText(input) {
20
+ return deflateSync(input).toString("base64");
21
+ }
22
+ function decompressText(input) {
23
+ return inflateSync(Buffer.from(input, "base64")).toString();
24
+ }
25
+ function random(min, max) {
26
+ return Math.floor(Math.random() * (max - min + 1) + min);
27
+ }
28
+ export {
29
+ compressText,
30
+ decompressText,
31
+ mergeIntervals,
32
+ random
33
+ };
@@ -0,0 +1,30 @@
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
+ };
@@ -0,0 +1,28 @@
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
+ };