ooxml-core 1.21.0 → 1.22.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/dist/automation/index.cjs +33919 -12659
- package/dist/automation/index.d.ts +4 -0
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.mjs +33907 -12660
- package/dist/automation/node.cjs +37 -0
- package/dist/automation/node.d.ts +32 -1
- package/dist/automation/node.d.ts.map +1 -1
- package/dist/automation/node.mjs +36 -1
- package/dist/automation/proposal.d.ts +25 -0
- package/dist/automation/proposal.d.ts.map +1 -0
- package/dist/automation/tools/define.d.ts +27 -0
- package/dist/automation/tools/define.d.ts.map +1 -0
- package/dist/automation/tools/docx-tools.d.ts +4 -0
- package/dist/automation/tools/docx-tools.d.ts.map +1 -0
- package/dist/automation/tools/index.d.ts +16 -0
- package/dist/automation/tools/index.d.ts.map +1 -0
- package/dist/automation/tools/types.d.ts +52 -0
- package/dist/automation/tools/types.d.ts.map +1 -0
- package/dist/automation/tools/visio-tools.d.ts +4 -0
- package/dist/automation/tools/visio-tools.d.ts.map +1 -0
- package/dist/automation/tools/xlsx-tools.d.ts +8 -0
- package/dist/automation/tools/xlsx-tools.d.ts.map +1 -0
- package/dist/automation/xlsx-edits.d.ts +88 -0
- package/dist/automation/xlsx-edits.d.ts.map +1 -0
- package/dist/automation/xlsx-proposal.d.ts +34 -0
- package/dist/automation/xlsx-proposal.d.ts.map +1 -0
- package/dist/automation/xlsx.d.ts +10 -5
- package/dist/automation/xlsx.d.ts.map +1 -1
- package/dist/chunk-MHNETXQB.mjs +1 -0
- package/dist/collab/embedding.d.ts +8 -3
- package/dist/collab/embedding.d.ts.map +1 -1
- package/dist/collab/index.cjs +124 -102
- package/dist/collab/index.d.ts +1 -0
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.mjs +124 -103
- package/dist/collab/webrtc-provider.d.ts +21 -0
- package/dist/collab/webrtc-provider.d.ts.map +1 -0
- package/dist/pptx/automation/index.cjs +28707 -7376
- package/dist/pptx/automation/index.d.ts +91 -1
- package/dist/pptx/automation/index.d.ts.map +1 -1
- package/dist/pptx/automation/index.mjs +734 -57
- package/dist/pptx/automation/schemas/chart-formatting-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/chart-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/chart-user-shape-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/element-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/export-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/geometry-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/hyperlink-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/index.mjs +1 -0
- package/dist/pptx/automation/schemas/json-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/layout-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/lock-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/metadata-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/ole-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/presentation-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/section-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/slide-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/smartart-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/table-style-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/template-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/theme-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/validation-schemas.d.ts +1 -1
- package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts → schemas-fuDGetRe.d.ts} +2 -2
- package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts.map → schemas-fuDGetRe.d.ts.map} +1 -1
- package/dist/visio/collab/bind.d.ts +44 -0
- package/dist/visio/collab/bind.d.ts.map +1 -0
- package/dist/visio/collab/compose.d.ts +15 -0
- package/dist/visio/collab/compose.d.ts.map +1 -0
- package/dist/visio/collab/index.cjs +1194 -0
- package/dist/visio/collab/index.d.ts +8 -0
- package/dist/visio/collab/index.d.ts.map +1 -0
- package/dist/visio/collab/index.mjs +1152 -0
- package/dist/visio/collab/keys.d.ts +22 -0
- package/dist/visio/collab/keys.d.ts.map +1 -0
- package/dist/visio/collab/order.d.ts +11 -0
- package/dist/visio/collab/order.d.ts.map +1 -0
- package/dist/visio/collab/package.d.ts +37 -0
- package/dist/visio/collab/package.d.ts.map +1 -0
- package/dist/visio/collab/read.d.ts +41 -0
- package/dist/visio/collab/read.d.ts.map +1 -0
- package/dist/visio/collab/scan.d.ts +28 -0
- package/dist/visio/collab/scan.d.ts.map +1 -0
- package/dist/visio/collab/schema.d.ts +70 -0
- package/dist/visio/collab/schema.d.ts.map +1 -0
- package/dist/visio/collab/snapshot.d.ts +61 -0
- package/dist/visio/collab/snapshot.d.ts.map +1 -0
- package/dist/visio/collab/write.d.ts +20 -0
- package/dist/visio/collab/write.d.ts.map +1 -0
- package/dist/visio/ui/collab-options.d.ts +24 -0
- package/dist/visio/ui/collab-options.d.ts.map +1 -0
- package/dist/visio/ui/collab-presence.d.ts +31 -0
- package/dist/visio/ui/collab-presence.d.ts.map +1 -0
- package/dist/visio/ui/contract.d.ts +4 -3
- package/dist/visio/ui/contract.d.ts.map +1 -1
- package/dist/visio/ui/document-history.d.ts +3 -1
- package/dist/visio/ui/document-history.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +119 -52
- package/dist/visio/ui/index.d.ts +2 -0
- package/dist/visio/ui/index.d.ts.map +1 -1
- package/dist/visio/ui/index.mjs +114 -53
- package/dist/xlsx/ui/index.cjs +5 -0
- package/dist/xlsx/ui/index.mjs +5 -0
- package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
- package/package.json +6 -1
package/dist/collab/index.cjs
CHANGED
|
@@ -1048,6 +1048,118 @@ function createTransportProvider({ doc, awareness }, { transport, maxMessageByte
|
|
|
1048
1048
|
};
|
|
1049
1049
|
}
|
|
1050
1050
|
|
|
1051
|
+
// collab/external-provider.ts
|
|
1052
|
+
function adaptYjsProvider(provider) {
|
|
1053
|
+
const events = new Emitter();
|
|
1054
|
+
let destroyed = false;
|
|
1055
|
+
let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
|
|
1056
|
+
let synced = Boolean(provider.synced);
|
|
1057
|
+
const subscriptions = [];
|
|
1058
|
+
const listen = (name, handler) => {
|
|
1059
|
+
const wrapped = handler;
|
|
1060
|
+
provider.on(name, wrapped);
|
|
1061
|
+
subscriptions.push([name, wrapped]);
|
|
1062
|
+
};
|
|
1063
|
+
const setStatus = (next) => {
|
|
1064
|
+
if (destroyed || next === status) return;
|
|
1065
|
+
status = next;
|
|
1066
|
+
events.emit("status", next);
|
|
1067
|
+
};
|
|
1068
|
+
const setSynced = (next) => {
|
|
1069
|
+
if (destroyed || next === synced) return;
|
|
1070
|
+
synced = next;
|
|
1071
|
+
events.emit("synced", next);
|
|
1072
|
+
};
|
|
1073
|
+
listen("status", (payload) => {
|
|
1074
|
+
if (typeof payload.connected === "boolean") {
|
|
1075
|
+
if (!payload.connected) setSynced(false);
|
|
1076
|
+
return setStatus(payload.connected ? "connected" : "disconnected");
|
|
1077
|
+
}
|
|
1078
|
+
if (payload.status === "connected" || payload.status === "connecting")
|
|
1079
|
+
setStatus(payload.status);
|
|
1080
|
+
else if (payload.status === "disconnected") {
|
|
1081
|
+
setSynced(false);
|
|
1082
|
+
setStatus("disconnected");
|
|
1083
|
+
}
|
|
1084
|
+
});
|
|
1085
|
+
const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
|
|
1086
|
+
listen("sync", onSync);
|
|
1087
|
+
listen("synced", onSync);
|
|
1088
|
+
listen("connection-error", (cause) => {
|
|
1089
|
+
if (destroyed) return;
|
|
1090
|
+
setStatus("error");
|
|
1091
|
+
events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
|
|
1092
|
+
});
|
|
1093
|
+
return {
|
|
1094
|
+
get status() {
|
|
1095
|
+
return status;
|
|
1096
|
+
},
|
|
1097
|
+
get synced() {
|
|
1098
|
+
return synced;
|
|
1099
|
+
},
|
|
1100
|
+
connect: () => {
|
|
1101
|
+
if (destroyed || status === "connected" || status === "connecting") return;
|
|
1102
|
+
setStatus("connecting");
|
|
1103
|
+
provider.connect?.();
|
|
1104
|
+
},
|
|
1105
|
+
disconnect: () => {
|
|
1106
|
+
if (destroyed) return;
|
|
1107
|
+
provider.disconnect?.();
|
|
1108
|
+
setSynced(false);
|
|
1109
|
+
setStatus("disconnected");
|
|
1110
|
+
},
|
|
1111
|
+
destroy: () => {
|
|
1112
|
+
if (destroyed) return;
|
|
1113
|
+
setSynced(false);
|
|
1114
|
+
setStatus("disconnected");
|
|
1115
|
+
destroyed = true;
|
|
1116
|
+
for (const [name, handler] of subscriptions) provider.off?.(name, handler);
|
|
1117
|
+
subscriptions.length = 0;
|
|
1118
|
+
events.clear();
|
|
1119
|
+
provider.destroy?.();
|
|
1120
|
+
},
|
|
1121
|
+
on: (event, listener) => events.on(event, listener)
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
1124
|
+
function observeExternalSession(session, onSnapshot) {
|
|
1125
|
+
let active = true;
|
|
1126
|
+
let subscribing = true;
|
|
1127
|
+
let previous;
|
|
1128
|
+
let unsubscribe;
|
|
1129
|
+
const notify = () => {
|
|
1130
|
+
if (!active || subscribing) return;
|
|
1131
|
+
const snapshot = session.getSnapshot();
|
|
1132
|
+
if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
|
|
1133
|
+
previous = { status: snapshot.status, synced: snapshot.synced };
|
|
1134
|
+
onSnapshot(previous);
|
|
1135
|
+
};
|
|
1136
|
+
const dispose = () => {
|
|
1137
|
+
if (!active) return;
|
|
1138
|
+
active = false;
|
|
1139
|
+
unsubscribe?.();
|
|
1140
|
+
};
|
|
1141
|
+
try {
|
|
1142
|
+
unsubscribe = session.subscribe(notify);
|
|
1143
|
+
subscribing = false;
|
|
1144
|
+
notify();
|
|
1145
|
+
} catch (error) {
|
|
1146
|
+
dispose();
|
|
1147
|
+
throw error;
|
|
1148
|
+
}
|
|
1149
|
+
return dispose;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
// collab/webrtc-provider.ts
|
|
1153
|
+
function webrtcProvider(options) {
|
|
1154
|
+
return ({ doc, awareness, roomId }) => adaptYjsProvider(
|
|
1155
|
+
new options.WebrtcProvider(roomId, doc, {
|
|
1156
|
+
awareness,
|
|
1157
|
+
...options.signaling ? { signaling: options.signaling } : {},
|
|
1158
|
+
...options.password ? { password: options.password } : {}
|
|
1159
|
+
})
|
|
1160
|
+
);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1051
1163
|
// collab/websocket-transport.ts
|
|
1052
1164
|
var OPEN = 1;
|
|
1053
1165
|
function roomUrl(server, roomId) {
|
|
@@ -1144,9 +1256,15 @@ function openCollaborationSession(options, defaults) {
|
|
|
1144
1256
|
const roomId = options.roomId ?? "";
|
|
1145
1257
|
if (!isValidRoomId(roomId)) throw new Error(INVALID_ROOM_MESSAGE);
|
|
1146
1258
|
let provider = options.provider;
|
|
1259
|
+
if (!provider && options.webrtc) {
|
|
1260
|
+
const password = options.webrtc.password ?? options.authToken;
|
|
1261
|
+
provider = webrtcProvider({ ...options.webrtc, ...password ? { password } : {} });
|
|
1262
|
+
}
|
|
1147
1263
|
if (!provider && options.serverUrl)
|
|
1148
1264
|
provider = transportProvider({
|
|
1149
|
-
transport: createWebSocketTransport({
|
|
1265
|
+
transport: createWebSocketTransport({
|
|
1266
|
+
url: withToken(roomUrl(options.serverUrl, roomId), options.authToken)
|
|
1267
|
+
})
|
|
1150
1268
|
});
|
|
1151
1269
|
if (!provider) {
|
|
1152
1270
|
if (!canBroadcast()) throw new Error(NO_BROADCAST_MESSAGE);
|
|
@@ -1170,6 +1288,10 @@ function openCollaborationSession(options, defaults) {
|
|
|
1170
1288
|
});
|
|
1171
1289
|
return { session, owned: true };
|
|
1172
1290
|
}
|
|
1291
|
+
function withToken(url, token) {
|
|
1292
|
+
if (!token) return url;
|
|
1293
|
+
return `${url}${url.includes("?") ? "&" : "?"}token=${encodeURIComponent(token)}`;
|
|
1294
|
+
}
|
|
1173
1295
|
function collaborationStateOf(session) {
|
|
1174
1296
|
return {
|
|
1175
1297
|
active: true,
|
|
@@ -1226,107 +1348,6 @@ function toExternalSession(session) {
|
|
|
1226
1348
|
};
|
|
1227
1349
|
}
|
|
1228
1350
|
|
|
1229
|
-
// collab/external-provider.ts
|
|
1230
|
-
function adaptYjsProvider(provider) {
|
|
1231
|
-
const events = new Emitter();
|
|
1232
|
-
let destroyed = false;
|
|
1233
|
-
let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
|
|
1234
|
-
let synced = Boolean(provider.synced);
|
|
1235
|
-
const subscriptions = [];
|
|
1236
|
-
const listen = (name, handler) => {
|
|
1237
|
-
const wrapped = handler;
|
|
1238
|
-
provider.on(name, wrapped);
|
|
1239
|
-
subscriptions.push([name, wrapped]);
|
|
1240
|
-
};
|
|
1241
|
-
const setStatus = (next) => {
|
|
1242
|
-
if (destroyed || next === status) return;
|
|
1243
|
-
status = next;
|
|
1244
|
-
events.emit("status", next);
|
|
1245
|
-
};
|
|
1246
|
-
const setSynced = (next) => {
|
|
1247
|
-
if (destroyed || next === synced) return;
|
|
1248
|
-
synced = next;
|
|
1249
|
-
events.emit("synced", next);
|
|
1250
|
-
};
|
|
1251
|
-
listen("status", (payload) => {
|
|
1252
|
-
if (typeof payload.connected === "boolean") {
|
|
1253
|
-
if (!payload.connected) setSynced(false);
|
|
1254
|
-
return setStatus(payload.connected ? "connected" : "disconnected");
|
|
1255
|
-
}
|
|
1256
|
-
if (payload.status === "connected" || payload.status === "connecting")
|
|
1257
|
-
setStatus(payload.status);
|
|
1258
|
-
else if (payload.status === "disconnected") {
|
|
1259
|
-
setSynced(false);
|
|
1260
|
-
setStatus("disconnected");
|
|
1261
|
-
}
|
|
1262
|
-
});
|
|
1263
|
-
const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
|
|
1264
|
-
listen("sync", onSync);
|
|
1265
|
-
listen("synced", onSync);
|
|
1266
|
-
listen("connection-error", (cause) => {
|
|
1267
|
-
if (destroyed) return;
|
|
1268
|
-
setStatus("error");
|
|
1269
|
-
events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
|
|
1270
|
-
});
|
|
1271
|
-
return {
|
|
1272
|
-
get status() {
|
|
1273
|
-
return status;
|
|
1274
|
-
},
|
|
1275
|
-
get synced() {
|
|
1276
|
-
return synced;
|
|
1277
|
-
},
|
|
1278
|
-
connect: () => {
|
|
1279
|
-
if (destroyed || status === "connected" || status === "connecting") return;
|
|
1280
|
-
setStatus("connecting");
|
|
1281
|
-
provider.connect?.();
|
|
1282
|
-
},
|
|
1283
|
-
disconnect: () => {
|
|
1284
|
-
if (destroyed) return;
|
|
1285
|
-
provider.disconnect?.();
|
|
1286
|
-
setSynced(false);
|
|
1287
|
-
setStatus("disconnected");
|
|
1288
|
-
},
|
|
1289
|
-
destroy: () => {
|
|
1290
|
-
if (destroyed) return;
|
|
1291
|
-
setSynced(false);
|
|
1292
|
-
setStatus("disconnected");
|
|
1293
|
-
destroyed = true;
|
|
1294
|
-
for (const [name, handler] of subscriptions) provider.off?.(name, handler);
|
|
1295
|
-
subscriptions.length = 0;
|
|
1296
|
-
events.clear();
|
|
1297
|
-
provider.destroy?.();
|
|
1298
|
-
},
|
|
1299
|
-
on: (event, listener) => events.on(event, listener)
|
|
1300
|
-
};
|
|
1301
|
-
}
|
|
1302
|
-
function observeExternalSession(session, onSnapshot) {
|
|
1303
|
-
let active = true;
|
|
1304
|
-
let subscribing = true;
|
|
1305
|
-
let previous;
|
|
1306
|
-
let unsubscribe;
|
|
1307
|
-
const notify = () => {
|
|
1308
|
-
if (!active || subscribing) return;
|
|
1309
|
-
const snapshot = session.getSnapshot();
|
|
1310
|
-
if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
|
|
1311
|
-
previous = { status: snapshot.status, synced: snapshot.synced };
|
|
1312
|
-
onSnapshot(previous);
|
|
1313
|
-
};
|
|
1314
|
-
const dispose = () => {
|
|
1315
|
-
if (!active) return;
|
|
1316
|
-
active = false;
|
|
1317
|
-
unsubscribe?.();
|
|
1318
|
-
};
|
|
1319
|
-
try {
|
|
1320
|
-
unsubscribe = session.subscribe(notify);
|
|
1321
|
-
subscribing = false;
|
|
1322
|
-
notify();
|
|
1323
|
-
} catch (error) {
|
|
1324
|
-
dispose();
|
|
1325
|
-
throw error;
|
|
1326
|
-
}
|
|
1327
|
-
return dispose;
|
|
1328
|
-
}
|
|
1329
|
-
|
|
1330
1351
|
// collab/memory-transport.ts
|
|
1331
1352
|
function createMemoryHub(options = {}) {
|
|
1332
1353
|
const rooms = /* @__PURE__ */ new Map();
|
|
@@ -1595,3 +1616,4 @@ exports.transportProvider = transportProvider;
|
|
|
1595
1616
|
exports.validateDisplayName = validateDisplayName;
|
|
1596
1617
|
exports.validateRoomId = validateRoomId;
|
|
1597
1618
|
exports.validateUpdate = validateUpdate;
|
|
1619
|
+
exports.webrtcProvider = webrtcProvider;
|
package/dist/collab/index.d.ts
CHANGED
|
@@ -17,5 +17,6 @@ export * from './provider.js';
|
|
|
17
17
|
export * from './session.js';
|
|
18
18
|
export * from './transport-provider.js';
|
|
19
19
|
export * from './validation.js';
|
|
20
|
+
export * from './webrtc-provider.js';
|
|
20
21
|
export * from './websocket-transport.js';
|
|
21
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../collab/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../collab/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
package/dist/collab/index.mjs
CHANGED
|
@@ -1024,6 +1024,118 @@ function createTransportProvider({ doc, awareness }, { transport, maxMessageByte
|
|
|
1024
1024
|
};
|
|
1025
1025
|
}
|
|
1026
1026
|
|
|
1027
|
+
// collab/external-provider.ts
|
|
1028
|
+
function adaptYjsProvider(provider) {
|
|
1029
|
+
const events = new Emitter();
|
|
1030
|
+
let destroyed = false;
|
|
1031
|
+
let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
|
|
1032
|
+
let synced = Boolean(provider.synced);
|
|
1033
|
+
const subscriptions = [];
|
|
1034
|
+
const listen = (name, handler) => {
|
|
1035
|
+
const wrapped = handler;
|
|
1036
|
+
provider.on(name, wrapped);
|
|
1037
|
+
subscriptions.push([name, wrapped]);
|
|
1038
|
+
};
|
|
1039
|
+
const setStatus = (next) => {
|
|
1040
|
+
if (destroyed || next === status) return;
|
|
1041
|
+
status = next;
|
|
1042
|
+
events.emit("status", next);
|
|
1043
|
+
};
|
|
1044
|
+
const setSynced = (next) => {
|
|
1045
|
+
if (destroyed || next === synced) return;
|
|
1046
|
+
synced = next;
|
|
1047
|
+
events.emit("synced", next);
|
|
1048
|
+
};
|
|
1049
|
+
listen("status", (payload) => {
|
|
1050
|
+
if (typeof payload.connected === "boolean") {
|
|
1051
|
+
if (!payload.connected) setSynced(false);
|
|
1052
|
+
return setStatus(payload.connected ? "connected" : "disconnected");
|
|
1053
|
+
}
|
|
1054
|
+
if (payload.status === "connected" || payload.status === "connecting")
|
|
1055
|
+
setStatus(payload.status);
|
|
1056
|
+
else if (payload.status === "disconnected") {
|
|
1057
|
+
setSynced(false);
|
|
1058
|
+
setStatus("disconnected");
|
|
1059
|
+
}
|
|
1060
|
+
});
|
|
1061
|
+
const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
|
|
1062
|
+
listen("sync", onSync);
|
|
1063
|
+
listen("synced", onSync);
|
|
1064
|
+
listen("connection-error", (cause) => {
|
|
1065
|
+
if (destroyed) return;
|
|
1066
|
+
setStatus("error");
|
|
1067
|
+
events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
|
|
1068
|
+
});
|
|
1069
|
+
return {
|
|
1070
|
+
get status() {
|
|
1071
|
+
return status;
|
|
1072
|
+
},
|
|
1073
|
+
get synced() {
|
|
1074
|
+
return synced;
|
|
1075
|
+
},
|
|
1076
|
+
connect: () => {
|
|
1077
|
+
if (destroyed || status === "connected" || status === "connecting") return;
|
|
1078
|
+
setStatus("connecting");
|
|
1079
|
+
provider.connect?.();
|
|
1080
|
+
},
|
|
1081
|
+
disconnect: () => {
|
|
1082
|
+
if (destroyed) return;
|
|
1083
|
+
provider.disconnect?.();
|
|
1084
|
+
setSynced(false);
|
|
1085
|
+
setStatus("disconnected");
|
|
1086
|
+
},
|
|
1087
|
+
destroy: () => {
|
|
1088
|
+
if (destroyed) return;
|
|
1089
|
+
setSynced(false);
|
|
1090
|
+
setStatus("disconnected");
|
|
1091
|
+
destroyed = true;
|
|
1092
|
+
for (const [name, handler] of subscriptions) provider.off?.(name, handler);
|
|
1093
|
+
subscriptions.length = 0;
|
|
1094
|
+
events.clear();
|
|
1095
|
+
provider.destroy?.();
|
|
1096
|
+
},
|
|
1097
|
+
on: (event, listener) => events.on(event, listener)
|
|
1098
|
+
};
|
|
1099
|
+
}
|
|
1100
|
+
function observeExternalSession(session, onSnapshot) {
|
|
1101
|
+
let active = true;
|
|
1102
|
+
let subscribing = true;
|
|
1103
|
+
let previous;
|
|
1104
|
+
let unsubscribe;
|
|
1105
|
+
const notify = () => {
|
|
1106
|
+
if (!active || subscribing) return;
|
|
1107
|
+
const snapshot = session.getSnapshot();
|
|
1108
|
+
if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
|
|
1109
|
+
previous = { status: snapshot.status, synced: snapshot.synced };
|
|
1110
|
+
onSnapshot(previous);
|
|
1111
|
+
};
|
|
1112
|
+
const dispose = () => {
|
|
1113
|
+
if (!active) return;
|
|
1114
|
+
active = false;
|
|
1115
|
+
unsubscribe?.();
|
|
1116
|
+
};
|
|
1117
|
+
try {
|
|
1118
|
+
unsubscribe = session.subscribe(notify);
|
|
1119
|
+
subscribing = false;
|
|
1120
|
+
notify();
|
|
1121
|
+
} catch (error) {
|
|
1122
|
+
dispose();
|
|
1123
|
+
throw error;
|
|
1124
|
+
}
|
|
1125
|
+
return dispose;
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
// collab/webrtc-provider.ts
|
|
1129
|
+
function webrtcProvider(options) {
|
|
1130
|
+
return ({ doc, awareness, roomId }) => adaptYjsProvider(
|
|
1131
|
+
new options.WebrtcProvider(roomId, doc, {
|
|
1132
|
+
awareness,
|
|
1133
|
+
...options.signaling ? { signaling: options.signaling } : {},
|
|
1134
|
+
...options.password ? { password: options.password } : {}
|
|
1135
|
+
})
|
|
1136
|
+
);
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1027
1139
|
// collab/websocket-transport.ts
|
|
1028
1140
|
var OPEN = 1;
|
|
1029
1141
|
function roomUrl(server, roomId) {
|
|
@@ -1120,9 +1232,15 @@ function openCollaborationSession(options, defaults) {
|
|
|
1120
1232
|
const roomId = options.roomId ?? "";
|
|
1121
1233
|
if (!isValidRoomId(roomId)) throw new Error(INVALID_ROOM_MESSAGE);
|
|
1122
1234
|
let provider = options.provider;
|
|
1235
|
+
if (!provider && options.webrtc) {
|
|
1236
|
+
const password = options.webrtc.password ?? options.authToken;
|
|
1237
|
+
provider = webrtcProvider({ ...options.webrtc, ...password ? { password } : {} });
|
|
1238
|
+
}
|
|
1123
1239
|
if (!provider && options.serverUrl)
|
|
1124
1240
|
provider = transportProvider({
|
|
1125
|
-
transport: createWebSocketTransport({
|
|
1241
|
+
transport: createWebSocketTransport({
|
|
1242
|
+
url: withToken(roomUrl(options.serverUrl, roomId), options.authToken)
|
|
1243
|
+
})
|
|
1126
1244
|
});
|
|
1127
1245
|
if (!provider) {
|
|
1128
1246
|
if (!canBroadcast()) throw new Error(NO_BROADCAST_MESSAGE);
|
|
@@ -1146,6 +1264,10 @@ function openCollaborationSession(options, defaults) {
|
|
|
1146
1264
|
});
|
|
1147
1265
|
return { session, owned: true };
|
|
1148
1266
|
}
|
|
1267
|
+
function withToken(url, token) {
|
|
1268
|
+
if (!token) return url;
|
|
1269
|
+
return `${url}${url.includes("?") ? "&" : "?"}token=${encodeURIComponent(token)}`;
|
|
1270
|
+
}
|
|
1149
1271
|
function collaborationStateOf(session) {
|
|
1150
1272
|
return {
|
|
1151
1273
|
active: true,
|
|
@@ -1202,107 +1324,6 @@ function toExternalSession(session) {
|
|
|
1202
1324
|
};
|
|
1203
1325
|
}
|
|
1204
1326
|
|
|
1205
|
-
// collab/external-provider.ts
|
|
1206
|
-
function adaptYjsProvider(provider) {
|
|
1207
|
-
const events = new Emitter();
|
|
1208
|
-
let destroyed = false;
|
|
1209
|
-
let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
|
|
1210
|
-
let synced = Boolean(provider.synced);
|
|
1211
|
-
const subscriptions = [];
|
|
1212
|
-
const listen = (name, handler) => {
|
|
1213
|
-
const wrapped = handler;
|
|
1214
|
-
provider.on(name, wrapped);
|
|
1215
|
-
subscriptions.push([name, wrapped]);
|
|
1216
|
-
};
|
|
1217
|
-
const setStatus = (next) => {
|
|
1218
|
-
if (destroyed || next === status) return;
|
|
1219
|
-
status = next;
|
|
1220
|
-
events.emit("status", next);
|
|
1221
|
-
};
|
|
1222
|
-
const setSynced = (next) => {
|
|
1223
|
-
if (destroyed || next === synced) return;
|
|
1224
|
-
synced = next;
|
|
1225
|
-
events.emit("synced", next);
|
|
1226
|
-
};
|
|
1227
|
-
listen("status", (payload) => {
|
|
1228
|
-
if (typeof payload.connected === "boolean") {
|
|
1229
|
-
if (!payload.connected) setSynced(false);
|
|
1230
|
-
return setStatus(payload.connected ? "connected" : "disconnected");
|
|
1231
|
-
}
|
|
1232
|
-
if (payload.status === "connected" || payload.status === "connecting")
|
|
1233
|
-
setStatus(payload.status);
|
|
1234
|
-
else if (payload.status === "disconnected") {
|
|
1235
|
-
setSynced(false);
|
|
1236
|
-
setStatus("disconnected");
|
|
1237
|
-
}
|
|
1238
|
-
});
|
|
1239
|
-
const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
|
|
1240
|
-
listen("sync", onSync);
|
|
1241
|
-
listen("synced", onSync);
|
|
1242
|
-
listen("connection-error", (cause) => {
|
|
1243
|
-
if (destroyed) return;
|
|
1244
|
-
setStatus("error");
|
|
1245
|
-
events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
|
|
1246
|
-
});
|
|
1247
|
-
return {
|
|
1248
|
-
get status() {
|
|
1249
|
-
return status;
|
|
1250
|
-
},
|
|
1251
|
-
get synced() {
|
|
1252
|
-
return synced;
|
|
1253
|
-
},
|
|
1254
|
-
connect: () => {
|
|
1255
|
-
if (destroyed || status === "connected" || status === "connecting") return;
|
|
1256
|
-
setStatus("connecting");
|
|
1257
|
-
provider.connect?.();
|
|
1258
|
-
},
|
|
1259
|
-
disconnect: () => {
|
|
1260
|
-
if (destroyed) return;
|
|
1261
|
-
provider.disconnect?.();
|
|
1262
|
-
setSynced(false);
|
|
1263
|
-
setStatus("disconnected");
|
|
1264
|
-
},
|
|
1265
|
-
destroy: () => {
|
|
1266
|
-
if (destroyed) return;
|
|
1267
|
-
setSynced(false);
|
|
1268
|
-
setStatus("disconnected");
|
|
1269
|
-
destroyed = true;
|
|
1270
|
-
for (const [name, handler] of subscriptions) provider.off?.(name, handler);
|
|
1271
|
-
subscriptions.length = 0;
|
|
1272
|
-
events.clear();
|
|
1273
|
-
provider.destroy?.();
|
|
1274
|
-
},
|
|
1275
|
-
on: (event, listener) => events.on(event, listener)
|
|
1276
|
-
};
|
|
1277
|
-
}
|
|
1278
|
-
function observeExternalSession(session, onSnapshot) {
|
|
1279
|
-
let active = true;
|
|
1280
|
-
let subscribing = true;
|
|
1281
|
-
let previous;
|
|
1282
|
-
let unsubscribe;
|
|
1283
|
-
const notify = () => {
|
|
1284
|
-
if (!active || subscribing) return;
|
|
1285
|
-
const snapshot = session.getSnapshot();
|
|
1286
|
-
if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
|
|
1287
|
-
previous = { status: snapshot.status, synced: snapshot.synced };
|
|
1288
|
-
onSnapshot(previous);
|
|
1289
|
-
};
|
|
1290
|
-
const dispose = () => {
|
|
1291
|
-
if (!active) return;
|
|
1292
|
-
active = false;
|
|
1293
|
-
unsubscribe?.();
|
|
1294
|
-
};
|
|
1295
|
-
try {
|
|
1296
|
-
unsubscribe = session.subscribe(notify);
|
|
1297
|
-
subscribing = false;
|
|
1298
|
-
notify();
|
|
1299
|
-
} catch (error) {
|
|
1300
|
-
dispose();
|
|
1301
|
-
throw error;
|
|
1302
|
-
}
|
|
1303
|
-
return dispose;
|
|
1304
|
-
}
|
|
1305
|
-
|
|
1306
1327
|
// collab/memory-transport.ts
|
|
1307
1328
|
function createMemoryHub(options = {}) {
|
|
1308
1329
|
const rooms = /* @__PURE__ */ new Map();
|
|
@@ -1478,4 +1499,4 @@ function freezeDeep(value) {
|
|
|
1478
1499
|
return value;
|
|
1479
1500
|
}
|
|
1480
1501
|
|
|
1481
|
-
export { BROADCAST_THROTTLE_MS, BoundedMap, COLLABORATION_CHANGE_EVENT, COLLABORATION_OFF_STATE, COLLABORATION_ROLES, COLLAB_LEAVE_MESSAGE, CONNECTION_TIMEOUT_MS, CURSOR_PALETTE, DEFAULT_COLOR, DEFAULT_MAX_PACKAGE_BYTES, DEPARTURE_CHANNEL, Emitter, INITIAL_SYNC_GRACE_MS, INVALID_ROOM_MESSAGE, IdempotencyCache, LEGACY_PPTX_DEPARTURE_CHANNEL, LEGACY_PPTX_LEAVE_MESSAGE, LOCAL_ORIGIN, MAX_LABEL_CHARS, MAX_UPDATE_BYTES, MESSAGE_AWARENESS, MESSAGE_QUERY_AWARENESS, MESSAGE_SYNC, NO_BROADCAST_MESSAGE, PRESENCE_FIELD, PRESENCE_HEARTBEAT_MS, STALE_PRESENCE_MS, SequenceTracker, adaptYjsProvider, applyUpdateSafe, asSelectionIds, assignUserColor, bindDocument, borrowAwareness, buildRoster, canBroadcast, canWrite, clampCoordinate, classifyVersion, clearLocalAwareness, collaborationStateOf, createAssetSync, createBroadcastTransport, createClientId, createCollabSession, createDepartureChannel, createIdGenerator, createMemoryHub, createPresencePublisher, createSyncGate, createTransportProvider, createWebSocketTransport, deriveCanvasPresence, derivePresence, encodeDiff, encodeSnapshot, encodeStateVector2 as encodeStateVector, formatCursorLabel, freezeDeep, fromBase64, getUserInitials, isMixedContentBlocked, isNonNegativeSafeInteger, isPresenceFresh, isValidId, isValidRoomId, mergeUpdates2 as mergeUpdates, observeExternalSession, onCollaborationStateChange, openCollaborationSession, packageAdapter, presenceToCursors, randomToken, registerTeardown, removeAwarenessStatesLocally, restoreSnapshot, roomUrl, sanitizeAvatarUrl, sanitizeCanvasPayload, sanitizeColor, sanitizeIdentity, sanitizeIndex, sanitizeRole, sanitizeUserName, shouldAutoFollowBroadcaster, shouldRoomReplaceLoad, stripHtmlTags, toBase64, toExternalSession, transportProvider, validateDisplayName, validateRoomId, validateUpdate };
|
|
1502
|
+
export { BROADCAST_THROTTLE_MS, BoundedMap, COLLABORATION_CHANGE_EVENT, COLLABORATION_OFF_STATE, COLLABORATION_ROLES, COLLAB_LEAVE_MESSAGE, CONNECTION_TIMEOUT_MS, CURSOR_PALETTE, DEFAULT_COLOR, DEFAULT_MAX_PACKAGE_BYTES, DEPARTURE_CHANNEL, Emitter, INITIAL_SYNC_GRACE_MS, INVALID_ROOM_MESSAGE, IdempotencyCache, LEGACY_PPTX_DEPARTURE_CHANNEL, LEGACY_PPTX_LEAVE_MESSAGE, LOCAL_ORIGIN, MAX_LABEL_CHARS, MAX_UPDATE_BYTES, MESSAGE_AWARENESS, MESSAGE_QUERY_AWARENESS, MESSAGE_SYNC, NO_BROADCAST_MESSAGE, PRESENCE_FIELD, PRESENCE_HEARTBEAT_MS, STALE_PRESENCE_MS, SequenceTracker, adaptYjsProvider, applyUpdateSafe, asSelectionIds, assignUserColor, bindDocument, borrowAwareness, buildRoster, canBroadcast, canWrite, clampCoordinate, classifyVersion, clearLocalAwareness, collaborationStateOf, createAssetSync, createBroadcastTransport, createClientId, createCollabSession, createDepartureChannel, createIdGenerator, createMemoryHub, createPresencePublisher, createSyncGate, createTransportProvider, createWebSocketTransport, deriveCanvasPresence, derivePresence, encodeDiff, encodeSnapshot, encodeStateVector2 as encodeStateVector, formatCursorLabel, freezeDeep, fromBase64, getUserInitials, isMixedContentBlocked, isNonNegativeSafeInteger, isPresenceFresh, isValidId, isValidRoomId, mergeUpdates2 as mergeUpdates, observeExternalSession, onCollaborationStateChange, openCollaborationSession, packageAdapter, presenceToCursors, randomToken, registerTeardown, removeAwarenessStatesLocally, restoreSnapshot, roomUrl, sanitizeAvatarUrl, sanitizeCanvasPayload, sanitizeColor, sanitizeIdentity, sanitizeIndex, sanitizeRole, sanitizeUserName, shouldAutoFollowBroadcaster, shouldRoomReplaceLoad, stripHtmlTags, toBase64, toExternalSession, transportProvider, validateDisplayName, validateRoomId, validateUpdate, webrtcProvider };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Awareness } from 'y-protocols/awareness';
|
|
2
|
+
import type * as Y from 'yjs';
|
|
3
|
+
import { type YjsProviderLike } from './external-provider.js';
|
|
4
|
+
import type { ProviderFactory } from './provider.js';
|
|
5
|
+
/** The y-webrtc `WebrtcProvider` constructor, structurally. */
|
|
6
|
+
export type WebrtcProviderConstructor = new (roomId: string, doc: Y.Doc, options: {
|
|
7
|
+
signaling?: string[];
|
|
8
|
+
password?: string;
|
|
9
|
+
awareness?: Awareness;
|
|
10
|
+
}) => YjsProviderLike;
|
|
11
|
+
export interface WebrtcOptions {
|
|
12
|
+
/** `WebrtcProvider` from the host's own `y-webrtc` install. */
|
|
13
|
+
WebrtcProvider: WebrtcProviderConstructor;
|
|
14
|
+
/** Signaling server URLs; y-webrtc's defaults when omitted. */
|
|
15
|
+
signaling?: string[];
|
|
16
|
+
/** Room password: peers without it cannot read the room. */
|
|
17
|
+
password?: string;
|
|
18
|
+
}
|
|
19
|
+
/** A provider factory that joins the session's room over y-webrtc, sharing its awareness. */
|
|
20
|
+
export declare function webrtcProvider(options: WebrtcOptions): ProviderFactory;
|
|
21
|
+
//# sourceMappingURL=webrtc-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webrtc-provider.d.ts","sourceRoot":"","sources":["../../collab/webrtc-provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,+DAA+D;AAC/D,MAAM,MAAM,yBAAyB,GAAG,KACvC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,CAAC,GAAG,EACV,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,KACvE,eAAe,CAAC;AAErB,MAAM,WAAW,aAAa;IAC7B,+DAA+D;IAC/D,cAAc,EAAE,yBAAyB,CAAC;IAC1C,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,CAStE"}
|