@rasterex/viewer 1.0.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 +279 -0
- package/SECURITY.md +54 -0
- package/dist/RasterexViewer.d.ts +70 -0
- package/dist/RasterexViewer.d.ts.map +1 -0
- package/dist/RasterexViewer.js +410 -0
- package/dist/RasterexViewer.js.map +1 -0
- package/dist/compat/matrix.d.ts +9 -0
- package/dist/compat/matrix.d.ts.map +1 -0
- package/dist/compat/matrix.js +12 -0
- package/dist/compat/matrix.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/createDocumentViewer.d.ts +8 -0
- package/dist/createDocumentViewer.d.ts.map +1 -0
- package/dist/createDocumentViewer.js +16 -0
- package/dist/createDocumentViewer.js.map +1 -0
- package/dist/createViewer.d.ts +4 -0
- package/dist/createViewer.d.ts.map +1 -0
- package/dist/createViewer.js +5 -0
- package/dist/createViewer.js.map +1 -0
- package/dist/demo-presets.d.ts +45 -0
- package/dist/demo-presets.d.ts.map +1 -0
- package/dist/demo-presets.js +22 -0
- package/dist/demo-presets.js.map +1 -0
- package/dist/demoPresets.d.ts +2 -0
- package/dist/demoPresets.d.ts.map +1 -0
- package/dist/demoPresets.js +2 -0
- package/dist/demoPresets.js.map +1 -0
- package/dist/diagnostics.d.ts +76 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +38 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/domains/AnnotationsApi.d.ts +139 -0
- package/dist/domains/AnnotationsApi.d.ts.map +1 -0
- package/dist/domains/AnnotationsApi.js +256 -0
- package/dist/domains/AnnotationsApi.js.map +1 -0
- package/dist/domains/BlocksApi.d.ts +151 -0
- package/dist/domains/BlocksApi.d.ts.map +1 -0
- package/dist/domains/BlocksApi.js +191 -0
- package/dist/domains/BlocksApi.js.map +1 -0
- package/dist/domains/CanvasApi.d.ts +13 -0
- package/dist/domains/CanvasApi.d.ts.map +1 -0
- package/dist/domains/CanvasApi.js +22 -0
- package/dist/domains/CanvasApi.js.map +1 -0
- package/dist/domains/CollaborationApi.d.ts +65 -0
- package/dist/domains/CollaborationApi.d.ts.map +1 -0
- package/dist/domains/CollaborationApi.js +177 -0
- package/dist/domains/CollaborationApi.js.map +1 -0
- package/dist/domains/CompareApi.d.ts +73 -0
- package/dist/domains/CompareApi.d.ts.map +1 -0
- package/dist/domains/CompareApi.js +175 -0
- package/dist/domains/CompareApi.js.map +1 -0
- package/dist/domains/DocumentsApi.d.ts +175 -0
- package/dist/domains/DocumentsApi.d.ts.map +1 -0
- package/dist/domains/DocumentsApi.js +407 -0
- package/dist/domains/DocumentsApi.js.map +1 -0
- package/dist/domains/LayersApi.d.ts +76 -0
- package/dist/domains/LayersApi.d.ts.map +1 -0
- package/dist/domains/LayersApi.js +159 -0
- package/dist/domains/LayersApi.js.map +1 -0
- package/dist/domains/MeasurementsApi.d.ts +150 -0
- package/dist/domains/MeasurementsApi.d.ts.map +1 -0
- package/dist/domains/MeasurementsApi.js +388 -0
- package/dist/domains/MeasurementsApi.js.map +1 -0
- package/dist/domains/StylesApi.d.ts +50 -0
- package/dist/domains/StylesApi.d.ts.map +1 -0
- package/dist/domains/StylesApi.js +53 -0
- package/dist/domains/StylesApi.js.map +1 -0
- package/dist/domains/ToolsApi.d.ts +251 -0
- package/dist/domains/ToolsApi.d.ts.map +1 -0
- package/dist/domains/ToolsApi.js +275 -0
- package/dist/domains/ToolsApi.js.map +1 -0
- package/dist/domains/canvasBrokerCommands.d.ts +38 -0
- package/dist/domains/canvasBrokerCommands.d.ts.map +1 -0
- package/dist/domains/canvasBrokerCommands.js +79 -0
- package/dist/domains/canvasBrokerCommands.js.map +1 -0
- package/dist/errors.d.ts +28 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +82 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/messaging/CanvasMessageBroker.d.ts +36 -0
- package/dist/messaging/CanvasMessageBroker.d.ts.map +1 -0
- package/dist/messaging/CanvasMessageBroker.js +95 -0
- package/dist/messaging/CanvasMessageBroker.js.map +1 -0
- package/dist/messaging/IframeTransport.d.ts +29 -0
- package/dist/messaging/IframeTransport.d.ts.map +1 -0
- package/dist/messaging/IframeTransport.js +74 -0
- package/dist/messaging/IframeTransport.js.map +1 -0
- package/dist/messaging/MessageClient.d.ts +32 -0
- package/dist/messaging/MessageClient.d.ts.map +1 -0
- package/dist/messaging/MessageClient.js +110 -0
- package/dist/messaging/MessageClient.js.map +1 -0
- package/dist/messaging/ViewerMessagingSession.d.ts +17 -0
- package/dist/messaging/ViewerMessagingSession.d.ts.map +1 -0
- package/dist/messaging/ViewerMessagingSession.js +17 -0
- package/dist/messaging/ViewerMessagingSession.js.map +1 -0
- package/dist/protocol/capabilities.d.ts +6 -0
- package/dist/protocol/capabilities.d.ts.map +1 -0
- package/dist/protocol/capabilities.js +5 -0
- package/dist/protocol/capabilities.js.map +1 -0
- package/dist/protocol/compatibility.d.ts +7 -0
- package/dist/protocol/compatibility.d.ts.map +1 -0
- package/dist/protocol/compatibility.js +2 -0
- package/dist/protocol/compatibility.js.map +1 -0
- package/dist/protocol/constants.d.ts +3 -0
- package/dist/protocol/constants.d.ts.map +1 -0
- package/dist/protocol/constants.js +3 -0
- package/dist/protocol/constants.js.map +1 -0
- package/dist/protocol/envelope.d.ts +27 -0
- package/dist/protocol/envelope.d.ts.map +1 -0
- package/dist/protocol/envelope.js +2 -0
- package/dist/protocol/envelope.js.map +1 -0
- package/dist/protocol/errors.d.ts +42 -0
- package/dist/protocol/errors.d.ts.map +1 -0
- package/dist/protocol/errors.js +35 -0
- package/dist/protocol/errors.js.map +1 -0
- package/dist/protocol/handshake.d.ts +13 -0
- package/dist/protocol/handshake.d.ts.map +1 -0
- package/dist/protocol/handshake.js +2 -0
- package/dist/protocol/handshake.js.map +1 -0
- package/dist/protocol/index.d.ts +10 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +5 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/DomainEventEmitter.d.ts +12 -0
- package/dist/utils/DomainEventEmitter.d.ts.map +1 -0
- package/dist/utils/DomainEventEmitter.js +34 -0
- package/dist/utils/DomainEventEmitter.js.map +1 -0
- package/dist/utils/compatibility.d.ts +15 -0
- package/dist/utils/compatibility.d.ts.map +1 -0
- package/dist/utils/compatibility.js +170 -0
- package/dist/utils/compatibility.js.map +1 -0
- package/dist/utils/createRequestId.d.ts +2 -0
- package/dist/utils/createRequestId.d.ts.map +1 -0
- package/dist/utils/createRequestId.js +6 -0
- package/dist/utils/createRequestId.js.map +1 -0
- package/dist/utils/createSdkInstanceId.d.ts +2 -0
- package/dist/utils/createSdkInstanceId.d.ts.map +1 -0
- package/dist/utils/createSdkInstanceId.js +6 -0
- package/dist/utils/createSdkInstanceId.js.map +1 -0
- package/dist/utils/deriveOrigin.d.ts +2 -0
- package/dist/utils/deriveOrigin.d.ts.map +1 -0
- package/dist/utils/deriveOrigin.js +4 -0
- package/dist/utils/deriveOrigin.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import type { CanvasMessageBroker } from "../messaging/CanvasMessageBroker.js";
|
|
2
|
+
import { type DomainEventHandler, type DomainEventUnsubscribe } from "../utils/DomainEventEmitter.js";
|
|
3
|
+
export interface BlockItem {
|
|
4
|
+
index?: number;
|
|
5
|
+
name?: string;
|
|
6
|
+
visible: boolean;
|
|
7
|
+
selected?: boolean;
|
|
8
|
+
hasAttribute?: boolean;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface BlockAttribute {
|
|
12
|
+
name: string;
|
|
13
|
+
value: unknown;
|
|
14
|
+
blockref?: number;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface BlockBounds {
|
|
18
|
+
minX?: number;
|
|
19
|
+
minY?: number;
|
|
20
|
+
maxX?: number;
|
|
21
|
+
maxY?: number;
|
|
22
|
+
width?: number;
|
|
23
|
+
height?: number;
|
|
24
|
+
area?: number;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface BlockInsertDetails {
|
|
28
|
+
blockhandleLow?: number;
|
|
29
|
+
blockhandleHigh?: number;
|
|
30
|
+
insertX?: number;
|
|
31
|
+
insertY?: number;
|
|
32
|
+
insertZ?: number;
|
|
33
|
+
insertRot?: number;
|
|
34
|
+
insertscaleX?: number;
|
|
35
|
+
insertscaleY?: number;
|
|
36
|
+
insertscaleZ?: number;
|
|
37
|
+
blockref?: number;
|
|
38
|
+
MinX?: number;
|
|
39
|
+
MinY?: number;
|
|
40
|
+
MaxX?: number;
|
|
41
|
+
MaxY?: number;
|
|
42
|
+
type?: string;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
export interface BlockDetails {
|
|
46
|
+
index?: number;
|
|
47
|
+
name?: string;
|
|
48
|
+
state?: number;
|
|
49
|
+
defaultstate?: number;
|
|
50
|
+
defaultcolor?: string | null;
|
|
51
|
+
color?: string | null;
|
|
52
|
+
fillstyle?: string | null;
|
|
53
|
+
defaultfillstyle?: string | null;
|
|
54
|
+
overridecolor?: boolean;
|
|
55
|
+
overridefill?: boolean;
|
|
56
|
+
hatchstyle?: string | null;
|
|
57
|
+
selected?: boolean;
|
|
58
|
+
listed?: boolean;
|
|
59
|
+
insert?: BlockInsertDetails;
|
|
60
|
+
drawn?: boolean;
|
|
61
|
+
mouseon?: boolean;
|
|
62
|
+
hasAttribute?: boolean;
|
|
63
|
+
fold?: number;
|
|
64
|
+
bounds?: BlockBounds;
|
|
65
|
+
[key: string]: unknown;
|
|
66
|
+
}
|
|
67
|
+
export interface BlockDetailsItem {
|
|
68
|
+
index?: number;
|
|
69
|
+
name?: string;
|
|
70
|
+
visible?: boolean;
|
|
71
|
+
selected?: boolean;
|
|
72
|
+
hasAttribute?: boolean;
|
|
73
|
+
details?: BlockDetails;
|
|
74
|
+
attributes?: BlockAttribute[];
|
|
75
|
+
[key: string]: unknown;
|
|
76
|
+
}
|
|
77
|
+
export interface BlocksSnapshot {
|
|
78
|
+
requestId?: string;
|
|
79
|
+
fileId?: string;
|
|
80
|
+
fileIndex?: number;
|
|
81
|
+
fileName?: string;
|
|
82
|
+
blocks: BlockItem[];
|
|
83
|
+
[key: string]: unknown;
|
|
84
|
+
}
|
|
85
|
+
export interface BlockDetailsSnapshot {
|
|
86
|
+
requestId?: string;
|
|
87
|
+
fileId?: string;
|
|
88
|
+
fileIndex?: number;
|
|
89
|
+
fileName?: string;
|
|
90
|
+
blocks: BlockDetailsItem[];
|
|
91
|
+
[key: string]: unknown;
|
|
92
|
+
}
|
|
93
|
+
export type BlockAttributesSnapshot = BlockDetailsSnapshot;
|
|
94
|
+
export interface GetBlocksOptions {
|
|
95
|
+
requestId?: string;
|
|
96
|
+
timeoutMs?: number;
|
|
97
|
+
}
|
|
98
|
+
export interface GetBlockDetailsOptions {
|
|
99
|
+
requestId?: string;
|
|
100
|
+
index?: number;
|
|
101
|
+
indexes?: number[];
|
|
102
|
+
timeoutMs?: number;
|
|
103
|
+
}
|
|
104
|
+
export type GetBlockAttributesOptions = GetBlockDetailsOptions;
|
|
105
|
+
export interface SetBlockVisibilityOptions {
|
|
106
|
+
requestId?: string;
|
|
107
|
+
index?: number;
|
|
108
|
+
indexes?: number[];
|
|
109
|
+
name?: string;
|
|
110
|
+
names?: string[];
|
|
111
|
+
all?: boolean;
|
|
112
|
+
visible: boolean;
|
|
113
|
+
}
|
|
114
|
+
export interface BlocksEventMap {
|
|
115
|
+
snapshot: BlocksSnapshot;
|
|
116
|
+
detailsSnapshot: BlockDetailsSnapshot;
|
|
117
|
+
attributesSnapshot: BlockAttributesSnapshot;
|
|
118
|
+
}
|
|
119
|
+
export type BlocksEventName = keyof BlocksEventMap;
|
|
120
|
+
export type BlocksEventHandler<TEventName extends BlocksEventName> = DomainEventHandler<BlocksEventMap[TEventName]>;
|
|
121
|
+
export type BlocksEventUnsubscribe = DomainEventUnsubscribe;
|
|
122
|
+
export interface BlocksApiOptions {
|
|
123
|
+
getBroker: () => CanvasMessageBroker | null;
|
|
124
|
+
getIsReady: () => boolean;
|
|
125
|
+
commandTimeoutMs: number;
|
|
126
|
+
}
|
|
127
|
+
export declare class BlocksApi {
|
|
128
|
+
private readonly options;
|
|
129
|
+
private readonly events;
|
|
130
|
+
private broker;
|
|
131
|
+
private brokerCleanups;
|
|
132
|
+
constructor(options: BlocksApiOptions);
|
|
133
|
+
on<TEventName extends BlocksEventName>(eventName: TEventName, handler: BlocksEventHandler<TEventName>): BlocksEventUnsubscribe;
|
|
134
|
+
connect(): void;
|
|
135
|
+
disconnect(): void;
|
|
136
|
+
getBlocks(options?: GetBlocksOptions): Promise<BlocksSnapshot>;
|
|
137
|
+
getDetails(options: GetBlockDetailsOptions): Promise<BlockDetailsSnapshot>;
|
|
138
|
+
getBlockDetails(options: GetBlockDetailsOptions): Promise<BlockDetailsSnapshot>;
|
|
139
|
+
getAttributes(options: GetBlockAttributesOptions): Promise<BlockAttributesSnapshot>;
|
|
140
|
+
getBlockAttributes(options: GetBlockAttributesOptions): Promise<BlockAttributesSnapshot>;
|
|
141
|
+
setVisibility(options: SetBlockVisibilityOptions): void;
|
|
142
|
+
setBlockVisibility(options: SetBlockVisibilityOptions): void;
|
|
143
|
+
private sendAndWaitForSnapshot;
|
|
144
|
+
private validateIndexSelector;
|
|
145
|
+
private validateSetVisibilityOptions;
|
|
146
|
+
private validateNumber;
|
|
147
|
+
private validateNumberArray;
|
|
148
|
+
private validateText;
|
|
149
|
+
private validateTextArray;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=BlocksApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlocksApi.d.ts","sourceRoot":"","sources":["../../src/domains/BlocksApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { createCommandTimeoutError } from "../errors.js";
|
|
2
|
+
import { createRequestId } from "../utils/createRequestId.js";
|
|
3
|
+
import { DomainEventEmitter } from "../utils/DomainEventEmitter.js";
|
|
4
|
+
import { createCanvasCommandError, requireReadyBroker, sendCanvasFireAndForget } from "./canvasBrokerCommands.js";
|
|
5
|
+
export class BlocksApi {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.events = new DomainEventEmitter();
|
|
8
|
+
this.broker = null;
|
|
9
|
+
this.brokerCleanups = [];
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
on(eventName, handler) {
|
|
13
|
+
this.connect();
|
|
14
|
+
return this.events.on(eventName, handler);
|
|
15
|
+
}
|
|
16
|
+
connect() {
|
|
17
|
+
const broker = this.options.getBroker();
|
|
18
|
+
if (!broker || broker === this.broker) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.disconnect();
|
|
22
|
+
this.broker = broker;
|
|
23
|
+
this.brokerCleanups = [
|
|
24
|
+
broker.on("blocksSnapshot", (message) => {
|
|
25
|
+
if (isBlocksSnapshot(message.payload)) {
|
|
26
|
+
this.events.emit("snapshot", message.payload);
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
broker.on("blockDetailsSnapshot", (message) => {
|
|
30
|
+
if (isBlockDetailsSnapshot(message.payload)) {
|
|
31
|
+
this.events.emit("detailsSnapshot", message.payload);
|
|
32
|
+
}
|
|
33
|
+
}),
|
|
34
|
+
broker.on("blockAttributesSnapshot", (message) => {
|
|
35
|
+
if (isBlockDetailsSnapshot(message.payload)) {
|
|
36
|
+
this.events.emit("attributesSnapshot", message.payload);
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
disconnect() {
|
|
42
|
+
for (const cleanup of this.brokerCleanups) {
|
|
43
|
+
cleanup();
|
|
44
|
+
}
|
|
45
|
+
this.brokerCleanups = [];
|
|
46
|
+
this.broker = null;
|
|
47
|
+
}
|
|
48
|
+
getBlocks(options = {}) {
|
|
49
|
+
const requestId = options.requestId ?? createRequestId();
|
|
50
|
+
return this.sendAndWaitForSnapshot("getBlocks", "blocksSnapshot", { requestId }, requestId, isBlocksSnapshot, options.timeoutMs);
|
|
51
|
+
}
|
|
52
|
+
getDetails(options) {
|
|
53
|
+
this.validateIndexSelector("getBlockDetails", options);
|
|
54
|
+
const requestId = options.requestId ?? createRequestId();
|
|
55
|
+
const { timeoutMs, ...payloadOptions } = options;
|
|
56
|
+
return this.sendAndWaitForSnapshot("getBlockDetails", "blockDetailsSnapshot", {
|
|
57
|
+
...payloadOptions,
|
|
58
|
+
requestId
|
|
59
|
+
}, requestId, isBlockDetailsSnapshot, timeoutMs);
|
|
60
|
+
}
|
|
61
|
+
getBlockDetails(options) {
|
|
62
|
+
return this.getDetails(options);
|
|
63
|
+
}
|
|
64
|
+
getAttributes(options) {
|
|
65
|
+
this.validateIndexSelector("getBlockAttributes", options);
|
|
66
|
+
const requestId = options.requestId ?? createRequestId();
|
|
67
|
+
const { timeoutMs, ...payloadOptions } = options;
|
|
68
|
+
return this.sendAndWaitForSnapshot("getBlockAttributes", "blockAttributesSnapshot", {
|
|
69
|
+
...payloadOptions,
|
|
70
|
+
requestId
|
|
71
|
+
}, requestId, isBlockDetailsSnapshot, timeoutMs);
|
|
72
|
+
}
|
|
73
|
+
getBlockAttributes(options) {
|
|
74
|
+
return this.getAttributes(options);
|
|
75
|
+
}
|
|
76
|
+
setVisibility(options) {
|
|
77
|
+
this.validateSetVisibilityOptions(options);
|
|
78
|
+
sendCanvasFireAndForget({
|
|
79
|
+
...this.options,
|
|
80
|
+
type: "setBlockVisibility",
|
|
81
|
+
payload: {
|
|
82
|
+
...options,
|
|
83
|
+
requestId: options.requestId ?? createRequestId()
|
|
84
|
+
},
|
|
85
|
+
apiName: "viewer.blocks"
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
setBlockVisibility(options) {
|
|
89
|
+
this.setVisibility(options);
|
|
90
|
+
}
|
|
91
|
+
sendAndWaitForSnapshot(type, resultType, payload, requestId, isSnapshot, timeoutMs = this.options.commandTimeoutMs) {
|
|
92
|
+
const broker = requireReadyBroker({
|
|
93
|
+
...this.options,
|
|
94
|
+
type,
|
|
95
|
+
apiName: "viewer.blocks"
|
|
96
|
+
});
|
|
97
|
+
return new Promise((resolve, reject) => {
|
|
98
|
+
const cleanup = broker.on(resultType, (message) => {
|
|
99
|
+
const snapshot = message.payload;
|
|
100
|
+
if (!isSnapshot(snapshot) || snapshot.requestId !== requestId) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
globalThis.clearTimeout(timeoutId);
|
|
104
|
+
cleanup();
|
|
105
|
+
resolve(snapshot);
|
|
106
|
+
});
|
|
107
|
+
const timeoutId = globalThis.setTimeout(() => {
|
|
108
|
+
cleanup();
|
|
109
|
+
reject(createCommandTimeoutError(requestId, type, timeoutMs));
|
|
110
|
+
}, timeoutMs);
|
|
111
|
+
broker.send(type, payload);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
validateIndexSelector(type, options) {
|
|
115
|
+
if (!options || typeof options !== "object") {
|
|
116
|
+
throw createCanvasCommandError(type, "Block request options must be an object.", {
|
|
117
|
+
options
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const selectorCount = [
|
|
121
|
+
options.index !== undefined,
|
|
122
|
+
options.indexes !== undefined
|
|
123
|
+
].filter(Boolean).length;
|
|
124
|
+
if (selectorCount !== 1) {
|
|
125
|
+
throw createCanvasCommandError(type, "Block details and attribute requests require exactly one selector: index or indexes.", { options });
|
|
126
|
+
}
|
|
127
|
+
this.validateNumber(type, "index", options.index, options);
|
|
128
|
+
this.validateNumberArray(type, "indexes", options.indexes, options);
|
|
129
|
+
}
|
|
130
|
+
validateSetVisibilityOptions(options) {
|
|
131
|
+
if (!options || typeof options !== "object") {
|
|
132
|
+
throw createCanvasCommandError("setBlockVisibility", "Block visibility options must be an object.", { options });
|
|
133
|
+
}
|
|
134
|
+
if (typeof options.visible !== "boolean") {
|
|
135
|
+
throw createCanvasCommandError("setBlockVisibility", "Block visibility requires a boolean visible value.", { options });
|
|
136
|
+
}
|
|
137
|
+
const selectorCount = [
|
|
138
|
+
options.index !== undefined,
|
|
139
|
+
options.indexes !== undefined,
|
|
140
|
+
options.name !== undefined,
|
|
141
|
+
options.names !== undefined,
|
|
142
|
+
options.all === true
|
|
143
|
+
].filter(Boolean).length;
|
|
144
|
+
if (selectorCount !== 1) {
|
|
145
|
+
throw createCanvasCommandError("setBlockVisibility", "Block visibility requires exactly one selector: index, indexes, name, names, or all.", { options });
|
|
146
|
+
}
|
|
147
|
+
this.validateNumber("setBlockVisibility", "index", options.index, options);
|
|
148
|
+
this.validateNumberArray("setBlockVisibility", "indexes", options.indexes, options);
|
|
149
|
+
this.validateText("name", options.name, options);
|
|
150
|
+
this.validateTextArray("names", options.names, options);
|
|
151
|
+
}
|
|
152
|
+
validateNumber(type, fieldName, value, options) {
|
|
153
|
+
if (value === undefined)
|
|
154
|
+
return;
|
|
155
|
+
if (!Number.isInteger(value) || value < 0) {
|
|
156
|
+
throw createCanvasCommandError(type, `${fieldName} must be a non-negative integer.`, { options });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
validateNumberArray(type, fieldName, value, options) {
|
|
160
|
+
if (value === undefined)
|
|
161
|
+
return;
|
|
162
|
+
if (!Array.isArray(value) ||
|
|
163
|
+
value.length === 0 ||
|
|
164
|
+
!value.every((item) => Number.isInteger(item) && item >= 0)) {
|
|
165
|
+
throw createCanvasCommandError(type, `${fieldName} must be a non-empty array of non-negative integers.`, { options });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
validateText(fieldName, value, options) {
|
|
169
|
+
if (value === undefined)
|
|
170
|
+
return;
|
|
171
|
+
if (value.trim().length === 0) {
|
|
172
|
+
throw createCanvasCommandError("setBlockVisibility", `${fieldName} must not be empty.`, { options });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
validateTextArray(fieldName, value, options) {
|
|
176
|
+
if (value === undefined)
|
|
177
|
+
return;
|
|
178
|
+
if (!Array.isArray(value) ||
|
|
179
|
+
value.length === 0 ||
|
|
180
|
+
!value.every((item) => item.trim().length > 0)) {
|
|
181
|
+
throw createCanvasCommandError("setBlockVisibility", `${fieldName} must be a non-empty array of non-empty strings.`, { options });
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function isBlocksSnapshot(payload) {
|
|
186
|
+
return !!payload && typeof payload === "object" && Array.isArray(payload.blocks);
|
|
187
|
+
}
|
|
188
|
+
function isBlockDetailsSnapshot(payload) {
|
|
189
|
+
return !!payload && typeof payload === "object" && Array.isArray(payload.blocks);
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=BlocksApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlocksApi.js","sourceRoot":"","sources":["../../src/domains/BlocksApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CanvasMessage, CanvasMessageBroker, CanvasMessageHandler, CanvasMessageUnsubscribe } from "../messaging/CanvasMessageBroker.js";
|
|
2
|
+
export interface CanvasApiOptions {
|
|
3
|
+
getBroker: () => CanvasMessageBroker | null;
|
|
4
|
+
}
|
|
5
|
+
export declare class CanvasApi {
|
|
6
|
+
private readonly getBroker;
|
|
7
|
+
constructor(options: CanvasApiOptions);
|
|
8
|
+
send<TPayload = unknown>(type: string, payload?: TPayload): void;
|
|
9
|
+
on<TPayload = unknown>(type: string, handler: CanvasMessageHandler<TPayload>): CanvasMessageUnsubscribe;
|
|
10
|
+
private requireBroker;
|
|
11
|
+
}
|
|
12
|
+
export type { CanvasMessage, CanvasMessageHandler, CanvasMessageUnsubscribe };
|
|
13
|
+
//# sourceMappingURL=CanvasApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasApi.d.ts","sourceRoot":"","sources":["../../src/domains/CanvasApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC;CAC7C;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;gBAEjD,OAAO,EAAE,gBAAgB;IAIrC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIhE,EAAE,CAAC,QAAQ,GAAG,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACtC,wBAAwB;IAI3B,OAAO,CAAC,aAAa;CActB;AAED,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createViewerNotReadyError } from "../errors.js";
|
|
2
|
+
export class CanvasApi {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
this.getBroker = options.getBroker;
|
|
5
|
+
}
|
|
6
|
+
send(type, payload) {
|
|
7
|
+
this.requireBroker("send").send(type, payload);
|
|
8
|
+
}
|
|
9
|
+
on(type, handler) {
|
|
10
|
+
return this.requireBroker("subscribe").on(type, handler);
|
|
11
|
+
}
|
|
12
|
+
requireBroker(action) {
|
|
13
|
+
const broker = this.getBroker();
|
|
14
|
+
if (!broker) {
|
|
15
|
+
throw createViewerNotReadyError("RasterexViewer must be mounted before using viewer.canvas.", {
|
|
16
|
+
action
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return broker;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=CanvasApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasApi.js","sourceRoot":"","sources":["../../src/domains/CanvasApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAYzD,MAAM,OAAO,SAAS;IAGpB,YAAY,OAAyB;QACnC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,IAAI,CAAqB,IAAY,EAAE,OAAkB;QACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,EAAE,CACA,IAAY,EACZ,OAAuC;QAEvC,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAEO,aAAa,CAAC,MAA4B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,yBAAyB,CAC7B,4DAA4D,EAC5D;gBACE,MAAM;aACP,CACF,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type DomainEventHandler, type DomainEventUnsubscribe } from "../utils/DomainEventEmitter.js";
|
|
2
|
+
import type { CanvasMessageBroker } from "../messaging/CanvasMessageBroker.js";
|
|
3
|
+
export interface CollaborationUserPayload {
|
|
4
|
+
username: string;
|
|
5
|
+
displayName?: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CollaborationTooltipConfig {
|
|
9
|
+
iconSrc?: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
message?: string;
|
|
12
|
+
messageTemplate?: string;
|
|
13
|
+
duration?: number;
|
|
14
|
+
position?: [number | "center", number];
|
|
15
|
+
}
|
|
16
|
+
export interface CollaborationConfigPayload {
|
|
17
|
+
enabled?: boolean;
|
|
18
|
+
canCollaborate?: boolean;
|
|
19
|
+
roomId?: string;
|
|
20
|
+
collaborationRoomId?: string;
|
|
21
|
+
canFileOpen?: boolean;
|
|
22
|
+
localStoreAnnotation?: boolean;
|
|
23
|
+
dbBackendApiKey?: string;
|
|
24
|
+
collaborationTooltip?: CollaborationTooltipConfig;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
export type CollaborationEnableOptions = Omit<CollaborationConfigPayload, "enabled" | "canCollaborate">;
|
|
28
|
+
export interface SetUserOptions extends CollaborationUserPayload {
|
|
29
|
+
timeoutMs?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface SetUserResultPayload {
|
|
32
|
+
success: boolean;
|
|
33
|
+
reason?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface CollaborationEventMap {
|
|
36
|
+
setUserResult: SetUserResultPayload;
|
|
37
|
+
}
|
|
38
|
+
export type CollaborationEventName = keyof CollaborationEventMap;
|
|
39
|
+
export type CollaborationEventHandler<TEventName extends CollaborationEventName> = DomainEventHandler<CollaborationEventMap[TEventName]>;
|
|
40
|
+
export type CollaborationEventUnsubscribe = DomainEventUnsubscribe;
|
|
41
|
+
export interface CollaborationApiOptions {
|
|
42
|
+
getBroker: () => CanvasMessageBroker | null;
|
|
43
|
+
getIsReady: () => boolean;
|
|
44
|
+
commandTimeoutMs: number;
|
|
45
|
+
}
|
|
46
|
+
export declare class CollaborationApi {
|
|
47
|
+
private readonly options;
|
|
48
|
+
private readonly events;
|
|
49
|
+
private broker;
|
|
50
|
+
private brokerCleanups;
|
|
51
|
+
private setUserInProgress;
|
|
52
|
+
constructor(options: CollaborationApiOptions);
|
|
53
|
+
on<TEventName extends CollaborationEventName>(eventName: TEventName, handler: CollaborationEventHandler<TEventName>): CollaborationEventUnsubscribe;
|
|
54
|
+
connect(): void;
|
|
55
|
+
disconnect(): void;
|
|
56
|
+
setUser(options: SetUserOptions): Promise<SetUserResultPayload>;
|
|
57
|
+
configure(payload: CollaborationConfigPayload): void;
|
|
58
|
+
enable(options?: CollaborationEnableOptions): void;
|
|
59
|
+
disable(options?: CollaborationEnableOptions): void;
|
|
60
|
+
private sendCollaboration;
|
|
61
|
+
private validateUserPayload;
|
|
62
|
+
private validateConfigPayload;
|
|
63
|
+
private validateTooltip;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=CollaborationApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollaborationApi.d.ts","sourceRoot":"","sources":["../../src/domains/CollaborationApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { DomainEventEmitter } from "../utils/DomainEventEmitter.js";
|
|
2
|
+
import { createCommandTimeoutError } from "../errors.js";
|
|
3
|
+
import { createCanvasCommandError, requireReadyBroker } from "./canvasBrokerCommands.js";
|
|
4
|
+
export class CollaborationApi {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.events = new DomainEventEmitter();
|
|
7
|
+
this.broker = null;
|
|
8
|
+
this.brokerCleanups = [];
|
|
9
|
+
this.setUserInProgress = false;
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
on(eventName, handler) {
|
|
13
|
+
this.connect();
|
|
14
|
+
return this.events.on(eventName, handler);
|
|
15
|
+
}
|
|
16
|
+
connect() {
|
|
17
|
+
const broker = this.options.getBroker();
|
|
18
|
+
if (!broker || broker === this.broker) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.disconnect();
|
|
22
|
+
this.broker = broker;
|
|
23
|
+
this.brokerCleanups = [
|
|
24
|
+
broker.on("setUserResult", (message) => {
|
|
25
|
+
if (isSetUserResultPayload(message.payload)) {
|
|
26
|
+
this.events.emit("setUserResult", message.payload);
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
disconnect() {
|
|
32
|
+
for (const cleanup of this.brokerCleanups) {
|
|
33
|
+
cleanup();
|
|
34
|
+
}
|
|
35
|
+
this.brokerCleanups = [];
|
|
36
|
+
this.broker = null;
|
|
37
|
+
this.setUserInProgress = false;
|
|
38
|
+
}
|
|
39
|
+
setUser(options) {
|
|
40
|
+
const { timeoutMs, ...payload } = options;
|
|
41
|
+
this.validateUserPayload(payload);
|
|
42
|
+
if (this.setUserInProgress) {
|
|
43
|
+
return Promise.reject(createCanvasCommandError("setUser", "Only one collaboration setUser request can be active for a viewer iframe."));
|
|
44
|
+
}
|
|
45
|
+
const broker = requireReadyBroker({
|
|
46
|
+
...this.options,
|
|
47
|
+
type: "setUser",
|
|
48
|
+
apiName: "viewer.collaboration"
|
|
49
|
+
});
|
|
50
|
+
const resultTimeoutMs = timeoutMs ?? this.options.commandTimeoutMs;
|
|
51
|
+
this.setUserInProgress = true;
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
const cleanup = broker.on("setUserResult", (message) => {
|
|
54
|
+
if (!isSetUserResultPayload(message.payload)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
globalThis.clearTimeout(timeoutId);
|
|
58
|
+
cleanup();
|
|
59
|
+
this.setUserInProgress = false;
|
|
60
|
+
resolve(message.payload);
|
|
61
|
+
});
|
|
62
|
+
const timeoutId = globalThis.setTimeout(() => {
|
|
63
|
+
cleanup();
|
|
64
|
+
this.setUserInProgress = false;
|
|
65
|
+
reject(createCommandTimeoutError("setUserResult", "setUser", resultTimeoutMs));
|
|
66
|
+
}, resultTimeoutMs);
|
|
67
|
+
broker.send("setUser", payload);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
configure(payload) {
|
|
71
|
+
this.validateConfigPayload(payload);
|
|
72
|
+
this.sendCollaboration(payload);
|
|
73
|
+
}
|
|
74
|
+
enable(options = {}) {
|
|
75
|
+
this.validateConfigPayload(options);
|
|
76
|
+
this.sendCollaboration({
|
|
77
|
+
...options,
|
|
78
|
+
enabled: true
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
disable(options = {}) {
|
|
82
|
+
this.validateConfigPayload(options);
|
|
83
|
+
this.sendCollaboration({
|
|
84
|
+
...options,
|
|
85
|
+
enabled: false
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
sendCollaboration(payload) {
|
|
89
|
+
requireReadyBroker({
|
|
90
|
+
...this.options,
|
|
91
|
+
type: "collaboration",
|
|
92
|
+
apiName: "viewer.collaboration"
|
|
93
|
+
}).send("collaboration", payload);
|
|
94
|
+
}
|
|
95
|
+
validateUserPayload(payload) {
|
|
96
|
+
if (!hasText(payload.username)) {
|
|
97
|
+
throw createCanvasCommandError("setUser", "Collaboration user requires a non-empty username.", {
|
|
98
|
+
payload
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (payload.displayName !== undefined && typeof payload.displayName !== "string") {
|
|
102
|
+
throw createCanvasCommandError("setUser", "Collaboration user displayName must be a string when provided.", {
|
|
103
|
+
payload
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (payload.email !== undefined && typeof payload.email !== "string") {
|
|
107
|
+
throw createCanvasCommandError("setUser", "Collaboration user email must be a string when provided.", {
|
|
108
|
+
payload
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
validateConfigPayload(payload) {
|
|
113
|
+
if (!payload || typeof payload !== "object") {
|
|
114
|
+
throw createCanvasCommandError("collaboration", "Collaboration config requires a payload object.", {
|
|
115
|
+
payload
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (payload.enabled !== undefined && typeof payload.enabled !== "boolean") {
|
|
119
|
+
throw createCanvasCommandError("collaboration", "Collaboration enabled must be a boolean when provided.", {
|
|
120
|
+
payload
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (payload.canCollaborate !== undefined &&
|
|
124
|
+
typeof payload.canCollaborate !== "boolean") {
|
|
125
|
+
throw createCanvasCommandError("collaboration", "Collaboration canCollaborate must be a boolean when provided.", {
|
|
126
|
+
payload
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (payload.roomId !== undefined && !hasText(payload.roomId)) {
|
|
130
|
+
throw createCanvasCommandError("collaboration", "Collaboration roomId must be a non-empty string when provided.", {
|
|
131
|
+
payload
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (payload.collaborationRoomId !== undefined &&
|
|
135
|
+
!hasText(payload.collaborationRoomId)) {
|
|
136
|
+
throw createCanvasCommandError("collaboration", "Collaboration collaborationRoomId must be a non-empty string when provided.", {
|
|
137
|
+
payload
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
if (payload.collaborationTooltip !== undefined) {
|
|
141
|
+
this.validateTooltip(payload.collaborationTooltip, payload);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
validateTooltip(tooltip, payload) {
|
|
145
|
+
if (!tooltip || typeof tooltip !== "object") {
|
|
146
|
+
throw createCanvasCommandError("collaboration", "Collaboration tooltip config must be an object when provided.", {
|
|
147
|
+
payload
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (tooltip.duration !== undefined &&
|
|
151
|
+
!Number.isFinite(tooltip.duration)) {
|
|
152
|
+
throw createCanvasCommandError("collaboration", "Collaboration tooltip duration must be a finite number when provided.", {
|
|
153
|
+
payload
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
if (tooltip.position === undefined) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const [x, y] = tooltip.position;
|
|
160
|
+
if (!Array.isArray(tooltip.position) ||
|
|
161
|
+
tooltip.position.length !== 2 ||
|
|
162
|
+
!((typeof x === "number" && Number.isFinite(x)) || x === "center") ||
|
|
163
|
+
typeof y !== "number" ||
|
|
164
|
+
!Number.isFinite(y)) {
|
|
165
|
+
throw createCanvasCommandError("collaboration", "Collaboration tooltip position must be [number | \"center\", number] when provided.", {
|
|
166
|
+
payload
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function hasText(value) {
|
|
172
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
173
|
+
}
|
|
174
|
+
function isSetUserResultPayload(payload) {
|
|
175
|
+
return !!payload && typeof payload === "object" && typeof payload.success === "boolean";
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=CollaborationApi.js.map
|