syncorejs 0.2.1 → 0.2.3
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 +2 -1
- package/dist/_vendor/cli/app.d.mts.map +1 -1
- package/dist/_vendor/cli/app.mjs +330 -46
- package/dist/_vendor/cli/app.mjs.map +1 -1
- package/dist/_vendor/cli/context.mjs +27 -9
- package/dist/_vendor/cli/context.mjs.map +1 -1
- package/dist/_vendor/cli/dev-session.mjs.map +1 -1
- package/dist/_vendor/cli/doctor.mjs +513 -46
- package/dist/_vendor/cli/doctor.mjs.map +1 -1
- package/dist/_vendor/cli/errors.mjs.map +1 -1
- package/dist/_vendor/cli/help.mjs.map +1 -1
- package/dist/_vendor/cli/index.mjs +9 -2
- package/dist/_vendor/cli/index.mjs.map +1 -1
- package/dist/_vendor/cli/messages.mjs +5 -4
- package/dist/_vendor/cli/messages.mjs.map +1 -1
- package/dist/_vendor/cli/preflight.mjs.map +1 -1
- package/dist/_vendor/cli/project.mjs +125 -27
- package/dist/_vendor/cli/project.mjs.map +1 -1
- package/dist/_vendor/cli/render.mjs +57 -9
- package/dist/_vendor/cli/render.mjs.map +1 -1
- package/dist/_vendor/cli/targets.mjs +4 -3
- package/dist/_vendor/cli/targets.mjs.map +1 -1
- package/dist/_vendor/core/cli.d.mts +20 -4
- package/dist/_vendor/core/cli.d.mts.map +1 -1
- package/dist/_vendor/core/cli.mjs +458 -133
- package/dist/_vendor/core/cli.mjs.map +1 -1
- package/dist/_vendor/core/devtools-auth.mjs +60 -0
- package/dist/_vendor/core/devtools-auth.mjs.map +1 -0
- package/dist/_vendor/core/index.d.mts +5 -3
- package/dist/_vendor/core/index.mjs +22 -2
- package/dist/_vendor/core/index.mjs.map +1 -1
- package/dist/_vendor/core/runtime/components.d.mts +111 -0
- package/dist/_vendor/core/runtime/components.d.mts.map +1 -0
- package/dist/_vendor/core/runtime/components.mjs +186 -0
- package/dist/_vendor/core/runtime/components.mjs.map +1 -0
- package/dist/_vendor/core/runtime/devtools.d.mts +4 -4
- package/dist/_vendor/core/runtime/devtools.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/devtools.mjs +178 -60
- package/dist/_vendor/core/runtime/devtools.mjs.map +1 -1
- package/dist/_vendor/core/runtime/functions.d.mts +398 -16
- package/dist/_vendor/core/runtime/functions.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/functions.mjs +74 -3
- package/dist/_vendor/core/runtime/functions.mjs.map +1 -1
- package/dist/_vendor/core/runtime/id.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/id.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs +83 -0
- package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs +720 -0
- package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs +234 -0
- package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/engines/schedulerEngine.mjs +255 -0
- package/dist/_vendor/core/runtime/internal/engines/schedulerEngine.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/engines/schemaEngine.mjs +200 -0
- package/dist/_vendor/core/runtime/internal/engines/schemaEngine.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/engines/shared.mjs +252 -0
- package/dist/_vendor/core/runtime/internal/engines/shared.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs +145 -0
- package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs +221 -0
- package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/runtimeStatus.mjs +32 -0
- package/dist/_vendor/core/runtime/internal/runtimeStatus.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/systemMeta.mjs +61 -0
- package/dist/_vendor/core/runtime/internal/systemMeta.mjs.map +1 -0
- package/dist/_vendor/core/runtime/internal/transactionCoordinator.mjs +41 -0
- package/dist/_vendor/core/runtime/internal/transactionCoordinator.mjs.map +1 -0
- package/dist/_vendor/core/runtime/runtime.d.mts +1187 -202
- package/dist/_vendor/core/runtime/runtime.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/runtime.mjs +73 -1365
- package/dist/_vendor/core/runtime/runtime.mjs.map +1 -1
- package/dist/_vendor/core/transport.d.mts +113 -0
- package/dist/_vendor/core/transport.d.mts.map +1 -0
- package/dist/_vendor/core/transport.mjs +428 -0
- package/dist/_vendor/core/transport.mjs.map +1 -0
- package/dist/_vendor/devtools-protocol/index.d.ts +187 -4
- package/dist/_vendor/devtools-protocol/index.d.ts.map +1 -1
- package/dist/_vendor/devtools-protocol/index.js +25 -9
- package/dist/_vendor/devtools-protocol/index.js.map +1 -1
- package/dist/_vendor/next/config.d.ts +3 -4
- package/dist/_vendor/next/config.d.ts.map +1 -1
- package/dist/_vendor/next/config.js +37 -19
- package/dist/_vendor/next/config.js.map +1 -1
- package/dist/_vendor/next/index.d.ts +109 -29
- package/dist/_vendor/next/index.d.ts.map +1 -1
- package/dist/_vendor/next/index.js +104 -26
- package/dist/_vendor/next/index.js.map +1 -1
- package/dist/_vendor/platform-expo/index.d.ts +156 -37
- package/dist/_vendor/platform-expo/index.d.ts.map +1 -1
- package/dist/_vendor/platform-expo/index.js +80 -12
- package/dist/_vendor/platform-expo/index.js.map +1 -1
- package/dist/_vendor/platform-expo/react.d.ts.map +1 -1
- package/dist/_vendor/platform-expo/react.js +11 -10
- package/dist/_vendor/platform-expo/react.js.map +1 -1
- package/dist/_vendor/platform-expo/web-sqljs-wasm.js +16 -0
- package/dist/_vendor/platform-expo/web-sqljs-wasm.js.map +1 -0
- package/dist/_vendor/platform-node/index.d.mts +192 -24
- package/dist/_vendor/platform-node/index.d.mts.map +1 -1
- package/dist/_vendor/platform-node/index.mjs +236 -97
- package/dist/_vendor/platform-node/index.mjs.map +1 -1
- package/dist/_vendor/platform-node/ipc-react.d.mts.map +1 -1
- package/dist/_vendor/platform-node/ipc-react.mjs +15 -2
- package/dist/_vendor/platform-node/ipc-react.mjs.map +1 -1
- package/dist/_vendor/platform-node/ipc.d.mts +11 -35
- package/dist/_vendor/platform-node/ipc.d.mts.map +1 -1
- package/dist/_vendor/platform-node/ipc.mjs +3 -273
- package/dist/_vendor/platform-node/ipc.mjs.map +1 -1
- package/dist/_vendor/platform-web/external-change.d.ts +43 -1
- package/dist/_vendor/platform-web/external-change.d.ts.map +1 -1
- package/dist/_vendor/platform-web/external-change.js +32 -1
- package/dist/_vendor/platform-web/external-change.js.map +1 -1
- package/dist/_vendor/platform-web/index.d.ts +323 -51
- package/dist/_vendor/platform-web/index.d.ts.map +1 -1
- package/dist/_vendor/platform-web/index.js +233 -30
- package/dist/_vendor/platform-web/index.js.map +1 -1
- package/dist/_vendor/platform-web/indexeddb.d.ts +12 -0
- package/dist/_vendor/platform-web/indexeddb.d.ts.map +1 -1
- package/dist/_vendor/platform-web/indexeddb.js +10 -0
- package/dist/_vendor/platform-web/indexeddb.js.map +1 -1
- package/dist/_vendor/platform-web/opfs.d.ts +13 -0
- package/dist/_vendor/platform-web/opfs.d.ts.map +1 -1
- package/dist/_vendor/platform-web/opfs.js +12 -0
- package/dist/_vendor/platform-web/opfs.js.map +1 -1
- package/dist/_vendor/platform-web/persistence.d.ts +54 -0
- package/dist/_vendor/platform-web/persistence.d.ts.map +1 -1
- package/dist/_vendor/platform-web/persistence.js +15 -0
- package/dist/_vendor/platform-web/persistence.js.map +1 -1
- package/dist/_vendor/platform-web/react.d.ts +1 -2
- package/dist/_vendor/platform-web/react.d.ts.map +1 -1
- package/dist/_vendor/platform-web/react.js +27 -13
- package/dist/_vendor/platform-web/react.js.map +1 -1
- package/dist/_vendor/platform-web/sqljs.js +10 -1
- package/dist/_vendor/platform-web/sqljs.js.map +1 -1
- package/dist/_vendor/platform-web/web-sqljs-wasm.js +8 -0
- package/dist/_vendor/platform-web/web-sqljs-wasm.js.map +1 -0
- package/dist/_vendor/platform-web/worker.d.ts +71 -44
- package/dist/_vendor/platform-web/worker.d.ts.map +1 -1
- package/dist/_vendor/platform-web/worker.js +40 -271
- package/dist/_vendor/platform-web/worker.js.map +1 -1
- package/dist/_vendor/react/index.d.ts +222 -23
- package/dist/_vendor/react/index.d.ts.map +1 -1
- package/dist/_vendor/react/index.js +476 -63
- package/dist/_vendor/react/index.js.map +1 -1
- package/dist/_vendor/schema/definition.d.ts +151 -37
- package/dist/_vendor/schema/definition.d.ts.map +1 -1
- package/dist/_vendor/schema/definition.js +102 -20
- package/dist/_vendor/schema/definition.js.map +1 -1
- package/dist/_vendor/schema/index.d.ts +4 -4
- package/dist/_vendor/schema/index.js +2 -2
- package/dist/_vendor/schema/planner.d.ts +19 -2
- package/dist/_vendor/schema/planner.d.ts.map +1 -1
- package/dist/_vendor/schema/planner.js +79 -3
- package/dist/_vendor/schema/planner.js.map +1 -1
- package/dist/_vendor/schema/validators.d.ts +279 -83
- package/dist/_vendor/schema/validators.d.ts.map +1 -1
- package/dist/_vendor/schema/validators.js +330 -38
- package/dist/_vendor/schema/validators.js.map +1 -1
- package/dist/_vendor/svelte/index.d.ts +245 -19
- package/dist/_vendor/svelte/index.d.ts.map +1 -1
- package/dist/_vendor/svelte/index.js +443 -20
- package/dist/_vendor/svelte/index.js.map +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.js +2 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/package.json +29 -21
|
@@ -1,10 +1,60 @@
|
|
|
1
1
|
//#region src/index.d.ts
|
|
2
2
|
type SyncoreDevtoolsEventOrigin = "runtime" | "dashboard";
|
|
3
|
+
declare const SYNCORE_DEVTOOLS_PROTOCOL_VERSION = 1;
|
|
4
|
+
declare const SYNCORE_DEVTOOLS_MIN_SUPPORTED_PROTOCOL_VERSION = 1;
|
|
5
|
+
declare const SYNCORE_DEVTOOLS_MAX_SUPPORTED_PROTOCOL_VERSION = 1;
|
|
6
|
+
interface VersionHandshake {
|
|
7
|
+
protocolVersion: number;
|
|
8
|
+
minSupportedProtocolVersion: number;
|
|
9
|
+
maxSupportedProtocolVersion: number;
|
|
10
|
+
runtimeVersion?: string;
|
|
11
|
+
}
|
|
12
|
+
declare function isCompatibleVersionHandshake(handshake: Pick<VersionHandshake, "protocolVersion" | "minSupportedProtocolVersion" | "maxSupportedProtocolVersion">): boolean;
|
|
3
13
|
type SyncoreDevtoolsEventBase = {
|
|
4
14
|
runtimeId: string;
|
|
5
15
|
timestamp: number;
|
|
16
|
+
sequence?: number;
|
|
6
17
|
origin?: SyncoreDevtoolsEventOrigin;
|
|
7
18
|
};
|
|
19
|
+
type DevtoolsPreview = {
|
|
20
|
+
kind: "value";
|
|
21
|
+
value: unknown;
|
|
22
|
+
truncated?: boolean;
|
|
23
|
+
note?: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "error";
|
|
26
|
+
message: string;
|
|
27
|
+
truncated?: boolean;
|
|
28
|
+
};
|
|
29
|
+
interface DocumentChangePreview {
|
|
30
|
+
table: string;
|
|
31
|
+
id: string;
|
|
32
|
+
operation: "insert" | "patch" | "replace" | "delete";
|
|
33
|
+
fields?: string[];
|
|
34
|
+
beforePreview?: DevtoolsPreview;
|
|
35
|
+
afterPreview?: DevtoolsPreview;
|
|
36
|
+
}
|
|
37
|
+
interface InvalidationCause {
|
|
38
|
+
executionId?: string;
|
|
39
|
+
reason: string;
|
|
40
|
+
changedScopes: string[];
|
|
41
|
+
matchedScopes: string[];
|
|
42
|
+
}
|
|
43
|
+
interface ExecutionTrace {
|
|
44
|
+
executionId: string;
|
|
45
|
+
parentExecutionId?: string;
|
|
46
|
+
kind: "query" | "mutation" | "action" | "scheduler" | "dashboard";
|
|
47
|
+
functionName?: string;
|
|
48
|
+
argsPreview?: DevtoolsPreview;
|
|
49
|
+
resultPreview?: DevtoolsPreview;
|
|
50
|
+
error?: string;
|
|
51
|
+
readScopes?: string[];
|
|
52
|
+
writeScopes?: string[];
|
|
53
|
+
changedScopes?: string[];
|
|
54
|
+
changedDocumentsPreview?: DocumentChangePreview[];
|
|
55
|
+
invalidatedQueryIds?: string[];
|
|
56
|
+
schedulerJobId?: string;
|
|
57
|
+
}
|
|
8
58
|
type SyncoreDevtoolsEvent = (SyncoreDevtoolsEventBase & {
|
|
9
59
|
type: "runtime.connected";
|
|
10
60
|
platform: string;
|
|
@@ -14,30 +64,75 @@ type SyncoreDevtoolsEvent = (SyncoreDevtoolsEventBase & {
|
|
|
14
64
|
type: "query.executed";
|
|
15
65
|
queryId: string;
|
|
16
66
|
functionName: string;
|
|
67
|
+
componentPath?: string;
|
|
68
|
+
componentName?: string;
|
|
17
69
|
dependencies: string[];
|
|
18
70
|
durationMs: number;
|
|
71
|
+
executionId?: string;
|
|
72
|
+
parentExecutionId?: string;
|
|
73
|
+
argsPreview?: DevtoolsPreview;
|
|
74
|
+
resultPreview?: DevtoolsPreview;
|
|
75
|
+
readScopes?: string[];
|
|
19
76
|
}) | (SyncoreDevtoolsEventBase & {
|
|
20
77
|
type: "query.invalidated";
|
|
21
78
|
queryId: string;
|
|
79
|
+
componentPath?: string;
|
|
80
|
+
componentName?: string;
|
|
22
81
|
reason: string;
|
|
82
|
+
causedByExecutionId?: string;
|
|
83
|
+
changedScopes?: string[];
|
|
84
|
+
matchedScopes?: string[];
|
|
85
|
+
rerunExecutionId?: string;
|
|
23
86
|
}) | (SyncoreDevtoolsEventBase & {
|
|
24
87
|
type: "mutation.committed";
|
|
25
88
|
mutationId: string;
|
|
26
89
|
functionName: string;
|
|
90
|
+
componentPath?: string;
|
|
91
|
+
componentName?: string;
|
|
27
92
|
changedTables: string[];
|
|
28
93
|
durationMs: number;
|
|
94
|
+
executionId?: string;
|
|
95
|
+
parentExecutionId?: string;
|
|
96
|
+
argsPreview?: DevtoolsPreview;
|
|
97
|
+
resultPreview?: DevtoolsPreview;
|
|
98
|
+
writeScopes?: string[];
|
|
99
|
+
changedScopes?: string[];
|
|
100
|
+
changedDocumentsPreview?: DocumentChangePreview[];
|
|
101
|
+
invalidatedQueryIds?: string[];
|
|
29
102
|
}) | (SyncoreDevtoolsEventBase & {
|
|
30
103
|
type: "action.completed";
|
|
31
104
|
actionId: string;
|
|
32
105
|
functionName: string;
|
|
106
|
+
componentPath?: string;
|
|
107
|
+
componentName?: string;
|
|
33
108
|
durationMs: number;
|
|
34
109
|
error?: string;
|
|
110
|
+
executionId?: string;
|
|
111
|
+
parentExecutionId?: string;
|
|
112
|
+
argsPreview?: DevtoolsPreview;
|
|
113
|
+
resultPreview?: DevtoolsPreview;
|
|
114
|
+
writeScopes?: string[];
|
|
115
|
+
changedScopes?: string[];
|
|
116
|
+
changedDocumentsPreview?: DocumentChangePreview[];
|
|
117
|
+
invalidatedQueryIds?: string[];
|
|
35
118
|
}) | (SyncoreDevtoolsEventBase & {
|
|
36
119
|
type: "scheduler.tick";
|
|
37
120
|
executedJobIds: string[];
|
|
121
|
+
executionId?: string;
|
|
122
|
+
jobExecutions?: Array<{
|
|
123
|
+
jobId: string;
|
|
124
|
+
executionId?: string;
|
|
125
|
+
functionName: string;
|
|
126
|
+
functionType: "mutation" | "action";
|
|
127
|
+
argsPreview?: DevtoolsPreview;
|
|
128
|
+
resultPreview?: DevtoolsPreview;
|
|
129
|
+
error?: string;
|
|
130
|
+
durationMs?: number;
|
|
131
|
+
}>;
|
|
38
132
|
}) | (SyncoreDevtoolsEventBase & {
|
|
39
133
|
type: "storage.updated";
|
|
40
134
|
storageId: string;
|
|
135
|
+
componentPath?: string;
|
|
41
136
|
operation: "put" | "delete";
|
|
42
137
|
}) | (SyncoreDevtoolsEventBase & {
|
|
43
138
|
type: "log";
|
|
@@ -47,6 +142,11 @@ type SyncoreDevtoolsEvent = (SyncoreDevtoolsEventBase & {
|
|
|
47
142
|
interface SyncoreActiveQueryInfo {
|
|
48
143
|
id: string;
|
|
49
144
|
functionName: string;
|
|
145
|
+
args?: Record<string, unknown>;
|
|
146
|
+
consumers?: number;
|
|
147
|
+
owner?: "root" | "component";
|
|
148
|
+
componentPath?: string;
|
|
149
|
+
componentName?: string;
|
|
50
150
|
dependencyKeys: string[];
|
|
51
151
|
lastRunAt: number;
|
|
52
152
|
}
|
|
@@ -57,28 +157,65 @@ interface SyncoreRuntimeSummary {
|
|
|
57
157
|
origin?: string;
|
|
58
158
|
sessionLabel?: string;
|
|
59
159
|
targetKind?: "client" | "project";
|
|
160
|
+
runtimeRole?: "app" | "project-target";
|
|
60
161
|
storageProtocol?: string;
|
|
61
162
|
databaseLabel?: string;
|
|
163
|
+
dataSourceAlias?: string;
|
|
62
164
|
storageIdentity?: string;
|
|
165
|
+
capabilities?: SyncoreDevtoolsCapabilities;
|
|
63
166
|
connectedAt: number;
|
|
64
167
|
activeQueryCount: number;
|
|
65
168
|
recentEventCount: number;
|
|
66
169
|
}
|
|
170
|
+
interface SyncoreDevtoolsCapabilities {
|
|
171
|
+
sql?: {
|
|
172
|
+
read: boolean;
|
|
173
|
+
write: boolean;
|
|
174
|
+
live: boolean;
|
|
175
|
+
reason?: string;
|
|
176
|
+
};
|
|
177
|
+
data?: {
|
|
178
|
+
browse: boolean;
|
|
179
|
+
mutate: boolean;
|
|
180
|
+
importExport: boolean;
|
|
181
|
+
};
|
|
182
|
+
scheduler?: {
|
|
183
|
+
read: boolean;
|
|
184
|
+
edit: boolean;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
interface SyncoreDevtoolsExternalChangeEvent {
|
|
188
|
+
sourceId: string;
|
|
189
|
+
scope: "database" | "storage" | "all";
|
|
190
|
+
reason: "commit" | "storage-put" | "storage-delete" | "reconcile";
|
|
191
|
+
timestamp: number;
|
|
192
|
+
revision?: string;
|
|
193
|
+
changedScopes?: string[];
|
|
194
|
+
changedTables?: string[];
|
|
195
|
+
storageIds?: string[];
|
|
196
|
+
}
|
|
67
197
|
declare function createBasePublicId(input: string): string;
|
|
68
198
|
declare function createPublicId(key: string, keys: Iterable<string>): string;
|
|
69
199
|
declare function createPublicRuntimeId(runtimeId: string, runtimeIds?: Iterable<string>): string;
|
|
70
200
|
declare function createPublicTargetId(targetKey: string, targetKeys: Iterable<string>): string;
|
|
71
201
|
type SyncoreDevtoolsMessage = {
|
|
72
202
|
type: "hello";
|
|
203
|
+
protocolVersion?: number;
|
|
204
|
+
minSupportedProtocolVersion?: number;
|
|
205
|
+
maxSupportedProtocolVersion?: number;
|
|
206
|
+
runtimeVersion?: string;
|
|
73
207
|
runtimeId: string;
|
|
74
208
|
platform: string;
|
|
75
209
|
appName?: string;
|
|
76
210
|
origin?: string;
|
|
77
211
|
sessionLabel?: string;
|
|
78
212
|
targetKind?: "client" | "project";
|
|
213
|
+
runtimeRole?: "app" | "project-target";
|
|
79
214
|
storageProtocol?: string;
|
|
80
215
|
databaseLabel?: string;
|
|
216
|
+
dataSourceAlias?: string;
|
|
81
217
|
storageIdentity?: string;
|
|
218
|
+
capabilities?: SyncoreDevtoolsCapabilities;
|
|
82
219
|
} | {
|
|
83
220
|
type: "event";
|
|
84
221
|
event: SyncoreDevtoolsEvent;
|
|
@@ -105,6 +242,11 @@ type SyncoreDevtoolsMessage = {
|
|
|
105
242
|
subscriptionId: string;
|
|
106
243
|
runtimeId: string;
|
|
107
244
|
error: string;
|
|
245
|
+
} | {
|
|
246
|
+
type: "external.change";
|
|
247
|
+
runtimeId: string;
|
|
248
|
+
storageIdentity: string;
|
|
249
|
+
event: SyncoreDevtoolsExternalChangeEvent;
|
|
108
250
|
};
|
|
109
251
|
interface SyncoreDevtoolsCommand {
|
|
110
252
|
type: "command";
|
|
@@ -144,6 +286,15 @@ type SyncoreDevtoolsCommandPayload = {
|
|
|
144
286
|
kind: "data.delete";
|
|
145
287
|
table: string;
|
|
146
288
|
id: string;
|
|
289
|
+
} | {
|
|
290
|
+
kind: "data.export";
|
|
291
|
+
tables?: string[];
|
|
292
|
+
} | {
|
|
293
|
+
kind: "data.referenceOptions";
|
|
294
|
+
table: string;
|
|
295
|
+
search?: string;
|
|
296
|
+
limit?: number;
|
|
297
|
+
offset?: number;
|
|
147
298
|
} | {
|
|
148
299
|
kind: "sql.read";
|
|
149
300
|
query: string;
|
|
@@ -156,9 +307,9 @@ type SyncoreDevtoolsCommandPayload = {
|
|
|
156
307
|
} | {
|
|
157
308
|
kind: "scheduler.update";
|
|
158
309
|
jobId: string;
|
|
159
|
-
schedule
|
|
310
|
+
schedule?: SchedulerRecurringSchedule;
|
|
160
311
|
args: Record<string, unknown>;
|
|
161
|
-
misfirePolicy
|
|
312
|
+
misfirePolicy?: SchedulerMisfirePolicy;
|
|
162
313
|
runAt?: number;
|
|
163
314
|
};
|
|
164
315
|
type SyncoreDevtoolsSubscriptionPayload = {
|
|
@@ -201,6 +352,22 @@ type SyncoreDevtoolsCommandResultPayload = {
|
|
|
201
352
|
success: boolean;
|
|
202
353
|
id?: string;
|
|
203
354
|
error?: string;
|
|
355
|
+
} | {
|
|
356
|
+
kind: "data.export.result";
|
|
357
|
+
tables: Array<{
|
|
358
|
+
name: string;
|
|
359
|
+
rows: Record<string, unknown>[];
|
|
360
|
+
totalCount: number;
|
|
361
|
+
}>;
|
|
362
|
+
error?: string;
|
|
363
|
+
} | {
|
|
364
|
+
kind: "data.referenceOptions.result";
|
|
365
|
+
table: string;
|
|
366
|
+
rows: Record<string, unknown>[];
|
|
367
|
+
totalCount: number;
|
|
368
|
+
offset: number;
|
|
369
|
+
hasMore: boolean;
|
|
370
|
+
error?: string;
|
|
204
371
|
} | {
|
|
205
372
|
kind: "sql.read.result";
|
|
206
373
|
columns: string[];
|
|
@@ -259,7 +426,15 @@ type SyncoreDevtoolsSubscriptionResultPayload = {
|
|
|
259
426
|
interface FunctionDefinition {
|
|
260
427
|
name: string;
|
|
261
428
|
type: "query" | "mutation" | "action";
|
|
262
|
-
file
|
|
429
|
+
file?: string;
|
|
430
|
+
modulePath?: string;
|
|
431
|
+
namespace?: string;
|
|
432
|
+
metadataAvailable?: boolean;
|
|
433
|
+
owner?: "root" | "component";
|
|
434
|
+
componentPath?: string;
|
|
435
|
+
componentName?: string;
|
|
436
|
+
visibility?: "public" | "internal";
|
|
437
|
+
localName?: string;
|
|
263
438
|
/** Argument validator schema (JSON Schema-like), if available */
|
|
264
439
|
args?: Record<string, unknown>;
|
|
265
440
|
/** Return validator schema, if available */
|
|
@@ -267,6 +442,10 @@ interface FunctionDefinition {
|
|
|
267
442
|
}
|
|
268
443
|
interface TableSchema {
|
|
269
444
|
name: string;
|
|
445
|
+
displayName?: string;
|
|
446
|
+
owner?: "root" | "component";
|
|
447
|
+
componentPath?: string;
|
|
448
|
+
componentName?: string;
|
|
270
449
|
fields: TableField[];
|
|
271
450
|
indexes: TableIndex[];
|
|
272
451
|
documentCount: number;
|
|
@@ -275,6 +454,7 @@ interface TableField {
|
|
|
275
454
|
name: string;
|
|
276
455
|
type: string;
|
|
277
456
|
optional: boolean;
|
|
457
|
+
referenceTable?: string;
|
|
278
458
|
}
|
|
279
459
|
interface TableIndex {
|
|
280
460
|
name: string;
|
|
@@ -284,6 +464,9 @@ interface TableIndex {
|
|
|
284
464
|
interface SchedulerJob {
|
|
285
465
|
id: string;
|
|
286
466
|
functionName: string;
|
|
467
|
+
owner?: "root" | "component";
|
|
468
|
+
componentPath?: string;
|
|
469
|
+
componentName?: string;
|
|
287
470
|
args: Record<string, unknown>;
|
|
288
471
|
scheduledAt: number;
|
|
289
472
|
runAt: number;
|
|
@@ -333,5 +516,5 @@ type SchedulerMisfirePolicy = {
|
|
|
333
516
|
windowMs: number;
|
|
334
517
|
};
|
|
335
518
|
//#endregion
|
|
336
|
-
export { DataFilter, FunctionDefinition, SchedulerJob, SchedulerMisfirePolicy, SchedulerRecurringDailySchedule, SchedulerRecurringIntervalSchedule, SchedulerRecurringSchedule, SchedulerRecurringWeeklySchedule, SyncoreActiveQueryInfo, SyncoreDevtoolsClientMessage, SyncoreDevtoolsCommand, SyncoreDevtoolsCommandPayload, SyncoreDevtoolsCommandResultPayload, SyncoreDevtoolsEvent, SyncoreDevtoolsEventOrigin, SyncoreDevtoolsMessage, SyncoreDevtoolsSubscribe, SyncoreDevtoolsSubscriptionPayload, SyncoreDevtoolsSubscriptionResultPayload, SyncoreDevtoolsUnsubscribe, SyncoreRuntimeSummary, TableField, TableIndex, TableSchema, createBasePublicId, createPublicId, createPublicRuntimeId, createPublicTargetId };
|
|
519
|
+
export { DataFilter, DevtoolsPreview, DocumentChangePreview, ExecutionTrace, FunctionDefinition, InvalidationCause, SYNCORE_DEVTOOLS_MAX_SUPPORTED_PROTOCOL_VERSION, SYNCORE_DEVTOOLS_MIN_SUPPORTED_PROTOCOL_VERSION, SYNCORE_DEVTOOLS_PROTOCOL_VERSION, SchedulerJob, SchedulerMisfirePolicy, SchedulerRecurringDailySchedule, SchedulerRecurringIntervalSchedule, SchedulerRecurringSchedule, SchedulerRecurringWeeklySchedule, SyncoreActiveQueryInfo, SyncoreDevtoolsCapabilities, SyncoreDevtoolsClientMessage, SyncoreDevtoolsCommand, SyncoreDevtoolsCommandPayload, SyncoreDevtoolsCommandResultPayload, SyncoreDevtoolsEvent, SyncoreDevtoolsEventOrigin, SyncoreDevtoolsExternalChangeEvent, SyncoreDevtoolsMessage, SyncoreDevtoolsSubscribe, SyncoreDevtoolsSubscriptionPayload, SyncoreDevtoolsSubscriptionResultPayload, SyncoreDevtoolsUnsubscribe, SyncoreRuntimeSummary, TableField, TableIndex, TableSchema, VersionHandshake, createBasePublicId, createPublicId, createPublicRuntimeId, createPublicTargetId, isCompatibleVersionHandshake };
|
|
337
520
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";KAAY,0BAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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"}
|
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
//#region src/index.ts
|
|
2
|
+
const SYNCORE_DEVTOOLS_PROTOCOL_VERSION = 1;
|
|
3
|
+
const SYNCORE_DEVTOOLS_MIN_SUPPORTED_PROTOCOL_VERSION = 1;
|
|
4
|
+
const SYNCORE_DEVTOOLS_MAX_SUPPORTED_PROTOCOL_VERSION = 1;
|
|
5
|
+
function isCompatibleVersionHandshake(handshake) {
|
|
6
|
+
return handshake.maxSupportedProtocolVersion >= 1 && handshake.minSupportedProtocolVersion <= 1 && handshake.protocolVersion >= handshake.minSupportedProtocolVersion && handshake.protocolVersion <= handshake.maxSupportedProtocolVersion;
|
|
7
|
+
}
|
|
2
8
|
function createBasePublicId(input) {
|
|
3
9
|
return stablePublicId(input, 0);
|
|
4
10
|
}
|
|
5
11
|
function createPublicId(key, keys) {
|
|
12
|
+
return createPublicIdWithFormatter(key, keys, stablePublicId);
|
|
13
|
+
}
|
|
14
|
+
function createPublicRuntimeId(runtimeId, runtimeIds) {
|
|
15
|
+
return runtimeIds ? createPublicIdWithFormatter(runtimeId, runtimeIds, stableRuntimePublicId) : stableRuntimePublicId(runtimeId, 0);
|
|
16
|
+
}
|
|
17
|
+
function createPublicTargetId(targetKey, targetKeys) {
|
|
18
|
+
return createPublicId(targetKey, targetKeys);
|
|
19
|
+
}
|
|
20
|
+
function createPublicIdWithFormatter(key, keys, formatPublicId) {
|
|
6
21
|
const used = /* @__PURE__ */ new Set();
|
|
7
22
|
for (const existingKey of [...keys].sort()) {
|
|
8
23
|
let attempt = 0;
|
|
9
24
|
while (true) {
|
|
10
|
-
const candidate =
|
|
25
|
+
const candidate = formatPublicId(existingKey, attempt);
|
|
11
26
|
if (existingKey === key && !used.has(candidate)) return candidate;
|
|
12
27
|
if (!used.has(candidate)) {
|
|
13
28
|
used.add(candidate);
|
|
@@ -16,24 +31,25 @@ function createPublicId(key, keys) {
|
|
|
16
31
|
attempt += 1;
|
|
17
32
|
}
|
|
18
33
|
}
|
|
19
|
-
return
|
|
34
|
+
return formatPublicId(key, 0);
|
|
20
35
|
}
|
|
21
|
-
function
|
|
22
|
-
return
|
|
36
|
+
function stablePublicId(input, salt) {
|
|
37
|
+
return (stableHash(input, salt) % 1e5).toString().padStart(5, "0");
|
|
23
38
|
}
|
|
24
|
-
function
|
|
25
|
-
|
|
39
|
+
function stableRuntimePublicId(input, salt) {
|
|
40
|
+
const value = stableHash(input, salt);
|
|
41
|
+
return `${String.fromCharCode(65 + value % 26)}${(Math.floor(value / 26) % 1e3).toString().padStart(3, "0")}`;
|
|
26
42
|
}
|
|
27
|
-
function
|
|
43
|
+
function stableHash(input, salt) {
|
|
28
44
|
const hashInput = salt === 0 ? input : `${input}#${salt}`;
|
|
29
45
|
let hash = 2166136261;
|
|
30
46
|
for (let index = 0; index < hashInput.length; index += 1) {
|
|
31
47
|
hash ^= hashInput.charCodeAt(index);
|
|
32
48
|
hash = Math.imul(hash, 16777619);
|
|
33
49
|
}
|
|
34
|
-
return
|
|
50
|
+
return hash >>> 0;
|
|
35
51
|
}
|
|
36
52
|
//#endregion
|
|
37
|
-
export { createBasePublicId, createPublicId, createPublicRuntimeId, createPublicTargetId };
|
|
53
|
+
export { SYNCORE_DEVTOOLS_MAX_SUPPORTED_PROTOCOL_VERSION, SYNCORE_DEVTOOLS_MIN_SUPPORTED_PROTOCOL_VERSION, SYNCORE_DEVTOOLS_PROTOCOL_VERSION, createBasePublicId, createPublicId, createPublicRuntimeId, createPublicTargetId, isCompatibleVersionHandshake };
|
|
38
54
|
|
|
39
55
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export type SyncoreDevtoolsEventOrigin = \"runtime\" | \"dashboard\";\n\ntype SyncoreDevtoolsEventBase = {\n runtimeId: string;\n timestamp: number;\n origin?: SyncoreDevtoolsEventOrigin;\n};\n\nexport type SyncoreDevtoolsEvent =\n | (SyncoreDevtoolsEventBase & {\n type: \"runtime.connected\";\n platform: string;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"runtime.disconnected\";\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"query.executed\";\n queryId: string;\n functionName: string;\n dependencies: string[];\n durationMs: number;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"query.invalidated\";\n queryId: string;\n reason: string;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"mutation.committed\";\n mutationId: string;\n functionName: string;\n changedTables: string[];\n durationMs: number;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"action.completed\";\n actionId: string;\n functionName: string;\n durationMs: number;\n error?: string;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"scheduler.tick\";\n executedJobIds: string[];\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"storage.updated\";\n storageId: string;\n operation: \"put\" | \"delete\";\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"log\";\n level: \"info\" | \"warn\" | \"error\";\n message: string;\n });\n\nexport interface SyncoreActiveQueryInfo {\n id: string;\n functionName: string;\n dependencyKeys: string[];\n lastRunAt: number;\n}\n\nexport interface SyncoreRuntimeSummary {\n runtimeId: string;\n platform: string;\n appName?: string;\n origin?: string;\n sessionLabel?: string;\n targetKind?: \"client\" | \"project\";\n storageProtocol?: string;\n databaseLabel?: string;\n storageIdentity?: string;\n connectedAt: number;\n activeQueryCount: number;\n recentEventCount: number;\n}\n\nexport function createBasePublicId(input: string): string {\n return stablePublicId(input, 0);\n}\n\nexport function createPublicId(\n key: string,\n keys: Iterable<string>\n): string {\n const used = new Set<string>();\n for (const existingKey of [...keys].sort()) {\n let attempt = 0;\n while (true) {\n const candidate = stablePublicId(existingKey, attempt);\n if (existingKey === key && !used.has(candidate)) {\n return candidate;\n }\n if (!used.has(candidate)) {\n used.add(candidate);\n break;\n }\n attempt += 1;\n }\n }\n return createBasePublicId(key);\n}\n\nexport function createPublicRuntimeId(\n runtimeId: string,\n runtimeIds?: Iterable<string>\n): string {\n return runtimeIds ? createPublicId(runtimeId, runtimeIds) : createBasePublicId(runtimeId);\n}\n\nexport function createPublicTargetId(\n targetKey: string,\n targetKeys: Iterable<string>\n): string {\n return createPublicId(targetKey, targetKeys);\n}\n\nfunction stablePublicId(input: string, salt: number): string {\n const hashInput = salt === 0 ? input : `${input}#${salt}`;\n let hash = 2166136261;\n for (let index = 0; index < hashInput.length; index += 1) {\n hash ^= hashInput.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n const value = (hash >>> 0) % 100000;\n return value.toString().padStart(5, \"0\");\n}\n\n/* ------------------------------------------------------------------ */\n/* Runtime → Dashboard messages */\n/* ------------------------------------------------------------------ */\n\nexport type SyncoreDevtoolsMessage =\n | {\n type: \"hello\";\n runtimeId: string;\n platform: string;\n appName?: string;\n origin?: string;\n sessionLabel?: string;\n targetKind?: \"client\" | \"project\";\n storageProtocol?: string;\n databaseLabel?: string;\n storageIdentity?: string;\n }\n | { type: \"event\"; event: SyncoreDevtoolsEvent }\n | {\n type: \"event.batch\";\n runtimeId: string;\n events: SyncoreDevtoolsEvent[];\n }\n | { type: \"ping\" }\n | { type: \"pong\" }\n | {\n type: \"command.result\";\n commandId: string;\n runtimeId: string;\n payload: SyncoreDevtoolsCommandResultPayload;\n }\n | {\n type: \"subscription.data\";\n subscriptionId: string;\n runtimeId: string;\n payload: SyncoreDevtoolsSubscriptionResultPayload;\n }\n | {\n type: \"subscription.error\";\n subscriptionId: string;\n runtimeId: string;\n error: string;\n };\n\n/* ------------------------------------------------------------------ */\n/* Dashboard → Runtime requests */\n/* ------------------------------------------------------------------ */\n\nexport interface SyncoreDevtoolsCommand {\n type: \"command\";\n commandId: string;\n targetRuntimeId: string;\n payload: SyncoreDevtoolsCommandPayload;\n}\n\nexport interface SyncoreDevtoolsSubscribe {\n type: \"subscribe\";\n subscriptionId: string;\n targetRuntimeId: string;\n payload: SyncoreDevtoolsSubscriptionPayload;\n}\n\nexport interface SyncoreDevtoolsUnsubscribe {\n type: \"unsubscribe\";\n subscriptionId: string;\n targetRuntimeId: string;\n}\n\nexport type SyncoreDevtoolsClientMessage =\n | { type: \"ping\" }\n | SyncoreDevtoolsCommand\n | SyncoreDevtoolsSubscribe\n | SyncoreDevtoolsUnsubscribe;\n\nexport type SyncoreDevtoolsCommandPayload =\n /* Functions */\n | {\n kind: \"fn.run\";\n functionName: string;\n functionType: \"query\" | \"mutation\" | \"action\";\n args: Record<string, unknown>;\n }\n | { kind: \"data.insert\"; table: string; document: Record<string, unknown> }\n | {\n kind: \"data.patch\";\n table: string;\n id: string;\n fields: Record<string, unknown>;\n }\n | { kind: \"data.delete\"; table: string; id: string }\n /* SQL */\n | { kind: \"sql.read\"; query: string }\n | { kind: \"sql.write\"; query: string }\n /* Scheduler */\n | { kind: \"scheduler.cancel\"; jobId: string }\n | {\n kind: \"scheduler.update\";\n jobId: string;\n schedule: SchedulerRecurringSchedule;\n args: Record<string, unknown>;\n misfirePolicy: SchedulerMisfirePolicy;\n runAt?: number;\n };\n\nexport type SyncoreDevtoolsSubscriptionPayload =\n | { kind: \"runtime.summary\" }\n | { kind: \"runtime.activeQueries\" }\n | { kind: \"schema.tables\" }\n | {\n kind: \"fn.watch\";\n functionName: string;\n functionType: \"query\";\n args: Record<string, unknown>;\n }\n | {\n kind: \"data.table\";\n table: string;\n filters?: DataFilter[];\n limit?: number;\n cursor?: string;\n }\n | { kind: \"scheduler.jobs\" }\n | { kind: \"functions.catalog\" }\n | { kind: \"sql.watch\"; query: string };\n\nexport interface DataFilter {\n field: string;\n operator:\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"contains\"\n | \"startsWith\";\n value: unknown;\n}\n\n/* ------------------------------------------------------------------ */\n/* Response payloads */\n/* ------------------------------------------------------------------ */\n\nexport type SyncoreDevtoolsCommandResultPayload =\n | {\n kind: \"fn.run.result\";\n result?: unknown;\n error?: string;\n durationMs: number;\n }\n | {\n kind: \"data.mutate.result\";\n success: boolean;\n id?: string;\n error?: string;\n }\n | {\n kind: \"sql.read.result\";\n columns: string[];\n rows: unknown[][];\n error?: string;\n }\n | {\n kind: \"sql.write.result\";\n rowsAffected: number;\n error?: string;\n invalidationScopes: string[];\n }\n | {\n kind: \"scheduler.cancel.result\";\n success: boolean;\n cancelled: boolean;\n error?: string;\n }\n | {\n kind: \"scheduler.update.result\";\n success: boolean;\n updated: boolean;\n error?: string;\n job?: SchedulerJob;\n }\n | { kind: \"error\"; message: string };\n\nexport type SyncoreDevtoolsSubscriptionResultPayload =\n | { kind: \"runtime.summary.result\"; summary: SyncoreRuntimeSummary }\n | {\n kind: \"runtime.activeQueries.result\";\n activeQueries: SyncoreActiveQueryInfo[];\n }\n | {\n kind: \"fn.watch.result\";\n result?: unknown;\n error?: string;\n }\n | { kind: \"schema.tables.result\"; tables: TableSchema[] }\n | {\n kind: \"data.table.result\";\n rows: Record<string, unknown>[];\n totalCount: number;\n cursor?: string;\n }\n | { kind: \"scheduler.jobs.result\"; jobs: SchedulerJob[] }\n | { kind: \"functions.catalog.result\"; functions: FunctionDefinition[] }\n | {\n kind: \"sql.watch.result\";\n columns: string[];\n rows: unknown[][];\n observedTables: string[];\n };\n\n/* ------------------------------------------------------------------ */\n/* Shared data shapes */\n/* ------------------------------------------------------------------ */\n\nexport interface FunctionDefinition {\n name: string;\n type: \"query\" | \"mutation\" | \"action\";\n file: string;\n /** Argument validator schema (JSON Schema-like), if available */\n args?: Record<string, unknown>;\n /** Return validator schema, if available */\n returns?: Record<string, unknown>;\n}\n\nexport interface TableSchema {\n name: string;\n fields: TableField[];\n indexes: TableIndex[];\n documentCount: number;\n}\n\nexport interface TableField {\n name: string;\n type: string;\n optional: boolean;\n}\n\nexport interface TableIndex {\n name: string;\n fields: string[];\n unique: boolean;\n}\n\nexport interface SchedulerJob {\n id: string;\n functionName: string;\n args: Record<string, unknown>;\n scheduledAt: number;\n runAt: number;\n status: \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n completedAt?: number;\n result?: unknown;\n error?: string;\n durationMs?: number;\n recurringName?: string;\n schedule?: SchedulerRecurringSchedule;\n scheduleLabel?: string;\n misfirePolicy?: SchedulerMisfirePolicy;\n timezone?: string;\n lastRunAt?: number;\n updatedAt?: number;\n /** Compatibility label for older UI code. */\n cronSchedule?: string;\n}\n\nexport interface SchedulerRecurringIntervalSchedule {\n type: \"interval\";\n seconds?: number;\n minutes?: number;\n hours?: number;\n}\n\nexport interface SchedulerRecurringDailySchedule {\n type: \"daily\";\n hour: number;\n minute: number;\n timezone?: string;\n}\n\nexport interface SchedulerRecurringWeeklySchedule {\n type: \"weekly\";\n dayOfWeek:\n | \"sunday\"\n | \"monday\"\n | \"tuesday\"\n | \"wednesday\"\n | \"thursday\"\n | \"friday\"\n | \"saturday\";\n hour: number;\n minute: number;\n timezone?: string;\n}\n\nexport type SchedulerRecurringSchedule =\n | SchedulerRecurringIntervalSchedule\n | SchedulerRecurringDailySchedule\n | SchedulerRecurringWeeklySchedule;\n\nexport type SchedulerMisfirePolicy =\n | { type: \"catch_up\" }\n | { type: \"skip\" }\n | { type: \"run_once_if_missed\" }\n | { type: \"windowed\"; windowMs: number };\n"],"mappings":";AA+EA,SAAgB,mBAAmB,OAAuB;AACxD,QAAO,eAAe,OAAO,EAAE;;AAGjC,SAAgB,eACd,KACA,MACQ;CACR,MAAM,uBAAO,IAAI,KAAa;AAC9B,MAAK,MAAM,eAAe,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;EAC1C,IAAI,UAAU;AACd,SAAO,MAAM;GACX,MAAM,YAAY,eAAe,aAAa,QAAQ;AACtD,OAAI,gBAAgB,OAAO,CAAC,KAAK,IAAI,UAAU,CAC7C,QAAO;AAET,OAAI,CAAC,KAAK,IAAI,UAAU,EAAE;AACxB,SAAK,IAAI,UAAU;AACnB;;AAEF,cAAW;;;AAGf,QAAO,mBAAmB,IAAI;;AAGhC,SAAgB,sBACd,WACA,YACQ;AACR,QAAO,aAAa,eAAe,WAAW,WAAW,GAAG,mBAAmB,UAAU;;AAG3F,SAAgB,qBACd,WACA,YACQ;AACR,QAAO,eAAe,WAAW,WAAW;;AAG9C,SAAS,eAAe,OAAe,MAAsB;CAC3D,MAAM,YAAY,SAAS,IAAI,QAAQ,GAAG,MAAM,GAAG;CACnD,IAAI,OAAO;AACX,MAAK,IAAI,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS,GAAG;AACxD,UAAQ,UAAU,WAAW,MAAM;AACnC,SAAO,KAAK,KAAK,MAAM,SAAS;;AAGlC,UADe,SAAS,KAAK,KAChB,UAAU,CAAC,SAAS,GAAG,IAAI"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export type SyncoreDevtoolsEventOrigin = \"runtime\" | \"dashboard\";\n\nexport const SYNCORE_DEVTOOLS_PROTOCOL_VERSION = 1;\nexport const SYNCORE_DEVTOOLS_MIN_SUPPORTED_PROTOCOL_VERSION = 1;\nexport const SYNCORE_DEVTOOLS_MAX_SUPPORTED_PROTOCOL_VERSION = 1;\n\nexport interface VersionHandshake {\n protocolVersion: number;\n minSupportedProtocolVersion: number;\n maxSupportedProtocolVersion: number;\n runtimeVersion?: string;\n}\n\nexport function isCompatibleVersionHandshake(\n handshake: Pick<\n VersionHandshake,\n \"protocolVersion\" | \"minSupportedProtocolVersion\" | \"maxSupportedProtocolVersion\"\n >\n): boolean {\n return (\n handshake.maxSupportedProtocolVersion >=\n SYNCORE_DEVTOOLS_MIN_SUPPORTED_PROTOCOL_VERSION &&\n handshake.minSupportedProtocolVersion <=\n SYNCORE_DEVTOOLS_MAX_SUPPORTED_PROTOCOL_VERSION &&\n handshake.protocolVersion >= handshake.minSupportedProtocolVersion &&\n handshake.protocolVersion <= handshake.maxSupportedProtocolVersion\n );\n}\n\ntype SyncoreDevtoolsEventBase = {\n runtimeId: string;\n timestamp: number;\n sequence?: number;\n origin?: SyncoreDevtoolsEventOrigin;\n};\n\nexport type DevtoolsPreview =\n | {\n kind: \"value\";\n value: unknown;\n truncated?: boolean;\n note?: string;\n }\n | {\n kind: \"error\";\n message: string;\n truncated?: boolean;\n };\n\nexport interface DocumentChangePreview {\n table: string;\n id: string;\n operation: \"insert\" | \"patch\" | \"replace\" | \"delete\";\n fields?: string[];\n beforePreview?: DevtoolsPreview;\n afterPreview?: DevtoolsPreview;\n}\n\nexport interface InvalidationCause {\n executionId?: string;\n reason: string;\n changedScopes: string[];\n matchedScopes: string[];\n}\n\nexport interface ExecutionTrace {\n executionId: string;\n parentExecutionId?: string;\n kind: \"query\" | \"mutation\" | \"action\" | \"scheduler\" | \"dashboard\";\n functionName?: string;\n argsPreview?: DevtoolsPreview;\n resultPreview?: DevtoolsPreview;\n error?: string;\n readScopes?: string[];\n writeScopes?: string[];\n changedScopes?: string[];\n changedDocumentsPreview?: DocumentChangePreview[];\n invalidatedQueryIds?: string[];\n schedulerJobId?: string;\n}\n\nexport type SyncoreDevtoolsEvent =\n | (SyncoreDevtoolsEventBase & {\n type: \"runtime.connected\";\n platform: string;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"runtime.disconnected\";\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"query.executed\";\n queryId: string;\n functionName: string;\n componentPath?: string;\n componentName?: string;\n dependencies: string[];\n durationMs: number;\n executionId?: string;\n parentExecutionId?: string;\n argsPreview?: DevtoolsPreview;\n resultPreview?: DevtoolsPreview;\n readScopes?: string[];\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"query.invalidated\";\n queryId: string;\n componentPath?: string;\n componentName?: string;\n reason: string;\n causedByExecutionId?: string;\n changedScopes?: string[];\n matchedScopes?: string[];\n rerunExecutionId?: string;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"mutation.committed\";\n mutationId: string;\n functionName: string;\n componentPath?: string;\n componentName?: string;\n changedTables: string[];\n durationMs: number;\n executionId?: string;\n parentExecutionId?: string;\n argsPreview?: DevtoolsPreview;\n resultPreview?: DevtoolsPreview;\n writeScopes?: string[];\n changedScopes?: string[];\n changedDocumentsPreview?: DocumentChangePreview[];\n invalidatedQueryIds?: string[];\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"action.completed\";\n actionId: string;\n functionName: string;\n componentPath?: string;\n componentName?: string;\n durationMs: number;\n error?: string;\n executionId?: string;\n parentExecutionId?: string;\n argsPreview?: DevtoolsPreview;\n resultPreview?: DevtoolsPreview;\n writeScopes?: string[];\n changedScopes?: string[];\n changedDocumentsPreview?: DocumentChangePreview[];\n invalidatedQueryIds?: string[];\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"scheduler.tick\";\n executedJobIds: string[];\n executionId?: string;\n jobExecutions?: Array<{\n jobId: string;\n executionId?: string;\n functionName: string;\n functionType: \"mutation\" | \"action\";\n argsPreview?: DevtoolsPreview;\n resultPreview?: DevtoolsPreview;\n error?: string;\n durationMs?: number;\n }>;\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"storage.updated\";\n storageId: string;\n componentPath?: string;\n operation: \"put\" | \"delete\";\n })\n | (SyncoreDevtoolsEventBase & {\n type: \"log\";\n level: \"info\" | \"warn\" | \"error\";\n message: string;\n });\n\nexport interface SyncoreActiveQueryInfo {\n id: string;\n functionName: string;\n args?: Record<string, unknown>;\n consumers?: number;\n owner?: \"root\" | \"component\";\n componentPath?: string;\n componentName?: string;\n dependencyKeys: string[];\n lastRunAt: number;\n}\n\nexport interface SyncoreRuntimeSummary {\n runtimeId: string;\n platform: string;\n appName?: string;\n origin?: string;\n sessionLabel?: string;\n targetKind?: \"client\" | \"project\";\n runtimeRole?: \"app\" | \"project-target\";\n storageProtocol?: string;\n databaseLabel?: string;\n dataSourceAlias?: string;\n storageIdentity?: string;\n capabilities?: SyncoreDevtoolsCapabilities;\n connectedAt: number;\n activeQueryCount: number;\n recentEventCount: number;\n}\n\nexport interface SyncoreDevtoolsCapabilities {\n sql?: {\n read: boolean;\n write: boolean;\n live: boolean;\n reason?: string;\n };\n data?: {\n browse: boolean;\n mutate: boolean;\n importExport: boolean;\n };\n scheduler?: {\n read: boolean;\n edit: boolean;\n };\n}\n\nexport interface SyncoreDevtoolsExternalChangeEvent {\n sourceId: string;\n scope: \"database\" | \"storage\" | \"all\";\n reason: \"commit\" | \"storage-put\" | \"storage-delete\" | \"reconcile\";\n timestamp: number;\n revision?: string;\n changedScopes?: string[];\n changedTables?: string[];\n storageIds?: string[];\n}\n\nexport function createBasePublicId(input: string): string {\n return stablePublicId(input, 0);\n}\n\nexport function createPublicId(\n key: string,\n keys: Iterable<string>\n): string {\n return createPublicIdWithFormatter(key, keys, stablePublicId);\n}\n\nexport function createPublicRuntimeId(\n runtimeId: string,\n runtimeIds?: Iterable<string>\n): string {\n return runtimeIds\n ? createPublicIdWithFormatter(runtimeId, runtimeIds, stableRuntimePublicId)\n : stableRuntimePublicId(runtimeId, 0);\n}\n\nexport function createPublicTargetId(\n targetKey: string,\n targetKeys: Iterable<string>\n): string {\n return createPublicId(targetKey, targetKeys);\n}\n\nfunction createPublicIdWithFormatter(\n key: string,\n keys: Iterable<string>,\n formatPublicId: (input: string, salt: number) => string\n): string {\n const used = new Set<string>();\n for (const existingKey of [...keys].sort()) {\n let attempt = 0;\n while (true) {\n const candidate = formatPublicId(existingKey, attempt);\n if (existingKey === key && !used.has(candidate)) {\n return candidate;\n }\n if (!used.has(candidate)) {\n used.add(candidate);\n break;\n }\n attempt += 1;\n }\n }\n return formatPublicId(key, 0);\n}\n\nfunction stablePublicId(input: string, salt: number): string {\n const value = stableHash(input, salt) % 100000;\n return value.toString().padStart(5, \"0\");\n}\n\nfunction stableRuntimePublicId(input: string, salt: number): string {\n const value = stableHash(input, salt);\n const letter = String.fromCharCode(65 + (value % 26));\n const digits = Math.floor(value / 26) % 1000;\n return `${letter}${digits.toString().padStart(3, \"0\")}`;\n}\n\nfunction stableHash(input: string, salt: number): number {\n const hashInput = salt === 0 ? input : `${input}#${salt}`;\n let hash = 2166136261;\n for (let index = 0; index < hashInput.length; index += 1) {\n hash ^= hashInput.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n}\n\n/* ------------------------------------------------------------------ */\n/* Runtime → Dashboard messages */\n/* ------------------------------------------------------------------ */\n\nexport type SyncoreDevtoolsMessage =\n | {\n type: \"hello\";\n protocolVersion?: number;\n minSupportedProtocolVersion?: number;\n maxSupportedProtocolVersion?: number;\n runtimeVersion?: string;\n runtimeId: string;\n platform: string;\n appName?: string;\n origin?: string;\n sessionLabel?: string;\n targetKind?: \"client\" | \"project\";\n runtimeRole?: \"app\" | \"project-target\";\n storageProtocol?: string;\n databaseLabel?: string;\n dataSourceAlias?: string;\n storageIdentity?: string;\n capabilities?: SyncoreDevtoolsCapabilities;\n }\n | { type: \"event\"; event: SyncoreDevtoolsEvent }\n | {\n type: \"event.batch\";\n runtimeId: string;\n events: SyncoreDevtoolsEvent[];\n }\n | { type: \"ping\" }\n | { type: \"pong\" }\n | {\n type: \"command.result\";\n commandId: string;\n runtimeId: string;\n payload: SyncoreDevtoolsCommandResultPayload;\n }\n | {\n type: \"subscription.data\";\n subscriptionId: string;\n runtimeId: string;\n payload: SyncoreDevtoolsSubscriptionResultPayload;\n }\n | {\n type: \"subscription.error\";\n subscriptionId: string;\n runtimeId: string;\n error: string;\n }\n | {\n type: \"external.change\";\n runtimeId: string;\n storageIdentity: string;\n event: SyncoreDevtoolsExternalChangeEvent;\n };\n\n/* ------------------------------------------------------------------ */\n/* Dashboard → Runtime requests */\n/* ------------------------------------------------------------------ */\n\nexport interface SyncoreDevtoolsCommand {\n type: \"command\";\n commandId: string;\n targetRuntimeId: string;\n payload: SyncoreDevtoolsCommandPayload;\n}\n\nexport interface SyncoreDevtoolsSubscribe {\n type: \"subscribe\";\n subscriptionId: string;\n targetRuntimeId: string;\n payload: SyncoreDevtoolsSubscriptionPayload;\n}\n\nexport interface SyncoreDevtoolsUnsubscribe {\n type: \"unsubscribe\";\n subscriptionId: string;\n targetRuntimeId: string;\n}\n\nexport type SyncoreDevtoolsClientMessage =\n | { type: \"ping\" }\n | SyncoreDevtoolsCommand\n | SyncoreDevtoolsSubscribe\n | SyncoreDevtoolsUnsubscribe;\n\nexport type SyncoreDevtoolsCommandPayload =\n /* Functions */\n | {\n kind: \"fn.run\";\n functionName: string;\n functionType: \"query\" | \"mutation\" | \"action\";\n args: Record<string, unknown>;\n }\n | { kind: \"data.insert\"; table: string; document: Record<string, unknown> }\n | {\n kind: \"data.patch\";\n table: string;\n id: string;\n fields: Record<string, unknown>;\n }\n | { kind: \"data.delete\"; table: string; id: string }\n | { kind: \"data.export\"; tables?: string[] }\n | {\n kind: \"data.referenceOptions\";\n table: string;\n search?: string;\n limit?: number;\n offset?: number;\n }\n /* SQL */\n | { kind: \"sql.read\"; query: string }\n | { kind: \"sql.write\"; query: string }\n /* Scheduler */\n | { kind: \"scheduler.cancel\"; jobId: string }\n | {\n kind: \"scheduler.update\";\n jobId: string;\n schedule?: SchedulerRecurringSchedule;\n args: Record<string, unknown>;\n misfirePolicy?: SchedulerMisfirePolicy;\n runAt?: number;\n };\n\nexport type SyncoreDevtoolsSubscriptionPayload =\n | { kind: \"runtime.summary\" }\n | { kind: \"runtime.activeQueries\" }\n | { kind: \"schema.tables\" }\n | {\n kind: \"fn.watch\";\n functionName: string;\n functionType: \"query\";\n args: Record<string, unknown>;\n }\n | {\n kind: \"data.table\";\n table: string;\n filters?: DataFilter[];\n limit?: number;\n cursor?: string;\n }\n | { kind: \"scheduler.jobs\" }\n | { kind: \"functions.catalog\" }\n | { kind: \"sql.watch\"; query: string };\n\nexport interface DataFilter {\n field: string;\n operator:\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"contains\"\n | \"startsWith\";\n value: unknown;\n}\n\n/* ------------------------------------------------------------------ */\n/* Response payloads */\n/* ------------------------------------------------------------------ */\n\nexport type SyncoreDevtoolsCommandResultPayload =\n | {\n kind: \"fn.run.result\";\n result?: unknown;\n error?: string;\n durationMs: number;\n }\n | {\n kind: \"data.mutate.result\";\n success: boolean;\n id?: string;\n error?: string;\n }\n | {\n kind: \"data.export.result\";\n tables: Array<{\n name: string;\n rows: Record<string, unknown>[];\n totalCount: number;\n }>;\n error?: string;\n }\n | {\n kind: \"data.referenceOptions.result\";\n table: string;\n rows: Record<string, unknown>[];\n totalCount: number;\n offset: number;\n hasMore: boolean;\n error?: string;\n }\n | {\n kind: \"sql.read.result\";\n columns: string[];\n rows: unknown[][];\n error?: string;\n }\n | {\n kind: \"sql.write.result\";\n rowsAffected: number;\n error?: string;\n invalidationScopes: string[];\n }\n | {\n kind: \"scheduler.cancel.result\";\n success: boolean;\n cancelled: boolean;\n error?: string;\n }\n | {\n kind: \"scheduler.update.result\";\n success: boolean;\n updated: boolean;\n error?: string;\n job?: SchedulerJob;\n }\n | { kind: \"error\"; message: string };\n\nexport type SyncoreDevtoolsSubscriptionResultPayload =\n | { kind: \"runtime.summary.result\"; summary: SyncoreRuntimeSummary }\n | {\n kind: \"runtime.activeQueries.result\";\n activeQueries: SyncoreActiveQueryInfo[];\n }\n | {\n kind: \"fn.watch.result\";\n result?: unknown;\n error?: string;\n }\n | { kind: \"schema.tables.result\"; tables: TableSchema[] }\n | {\n kind: \"data.table.result\";\n rows: Record<string, unknown>[];\n totalCount: number;\n cursor?: string;\n }\n | { kind: \"scheduler.jobs.result\"; jobs: SchedulerJob[] }\n | { kind: \"functions.catalog.result\"; functions: FunctionDefinition[] }\n | {\n kind: \"sql.watch.result\";\n columns: string[];\n rows: unknown[][];\n observedTables: string[];\n };\n\n/* ------------------------------------------------------------------ */\n/* Shared data shapes */\n/* ------------------------------------------------------------------ */\n\nexport interface FunctionDefinition {\n name: string;\n type: \"query\" | \"mutation\" | \"action\";\n file?: string;\n modulePath?: string;\n namespace?: string;\n metadataAvailable?: boolean;\n owner?: \"root\" | \"component\";\n componentPath?: string;\n componentName?: string;\n visibility?: \"public\" | \"internal\";\n localName?: string;\n /** Argument validator schema (JSON Schema-like), if available */\n args?: Record<string, unknown>;\n /** Return validator schema, if available */\n returns?: Record<string, unknown>;\n}\n\nexport interface TableSchema {\n name: string;\n displayName?: string;\n owner?: \"root\" | \"component\";\n componentPath?: string;\n componentName?: string;\n fields: TableField[];\n indexes: TableIndex[];\n documentCount: number;\n}\n\nexport interface TableField {\n name: string;\n type: string;\n optional: boolean;\n referenceTable?: string;\n}\n\nexport interface TableIndex {\n name: string;\n fields: string[];\n unique: boolean;\n}\n\nexport interface SchedulerJob {\n id: string;\n functionName: string;\n owner?: \"root\" | \"component\";\n componentPath?: string;\n componentName?: string;\n args: Record<string, unknown>;\n scheduledAt: number;\n runAt: number;\n status: \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n completedAt?: number;\n result?: unknown;\n error?: string;\n durationMs?: number;\n recurringName?: string;\n schedule?: SchedulerRecurringSchedule;\n scheduleLabel?: string;\n misfirePolicy?: SchedulerMisfirePolicy;\n timezone?: string;\n lastRunAt?: number;\n updatedAt?: number;\n /** Compatibility label for older UI code. */\n cronSchedule?: string;\n}\n\nexport interface SchedulerRecurringIntervalSchedule {\n type: \"interval\";\n seconds?: number;\n minutes?: number;\n hours?: number;\n}\n\nexport interface SchedulerRecurringDailySchedule {\n type: \"daily\";\n hour: number;\n minute: number;\n timezone?: string;\n}\n\nexport interface SchedulerRecurringWeeklySchedule {\n type: \"weekly\";\n dayOfWeek:\n | \"sunday\"\n | \"monday\"\n | \"tuesday\"\n | \"wednesday\"\n | \"thursday\"\n | \"friday\"\n | \"saturday\";\n hour: number;\n minute: number;\n timezone?: string;\n}\n\nexport type SchedulerRecurringSchedule =\n | SchedulerRecurringIntervalSchedule\n | SchedulerRecurringDailySchedule\n | SchedulerRecurringWeeklySchedule;\n\nexport type SchedulerMisfirePolicy =\n | { type: \"catch_up\" }\n | { type: \"skip\" }\n | { type: \"run_once_if_missed\" }\n | { type: \"windowed\"; windowMs: number };\n"],"mappings":";AAEA,MAAa,oCAAoC;AACjD,MAAa,kDAAkD;AAC/D,MAAa,kDAAkD;AAS/D,SAAgB,6BACd,WAIS;CACT,OACE,UAAU,+BAAA,KAEV,UAAU,+BAAA,KAEV,UAAU,mBAAmB,UAAU,+BACvC,UAAU,mBAAmB,UAAU;AAE3C;AA+MA,SAAgB,mBAAmB,OAAuB;CACxD,OAAO,eAAe,OAAO,CAAC;AAChC;AAEA,SAAgB,eACd,KACA,MACQ;CACR,OAAO,4BAA4B,KAAK,MAAM,cAAc;AAC9D;AAEA,SAAgB,sBACd,WACA,YACQ;CACR,OAAO,aACH,4BAA4B,WAAW,YAAY,qBAAqB,IACxE,sBAAsB,WAAW,CAAC;AACxC;AAEA,SAAgB,qBACd,WACA,YACQ;CACR,OAAO,eAAe,WAAW,UAAU;AAC7C;AAEA,SAAS,4BACP,KACA,MACA,gBACQ;CACR,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,eAAe,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG;EAC1C,IAAI,UAAU;EACd,OAAO,MAAM;GACX,MAAM,YAAY,eAAe,aAAa,OAAO;GACrD,IAAI,gBAAgB,OAAO,CAAC,KAAK,IAAI,SAAS,GAC5C,OAAO;GAET,IAAI,CAAC,KAAK,IAAI,SAAS,GAAG;IACxB,KAAK,IAAI,SAAS;IAClB;GACF;GACA,WAAW;EACb;CACF;CACA,OAAO,eAAe,KAAK,CAAC;AAC9B;AAEA,SAAS,eAAe,OAAe,MAAsB;CAE3D,QADc,WAAW,OAAO,IAAI,IAAI,KAC3B,SAAS,EAAE,SAAS,GAAG,GAAG;AACzC;AAEA,SAAS,sBAAsB,OAAe,MAAsB;CAClE,MAAM,QAAQ,WAAW,OAAO,IAAI;CAGpC,OAAO,GAFQ,OAAO,aAAa,KAAM,QAAQ,EAElC,KADA,KAAK,MAAM,QAAQ,EAAE,IAAI,KACd,SAAS,EAAE,SAAS,GAAG,GAAG;AACtD;AAEA,SAAS,WAAW,OAAe,MAAsB;CACvD,MAAM,YAAY,SAAS,IAAI,QAAQ,GAAG,MAAM,GAAG;CACnD,IAAI,OAAO;CACX,KAAK,IAAI,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS,GAAG;EACxD,QAAQ,UAAU,WAAW,KAAK;EAClC,OAAO,KAAK,KAAK,MAAM,QAAQ;CACjC;CACA,OAAO,SAAS;AAClB"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
//#region src/config.d.ts
|
|
2
2
|
/**
|
|
3
|
-
* Wrap a Next config with the settings Syncore needs for
|
|
3
|
+
* Wrap a Next config with the settings Syncore needs for worker assets.
|
|
4
4
|
*
|
|
5
|
-
* This enables async WebAssembly support and
|
|
6
|
-
*
|
|
7
|
-
* bundle the syncore worker as a separate entry point.
|
|
5
|
+
* This enables async WebAssembly support and configures webpack to bundle the
|
|
6
|
+
* syncore worker as a separate entry point.
|
|
8
7
|
*/
|
|
9
8
|
declare function withSyncoreNext<TConfig extends Record<string, unknown>>(config: TConfig): TConfig;
|
|
10
9
|
declare function getSyncoreWorkerUrl(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","names":[],"sources":["../src/config.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config.d.ts","names":[],"sources":["../src/config.ts"],"mappings":";;AAYA;;;;;iBAAgB,eAAA,iBAAgC,MAAA,kBAAA,CAC9C,MAAA,EAAQ,OAAA,GACP,OAAA;AAAA,iBAqGa,mBAAA,CAAA;;;;iBAOA,0BAAA,CACd,YAAA,YAAoC,GAAA"}
|
|
@@ -4,33 +4,56 @@ function joinAppWorkerPath(dir) {
|
|
|
4
4
|
return `${dir.replace(/[\\/]$/, "")}/app/syncore.worker`;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
* Wrap a Next config with the settings Syncore needs for
|
|
7
|
+
* Wrap a Next config with the settings Syncore needs for worker assets.
|
|
8
8
|
*
|
|
9
|
-
* This enables async WebAssembly support and
|
|
10
|
-
*
|
|
11
|
-
* bundle the syncore worker as a separate entry point.
|
|
9
|
+
* This enables async WebAssembly support and configures webpack to bundle the
|
|
10
|
+
* syncore worker as a separate entry point.
|
|
12
11
|
*/
|
|
13
12
|
function withSyncoreNext(config) {
|
|
14
13
|
const baseConfig = config;
|
|
15
14
|
const isStaticExport = baseConfig.output === "export";
|
|
16
|
-
const headers = baseConfig.headers ?? [];
|
|
17
15
|
const userWebpack = typeof baseConfig.webpack === "function" ? baseConfig.webpack : void 0;
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
const userTranspilePackages = Array.isArray(baseConfig.transpilePackages) ? baseConfig.transpilePackages : [];
|
|
17
|
+
const internalScope = `${String.fromCharCode(64)}syncore/`;
|
|
18
|
+
const syncoreTranspilePackages = [
|
|
19
|
+
"syncorejs",
|
|
20
|
+
`${internalScope}core`,
|
|
21
|
+
`${internalScope}schema`,
|
|
22
|
+
`${internalScope}react`,
|
|
23
|
+
`${internalScope}platform-web`,
|
|
24
|
+
`${internalScope}next`
|
|
25
|
+
];
|
|
26
|
+
return {
|
|
27
27
|
...config,
|
|
28
|
+
transpilePackages: Array.from(new Set([...userTranspilePackages, ...syncoreTranspilePackages])),
|
|
28
29
|
webpack(currentConfig, context) {
|
|
29
30
|
const nextConfig = { ...currentConfig };
|
|
30
31
|
nextConfig.experiments = {
|
|
31
32
|
...nextConfig.experiments ?? {},
|
|
32
33
|
asyncWebAssembly: true
|
|
33
34
|
};
|
|
35
|
+
const resolve = nextConfig.resolve ?? {};
|
|
36
|
+
nextConfig.resolve = {
|
|
37
|
+
...resolve,
|
|
38
|
+
extensionAlias: {
|
|
39
|
+
...resolve.extensionAlias ?? {},
|
|
40
|
+
".js": [
|
|
41
|
+
".ts",
|
|
42
|
+
".tsx",
|
|
43
|
+
".js"
|
|
44
|
+
],
|
|
45
|
+
".mjs": [".mts", ".mjs"]
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const moduleConfig = nextConfig.module ?? {};
|
|
49
|
+
const rules = Array.isArray(moduleConfig.rules) ? moduleConfig.rules : [];
|
|
50
|
+
nextConfig.module = {
|
|
51
|
+
...moduleConfig,
|
|
52
|
+
rules: [{
|
|
53
|
+
test: /\.wasm$/,
|
|
54
|
+
type: "asset/resource"
|
|
55
|
+
}, ...rules]
|
|
56
|
+
};
|
|
34
57
|
const ctx = context;
|
|
35
58
|
if (isStaticExport && ctx && !ctx.dev && !ctx.isServer && ctx.nextRuntime !== "edge") {
|
|
36
59
|
const entry = nextConfig.entry ?? (async () => ({}));
|
|
@@ -49,11 +72,6 @@ function withSyncoreNext(config) {
|
|
|
49
72
|
return nextConfig;
|
|
50
73
|
}
|
|
51
74
|
};
|
|
52
|
-
if (!isStaticExport || userHeaders) nextConfig.headers = async () => {
|
|
53
|
-
const resolvedHeaders = userHeaders ? await userHeaders() : headers;
|
|
54
|
-
return isStaticExport ? resolvedHeaders : [...resolvedHeaders, syncoreHeaders];
|
|
55
|
-
};
|
|
56
|
-
return nextConfig;
|
|
57
75
|
}
|
|
58
76
|
function getSyncoreWorkerUrl() {
|
|
59
77
|
return `/_next/static/chunks/${WORKER_NAME}.js`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["const WORKER_NAME = \"syncore-worker\";\n\nfunction joinAppWorkerPath(dir: string) {\n return `${dir.replace(/[\\\\/]$/, \"\")}/app/syncore.worker`;\n}\n\n/**\n * Wrap a Next config with the settings Syncore needs for
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["const WORKER_NAME = \"syncore-worker\";\n\nfunction joinAppWorkerPath(dir: string) {\n return `${dir.replace(/[\\\\/]$/, \"\")}/app/syncore.worker`;\n}\n\n/**\n * Wrap a Next config with the settings Syncore needs for worker assets.\n *\n * This enables async WebAssembly support and configures webpack to bundle the\n * syncore worker as a separate entry point.\n */\nexport function withSyncoreNext<TConfig extends Record<string, unknown>>(\n config: TConfig\n): TConfig {\n const baseConfig = config as Record<string, unknown>;\n const isStaticExport = baseConfig.output === \"export\";\n const userWebpack =\n typeof baseConfig.webpack === \"function\"\n ? (baseConfig.webpack as (\n config: Record<string, unknown>,\n context: unknown\n ) => Record<string, unknown>)\n : undefined;\n const userTranspilePackages = Array.isArray(baseConfig.transpilePackages)\n ? baseConfig.transpilePackages\n : [];\n const internalScope = `${String.fromCharCode(64)}syncore/`;\n const syncoreTranspilePackages = [\n \"syncorejs\",\n `${internalScope}core`,\n `${internalScope}schema`,\n `${internalScope}react`,\n `${internalScope}platform-web`,\n `${internalScope}next`\n ];\n\n const nextConfig: Record<string, unknown> = {\n ...config,\n transpilePackages: Array.from(\n new Set([...userTranspilePackages, ...syncoreTranspilePackages])\n ),\n webpack(currentConfig: Record<string, unknown>, context: unknown) {\n const nextConfig = { ...currentConfig };\n const experiments = (nextConfig.experiments ?? {}) as Record<\n string,\n unknown\n >;\n nextConfig.experiments = {\n ...experiments,\n asyncWebAssembly: true\n };\n const resolve = (nextConfig.resolve ?? {}) as Record<string, unknown>;\n nextConfig.resolve = {\n ...resolve,\n extensionAlias: {\n ...((resolve.extensionAlias ?? {}) as Record<string, unknown>),\n \".js\": [\".ts\", \".tsx\", \".js\"],\n \".mjs\": [\".mts\", \".mjs\"]\n }\n };\n const moduleConfig = (nextConfig.module ?? {}) as Record<string, unknown>;\n const rules = Array.isArray(moduleConfig.rules) ? moduleConfig.rules : [];\n nextConfig.module = {\n ...moduleConfig,\n rules: [\n {\n test: /\\.wasm$/,\n type: \"asset/resource\"\n },\n ...rules\n ]\n };\n\n type WebpackContext = {\n dev?: boolean;\n isServer: boolean;\n nextRuntime?: string;\n dir: string;\n };\n const ctx = context as WebpackContext | undefined;\n if (\n isStaticExport &&\n ctx &&\n !ctx.dev &&\n !ctx.isServer &&\n ctx.nextRuntime !== \"edge\"\n ) {\n const entry =\n (nextConfig.entry as () => Promise<Record<string, unknown>>) ??\n (async () => ({}));\n const workerPath = joinAppWorkerPath(ctx.dir);\n nextConfig.entry = async () => {\n const entries = await entry();\n return {\n ...entries,\n [WORKER_NAME]: {\n import: workerPath,\n filename: \"static/chunks/[name].js\"\n }\n };\n };\n }\n\n if (userWebpack) {\n return userWebpack(nextConfig, context);\n }\n\n return nextConfig;\n }\n };\n\n return nextConfig as TConfig;\n}\n\nexport function getSyncoreWorkerUrl(): string {\n return `/_next/static/chunks/${WORKER_NAME}.js`;\n}\n\n/**\n * Create the default worker URL used by the Next integration.\n */\nexport function createSyncoreNextWorkerUrl(\n relativePath = \"./syncore.worker.js\"\n) {\n return new URL(relativePath, import.meta.url);\n}\n"],"mappings":";AAAA,MAAM,cAAc;AAEpB,SAAS,kBAAkB,KAAa;CACtC,OAAO,GAAG,IAAI,QAAQ,UAAU,EAAE,EAAE;AACtC;;;;;;;AAQA,SAAgB,gBACd,QACS;CACT,MAAM,aAAa;CACnB,MAAM,iBAAiB,WAAW,WAAW;CAC7C,MAAM,cACJ,OAAO,WAAW,YAAY,aACzB,WAAW,UAIZ,KAAA;CACN,MAAM,wBAAwB,MAAM,QAAQ,WAAW,iBAAiB,IACpE,WAAW,oBACX,CAAC;CACL,MAAM,gBAAgB,GAAG,OAAO,aAAa,EAAE,EAAE;CACjD,MAAM,2BAA2B;EAC/B;EACA,GAAG,cAAc;EACjB,GAAG,cAAc;EACjB,GAAG,cAAc;EACjB,GAAG,cAAc;EACjB,GAAG,cAAc;CACnB;CA6EA,OAAO;EA1EL,GAAG;EACH,mBAAmB,MAAM,KACvB,IAAI,IAAI,CAAC,GAAG,uBAAuB,GAAG,wBAAwB,CAAC,CACjE;EACA,QAAQ,eAAwC,SAAkB;GAChE,MAAM,aAAa,EAAE,GAAG,cAAc;GAKtC,WAAW,cAAc;IACvB,GALmB,WAAW,eAAe,CAAC;IAM9C,kBAAkB;GACpB;GACA,MAAM,UAAW,WAAW,WAAW,CAAC;GACxC,WAAW,UAAU;IACnB,GAAG;IACH,gBAAgB;KACd,GAAK,QAAQ,kBAAkB,CAAC;KAChC,OAAO;MAAC;MAAO;MAAQ;KAAK;KAC5B,QAAQ,CAAC,QAAQ,MAAM;IACzB;GACF;GACA,MAAM,eAAgB,WAAW,UAAU,CAAC;GAC5C,MAAM,QAAQ,MAAM,QAAQ,aAAa,KAAK,IAAI,aAAa,QAAQ,CAAC;GACxE,WAAW,SAAS;IAClB,GAAG;IACH,OAAO,CACL;KACE,MAAM;KACN,MAAM;IACR,GACA,GAAG,KACL;GACF;GAQA,MAAM,MAAM;GACZ,IACE,kBACA,OACA,CAAC,IAAI,OACL,CAAC,IAAI,YACL,IAAI,gBAAgB,QACpB;IACA,MAAM,QACH,WAAW,UACX,aAAa,CAAC;IACjB,MAAM,aAAa,kBAAkB,IAAI,GAAG;IAC5C,WAAW,QAAQ,YAAY;KAE7B,OAAO;MACL,GAAG,MAFiB,MAAM;OAGzB,cAAc;OACb,QAAQ;OACR,UAAU;MACZ;KACF;IACF;GACF;GAEA,IAAI,aACF,OAAO,YAAY,YAAY,OAAO;GAGxC,OAAO;EACT;CAGc;AAClB;AAEA,SAAgB,sBAA8B;CAC5C,OAAO,wBAAwB,YAAY;AAC7C;;;;AAKA,SAAgB,2BACd,eAAe,uBACf;CACA,OAAO,IAAI,IAAI,cAAc,OAAO,KAAK,GAAG;AAC9C"}
|