@powerhousedao/powerhouse-vetra-packages 6.2.0-dev.4 → 6.2.0-dev.40

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.
Files changed (72) hide show
  1. package/dist/browser/assets/{entry-Bzani6_n.js → entry-BHcFjTEd.js} +2 -2
  2. package/dist/browser/assets/{projection-entry-Bpu-8SnI.js → projection-entry-Cs-5j8OX.js} +4 -4
  3. package/dist/browser/{connect-DPNyOTBV.js → connect-CmgZSI0Z.js} +45 -45
  4. package/dist/browser/connect-CmgZSI0Z.js.map +1 -0
  5. package/dist/browser/{dist-Bha1Om6O.js → dist-D1NFJMzm.js} +100 -49
  6. package/dist/browser/dist-D1NFJMzm.js.map +1 -0
  7. package/dist/browser/{document-drive-CDaY4aIj.js → document-drive-sTKoi6L4.js} +310 -3
  8. package/dist/browser/document-drive-sTKoi6L4.js.map +1 -0
  9. package/dist/browser/document-models/index.js +1 -1
  10. package/dist/browser/{editor-CJFM1rC9.js → editor-Bs5C6sAt.js} +21 -21
  11. package/dist/browser/editor-Bs5C6sAt.js.map +1 -0
  12. package/dist/browser/{editor-BtOSWTjb.js → editor-BsVLT-lJ.js} +5 -5
  13. package/dist/browser/{editor-BtOSWTjb.js.map → editor-BsVLT-lJ.js.map} +1 -1
  14. package/dist/browser/editors/document-model-editor/module.js +1 -1
  15. package/dist/browser/editors/generic-drive-explorer/index.js +5 -5
  16. package/dist/browser/editors/generic-drive-explorer/index.js.map +1 -1
  17. package/dist/browser/editors/generic-drive-explorer/module.js +1 -1
  18. package/dist/browser/{folder-view-DAhpWssS.js → folder-view-LYhTe15T.js} +7 -7
  19. package/dist/browser/folder-view-LYhTe15T.js.map +1 -0
  20. package/dist/browser/{graphql-editor-Dwgpm08w.js → graphql-editor-b61MnkEP.js} +3 -3
  21. package/dist/browser/{graphql-editor-Dwgpm08w.js.map → graphql-editor-b61MnkEP.js.map} +1 -1
  22. package/dist/browser/index.js +334 -2
  23. package/dist/browser/index.js.map +1 -1
  24. package/dist/browser/{json-editor-SKLjwlux.js → json-editor-DO_EwDmY.js} +3 -3
  25. package/dist/browser/{json-editor-SKLjwlux.js.map → json-editor-DO_EwDmY.js.map} +1 -1
  26. package/dist/browser/lib-DtwK2kyR.js +200 -0
  27. package/dist/browser/lib-DtwK2kyR.js.map +1 -0
  28. package/dist/browser/{state-schemas-S69fnpVk.js → state-schemas-Cx-QbW5a.js} +12 -12
  29. package/dist/browser/state-schemas-Cx-QbW5a.js.map +1 -0
  30. package/dist/node/{connect-5a3Nx0Jd.mjs → connect-CwDdrOag.mjs} +45 -45
  31. package/dist/node/connect-CwDdrOag.mjs.map +1 -0
  32. package/dist/node/{dist-QOGgRb-y.mjs → dist-RdOXBdt-.mjs} +100 -49
  33. package/dist/node/dist-RdOXBdt-.mjs.map +1 -0
  34. package/dist/node/{document-drive-BK2-EDni.mjs → document-drive-DjL9iikf.mjs} +310 -3
  35. package/dist/node/document-drive-DjL9iikf.mjs.map +1 -0
  36. package/dist/node/document-models/index.mjs +1 -1
  37. package/dist/node/{editor-BNOTRmUU.mjs → editor-CTJUSbjg.mjs} +21 -21
  38. package/dist/node/editor-CTJUSbjg.mjs.map +1 -0
  39. package/dist/node/{editor-C_Gchmop.mjs → editor-DLr8Eb3u.mjs} +5 -5
  40. package/dist/node/{editor-C_Gchmop.mjs.map → editor-DLr8Eb3u.mjs.map} +1 -1
  41. package/dist/node/editors/document-model-editor/module.mjs +1 -1
  42. package/dist/node/editors/generic-drive-explorer/index.mjs +5 -5
  43. package/dist/node/editors/generic-drive-explorer/index.mjs.map +1 -1
  44. package/dist/node/editors/generic-drive-explorer/module.mjs +1 -1
  45. package/dist/node/{folder-view-af4hVjjx.mjs → folder-view-CfvJLoKi.mjs} +7 -7
  46. package/dist/node/folder-view-CfvJLoKi.mjs.map +1 -0
  47. package/dist/node/{graphql-editor-BoTCyC9n.mjs → graphql-editor-C-0f2bX3.mjs} +3 -3
  48. package/dist/node/{graphql-editor-BoTCyC9n.mjs.map → graphql-editor-C-0f2bX3.mjs.map} +1 -1
  49. package/dist/node/index.mjs +335 -2
  50. package/dist/node/index.mjs.map +1 -1
  51. package/dist/node/{json-editor-Bk4_b03g.mjs → json-editor-DJtigEsH.mjs} +3 -3
  52. package/dist/node/{json-editor-Bk4_b03g.mjs.map → json-editor-DJtigEsH.mjs.map} +1 -1
  53. package/dist/node/{dist-C7ZmTHz4.mjs → main-DbTMJyA_.mjs} +45 -340
  54. package/dist/node/main-DbTMJyA_.mjs.map +1 -0
  55. package/dist/node/{state-schemas-DMw1UvT8.mjs → state-schemas-Bv5h5MqY.mjs} +12 -12
  56. package/dist/node/state-schemas-Bv5h5MqY.mjs.map +1 -0
  57. package/package.json +6 -6
  58. package/dist/browser/connect-DPNyOTBV.js.map +0 -1
  59. package/dist/browser/dist-Bha1Om6O.js.map +0 -1
  60. package/dist/browser/dist-DnQpckQ8.js +0 -494
  61. package/dist/browser/dist-DnQpckQ8.js.map +0 -1
  62. package/dist/browser/document-drive-CDaY4aIj.js.map +0 -1
  63. package/dist/browser/editor-CJFM1rC9.js.map +0 -1
  64. package/dist/browser/folder-view-DAhpWssS.js.map +0 -1
  65. package/dist/browser/state-schemas-S69fnpVk.js.map +0 -1
  66. package/dist/node/connect-5a3Nx0Jd.mjs.map +0 -1
  67. package/dist/node/dist-C7ZmTHz4.mjs.map +0 -1
  68. package/dist/node/dist-QOGgRb-y.mjs.map +0 -1
  69. package/dist/node/document-drive-BK2-EDni.mjs.map +0 -1
  70. package/dist/node/editor-BNOTRmUU.mjs.map +0 -1
  71. package/dist/node/folder-view-af4hVjjx.mjs.map +0 -1
  72. package/dist/node/state-schemas-DMw1UvT8.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { r as driveDocumentModelModule, u as documentModelDocumentModelModule } from "./document-drive-CDaY4aIj.js";
2
- import { t as reactorDriveDocumentModelModule } from "./dist-DnQpckQ8.js";
1
+ import { S as createState, X as generateId, g as baseLoadFromInput, h as baseCreateDocument, k as isDocumentAction, r as driveDocumentModelModule, u as documentModelDocumentModelModule, v as baseSaveToFileHandle, w as defaultBaseState, x as createReducer } from "./document-drive-sTKoi6L4.js";
2
+ import { t as gql } from "./lib-DtwK2kyR.js";
3
3
  import { DocumentModelEditor } from "./editors/document-model-editor/module.js";
4
4
  import { GenericDriveExplorer } from "./editors/generic-drive-explorer/module.js";
5
5
  //#region powerhouse.manifest.json
@@ -69,6 +69,338 @@ var powerhouse_manifest_default = {
69
69
  importScripts: []
70
70
  };
71
71
  //#endregion
72
+ //#region ../reactor-drive/dist/index.js
73
+ const REACTOR_DRIVE_DOCUMENT_TYPE = "powerhouse/reactor-drive";
74
+ const REACTOR_DRIVE_FILE_EXTENSION = "phrd";
75
+ function setDriveNameAction(input) {
76
+ return {
77
+ id: generateId(),
78
+ type: "SET_DRIVE_NAME",
79
+ scope: "global",
80
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
81
+ input
82
+ };
83
+ }
84
+ function setDriveIconAction(input) {
85
+ return {
86
+ id: generateId(),
87
+ type: "SET_DRIVE_ICON",
88
+ scope: "global",
89
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
90
+ input
91
+ };
92
+ }
93
+ function setSharingTypeAction(input) {
94
+ return {
95
+ id: generateId(),
96
+ type: "SET_SHARING_TYPE",
97
+ scope: "local",
98
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
99
+ input
100
+ };
101
+ }
102
+ function setAvailableOfflineAction(input) {
103
+ return {
104
+ id: generateId(),
105
+ type: "SET_AVAILABLE_OFFLINE",
106
+ scope: "local",
107
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
108
+ input
109
+ };
110
+ }
111
+ function addFolderAction(input) {
112
+ return {
113
+ id: generateId(),
114
+ type: "ADD_FOLDER",
115
+ scope: "document",
116
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
117
+ input
118
+ };
119
+ }
120
+ function updateFolderAction(input) {
121
+ return {
122
+ id: generateId(),
123
+ type: "UPDATE_FOLDER",
124
+ scope: "document",
125
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
126
+ input
127
+ };
128
+ }
129
+ function removeFolderAction(input) {
130
+ return {
131
+ id: generateId(),
132
+ type: "REMOVE_FOLDER",
133
+ scope: "document",
134
+ timestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),
135
+ input
136
+ };
137
+ }
138
+ const reactorDriveActions = {
139
+ setDriveName: setDriveNameAction,
140
+ setDriveIcon: setDriveIconAction,
141
+ setSharingType: setSharingTypeAction,
142
+ setAvailableOffline: setAvailableOfflineAction,
143
+ addFolder: addFolderAction,
144
+ updateFolder: updateFolderAction,
145
+ removeFolder: removeFolderAction
146
+ };
147
+ const reactorDriveStateReducer = (state, action) => {
148
+ if (isDocumentAction(action)) return state;
149
+ const typedAction = action;
150
+ switch (typedAction.type) {
151
+ case "SET_DRIVE_NAME": {
152
+ const input = typedAction.input;
153
+ state.global.name = input.name;
154
+ return state;
155
+ }
156
+ case "SET_DRIVE_ICON": {
157
+ const input = typedAction.input;
158
+ state.global.icon = input.icon;
159
+ return state;
160
+ }
161
+ case "SET_SHARING_TYPE": {
162
+ const input = typedAction.input;
163
+ state.local.sharingType = input.sharingType;
164
+ return state;
165
+ }
166
+ case "SET_AVAILABLE_OFFLINE": {
167
+ const input = typedAction.input;
168
+ state.local.availableOffline = input.availableOffline;
169
+ return state;
170
+ }
171
+ case "ADD_FOLDER":
172
+ case "UPDATE_FOLDER":
173
+ case "REMOVE_FOLDER": return state;
174
+ default: return state;
175
+ }
176
+ };
177
+ const initialGlobalState = {
178
+ name: "",
179
+ icon: null
180
+ };
181
+ const initialLocalState = {
182
+ sharingType: "private",
183
+ availableOffline: false
184
+ };
185
+ const reactorDriveCreateState = (state) => {
186
+ return {
187
+ ...defaultBaseState(),
188
+ global: {
189
+ ...initialGlobalState,
190
+ ...state?.global
191
+ },
192
+ local: {
193
+ ...initialLocalState,
194
+ ...state?.local
195
+ }
196
+ };
197
+ };
198
+ const reactorDriveCreateDocument = (state) => {
199
+ return baseCreateDocument(reactorDriveCreateState, state, REACTOR_DRIVE_DOCUMENT_TYPE);
200
+ };
201
+ const reactorDriveSaveToFileHandle = (document, input) => {
202
+ return baseSaveToFileHandle(document, input);
203
+ };
204
+ const reactorDriveLoadFromInput = (input) => {
205
+ return baseLoadFromInput(input, reactorDriveDocumentReducer);
206
+ };
207
+ const isReactorDriveState = (state) => {
208
+ return typeof state === "object" && state !== null && "global" in state && "local" in state;
209
+ };
210
+ const assertIsReactorDriveState = (state) => {
211
+ if (!isReactorDriveState(state)) throw new Error("Not a reactor-drive state");
212
+ };
213
+ const isReactorDriveDocument = (document) => {
214
+ return typeof document === "object" && document !== null && "header" in document && document.header.documentType === "powerhouse/reactor-drive";
215
+ };
216
+ const assertIsReactorDriveDocument = (document) => {
217
+ if (!isReactorDriveDocument(document)) throw new Error("Not a reactor-drive document");
218
+ };
219
+ const reactorDriveDocumentReducer = createReducer(reactorDriveStateReducer);
220
+ const reactorDriveDocumentGlobalState = {
221
+ id: REACTOR_DRIVE_DOCUMENT_TYPE,
222
+ name: "ReactorDrive",
223
+ extension: REACTOR_DRIVE_FILE_EXTENSION,
224
+ description: "",
225
+ author: {
226
+ name: "Powerhouse Inc",
227
+ website: "https://www.powerhouse.inc/"
228
+ },
229
+ specifications: [{
230
+ version: 1,
231
+ changeLog: [],
232
+ state: {
233
+ global: {
234
+ schema: "type ReactorDriveState {\n name: String!\n icon: String\n}",
235
+ initialValue: JSON.stringify(JSON.stringify(initialGlobalState)),
236
+ examples: []
237
+ },
238
+ local: {
239
+ schema: "type ReactorDriveLocalState {\n sharingType: String!\n availableOffline: Boolean!\n}",
240
+ initialValue: JSON.stringify(JSON.stringify(initialLocalState)),
241
+ examples: []
242
+ }
243
+ },
244
+ modules: [{
245
+ id: "reactor-drive/base-operations",
246
+ name: "base_operations",
247
+ description: "",
248
+ operations: [
249
+ {
250
+ id: "SET_DRIVE_NAME",
251
+ name: "SET_DRIVE_NAME",
252
+ description: "",
253
+ schema: "input SetDriveNameInput { name: String! }",
254
+ template: "",
255
+ reducer: "",
256
+ errors: [],
257
+ examples: [],
258
+ scope: "global"
259
+ },
260
+ {
261
+ id: "SET_DRIVE_ICON",
262
+ name: "SET_DRIVE_ICON",
263
+ description: "",
264
+ schema: "input SetDriveIconInput { icon: String }",
265
+ template: "",
266
+ reducer: "",
267
+ errors: [],
268
+ examples: [],
269
+ scope: "global"
270
+ },
271
+ {
272
+ id: "SET_SHARING_TYPE",
273
+ name: "SET_SHARING_TYPE",
274
+ description: "",
275
+ schema: "input SetSharingTypeInput { sharingType: String! }",
276
+ template: "",
277
+ reducer: "",
278
+ errors: [],
279
+ examples: [],
280
+ scope: "local"
281
+ },
282
+ {
283
+ id: "SET_AVAILABLE_OFFLINE",
284
+ name: "SET_AVAILABLE_OFFLINE",
285
+ description: "",
286
+ schema: "input SetAvailableOfflineInput { availableOffline: Boolean! }",
287
+ template: "",
288
+ reducer: "",
289
+ errors: [],
290
+ examples: [],
291
+ scope: "local"
292
+ },
293
+ {
294
+ id: "ADD_FOLDER",
295
+ name: "ADD_FOLDER",
296
+ description: "",
297
+ schema: "input AddFolderInput { folderId: String! parentFolderId: String name: String! }",
298
+ template: "",
299
+ reducer: "",
300
+ errors: [],
301
+ examples: [],
302
+ scope: "document"
303
+ },
304
+ {
305
+ id: "UPDATE_FOLDER",
306
+ name: "UPDATE_FOLDER",
307
+ description: "",
308
+ schema: "input UpdateFolderInput { folderId: String! name: String parentFolderId: String }",
309
+ template: "",
310
+ reducer: "",
311
+ errors: [],
312
+ examples: [],
313
+ scope: "document"
314
+ },
315
+ {
316
+ id: "REMOVE_FOLDER",
317
+ name: "REMOVE_FOLDER",
318
+ description: "",
319
+ schema: "input RemoveFolderInput { folderId: String! }",
320
+ template: "",
321
+ reducer: "",
322
+ errors: [],
323
+ examples: [],
324
+ scope: "document"
325
+ }
326
+ ]
327
+ }]
328
+ }]
329
+ };
330
+ const reactorDriveDocumentModelModule = {
331
+ actions: reactorDriveActions,
332
+ reducer: reactorDriveDocumentReducer,
333
+ documentModel: createState(defaultBaseState(), reactorDriveDocumentGlobalState),
334
+ utils: {
335
+ fileExtension: REACTOR_DRIVE_FILE_EXTENSION,
336
+ createState: reactorDriveCreateState,
337
+ createDocument: reactorDriveCreateDocument,
338
+ loadFromInput: reactorDriveLoadFromInput,
339
+ saveToFileHandle: reactorDriveSaveToFileHandle,
340
+ isStateOfType: isReactorDriveState,
341
+ assertIsStateOfType: assertIsReactorDriveState,
342
+ isDocumentOfType: isReactorDriveDocument,
343
+ assertIsDocumentOfType: assertIsReactorDriveDocument
344
+ }
345
+ };
346
+ gql`
347
+ enum ReactorDriveNodeKind {
348
+ FILE
349
+ FOLDER
350
+ }
351
+
352
+ input ReactorDrivePagingInput {
353
+ cursor: String
354
+ limit: Int
355
+ }
356
+
357
+ type ReactorDriveFileNode {
358
+ id: ID!
359
+ driveId: ID!
360
+ name: String!
361
+ parentFolder: ID
362
+ documentType: String!
363
+ }
364
+
365
+ type ReactorDriveFolderNode {
366
+ id: ID!
367
+ driveId: ID!
368
+ name: String!
369
+ parentFolder: ID
370
+ children(
371
+ paging: ReactorDrivePagingInput
372
+ kind: ReactorDriveNodeKind
373
+ ): ReactorDriveNodePage!
374
+ }
375
+
376
+ union ReactorDriveNode = ReactorDriveFileNode | ReactorDriveFolderNode
377
+
378
+ type ReactorDriveNodePage {
379
+ results: [ReactorDriveNode!]!
380
+ nextCursor: String
381
+ hasMore: Boolean!
382
+ totalCount: Int
383
+ }
384
+
385
+ type ReactorDrive {
386
+ id: ID!
387
+ name: String!
388
+ icon: String
389
+ sharingType: String!
390
+ availableOffline: Boolean!
391
+ rootNodes(
392
+ paging: ReactorDrivePagingInput
393
+ kind: ReactorDriveNodeKind
394
+ ): ReactorDriveNodePage!
395
+ }
396
+
397
+ type Query {
398
+ reactorDrive(id: ID!): ReactorDrive
399
+ reactorDriveNode(driveId: ID!, id: ID!): ReactorDriveNode
400
+ reactorDriveDescendants(driveId: ID!, root: ID!): [ReactorDriveNode!]!
401
+ }
402
+ `;
403
+ //#endregion
72
404
  //#region document-models/document-models.ts
73
405
  const documentModels = [
74
406
  documentModelDocumentModelModule,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["manifestJson"],"sources":["../../powerhouse.manifest.json","../../document-models/document-models.ts","../../editors/editors.ts","../../index.ts"],"sourcesContent":["","import { reactorDriveDocumentModelModule } from \"@powerhousedao/reactor-drive\";\nimport { driveDocumentModelModule } from \"@powerhousedao/shared/document-drive\";\nimport { type DocumentModelModule } from \"@powerhousedao/shared/document-model\";\nimport { documentModelDocumentModelModule } from \"document-model\";\nexport const documentModels: DocumentModelModule<any>[] = [\n documentModelDocumentModelModule,\n driveDocumentModelModule,\n reactorDriveDocumentModelModule,\n];\n","import type { EditorModule } from \"@powerhousedao/shared/document-model\";\nimport { DocumentModelEditor } from \"./document-model-editor/module.js\";\nimport { GenericDriveExplorer } from \"./generic-drive-explorer/module.js\";\n\nexport const editors: EditorModule[] = [\n DocumentModelEditor,\n GenericDriveExplorer,\n];\n","import type { Manifest } from \"@powerhousedao/shared/document-model\";\nimport manifestJson from \"./powerhouse.manifest.json\" with { type: \"json\" };\nexport { documentModels } from \"./document-models/document-models.js\";\nexport { editors } from \"./editors/editors.js\";\nexport const manifest: Manifest = manifestJson;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACIA,MAAa,iBAA6C;CACxD;CACA;CACA;CACD;;;ACJD,MAAa,UAA0B,CACrC,qBACA,qBACD;;;ACHD,MAAa,WAAqBA"}
1
+ {"version":3,"file":"index.js","names":["manifestJson"],"sources":["../../powerhouse.manifest.json","../../../reactor-drive/dist/index.js","../../document-models/document-models.ts","../../editors/editors.ts","../../index.ts"],"sourcesContent":["","import { baseCreateDocument, baseLoadFromInput, baseSaveToFileHandle, createPresignedHeader, createReducer, createState, defaultBaseState, generateId, isDocumentAction, replayDocumentVersioned } from \"@powerhousedao/shared/document-model\";\nimport { Migrator, sql } from \"kysely\";\nimport { BaseReadModel, addRelationshipAction, createDocumentAction, removeRelationshipAction, upgradeDocumentAction } from \"@powerhousedao/reactor\";\nimport { gql } from \"graphql-tag\";\n//#region \\0rolldown/runtime.js\nvar __defProp = Object.defineProperty;\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\n//#endregion\n//#region src/constants.ts\nconst REACTOR_DRIVE_DOCUMENT_TYPE = \"powerhouse/reactor-drive\";\nconst DRIVE_CHILD_RELATIONSHIP_TYPE = \"drive/child\";\nconst REACTOR_DRIVE_FILE_EXTENSION = \"phrd\";\n//#endregion\n//#region src/actions.ts\nfunction setDriveNameAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"SET_DRIVE_NAME\",\n\t\tscope: \"global\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nfunction setDriveIconAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"SET_DRIVE_ICON\",\n\t\tscope: \"global\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nfunction setSharingTypeAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"SET_SHARING_TYPE\",\n\t\tscope: \"local\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nfunction setAvailableOfflineAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"SET_AVAILABLE_OFFLINE\",\n\t\tscope: \"local\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nfunction addFolderAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"ADD_FOLDER\",\n\t\tscope: \"document\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nfunction updateFolderAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"UPDATE_FOLDER\",\n\t\tscope: \"document\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nfunction removeFolderAction(input) {\n\treturn {\n\t\tid: generateId(),\n\t\ttype: \"REMOVE_FOLDER\",\n\t\tscope: \"document\",\n\t\ttimestampUtcMs: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tinput\n\t};\n}\nconst reactorDriveActions = {\n\tsetDriveName: setDriveNameAction,\n\tsetDriveIcon: setDriveIconAction,\n\tsetSharingType: setSharingTypeAction,\n\tsetAvailableOffline: setAvailableOfflineAction,\n\taddFolder: addFolderAction,\n\tupdateFolder: updateFolderAction,\n\tremoveFolder: removeFolderAction\n};\n//#endregion\n//#region src/reducer/drive.ts\nconst reactorDriveStateReducer = (state, action) => {\n\tif (isDocumentAction(action)) return state;\n\tconst typedAction = action;\n\tswitch (typedAction.type) {\n\t\tcase \"SET_DRIVE_NAME\": {\n\t\t\tconst input = typedAction.input;\n\t\t\tstate.global.name = input.name;\n\t\t\treturn state;\n\t\t}\n\t\tcase \"SET_DRIVE_ICON\": {\n\t\t\tconst input = typedAction.input;\n\t\t\tstate.global.icon = input.icon;\n\t\t\treturn state;\n\t\t}\n\t\tcase \"SET_SHARING_TYPE\": {\n\t\t\tconst input = typedAction.input;\n\t\t\tstate.local.sharingType = input.sharingType;\n\t\t\treturn state;\n\t\t}\n\t\tcase \"SET_AVAILABLE_OFFLINE\": {\n\t\t\tconst input = typedAction.input;\n\t\t\tstate.local.availableOffline = input.availableOffline;\n\t\t\treturn state;\n\t\t}\n\t\tcase \"ADD_FOLDER\":\n\t\tcase \"UPDATE_FOLDER\":\n\t\tcase \"REMOVE_FOLDER\": return state;\n\t\tdefault: return state;\n\t}\n};\n//#endregion\n//#region src/module.ts\nconst initialGlobalState = {\n\tname: \"\",\n\ticon: null\n};\nconst initialLocalState = {\n\tsharingType: \"private\",\n\tavailableOffline: false\n};\nconst reactorDriveCreateState = (state) => {\n\treturn {\n\t\t...defaultBaseState(),\n\t\tglobal: {\n\t\t\t...initialGlobalState,\n\t\t\t...state?.global\n\t\t},\n\t\tlocal: {\n\t\t\t...initialLocalState,\n\t\t\t...state?.local\n\t\t}\n\t};\n};\nconst reactorDriveCreateDocument = (state) => {\n\treturn baseCreateDocument(reactorDriveCreateState, state, REACTOR_DRIVE_DOCUMENT_TYPE);\n};\nconst reactorDriveSaveToFileHandle = (document, input) => {\n\treturn baseSaveToFileHandle(document, input);\n};\nconst reactorDriveLoadFromInput = (input) => {\n\treturn baseLoadFromInput(input, reactorDriveDocumentReducer);\n};\nconst isReactorDriveState = (state) => {\n\treturn typeof state === \"object\" && state !== null && \"global\" in state && \"local\" in state;\n};\nconst assertIsReactorDriveState = (state) => {\n\tif (!isReactorDriveState(state)) throw new Error(\"Not a reactor-drive state\");\n};\nconst isReactorDriveDocument = (document) => {\n\treturn typeof document === \"object\" && document !== null && \"header\" in document && document.header.documentType === \"powerhouse/reactor-drive\";\n};\nconst assertIsReactorDriveDocument = (document) => {\n\tif (!isReactorDriveDocument(document)) throw new Error(\"Not a reactor-drive document\");\n};\nconst reactorDriveDocumentReducer = createReducer(reactorDriveStateReducer);\nconst reactorDriveDocumentGlobalState = {\n\tid: REACTOR_DRIVE_DOCUMENT_TYPE,\n\tname: \"ReactorDrive\",\n\textension: REACTOR_DRIVE_FILE_EXTENSION,\n\tdescription: \"\",\n\tauthor: {\n\t\tname: \"Powerhouse Inc\",\n\t\twebsite: \"https://www.powerhouse.inc/\"\n\t},\n\tspecifications: [{\n\t\tversion: 1,\n\t\tchangeLog: [],\n\t\tstate: {\n\t\t\tglobal: {\n\t\t\t\tschema: \"type ReactorDriveState {\\n name: String!\\n icon: String\\n}\",\n\t\t\t\tinitialValue: JSON.stringify(JSON.stringify(initialGlobalState)),\n\t\t\t\texamples: []\n\t\t\t},\n\t\t\tlocal: {\n\t\t\t\tschema: \"type ReactorDriveLocalState {\\n sharingType: String!\\n availableOffline: Boolean!\\n}\",\n\t\t\t\tinitialValue: JSON.stringify(JSON.stringify(initialLocalState)),\n\t\t\t\texamples: []\n\t\t\t}\n\t\t},\n\t\tmodules: [{\n\t\t\tid: \"reactor-drive/base-operations\",\n\t\t\tname: \"base_operations\",\n\t\t\tdescription: \"\",\n\t\t\toperations: [\n\t\t\t\t{\n\t\t\t\t\tid: \"SET_DRIVE_NAME\",\n\t\t\t\t\tname: \"SET_DRIVE_NAME\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input SetDriveNameInput { name: String! }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"global\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"SET_DRIVE_ICON\",\n\t\t\t\t\tname: \"SET_DRIVE_ICON\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input SetDriveIconInput { icon: String }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"global\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"SET_SHARING_TYPE\",\n\t\t\t\t\tname: \"SET_SHARING_TYPE\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input SetSharingTypeInput { sharingType: String! }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"local\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"SET_AVAILABLE_OFFLINE\",\n\t\t\t\t\tname: \"SET_AVAILABLE_OFFLINE\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input SetAvailableOfflineInput { availableOffline: Boolean! }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"local\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"ADD_FOLDER\",\n\t\t\t\t\tname: \"ADD_FOLDER\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input AddFolderInput { folderId: String! parentFolderId: String name: String! }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"document\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"UPDATE_FOLDER\",\n\t\t\t\t\tname: \"UPDATE_FOLDER\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input UpdateFolderInput { folderId: String! name: String parentFolderId: String }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"document\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"REMOVE_FOLDER\",\n\t\t\t\t\tname: \"REMOVE_FOLDER\",\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tschema: \"input RemoveFolderInput { folderId: String! }\",\n\t\t\t\t\ttemplate: \"\",\n\t\t\t\t\treducer: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\texamples: [],\n\t\t\t\t\tscope: \"document\"\n\t\t\t\t}\n\t\t\t]\n\t\t}]\n\t}]\n};\nconst reactorDriveDocumentModelModule = {\n\tactions: reactorDriveActions,\n\treducer: reactorDriveDocumentReducer,\n\tdocumentModel: createState(defaultBaseState(), reactorDriveDocumentGlobalState),\n\tutils: {\n\t\tfileExtension: REACTOR_DRIVE_FILE_EXTENSION,\n\t\tcreateState: reactorDriveCreateState,\n\t\tcreateDocument: reactorDriveCreateDocument,\n\t\tloadFromInput: reactorDriveLoadFromInput,\n\t\tsaveToFileHandle: reactorDriveSaveToFileHandle,\n\t\tisStateOfType: isReactorDriveState,\n\t\tassertIsStateOfType: assertIsReactorDriveState,\n\t\tisDocumentOfType: isReactorDriveDocument,\n\t\tassertIsDocumentOfType: assertIsReactorDriveDocument\n\t}\n};\n//#endregion\n//#region src/schema/migrations/0001_drive_node.ts\nvar _0001_drive_node_exports = /* @__PURE__ */ __exportAll({\n\tdown: () => down$1,\n\tup: () => up$1\n});\nasync function up$1(db) {\n\tawait db.schema.createTable(\"DriveNode\").ifNotExists().addColumn(\"driveId\", \"text\", (col) => col.notNull()).addColumn(\"id\", \"text\", (col) => col.notNull()).addColumn(\"kind\", \"text\", (col) => col.notNull()).addColumn(\"name\", \"text\", (col) => col.notNull()).addColumn(\"requestedName\", \"text\", (col) => col.notNull()).addColumn(\"parentFolder\", \"text\").addColumn(\"documentType\", \"text\").addColumn(\"createdAt\", \"timestamptz\", (col) => col.notNull().defaultTo(sql`NOW()`)).addColumn(\"updatedAt\", \"timestamptz\", (col) => col.notNull().defaultTo(sql`NOW()`)).addPrimaryKeyConstraint(\"pk_drive_node\", [\"driveId\", \"id\"]).addCheckConstraint(\"chk_drive_node_document_type\", sql`(kind = 'file' AND \"documentType\" IS NOT NULL) OR (kind = 'folder' AND \"documentType\" IS NULL)`).execute();\n\tawait db.schema.createIndex(\"idx_drive_node_parent_name\").ifNotExists().on(\"DriveNode\").columns([\n\t\t\"driveId\",\n\t\t\"parentFolder\",\n\t\t\"name\"\n\t]).execute();\n\tawait db.schema.createIndex(\"idx_drive_node_parent_kind_id\").ifNotExists().on(\"DriveNode\").columns([\n\t\t\"driveId\",\n\t\t\"parentFolder\",\n\t\t\"kind\",\n\t\t\"id\"\n\t]).execute();\n}\nasync function down$1(db) {\n\tawait db.schema.dropTable(\"DriveNode\").execute();\n}\n//#endregion\n//#region src/schema/migrations/0002_document_name.ts\nvar _0002_document_name_exports = /* @__PURE__ */ __exportAll({\n\tdown: () => down,\n\tup: () => up\n});\nasync function up(db) {\n\tawait db.schema.createTable(\"DocumentName\").ifNotExists().addColumn(\"docId\", \"text\", (col) => col.primaryKey()).addColumn(\"name\", \"text\", (col) => col.notNull()).addColumn(\"updatedAt\", \"timestamptz\", (col) => col.notNull().defaultTo(sql`NOW()`)).execute();\n}\nasync function down(db) {\n\tawait db.schema.dropTable(\"DocumentName\").execute();\n}\n//#endregion\n//#region src/schema/migrations/migrator.ts\nconst migrations = {\n\t\"0001_drive_node\": _0001_drive_node_exports,\n\t\"0002_document_name\": _0002_document_name_exports\n};\nconst REACTOR_DRIVE_MIGRATION_TABLE = \"kysely_migration_reactor_drive\";\nconst REACTOR_DRIVE_MIGRATION_LOCK_TABLE = \"kysely_migration_reactor_drive_lock\";\nvar ProgrammaticMigrationProvider = class {\n\tgetMigrations() {\n\t\treturn Promise.resolve(migrations);\n\t}\n};\nasync function runReactorDriveMigrations(db, schema) {\n\ttry {\n\t\tawait sql`CREATE SCHEMA IF NOT EXISTS ${sql.id(schema)}`.execute(db);\n\t} catch (error) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tmigrationsExecuted: [],\n\t\t\terror: error instanceof Error ? error : /* @__PURE__ */ new Error(\"Failed to create schema\")\n\t\t};\n\t}\n\tconst migrator = new Migrator({\n\t\tdb: db.withSchema(schema),\n\t\tprovider: new ProgrammaticMigrationProvider(),\n\t\tmigrationTableSchema: schema,\n\t\tmigrationTableName: REACTOR_DRIVE_MIGRATION_TABLE,\n\t\tmigrationLockTableName: REACTOR_DRIVE_MIGRATION_LOCK_TABLE\n\t});\n\tlet error;\n\tlet results;\n\ttry {\n\t\tconst result = await migrator.migrateToLatest();\n\t\terror = result.error;\n\t\tresults = result.results;\n\t} catch (e) {\n\t\terror = e;\n\t\tresults = [];\n\t}\n\tconst migrationsExecuted = results?.map((result) => result.migrationName) ?? [];\n\tif (error) return {\n\t\tsuccess: false,\n\t\tmigrationsExecuted,\n\t\terror: error instanceof Error ? error : /* @__PURE__ */ new Error(\"Unknown migration error\")\n\t};\n\treturn {\n\t\tsuccess: true,\n\t\tmigrationsExecuted\n\t};\n}\nasync function getReactorDriveMigrationStatus(db, schema) {\n\treturn await new Migrator({\n\t\tdb: db.withSchema(schema),\n\t\tprovider: new ProgrammaticMigrationProvider(),\n\t\tmigrationTableSchema: schema,\n\t\tmigrationTableName: REACTOR_DRIVE_MIGRATION_TABLE,\n\t\tmigrationLockTableName: REACTOR_DRIVE_MIGRATION_LOCK_TABLE\n\t}).getMigrations();\n}\n//#endregion\n//#region src/processors/utils/collisions.ts\n/**\n* Deterministic per-folder name collision rule. Given a desired name and the\n* set of names already taken by siblings, returns the next available name as\n* `requested`, `requested (2)`, `requested (3)`, etc.\n*\n* The rule matches the legacy document-drive module so that migration from\n* the legacy state produces stable suffixes.\n*/\nfunction resolveCollision(requested, takenNames) {\n\tconst taken = /* @__PURE__ */ new Set();\n\tfor (const name of takenNames) taken.add(name);\n\tif (!taken.has(requested)) return requested;\n\tlet suffix = 2;\n\twhile (taken.has(`${requested} (${suffix})`)) suffix += 1;\n\treturn `${requested} (${suffix})`;\n}\n//#endregion\n//#region src/processors/node-processor.ts\nconst NAME_ACTION_TYPES = new Set([\n\t\"CREATE_DOCUMENT\",\n\t\"UPGRADE_DOCUMENT\",\n\t\"SET_NAME\"\n]);\nconst STRUCTURE_ACTION_TYPES = new Set([\n\t\"ADD_RELATIONSHIP\",\n\t\"REMOVE_RELATIONSHIP\",\n\t\"ADD_FOLDER\",\n\t\"UPDATE_FOLDER\",\n\t\"REMOVE_FOLDER\"\n]);\nvar NodeProcessor = class extends BaseReadModel {\n\tdriveDb;\n\tbaseDb;\n\tschema;\n\tconstructor(baseDb, schema, operationIndex, writeCache, consistencyTracker) {\n\t\tconst scopedDb = baseDb.withSchema(schema);\n\t\tsuper(scopedDb, operationIndex, writeCache, consistencyTracker, {\n\t\t\treadModelId: \"reactor-drive-node-processor\",\n\t\t\trebuildStateOnInit: false\n\t\t});\n\t\tthis.driveDb = scopedDb;\n\t\tthis.baseDb = baseDb;\n\t\tthis.schema = schema;\n\t}\n\tasync init() {\n\t\tconst result = await runReactorDriveMigrations(this.baseDb, this.schema);\n\t\tif (!result.success && result.error) throw new Error(`Reactor drive migrations failed: ${result.error.message}`);\n\t\tawait super.init();\n\t}\n\tasync commitOperations(items) {\n\t\tawait this.driveDb.transaction().execute(async (trx) => {\n\t\t\tfor (const item of items) {\n\t\t\t\tconst actionType = item.operation.action.type;\n\t\t\t\tif (NAME_ACTION_TYPES.has(actionType)) {\n\t\t\t\t\tawait this.applyNameOperation(trx, item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (STRUCTURE_ACTION_TYPES.has(actionType)) {\n\t\t\t\t\tawait this.applyStructureOperation(trx, item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (actionType === \"DELETE_DOCUMENT\") await this.applyDeleteDocument(trx, item);\n\t\t\t}\n\t\t});\n\t}\n\tasync applyNameOperation(trx, item) {\n\t\tconst action = item.operation.action;\n\t\tconst docId = item.context.documentId;\n\t\tlet name;\n\t\tif (action.type === \"CREATE_DOCUMENT\") name = action.input.name;\n\t\telse if (action.type === \"UPGRADE_DOCUMENT\") name = (action.input.initialState ?? {}).header?.name;\n\t\telse if (action.type === \"SET_NAME\") name = action.input.name;\n\t\tif (name === void 0) return;\n\t\tawait this.upsertDocumentName(trx, docId, name);\n\t\tconst linkedRows = await trx.selectFrom(\"DriveNode\").selectAll().where(\"id\", \"=\", docId).where(\"kind\", \"=\", \"file\").execute();\n\t\tfor (const row of linkedRows) {\n\t\t\tconst resolved = await this.resolveSiblingName(trx, row.driveId, row.parentFolder, name, docId);\n\t\t\tawait trx.updateTable(\"DriveNode\").set({\n\t\t\t\tname: resolved,\n\t\t\t\trequestedName: name,\n\t\t\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t\t\t}).where(\"driveId\", \"=\", row.driveId).where(\"id\", \"=\", docId).execute();\n\t\t}\n\t}\n\tasync applyStructureOperation(trx, item) {\n\t\tif (item.context.documentType !== \"powerhouse/reactor-drive\") return;\n\t\tconst action = item.operation.action;\n\t\tconst driveId = item.context.documentId;\n\t\tif (action.type === \"ADD_RELATIONSHIP\") {\n\t\t\tconst input = action.input;\n\t\t\tif (input.relationshipType !== \"drive/child\") return;\n\t\t\tawait this.handleAddFileRelationship(trx, driveId, input);\n\t\t\treturn;\n\t\t}\n\t\tif (action.type === \"REMOVE_RELATIONSHIP\") {\n\t\t\tconst input = action.input;\n\t\t\tif (input.relationshipType !== \"drive/child\") return;\n\t\t\tawait trx.deleteFrom(\"DriveNode\").where(\"driveId\", \"=\", driveId).where(\"id\", \"=\", input.targetId).execute();\n\t\t\treturn;\n\t\t}\n\t\tif (action.type === \"ADD_FOLDER\") {\n\t\t\tawait this.handleAddFolder(trx, driveId, action.input);\n\t\t\treturn;\n\t\t}\n\t\tif (action.type === \"UPDATE_FOLDER\") {\n\t\t\tawait this.handleUpdateFolder(trx, driveId, action.input);\n\t\t\treturn;\n\t\t}\n\t\tif (action.type === \"REMOVE_FOLDER\") {\n\t\t\tconst input = action.input;\n\t\t\tawait trx.deleteFrom(\"DriveNode\").where(\"driveId\", \"=\", driveId).where(\"id\", \"=\", input.folderId).execute();\n\t\t}\n\t}\n\tasync applyDeleteDocument(trx, item) {\n\t\tconst docId = item.operation.action.input.documentId || item.context.documentId;\n\t\tawait trx.deleteFrom(\"DriveNode\").where(\"id\", \"=\", docId).execute();\n\t\tawait trx.deleteFrom(\"DocumentName\").where(\"docId\", \"=\", docId).execute();\n\t}\n\tasync handleAddFileRelationship(trx, driveId, input) {\n\t\tconst metadata = this.parseFileMetadata(input);\n\t\tconst parentFolder = metadata.parentFolderId ?? null;\n\t\tconst documentType = metadata.documentType;\n\t\tconst requestedName = await this.lookupDocumentName(trx, input.targetId) ?? \"\";\n\t\tconst resolved = await this.resolveSiblingName(trx, driveId, parentFolder, requestedName, input.targetId);\n\t\tawait trx.insertInto(\"DriveNode\").values({\n\t\t\tdriveId,\n\t\t\tid: input.targetId,\n\t\t\tkind: \"file\",\n\t\t\tname: resolved,\n\t\t\trequestedName,\n\t\t\tparentFolder,\n\t\t\tdocumentType\n\t\t}).onConflict((oc) => oc.columns([\"driveId\", \"id\"]).doUpdateSet({\n\t\t\tparentFolder,\n\t\t\tname: resolved,\n\t\t\trequestedName,\n\t\t\tkind: \"file\",\n\t\t\tdocumentType,\n\t\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t\t})).execute();\n\t}\n\tasync handleAddFolder(trx, driveId, input) {\n\t\tconst parentFolder = input.parentFolderId ?? null;\n\t\tconst resolved = await this.resolveSiblingName(trx, driveId, parentFolder, input.name, input.folderId);\n\t\tawait trx.insertInto(\"DriveNode\").values({\n\t\t\tdriveId,\n\t\t\tid: input.folderId,\n\t\t\tkind: \"folder\",\n\t\t\tname: resolved,\n\t\t\trequestedName: input.name,\n\t\t\tparentFolder,\n\t\t\tdocumentType: null\n\t\t}).onConflict((oc) => oc.columns([\"driveId\", \"id\"]).doUpdateSet({\n\t\t\tparentFolder,\n\t\t\tname: resolved,\n\t\t\trequestedName: input.name,\n\t\t\tkind: \"folder\",\n\t\t\tdocumentType: null,\n\t\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t\t})).execute();\n\t}\n\tasync handleUpdateFolder(trx, driveId, input) {\n\t\tconst row = await trx.selectFrom(\"DriveNode\").selectAll().where(\"driveId\", \"=\", driveId).where(\"id\", \"=\", input.folderId).executeTakeFirst();\n\t\tif (!row) return;\n\t\tconst nextParentFolder = input.parentFolderId === void 0 ? row.parentFolder : input.parentFolderId ?? null;\n\t\tconst nextRequestedName = typeof input.name === \"string\" ? input.name : row.requestedName;\n\t\tconst resolved = await this.resolveSiblingName(trx, driveId, nextParentFolder, nextRequestedName, input.folderId);\n\t\tawait trx.updateTable(\"DriveNode\").set({\n\t\t\tparentFolder: nextParentFolder,\n\t\t\tname: resolved,\n\t\t\trequestedName: nextRequestedName,\n\t\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t\t}).where(\"driveId\", \"=\", driveId).where(\"id\", \"=\", input.folderId).execute();\n\t}\n\tasync resolveSiblingName(trx, driveId, parentFolder, requested, excludeId) {\n\t\tlet query = trx.selectFrom(\"DriveNode\").select(\"name\").where(\"driveId\", \"=\", driveId).where(\"id\", \"!=\", excludeId);\n\t\tquery = parentFolder === null ? query.where(\"parentFolder\", \"is\", null) : query.where(\"parentFolder\", \"=\", parentFolder);\n\t\treturn resolveCollision(requested, (await query.execute()).map((r) => r.name));\n\t}\n\tasync lookupDocumentName(trx, docId) {\n\t\treturn (await trx.selectFrom(\"DocumentName\").select(\"name\").where(\"docId\", \"=\", docId).executeTakeFirst())?.name;\n\t}\n\tparseFileMetadata(input) {\n\t\tconst metadata = input.metadata;\n\t\tif (!metadata || typeof metadata !== \"object\" || metadata.kind !== \"file\" || typeof metadata.documentType !== \"string\") throw new Error(`ADD_RELATIONSHIP for target ${input.targetId}: missing or invalid drive/child file metadata (expected { kind: \"file\", parentFolderId, documentType })`);\n\t\tconst typed = metadata;\n\t\treturn {\n\t\t\tkind: \"file\",\n\t\t\tparentFolderId: typed.parentFolderId ?? null,\n\t\t\tdocumentType: typed.documentType\n\t\t};\n\t}\n\tasync upsertDocumentName(trx, docId, name) {\n\t\tawait trx.insertInto(\"DocumentName\").values({\n\t\t\tdocId,\n\t\t\tname\n\t\t}).onConflict((oc) => oc.column(\"docId\").doUpdateSet({\n\t\t\tname,\n\t\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t\t})).execute();\n\t}\n};\n//#endregion\n//#region src/read-model/drive-node-view.ts\nconst DEFAULT_LIMIT$1 = 100;\nfunction parseListChildrenPaging(paging) {\n\tif (paging === void 0) return {\n\t\tlimit: DEFAULT_LIMIT$1,\n\t\tcursor: null\n\t};\n\tif (!Number.isInteger(paging.limit) || paging.limit < 1) throw new Error(`Invalid paging limit: ${String(paging.limit)} (must be an integer >= 1)`);\n\tif (paging.cursor === \"\") return {\n\t\tlimit: paging.limit,\n\t\tcursor: null\n\t};\n\treturn {\n\t\tlimit: paging.limit,\n\t\tcursor: decodeKeysetCursor(paging.cursor)\n\t};\n}\nfunction encodeKeysetCursor(createdAt, id) {\n\treturn globalThis.btoa(JSON.stringify({\n\t\tcreatedAt: createdAt.toISOString(),\n\t\tid\n\t}));\n}\nfunction decodeKeysetCursor(cursor) {\n\tlet decoded;\n\ttry {\n\t\tdecoded = globalThis.atob(cursor);\n\t} catch {\n\t\tthrow new Error(`Invalid paging cursor: ${JSON.stringify(cursor)} (must be a keyset cursor returned by a prior page)`);\n\t}\n\tlet parsed;\n\ttry {\n\t\tparsed = JSON.parse(decoded);\n\t} catch {\n\t\tthrow new Error(`Invalid paging cursor: ${JSON.stringify(cursor)} (must be a keyset cursor returned by a prior page)`);\n\t}\n\tif (parsed === null || typeof parsed !== \"object\" || typeof parsed.createdAt !== \"string\" || typeof parsed.id !== \"string\") throw new Error(`Invalid paging cursor: ${JSON.stringify(cursor)} (must be a keyset cursor returned by a prior page)`);\n\tconst createdAt = new Date(parsed.createdAt);\n\tif (Number.isNaN(createdAt.getTime())) throw new Error(`Invalid paging cursor: ${JSON.stringify(cursor)} (createdAt is not a valid timestamp)`);\n\treturn {\n\t\tcreatedAt,\n\t\tid: parsed.id\n\t};\n}\nvar DriveNodeView = class {\n\tconstructor(db) {\n\t\tthis.db = db;\n\t}\n\tasync getNode(driveId, nodeId) {\n\t\tconst row = await this.db.selectFrom(\"DriveNode\").selectAll().where(\"driveId\", \"=\", driveId).where(\"id\", \"=\", nodeId).executeTakeFirst();\n\t\tif (!row) return void 0;\n\t\treturn rowToNode(row);\n\t}\n\tasync listChildren(driveId, parentFolder, paging) {\n\t\tconst { limit, cursor } = parseListChildrenPaging(paging);\n\t\tlet query = this.db.selectFrom(\"DriveNode\").selectAll().where(\"driveId\", \"=\", driveId);\n\t\tif (parentFolder === null) query = query.where(\"parentFolder\", \"is\", null);\n\t\telse if (parentFolder !== void 0) query = query.where(\"parentFolder\", \"=\", parentFolder);\n\t\tif (cursor !== null) query = query.where((eb) => eb(eb.refTuple(\"createdAt\", \"id\"), \">\", eb.tuple(cursor.createdAt, cursor.id)));\n\t\tconst rows = await query.orderBy(\"createdAt\", \"asc\").orderBy(\"id\", \"asc\").limit(limit + 1).execute();\n\t\tconst hasMore = rows.length > limit;\n\t\tconst sliced = hasMore ? rows.slice(0, limit) : rows;\n\t\tconst last = sliced[sliced.length - 1];\n\t\treturn {\n\t\t\tresults: sliced.map(rowToNode),\n\t\t\toptions: {\n\t\t\t\tcursor: paging?.cursor ?? \"\",\n\t\t\t\tlimit\n\t\t\t},\n\t\t\tnextCursor: hasMore ? encodeKeysetCursor(last.createdAt, last.id) : void 0\n\t\t};\n\t}\n\tasync listAll(driveId) {\n\t\treturn (await this.db.selectFrom(\"DriveNode\").selectAll().where(\"driveId\", \"=\", driveId).orderBy(\"createdAt\", \"asc\").orderBy(\"id\", \"asc\").execute()).map(rowToNode);\n\t}\n\tasync getDescendants(driveId, root) {\n\t\treturn (await this.db.withRecursive(\"descendants\", (qb) => qb.selectFrom(\"DriveNode\").select([\n\t\t\t\"driveId\",\n\t\t\t\"id\",\n\t\t\t\"kind\",\n\t\t\t\"name\",\n\t\t\t\"requestedName\",\n\t\t\t\"parentFolder\",\n\t\t\t\"documentType\",\n\t\t\t\"createdAt\"\n\t\t]).where(\"driveId\", \"=\", driveId).where(\"id\", \"=\", root).unionAll(qb.selectFrom(\"DriveNode\").innerJoin(\"descendants\", \"DriveNode.parentFolder\", \"descendants.id\").where(\"DriveNode.driveId\", \"=\", driveId).select([\n\t\t\t\"DriveNode.driveId\",\n\t\t\t\"DriveNode.id\",\n\t\t\t\"DriveNode.kind\",\n\t\t\t\"DriveNode.name\",\n\t\t\t\"DriveNode.requestedName\",\n\t\t\t\"DriveNode.parentFolder\",\n\t\t\t\"DriveNode.documentType\",\n\t\t\t\"DriveNode.createdAt\"\n\t\t]))).selectFrom(\"descendants\").select([\n\t\t\t\"driveId\",\n\t\t\t\"id\",\n\t\t\t\"kind\",\n\t\t\t\"name\",\n\t\t\t\"requestedName\",\n\t\t\t\"parentFolder\",\n\t\t\t\"documentType\"\n\t\t]).orderBy(\"createdAt\", \"asc\").orderBy(\"id\", \"asc\").execute()).map(rowToNode);\n\t}\n};\nfunction rowToNode(row) {\n\tif (row.kind === \"file\") {\n\t\tif (row.documentType === null) throw new Error(`DriveNode ${row.driveId}/${row.id}: file row has null documentType, which violates the schema CHECK constraint`);\n\t\treturn {\n\t\t\tkind: \"file\",\n\t\t\tid: row.id,\n\t\t\tdriveId: row.driveId,\n\t\t\tparentFolder: row.parentFolder,\n\t\t\tname: row.name,\n\t\t\tdocumentType: row.documentType\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"folder\",\n\t\tid: row.id,\n\t\tdriveId: row.driveId,\n\t\tparentFolder: row.parentFolder,\n\t\tname: row.name\n\t};\n}\n//#endregion\n//#region src/client/reactor-drive-client.ts\n/**\n* Implementation of {@link IDriveClient} backed by the reactor's relationship\n* primitives and the drive-scoped folder actions. Folder structure lives in\n* the operation log (ADD_FOLDER/UPDATE_FOLDER/REMOVE_FOLDER + ADD_RELATIONSHIP\n* for files) and is materialised by `NodeProcessor` into the `DriveNode`\n* table consumed via {@link IDriveReadModel}.\n*/\nvar ReactorDriveClient = class {\n\treactor;\n\treadModel;\n\tconstructor(args) {\n\t\tthis.reactor = args.reactor;\n\t\tthis.readModel = args.readModel;\n\t}\n\tasync create(input, signal) {\n\t\tconst driveDoc = reactorDriveCreateDocument({ global: {\n\t\t\tname: input.global.name,\n\t\t\ticon: input.global.icon ?? null\n\t\t} });\n\t\tif (input.local) {\n\t\t\tif (typeof input.local.sharingType === \"string\") driveDoc.state.local.sharingType = input.local.sharingType;\n\t\t\tif (typeof input.local.availableOffline === \"boolean\") driveDoc.state.local.availableOffline = input.local.availableOffline;\n\t\t}\n\t\tif (input.preferredEditor) driveDoc.header.meta = {\n\t\t\t...driveDoc.header.meta,\n\t\t\tpreferredEditor: input.preferredEditor\n\t\t};\n\t\tconst created = await this.reactor.create(driveDoc, void 0, signal);\n\t\treturn this.toLegacyDriveDocument(created, created.header.id);\n\t}\n\tasync addFile(driveIdentifier, document, parentFolder, signal) {\n\t\tconst documentId = document.header.id;\n\t\tconst createInput = {\n\t\t\tmodel: document.header.documentType,\n\t\t\tversion: 0,\n\t\t\tdocumentId,\n\t\t\tsigning: {\n\t\t\t\tsignature: documentId,\n\t\t\t\tpublicKey: document.header.sig.publicKey,\n\t\t\t\tnonce: document.header.sig.nonce,\n\t\t\t\tcreatedAtUtcIso: document.header.createdAtUtcIso,\n\t\t\t\tdocumentType: document.header.documentType\n\t\t\t},\n\t\t\tslug: document.header.slug,\n\t\t\tname: document.header.name,\n\t\t\tbranch: document.header.branch,\n\t\t\tmeta: document.header.meta,\n\t\t\tprotocolVersions: document.header.protocolVersions ?? { \"base-reducer\": 2 }\n\t\t};\n\t\tconst metadata = {\n\t\t\tkind: \"file\",\n\t\t\tparentFolderId: parentFolder ?? null,\n\t\t\tdocumentType: document.header.documentType\n\t\t};\n\t\tconst request = { jobs: [{\n\t\t\tkey: \"create\",\n\t\t\tdocumentId,\n\t\t\tscope: \"document\",\n\t\t\tbranch: \"main\",\n\t\t\tactions: [createDocumentAction(createInput), upgradeDocumentAction({\n\t\t\t\tdocumentId,\n\t\t\t\tmodel: document.header.documentType,\n\t\t\t\tfromVersion: 0,\n\t\t\t\ttoVersion: document.state.document.version,\n\t\t\t\tinitialState: document.state\n\t\t\t})],\n\t\t\tdependsOn: []\n\t\t}, {\n\t\t\tkey: \"link\",\n\t\t\tdocumentId: driveIdentifier,\n\t\t\tscope: \"document\",\n\t\t\tbranch: \"main\",\n\t\t\tactions: [addRelationshipAction(driveIdentifier, documentId, DRIVE_CHILD_RELATIONSHIP_TYPE, metadata)],\n\t\t\tdependsOn: [\"create\"]\n\t\t}] };\n\t\tawait this.reactor.executeBatch(request, signal);\n\t\treturn this.reactor.get(documentId, void 0, signal);\n\t}\n\tasync addFolder(driveIdentifier, name, parentFolder, signal) {\n\t\tconst folderId = generateId();\n\t\tawait this.reactor.execute(driveIdentifier, \"main\", [addFolderAction({\n\t\t\tfolderId,\n\t\t\tparentFolderId: parentFolder ?? null,\n\t\t\tname\n\t\t})], signal);\n\t\treturn {\n\t\t\tid: folderId,\n\t\t\tkind: \"folder\",\n\t\t\tname,\n\t\t\tparentFolder: parentFolder ?? null\n\t\t};\n\t}\n\tasync removeNode(driveIdentifier, nodeId, signal) {\n\t\tconst node = await this.readModel.getNode(driveIdentifier, nodeId, signal);\n\t\tif (!node) throw new Error(`Node ${nodeId} not found in drive ${driveIdentifier}`);\n\t\tif (node.kind === \"folder\") {\n\t\t\tconst subtree = await this.readModel.getDescendants(driveIdentifier, nodeId, signal);\n\t\t\tconst fileDescendants = subtree.filter((n) => n.kind === \"file\");\n\t\t\tconst subFolders = subtree.filter((n) => n.kind === \"folder\").filter((f) => f.id !== nodeId);\n\t\t\tconst deepestFirstFolders = this.orderDeepestFirst(subFolders, nodeId);\n\t\t\tconst batch = [\n\t\t\t\t...fileDescendants.map((f) => removeRelationshipAction(driveIdentifier, f.id, DRIVE_CHILD_RELATIONSHIP_TYPE)),\n\t\t\t\t...deepestFirstFolders.map((f) => removeFolderAction({ folderId: f.id })),\n\t\t\t\tremoveFolderAction({ folderId: nodeId })\n\t\t\t];\n\t\t\tawait this.reactor.execute(driveIdentifier, \"main\", batch, signal);\n\t\t\tfor (const file of fileDescendants) await this.reactor.deleteDocument(file.id, \"cascade\", signal);\n\t\t\treturn;\n\t\t}\n\t\tawait this.reactor.execute(driveIdentifier, \"main\", [removeRelationshipAction(driveIdentifier, nodeId, DRIVE_CHILD_RELATIONSHIP_TYPE)], signal);\n\t\tawait this.reactor.deleteDocument(nodeId, void 0, signal);\n\t}\n\tasync renameNode(driveIdentifier, nodeId, name, signal) {\n\t\tconst node = await this.readModel.getNode(driveIdentifier, nodeId, signal);\n\t\tif (!node) throw new Error(`Node ${nodeId} not found in drive ${driveIdentifier}`);\n\t\tif (node.kind === \"file\") await this.reactor.rename(nodeId, name, \"main\", signal);\n\t\telse await this.reactor.execute(driveIdentifier, \"main\", [updateFolderAction({\n\t\t\tfolderId: nodeId,\n\t\t\tname\n\t\t})], signal);\n\t\tconst updated = await this.readModel.getNode(driveIdentifier, nodeId, signal);\n\t\tif (!updated) throw new Error(\"Node missing from drive after rename\");\n\t\treturn this.toLegacyNode(updated);\n\t}\n\tasync setPreferredEditorOnNode(nodeId, preferredEditor, signal) {\n\t\treturn this.reactor.setPreferredEditor(nodeId, preferredEditor, \"main\", signal);\n\t}\n\tasync moveNode(driveIdentifier, srcNodeId, targetParentFolderId, signal) {\n\t\tconst node = await this.readModel.getNode(driveIdentifier, srcNodeId, signal);\n\t\tif (!node) throw new Error(`Node ${srcNodeId} not found in drive ${driveIdentifier}`);\n\t\tif (node.kind === \"folder\") await this.reactor.execute(driveIdentifier, \"main\", [updateFolderAction({\n\t\t\tfolderId: srcNodeId,\n\t\t\tparentFolderId: targetParentFolderId ?? null\n\t\t})], signal);\n\t\telse {\n\t\t\tconst metadata = {\n\t\t\t\tkind: \"file\",\n\t\t\t\tparentFolderId: targetParentFolderId ?? null,\n\t\t\t\tdocumentType: node.documentType\n\t\t\t};\n\t\t\tawait this.reactor.execute(driveIdentifier, \"main\", [removeRelationshipAction(driveIdentifier, srcNodeId, DRIVE_CHILD_RELATIONSHIP_TYPE), addRelationshipAction(driveIdentifier, srcNodeId, DRIVE_CHILD_RELATIONSHIP_TYPE, metadata)], signal);\n\t\t}\n\t\tconst drive = await this.reactor.get(driveIdentifier, void 0, signal);\n\t\treturn this.toLegacyDriveDocument(drive, driveIdentifier);\n\t}\n\tasync copyNode(driveIdentifier, srcNodeId, targetParentFolderId, signal) {\n\t\tif (!await this.readModel.getNode(driveIdentifier, srcNodeId, signal)) throw new Error(`Node ${srcNodeId} not found in drive ${driveIdentifier}`);\n\t\tconst subtree = await this.readModel.getDescendants(driveIdentifier, srcNodeId, signal);\n\t\tif (targetParentFolderId !== void 0 && subtree.some((n) => n.id === targetParentFolderId)) throw new Error(`Cannot copy node ${srcNodeId} into itself or one of its descendants (target: ${targetParentFolderId})`);\n\t\tconst idMap = /* @__PURE__ */ new Map();\n\t\tfor (const node of subtree) idMap.set(node.id, generateId());\n\t\tconst jobs = [];\n\t\tconst driveActions = [];\n\t\tconst fileCreateKeys = [];\n\t\tfor (const node of subtree) {\n\t\t\tconst newId = idMap.get(node.id);\n\t\t\tlet newParent;\n\t\t\tif (node.id === srcNodeId) newParent = targetParentFolderId ?? null;\n\t\t\telse {\n\t\t\t\tif (node.parentFolder == null) throw new Error(`copyNode: descendant ${node.id} has no parentFolder`);\n\t\t\t\tconst mapped = idMap.get(node.parentFolder);\n\t\t\t\tif (mapped === void 0) throw new Error(`copyNode: descendant ${node.id} parent ${node.parentFolder} missing from idMap`);\n\t\t\t\tnewParent = mapped;\n\t\t\t}\n\t\t\tif (node.kind === \"folder\") {\n\t\t\t\tdriveActions.push(addFolderAction({\n\t\t\t\t\tfolderId: newId,\n\t\t\t\t\tparentFolderId: newParent,\n\t\t\t\t\tname: node.name\n\t\t\t\t}));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst srcDoc = await this.reactor.get(node.id, void 0, signal);\n\t\t\tconst documentType = srcDoc.header.documentType;\n\t\t\tconst { results: allModules } = await this.reactor.getDocumentModelModules();\n\t\t\tconst modulesForType = allModules.filter((m) => m.documentModel.global.id === documentType);\n\t\t\tif (modulesForType.length === 0) throw new Error(`Document model module not found for type: ${documentType}`);\n\t\t\tconst reducers = {};\n\t\t\tfor (const m of modulesForType) reducers[m.version ?? 1] = m.reducer;\n\t\t\tconst config = { reducers };\n\t\t\tconst duplicated = replayDocumentVersioned(srcDoc.initialState, srcDoc.operations, config, createPresignedHeader(newId, documentType));\n\t\t\tduplicated.header.name = node.name;\n\t\t\tconst createInput = {\n\t\t\t\tmodel: duplicated.header.documentType,\n\t\t\t\tversion: 0,\n\t\t\t\tdocumentId: newId,\n\t\t\t\tsigning: {\n\t\t\t\t\tsignature: newId,\n\t\t\t\t\tpublicKey: duplicated.header.sig.publicKey,\n\t\t\t\t\tnonce: duplicated.header.sig.nonce,\n\t\t\t\t\tcreatedAtUtcIso: duplicated.header.createdAtUtcIso,\n\t\t\t\t\tdocumentType: duplicated.header.documentType\n\t\t\t\t},\n\t\t\t\tslug: duplicated.header.slug,\n\t\t\t\tname: duplicated.header.name,\n\t\t\t\tbranch: duplicated.header.branch,\n\t\t\t\tmeta: duplicated.header.meta,\n\t\t\t\tprotocolVersions: duplicated.header.protocolVersions ?? { \"base-reducer\": 2 }\n\t\t\t};\n\t\t\tconst createKey = `create:${newId}`;\n\t\t\tjobs.push({\n\t\t\t\tkey: createKey,\n\t\t\t\tdocumentId: newId,\n\t\t\t\tscope: \"document\",\n\t\t\t\tbranch: \"main\",\n\t\t\t\tactions: [createDocumentAction(createInput), upgradeDocumentAction({\n\t\t\t\t\tdocumentId: newId,\n\t\t\t\t\tmodel: duplicated.header.documentType,\n\t\t\t\t\tfromVersion: 0,\n\t\t\t\t\ttoVersion: duplicated.state.document.version,\n\t\t\t\t\tinitialState: duplicated.state\n\t\t\t\t})],\n\t\t\t\tdependsOn: []\n\t\t\t});\n\t\t\tfileCreateKeys.push(createKey);\n\t\t\tconst metadata = {\n\t\t\t\tkind: \"file\",\n\t\t\t\tparentFolderId: newParent,\n\t\t\t\tdocumentType: duplicated.header.documentType\n\t\t\t};\n\t\t\tdriveActions.push(addRelationshipAction(driveIdentifier, newId, DRIVE_CHILD_RELATIONSHIP_TYPE, metadata));\n\t\t}\n\t\tif (driveActions.length > 0) jobs.push({\n\t\t\tkey: \"drive\",\n\t\t\tdocumentId: driveIdentifier,\n\t\t\tscope: \"document\",\n\t\t\tbranch: \"main\",\n\t\t\tactions: driveActions,\n\t\t\tdependsOn: fileCreateKeys\n\t\t});\n\t\tif (jobs.length > 0) {\n\t\t\tconst request = { jobs };\n\t\t\tawait this.reactor.executeBatch(request, signal);\n\t\t}\n\t\tconst drive = await this.reactor.get(driveIdentifier, void 0, signal);\n\t\treturn this.toLegacyDriveDocument(drive, driveIdentifier);\n\t}\n\tasync getNode(driveIdentifier, nodeId, signal) {\n\t\tconst node = await this.readModel.getNode(driveIdentifier, nodeId, signal);\n\t\tif (!node) throw new Error(`Node ${nodeId} not found in drive ${driveIdentifier}`);\n\t\treturn this.toLegacyNode(node);\n\t}\n\tasync listNodes(driveIdentifier, parentFolder, paging, signal) {\n\t\tconst page = await this.readModel.listChildren(driveIdentifier, parentFolder, paging, signal);\n\t\treturn {\n\t\t\tresults: page.results.map((node) => this.toLegacyNode(node)),\n\t\t\toptions: page.options,\n\t\t\t...page.nextCursor !== void 0 ? { nextCursor: page.nextCursor } : {},\n\t\t\t...page.totalCount !== void 0 ? { totalCount: page.totalCount } : {}\n\t\t};\n\t}\n\ttoLegacyNode(node) {\n\t\tif (node.kind === \"file\") {\n\t\t\tconst file = node;\n\t\t\treturn {\n\t\t\t\tid: file.id,\n\t\t\t\tkind: \"file\",\n\t\t\t\tname: file.name,\n\t\t\t\tparentFolder: file.parentFolder,\n\t\t\t\tdocumentType: file.documentType\n\t\t\t};\n\t\t}\n\t\tconst folder = node;\n\t\treturn {\n\t\t\tid: folder.id,\n\t\t\tkind: \"folder\",\n\t\t\tname: folder.name,\n\t\t\tparentFolder: folder.parentFolder\n\t\t};\n\t}\n\tasync toLegacyDriveDocument(doc, driveId) {\n\t\tif (doc.header.documentType !== \"powerhouse/reactor-drive\") throw new Error(`Document ${doc.header.id} is not a reactor-drive document`);\n\t\tconst allNodes = await this.readModel.listAll(driveId);\n\t\tconst legacy = structuredClone(doc);\n\t\tconst existingGlobal = legacy.state.global;\n\t\tlegacy.state.global = {\n\t\t\tname: existingGlobal.name ?? \"\",\n\t\t\ticon: existingGlobal.icon ?? null,\n\t\t\tnodes: allNodes.map((n) => this.toLegacyNode(n))\n\t\t};\n\t\treturn legacy;\n\t}\n\torderDeepestFirst(folders, rootId) {\n\t\tconst depthById = /* @__PURE__ */ new Map();\n\t\tconst compute = (id) => {\n\t\t\tif (id === rootId) return 0;\n\t\t\tconst cached = depthById.get(id);\n\t\t\tif (cached !== void 0) return cached;\n\t\t\tconst folder = folders.find((f) => f.id === id);\n\t\t\tif (!folder) return 0;\n\t\t\tconst depth = compute(folder.parentFolder ?? rootId) + 1;\n\t\t\tdepthById.set(id, depth);\n\t\t\treturn depth;\n\t\t};\n\t\treturn folders.slice().sort((a, b) => compute(b.id) - compute(a.id));\n\t}\n};\n//#endregion\n//#region src/subgraph/schema.ts\nconst typeDefs = gql`\n enum ReactorDriveNodeKind {\n FILE\n FOLDER\n }\n\n input ReactorDrivePagingInput {\n cursor: String\n limit: Int\n }\n\n type ReactorDriveFileNode {\n id: ID!\n driveId: ID!\n name: String!\n parentFolder: ID\n documentType: String!\n }\n\n type ReactorDriveFolderNode {\n id: ID!\n driveId: ID!\n name: String!\n parentFolder: ID\n children(\n paging: ReactorDrivePagingInput\n kind: ReactorDriveNodeKind\n ): ReactorDriveNodePage!\n }\n\n union ReactorDriveNode = ReactorDriveFileNode | ReactorDriveFolderNode\n\n type ReactorDriveNodePage {\n results: [ReactorDriveNode!]!\n nextCursor: String\n hasMore: Boolean!\n totalCount: Int\n }\n\n type ReactorDrive {\n id: ID!\n name: String!\n icon: String\n sharingType: String!\n availableOffline: Boolean!\n rootNodes(\n paging: ReactorDrivePagingInput\n kind: ReactorDriveNodeKind\n ): ReactorDriveNodePage!\n }\n\n type Query {\n reactorDrive(id: ID!): ReactorDrive\n reactorDriveNode(driveId: ID!, id: ID!): ReactorDriveNode\n reactorDriveDescendants(driveId: ID!, root: ID!): [ReactorDriveNode!]!\n }\n`;\n//#endregion\n//#region src/subgraph/resolvers.ts\nconst DEFAULT_LIMIT = 100;\nfunction toPaging(input) {\n\tif (!input) return void 0;\n\treturn {\n\t\tcursor: input.cursor ?? \"\",\n\t\tlimit: input.limit ?? DEFAULT_LIMIT\n\t};\n}\nfunction filterByKind(page, kind) {\n\tif (!kind) return page;\n\tconst wanted = kind === \"FILE\" ? \"file\" : \"folder\";\n\treturn {\n\t\t...page,\n\t\tresults: page.results.filter((node) => node.kind === wanted)\n\t};\n}\nfunction shapePage(page) {\n\treturn {\n\t\tresults: page.results,\n\t\tnextCursor: page.nextCursor,\n\t\thasMore: page.nextCursor !== void 0,\n\t\ttotalCount: page.totalCount\n\t};\n}\n/**\n* Builds GraphQL resolvers backed by the drive read model. The resolvers are\n* pure — every external dependency is read off the GraphQL context. Wiring\n* the resolvers into a subgraph (e.g. `reactor-api`'s `ISubgraph`) is the\n* caller's responsibility.\n*/\nfunction createReactorDriveResolvers() {\n\treturn {\n\t\tQuery: {\n\t\t\tasync reactorDrive(_root, args, ctx) {\n\t\t\t\tconst document = await ctx.reactorClient.get(args.id);\n\t\t\t\tif (document.header.documentType !== \"powerhouse/reactor-drive\") return null;\n\t\t\t\treturn {\n\t\t\t\t\tid: document.header.id,\n\t\t\t\t\tname: document.state.global.name,\n\t\t\t\t\ticon: document.state.global.icon,\n\t\t\t\t\tsharingType: document.state.local.sharingType,\n\t\t\t\t\tavailableOffline: document.state.local.availableOffline\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync reactorDriveNode(_root, args, ctx) {\n\t\t\t\treturn ctx.readModel.getNode(args.driveId, args.id);\n\t\t\t},\n\t\t\tasync reactorDriveDescendants(_root, args, ctx) {\n\t\t\t\treturn ctx.readModel.getDescendants(args.driveId, args.root);\n\t\t\t}\n\t\t},\n\t\tReactorDrive: { async rootNodes(parent, args, ctx) {\n\t\t\treturn shapePage(filterByKind(await ctx.readModel.listChildren(parent.id, null, toPaging(args.paging)), args.kind));\n\t\t} },\n\t\tReactorDriveFolderNode: { async children(parent, args, ctx) {\n\t\t\treturn shapePage(filterByKind(await ctx.readModel.listChildren(parent.driveId, parent.id, toPaging(args.paging)), args.kind));\n\t\t} },\n\t\tReactorDriveNode: { __resolveType(node) {\n\t\t\treturn node.kind === \"file\" ? \"ReactorDriveFileNode\" : \"ReactorDriveFolderNode\";\n\t\t} }\n\t};\n}\n//#endregion\n//#region src/migration/migrate-legacy-state.ts\n/**\n* Translates a legacy `document-drive` `state.global.nodes` array into the\n* action vocabulary used by the new reactor-drive module.\n*\n* Folder nodes are emitted as `ADD_FOLDER` actions targeting the drive\n* document. File nodes are emitted as `ADD_RELATIONSHIP` actions on the drive\n* with `drive/child` metadata carrying the parent folder id. File nodes\n* assume the underlying PHDocument still exists under the same id — the\n* migration only re-links it into the new drive, it does not recreate\n* documents.\n*\n* Re-running the migration is safe: existing `DriveNode` rows are skipped\n* so already-migrated nodes are left untouched.\n*/\nasync function migrateLegacyDriveState(args) {\n\tconst { reactor, readModel, driveId, nodes, signal } = args;\n\tconst branch = args.branch ?? \"main\";\n\tconst ordered = orderLegacyNodes(nodes);\n\tconst actions = [];\n\tlet skippedExisting = 0;\n\tfor (const node of ordered) {\n\t\tif (await readModel.getNode(driveId, node.id, signal)) {\n\t\t\tskippedExisting += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tactions.push(toAction(driveId, node));\n\t}\n\tif (actions.length === 0) return {\n\t\temittedActions: 0,\n\t\tskippedExisting\n\t};\n\tawait reactor.execute(driveId, branch, actions, signal);\n\treturn {\n\t\temittedActions: actions.length,\n\t\tskippedExisting\n\t};\n}\nfunction toAction(driveId, node) {\n\tif (node.kind === \"folder\") return addFolderAction({\n\t\tfolderId: node.id,\n\t\tparentFolderId: node.parentFolder ?? null,\n\t\tname: node.name\n\t});\n\tconst fileNode = node;\n\tconst metadata = {\n\t\tkind: \"file\",\n\t\tparentFolderId: fileNode.parentFolder ?? null,\n\t\tdocumentType: fileNode.documentType\n\t};\n\treturn addRelationshipAction(driveId, fileNode.id, DRIVE_CHILD_RELATIONSHIP_TYPE, metadata);\n}\n/**\n* Sorts legacy nodes so that any folder appears before its children. The\n* legacy state stores nodes in insertion order, which usually already\n* satisfies that property, but defensive sorting keeps replay deterministic\n* if the input was constructed out of order.\n*/\nfunction orderLegacyNodes(nodes) {\n\tconst byId = /* @__PURE__ */ new Map();\n\tfor (const node of nodes) byId.set(node.id, node);\n\tconst visited = /* @__PURE__ */ new Set();\n\tconst ordered = [];\n\tfor (const start of nodes) {\n\t\tif (visited.has(start.id)) continue;\n\t\tconst chain = [];\n\t\tconst seenInWalk = /* @__PURE__ */ new Set();\n\t\tlet current = start;\n\t\twhile (current && !visited.has(current.id) && !seenInWalk.has(current.id)) {\n\t\t\tseenInWalk.add(current.id);\n\t\t\tchain.push(current);\n\t\t\tconst parentId = current.parentFolder;\n\t\t\tcurrent = parentId ? byId.get(parentId) : void 0;\n\t\t}\n\t\twhile (chain.length > 0) {\n\t\t\tconst node = chain.pop();\n\t\t\tif (visited.has(node.id)) continue;\n\t\t\tvisited.add(node.id);\n\t\t\tordered.push(node);\n\t\t}\n\t}\n\treturn ordered;\n}\n//#endregion\nexport { DRIVE_CHILD_RELATIONSHIP_TYPE, DriveNodeView, NodeProcessor, REACTOR_DRIVE_DOCUMENT_TYPE, REACTOR_DRIVE_FILE_EXTENSION, ReactorDriveClient, addFolderAction, createReactorDriveResolvers, getReactorDriveMigrationStatus, migrateLegacyDriveState, reactorDriveActions, reactorDriveCreateDocument, reactorDriveCreateState, reactorDriveDocumentModelModule, reactorDriveDocumentReducer, reactorDriveStateReducer, typeDefs as reactorDriveSubgraphTypeDefs, removeFolderAction, resolveCollision, runReactorDriveMigrations, setAvailableOfflineAction, setDriveIconAction, setDriveNameAction, setSharingTypeAction, updateFolderAction };\n\n//# sourceMappingURL=index.js.map","import { reactorDriveDocumentModelModule } from \"@powerhousedao/reactor-drive\";\nimport { driveDocumentModelModule } from \"@powerhousedao/shared/document-drive\";\nimport { type DocumentModelModule } from \"@powerhousedao/shared/document-model\";\nimport { documentModelDocumentModelModule } from \"document-model\";\nexport const documentModels: DocumentModelModule<any>[] = [\n documentModelDocumentModelModule,\n driveDocumentModelModule,\n reactorDriveDocumentModelModule,\n];\n","import type { EditorModule } from \"@powerhousedao/shared/document-model\";\nimport { DocumentModelEditor } from \"./document-model-editor/module.js\";\nimport { GenericDriveExplorer } from \"./generic-drive-explorer/module.js\";\n\nexport const editors: EditorModule[] = [\n DocumentModelEditor,\n GenericDriveExplorer,\n];\n","import type { Manifest } from \"@powerhousedao/shared/document-model\";\nimport manifestJson from \"./powerhouse.manifest.json\" with { type: \"json\" };\nexport { documentModels } from \"./document-models/document-models.js\";\nexport { editors } from \"./editors/editors.js\";\nexport const manifest: Manifest = manifestJson;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiBA,MAAM,8BAA8B;AAEpC,MAAM,+BAA+B;AAGrC,SAAS,mBAAmB,OAAO;AAClC,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,SAAS,mBAAmB,OAAO;AAClC,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,SAAS,qBAAqB,OAAO;AACpC,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,SAAS,0BAA0B,OAAO;AACzC,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,SAAS,gBAAgB,OAAO;AAC/B,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,SAAS,mBAAmB,OAAO;AAClC,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,SAAS,mBAAmB,OAAO;AAClC,QAAO;EACN,IAAI,YAAY;EAChB,MAAM;EACN,OAAO;EACP,iCAAiC,IAAI,MAAM,EAAE,aAAa;EAC1D;EACA;;AAEF,MAAM,sBAAsB;CAC3B,cAAc;CACd,cAAc;CACd,gBAAgB;CAChB,qBAAqB;CACrB,WAAW;CACX,cAAc;CACd,cAAc;CACd;AAGD,MAAM,4BAA4B,OAAO,WAAW;AACnD,KAAI,iBAAiB,OAAO,CAAE,QAAO;CACrC,MAAM,cAAc;AACpB,SAAQ,YAAY,MAApB;EACC,KAAK,kBAAkB;GACtB,MAAM,QAAQ,YAAY;AAC1B,SAAM,OAAO,OAAO,MAAM;AAC1B,UAAO;;EAER,KAAK,kBAAkB;GACtB,MAAM,QAAQ,YAAY;AAC1B,SAAM,OAAO,OAAO,MAAM;AAC1B,UAAO;;EAER,KAAK,oBAAoB;GACxB,MAAM,QAAQ,YAAY;AAC1B,SAAM,MAAM,cAAc,MAAM;AAChC,UAAO;;EAER,KAAK,yBAAyB;GAC7B,MAAM,QAAQ,YAAY;AAC1B,SAAM,MAAM,mBAAmB,MAAM;AACrC,UAAO;;EAER,KAAK;EACL,KAAK;EACL,KAAK,gBAAiB,QAAO;EAC7B,QAAS,QAAO;;;AAKlB,MAAM,qBAAqB;CAC1B,MAAM;CACN,MAAM;CACN;AACD,MAAM,oBAAoB;CACzB,aAAa;CACb,kBAAkB;CAClB;AACD,MAAM,2BAA2B,UAAU;AAC1C,QAAO;EACN,GAAG,kBAAkB;EACrB,QAAQ;GACP,GAAG;GACH,GAAG,OAAO;GACV;EACD,OAAO;GACN,GAAG;GACH,GAAG,OAAO;GACV;EACD;;AAEF,MAAM,8BAA8B,UAAU;AAC7C,QAAO,mBAAmB,yBAAyB,OAAO,4BAA4B;;AAEvF,MAAM,gCAAgC,UAAU,UAAU;AACzD,QAAO,qBAAqB,UAAU,MAAM;;AAE7C,MAAM,6BAA6B,UAAU;AAC5C,QAAO,kBAAkB,OAAO,4BAA4B;;AAE7D,MAAM,uBAAuB,UAAU;AACtC,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,YAAY,SAAS,WAAW;;AAEvF,MAAM,6BAA6B,UAAU;AAC5C,KAAI,CAAC,oBAAoB,MAAM,CAAE,OAAM,IAAI,MAAM,4BAA4B;;AAE9E,MAAM,0BAA0B,aAAa;AAC5C,QAAO,OAAO,aAAa,YAAY,aAAa,QAAQ,YAAY,YAAY,SAAS,OAAO,iBAAiB;;AAEtH,MAAM,gCAAgC,aAAa;AAClD,KAAI,CAAC,uBAAuB,SAAS,CAAE,OAAM,IAAI,MAAM,+BAA+B;;AAEvF,MAAM,8BAA8B,cAAc,yBAAyB;AAC3E,MAAM,kCAAkC;CACvC,IAAI;CACJ,MAAM;CACN,WAAW;CACX,aAAa;CACb,QAAQ;EACP,MAAM;EACN,SAAS;EACT;CACD,gBAAgB,CAAC;EAChB,SAAS;EACT,WAAW,EAAE;EACb,OAAO;GACN,QAAQ;IACP,QAAQ;IACR,cAAc,KAAK,UAAU,KAAK,UAAU,mBAAmB,CAAC;IAChE,UAAU,EAAE;IACZ;GACD,OAAO;IACN,QAAQ;IACR,cAAc,KAAK,UAAU,KAAK,UAAU,kBAAkB,CAAC;IAC/D,UAAU,EAAE;IACZ;GACD;EACD,SAAS,CAAC;GACT,IAAI;GACJ,MAAM;GACN,aAAa;GACb,YAAY;IACX;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;KACC,IAAI;KACJ,MAAM;KACN,aAAa;KACb,QAAQ;KACR,UAAU;KACV,SAAS;KACT,QAAQ,EAAE;KACV,UAAU,EAAE;KACZ,OAAO;KACP;IACD;GACD,CAAC;EACF,CAAC;CACF;AACD,MAAM,kCAAkC;CACvC,SAAS;CACT,SAAS;CACT,eAAe,YAAY,kBAAkB,EAAE,gCAAgC;CAC/E,OAAO;EACN,eAAe;EACf,aAAa;EACb,gBAAgB;EAChB,eAAe;EACf,kBAAkB;EAClB,eAAe;EACf,qBAAqB;EACrB,kBAAkB;EAClB,wBAAwB;EACxB;CACD;AAutBgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3/BpB,MAAa,iBAA6C;CACxD;CACA;CACA;CACD;;;ACJD,MAAa,UAA0B,CACrC,qBACA,qBACD;;;ACHD,MAAa,WAAqBA"}
@@ -1,5 +1,5 @@
1
- import "./document-drive-CDaY4aIj.js";
2
- import { D as useTheme } from "./dist-Bha1Om6O.js";
1
+ import "./document-drive-sTKoi6L4.js";
2
+ import { D as useTheme } from "./dist-D1NFJMzm.js";
3
3
  import { C as linter, D as EditorState, E as Compartment, S as forceLinting, T as keymap, _ as foldNodeProp, a as makeFocusHandler, b as tags, c as baseEditorExtensions, d as ayuLight, f as LRLanguage, g as foldInside, i as useHandlerReconfiguration, l as baseKeymap, m as continuedIndent, n as useEditorCleanup, o as makePasteHandler, p as LanguageSupport, r as useEditorRefs, s as makeUpdateHandler, t as useDocumentSync, u as dracula, v as indentNodeProp, w as EditorView, x as LRParser, y as styleTags } from "./hooks-CORHBNHb.js";
4
4
  import { memo, useEffect, useRef } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -151,4 +151,4 @@ const JSONEditor = memo(function JSONEditor(props) {
151
151
  //#endregion
152
152
  export { JSONEditor as default };
153
153
 
154
- //# sourceMappingURL=json-editor-SKLjwlux.js.map
154
+ //# sourceMappingURL=json-editor-DO_EwDmY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-editor-SKLjwlux.js","names":[],"sources":["../../../../node_modules/.pnpm/@lezer+json@1.0.3/node_modules/@lezer/json/dist/index.js","../../../../node_modules/.pnpm/@codemirror+lang-json@6.0.1/node_modules/@codemirror/lang-json/dist/index.js","../../editors/document-model-editor/components/code-editors/json-editor.tsx"],"sourcesContent":["import { LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\nconst jsonHighlighting = styleTags({\n String: tags.string,\n Number: tags.number,\n \"True False\": tags.bool,\n PropertyName: tags.propertyName,\n Null: tags.null,\n \", :\": tags.separator,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l\",\n stateData: \"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O\",\n goto: \"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R\",\n nodeNames: \"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array\",\n maxTerm: 25,\n nodeProps: [\n [\"isolate\", -2,6,11,\"\"],\n [\"openedBy\", 7,\"{\",14,\"[\"],\n [\"closedBy\", 8,\"}\",15,\"]\"]\n ],\n propSources: [jsonHighlighting],\n skippedNodes: [0],\n repeatNodeCount: 2,\n tokenData: \"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~\",\n tokenizers: [0],\n topRules: {\"JsonText\":[0,1]},\n tokenPrec: 0\n});\n\nexport { parser };\n","import { parser } from '@lezer/json';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nCalls\n[`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)\non the document and, if that throws an error, reports it as a\nsingle diagnostic.\n*/\nconst jsonParseLinter = () => (view) => {\n try {\n JSON.parse(view.state.doc.toString());\n }\n catch (e) {\n if (!(e instanceof SyntaxError))\n throw e;\n const pos = getErrorPosition(e, view.state.doc);\n return [{\n from: pos,\n message: e.message,\n severity: 'error',\n to: pos\n }];\n }\n return [];\n};\nfunction getErrorPosition(error, doc) {\n let m;\n if (m = error.message.match(/at position (\\d+)/))\n return Math.min(+m[1], doc.length);\n if (m = error.message.match(/at line (\\d+) column (\\d+)/))\n return Math.min(doc.line(+m[1]).from + (+m[2]) - 1, doc.length);\n return 0;\n}\n\n/**\nA language provider that provides JSON parsing.\n*/\nconst jsonLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"json\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Object: /*@__PURE__*/continuedIndent({ except: /^\\s*\\}/ }),\n Array: /*@__PURE__*/continuedIndent({ except: /^\\s*\\]/ })\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Object Array\": foldInside\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n indentOnInput: /^\\s*[\\}\\]]$/\n }\n});\n/**\nJSON language support.\n*/\nfunction json() {\n return new LanguageSupport(jsonLanguage);\n}\n\nexport { json, jsonLanguage, jsonParseLinter };\n","import { json, jsonLanguage, jsonParseLinter } from \"@codemirror/lang-json\";\nimport { forceLinting, linter } from \"@codemirror/lint\";\nimport { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport { useTheme } from \"@powerhousedao/reactor-browser\";\nimport { memo, useEffect, useRef } from \"react\";\nimport { ayuLight, dracula } from \"thememirror\";\nimport { baseEditorExtensions, baseKeymap } from \"./constants.js\";\nimport {\n makeFocusHandler,\n makePasteHandler,\n makeUpdateHandler,\n} from \"./factories.js\";\nimport {\n useDocumentSync,\n useEditorCleanup,\n useEditorRefs,\n useHandlerReconfiguration,\n} from \"./hooks.js\";\n\ntype Props = {\n doc: string;\n readonly?: boolean;\n /* Updates the document in the model, should be wrapped in `useCallback` in the parent */\n updateDocumentInModel?: (newDoc: string) => void;\n};\n\nconst JSONEditor = memo(function JSONEditor(props: Props) {\n const { doc, readonly = false, updateDocumentInModel } = props;\n const {\n editorRef,\n viewRef,\n updateListenerCompartment,\n focusHandlerCompartment,\n pasteHandlerCompartment,\n timeoutRef,\n } = useEditorRefs();\n const { theme } = useTheme();\n const themeCompartment = useRef(new Compartment());\n\n useEffect(() => {\n if (!viewRef.current) {\n viewRef.current = new EditorView({\n state: EditorState.create({\n doc,\n extensions: [\n ...baseEditorExtensions,\n keymap.of(baseKeymap),\n themeCompartment.current.of(theme === \"light\" ? ayuLight : dracula),\n jsonLanguage,\n json(),\n linter(jsonParseLinter()),\n updateListenerCompartment.current.of(\n makeUpdateHandler(readonly, timeoutRef, updateDocumentInModel),\n ),\n focusHandlerCompartment.current.of(\n makeFocusHandler(readonly, timeoutRef, updateDocumentInModel),\n ),\n pasteHandlerCompartment.current.of(\n makePasteHandler(readonly, timeoutRef, updateDocumentInModel),\n ),\n EditorState.readOnly.of(readonly),\n ],\n }),\n parent: editorRef.current!,\n });\n forceLinting(viewRef.current);\n }\n }, []);\n\n useEffect(() => {\n if (!viewRef.current) return;\n viewRef.current.dispatch({\n effects: themeCompartment.current.reconfigure(\n theme === \"light\" ? ayuLight : dracula,\n ),\n });\n }, [theme]);\n\n useEditorCleanup(viewRef);\n\n useHandlerReconfiguration(\n viewRef.current,\n readonly,\n timeoutRef,\n updateDocumentInModel,\n {\n updateListener: updateListenerCompartment.current,\n focusHandler: focusHandlerCompartment.current,\n pasteHandler: pasteHandlerCompartment.current,\n },\n );\n\n useDocumentSync(viewRef.current, doc);\n\n return <div ref={editorRef} />;\n});\n\nexport default JSONEditor;\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"json-editor-DO_EwDmY.js","names":[],"sources":["../../../../node_modules/.pnpm/@lezer+json@1.0.3/node_modules/@lezer/json/dist/index.js","../../../../node_modules/.pnpm/@codemirror+lang-json@6.0.1/node_modules/@codemirror/lang-json/dist/index.js","../../editors/document-model-editor/components/code-editors/json-editor.tsx"],"sourcesContent":["import { LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\nconst jsonHighlighting = styleTags({\n String: tags.string,\n Number: tags.number,\n \"True False\": tags.bool,\n PropertyName: tags.propertyName,\n Null: tags.null,\n \", :\": tags.separator,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l\",\n stateData: \"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O\",\n goto: \"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R\",\n nodeNames: \"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array\",\n maxTerm: 25,\n nodeProps: [\n [\"isolate\", -2,6,11,\"\"],\n [\"openedBy\", 7,\"{\",14,\"[\"],\n [\"closedBy\", 8,\"}\",15,\"]\"]\n ],\n propSources: [jsonHighlighting],\n skippedNodes: [0],\n repeatNodeCount: 2,\n tokenData: \"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~\",\n tokenizers: [0],\n topRules: {\"JsonText\":[0,1]},\n tokenPrec: 0\n});\n\nexport { parser };\n","import { parser } from '@lezer/json';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nCalls\n[`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)\non the document and, if that throws an error, reports it as a\nsingle diagnostic.\n*/\nconst jsonParseLinter = () => (view) => {\n try {\n JSON.parse(view.state.doc.toString());\n }\n catch (e) {\n if (!(e instanceof SyntaxError))\n throw e;\n const pos = getErrorPosition(e, view.state.doc);\n return [{\n from: pos,\n message: e.message,\n severity: 'error',\n to: pos\n }];\n }\n return [];\n};\nfunction getErrorPosition(error, doc) {\n let m;\n if (m = error.message.match(/at position (\\d+)/))\n return Math.min(+m[1], doc.length);\n if (m = error.message.match(/at line (\\d+) column (\\d+)/))\n return Math.min(doc.line(+m[1]).from + (+m[2]) - 1, doc.length);\n return 0;\n}\n\n/**\nA language provider that provides JSON parsing.\n*/\nconst jsonLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"json\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Object: /*@__PURE__*/continuedIndent({ except: /^\\s*\\}/ }),\n Array: /*@__PURE__*/continuedIndent({ except: /^\\s*\\]/ })\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Object Array\": foldInside\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n indentOnInput: /^\\s*[\\}\\]]$/\n }\n});\n/**\nJSON language support.\n*/\nfunction json() {\n return new LanguageSupport(jsonLanguage);\n}\n\nexport { json, jsonLanguage, jsonParseLinter };\n","import { json, jsonLanguage, jsonParseLinter } from \"@codemirror/lang-json\";\nimport { forceLinting, linter } from \"@codemirror/lint\";\nimport { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport { useTheme } from \"@powerhousedao/reactor-browser\";\nimport { memo, useEffect, useRef } from \"react\";\nimport { ayuLight, dracula } from \"thememirror\";\nimport { baseEditorExtensions, baseKeymap } from \"./constants.js\";\nimport {\n makeFocusHandler,\n makePasteHandler,\n makeUpdateHandler,\n} from \"./factories.js\";\nimport {\n useDocumentSync,\n useEditorCleanup,\n useEditorRefs,\n useHandlerReconfiguration,\n} from \"./hooks.js\";\n\ntype Props = {\n doc: string;\n readonly?: boolean;\n /* Updates the document in the model, should be wrapped in `useCallback` in the parent */\n updateDocumentInModel?: (newDoc: string) => void;\n};\n\nconst JSONEditor = memo(function JSONEditor(props: Props) {\n const { doc, readonly = false, updateDocumentInModel } = props;\n const {\n editorRef,\n viewRef,\n updateListenerCompartment,\n focusHandlerCompartment,\n pasteHandlerCompartment,\n timeoutRef,\n } = useEditorRefs();\n const { theme } = useTheme();\n const themeCompartment = useRef(new Compartment());\n\n useEffect(() => {\n if (!viewRef.current) {\n viewRef.current = new EditorView({\n state: EditorState.create({\n doc,\n extensions: [\n ...baseEditorExtensions,\n keymap.of(baseKeymap),\n themeCompartment.current.of(theme === \"light\" ? ayuLight : dracula),\n jsonLanguage,\n json(),\n linter(jsonParseLinter()),\n updateListenerCompartment.current.of(\n makeUpdateHandler(readonly, timeoutRef, updateDocumentInModel),\n ),\n focusHandlerCompartment.current.of(\n makeFocusHandler(readonly, timeoutRef, updateDocumentInModel),\n ),\n pasteHandlerCompartment.current.of(\n makePasteHandler(readonly, timeoutRef, updateDocumentInModel),\n ),\n EditorState.readOnly.of(readonly),\n ],\n }),\n parent: editorRef.current!,\n });\n forceLinting(viewRef.current);\n }\n }, []);\n\n useEffect(() => {\n if (!viewRef.current) return;\n viewRef.current.dispatch({\n effects: themeCompartment.current.reconfigure(\n theme === \"light\" ? ayuLight : dracula,\n ),\n });\n }, [theme]);\n\n useEditorCleanup(viewRef);\n\n useHandlerReconfiguration(\n viewRef.current,\n readonly,\n timeoutRef,\n updateDocumentInModel,\n {\n updateListener: updateListenerCompartment.current,\n focusHandler: focusHandlerCompartment.current,\n pasteHandler: pasteHandlerCompartment.current,\n },\n );\n\n useDocumentSync(viewRef.current, doc);\n\n return <div ref={editorRef} />;\n});\n\nexport default JSONEditor;\n"],"x_google_ignoreList":[0,1],"mappings":"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"}