@rsdoctor/sdk 0.0.2-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/LICENSE +21 -0
- package/README.md +15 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/sdk/index.js +24 -0
- package/dist/cjs/sdk/multiple/controller.js +72 -0
- package/dist/cjs/sdk/multiple/index.js +24 -0
- package/dist/cjs/sdk/multiple/server.js +41 -0
- package/dist/cjs/sdk/multiple/slave.js +98 -0
- package/dist/cjs/sdk/sdk/core.js +185 -0
- package/dist/cjs/sdk/sdk/index.js +31 -0
- package/dist/cjs/sdk/sdk/types.js +16 -0
- package/dist/cjs/sdk/sdk/webpack.js +373 -0
- package/dist/cjs/sdk/server/apis/alerts.js +52 -0
- package/dist/cjs/sdk/server/apis/base.js +46 -0
- package/dist/cjs/sdk/server/apis/bundle-diff.js +79 -0
- package/dist/cjs/sdk/server/apis/data.js +66 -0
- package/dist/cjs/sdk/server/apis/fs.js +50 -0
- package/dist/cjs/sdk/server/apis/graph.js +117 -0
- package/dist/cjs/sdk/server/apis/index.js +38 -0
- package/dist/cjs/sdk/server/apis/loader.js +127 -0
- package/dist/cjs/sdk/server/apis/plugin.js +58 -0
- package/dist/cjs/sdk/server/apis/project.js +82 -0
- package/dist/cjs/sdk/server/apis/renderer.js +74 -0
- package/dist/cjs/sdk/server/apis/resolver.js +57 -0
- package/dist/cjs/sdk/server/fakeServer.js +38 -0
- package/dist/cjs/sdk/server/index.js +184 -0
- package/dist/cjs/sdk/server/router.js +116 -0
- package/dist/cjs/sdk/server/socket/api.js +49 -0
- package/dist/cjs/sdk/server/socket/index.js +104 -0
- package/dist/cjs/sdk/server/utils.js +38 -0
- package/dist/cjs/sdk/utils/constant.js +41 -0
- package/dist/cjs/sdk/utils/index.js +24 -0
- package/dist/cjs/sdk/utils/upload.js +33 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/sdk/index.js +2 -0
- package/dist/esm/sdk/multiple/controller.js +48 -0
- package/dist/esm/sdk/multiple/index.js +2 -0
- package/dist/esm/sdk/multiple/server.js +17 -0
- package/dist/esm/sdk/multiple/slave.js +64 -0
- package/dist/esm/sdk/sdk/core.js +151 -0
- package/dist/esm/sdk/sdk/index.js +5 -0
- package/dist/esm/sdk/sdk/types.js +0 -0
- package/dist/esm/sdk/sdk/webpack.js +349 -0
- package/dist/esm/sdk/server/apis/alerts.js +30 -0
- package/dist/esm/sdk/server/apis/base.js +22 -0
- package/dist/esm/sdk/server/apis/bundle-diff.js +57 -0
- package/dist/esm/sdk/server/apis/data.js +44 -0
- package/dist/esm/sdk/server/apis/fs.js +28 -0
- package/dist/esm/sdk/server/apis/graph.js +95 -0
- package/dist/esm/sdk/server/apis/index.js +9 -0
- package/dist/esm/sdk/server/apis/loader.js +105 -0
- package/dist/esm/sdk/server/apis/plugin.js +36 -0
- package/dist/esm/sdk/server/apis/project.js +50 -0
- package/dist/esm/sdk/server/apis/renderer.js +42 -0
- package/dist/esm/sdk/server/apis/resolver.js +35 -0
- package/dist/esm/sdk/server/fakeServer.js +14 -0
- package/dist/esm/sdk/server/index.js +148 -0
- package/dist/esm/sdk/server/router.js +92 -0
- package/dist/esm/sdk/server/socket/api.js +25 -0
- package/dist/esm/sdk/server/socket/index.js +82 -0
- package/dist/esm/sdk/server/utils.js +14 -0
- package/dist/esm/sdk/utils/constant.js +7 -0
- package/dist/esm/sdk/utils/index.js +2 -0
- package/dist/esm/sdk/utils/upload.js +9 -0
- package/dist/type/index.d.ts +1 -0
- package/dist/type/sdk/index.d.ts +2 -0
- package/dist/type/sdk/multiple/controller.d.ts +16 -0
- package/dist/type/sdk/multiple/index.d.ts +2 -0
- package/dist/type/sdk/multiple/server.d.ts +7 -0
- package/dist/type/sdk/multiple/slave.d.ts +35 -0
- package/dist/type/sdk/sdk/core.d.ts +35 -0
- package/dist/type/sdk/sdk/index.d.ts +2 -0
- package/dist/type/sdk/sdk/types.d.ts +28 -0
- package/dist/type/sdk/sdk/webpack.d.ts +47 -0
- package/dist/type/sdk/server/apis/alerts.d.ts +5 -0
- package/dist/type/sdk/server/apis/base.d.ts +11 -0
- package/dist/type/sdk/server/apis/bundle-diff.d.ts +6 -0
- package/dist/type/sdk/server/apis/data.d.ts +6 -0
- package/dist/type/sdk/server/apis/fs.d.ts +5 -0
- package/dist/type/sdk/server/apis/graph.d.ts +12 -0
- package/dist/type/sdk/server/apis/index.d.ts +9 -0
- package/dist/type/sdk/server/apis/loader.d.ts +16 -0
- package/dist/type/sdk/server/apis/plugin.d.ts +6 -0
- package/dist/type/sdk/server/apis/project.d.ts +8 -0
- package/dist/type/sdk/server/apis/renderer.d.ts +7 -0
- package/dist/type/sdk/server/apis/resolver.d.ts +6 -0
- package/dist/type/sdk/server/fakeServer.d.ts +7 -0
- package/dist/type/sdk/server/index.d.ts +27 -0
- package/dist/type/sdk/server/router.d.ts +25 -0
- package/dist/type/sdk/server/socket/api.d.ts +15 -0
- package/dist/type/sdk/server/socket/index.d.ts +28 -0
- package/dist/type/sdk/server/utils.d.ts +5 -0
- package/dist/type/sdk/utils/constant.d.ts +1 -0
- package/dist/type/sdk/utils/index.d.ts +2 -0
- package/dist/type/sdk/utils/upload.d.ts +2 -0
- package/package.json +51 -0
|
@@ -0,0 +1,184 @@
|
|
|
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var server_exports = {};
|
|
31
|
+
__export(server_exports, {
|
|
32
|
+
DoctorServer: () => DoctorServer
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(server_exports);
|
|
35
|
+
var import_types = require("@rsdoctor/types");
|
|
36
|
+
var import_build = require("@rsdoctor/utils/build");
|
|
37
|
+
var import_common = require("@rsdoctor/utils/common");
|
|
38
|
+
var import_assert = __toESM(require("assert"));
|
|
39
|
+
var import_body_parser = __toESM(require("body-parser"));
|
|
40
|
+
var import_open = __toESM(require("open"));
|
|
41
|
+
var import_ip = __toESM(require("ip"));
|
|
42
|
+
var import_cors = __toESM(require("cors"));
|
|
43
|
+
var import_stream = require("stream");
|
|
44
|
+
var import_socket = require("./socket");
|
|
45
|
+
var import_router = require("./router");
|
|
46
|
+
var APIs = __toESM(require("./apis"));
|
|
47
|
+
__reExport(server_exports, require("./utils"), module.exports);
|
|
48
|
+
class DoctorServer {
|
|
49
|
+
constructor(sdk, port = import_build.Server.defaultPort) {
|
|
50
|
+
this.sdk = sdk;
|
|
51
|
+
this.disposed = true;
|
|
52
|
+
this.get = (route, cb) => {
|
|
53
|
+
const { app } = this;
|
|
54
|
+
app.use(route, this.wrapNextHandleFunction("GET", cb));
|
|
55
|
+
return app;
|
|
56
|
+
};
|
|
57
|
+
this.post = (route, cb) => {
|
|
58
|
+
const { app } = this;
|
|
59
|
+
app.use(route, this.wrapNextHandleFunction("POST", cb));
|
|
60
|
+
return app;
|
|
61
|
+
};
|
|
62
|
+
this.dispose = async () => {
|
|
63
|
+
if (this.disposed)
|
|
64
|
+
return;
|
|
65
|
+
this.disposed = true;
|
|
66
|
+
if (this._server) {
|
|
67
|
+
await this._server.close();
|
|
68
|
+
}
|
|
69
|
+
if (this._socket) {
|
|
70
|
+
this._socket.dispose();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
(0, import_assert.default)(typeof port === "number");
|
|
74
|
+
this.port = port;
|
|
75
|
+
this._router = new import_router.Router({ sdk, server: this, apis: Object.values(APIs) });
|
|
76
|
+
}
|
|
77
|
+
get app() {
|
|
78
|
+
return this._server.app;
|
|
79
|
+
}
|
|
80
|
+
get origin() {
|
|
81
|
+
const host = import_ip.default.address();
|
|
82
|
+
return `http://${host}:${this.port}`;
|
|
83
|
+
}
|
|
84
|
+
get socketUrl() {
|
|
85
|
+
return `ws://${import_ip.default.address()}:${this.port}`;
|
|
86
|
+
}
|
|
87
|
+
async bootstrap() {
|
|
88
|
+
if (!this.disposed) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const port = import_build.Server.getPortSync(this.port);
|
|
92
|
+
this.port = port;
|
|
93
|
+
this._server = await import_build.Server.createServer(port);
|
|
94
|
+
this._socket = new import_socket.Socket({
|
|
95
|
+
sdk: this.sdk,
|
|
96
|
+
server: this._server.server,
|
|
97
|
+
port: this.port
|
|
98
|
+
});
|
|
99
|
+
await this._socket.bootstrap();
|
|
100
|
+
this.disposed = false;
|
|
101
|
+
this.app.use((0, import_cors.default)());
|
|
102
|
+
this.app.use(import_body_parser.default.json({ limit: "500mb" }));
|
|
103
|
+
await this._router.setup();
|
|
104
|
+
process.once("exit", this.dispose);
|
|
105
|
+
process.once("SIGINT", this.dispose);
|
|
106
|
+
process.once("SIGTERM", this.dispose);
|
|
107
|
+
process.once("unhandledRejection", this.dispose);
|
|
108
|
+
process.once("uncaughtException", this.dispose);
|
|
109
|
+
}
|
|
110
|
+
wrapNextHandleFunction(method, cb) {
|
|
111
|
+
return async (req, res, next) => {
|
|
112
|
+
const m = req.method?.toUpperCase();
|
|
113
|
+
if (m === method) {
|
|
114
|
+
try {
|
|
115
|
+
const body = await cb(req, res, next);
|
|
116
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
117
|
+
res.setHeader("Access-Control-Allow-Credentials", "true");
|
|
118
|
+
res.statusCode = 200;
|
|
119
|
+
if (Buffer.isBuffer(body)) {
|
|
120
|
+
res.setHeader("Content-Length", body.byteLength);
|
|
121
|
+
const ps = new import_stream.PassThrough();
|
|
122
|
+
ps.write(body);
|
|
123
|
+
ps.end();
|
|
124
|
+
ps.pipe(res);
|
|
125
|
+
} else if (body && typeof body === "object") {
|
|
126
|
+
res.writeHead(200, {
|
|
127
|
+
"Content-Type": "application/json;utf-8"
|
|
128
|
+
});
|
|
129
|
+
res.write(JSON.stringify(body));
|
|
130
|
+
res.end();
|
|
131
|
+
} else {
|
|
132
|
+
res.writeHead(200).end(body);
|
|
133
|
+
}
|
|
134
|
+
} catch (error) {
|
|
135
|
+
res.statusCode = 500;
|
|
136
|
+
res.end(error.message);
|
|
137
|
+
return next(error);
|
|
138
|
+
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
await next();
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
proxy(api, method, cb) {
|
|
145
|
+
let idx = this.app.stack.findIndex((e) => e.route === api);
|
|
146
|
+
if (idx === -1) {
|
|
147
|
+
idx = this.app.stack.length - 1;
|
|
148
|
+
}
|
|
149
|
+
this.app.stack.splice(idx, 0, {
|
|
150
|
+
route: api,
|
|
151
|
+
handle: this.wrapNextHandleFunction(method, cb)
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
getClientUrl(route = "homepage", ...args) {
|
|
155
|
+
const url = `${this.origin}${import_types.SDK.ServerAPI.API.EntryHtml}`;
|
|
156
|
+
switch (route) {
|
|
157
|
+
case import_types.Client.DoctorClientRoutes.BundleDiff: {
|
|
158
|
+
const [baseline, current] = args;
|
|
159
|
+
const qs = import_common.Bundle.getBundleDiffPageQueryString([baseline, current]);
|
|
160
|
+
return `${url}${qs}#${import_types.Client.DoctorClientRoutes.BundleDiff}`;
|
|
161
|
+
}
|
|
162
|
+
default:
|
|
163
|
+
return url;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async openClientPage(...args) {
|
|
167
|
+
const url = this.getClientUrl(
|
|
168
|
+
...args
|
|
169
|
+
);
|
|
170
|
+
await (0, import_open.default)(url);
|
|
171
|
+
console.log(`Rsdoctor analyze run at: ${url}`);
|
|
172
|
+
}
|
|
173
|
+
sendAPIDataToClient(api, msg) {
|
|
174
|
+
this._socket?.sendAPIData(api, msg);
|
|
175
|
+
}
|
|
176
|
+
async broadcast() {
|
|
177
|
+
await this._socket?.broadcast();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
181
|
+
0 && (module.exports = {
|
|
182
|
+
DoctorServer,
|
|
183
|
+
...require("./utils")
|
|
184
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
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 router_exports = {};
|
|
20
|
+
__export(router_exports, {
|
|
21
|
+
Router: () => Router
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(router_exports);
|
|
24
|
+
const _Router = class _Router {
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.options = options;
|
|
27
|
+
}
|
|
28
|
+
static get(pathname) {
|
|
29
|
+
return (target, propertyKey, descriptor) => {
|
|
30
|
+
const routes = _Router.routes.get;
|
|
31
|
+
if (!routes.has(target.constructor)) {
|
|
32
|
+
routes.set(target.constructor, []);
|
|
33
|
+
}
|
|
34
|
+
routes.get(target.constructor).push([propertyKey, pathname]);
|
|
35
|
+
return descriptor;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
static post(pathname) {
|
|
39
|
+
return (target, propertyKey, descriptor) => {
|
|
40
|
+
const routes = _Router.routes.post;
|
|
41
|
+
if (!routes.has(target.constructor)) {
|
|
42
|
+
routes.set(target.constructor, []);
|
|
43
|
+
}
|
|
44
|
+
routes.get(target.constructor).push([propertyKey, pathname]);
|
|
45
|
+
return descriptor;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async setup() {
|
|
49
|
+
const { apis, sdk, server } = this.options;
|
|
50
|
+
apis.forEach((API) => {
|
|
51
|
+
const obj = new API(sdk, server);
|
|
52
|
+
_Router.routes.get.forEach((v, cons) => {
|
|
53
|
+
v.forEach(([key, pathname]) => {
|
|
54
|
+
if (cons === API) {
|
|
55
|
+
server.get(pathname, this.wrapAPIFunction(obj, key));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
_Router.routes.post.forEach((v, cons) => {
|
|
60
|
+
v.forEach(([key, pathname]) => {
|
|
61
|
+
if (cons === API) {
|
|
62
|
+
server.post(pathname, this.wrapAPIFunction(obj, key));
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
wrapAPIFunction(api, key) {
|
|
69
|
+
const { sdk, server } = this.options;
|
|
70
|
+
return async (req, res) => {
|
|
71
|
+
const ctx = {
|
|
72
|
+
req,
|
|
73
|
+
res,
|
|
74
|
+
sdk,
|
|
75
|
+
server
|
|
76
|
+
};
|
|
77
|
+
const trap = new Proxy(api, {
|
|
78
|
+
get(target, key2, receiver) {
|
|
79
|
+
switch (key2) {
|
|
80
|
+
case "ctx":
|
|
81
|
+
return ctx;
|
|
82
|
+
default:
|
|
83
|
+
return Reflect.get(target, key2, receiver);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
set(target, key2, value, receiver) {
|
|
87
|
+
return Reflect.set(target, key2, value, receiver);
|
|
88
|
+
},
|
|
89
|
+
defineProperty(target, p, attrs) {
|
|
90
|
+
return Reflect.defineProperty(target, p, attrs);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
const fn = api[key];
|
|
94
|
+
const result = await fn.call(trap, trap);
|
|
95
|
+
if (typeof result === "string") {
|
|
96
|
+
return Buffer.from(result, "utf-8");
|
|
97
|
+
}
|
|
98
|
+
if (result && typeof result === "object") {
|
|
99
|
+
return Buffer.from(JSON.stringify(result), "utf-8");
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
_Router.routes = {
|
|
106
|
+
/**
|
|
107
|
+
* - `key` is the constuctor of object which used to match the API class
|
|
108
|
+
*/
|
|
109
|
+
get: /* @__PURE__ */ new Map(),
|
|
110
|
+
post: /* @__PURE__ */ new Map()
|
|
111
|
+
};
|
|
112
|
+
let Router = _Router;
|
|
113
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
114
|
+
0 && (module.exports = {
|
|
115
|
+
Router
|
|
116
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
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 api_exports = {};
|
|
20
|
+
__export(api_exports, {
|
|
21
|
+
SocketAPILoader: () => SocketAPILoader
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(api_exports);
|
|
24
|
+
var import_common = require("@rsdoctor/utils/common");
|
|
25
|
+
class SocketAPILoader {
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
this.dataLoader = new import_common.Data.APIDataLoader(this);
|
|
29
|
+
}
|
|
30
|
+
async loadManifest() {
|
|
31
|
+
return this.options.sdk.getManifestData();
|
|
32
|
+
}
|
|
33
|
+
async loadData(key) {
|
|
34
|
+
const data = this.options.sdk.getStoreData();
|
|
35
|
+
const sep = ".";
|
|
36
|
+
let res = data[key];
|
|
37
|
+
if (key.includes(sep)) {
|
|
38
|
+
res = key.split(sep).reduce((t, k) => t[k], data);
|
|
39
|
+
}
|
|
40
|
+
return res;
|
|
41
|
+
}
|
|
42
|
+
get loadAPIData() {
|
|
43
|
+
return this.dataLoader.loadAPI;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
SocketAPILoader
|
|
49
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
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 socket_exports = {};
|
|
20
|
+
__export(socket_exports, {
|
|
21
|
+
Socket: () => Socket
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(socket_exports);
|
|
24
|
+
var import_types = require("@rsdoctor/types");
|
|
25
|
+
var import_socket = require("socket.io");
|
|
26
|
+
var import_util = require("util");
|
|
27
|
+
var import_api = require("./api");
|
|
28
|
+
class Socket {
|
|
29
|
+
constructor(options) {
|
|
30
|
+
this.options = options;
|
|
31
|
+
this.map = /* @__PURE__ */ new Map();
|
|
32
|
+
this.loader = new import_api.SocketAPILoader({ sdk: options.sdk });
|
|
33
|
+
}
|
|
34
|
+
bootstrap() {
|
|
35
|
+
this.io = new import_socket.Server(this.options.server, {
|
|
36
|
+
cors: {
|
|
37
|
+
origin: "*"
|
|
38
|
+
},
|
|
39
|
+
...this.options.socketOptions
|
|
40
|
+
});
|
|
41
|
+
this.io.on("connection", (socket) => {
|
|
42
|
+
this.setupSocket(socket);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
setupSocket(socket) {
|
|
46
|
+
Object.values(import_types.SDK.ServerAPI.API).forEach((api) => {
|
|
47
|
+
socket.on(api, async (body, callback) => {
|
|
48
|
+
this.saveRequestToMap(api, body);
|
|
49
|
+
callback(await this.getAPIResponse(api, body));
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
saveRequestToMap(api, body = null) {
|
|
54
|
+
if (!this.map.has(api)) {
|
|
55
|
+
this.map.set(api, []);
|
|
56
|
+
}
|
|
57
|
+
const list = this.map.get(api);
|
|
58
|
+
if (!list.some((e) => e === body || (0, import_util.isDeepStrictEqual)(e, body))) {
|
|
59
|
+
list.push(body);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async getAPIResponse(api, body) {
|
|
63
|
+
const data = await this.loader.loadAPIData(
|
|
64
|
+
api,
|
|
65
|
+
body
|
|
66
|
+
);
|
|
67
|
+
const response = {
|
|
68
|
+
req: {
|
|
69
|
+
api,
|
|
70
|
+
body
|
|
71
|
+
},
|
|
72
|
+
res: data
|
|
73
|
+
};
|
|
74
|
+
return response;
|
|
75
|
+
}
|
|
76
|
+
async broadcast() {
|
|
77
|
+
clearImmediate(this.timer);
|
|
78
|
+
this.timer = setImmediate(async () => {
|
|
79
|
+
const promises = [];
|
|
80
|
+
this.map.forEach((bodies, api) => {
|
|
81
|
+
bodies.forEach((body) => {
|
|
82
|
+
promises.push(
|
|
83
|
+
(async () => {
|
|
84
|
+
const res = await this.getAPIResponse(api, body);
|
|
85
|
+
this.io.emit(api, res);
|
|
86
|
+
})()
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
await Promise.all(promises);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
sendAPIData(api, msg) {
|
|
94
|
+
this.io.sockets.emit(api, msg);
|
|
95
|
+
}
|
|
96
|
+
dispose() {
|
|
97
|
+
this.io.disconnectSockets();
|
|
98
|
+
this.io.close();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
102
|
+
0 && (module.exports = {
|
|
103
|
+
Socket
|
|
104
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
getDataByPagination: () => getDataByPagination
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(utils_exports);
|
|
24
|
+
function getDataByPagination(data, pagination) {
|
|
25
|
+
const { page = 1, pageSize = 1e3 } = pagination;
|
|
26
|
+
return {
|
|
27
|
+
data: data.slice((page - 1) * pageSize, page * pageSize),
|
|
28
|
+
pagination: {
|
|
29
|
+
page,
|
|
30
|
+
pageSize,
|
|
31
|
+
hasNextPage: page <= 0 ? false : page * pageSize < data.length
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
36
|
+
0 && (module.exports = {
|
|
37
|
+
getDataByPagination
|
|
38
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
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 constant_exports = {};
|
|
30
|
+
__export(constant_exports, {
|
|
31
|
+
CLOUD_DIR: () => CLOUD_DIR
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(constant_exports);
|
|
34
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
35
|
+
const CLOUD_DIR = `rsdoctor/manifests/${(0, import_dayjs.default)().format(
|
|
36
|
+
"YYYYMMDD"
|
|
37
|
+
)}`;
|
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
39
|
+
0 && (module.exports = {
|
|
40
|
+
CLOUD_DIR
|
|
41
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
var utils_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(utils_exports);
|
|
18
|
+
__reExport(utils_exports, require("./constant"), module.exports);
|
|
19
|
+
__reExport(utils_exports, require("./upload"), module.exports);
|
|
20
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
21
|
+
0 && (module.exports = {
|
|
22
|
+
...require("./constant"),
|
|
23
|
+
...require("./upload")
|
|
24
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
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 upload_exports = {};
|
|
20
|
+
__export(upload_exports, {
|
|
21
|
+
transformDataUrls: () => transformDataUrls
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(upload_exports);
|
|
24
|
+
const transformDataUrls = (d) => {
|
|
25
|
+
return d.reduce((t, item) => {
|
|
26
|
+
t[item.name] = Array.isArray(item.files) ? item.files.map((e) => e.path) : item.files;
|
|
27
|
+
return t;
|
|
28
|
+
}, {});
|
|
29
|
+
};
|
|
30
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
31
|
+
0 && (module.exports = {
|
|
32
|
+
transformDataUrls
|
|
33
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sdk";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { DoctorSlaveSDK } from "./slave";
|
|
2
|
+
class DoctorSDKController {
|
|
3
|
+
constructor(root = process.cwd()) {
|
|
4
|
+
this.slaves = [];
|
|
5
|
+
this.root = "";
|
|
6
|
+
this.root = root;
|
|
7
|
+
}
|
|
8
|
+
get master() {
|
|
9
|
+
return this.slaves[0];
|
|
10
|
+
}
|
|
11
|
+
getLastSdk() {
|
|
12
|
+
return this.slaves[this.slaves.length - 1];
|
|
13
|
+
}
|
|
14
|
+
hasName(name) {
|
|
15
|
+
return Boolean(this.slaves.find((item) => item.name === name));
|
|
16
|
+
}
|
|
17
|
+
getSeriesData(serverUrl = false) {
|
|
18
|
+
return this.slaves.map((item) => {
|
|
19
|
+
const data = {
|
|
20
|
+
name: item.name,
|
|
21
|
+
path: item.diskManifestPath,
|
|
22
|
+
stage: item.stage
|
|
23
|
+
};
|
|
24
|
+
if (serverUrl) {
|
|
25
|
+
data.origin = item.server.origin;
|
|
26
|
+
}
|
|
27
|
+
return data;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
createSlave({
|
|
31
|
+
name,
|
|
32
|
+
stage,
|
|
33
|
+
extraConfig
|
|
34
|
+
}) {
|
|
35
|
+
const slave = new DoctorSlaveSDK({
|
|
36
|
+
name,
|
|
37
|
+
stage,
|
|
38
|
+
controller: this,
|
|
39
|
+
extraConfig
|
|
40
|
+
});
|
|
41
|
+
this.slaves.push(slave);
|
|
42
|
+
this.slaves.sort((a, b) => a.stage - b.stage);
|
|
43
|
+
return slave;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
DoctorSDKController
|
|
48
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Server } from "@rsdoctor/utils/build";
|
|
2
|
+
import { DoctorServer } from "../server";
|
|
3
|
+
class DoctorSlaveServer extends DoctorServer {
|
|
4
|
+
constructor(sdk, port = Server.defaultPort) {
|
|
5
|
+
super(sdk, port);
|
|
6
|
+
this.sdk = sdk;
|
|
7
|
+
}
|
|
8
|
+
async openClientPage(...args) {
|
|
9
|
+
if (this.sdk.isMaster) {
|
|
10
|
+
return super.openClientPage(...args);
|
|
11
|
+
}
|
|
12
|
+
return Promise.resolve();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
DoctorSlaveServer
|
|
17
|
+
};
|