@akala/pm 3.3.4 → 3.5.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/changelog.md +6 -1
- package/commands.json +137 -88
- package/dist/commands/bridge.d.ts +3 -0
- package/dist/commands/bridge.js +8 -0
- package/dist/commands/bridge.js.map +1 -0
- package/dist/commands/proxy.d.ts +3 -0
- package/dist/commands/proxy.js +14 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/reload-metadata.js +1 -1
- package/dist/commands/reload-metadata.js.map +1 -1
- package/dist/commands/start.d.ts +1 -13
- package/dist/commands/start.js +2 -45
- package/dist/commands/start.js.map +1 -1
- package/dist/container.d.ts +16 -12
- package/dist/fork.js +32 -19
- package/dist/fork.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +28 -42
- package/dist/index.js.map +1 -1
- package/dist/ipc-adapter.d.ts +15 -0
- package/dist/ipc-adapter.js +51 -0
- package/dist/ipc-adapter.js.map +1 -0
- package/dist/sidecar.d.ts +4 -0
- package/dist/sidecar.js +47 -0
- package/dist/sidecar.js.map +1 -0
- package/dist/state.d.ts +4 -1
- package/package.json +6 -6
- package/src/commands/bridge.json +18 -0
- package/src/commands/bridge.ts +9 -0
- package/src/commands/proxy.json +15 -0
- package/src/commands/proxy.ts +14 -0
- package/src/commands/reload-metadata.ts +1 -1
- package/src/commands/start.ts +1 -67
- package/src/container.ts +16 -12
- package/src/fork.ts +39 -24
- package/src/index.ts +6 -51
- package/src/ipc-adapter.ts +65 -0
- package/src/sidecar.ts +54 -0
- package/src/state.ts +2 -1
- package/tsconfig.tsbuildinfo +1 -1
package/dist/fork.js
CHANGED
@@ -32,11 +32,12 @@ source_map_support_1.default.install();
|
|
32
32
|
const path = __importStar(require("path"));
|
33
33
|
const ac = __importStar(require("@akala/commands"));
|
34
34
|
const promises_1 = require("fs/promises");
|
35
|
-
const
|
35
|
+
const ipc_adapter_1 = require("./ipc-adapter");
|
36
36
|
const net_1 = require("net");
|
37
37
|
const core_1 = require("@akala/core");
|
38
38
|
const cli_1 = __importStar(require("@akala/cli"));
|
39
39
|
const commands_1 = require("@akala/commands");
|
40
|
+
const serve_metadata_1 = require("@akala/commands/src/serve-metadata");
|
40
41
|
var isPm = false;
|
41
42
|
cli_1.default.useMiddleware({
|
42
43
|
handle: async (c) => {
|
@@ -59,7 +60,7 @@ logMiddleware.preAction(async (c) => {
|
|
59
60
|
await ac.Processors.FileSystem.discoverCommands(c.options.program, cliContainer, { processor: processor, isDirectory: folderOrFile.isDirectory() });
|
60
61
|
});
|
61
62
|
const initMiddleware = new cli_1.NamespaceMiddleware(null);
|
62
|
-
cli_1.default.option('program', { needsValue: true }).option('name', { needsValue: true }).
|
63
|
+
cli_1.default.option('program', { needsValue: true }).option('name', { needsValue: true }).option('tls', { needsValue: false }).
|
63
64
|
use(async (c) => //If pure js file
|
64
65
|
{
|
65
66
|
folderOrFile = await (0, promises_1.lstat)(c.options.program);
|
@@ -87,28 +88,34 @@ cli_1.default.option('program', { needsValue: true }).option('name', { needsValu
|
|
87
88
|
ac.Triggers.addCliOptions(init, initMiddleware);
|
88
89
|
initMiddleware.option('pmSocket', { aliases: ['pm-socket', 'pm-sock'] }).action(async (c) => {
|
89
90
|
let pm;
|
91
|
+
let pmConnectInfo;
|
90
92
|
if (!isPm) {
|
91
93
|
if (process.connected) {
|
92
|
-
pm = new ac.Container('pm', null, new ac.Processors.JsonRpc(ac.Processors.JsonRpc.getConnection(new
|
94
|
+
pm = new ac.Container('pm', null, new ac.Processors.JsonRpc(ac.Processors.JsonRpc.getConnection(new ipc_adapter_1.IpcAdapter(process), cliContainer), true));
|
93
95
|
}
|
94
96
|
else {
|
95
97
|
const pmSocket = new net_1.Socket();
|
96
|
-
await
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
98
|
+
const x = await ac.connectByPreference(pmConnectInfo = (0, serve_metadata_1.parseMetadata)(c.options.pmSocket, c.options.tls), { container: cliContainer });
|
99
|
+
pm = x.container;
|
100
|
+
// await new Promise<void>((resolve, reject) =>
|
101
|
+
// {
|
102
|
+
// pmSocket.on('error', reject)
|
103
|
+
// const remote = /^(?:([^:]+):)?(\d+)$/.exec(c.options.pmSocket);
|
104
|
+
// if (!remote)
|
105
|
+
// {
|
106
|
+
// pmSocket.connect(c.options.pmSocket, resolve);
|
107
|
+
// }
|
108
|
+
// else
|
109
|
+
// {
|
110
|
+
// const host = remote[1];
|
111
|
+
// const port = remote[2];
|
112
|
+
// if (host)
|
113
|
+
// pmSocket.connect(Number(port), host, resolve);
|
114
|
+
// else
|
115
|
+
// pmSocket.connect(Number(port), resolve);
|
116
|
+
// }
|
117
|
+
// })
|
118
|
+
// pm = new ac.Container('pm', null, new ac.Processors.JsonRpc(ac.Processors.JsonRpc.getConnection(new ac.NetSocketAdapter(pmSocket), cliContainer), true));
|
112
119
|
}
|
113
120
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
114
121
|
(0, commands_1.registerCommands)(require('../commands.json').commands.map(ac.Metadata.extractCommandMetadata), null, pm);
|
@@ -118,6 +125,12 @@ cli_1.default.option('program', { needsValue: true }).option('name', { needsValu
|
|
118
125
|
else
|
119
126
|
pm = cliContainer;
|
120
127
|
(0, core_1.module)('@akala/pm').register('container', pm);
|
128
|
+
cliContainer.register(new commands_1.SelfDefinedCommand(async (connectionId) => {
|
129
|
+
if (!pmConnectInfo)
|
130
|
+
pmConnectInfo = await pm.dispatch('connect', 'pm');
|
131
|
+
var pm2 = await ac.connectByPreference(pmConnectInfo, { container: cliContainer });
|
132
|
+
await pm2.container.dispatch('bridge', connectionId);
|
133
|
+
}, '$bridge'));
|
121
134
|
if (init)
|
122
135
|
await cliContainer.dispatch(init, { options: c.options, param: c.args, _trigger: 'cli', pm: pm, context: c });
|
123
136
|
let stop;
|
package/dist/fork.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4EAAoC;AACpC,4BAAG,CAAC,OAAO,EAAE,CAAC;AACd,2CAA4B;AAC5B,oDAAsC;AACtC,0CAAoC;AACpC
|
1
|
+
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -16,12 +16,12 @@ export declare function connect(name: string): Promise<{
|
|
16
16
|
connect: Promise<ServeMetadata>;
|
17
17
|
container: Metadata.Container;
|
18
18
|
}>;
|
19
|
-
declare
|
19
|
+
export declare const defaultOrders: (keyof ServeMetadata)[];
|
20
|
+
export declare type SideCarConnectionPreference = {
|
20
21
|
[key in keyof SidecarMap]?: Partial<ConnectionPreference> & {
|
21
22
|
orders?: (keyof ServeMetadata)[];
|
22
23
|
};
|
23
24
|
};
|
24
|
-
export declare function sidecar(options?: Omit<ConnectionPreference, 'metadata'> | SideCarConnectionPreference | Omit<ConnectionPreference, 'metadata'> & SideCarConnectionPreference, noCache?: boolean): Sidecar;
|
25
25
|
export interface ContainerLite {
|
26
26
|
dispatch(cmd: string, ...args: unknown[]): Promise<unknown>;
|
27
27
|
}
|
@@ -33,4 +33,6 @@ export interface SidecarMap {
|
|
33
33
|
pm: pmContainer;
|
34
34
|
}
|
35
35
|
import getRandomName from './commands/name';
|
36
|
+
import sidecarSingleton, { sidecar } from "./sidecar";
|
37
|
+
export { sidecar, sidecarSingleton };
|
36
38
|
export { getRandomName };
|
package/dist/index.js
CHANGED
@@ -1,9 +1,32 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
2
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
27
|
};
|
5
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.getRandomName = exports.sidecar = exports.connect = exports.pm = exports.InteractError = void 0;
|
29
|
+
exports.getRandomName = exports.sidecarSingleton = exports.sidecar = exports.defaultOrders = exports.connect = exports.pm = exports.InteractError = void 0;
|
7
30
|
const commands_1 = require("@akala/commands");
|
8
31
|
const net_1 = require("net");
|
9
32
|
const core_1 = require("@akala/core");
|
@@ -42,47 +65,10 @@ function connect(name) {
|
|
42
65
|
})();
|
43
66
|
}
|
44
67
|
exports.connect = connect;
|
45
|
-
|
46
|
-
function sidecar(options, noCache) {
|
47
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
48
|
-
return new Proxy({}, {
|
49
|
-
get(target, property) {
|
50
|
-
if (typeof (property) !== 'string')
|
51
|
-
return Reflect.get(target, property);
|
52
|
-
const orders = options && options[property] && options[property].orders || defaultOrders;
|
53
|
-
if (!options)
|
54
|
-
options = {};
|
55
|
-
if (typeof options.preferRemote == 'undefined')
|
56
|
-
options.preferRemote = !process.connected;
|
57
|
-
if (noCache || typeof (target[property]) == 'undefined')
|
58
|
-
Object.defineProperty(target, property, {
|
59
|
-
value: connect(property).then(async (meta) => {
|
60
|
-
try {
|
61
|
-
const c = await (0, commands_1.connectByPreference)(await meta.connect, Object.assign({ metadata: meta.container }, options, options && options[property]), ...orders);
|
62
|
-
return c.container;
|
63
|
-
}
|
64
|
-
catch (e) {
|
65
|
-
if (e && e.statusCode == 404 || !meta.connect) {
|
66
|
-
var c = new commands_1.Container(meta.container.name, null, (0, core_1.module)('@akala/pm').resolve('container').processor);
|
67
|
-
c.processor.useMiddleware(1, {
|
68
|
-
handle(origin, cmd, param) {
|
69
|
-
if (cmd.name.startsWith(meta.container.name + '.'))
|
70
|
-
return undefined;
|
71
|
-
return c.processor.handle(origin, Object.assign({}, cmd, { name: meta.container.name + '.' + cmd.name }), param);
|
72
|
-
}
|
73
|
-
});
|
74
|
-
meta.container.commands.forEach(cmd => c.register(cmd));
|
75
|
-
return c;
|
76
|
-
}
|
77
|
-
throw e;
|
78
|
-
}
|
79
|
-
})
|
80
|
-
});
|
81
|
-
return target[property];
|
82
|
-
}
|
83
|
-
});
|
84
|
-
}
|
85
|
-
exports.sidecar = sidecar;
|
68
|
+
exports.defaultOrders = ['ssocket', 'socket', 'wss', 'ws'];
|
86
69
|
const name_1 = __importDefault(require("./commands/name"));
|
87
70
|
exports.getRandomName = name_1.default;
|
71
|
+
const sidecar_1 = __importStar(require("./sidecar"));
|
72
|
+
exports.sidecarSingleton = sidecar_1.default;
|
73
|
+
Object.defineProperty(exports, "sidecar", { enumerable: true, get: function () { return sidecar_1.sidecar; } });
|
88
74
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAgJ;AAChJ,6BAA6B;AAC7B,sCAAqC;AAUrC,MAAa,aAAc,SAAQ,KAAK;IAIA;IAFpB,IAAI,GAAG,UAAU,CAAC;IAElC,YAAY,OAAe,EAAS,EAAW;QAE3C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFiB,OAAE,GAAF,EAAE,CAAS;IAG/C,CAAC;IAEM,MAAM;QAET,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IACnE,CAAC;CACJ;AAbD,sCAaC;AAED,SAAwB,QAAQ,CAAC,OAAe,EAAE,EAAW;IAEzD,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAHD,2BAGC;AAEM,KAAK,UAAU,EAAE,CAAC,UAAmB;IAExC,IAAI,UAAU,EACd;QACI,MAAM,QAAQ,GAAG,IAAI,YAAM,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,oBAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,qBAAU,CAAC,OAAO,CAAC,qBAAU,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,2BAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACrI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAuB,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,cAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,CAAA,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAClI,IAAA,2BAAgB,EAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;KACb;IACD,OAAO,IAAI,oBAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAZD,gBAYC;AAED,SAAgB,OAAO,CAAC,IAAY;IAEhC,OAAO,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,WAAW,SAA0B;QAE/F,IAAI,aAAa,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAuB,CAAC;QAEtF,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAA2B,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACpR,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AARD,0BAQC;AAEY,QAAA,aAAa,GAA4B,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAkBzF,2DAA4C;AAGnC,wBAHF,cAAa,CAGE;AAFtB,qDAAsD;AACpC,2BADX,iBAAgB,CACW;AAAzB,wFADkB,iBAAO,OAClB"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
/// <reference types="webpack-env" />
|
3
|
+
import { ChildProcess } from "child_process";
|
4
|
+
import * as jsonrpc from '@akala/json-rpc-ws';
|
5
|
+
import { SocketAdapterEventMap } from "@akala/json-rpc-ws";
|
6
|
+
export declare class IpcAdapter implements jsonrpc.SocketAdapter {
|
7
|
+
private cp;
|
8
|
+
get open(): boolean;
|
9
|
+
pipe(socket: jsonrpc.SocketAdapter<unknown>): void;
|
10
|
+
close(): void;
|
11
|
+
send(data: string): void;
|
12
|
+
on<K extends keyof SocketAdapterEventMap>(event: K, handler: (ev: SocketAdapterEventMap[K]) => void): void;
|
13
|
+
once<K extends keyof SocketAdapterEventMap>(event: K, handler: (ev: SocketAdapterEventMap[K]) => void): void;
|
14
|
+
constructor(cp: ChildProcess | NodeJS.Process);
|
15
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.IpcAdapter = void 0;
|
4
|
+
class IpcAdapter {
|
5
|
+
cp;
|
6
|
+
get open() { return !!this.cp.pid; }
|
7
|
+
pipe(socket) {
|
8
|
+
this.on('message', (message) => socket.send(message));
|
9
|
+
this.on('close', () => socket.close());
|
10
|
+
}
|
11
|
+
close() {
|
12
|
+
this.cp.disconnect();
|
13
|
+
}
|
14
|
+
send(data) {
|
15
|
+
if (this.cp.send)
|
16
|
+
this.cp.send(data + '\n');
|
17
|
+
else
|
18
|
+
console.warn(`process ${this.cp.pid} does not support send over IPC`);
|
19
|
+
}
|
20
|
+
on(event, handler) {
|
21
|
+
switch (event) {
|
22
|
+
case 'message':
|
23
|
+
this.cp.on('message', handler);
|
24
|
+
break;
|
25
|
+
case 'open':
|
26
|
+
handler(null);
|
27
|
+
break;
|
28
|
+
case 'close':
|
29
|
+
this.cp.on('disconnect', handler);
|
30
|
+
break;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
once(event, handler) {
|
34
|
+
switch (event) {
|
35
|
+
case 'message':
|
36
|
+
this.cp.once('message', handler);
|
37
|
+
break;
|
38
|
+
case 'open':
|
39
|
+
handler(null);
|
40
|
+
break;
|
41
|
+
case 'close':
|
42
|
+
this.cp.once('disconnect', () => handler(null));
|
43
|
+
break;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
constructor(cp) {
|
47
|
+
this.cp = cp;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
exports.IpcAdapter = IpcAdapter;
|
51
|
+
//# sourceMappingURL=ipc-adapter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ipc-adapter.js","sourceRoot":"","sources":["../src/ipc-adapter.ts"],"names":[],"mappings":";;;AAKA,MAAa,UAAU;IAuDC;IArDpB,IAAI,IAAI,KAAc,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAG7C,IAAI,CAAC,MAAsC;QAEvC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,IAAY;QAEb,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI;YACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;;YAG1B,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,GAAG,iCAAiC,CAAC,CAAC;IAC9E,CAAC;IACD,EAAE,CAAwC,KAAQ,EAAE,OAA+C;QAE/F,QAAQ,KAAK,EACb;YACI,KAAK,SAAS;gBACV,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC/B,MAAM;YACV,KAAK,MAAM;gBACP,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM;YACV,KAAK,OAAO;gBACR,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAClC,MAAM;SACb;IACL,CAAC;IAED,IAAI,CAAwC,KAAQ,EAAE,OAA+C;QAEjG,QAAQ,KAAK,EACb;YACI,KAAK,SAAS;gBACV,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM;YACV,KAAK,MAAM;gBACP,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM;YACV,KAAK,OAAO;gBACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,MAAM;SACb;IACL,CAAC;IAED,YAAoB,EAAiC;QAAjC,OAAE,GAAF,EAAE,CAA+B;IAErD,CAAC;CAEJ;AA3DD,gCA2DC"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import { ConnectionPreference } from "@akala/commands";
|
2
|
+
import { SideCarConnectionPreference, Sidecar } from "./index";
|
3
|
+
export default function (options?: Omit<ConnectionPreference, 'metadata'> | SideCarConnectionPreference | Omit<ConnectionPreference, 'metadata'> & SideCarConnectionPreference, noCache?: boolean): Sidecar;
|
4
|
+
export declare function sidecar(options?: Omit<ConnectionPreference, 'metadata'> | SideCarConnectionPreference | Omit<ConnectionPreference, 'metadata'> & SideCarConnectionPreference, noCache?: boolean): Sidecar;
|
package/dist/sidecar.js
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.sidecar = void 0;
|
4
|
+
const commands_1 = require("@akala/commands");
|
5
|
+
const index_1 = require("./index");
|
6
|
+
let instance;
|
7
|
+
function default_1(options, noCache) {
|
8
|
+
return instance || (instance = sidecar(options, noCache));
|
9
|
+
}
|
10
|
+
exports.default = default_1;
|
11
|
+
function sidecar(options, noCache) {
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
13
|
+
return new Proxy({}, {
|
14
|
+
get(target, property) {
|
15
|
+
if (typeof (property) !== 'string')
|
16
|
+
return Reflect.get(target, property);
|
17
|
+
const orders = options && options[property] && options[property].orders || index_1.defaultOrders;
|
18
|
+
if (!options)
|
19
|
+
options = {};
|
20
|
+
if (typeof options.preferRemote == 'undefined')
|
21
|
+
options.preferRemote = !process.connected;
|
22
|
+
if (noCache || typeof (target[property]) == 'undefined')
|
23
|
+
Object.defineProperty(target, property, {
|
24
|
+
value: (0, index_1.connect)(property).then(async (meta) => {
|
25
|
+
try {
|
26
|
+
const c = await (0, commands_1.connectByPreference)(await meta.connect, Object.assign({ metadata: meta.container }, options, options && options[property]), ...orders);
|
27
|
+
return c.container;
|
28
|
+
}
|
29
|
+
catch (e) {
|
30
|
+
if (e && e.statusCode == 404 || !meta.connect) {
|
31
|
+
return await (0, index_1.connect)('pm').then(async (meta) => {
|
32
|
+
const c = await (0, commands_1.connectByPreference)(await meta.connect, Object.assign({ metadata: meta.container }, options, options && options[property]), ...orders);
|
33
|
+
await c.container.dispatch('proxy', property);
|
34
|
+
(0, commands_1.registerCommands)((await c.container.dispatch('$metadata', true)).commands, c.processor, c.container);
|
35
|
+
return c.container;
|
36
|
+
});
|
37
|
+
}
|
38
|
+
throw e;
|
39
|
+
}
|
40
|
+
})
|
41
|
+
});
|
42
|
+
return target[property];
|
43
|
+
}
|
44
|
+
});
|
45
|
+
}
|
46
|
+
exports.sidecar = sidecar;
|
47
|
+
//# sourceMappingURL=sidecar.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":";;;AAAA,8CAAyG;AAEzG,mCAAuF;AAEvF,IAAI,QAAiB,CAAC;AAEtB,mBAAyB,OAAqJ,EAAE,OAAiB;IAE7L,OAAO,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9D,CAAC;AAHD,4BAGC;AAED,SAAgB,OAAO,CAAC,OAAqJ,EAAE,OAAiB;IAE5L,8DAA8D;IAC9D,OAAO,IAAI,KAAK,CAAU,EAAS,EAAE;QACjC,GAAG,CAAC,MAAM,EAAE,QAAQ;YAEhB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ;gBAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEzC,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,qBAAa,CAAC;YACzF,IAAI,CAAC,OAAO;gBACR,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,OAAO,OAAO,CAAC,YAAY,IAAI,WAAW;gBAC1C,OAAO,CAAC,YAAY,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAW;gBACnD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACpC,KAAK,EAAE,IAAA,eAAO,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;wBAEzC,IACA;4BACI,MAAM,CAAC,GAAG,MAAM,IAAA,8BAAmB,EAAC,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;4BACvJ,OAAO,CAAC,CAAC,SAAS,CAAC;yBACtB;wBACD,OAAO,CAAC,EACR;4BACI,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAC7C;gCACI,OAAO,MAAM,IAAA,eAAO,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oCAE3C,MAAM,CAAC,GAAG,MAAM,IAAA,8BAAmB,EAAC,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;oCACvJ,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oCAC9C,IAAA,2BAAgB,EAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oCACrG,OAAO,CAAC,CAAC,SAAS,CAAC;gCACvB,CAAC,CAAC,CAAC;6BACN;4BACD,MAAM,CAAC,CAAC;yBACX;oBACL,CAAC,CAAC;iBACL,CAAC,CAAC;YACP,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AA1CD,0BA0CC"}
|
package/dist/state.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/// <reference types="node" />
|
2
2
|
import { Container } from "@akala/commands";
|
3
3
|
import { ChildProcess } from "child_process";
|
4
|
-
import { Deferred, SerializableObject } from "@akala/json-rpc-ws";
|
4
|
+
import { Deferred, SerializableObject, SocketAdapter } from "@akala/json-rpc-ws";
|
5
5
|
import { ServeMetadata } from "@akala/commands";
|
6
6
|
import { ProxyConfiguration } from "@akala/config";
|
7
7
|
export default interface State {
|
@@ -10,6 +10,9 @@ export default interface State {
|
|
10
10
|
};
|
11
11
|
isDaemon: boolean;
|
12
12
|
config: ProxyConfiguration<StateConfiguration>;
|
13
|
+
bridges: {
|
14
|
+
[key: string]: SocketAdapter;
|
15
|
+
};
|
13
16
|
}
|
14
17
|
export interface StateConfiguration {
|
15
18
|
containers: {
|
package/package.json
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
"pm": "dist/cli.js",
|
5
5
|
"pm-fork": "dist/fork.js"
|
6
6
|
},
|
7
|
-
"version": "3.
|
7
|
+
"version": "3.5.0",
|
8
8
|
"scripts": {
|
9
9
|
"test": "echo 1",
|
10
10
|
"generate": "ac generate dist/commands commands.json",
|
@@ -19,11 +19,11 @@
|
|
19
19
|
},
|
20
20
|
"homepage": "https://akala.js.org/pm",
|
21
21
|
"dependencies": {
|
22
|
-
"@akala/cli": "^2.1.
|
23
|
-
"@akala/commands": "^3.
|
24
|
-
"@akala/config": "^1.1.
|
25
|
-
"@akala/core": "^9.0.
|
26
|
-
"@akala/json-rpc-ws": "^9.
|
22
|
+
"@akala/cli": "^2.1.8",
|
23
|
+
"@akala/commands": "^3.3.0",
|
24
|
+
"@akala/config": "^1.1.20",
|
25
|
+
"@akala/core": "^9.0.4",
|
26
|
+
"@akala/json-rpc-ws": "^9.5.0",
|
27
27
|
"reflect-metadata": "^0.1.13",
|
28
28
|
"source-map-support": "^0.5.21"
|
29
29
|
},
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "https://raw.githubusercontent.com/npenin/akala/master/packages/commands/command-schema.json",
|
3
|
+
"fs": {
|
4
|
+
"inject": [
|
5
|
+
"param.0",
|
6
|
+
"param.1"
|
7
|
+
]
|
8
|
+
},
|
9
|
+
"jsonrpc": {
|
10
|
+
"inject": [
|
11
|
+
"param.0",
|
12
|
+
"socket"
|
13
|
+
]
|
14
|
+
},
|
15
|
+
"": {
|
16
|
+
"inject": []
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { Container } from "@akala/commands";
|
2
|
+
import { SocketAdapter } from "@akala/json-rpc-ws";
|
3
|
+
import State from "../state";
|
4
|
+
|
5
|
+
export default function (this: State, connectionId: string, socket: SocketAdapter)
|
6
|
+
{
|
7
|
+
this.bridges[connectionId].pipe(socket);
|
8
|
+
socket.pipe(this.bridges[connectionId]);
|
9
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { ErrorWithStatus } from "@akala/cli";
|
2
|
+
import { SocketAdapter } from "@akala/json-rpc-ws";
|
3
|
+
import { randomUUID } from "crypto";
|
4
|
+
import State from "../state";
|
5
|
+
|
6
|
+
export default async function (this: State, name: string, socket: SocketAdapter)
|
7
|
+
{
|
8
|
+
var cp = this.processes[name];
|
9
|
+
if (!cp)
|
10
|
+
throw new ErrorWithStatus(404, `There is no such process with name ${name}`);
|
11
|
+
const connectionId = randomUUID();
|
12
|
+
this.bridges[connectionId] = socket;
|
13
|
+
await cp.dispatch('$bridge', connectionId);
|
14
|
+
}
|
@@ -2,7 +2,7 @@ import { Container, Metadata, updateCommands } from "@akala/commands";
|
|
2
2
|
|
3
3
|
export default async function (remoteContainer: Container<void>)
|
4
4
|
{
|
5
|
-
const metadata: Metadata.Container = await remoteContainer.dispatch('$metadata');
|
5
|
+
const metadata: Metadata.Container = await remoteContainer.dispatch('$metadata', true);
|
6
6
|
remoteContainer.name = metadata.name;
|
7
7
|
updateCommands(metadata.commands, null, remoteContainer);
|
8
8
|
}
|
package/src/commands/start.ts
CHANGED
@@ -5,10 +5,10 @@ import pmContainer from '../container';
|
|
5
5
|
import * as jsonrpc from '@akala/json-rpc-ws'
|
6
6
|
import { eachAsync, logger } from "@akala/core";
|
7
7
|
import { NewLinePrefixer } from "../new-line-prefixer.js";
|
8
|
-
import { SocketAdapterEventMap } from "@akala/json-rpc-ws";
|
9
8
|
import { CliContext, ErrorWithStatus } from "@akala/cli";
|
10
9
|
import getRandomName from "./name";
|
11
10
|
import { ProxyConfiguration } from "@akala/config";
|
11
|
+
import { IpcAdapter } from "../ipc-adapter";
|
12
12
|
|
13
13
|
export default async function start(this: State, pm: pmContainer.container & Container<State>, name: string, context?: CliContext<{ new?: boolean, name: string, inspect?: boolean, verbose?: boolean, wait?: boolean }>): Promise<void | { execPath: string, args: string[], cwd: string, stdio: StdioOptions, shell: boolean, windowsHide: boolean }>
|
14
14
|
{
|
@@ -182,70 +182,4 @@ export default async function start(this: State, pm: pmContainer.container & Con
|
|
182
182
|
}
|
183
183
|
}
|
184
184
|
|
185
|
-
export class IpcAdapter implements jsonrpc.SocketAdapter
|
186
|
-
{
|
187
|
-
get open(): boolean { return !!this.cp.pid }
|
188
|
-
close(): void
|
189
|
-
{
|
190
|
-
this.cp.disconnect();
|
191
|
-
}
|
192
|
-
send(data: string): void
|
193
|
-
{
|
194
|
-
if (this.cp.send)
|
195
|
-
this.cp.send(data + '\n');
|
196
|
-
else
|
197
|
-
console.warn(`process ${this.cp.pid} does not support send over IPC`);
|
198
|
-
}
|
199
|
-
on<K extends keyof SocketAdapterEventMap>(event: K, handler: (ev: SocketAdapterEventMap[K]) => void): void
|
200
|
-
{
|
201
|
-
switch (event)
|
202
|
-
{
|
203
|
-
case 'message':
|
204
|
-
this.cp.on('message', handler);
|
205
|
-
break;
|
206
|
-
case 'open':
|
207
|
-
handler(null);
|
208
|
-
break;
|
209
|
-
case 'close':
|
210
|
-
this.cp.on('disconnect', handler);
|
211
|
-
break;
|
212
|
-
}
|
213
|
-
}
|
214
|
-
|
215
|
-
once<K extends keyof SocketAdapterEventMap>(event: K, handler: (ev: SocketAdapterEventMap[K]) => void): void
|
216
|
-
{
|
217
|
-
switch (event)
|
218
|
-
{
|
219
|
-
case 'message':
|
220
|
-
this.cp.once('message', handler);
|
221
|
-
break;
|
222
|
-
case 'open':
|
223
|
-
handler(null);
|
224
|
-
break;
|
225
|
-
case 'close':
|
226
|
-
this.cp.once('disconnect', () => handler(null));
|
227
|
-
break;
|
228
|
-
}
|
229
|
-
}
|
230
|
-
|
231
|
-
constructor(private cp: ChildProcess | NodeJS.Process)
|
232
|
-
{
|
233
|
-
}
|
234
|
-
|
235
|
-
// _write(chunk: string | Buffer, encoding: string, callback: (error?: any) => void)
|
236
|
-
// {
|
237
|
-
// // The underlying source only deals with strings.
|
238
|
-
// if (Buffer.isBuffer(chunk))
|
239
|
-
// chunk = chunk.toString('utf8');
|
240
|
-
// if (this.cp.send)
|
241
|
-
// this.cp.send(chunk + '\n', callback);
|
242
|
-
// else
|
243
|
-
// callback(new Error('there is no send method on this process'));
|
244
|
-
// }
|
245
|
-
|
246
|
-
// _read()
|
247
|
-
// {
|
248
|
-
// }
|
249
|
-
}
|
250
|
-
|
251
185
|
start.$inject = ['$container', 'param.0', 'options']
|