document-drive 1.19.0 → 1.20.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/README.md +4 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/src/cache/memory.d.ts +10 -0
- package/dist/src/cache/memory.d.ts.map +1 -0
- package/dist/src/cache/memory.js +26 -0
- package/dist/src/cache/redis.d.ts +14 -0
- package/dist/src/cache/redis.d.ts.map +1 -0
- package/dist/src/cache/redis.js +40 -0
- package/dist/src/cache/types.d.ts +7 -0
- package/dist/src/cache/types.d.ts.map +1 -0
- package/dist/src/cache/types.js +1 -0
- package/dist/src/drive-document-model/constants.d.ts +2 -0
- package/dist/src/drive-document-model/constants.d.ts.map +1 -0
- package/dist/src/drive-document-model/constants.js +1 -0
- package/dist/src/drive-document-model/gen/actions.d.ts +7 -0
- package/dist/src/drive-document-model/gen/actions.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/actions.js +2 -0
- package/dist/src/drive-document-model/gen/constants.d.ts +7 -0
- package/dist/src/drive-document-model/gen/constants.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/constants.js +16 -0
- package/dist/src/drive-document-model/gen/creators.d.ts +3 -0
- package/dist/src/drive-document-model/gen/creators.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/creators.js +2 -0
- package/dist/src/drive-document-model/gen/document-model.d.ts +3 -0
- package/dist/src/drive-document-model/gen/document-model.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/document-model.js +210 -0
- package/dist/src/drive-document-model/gen/drive/actions.d.ts +12 -0
- package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/actions.js +1 -0
- package/dist/src/drive-document-model/gen/drive/creators.d.ts +11 -0
- package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/creators.js +10 -0
- package/dist/src/drive-document-model/gen/drive/error.d.ts +2 -0
- package/dist/src/drive-document-model/gen/drive/error.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/error.js +1 -0
- package/dist/src/drive-document-model/gen/drive/object.d.ts +14 -0
- package/dist/src/drive-document-model/gen/drive/object.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/object.js +28 -0
- package/dist/src/drive-document-model/gen/drive/operations.d.ts +14 -0
- package/dist/src/drive-document-model/gen/drive/operations.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/operations.js +1 -0
- package/dist/src/drive-document-model/gen/node/actions.d.ts +11 -0
- package/dist/src/drive-document-model/gen/node/actions.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/actions.js +1 -0
- package/dist/src/drive-document-model/gen/node/creators.d.ts +10 -0
- package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/creators.js +9 -0
- package/dist/src/drive-document-model/gen/node/error.d.ts +2 -0
- package/dist/src/drive-document-model/gen/node/error.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/error.js +1 -0
- package/dist/src/drive-document-model/gen/node/object.d.ts +13 -0
- package/dist/src/drive-document-model/gen/node/object.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/object.js +25 -0
- package/dist/src/drive-document-model/gen/node/operations.d.ts +13 -0
- package/dist/src/drive-document-model/gen/node/operations.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/operations.js +1 -0
- package/dist/src/drive-document-model/gen/object.d.ts +21 -0
- package/dist/src/drive-document-model/gen/object.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/object.js +28 -0
- package/dist/src/drive-document-model/gen/reducer.d.ts +4 -0
- package/dist/src/drive-document-model/gen/reducer.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/reducer.js +74 -0
- package/dist/src/drive-document-model/gen/schema/types.d.ts +176 -0
- package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/schema/types.js +1 -0
- package/dist/src/drive-document-model/gen/schema/zod.d.ts +87 -0
- package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/schema/zod.js +203 -0
- package/dist/src/drive-document-model/gen/types.d.ts +9 -0
- package/dist/src/drive-document-model/gen/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/types.js +1 -0
- package/dist/src/drive-document-model/gen/utils.d.ts +10 -0
- package/dist/src/drive-document-model/gen/utils.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/utils.js +27 -0
- package/dist/src/drive-document-model/index.d.ts +2 -0
- package/dist/src/drive-document-model/index.d.ts.map +1 -0
- package/dist/src/drive-document-model/index.js +1 -0
- package/dist/src/drive-document-model/module.d.ts +3 -0
- package/dist/src/drive-document-model/module.d.ts.map +1 -0
- package/dist/src/drive-document-model/module.js +12 -0
- package/dist/src/drive-document-model/src/reducers/drive.d.ts +8 -0
- package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/reducers/drive.js +37 -0
- package/dist/src/drive-document-model/src/reducers/node.d.ts +8 -0
- package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/reducers/node.js +185 -0
- package/dist/src/drive-document-model/src/utils.d.ts +34 -0
- package/dist/src/drive-document-model/src/utils.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/utils.js +146 -0
- package/dist/src/queue/base.d.ts +43 -0
- package/dist/src/queue/base.d.ts.map +1 -0
- package/dist/src/queue/base.js +241 -0
- package/dist/src/queue/redis.d.ts +28 -0
- package/dist/src/queue/redis.d.ts.map +1 -0
- package/dist/src/queue/redis.js +110 -0
- package/dist/src/queue/types.d.ts +55 -0
- package/dist/src/queue/types.d.ts.map +1 -0
- package/dist/src/queue/types.js +6 -0
- package/dist/src/read-mode/errors.d.ts +12 -0
- package/dist/src/read-mode/errors.d.ts.map +1 -0
- package/dist/src/read-mode/errors.js +17 -0
- package/dist/src/read-mode/server.d.ts +4 -0
- package/dist/src/read-mode/server.d.ts.map +1 -0
- package/dist/src/read-mode/server.js +78 -0
- package/dist/src/read-mode/service.d.ts +18 -0
- package/dist/src/read-mode/service.d.ts.map +1 -0
- package/dist/src/read-mode/service.js +112 -0
- package/dist/src/read-mode/types.d.ts +35 -0
- package/dist/src/read-mode/types.d.ts.map +1 -0
- package/dist/src/read-mode/types.js +1 -0
- package/dist/src/server/base-server.d.ts +112 -0
- package/dist/src/server/base-server.d.ts.map +1 -0
- package/dist/src/server/base-server.js +1280 -0
- package/dist/src/server/builder.d.ts +30 -0
- package/dist/src/server/builder.d.ts.map +1 -0
- package/dist/src/server/builder.js +89 -0
- package/dist/src/server/constants.d.ts +2 -0
- package/dist/src/server/constants.d.ts.map +1 -0
- package/dist/src/server/constants.js +1 -0
- package/dist/src/server/error.d.ts +30 -0
- package/dist/src/server/error.d.ts.map +1 -0
- package/dist/src/server/error.js +47 -0
- package/dist/src/server/event-emitter.d.ts +8 -0
- package/dist/src/server/event-emitter.d.ts.map +1 -0
- package/dist/src/server/event-emitter.js +10 -0
- package/dist/src/server/listener/index.d.ts +2 -0
- package/dist/src/server/listener/index.d.ts.map +1 -0
- package/dist/src/server/listener/index.js +1 -0
- package/dist/src/server/listener/listener-manager.d.ts +27 -0
- package/dist/src/server/listener/listener-manager.d.ts.map +1 -0
- package/dist/src/server/listener/listener-manager.js +401 -0
- package/dist/src/server/listener/transmitter/factory.d.ts +8 -0
- package/dist/src/server/listener/transmitter/factory.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/factory.js +25 -0
- package/dist/src/server/listener/transmitter/internal.d.ts +34 -0
- package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/internal.js +87 -0
- package/dist/src/server/listener/transmitter/pull-responder.d.ts +38 -0
- package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/pull-responder.js +256 -0
- package/dist/src/server/listener/transmitter/switchboard-push.d.ts +9 -0
- package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/switchboard-push.js +77 -0
- package/dist/src/server/listener/transmitter/types.d.ts +20 -0
- package/dist/src/server/listener/transmitter/types.d.ts.map +1 -0
- package/dist/src/server/listener/transmitter/types.js +1 -0
- package/dist/src/server/listener/util.d.ts +2 -0
- package/dist/src/server/listener/util.d.ts.map +1 -0
- package/dist/src/server/listener/util.js +22 -0
- package/dist/src/server/sync-manager.d.ts +30 -0
- package/dist/src/server/sync-manager.d.ts.map +1 -0
- package/dist/src/server/sync-manager.js +287 -0
- package/dist/src/server/types.d.ts +308 -0
- package/dist/src/server/types.d.ts.map +1 -0
- package/dist/src/server/types.js +12 -0
- package/dist/src/server/utils.d.ts +8 -0
- package/dist/src/server/utils.d.ts.map +1 -0
- package/dist/src/server/utils.js +47 -0
- package/dist/src/storage/base.d.ts +36 -0
- package/dist/src/storage/base.d.ts.map +1 -0
- package/dist/src/storage/base.js +4 -0
- package/dist/src/storage/browser.d.ts +36 -0
- package/dist/src/storage/browser.d.ts.map +1 -0
- package/dist/src/storage/browser.js +155 -0
- package/dist/src/storage/filesystem.d.ts +33 -0
- package/dist/src/storage/filesystem.d.ts.map +1 -0
- package/dist/src/storage/filesystem.js +197 -0
- package/dist/src/storage/memory.d.ts +33 -0
- package/dist/src/storage/memory.d.ts.map +1 -0
- package/dist/src/storage/memory.js +139 -0
- package/dist/src/storage/prisma.d.ts +67 -0
- package/dist/src/storage/prisma.d.ts.map +1 -0
- package/dist/src/storage/prisma.js +445 -0
- package/dist/src/storage/sequelize.d.ts +32 -0
- package/dist/src/storage/sequelize.d.ts.map +1 -0
- package/dist/src/storage/sequelize.js +373 -0
- package/dist/src/storage/types.d.ts +43 -0
- package/dist/src/storage/types.d.ts.map +1 -0
- package/dist/src/storage/types.js +1 -0
- package/dist/src/utils/default-drives-manager.d.ts +29 -0
- package/dist/src/utils/default-drives-manager.d.ts.map +1 -0
- package/dist/src/utils/default-drives-manager.js +208 -0
- package/dist/src/utils/graphql.d.ts +34 -0
- package/dist/src/utils/graphql.d.ts.map +1 -0
- package/dist/src/utils/graphql.js +183 -0
- package/dist/src/utils/logger.d.ts +27 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +105 -0
- package/dist/src/utils/migrations.d.ts +4 -0
- package/dist/src/utils/migrations.d.ts.map +1 -0
- package/dist/src/utils/migrations.js +41 -0
- package/dist/src/utils/misc.d.ts +11 -0
- package/dist/src/utils/misc.d.ts.map +1 -0
- package/dist/src/utils/misc.js +43 -0
- package/dist/src/utils/run-asap.d.ts +12 -0
- package/dist/src/utils/run-asap.d.ts.map +1 -0
- package/dist/src/utils/run-asap.js +131 -0
- package/dist/test/document-helpers/utils.d.ts +8 -0
- package/dist/test/document-helpers/utils.d.ts.map +1 -0
- package/dist/test/document-helpers/utils.js +21 -0
- package/dist/test/utils.d.ts +48 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +132 -0
- package/dist/test/vitest-setup.d.ts +2 -0
- package/dist/test/vitest-setup.d.ts.map +1 -0
- package/dist/test/vitest-setup.js +4 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +20 -0
- package/package.json +20 -38
- package/src/cache/index.ts +0 -2
- package/src/cache/memory.ts +0 -33
- package/src/cache/redis.ts +0 -56
- package/src/cache/types.ts +0 -9
- package/src/index.ts +0 -4
- package/src/queue/base.ts +0 -320
- package/src/queue/index.ts +0 -2
- package/src/queue/redis.ts +0 -144
- package/src/queue/types.ts +0 -79
- package/src/read-mode/errors.ts +0 -19
- package/src/read-mode/index.ts +0 -125
- package/src/read-mode/service.ts +0 -207
- package/src/read-mode/types.ts +0 -108
- package/src/server/error.ts +0 -70
- package/src/server/index.ts +0 -2444
- package/src/server/listener/index.ts +0 -2
- package/src/server/listener/manager.ts +0 -652
- package/src/server/listener/transmitter/index.ts +0 -4
- package/src/server/listener/transmitter/internal.ts +0 -143
- package/src/server/listener/transmitter/pull-responder.ts +0 -462
- package/src/server/listener/transmitter/switchboard-push.ts +0 -125
- package/src/server/listener/transmitter/types.ts +0 -27
- package/src/server/types.ts +0 -596
- package/src/server/utils.ts +0 -82
- package/src/storage/base.ts +0 -81
- package/src/storage/browser.ts +0 -238
- package/src/storage/filesystem.ts +0 -297
- package/src/storage/index.ts +0 -2
- package/src/storage/memory.ts +0 -211
- package/src/storage/prisma.ts +0 -653
- package/src/storage/sequelize.ts +0 -498
- package/src/storage/types.ts +0 -97
- package/src/utils/default-drives-manager.ts +0 -341
- package/src/utils/document-helpers.ts +0 -21
- package/src/utils/graphql.ts +0 -301
- package/src/utils/index.ts +0 -90
- package/src/utils/logger.ts +0 -38
- package/src/utils/migrations.ts +0 -58
- package/src/utils/run-asap.ts +0 -156
package/src/utils/index.ts
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DocumentDriveDocument,
|
|
3
|
-
documentModel as DocumentDriveModel,
|
|
4
|
-
} from "document-model-libs/document-drive";
|
|
5
|
-
import {
|
|
6
|
-
Action,
|
|
7
|
-
BaseAction,
|
|
8
|
-
Document,
|
|
9
|
-
DocumentOperations,
|
|
10
|
-
Operation,
|
|
11
|
-
OperationScope,
|
|
12
|
-
} from "document-model/document";
|
|
13
|
-
import { generateId } from "document-model/utils";
|
|
14
|
-
import { OperationError } from "../server/error";
|
|
15
|
-
import { DocumentDriveStorage, DocumentStorage } from "../storage";
|
|
16
|
-
import { RunAsap } from "./run-asap";
|
|
17
|
-
export * from "./run-asap";
|
|
18
|
-
|
|
19
|
-
export const runAsap = RunAsap.runAsap;
|
|
20
|
-
export const runAsapAsync = RunAsap.runAsapAsync;
|
|
21
|
-
|
|
22
|
-
export function isDocumentDriveStorage(
|
|
23
|
-
document: DocumentStorage,
|
|
24
|
-
): document is DocumentDriveStorage {
|
|
25
|
-
return document.documentType === DocumentDriveModel.id;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function isDocumentDrive(
|
|
29
|
-
document: Document,
|
|
30
|
-
): document is DocumentDriveDocument {
|
|
31
|
-
return document.documentType === DocumentDriveModel.id;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function mergeOperations<A extends Action = Action>(
|
|
35
|
-
currentOperations: DocumentOperations<A>,
|
|
36
|
-
newOperations: Operation<A | BaseAction>[],
|
|
37
|
-
): DocumentOperations<A> {
|
|
38
|
-
const minIndexByScope = Object.keys(currentOperations).reduce<
|
|
39
|
-
Partial<Record<OperationScope, number>>
|
|
40
|
-
>((acc, curr) => {
|
|
41
|
-
const scope = curr as OperationScope;
|
|
42
|
-
acc[scope] = currentOperations[scope].at(-1)?.index ?? 0;
|
|
43
|
-
return acc;
|
|
44
|
-
}, {});
|
|
45
|
-
|
|
46
|
-
const conflictOp = newOperations.find(
|
|
47
|
-
(op) => op.index < (minIndexByScope[op.scope] ?? 0),
|
|
48
|
-
);
|
|
49
|
-
if (conflictOp) {
|
|
50
|
-
throw new OperationError(
|
|
51
|
-
"ERROR",
|
|
52
|
-
conflictOp,
|
|
53
|
-
`Tried to add operation with index ${conflictOp.index} and document is at index ${minIndexByScope[conflictOp.scope]}`,
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return newOperations
|
|
58
|
-
.sort((a, b) => a.index - b.index)
|
|
59
|
-
.reduce<DocumentOperations<A>>((acc, curr) => {
|
|
60
|
-
const existingOperations = acc[curr.scope] || [];
|
|
61
|
-
return { ...acc, [curr.scope]: [...existingOperations, curr] };
|
|
62
|
-
}, currentOperations);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function generateUUID(): string {
|
|
66
|
-
return generateId();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function isNoopUpdate(
|
|
70
|
-
operation: Operation,
|
|
71
|
-
latestOperation?: Operation,
|
|
72
|
-
) {
|
|
73
|
-
if (!latestOperation) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const isNoopOp = operation.type === "NOOP";
|
|
78
|
-
const isNoopLatestOp = latestOperation.type === "NOOP";
|
|
79
|
-
const isSameIndexOp = operation.index === latestOperation.index;
|
|
80
|
-
const isSkipOpGreaterThanLatestOp = operation.skip > latestOperation.skip;
|
|
81
|
-
|
|
82
|
-
return (
|
|
83
|
-
isNoopOp && isNoopLatestOp && isSameIndexOp && isSkipOpGreaterThanLatestOp
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// return true if dateA is before dateB
|
|
88
|
-
export function isBefore(dateA: Date | string, dateB: Date | string) {
|
|
89
|
-
return new Date(dateA) < new Date(dateB);
|
|
90
|
-
}
|
package/src/utils/logger.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export type ILogger = Pick<
|
|
2
|
-
Console,
|
|
3
|
-
"log" | "info" | "warn" | "error" | "debug" | "trace"
|
|
4
|
-
>;
|
|
5
|
-
class Logger implements ILogger {
|
|
6
|
-
#logger: ILogger = console;
|
|
7
|
-
|
|
8
|
-
constructor() {
|
|
9
|
-
// Bind methods to avoid losing `this`
|
|
10
|
-
this.log = this.log.bind(this);
|
|
11
|
-
this.info = this.info.bind(this);
|
|
12
|
-
this.warn = this.warn.bind(this);
|
|
13
|
-
this.error = this.error.bind(this);
|
|
14
|
-
this.debug = this.debug.bind(this);
|
|
15
|
-
this.trace = this.trace.bind(this);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
set logger(logger: ILogger) {
|
|
19
|
-
this.#logger = logger;
|
|
20
|
-
}
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
22
|
-
log = (...data: any[]) => this.#logger.log(...data);
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
24
|
-
info = (...data: any[]) => this.#logger.info(...data);
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
26
|
-
warn = (...data: any[]) => this.#logger.warn(...data);
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
28
|
-
error = (...data: any[]) => this.#logger.error(...data);
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
30
|
-
debug = (...data: any[]) => this.#logger.debug(...data);
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
32
|
-
trace = (...data: any[]) => this.#logger.trace(...data);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const loggerInstance = new Logger();
|
|
36
|
-
|
|
37
|
-
export const logger: ILogger = loggerInstance;
|
|
38
|
-
export const setLogger = (logger: ILogger) => (loggerInstance.logger = logger);
|
package/src/utils/migrations.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Action,
|
|
3
|
-
Document,
|
|
4
|
-
DocumentOperations,
|
|
5
|
-
Operation,
|
|
6
|
-
OperationScope,
|
|
7
|
-
} from "document-model/document";
|
|
8
|
-
import { DocumentStorage } from "../storage/types";
|
|
9
|
-
|
|
10
|
-
export function migrateDocumentOperationSigatures<D extends Document>(
|
|
11
|
-
document: DocumentStorage<D>,
|
|
12
|
-
): DocumentStorage<D> | undefined {
|
|
13
|
-
let legacy = false;
|
|
14
|
-
const operations = Object.entries(document.operations).reduce<
|
|
15
|
-
DocumentOperations<Action>
|
|
16
|
-
>(
|
|
17
|
-
(acc, [key, operations]) => {
|
|
18
|
-
const scope = key as unknown as OperationScope;
|
|
19
|
-
for (const op of operations) {
|
|
20
|
-
const newOp = migrateLegacyOperationSignature(op);
|
|
21
|
-
acc[scope].push(newOp);
|
|
22
|
-
if (newOp !== op) {
|
|
23
|
-
legacy = true;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return acc;
|
|
27
|
-
},
|
|
28
|
-
{ global: [], local: [] },
|
|
29
|
-
);
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
31
|
-
return legacy ? { ...document, operations } : document;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function migrateLegacyOperationSignature<A extends Action>(
|
|
35
|
-
operation: Operation<A>,
|
|
36
|
-
): Operation<A> {
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
38
|
-
if (!operation.context?.signer || operation.context.signer.signatures) {
|
|
39
|
-
return operation;
|
|
40
|
-
}
|
|
41
|
-
const { signer } = operation.context;
|
|
42
|
-
if ("signature" in signer) {
|
|
43
|
-
const signature = signer.signature as string | undefined;
|
|
44
|
-
return {
|
|
45
|
-
...operation,
|
|
46
|
-
context: {
|
|
47
|
-
...operation.context,
|
|
48
|
-
signer: {
|
|
49
|
-
user: signer.user,
|
|
50
|
-
app: signer.app,
|
|
51
|
-
signatures: signature?.length ? [signature] : [],
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
} else {
|
|
56
|
-
return operation;
|
|
57
|
-
}
|
|
58
|
-
}
|
package/src/utils/run-asap.ts
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
2
|
-
export namespace RunAsap {
|
|
3
|
-
export type Task<T = void> = () => T;
|
|
4
|
-
export type AbortTask = () => void;
|
|
5
|
-
export type RunAsap<T> = (task: Task<T>) => AbortTask;
|
|
6
|
-
|
|
7
|
-
export const useMessageChannel = (() => {
|
|
8
|
-
if (typeof MessageChannel === "undefined") {
|
|
9
|
-
return new Error("MessageChannel is not supported");
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return (task: Task) => {
|
|
13
|
-
const controller = new AbortController();
|
|
14
|
-
const signal = controller.signal;
|
|
15
|
-
const mc = new MessageChannel();
|
|
16
|
-
mc.port1.postMessage(null);
|
|
17
|
-
mc.port2.addEventListener(
|
|
18
|
-
"message",
|
|
19
|
-
() => {
|
|
20
|
-
task();
|
|
21
|
-
mc.port1.close();
|
|
22
|
-
mc.port2.close();
|
|
23
|
-
},
|
|
24
|
-
{ once: true, signal: signal },
|
|
25
|
-
);
|
|
26
|
-
mc.port2.start();
|
|
27
|
-
return () => controller.abort();
|
|
28
|
-
};
|
|
29
|
-
})();
|
|
30
|
-
|
|
31
|
-
export const usePostMessage = (() => {
|
|
32
|
-
const _main: unknown =
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
34
|
-
(typeof window === "object" && window) ||
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
36
|
-
(typeof global === "object" && global) ||
|
|
37
|
-
(typeof self === "object" && self);
|
|
38
|
-
if (!_main) {
|
|
39
|
-
return new Error("No global object found");
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const main = _main as Window;
|
|
43
|
-
if (
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
45
|
-
!main.postMessage ||
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
47
|
-
!main.addEventListener ||
|
|
48
|
-
(main as { importScripts?: unknown }).importScripts // web workers can't this method
|
|
49
|
-
) {
|
|
50
|
-
return new Error("postMessage is not supported");
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
let index = 0;
|
|
54
|
-
const tasks = new Map<number, Task>();
|
|
55
|
-
|
|
56
|
-
function getNewIndex() {
|
|
57
|
-
if (index === 9007199254740991) {
|
|
58
|
-
return 0;
|
|
59
|
-
}
|
|
60
|
-
return ++index;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const MESSAGE_PREFIX = "com.usePostMessage" + Math.random();
|
|
64
|
-
|
|
65
|
-
main.addEventListener(
|
|
66
|
-
"message",
|
|
67
|
-
(e) => {
|
|
68
|
-
const event = e as MessageEvent<string>;
|
|
69
|
-
if (typeof event.data !== "string") {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (event.source !== main || !event.data.startsWith(MESSAGE_PREFIX)) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const index = event.data.split(":").at(1);
|
|
76
|
-
if (index === undefined) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const i = +index;
|
|
80
|
-
const task = tasks.get(i);
|
|
81
|
-
if (task) {
|
|
82
|
-
task();
|
|
83
|
-
tasks.delete(i);
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
false,
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
return (task: Task) => {
|
|
90
|
-
const i = getNewIndex();
|
|
91
|
-
tasks.set(i, task);
|
|
92
|
-
main.postMessage(MESSAGE_PREFIX + ":" + i, { targetOrigin: "*" });
|
|
93
|
-
return () => {
|
|
94
|
-
tasks.delete(i);
|
|
95
|
-
};
|
|
96
|
-
};
|
|
97
|
-
})();
|
|
98
|
-
|
|
99
|
-
export const useSetImmediate = (() => {
|
|
100
|
-
if (typeof window !== "undefined") {
|
|
101
|
-
return new Error("setImmediate is not supported on the browser");
|
|
102
|
-
}
|
|
103
|
-
if (typeof setImmediate === "undefined") {
|
|
104
|
-
return new Error("setImmediate is not supported");
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return (task: Task) => {
|
|
108
|
-
const id = setImmediate(task);
|
|
109
|
-
return () => clearImmediate(id);
|
|
110
|
-
};
|
|
111
|
-
})();
|
|
112
|
-
|
|
113
|
-
export const useSetTimeout = (() => {
|
|
114
|
-
return (task: Task) => {
|
|
115
|
-
const id = setTimeout(task, 0);
|
|
116
|
-
return () => clearTimeout(id);
|
|
117
|
-
};
|
|
118
|
-
})();
|
|
119
|
-
|
|
120
|
-
// queues the task in the macro tasks queue, so it doesn't
|
|
121
|
-
// prevent the event loop from movin on the next tick
|
|
122
|
-
export function runAsap<T = void>(task: Task<T>): AbortTask {
|
|
123
|
-
// if on node use setImmediate
|
|
124
|
-
if (!(useSetImmediate instanceof Error)) {
|
|
125
|
-
return useSetImmediate(task);
|
|
126
|
-
}
|
|
127
|
-
// on browser use MessageChannel if available
|
|
128
|
-
else if (!(useMessageChannel instanceof Error)) {
|
|
129
|
-
return useMessageChannel(task);
|
|
130
|
-
}
|
|
131
|
-
// otherwise use window.postMessage
|
|
132
|
-
else if (!(usePostMessage instanceof Error)) {
|
|
133
|
-
return usePostMessage(task);
|
|
134
|
-
}
|
|
135
|
-
// fallback to setTimeout with 0 delay
|
|
136
|
-
else {
|
|
137
|
-
return useSetTimeout(task);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export function runAsapAsync<T = void>(
|
|
142
|
-
task: RunAsap.Task<Promise<T>>,
|
|
143
|
-
queueMethod: RunAsap<void> = runAsap,
|
|
144
|
-
): Promise<T> {
|
|
145
|
-
if (queueMethod instanceof Error) {
|
|
146
|
-
throw new Error("queueMethod is not supported", {
|
|
147
|
-
cause: queueMethod,
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
return new Promise((resolve, reject) => {
|
|
151
|
-
queueMethod(() => {
|
|
152
|
-
task().then(resolve).catch(reject);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
}
|