react-cheminfo 0.77.0 → 0.78.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/lib/host/core/connectHost.js +1 -1
- package/lib/host/core/connectHost.js.map +1 -1
- package/lib/host/core/connectTool.d.ts +103 -0
- package/lib/host/core/connectTool.d.ts.map +1 -0
- package/lib/host/core/connectTool.js +169 -0
- package/lib/host/core/connectTool.js.map +1 -0
- package/lib/host/core/hostOutputs.d.ts +16 -3
- package/lib/host/core/hostOutputs.d.ts.map +1 -1
- package/lib/host/core/hostOutputs.js +38 -4
- package/lib/host/core/hostOutputs.js.map +1 -1
- package/lib/host/core/index.d.ts +8 -2
- package/lib/host/core/index.d.ts.map +1 -1
- package/lib/host/core/index.js +4 -1
- package/lib/host/core/index.js.map +1 -1
- package/lib/host/core/kinds.d.ts +31 -3
- package/lib/host/core/kinds.d.ts.map +1 -1
- package/lib/host/core/kinds.js +35 -4
- package/lib/host/core/kinds.js.map +1 -1
- package/lib/host/core/messageValues.d.ts +29 -0
- package/lib/host/core/messageValues.d.ts.map +1 -0
- package/lib/host/core/messageValues.js +57 -0
- package/lib/host/core/messageValues.js.map +1 -0
- package/lib/host/core/protocol.d.ts +2 -5
- package/lib/host/core/protocol.d.ts.map +1 -1
- package/lib/host/core/protocol.js +3 -37
- package/lib/host/core/protocol.js.map +1 -1
- package/lib/host/core/resultKinds.d.ts +74 -0
- package/lib/host/core/resultKinds.d.ts.map +1 -0
- package/lib/host/core/resultKinds.js +40 -0
- package/lib/host/core/resultKinds.js.map +1 -0
- package/lib/host/core/toolMessages.d.ts +24 -0
- package/lib/host/core/toolMessages.d.ts.map +1 -0
- package/lib/host/core/toolMessages.js +136 -0
- package/lib/host/core/toolMessages.js.map +1 -0
- package/lib/host/ui/index.d.ts +2 -0
- package/lib/host/ui/index.d.ts.map +1 -1
- package/lib/host/ui/index.js +1 -0
- package/lib/host/ui/index.js.map +1 -1
- package/lib/host/ui/useFramedTool.d.ts +74 -0
- package/lib/host/ui/useFramedTool.d.ts.map +1 -0
- package/lib/host/ui/useFramedTool.js +125 -0
- package/lib/host/ui/useFramedTool.js.map +1 -0
- package/lib/molecule3d/ui/MoleculeCanvas3D.d.ts.map +1 -1
- package/lib/molecule3d/ui/MoleculeCanvas3D.js +10 -2
- package/lib/molecule3d/ui/MoleculeCanvas3D.js.map +1 -1
- package/lib/molecule3d/ui/exportMoleculeImage.d.ts +10 -0
- package/lib/molecule3d/ui/exportMoleculeImage.d.ts.map +1 -1
- package/lib/molecule3d/ui/exportMoleculeImage.js +17 -0
- package/lib/molecule3d/ui/exportMoleculeImage.js.map +1 -1
- package/lib/molecule3d/ui/index.d.ts +1 -1
- package/lib/molecule3d/ui/index.d.ts.map +1 -1
- package/lib/molecule3d/ui/moleculeViewer3DProps.d.ts +23 -0
- package/lib/molecule3d/ui/moleculeViewer3DProps.d.ts.map +1 -1
- package/lib/molecule3d/ui/useImageExport.d.ts +3 -0
- package/lib/molecule3d/ui/useImageExport.d.ts.map +1 -1
- package/lib/molecule3d/ui/useImageExport.js +21 -3
- package/lib/molecule3d/ui/useImageExport.js.map +1 -1
- package/package.json +1 -1
- package/src/host/core/connectHost.ts +1 -1
- package/src/host/core/connectTool.ts +285 -0
- package/src/host/core/hostOutputs.ts +47 -5
- package/src/host/core/index.ts +20 -1
- package/src/host/core/kinds.ts +53 -8
- package/src/host/core/messageValues.ts +58 -0
- package/src/host/core/protocol.ts +5 -37
- package/src/host/core/resultKinds.ts +65 -0
- package/src/host/core/toolMessages.ts +160 -0
- package/src/host/ui/index.ts +6 -0
- package/src/host/ui/useFramedTool.ts +213 -0
- package/src/molecule3d/ui/MoleculeCanvas3D.tsx +10 -1
- package/src/molecule3d/ui/exportMoleculeImage.ts +22 -0
- package/src/molecule3d/ui/index.ts +4 -1
- package/src/molecule3d/ui/moleculeViewer3DProps.ts +24 -0
- package/src/molecule3d/ui/useImageExport.ts +28 -2
|
@@ -41,7 +41,7 @@ export function connectHost(options) {
|
|
|
41
41
|
.then(async () => {
|
|
42
42
|
const result = request.type === 'load'
|
|
43
43
|
? await applyLoad(request)
|
|
44
|
-
: answerGet(request, tool, outputs);
|
|
44
|
+
: await answerGet(request, tool, outputs);
|
|
45
45
|
port?.postMessage(result);
|
|
46
46
|
})
|
|
47
47
|
// A request that failed must not stop the ones after it being served,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectHost.js","sourceRoot":"","sources":["../../../src/host/core/connectHost.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,YAAY,EACZ,SAAS,EACT,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAyCjD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,OAA8B;IACxD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrE,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;IAC/C,IAAI,IAAI,GAAuB,IAAI,CAAC;IACpC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,WAAW,GAAe,EAAE,CAAC;IACjC,IAAI,MAAM,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAE9C,MAAM,SAAS,GACb,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,qBAAqB,CACnB,OAAO,EACP,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EACvC,WAAW,CACZ,CAAC;IACR,MAAM,WAAW,GAAG,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAEnE,SAAS,KAAK,CAAC,IAAa;QAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,MAAM,GAAG,MAAM;aACZ,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,MAAM;gBACrB,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"connectHost.js","sourceRoot":"","sources":["../../../src/host/core/connectHost.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A host's side of the host protocol: answer the `hello` of the tool in a
|
|
3
|
+
* frame with a private port, hand it documents, hear the values it sends back,
|
|
4
|
+
* and ask it for others.
|
|
5
|
+
*
|
|
6
|
+
* Free of React and of the DOM — the frame and the window are handed in — so a
|
|
7
|
+
* test drives the whole exchange against a real tool side and a real
|
|
8
|
+
* `MessageChannel`.
|
|
9
|
+
*/
|
|
10
|
+
import type { HostError, HostItem, OutputMessage, UsedItem } from './protocol.ts';
|
|
11
|
+
import type { ToolHello } from './toolMessages.ts';
|
|
12
|
+
/** A message posted to this window, as far as a host reads it. */
|
|
13
|
+
export interface ToolWindowEvent {
|
|
14
|
+
data: unknown;
|
|
15
|
+
source: unknown;
|
|
16
|
+
origin: string;
|
|
17
|
+
}
|
|
18
|
+
/** The window of the frame the tool runs in. */
|
|
19
|
+
export interface ToolFrameWindow {
|
|
20
|
+
postMessage: (message: unknown, targetOrigin: string, transfer: Transferable[]) => void;
|
|
21
|
+
}
|
|
22
|
+
/** A document handed to a tool: what it shows, and what it sends back unasked. */
|
|
23
|
+
export interface ToolDocument {
|
|
24
|
+
/** What the data belongs to; the tool applies the same document once. */
|
|
25
|
+
document: string;
|
|
26
|
+
/** The values, each with its kind. */
|
|
27
|
+
items: HostItem[];
|
|
28
|
+
/**
|
|
29
|
+
* The outputs the tool sends whenever they change, by key or by kind.
|
|
30
|
+
* @default undefined — nothing is sent unasked
|
|
31
|
+
*/
|
|
32
|
+
accept?: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* What became of a document: shown, refused with the tool's reason, or never
|
|
36
|
+
* answered — another document took its place, the connection was closed, or
|
|
37
|
+
* the tool took too long.
|
|
38
|
+
*/
|
|
39
|
+
export type LoadOutcome = {
|
|
40
|
+
status: 'loaded';
|
|
41
|
+
used: UsedItem[];
|
|
42
|
+
} | {
|
|
43
|
+
status: 'refused';
|
|
44
|
+
error: HostError;
|
|
45
|
+
} | {
|
|
46
|
+
status: 'dropped';
|
|
47
|
+
};
|
|
48
|
+
/** Where the connection runs, and whom it talks to. */
|
|
49
|
+
export interface ToolConnectionOptions {
|
|
50
|
+
/** The window of the frame, once there is one: `hello` is taken from it alone. */
|
|
51
|
+
frame: () => ToolFrameWindow | null;
|
|
52
|
+
/** Where the tool is served from: a message from any other origin is ignored. */
|
|
53
|
+
origin: string;
|
|
54
|
+
/** How the host introduces itself in `connect`. */
|
|
55
|
+
host: {
|
|
56
|
+
name: string;
|
|
57
|
+
};
|
|
58
|
+
/** Subscribe to this window's messages; the returned function unsubscribes. */
|
|
59
|
+
listen: (listener: (event: ToolWindowEvent) => void) => () => void;
|
|
60
|
+
/**
|
|
61
|
+
* Told each time the tool says `hello` — once per load of the frame — with
|
|
62
|
+
* what it takes and gives.
|
|
63
|
+
* @default undefined
|
|
64
|
+
*/
|
|
65
|
+
onHello?: (tool: ToolHello) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Told of every `output` the tool sends.
|
|
68
|
+
* @default undefined
|
|
69
|
+
*/
|
|
70
|
+
onOutput?: (message: OutputMessage) => void;
|
|
71
|
+
/**
|
|
72
|
+
* How long a request may go unanswered, in milliseconds.
|
|
73
|
+
* @default REQUEST_TIMEOUT
|
|
74
|
+
*/
|
|
75
|
+
timeout?: number;
|
|
76
|
+
}
|
|
77
|
+
/** A connection to a framed tool. */
|
|
78
|
+
export interface ToolConnection {
|
|
79
|
+
/**
|
|
80
|
+
* Show a document. One handed over before the tool has connected waits for
|
|
81
|
+
* it, and the latest is handed over again whenever the tool connects anew —
|
|
82
|
+
* after a reload of its frame.
|
|
83
|
+
*/
|
|
84
|
+
load: (document: ToolDocument) => Promise<LoadOutcome>;
|
|
85
|
+
/** The current values of some outputs; rejects with the tool's reason. */
|
|
86
|
+
get: (keys: readonly string[]) => Promise<HostItem[]>;
|
|
87
|
+
/** Stop listening and close the port; what is pending is dropped. */
|
|
88
|
+
close: () => void;
|
|
89
|
+
}
|
|
90
|
+
/** How long a request may go unanswered, in milliseconds. */
|
|
91
|
+
export declare const REQUEST_TIMEOUT = 20000;
|
|
92
|
+
/**
|
|
93
|
+
* Listen for the framed tool's `hello`, and talk to it once it has said it.
|
|
94
|
+
*
|
|
95
|
+
* A `hello` counts only from the frame's window and from the tool's origin —
|
|
96
|
+
* a frame that navigated elsewhere keeps its window — and `connect` is posted
|
|
97
|
+
* to that origin alone, so a page the frame later shows never receives the
|
|
98
|
+
* port, nor anything sent through it.
|
|
99
|
+
* @param options - The frame, the tool's origin, and what to tell.
|
|
100
|
+
* @returns The connection.
|
|
101
|
+
*/
|
|
102
|
+
export declare function connectTool(options: ToolConnectionOptions): ToolConnection;
|
|
103
|
+
//# sourceMappingURL=connectTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectTool.d.ts","sourceRoot":"","sources":["../../../src/host/core/connectTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,aAAa,EAEb,QAAQ,EACT,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,CACX,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,YAAY,EAAE,KACrB,IAAI,CAAC;CACX;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,KAAK,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACpC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,+EAA+E;IAC/E,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IACnE;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,0EAA0E;IAC1E,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,qEAAqE;IACrE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,QAAS,CAAC;AAsBtC;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAgJ1E"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A host's side of the host protocol: answer the `hello` of the tool in a
|
|
3
|
+
* frame with a private port, hand it documents, hear the values it sends back,
|
|
4
|
+
* and ask it for others.
|
|
5
|
+
*
|
|
6
|
+
* Free of React and of the DOM — the frame and the window are handed in — so a
|
|
7
|
+
* test drives the whole exchange against a real tool side and a real
|
|
8
|
+
* `MessageChannel`.
|
|
9
|
+
*/
|
|
10
|
+
import { CONNECT_TYPE, PROTOCOL_VERSION } from "./protocol.js";
|
|
11
|
+
import { readHello, readToolMessage } from "./toolMessages.js";
|
|
12
|
+
/** How long a request may go unanswered, in milliseconds. */
|
|
13
|
+
export const REQUEST_TIMEOUT = 20_000;
|
|
14
|
+
const ABANDONED = {
|
|
15
|
+
timeout: 'The tool did not answer in time.',
|
|
16
|
+
reconnected: 'The tool was reloaded before it answered.',
|
|
17
|
+
closed: 'The tool is no longer connected.',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Listen for the framed tool's `hello`, and talk to it once it has said it.
|
|
21
|
+
*
|
|
22
|
+
* A `hello` counts only from the frame's window and from the tool's origin —
|
|
23
|
+
* a frame that navigated elsewhere keeps its window — and `connect` is posted
|
|
24
|
+
* to that origin alone, so a page the frame later shows never receives the
|
|
25
|
+
* port, nor anything sent through it.
|
|
26
|
+
* @param options - The frame, the tool's origin, and what to tell.
|
|
27
|
+
* @returns The connection.
|
|
28
|
+
*/
|
|
29
|
+
export function connectTool(options) {
|
|
30
|
+
const { frame, origin, host, listen, onHello, onOutput } = options;
|
|
31
|
+
const { timeout = REQUEST_TIMEOUT } = options;
|
|
32
|
+
const waiting = new Map();
|
|
33
|
+
let port = null;
|
|
34
|
+
let shown = null;
|
|
35
|
+
let count = 0;
|
|
36
|
+
let closed = false;
|
|
37
|
+
function post(body, handlers) {
|
|
38
|
+
if (port === null)
|
|
39
|
+
return;
|
|
40
|
+
count += 1;
|
|
41
|
+
const id = `h${count}`;
|
|
42
|
+
const timer = setTimeout(() => {
|
|
43
|
+
waiting.delete(id);
|
|
44
|
+
handlers.abandon('timeout');
|
|
45
|
+
}, timeout);
|
|
46
|
+
waiting.set(id, { ...handlers, timer });
|
|
47
|
+
port.postMessage({ ...body, id });
|
|
48
|
+
}
|
|
49
|
+
function abandonAll(reason) {
|
|
50
|
+
for (const entry of waiting.values()) {
|
|
51
|
+
clearTimeout(entry.timer);
|
|
52
|
+
entry.abandon(reason);
|
|
53
|
+
}
|
|
54
|
+
waiting.clear();
|
|
55
|
+
}
|
|
56
|
+
function settle(entry, outcome) {
|
|
57
|
+
entry.settle?.(outcome);
|
|
58
|
+
entry.settle = null;
|
|
59
|
+
}
|
|
60
|
+
function send(entry) {
|
|
61
|
+
const { document, items, accept } = entry.document;
|
|
62
|
+
post({
|
|
63
|
+
type: 'load',
|
|
64
|
+
document,
|
|
65
|
+
items,
|
|
66
|
+
...(accept === undefined ? {} : { accept }),
|
|
67
|
+
}, {
|
|
68
|
+
answer: (message) => {
|
|
69
|
+
settle(entry, outcomeOf(message));
|
|
70
|
+
},
|
|
71
|
+
// Sent again to the reloaded tool, which answers then.
|
|
72
|
+
abandon: (reason) => {
|
|
73
|
+
if (reason !== 'reconnected')
|
|
74
|
+
settle(entry, { status: 'dropped' });
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function receive(data) {
|
|
79
|
+
const message = readToolMessage(data);
|
|
80
|
+
if (message === null)
|
|
81
|
+
return;
|
|
82
|
+
if (message.type === 'output') {
|
|
83
|
+
onOutput?.(message);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const entry = waiting.get(message.id);
|
|
87
|
+
if (entry === undefined)
|
|
88
|
+
return;
|
|
89
|
+
waiting.delete(message.id);
|
|
90
|
+
clearTimeout(entry.timer);
|
|
91
|
+
entry.answer(message);
|
|
92
|
+
}
|
|
93
|
+
const stopListening = listen((event) => {
|
|
94
|
+
if (closed || event.origin !== origin)
|
|
95
|
+
return;
|
|
96
|
+
const target = frame();
|
|
97
|
+
if (target === null || event.source !== target)
|
|
98
|
+
return;
|
|
99
|
+
const tool = readHello(event.data);
|
|
100
|
+
if (tool === null)
|
|
101
|
+
return;
|
|
102
|
+
abandonAll('reconnected');
|
|
103
|
+
port?.close();
|
|
104
|
+
const channel = new MessageChannel();
|
|
105
|
+
port = channel.port1;
|
|
106
|
+
port.addEventListener('message', (message) => {
|
|
107
|
+
receive(message.data);
|
|
108
|
+
});
|
|
109
|
+
port.start();
|
|
110
|
+
target.postMessage({ type: CONNECT_TYPE, version: PROTOCOL_VERSION, host }, origin, [channel.port2]);
|
|
111
|
+
onHello?.(tool);
|
|
112
|
+
if (shown !== null)
|
|
113
|
+
send(shown);
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
load(document) {
|
|
117
|
+
return new Promise((resolve) => {
|
|
118
|
+
if (shown !== null)
|
|
119
|
+
settle(shown, { status: 'dropped' });
|
|
120
|
+
const entry = { document, settle: resolve };
|
|
121
|
+
shown = entry;
|
|
122
|
+
if (closed)
|
|
123
|
+
settle(entry, { status: 'dropped' });
|
|
124
|
+
else
|
|
125
|
+
send(entry);
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
get(keys) {
|
|
129
|
+
return new Promise((resolve, reject) => {
|
|
130
|
+
if (port === null) {
|
|
131
|
+
reject(new Error(closed
|
|
132
|
+
? ABANDONED.closed
|
|
133
|
+
: 'The tool has not connected yet, so it has nothing to give.'));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
post({ type: 'get', keys: [...keys] }, {
|
|
137
|
+
answer: (message) => {
|
|
138
|
+
if (!message.ok) {
|
|
139
|
+
reject(new Error(message.error.message, { cause: message }));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
resolve('items' in message ? message.items : []);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
abandon: (reason) => {
|
|
146
|
+
reject(new Error(ABANDONED[reason]));
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
close() {
|
|
152
|
+
if (closed)
|
|
153
|
+
return;
|
|
154
|
+
closed = true;
|
|
155
|
+
stopListening();
|
|
156
|
+
abandonAll('closed');
|
|
157
|
+
if (shown !== null)
|
|
158
|
+
settle(shown, { status: 'dropped' });
|
|
159
|
+
port?.close();
|
|
160
|
+
port = null;
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function outcomeOf(message) {
|
|
165
|
+
if (!message.ok)
|
|
166
|
+
return { status: 'refused', error: message.error };
|
|
167
|
+
return { status: 'loaded', used: 'used' in message ? message.used : [] };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=connectTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectTool.js","sourceRoot":"","sources":["../../../src/host/core/connectTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* already has: the values as they stood once its document was applied, then
|
|
7
7
|
* every value sent since. Opening a document therefore never writes it back,
|
|
8
8
|
* and a band picked on one spectrum of a sample leaves the others alone.
|
|
9
|
+
*
|
|
10
|
+
* A value that costs something to make — a picture rendered from the scene on
|
|
11
|
+
* screen — is not read with the others: it is rendered when a `get` names it,
|
|
12
|
+
* and never sent unasked.
|
|
9
13
|
*/
|
|
10
14
|
import type { GetRequest, HostItem, OutputMessage, ResultMessage, ToolInterface } from './protocol.ts';
|
|
11
15
|
/** Where a tool's outputs are read, and how their changes are heard. */
|
|
@@ -18,6 +22,14 @@ export interface HostOutputs {
|
|
|
18
22
|
read: () => readonly HostItem[];
|
|
19
23
|
/** Be told whenever they may have changed; the returned function stops it. */
|
|
20
24
|
subscribe: (listener: () => void) => () => void;
|
|
25
|
+
/**
|
|
26
|
+
* The outputs made only when a host asks for them, by key: a `get` naming one
|
|
27
|
+
* waits for its value, which is never sent unasked. A function resolving to
|
|
28
|
+
* `undefined` has nothing to give yet; one that rejects answers the `get`
|
|
29
|
+
* with its error's message.
|
|
30
|
+
* @default undefined — every output is read by `read`
|
|
31
|
+
*/
|
|
32
|
+
render?: Readonly<Record<string, () => Promise<HostItem | undefined>>>;
|
|
21
33
|
}
|
|
22
34
|
/**
|
|
23
35
|
* How long the outputs must stay still before a change is sent, in
|
|
@@ -26,13 +38,14 @@ export interface HostOutputs {
|
|
|
26
38
|
export declare const OUTPUT_DELAY = 300;
|
|
27
39
|
/**
|
|
28
40
|
* Answer a `get` with the values it asks for — every output when it names
|
|
29
|
-
* none.
|
|
41
|
+
* none — rendering those made on request.
|
|
30
42
|
* @param request - The request.
|
|
31
43
|
* @param tool - What the tool hands back.
|
|
32
44
|
* @param outputs - Where the values are read, if anywhere.
|
|
33
|
-
* @returns The values, or `no-output` when the tool has none of those asked
|
|
45
|
+
* @returns The values, or `no-output` when the tool has none of those asked,
|
|
46
|
+
* or one could not be made.
|
|
34
47
|
*/
|
|
35
|
-
export declare function answerGet(request: GetRequest, tool: ToolInterface, outputs: HostOutputs | undefined): ResultMessage
|
|
48
|
+
export declare function answerGet(request: GetRequest, tool: ToolInterface, outputs: HostOutputs | undefined): Promise<ResultMessage>;
|
|
36
49
|
/** What the connection tells the publisher, and the means to stop it. */
|
|
37
50
|
export interface OutputPublisher {
|
|
38
51
|
/** A document was applied: what the host has is what the tool now shows. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostOutputs.d.ts","sourceRoot":"","sources":["../../../src/host/core/hostOutputs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hostOutputs.d.ts","sourceRoot":"","sources":["../../../src/host/core/hostOutputs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,EAAE,MAAM,SAAS,QAAQ,EAAE,CAAC;IAChC,8EAA8E;IAC9E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;CACxE;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,OAAO,CAAC,aAAa,CAAC,CAyCxB;AAYD,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAChE,oCAAoC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,yBAAyB;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,EACtC,KAAK,EAAE,MAAM,GACZ,eAAe,CA4CjB"}
|
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* already has: the values as they stood once its document was applied, then
|
|
7
7
|
* every value sent since. Opening a document therefore never writes it back,
|
|
8
8
|
* and a band picked on one spectrum of a sample leaves the others alone.
|
|
9
|
+
*
|
|
10
|
+
* A value that costs something to make — a picture rendered from the scene on
|
|
11
|
+
* screen — is not read with the others: it is rendered when a `get` names it,
|
|
12
|
+
* and never sent unasked.
|
|
9
13
|
*/
|
|
10
14
|
import { kindAccepts } from "./kinds.js";
|
|
11
15
|
/**
|
|
@@ -15,13 +19,14 @@ import { kindAccepts } from "./kinds.js";
|
|
|
15
19
|
export const OUTPUT_DELAY = 300;
|
|
16
20
|
/**
|
|
17
21
|
* Answer a `get` with the values it asks for — every output when it names
|
|
18
|
-
* none.
|
|
22
|
+
* none — rendering those made on request.
|
|
19
23
|
* @param request - The request.
|
|
20
24
|
* @param tool - What the tool hands back.
|
|
21
25
|
* @param outputs - Where the values are read, if anywhere.
|
|
22
|
-
* @returns The values, or `no-output` when the tool has none of those asked
|
|
26
|
+
* @returns The values, or `no-output` when the tool has none of those asked,
|
|
27
|
+
* or one could not be made.
|
|
23
28
|
*/
|
|
24
|
-
export function answerGet(request, tool, outputs) {
|
|
29
|
+
export async function answerGet(request, tool, outputs) {
|
|
25
30
|
const { id, keys } = request;
|
|
26
31
|
const declared = new Set();
|
|
27
32
|
for (const output of tool.outputs)
|
|
@@ -39,11 +44,40 @@ export function answerGet(request, tool, outputs) {
|
|
|
39
44
|
}
|
|
40
45
|
const items = [];
|
|
41
46
|
for (const item of outputs.read()) {
|
|
42
|
-
if (item.key
|
|
47
|
+
if (item.key === undefined || !wanted.has(item.key))
|
|
48
|
+
continue;
|
|
49
|
+
if (renderOf(outputs, item.key) === undefined)
|
|
43
50
|
items.push(item);
|
|
44
51
|
}
|
|
52
|
+
const renders = [];
|
|
53
|
+
const renderedKeys = [];
|
|
54
|
+
for (const key of wanted) {
|
|
55
|
+
const render = renderOf(outputs, key);
|
|
56
|
+
if (render === undefined)
|
|
57
|
+
continue;
|
|
58
|
+
renders.push(render);
|
|
59
|
+
renderedKeys.push(key);
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const made = await Promise.all(renders.map((render) => render()));
|
|
63
|
+
for (let index = 0; index < made.length; index++) {
|
|
64
|
+
const item = made[index];
|
|
65
|
+
const key = renderedKeys[index];
|
|
66
|
+
if (item !== undefined && key !== undefined)
|
|
67
|
+
items.push({ ...item, key });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return noOutput(id, error instanceof Error ? error.message : String(error));
|
|
72
|
+
}
|
|
45
73
|
return { type: 'result', id, ok: true, items };
|
|
46
74
|
}
|
|
75
|
+
function renderOf(outputs, key) {
|
|
76
|
+
const { render } = outputs;
|
|
77
|
+
return render !== undefined && Object.hasOwn(render, key)
|
|
78
|
+
? render[key]
|
|
79
|
+
: undefined;
|
|
80
|
+
}
|
|
47
81
|
/**
|
|
48
82
|
* Send the host what changed of the outputs it accepted, once they settle.
|
|
49
83
|
* @param outputs - Where the values are read.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostOutputs.js","sourceRoot":"","sources":["../../../src/host/core/hostOutputs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hostOutputs.js","sourceRoot":"","sources":["../../../src/host/core/hostOutputs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6BzC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAmB,EACnB,IAAmB,EACnB,OAAgC;IAEhC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;QAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5D,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,QAAQ,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,gCAAgC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC;IAChE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,QAAQ,CACb,EAAE,EACF,GAAG,IAAI,CAAC,IAAI,yBAAyB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAC1D,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9D,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,OAAO,GAA+C,EAAE,CAAC;IAC/D,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CACf,OAAoB,EACpB,GAAW;IAEX,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACb,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAiBD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAoB,EACpB,IAAsC,EACtC,KAAa;IAEb,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,IAAI,KAAgD,CAAC;IAErD,SAAS,KAAK;QACZ,KAAK,GAAG,SAAS,CAAC;QAClB,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAC9B,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI;gBAAE,SAAS;YACjD,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,SAAS,IAAI;QACX,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,SAAS,CAAC;IACpB,CAAC;IAED,OAAO;QACL,QAAQ,CAAC,IAAI,EAAE,MAAM;YACnB,IAAI,EAAE,CAAC;YACP,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3B,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAChE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO;YACL,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO;YACrD,IAAI,EAAE,CAAC;YACP,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,KAAK;YACH,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CACnB,OAAoB,EACpB,QAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4C,CAAC;IACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,SAAS;QAC1C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1D,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;YAAE,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,EAAE,EAAE;YAC9B,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,IAAc,EAAE,QAA6B;IAC/D,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,OAAe;IAC3C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE;QACF,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC"}
|
package/lib/host/core/index.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
export type { HostConnectionOptions, HostMessageEvent } from './connectHost.ts';
|
|
2
2
|
export { connectHost } from './connectHost.ts';
|
|
3
|
+
export type { LoadOutcome, ToolConnection, ToolConnectionOptions, ToolDocument, ToolFrameWindow, ToolWindowEvent, } from './connectTool.ts';
|
|
4
|
+
export { REQUEST_TIMEOUT, connectTool } from './connectTool.ts';
|
|
3
5
|
export type { HostOutputs, OutputPublisher } from './hostOutputs.ts';
|
|
4
6
|
export { OUTPUT_DELAY, answerGet, createOutputPublisher, } from './hostOutputs.ts';
|
|
5
7
|
export type { StructureValue } from './hostStructure.ts';
|
|
6
8
|
export { STRUCTURE_KINDS, hostStructureLoader, hostStructureSource, readHostMolecule, } from './hostStructure.ts';
|
|
7
9
|
export type { IrJdxValue, IrPeakValue, IrPeaksValue } from './irKinds.ts';
|
|
8
10
|
export { IR_JDX_SCHEMA, IR_PEAKS_SCHEMA } from './irKinds.ts';
|
|
9
|
-
export type { CheckOutcome, CheckedValue, KnownKind, MolfileValue, OclIdValue, SmilesValue, } from './kinds.ts';
|
|
10
|
-
export { checkValue, isKnownKind, kindAccepts } from './kinds.ts';
|
|
11
|
+
export type { CheckOutcome, CheckedOf, CheckedValue, KnownKind, MolfileValue, OclIdValue, SmilesValue, } from './kinds.ts';
|
|
12
|
+
export { checkValue, isKnownKind, kindAccepts, readOutput } from './kinds.ts';
|
|
11
13
|
export type { GetRequest, HelloMessage, HostError, HostErrorCode, HostItem, HostRequest, LoadRequest, OutputMessage, ResultMessage, ToolInput, ToolInterface, ToolOutput, UsedItem, } from './protocol.ts';
|
|
12
14
|
export { CONNECT_TYPE, HELLO_TYPE, MAX_ITEMS, MAX_LABEL_LENGTH, PROTOCOL_VERSION, isConnect, parseRequest, } from './protocol.ts';
|
|
15
|
+
export type { NameValue, SvgImageValue, TableCell, TableValue, } from './resultKinds.ts';
|
|
16
|
+
export { NAME_SCHEMA, SVG_IMAGE_SCHEMA, TABLE_SCHEMA } from './resultKinds.ts';
|
|
13
17
|
export type { InputSelection, LoadedInput } from './selectInputs.ts';
|
|
14
18
|
export { selectInputs } from './selectInputs.ts';
|
|
19
|
+
export type { ToolHello } from './toolMessages.ts';
|
|
20
|
+
export { readHello, readToolMessage } from './toolMessages.ts';
|
|
15
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/host/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,SAAS,EACT,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/host/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,SAAS,EACT,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
package/lib/host/core/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export { connectHost } from "./connectHost.js";
|
|
2
|
+
export { REQUEST_TIMEOUT, connectTool } from "./connectTool.js";
|
|
2
3
|
export { OUTPUT_DELAY, answerGet, createOutputPublisher, } from "./hostOutputs.js";
|
|
3
4
|
export { STRUCTURE_KINDS, hostStructureLoader, hostStructureSource, readHostMolecule, } from "./hostStructure.js";
|
|
4
5
|
export { IR_JDX_SCHEMA, IR_PEAKS_SCHEMA } from "./irKinds.js";
|
|
5
|
-
export { checkValue, isKnownKind, kindAccepts } from "./kinds.js";
|
|
6
|
+
export { checkValue, isKnownKind, kindAccepts, readOutput } from "./kinds.js";
|
|
6
7
|
export { CONNECT_TYPE, HELLO_TYPE, MAX_ITEMS, MAX_LABEL_LENGTH, PROTOCOL_VERSION, isConnect, parseRequest, } from "./protocol.js";
|
|
8
|
+
export { NAME_SCHEMA, SVG_IMAGE_SCHEMA, TABLE_SCHEMA } from "./resultKinds.js";
|
|
7
9
|
export { selectInputs } from "./selectInputs.js";
|
|
10
|
+
export { readHello, readToolMessage } from "./toolMessages.js";
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/host/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/host/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EACL,YAAY,EACZ,SAAS,EACT,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAU9D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgB9E,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
package/lib/host/core/kinds.d.ts
CHANGED
|
@@ -4,14 +4,17 @@
|
|
|
4
4
|
* name, a JSON Schema, and ajv.
|
|
5
5
|
*
|
|
6
6
|
* The names are pipeline's (`chem.molfile.2d`, `chem.ocl.id`…), plus
|
|
7
|
-
* `chem.smiles`, which pipeline lists among its future schemas,
|
|
8
|
-
* infrared kinds of `./irKinds.ts
|
|
7
|
+
* `chem.smiles`, which pipeline lists among its future schemas, the two
|
|
8
|
+
* infrared kinds of `./irKinds.ts`, and the kinds a tool hands back, of
|
|
9
|
+
* `./resultKinds.ts`. A name with children is a category whose
|
|
9
10
|
* schema every child satisfies, so `chem.molfile` reads `chem.molfile.2d` and
|
|
10
11
|
* `chem.molfile.3d.h.energy` alike; the fields a tool does not read are
|
|
11
12
|
* stripped rather than refused, so a host sending more than it needs to is
|
|
12
13
|
* never turned away.
|
|
13
14
|
*/
|
|
14
15
|
import type { IrJdxValue, IrPeaksValue } from './irKinds.ts';
|
|
16
|
+
import type { HostItem } from './protocol.ts';
|
|
17
|
+
import type { NameValue, SvgImageValue, TableValue } from './resultKinds.ts';
|
|
15
18
|
/** A molfile, V2000 or V3000. */
|
|
16
19
|
export interface MolfileValue {
|
|
17
20
|
molfile: string;
|
|
@@ -41,9 +44,22 @@ export type CheckedValue = {
|
|
|
41
44
|
} | {
|
|
42
45
|
kind: 'spectra.ir.peaks';
|
|
43
46
|
value: IrPeaksValue;
|
|
47
|
+
} | {
|
|
48
|
+
kind: 'image.svg';
|
|
49
|
+
value: SvgImageValue;
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'chem.name';
|
|
52
|
+
value: NameValue;
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'data.table';
|
|
55
|
+
value: TableValue;
|
|
44
56
|
};
|
|
45
|
-
/** The name of a kind a tool
|
|
57
|
+
/** The name of a kind there is a schema for: one a tool reads, or one it hands back. */
|
|
46
58
|
export type KnownKind = CheckedValue['kind'];
|
|
59
|
+
/** A checked value of one kind. */
|
|
60
|
+
export type CheckedOf<K extends KnownKind> = Extract<CheckedValue, {
|
|
61
|
+
kind: K;
|
|
62
|
+
}>;
|
|
47
63
|
/** What checking a value gave. */
|
|
48
64
|
export type CheckOutcome = {
|
|
49
65
|
valid: true;
|
|
@@ -78,4 +94,16 @@ export declare function isKnownKind(kind: string): kind is KnownKind;
|
|
|
78
94
|
* them, `'/idCode: must be string'`.
|
|
79
95
|
*/
|
|
80
96
|
export declare function checkValue(kind: KnownKind, value: unknown): CheckOutcome;
|
|
97
|
+
/**
|
|
98
|
+
* Read the value a tool handed back under an output, as the kind the host
|
|
99
|
+
* asked for: the item must be of that kind or one under it, and pass that
|
|
100
|
+
* kind's schema.
|
|
101
|
+
* @param items - What the tool handed back.
|
|
102
|
+
* @param key - The output.
|
|
103
|
+
* @param kind - The kind it is read as.
|
|
104
|
+
* @returns The value tagged with the kind, or `undefined` when the tool handed
|
|
105
|
+
* nothing back under that key.
|
|
106
|
+
* @throws {Error} When the item is of another kind, or not of its shape.
|
|
107
|
+
*/
|
|
108
|
+
export declare function readOutput<K extends KnownKind>(items: readonly HostItem[], key: string, kind: K): CheckedOf<K> | undefined;
|
|
81
109
|
//# sourceMappingURL=kinds.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../../src/host/core/kinds.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../../src/host/core/kinds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG7E,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,gBAAgB;AAChB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oEAAoE;AACpE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAE9C,wFAAwF;AACxF,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAE7C,mCAAmC;AACnC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,SAAS,IAAI,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAKhF,kCAAkC;AAClC,MAAM,MAAM,YAAY,GACtB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE9E;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAMtE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAE3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAWxE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,EAC5C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,GACN,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAc1B"}
|