@powerhousedao/connect 1.0.23-staging.2 → 1.0.25-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/.env +1 -1
  2. package/dist/assets/{app-_0wz8A4r.js → app-BUYipU-h.js} +21101 -19624
  3. package/dist/assets/app-BUYipU-h.js.map +1 -0
  4. package/dist/assets/{app-DFQhKB-Q.css → app-DWlDE8AF.css} +240 -181
  5. package/dist/assets/{app-loader-d7zgN9hh.js → app-loader-BnRwgIP_.js} +763 -437
  6. package/dist/assets/app-loader-BnRwgIP_.js.map +1 -0
  7. package/dist/assets/{app-loader-DczGHPG9.css → app-loader-NDVZu4bS.css} +239 -229
  8. package/dist/assets/browser-DLDtNgow.js +27224 -0
  9. package/dist/assets/browser-DLDtNgow.js.map +1 -0
  10. package/dist/assets/{ccip-C6W2FbjW.js → ccip-LS87QwZy.js} +6 -8
  11. package/dist/assets/ccip-LS87QwZy.js.map +1 -0
  12. package/dist/assets/{content-Bm5Tr4Hg.js → content-C_bg7acW.js} +1107 -470
  13. package/dist/assets/content-C_bg7acW.js.map +1 -0
  14. package/dist/assets/{index-CXXvva-l.js → index-CLG940Kn.js} +2582 -2923
  15. package/dist/assets/index-CLG940Kn.js.map +1 -0
  16. package/dist/assets/index-CNFyJkHA.js +208 -0
  17. package/dist/assets/index-CNFyJkHA.js.map +1 -0
  18. package/dist/assets/{index-BhxEM16y.js → index-DzfUrip3.js} +23 -171
  19. package/dist/assets/index-DzfUrip3.js.map +1 -0
  20. package/dist/assets/{index-DamVoHkh.js → index-N3PIlRbq.js} +4 -3
  21. package/dist/assets/index-N3PIlRbq.js.map +1 -0
  22. package/dist/assets/{main.Cq930vY3.js → main.DbDmc7wl.js} +3 -12
  23. package/dist/assets/main.DbDmc7wl.js.map +1 -0
  24. package/dist/assets/reactor-analytics-DOjP79na.js +42 -0
  25. package/dist/assets/reactor-analytics-DOjP79na.js.map +1 -0
  26. package/dist/assets/router-GU7qCi_d.js +1585 -0
  27. package/dist/assets/router-GU7qCi_d.js.map +1 -0
  28. package/dist/assets/{style-BQHqCxXa.css → style-CdxGKc2g.css} +42 -95
  29. package/dist/external-packages.js +1 -0
  30. package/dist/external-packages.js.map +1 -0
  31. package/dist/hmr.js +1 -0
  32. package/dist/hmr.js.map +1 -0
  33. package/dist/index.html +1 -1
  34. package/dist/service-worker.js +1 -0
  35. package/dist/service-worker.js.map +1 -0
  36. package/dist/vite-envs.sh +1 -1
  37. package/package.json +23 -21
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-_0wz8A4r.js","assets/main.Cq930vY3.js","assets/app-DFQhKB-Q.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-BUYipU-h.js","assets/main.DbDmc7wl.js","assets/app-DWlDE8AF.css"])))=>i.map(i=>d[i]);
2
2
  var __defProp = Object.defineProperty;
3
3
  var __typeError = (msg) => {
4
4
  throw TypeError(msg);
@@ -11,7 +11,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
11
11
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
12
12
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
13
13
  var _tags, _levelString, _errorHandler, _ConsoleLogger_instances, levelValue_get, _getDocumentModelModule, _drives, _ReadModeService_instances, parseGraphQLErrors_fn, fetchDrive_fn, _a, _ServiceWorkerManager_instances, handleServiceWorkerMessage_fn, handleServiceWorker_fn;
14
- import { _ as __vitePreload } from "./main.Cq930vY3.js";
14
+ import { _ as __vitePreload } from "./main.DbDmc7wl.js";
15
15
  import { jsx, jsxs } from "react/jsx-runtime";
16
16
  import { useState, useEffect, Suspense, lazy } from "react";
17
17
  function _mergeNamespaces(n, m) {
@@ -97,14 +97,51 @@ const trimResultingState = (document) => {
97
97
  });
98
98
  return { ...document, operations: { global: global2, local } };
99
99
  };
100
+ class CacheStorageManager {
101
+ constructor(cache) {
102
+ __publicField(this, "index", 0);
103
+ __publicField(this, "cache");
104
+ this.cache = cache;
105
+ }
106
+ createStorage() {
107
+ const index = this.index;
108
+ this.index += 1;
109
+ function buildKey(key) {
110
+ return `${index}-${key}`;
111
+ }
112
+ const storage = {
113
+ get: (key) => {
114
+ return this.cache.get(buildKey(key));
115
+ },
116
+ set: (key, value) => {
117
+ this.cache.set(buildKey(key), value);
118
+ return storage;
119
+ },
120
+ delete: (key) => {
121
+ return this.cache.delete(buildKey(key));
122
+ },
123
+ clear: () => {
124
+ this.cache.clear();
125
+ }
126
+ };
127
+ return storage;
128
+ }
129
+ }
100
130
  class InMemoryCache {
101
- constructor() {
102
- __publicField(this, "idTodocument", /* @__PURE__ */ new Map());
103
- __publicField(this, "idToDrive", /* @__PURE__ */ new Map());
104
- __publicField(this, "slugToDriveId", /* @__PURE__ */ new Map());
131
+ constructor(cache = /* @__PURE__ */ new Map()) {
132
+ __publicField(this, "cache");
133
+ __publicField(this, "cacheStorageManager");
134
+ __publicField(this, "idToDocument");
135
+ __publicField(this, "idToDrive");
136
+ __publicField(this, "slugToDriveId");
137
+ this.cache = cache;
138
+ this.cacheStorageManager = new CacheStorageManager(cache);
139
+ this.idToDocument = this.cacheStorageManager.createStorage();
140
+ this.idToDrive = this.cacheStorageManager.createStorage();
141
+ this.slugToDriveId = this.cacheStorageManager.createStorage();
105
142
  }
106
143
  clear() {
107
- this.idTodocument.clear();
144
+ this.idToDocument.clear();
108
145
  this.idToDrive.clear();
109
146
  this.slugToDriveId.clear();
110
147
  }
@@ -113,13 +150,13 @@ class InMemoryCache {
113
150
  /////////////////////////////////////////////////////////////////////////////
114
151
  async setDocument(documentId, document) {
115
152
  const doc = trimResultingState(document);
116
- this.idTodocument.set(documentId, doc);
153
+ this.idToDocument.set(documentId, doc);
117
154
  }
118
155
  async getDocument(documentId) {
119
- return this.idTodocument.get(documentId);
156
+ return this.idToDocument.get(documentId);
120
157
  }
121
158
  async deleteDocument(documentId) {
122
- return this.idTodocument.delete(documentId);
159
+ return this.idToDocument.delete(documentId);
123
160
  }
124
161
  async setDrive(driveId, drive) {
125
162
  const doc = trimResultingState(drive);
@@ -133,14 +170,14 @@ class InMemoryCache {
133
170
  if (!drive) {
134
171
  return false;
135
172
  }
136
- const slug = drive.state.global.slug;
173
+ const slug = drive.slug.length > 0 ? drive.slug : driveId;
137
174
  if (slug) {
138
175
  this.slugToDriveId.delete(slug);
139
176
  }
140
177
  return this.idToDrive.delete(driveId);
141
178
  }
142
179
  async setDriveBySlug(slug, drive) {
143
- const driveId = drive.state.global.id;
180
+ const driveId = drive.id;
144
181
  this.slugToDriveId.set(slug, driveId);
145
182
  this.setDrive(driveId, drive);
146
183
  }
@@ -388,8 +425,8 @@ function isBE() {
388
425
  return buf[0] === 254;
389
426
  }
390
427
  const FileSystemError = new Error("File system not available.");
391
- function generateUUID$1() {
392
- if (!crypto.randomUUID) {
428
+ function generateUUID() {
429
+ if (typeof crypto === "undefined" || !crypto.randomUUID) {
393
430
  throw new Error("generateUUID is not available in unsecure contexts.");
394
431
  }
395
432
  return crypto.randomUUID();
@@ -1893,14 +1930,13 @@ const base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z
1893
1930
  const dateRegexSource = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`;
1894
1931
  const dateRegex = new RegExp(`^${dateRegexSource}$`);
1895
1932
  function timeRegexSource(args) {
1896
- let secondsRegexSource = `[0-5]\\d`;
1933
+ let regex = `([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;
1897
1934
  if (args.precision) {
1898
- secondsRegexSource = `${secondsRegexSource}\\.\\d{${args.precision}}`;
1935
+ regex = `${regex}\\.\\d{${args.precision}}`;
1899
1936
  } else if (args.precision == null) {
1900
- secondsRegexSource = `${secondsRegexSource}(\\.\\d+)?`;
1937
+ regex = `${regex}(\\.\\d+)?`;
1901
1938
  }
1902
- const secondsQuantifier = args.precision ? "+" : "?";
1903
- return `([01]\\d|2[0-3]):[0-5]\\d(:${secondsRegexSource})${secondsQuantifier}`;
1939
+ return regex;
1904
1940
  }
1905
1941
  function timeRegex(args) {
1906
1942
  return new RegExp(`^${timeRegexSource(args)}$`);
@@ -6778,7 +6814,7 @@ function loadStateOperation(oldDocument, newDocument) {
6778
6814
  };
6779
6815
  }
6780
6816
  function generateId(method) {
6781
- return generateUUID$1();
6817
+ return generateUUID();
6782
6818
  }
6783
6819
  function getUnixTimestamp(date) {
6784
6820
  return (new Date(date).getTime() / 1e3).toFixed(0);
@@ -6941,6 +6977,7 @@ function processSkipOperation(document, action, customReducer, skipValue, reuseO
6941
6977
  scopeState = resultingStateParser(lastRemainingOperation.resultingState);
6942
6978
  } else {
6943
6979
  const { state } = replayOperations(document.initialState, documentOperations, customReducer, void 0, void 0, void 0, void 0, {
6980
+ reuseHash: true,
6944
6981
  reuseOperationResultingState,
6945
6982
  operationResultingStateParser: resultingStateParser
6946
6983
  });
@@ -6967,6 +7004,7 @@ function processUndoOperation(document, scope, customReducer, reuseOperationResu
6967
7004
  const clearedOperations = [...documentOperations[scope]];
6968
7005
  const diff = diffOperations(garbageCollect(sortedOperations), clearedOperations);
6969
7006
  const doc = replayOperations(document.initialState, documentOperations, customReducer, void 0, void 0, void 0, void 0, {
7007
+ reuseHash: true,
6970
7008
  reuseOperationResultingState,
6971
7009
  operationResultingStateParser: resultingStateParser
6972
7010
  });
@@ -7116,6 +7154,7 @@ function createReducer(stateReducer2, documentReducer = baseReducer) {
7116
7154
  return reducer2;
7117
7155
  }
7118
7156
  function baseCreateExtendedState(initialState, createState2) {
7157
+ const id = (initialState == null ? void 0 : initialState.id) ?? generateUUID();
7119
7158
  return {
7120
7159
  name: "",
7121
7160
  documentType: "",
@@ -7127,6 +7166,8 @@ function baseCreateExtendedState(initialState, createState2) {
7127
7166
  lastModified: (/* @__PURE__ */ new Date()).toISOString(),
7128
7167
  attachments: {},
7129
7168
  ...initialState,
7169
+ id,
7170
+ slug: (initialState == null ? void 0 : initialState.slug) ?? id,
7130
7171
  state: (createState2 == null ? void 0 : createState2(initialState == null ? void 0 : initialState.state)) ?? ((initialState == null ? void 0 : initialState.state) ?? {
7131
7172
  global: {},
7132
7173
  local: {}
@@ -7145,10 +7186,6 @@ function baseCreateDocument(initialState, createState2) {
7145
7186
  function hashDocumentStateForScope(document, scope = "global") {
7146
7187
  return hash(cjsModule(document.state[scope] || ""));
7147
7188
  }
7148
- const hashKey = (date, randomLimit = 1e3) => {
7149
- const random = Math.random() * randomLimit;
7150
- return hash(`${(/* @__PURE__ */ new Date()).toISOString()}${random}`);
7151
- };
7152
7189
  function getDocumentLastModified(document) {
7153
7190
  var _a2;
7154
7191
  const sortedOperations = sortOperations(Object.values(document.operations).flat());
@@ -7197,6 +7234,9 @@ function replayDocument(initialState, operations, reducer2, dispatch, header, sk
7197
7234
  operationsToReplay.push(...Object.values(operations).flat());
7198
7235
  }
7199
7236
  const document = baseCreateDocument(documentState);
7237
+ if (header == null ? void 0 : header.slug) {
7238
+ document.slug = header.slug;
7239
+ }
7200
7240
  document.initialState = initialState;
7201
7241
  document.operations = initialOperations;
7202
7242
  let result = document;
@@ -7535,21 +7575,186 @@ function UpdateStateExampleInputSchema() {
7535
7575
  newExample: z.string()
7536
7576
  });
7537
7577
  }
7578
+ var dist = {};
7579
+ var hasRequiredDist;
7580
+ function requireDist() {
7581
+ if (hasRequiredDist) return dist;
7582
+ hasRequiredDist = 1;
7583
+ (function(exports) {
7584
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
7585
+ function getDefaultExportFromCjs2(x) {
7586
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
7587
+ }
7588
+ var browser = { exports: {} };
7589
+ var process2 = browser.exports = {};
7590
+ var cachedSetTimeout;
7591
+ var cachedClearTimeout;
7592
+ function defaultSetTimout() {
7593
+ throw new Error("setTimeout has not been defined");
7594
+ }
7595
+ function defaultClearTimeout() {
7596
+ throw new Error("clearTimeout has not been defined");
7597
+ }
7598
+ (function() {
7599
+ try {
7600
+ if (typeof setTimeout === "function") {
7601
+ cachedSetTimeout = setTimeout;
7602
+ } else {
7603
+ cachedSetTimeout = defaultSetTimout;
7604
+ }
7605
+ } catch (e) {
7606
+ cachedSetTimeout = defaultSetTimout;
7607
+ }
7608
+ try {
7609
+ if (typeof clearTimeout === "function") {
7610
+ cachedClearTimeout = clearTimeout;
7611
+ } else {
7612
+ cachedClearTimeout = defaultClearTimeout;
7613
+ }
7614
+ } catch (e) {
7615
+ cachedClearTimeout = defaultClearTimeout;
7616
+ }
7617
+ })();
7618
+ function runTimeout(fun) {
7619
+ if (cachedSetTimeout === setTimeout) {
7620
+ return setTimeout(fun, 0);
7621
+ }
7622
+ if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
7623
+ cachedSetTimeout = setTimeout;
7624
+ return setTimeout(fun, 0);
7625
+ }
7626
+ try {
7627
+ return cachedSetTimeout(fun, 0);
7628
+ } catch (e) {
7629
+ try {
7630
+ return cachedSetTimeout.call(null, fun, 0);
7631
+ } catch (e2) {
7632
+ return cachedSetTimeout.call(this, fun, 0);
7633
+ }
7634
+ }
7635
+ }
7636
+ function runClearTimeout(marker) {
7637
+ if (cachedClearTimeout === clearTimeout) {
7638
+ return clearTimeout(marker);
7639
+ }
7640
+ if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
7641
+ cachedClearTimeout = clearTimeout;
7642
+ return clearTimeout(marker);
7643
+ }
7644
+ try {
7645
+ return cachedClearTimeout(marker);
7646
+ } catch (e) {
7647
+ try {
7648
+ return cachedClearTimeout.call(null, marker);
7649
+ } catch (e2) {
7650
+ return cachedClearTimeout.call(this, marker);
7651
+ }
7652
+ }
7653
+ }
7654
+ var queue = [];
7655
+ var draining = false;
7656
+ var currentQueue;
7657
+ var queueIndex = -1;
7658
+ function cleanUpNextTick() {
7659
+ if (!draining || !currentQueue) {
7660
+ return;
7661
+ }
7662
+ draining = false;
7663
+ if (currentQueue.length) {
7664
+ queue = currentQueue.concat(queue);
7665
+ } else {
7666
+ queueIndex = -1;
7667
+ }
7668
+ if (queue.length) {
7669
+ drainQueue();
7670
+ }
7671
+ }
7672
+ function drainQueue() {
7673
+ if (draining) {
7674
+ return;
7675
+ }
7676
+ var timeout = runTimeout(cleanUpNextTick);
7677
+ draining = true;
7678
+ var len = queue.length;
7679
+ while (len) {
7680
+ currentQueue = queue;
7681
+ queue = [];
7682
+ while (++queueIndex < len) {
7683
+ if (currentQueue) {
7684
+ currentQueue[queueIndex].run();
7685
+ }
7686
+ }
7687
+ queueIndex = -1;
7688
+ len = queue.length;
7689
+ }
7690
+ currentQueue = null;
7691
+ draining = false;
7692
+ runClearTimeout(timeout);
7693
+ }
7694
+ process2.nextTick = function(fun) {
7695
+ var args = new Array(arguments.length - 1);
7696
+ if (arguments.length > 1) {
7697
+ for (var i = 1; i < arguments.length; i++) {
7698
+ args[i - 1] = arguments[i];
7699
+ }
7700
+ }
7701
+ queue.push(new Item(fun, args));
7702
+ if (queue.length === 1 && !draining) {
7703
+ runTimeout(drainQueue);
7704
+ }
7705
+ };
7706
+ function Item(fun, array) {
7707
+ this.fun = fun;
7708
+ this.array = array;
7709
+ }
7710
+ Item.prototype.run = function() {
7711
+ this.fun.apply(null, this.array);
7712
+ };
7713
+ process2.title = "browser";
7714
+ process2.browser = true;
7715
+ process2.env = {};
7716
+ process2.argv = [];
7717
+ process2.version = "";
7718
+ process2.versions = {};
7719
+ function noop2() {
7720
+ }
7721
+ process2.on = noop2;
7722
+ process2.addListener = noop2;
7723
+ process2.once = noop2;
7724
+ process2.off = noop2;
7725
+ process2.removeListener = noop2;
7726
+ process2.removeAllListeners = noop2;
7727
+ process2.emit = noop2;
7728
+ process2.prependListener = noop2;
7729
+ process2.prependOnceListener = noop2;
7730
+ process2.listeners = function(name2) {
7731
+ return [];
7732
+ };
7733
+ process2.binding = function(name2) {
7734
+ throw new Error("process.binding is not supported");
7735
+ };
7736
+ process2.cwd = function() {
7737
+ return "/";
7738
+ };
7739
+ process2.chdir = function(dir) {
7740
+ throw new Error("process.chdir is not supported");
7741
+ };
7742
+ process2.umask = function() {
7743
+ return 0;
7744
+ };
7745
+ var browserExports = browser.exports;
7746
+ const process$1 = /* @__PURE__ */ getDefaultExportFromCjs2(browserExports);
7747
+ exports.default = process$1;
7748
+ exports.process = process$1;
7749
+ })(dist);
7750
+ return dist;
7751
+ }
7752
+ var distExports = requireDist();
7753
+ const process = /* @__PURE__ */ getDefaultExportFromCjs(distExports);
7538
7754
  function commonjsRequire(path) {
7539
7755
  throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
7540
7756
  }
7541
7757
  var jszip_min = { exports: {} };
7542
- /*!
7543
-
7544
- JSZip v3.10.1 - A JavaScript class for generating and reading zip files
7545
- <http://stuartk.com/jszip>
7546
-
7547
- (c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
7548
- Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
7549
-
7550
- JSZip uses the library pako released under the MIT license :
7551
- https://github.com/nodeca/pako/blob/main/LICENSE
7552
- */
7553
7758
  var hasRequiredJszip_min;
7554
7759
  function requireJszip_min() {
7555
7760
  if (hasRequiredJszip_min) return jszip_min.exports;
@@ -9892,7 +10097,6 @@ const types = {
9892
10097
  "application/dash+xml": ["mpd"],
9893
10098
  "application/dash-patch+xml": ["mpp"],
9894
10099
  "application/davmount+xml": ["davmount"],
9895
- "application/dicom": ["dcm"],
9896
10100
  "application/docbook+xml": ["dbk"],
9897
10101
  "application/dssc+der": ["dssc"],
9898
10102
  "application/dssc+xml": ["xdssc"],
@@ -9979,14 +10183,7 @@ const types = {
9979
10183
  "application/oebps-package+xml": ["opf"],
9980
10184
  "application/ogg": ["ogx"],
9981
10185
  "application/omdoc+xml": ["omdoc"],
9982
- "application/onenote": [
9983
- "onetoc",
9984
- "onetoc2",
9985
- "onetmp",
9986
- "onepkg",
9987
- "one",
9988
- "onea"
9989
- ],
10186
+ "application/onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"],
9990
10187
  "application/oxps": ["oxps"],
9991
10188
  "application/p2p-overlay+xml": ["relo"],
9992
10189
  "application/patch-ops-error+xml": ["xer"],
@@ -10082,7 +10279,6 @@ const types = {
10082
10279
  "application/yang": ["yang"],
10083
10280
  "application/yin+xml": ["yin"],
10084
10281
  "application/zip": ["zip"],
10085
- "application/zip+dotlottie": ["lottie"],
10086
10282
  "audio/3gpp": ["*3gpp"],
10087
10283
  "audio/aac": ["adts", "aac"],
10088
10284
  "audio/adpcm": ["adp"],
@@ -10091,7 +10287,7 @@ const types = {
10091
10287
  "audio/midi": ["mid", "midi", "kar", "rmi"],
10092
10288
  "audio/mobile-xmf": ["mxmf"],
10093
10289
  "audio/mp3": ["*mp3"],
10094
- "audio/mp4": ["m4a", "mp4a", "m4b"],
10290
+ "audio/mp4": ["m4a", "mp4a"],
10095
10291
  "audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"],
10096
10292
  "audio/ogg": ["oga", "ogg", "spx", "opus"],
10097
10293
  "audio/s3m": ["s3m"],
@@ -10123,12 +10319,11 @@ const types = {
10123
10319
  "image/heif": ["heif"],
10124
10320
  "image/heif-sequence": ["heifs"],
10125
10321
  "image/hej2k": ["hej2"],
10322
+ "image/hsj2": ["hsj2"],
10126
10323
  "image/ief": ["ief"],
10127
- "image/jaii": ["jaii"],
10128
- "image/jais": ["jais"],
10129
10324
  "image/jls": ["jls"],
10130
10325
  "image/jp2": ["jp2", "jpg2"],
10131
- "image/jpeg": ["jpg", "jpeg", "jpe"],
10326
+ "image/jpeg": ["jpeg", "jpg", "jpe"],
10132
10327
  "image/jph": ["jph"],
10133
10328
  "image/jphc": ["jhc"],
10134
10329
  "image/jpm": ["jpm", "jpgm"],
@@ -10143,7 +10338,6 @@ const types = {
10143
10338
  "image/jxss": ["jxss"],
10144
10339
  "image/ktx": ["ktx"],
10145
10340
  "image/ktx2": ["ktx2"],
10146
- "image/pjpeg": ["jfif"],
10147
10341
  "image/png": ["png"],
10148
10342
  "image/sgi": ["sgi"],
10149
10343
  "image/svg+xml": ["svg", "svgz"],
@@ -10157,7 +10351,7 @@ const types = {
10157
10351
  "message/global-delivery-status": ["u8dsn"],
10158
10352
  "message/global-disposition-notification": ["u8mdn"],
10159
10353
  "message/global-headers": ["u8hdr"],
10160
- "message/rfc822": ["eml", "mime", "mht", "mhtml"],
10354
+ "message/rfc822": ["eml", "mime"],
10161
10355
  "model/3mf": ["3mf"],
10162
10356
  "model/gltf+json": ["gltf"],
10163
10357
  "model/gltf-binary": ["glb"],
@@ -10167,7 +10361,6 @@ const types = {
10167
10361
  "model/mtl": ["mtl"],
10168
10362
  "model/obj": ["obj"],
10169
10363
  "model/prc": ["prc"],
10170
- "model/step": ["step", "stp", "stpnc", "p21", "210"],
10171
10364
  "model/step+xml": ["stpx"],
10172
10365
  "model/step+zip": ["stpz"],
10173
10366
  "model/step-xml+zip": ["stpxz"],
@@ -10273,8 +10466,8 @@ class Mime {
10273
10466
  getType(path) {
10274
10467
  if (typeof path !== "string")
10275
10468
  return null;
10276
- const last = path.replace(/^.*[/\\]/s, "").toLowerCase();
10277
- const ext = last.replace(/^.*\./s, "").toLowerCase();
10469
+ const last = path.replace(/^.*[/\\]/, "").toLowerCase();
10470
+ const ext = last.replace(/^.*\./, "").toLowerCase();
10278
10471
  const hasPath = last.length < path.length;
10279
10472
  const hasDot = ext.length < last.length - 1;
10280
10473
  if (!hasDot && hasPath)
@@ -10336,8 +10529,10 @@ function validateOperations(operations) {
10336
10529
  }
10337
10530
  function createZip(document) {
10338
10531
  const zip = new JSZip();
10339
- const { name: name2, revision, documentType: documentType2, created, lastModified } = document;
10532
+ const { id, slug, name: name2, revision, documentType: documentType2, created, lastModified } = document;
10340
10533
  const header = {
10534
+ id,
10535
+ slug,
10341
10536
  name: name2,
10342
10537
  revision,
10343
10538
  documentType: documentType2,
@@ -10753,40 +10948,60 @@ const reducer$2 = {
10753
10948
  state.triggers = state.triggers.filter((trigger) => trigger.id !== action.input.triggerId);
10754
10949
  }
10755
10950
  };
10756
- const byteToHex = [];
10757
- for (let i = 0; i < 256; ++i) {
10758
- byteToHex.push((i + 256).toString(16).slice(1));
10951
+ class DocumentModelNotFoundError extends Error {
10952
+ constructor(id, cause) {
10953
+ super(`Document model "${id}" not found`, { cause });
10954
+ __publicField(this, "id");
10955
+ this.id = id;
10956
+ }
10759
10957
  }
10760
- function unsafeStringify(arr, offset = 0) {
10761
- return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
10958
+ class OperationError extends Error {
10959
+ constructor(status, operation, message, cause) {
10960
+ super(message, { cause: cause ?? operation });
10961
+ __publicField(this, "status");
10962
+ __publicField(this, "operation");
10963
+ this.status = status;
10964
+ this.operation = operation;
10965
+ }
10762
10966
  }
10763
- let getRandomValues;
10764
- const rnds8 = new Uint8Array(16);
10765
- function rng() {
10766
- if (!getRandomValues) {
10767
- if (typeof crypto === "undefined" || !crypto.getRandomValues) {
10768
- throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
10769
- }
10770
- getRandomValues = crypto.getRandomValues.bind(crypto);
10967
+ class ConflictOperationError extends OperationError {
10968
+ constructor(existingOperation, newOperation) {
10969
+ super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
10771
10970
  }
10772
- return getRandomValues(rnds8);
10773
10971
  }
10774
- const randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
10775
- const native = { randomUUID };
10776
- function v4(options, buf, offset) {
10777
- var _a2;
10778
- if (native.randomUUID && true && !options) {
10779
- return native.randomUUID();
10972
+ class DocumentIdValidationError extends Error {
10973
+ constructor(documentId) {
10974
+ super(`Invalid document id: ${documentId}`);
10975
+ }
10976
+ }
10977
+ class DocumentSlugValidationError extends Error {
10978
+ constructor(slug) {
10979
+ super(`Invalid slug: ${slug}`);
10980
+ }
10981
+ }
10982
+ class DocumentAlreadyExistsError extends Error {
10983
+ constructor(documentId) {
10984
+ super(`Document with id ${documentId} uses id or slug that already exists`);
10985
+ __publicField(this, "documentId");
10986
+ this.documentId = documentId;
10780
10987
  }
10781
- options = options || {};
10782
- const rnds = options.random ?? ((_a2 = options.rng) == null ? void 0 : _a2.call(options)) ?? rng();
10783
- if (rnds.length < 16) {
10784
- throw new Error("Random bytes length must be >= 16");
10988
+ }
10989
+ class DocumentNotFoundError extends Error {
10990
+ constructor(documentId) {
10991
+ super(`Document with id ${documentId} not found`);
10992
+ __publicField(this, "documentId");
10993
+ this.documentId = documentId;
10994
+ }
10995
+ }
10996
+ class SynchronizationUnitNotFoundError extends Error {
10997
+ constructor(message, syncUnitId) {
10998
+ super(message);
10999
+ __publicField(this, "syncUnitId");
11000
+ this.syncUnitId = syncUnitId;
10785
11001
  }
10786
- rnds[6] = rnds[6] & 15 | 64;
10787
- rnds[8] = rnds[8] & 63 | 128;
10788
- return unsafeStringify(rnds);
10789
11002
  }
11003
+ const isValidDocumentId = (id) => id && id.length > 0 && /^[a-zA-Z0-9_-]+$/.test(id);
11004
+ const isValidSlug = (slug) => slug && slug.length > 0 && /^[a-zA-Z0-9_-]+$/.test(slug);
10790
11005
  function isFileNode(node) {
10791
11006
  return node.kind === "file";
10792
11007
  }
@@ -10850,7 +11065,7 @@ function generateNodesCopy(src, idGenerator, nodes) {
10850
11065
  function generateSynchronizationUnitId(nodes) {
10851
11066
  let syncId = "";
10852
11067
  while (!syncId || nodes.find((node) => isFileNode(node) && node.synchronizationUnits.find((unit) => unit.syncId === syncId))) {
10853
- syncId = v4();
11068
+ syncId = generateId();
10854
11069
  }
10855
11070
  return syncId;
10856
11071
  }
@@ -10928,6 +11143,9 @@ const reducer$1 = {
10928
11143
  if (state.nodes.find((node) => node.id === action.input.id)) {
10929
11144
  throw new Error(`Node with id ${action.input.id} already exists!`);
10930
11145
  }
11146
+ if (!isValidDocumentId(action.input.id)) {
11147
+ throw new DocumentIdValidationError(action.input.id);
11148
+ }
10931
11149
  const name2 = handleTargetNameCollisions({
10932
11150
  nodes: state.nodes,
10933
11151
  srcName: action.input.name,
@@ -11020,6 +11238,9 @@ const reducer$1 = {
11020
11238
  if (!node) {
11021
11239
  throw new Error(`Node with id ${action.input.srcId} not found`);
11022
11240
  }
11241
+ if (!isValidDocumentId(action.input.targetId)) {
11242
+ throw new DocumentIdValidationError(action.input.targetId);
11243
+ }
11023
11244
  const duplicatedNode = state.nodes.find((node2) => node2.id === action.input.targetId);
11024
11245
  if (duplicatedNode) {
11025
11246
  throw new Error(`Node with id ${action.input.targetId} already exists`);
@@ -11031,8 +11252,9 @@ const reducer$1 = {
11031
11252
  });
11032
11253
  const newNode = {
11033
11254
  ...node,
11034
- name: name2,
11035
11255
  id: action.input.targetId,
11256
+ slug: action.input.targetId,
11257
+ name: name2,
11036
11258
  parentFolder: action.input.targetParentFolder || null
11037
11259
  };
11038
11260
  const isFile = isFileNode(newNode);
@@ -11164,11 +11386,9 @@ const fileExtension = "phdd";
11164
11386
  const documentType = "powerhouse/document-drive";
11165
11387
  const documentModelName = "DocumentDrive";
11166
11388
  const initialGlobalState = {
11167
- id: "",
11168
11389
  name: "",
11169
11390
  nodes: [],
11170
- icon: null,
11171
- slug: null
11391
+ icon: null
11172
11392
  };
11173
11393
  const initialLocalState = {
11174
11394
  listeners: [],
@@ -11429,8 +11649,7 @@ const driveDocumentModelModule = {
11429
11649
  actions: { ...creators, ...actions },
11430
11650
  utils: { ...documentModelUtils, ...customUtils }
11431
11651
  };
11432
- var define_process_env_default = {};
11433
- const LEVELS = {
11652
+ const LogLevels = {
11434
11653
  verbose: 1,
11435
11654
  debug: 2,
11436
11655
  info: 3,
@@ -11438,6 +11657,10 @@ const LEVELS = {
11438
11657
  error: 5,
11439
11658
  silent: 6
11440
11659
  };
11660
+ function isLogLevel(value) {
11661
+ return typeof value === "string" && value in LogLevels;
11662
+ }
11663
+ var define_process_env_default = {};
11441
11664
  class ConsoleLogger {
11442
11665
  constructor(tags, errorHandler2) {
11443
11666
  __privateAdd(this, _ConsoleLogger_instances);
@@ -11457,6 +11680,10 @@ class ConsoleLogger {
11457
11680
  return __privateGet(this, _levelString);
11458
11681
  }
11459
11682
  set level(level) {
11683
+ if (level !== "env" && !isLogLevel(level)) {
11684
+ throw new Error(`Invalid log level: ${JSON.stringify(level)}.
11685
+ Must be one of ${Object.keys(LogLevels).concat(["env"]).join(", ")}.`);
11686
+ }
11460
11687
  __privateSet(this, _levelString, level);
11461
11688
  }
11462
11689
  get errorHandler() {
@@ -11469,31 +11696,31 @@ class ConsoleLogger {
11469
11696
  return this.debug(...data);
11470
11697
  }
11471
11698
  verbose(...data) {
11472
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.verbose) {
11699
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.verbose) {
11473
11700
  return;
11474
11701
  }
11475
11702
  return this.debug(...data);
11476
11703
  }
11477
11704
  debug(...data) {
11478
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.debug) {
11705
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.debug) {
11479
11706
  return;
11480
11707
  }
11481
11708
  return console.debug(...[...__privateGet(this, _tags), ...data]);
11482
11709
  }
11483
11710
  info(...data) {
11484
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.info) {
11711
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.info) {
11485
11712
  return;
11486
11713
  }
11487
11714
  return console.info(...[...__privateGet(this, _tags), ...data]);
11488
11715
  }
11489
11716
  warn(...data) {
11490
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.warn) {
11717
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.warn) {
11491
11718
  return;
11492
11719
  }
11493
11720
  return console.warn(...[...__privateGet(this, _tags), ...data]);
11494
11721
  }
11495
11722
  error(...data) {
11496
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.error) {
11723
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.error) {
11497
11724
  return;
11498
11725
  }
11499
11726
  if (__privateGet(this, _errorHandler)) {
@@ -11508,16 +11735,16 @@ _errorHandler = new WeakMap();
11508
11735
  _ConsoleLogger_instances = new WeakSet();
11509
11736
  levelValue_get = function() {
11510
11737
  if (__privateGet(this, _levelString) === "env") {
11511
- const envLevel = typeof process !== "undefined" ? define_process_env_default.LOG_LEVEL : void 0;
11738
+ const envLevel = typeof process !== "undefined" && "env" in process ? define_process_env_default.LOG_LEVEL : void 0;
11512
11739
  if (!envLevel) {
11513
- return LEVELS.debug;
11740
+ return LogLevels.debug;
11514
11741
  }
11515
- if (!(envLevel in LEVELS)) {
11516
- return LEVELS.debug;
11742
+ if (!(envLevel in LogLevels)) {
11743
+ return LogLevels.debug;
11517
11744
  }
11518
- return LEVELS[envLevel];
11745
+ return LogLevels[envLevel];
11519
11746
  }
11520
- return LEVELS[__privateGet(this, _levelString)];
11747
+ return LogLevels[__privateGet(this, _levelString)];
11521
11748
  };
11522
11749
  const loggerInstance = new ConsoleLogger();
11523
11750
  let logLevel = "env";
@@ -11539,48 +11766,6 @@ const childLogger = (tags) => {
11539
11766
  logger2.errorHandler = errorHandler;
11540
11767
  return logger2;
11541
11768
  };
11542
- class DocumentModelNotFoundError extends Error {
11543
- constructor(id, cause) {
11544
- super(`Document model "${id}" not found`, { cause });
11545
- __publicField(this, "id");
11546
- this.id = id;
11547
- }
11548
- }
11549
- class OperationError extends Error {
11550
- constructor(status, operation, message, cause) {
11551
- super(message, { cause: cause ?? operation });
11552
- __publicField(this, "status");
11553
- __publicField(this, "operation");
11554
- this.status = status;
11555
- this.operation = operation;
11556
- }
11557
- }
11558
- class ConflictOperationError extends OperationError {
11559
- constructor(existingOperation, newOperation) {
11560
- super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
11561
- }
11562
- }
11563
- class DocumentAlreadyExistsError extends Error {
11564
- constructor(documentId) {
11565
- super(`Document with id ${documentId} already exists`);
11566
- __publicField(this, "documentId");
11567
- this.documentId = documentId;
11568
- }
11569
- }
11570
- class DocumentNotFoundError extends Error {
11571
- constructor(documentId) {
11572
- super(`Document with id ${documentId} not found`);
11573
- __publicField(this, "documentId");
11574
- this.documentId = documentId;
11575
- }
11576
- }
11577
- class SynchronizationUnitNotFoundError extends Error {
11578
- constructor(message, syncUnitId) {
11579
- super(message);
11580
- __publicField(this, "syncUnitId");
11581
- this.syncUnitId = syncUnitId;
11582
- }
11583
- }
11584
11769
  var RunAsap;
11585
11770
  (function(RunAsap2) {
11586
11771
  RunAsap2.useMessageChannel = (() => {
@@ -11720,9 +11905,6 @@ function mergeOperations(currentOperations, newOperations) {
11720
11905
  return { ...acc, [curr.scope]: [...existingOperations, curr] };
11721
11906
  }, currentOperations);
11722
11907
  }
11723
- function generateUUID() {
11724
- return generateId();
11725
- }
11726
11908
  function isBefore(dateA, dateB) {
11727
11909
  return new Date(dateA) < new Date(dateB);
11728
11910
  }
@@ -11823,7 +12005,7 @@ class BaseQueueManager {
11823
12005
  if (!this.delegate) {
11824
12006
  throw new Error("No server delegate defined");
11825
12007
  }
11826
- const jobId = generateUUID();
12008
+ const jobId = generateId();
11827
12009
  const queue = this.getQueue(job.driveId, job.documentId);
11828
12010
  if (await queue.isDeleted()) {
11829
12011
  throw new Error("Queue is deleted");
@@ -14929,7 +15111,10 @@ function visit(root, visitor, visitorKeys = QueryDocumentKeys) {
14929
15111
  }
14930
15112
  }
14931
15113
  } else {
14932
- node = { ...node };
15114
+ node = Object.defineProperties(
15115
+ {},
15116
+ Object.getOwnPropertyDescriptors(node)
15117
+ );
14933
15118
  for (const [editKey, editValue] of edits) {
14934
15119
  node[editKey] = editValue;
14935
15120
  }
@@ -20269,7 +20454,7 @@ function VariablesInAllowedPositionRule(context) {
20269
20454
  },
20270
20455
  leave(operation) {
20271
20456
  const usages = context.getRecursiveVariableUsages(operation);
20272
- for (const { node, type: type2, defaultValue, parentType } of usages) {
20457
+ for (const { node, type: type2, defaultValue } of usages) {
20273
20458
  const varName = node.name.value;
20274
20459
  const varDef = varDefMap[varName];
20275
20460
  if (varDef && type2) {
@@ -20293,16 +20478,6 @@ function VariablesInAllowedPositionRule(context) {
20293
20478
  )
20294
20479
  );
20295
20480
  }
20296
- if (isInputObjectType(parentType) && parentType.isOneOf && isNullableType(varType)) {
20297
- context.reportError(
20298
- new GraphQLError(
20299
- `Variable "$${varName}" is of type "${varType}" but must be non-nullable to be used for OneOf Input Object "${parentType}".`,
20300
- {
20301
- nodes: [varDef, node]
20302
- }
20303
- )
20304
- );
20305
- }
20306
20481
  }
20307
20482
  }
20308
20483
  }
@@ -20486,8 +20661,7 @@ class ValidationContext extends ASTValidationContext {
20486
20661
  newUsages.push({
20487
20662
  node: variable,
20488
20663
  type: typeInfo.getInputType(),
20489
- defaultValue: typeInfo.getDefaultValue(),
20490
- parentType: typeInfo.getParentInputType()
20664
+ defaultValue: typeInfo.getDefaultValue()
20491
20665
  });
20492
20666
  }
20493
20667
  })
@@ -20585,6 +20759,22 @@ function assertValidSDL(documentAST) {
20585
20759
  throw new Error(errors.map((error) => error.message).join("\n\n"));
20586
20760
  }
20587
20761
  }
20762
+ function assertValidSDLExtension(documentAST, schema) {
20763
+ const errors = validateSDL(documentAST, schema);
20764
+ if (errors.length !== 0) {
20765
+ throw new Error(errors.map((error) => error.message).join("\n\n"));
20766
+ }
20767
+ }
20768
+ function extendSchema(schema, documentAST, options) {
20769
+ assertSchema(schema);
20770
+ documentAST != null && documentAST.kind === Kind.DOCUMENT || devAssert(false, "Must provide valid Document AST.");
20771
+ {
20772
+ assertValidSDLExtension(documentAST, schema);
20773
+ }
20774
+ const schemaConfig = schema.toConfig();
20775
+ const extendedConfig = extendSchemaImpl(schemaConfig, documentAST, options);
20776
+ return schemaConfig === extendedConfig ? schema : new GraphQLSchema(extendedConfig);
20777
+ }
20588
20778
  function extendSchemaImpl(schemaConfig, documentAST, options) {
20589
20779
  var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid;
20590
20780
  const typeDefs = [];
@@ -22154,14 +22344,18 @@ async function fetchDocument(url, documentId, documentModelModule) {
22154
22344
  local: []
22155
22345
  },
22156
22346
  attachments: {},
22157
- initialState: utils.createExtendedState({
22158
- // TODO: getDocument should return all the initial state fields
22159
- created: result.document.created,
22160
- lastModified: result.document.created,
22161
- state: utils.createState({
22162
- global: result.document.initialState.state.global
22163
- })
22164
- }),
22347
+ initialState: {
22348
+ ...utils.createExtendedState({
22349
+ // TODO: getDocument should return all the initial state fields
22350
+ created: result.document.created,
22351
+ lastModified: result.document.created,
22352
+ state: utils.createState({
22353
+ global: result.document.initialState.state.global
22354
+ })
22355
+ }),
22356
+ id: result.document.id,
22357
+ slug: result.document.slug
22358
+ },
22165
22359
  clipboard: []
22166
22360
  } : null;
22167
22361
  return {
@@ -22216,7 +22410,13 @@ class ReadModeService {
22216
22410
  return document;
22217
22411
  }
22218
22412
  async addReadDrive(url, options) {
22219
- const { id } = (options == null ? void 0 : options.expectedDriveInfo) ?? await requestPublicDrive(url);
22413
+ let id;
22414
+ if (options == null ? void 0 : options.expectedDriveInfo) {
22415
+ id = options.expectedDriveInfo.id;
22416
+ } else {
22417
+ const drive = await requestPublicDrive(url);
22418
+ id = drive.id;
22419
+ }
22220
22420
  const result = await __privateMethod(this, _ReadModeService_instances, fetchDrive_fn).call(this, id, url);
22221
22421
  if (result instanceof Error) {
22222
22422
  throw result;
@@ -22239,7 +22439,7 @@ class ReadModeService {
22239
22439
  return Promise.resolve(result ? { ...result.drive, readContext: result.context } : new ReadDriveNotFoundError(id));
22240
22440
  }
22241
22441
  async getReadDriveBySlug(slug) {
22242
- const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.state.global.slug === slug);
22442
+ const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.slug === slug);
22243
22443
  return Promise.resolve(readDrive ? { ...readDrive.drive, readContext: readDrive.context } : new ReadDriveSlugNotFoundError(slug));
22244
22444
  }
22245
22445
  getReadDriveContext(id) {
@@ -22378,8 +22578,8 @@ class DefaultDrivesManager {
22378
22578
  }
22379
22579
  async preserveDrivesById(driveIdsToPreserve, drives, removeStrategy = "detach") {
22380
22580
  const getAllDrives = drives.map((driveId) => this.server.getDrive(driveId));
22381
- const drivesToRemove = (await Promise.all(getAllDrives)).filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).filter((drive) => !driveIdsToPreserve.includes(drive.state.global.id));
22382
- const driveIds = drivesToRemove.map((drive) => drive.state.global.id);
22581
+ const drivesToRemove = (await Promise.all(getAllDrives)).filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).filter((drive) => !driveIdsToPreserve.includes(drive.id));
22582
+ const driveIds = drivesToRemove.map((drive) => drive.id);
22383
22583
  if (removeStrategy === "detach") {
22384
22584
  await this.detachDrivesById(driveIds);
22385
22585
  } else {
@@ -22427,7 +22627,7 @@ class DefaultDrivesManager {
22427
22627
  case "remove-all": {
22428
22628
  const getDrives = driveids.map((driveId) => this.server.getDrive(driveId));
22429
22629
  const drives = await Promise.all(getDrives);
22430
- const drivesToRemove = drives.filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).map((drive) => drive.state.global.id);
22630
+ const drivesToRemove = drives.filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).map((drive) => drive.id);
22431
22631
  await this.removeDrivesById(drivesToRemove);
22432
22632
  break;
22433
22633
  }
@@ -22704,7 +22904,7 @@ class PullResponderTransmitter {
22704
22904
  static async executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
22705
22905
  var _a2, _b;
22706
22906
  staticLogger().verbose(`executePull(driveId: ${driveId}), trigger:`, trigger);
22707
- staticLogger().info(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22907
+ staticLogger().debug(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22708
22908
  const { url } = trigger.data;
22709
22909
  let strands;
22710
22910
  let error;
@@ -22868,7 +23068,7 @@ class PullResponderTransmitter {
22868
23068
  };
22869
23069
  const listenerId = await PullResponderTransmitter.registerPullResponder(driveId, url, filter);
22870
23070
  const pullTrigger = {
22871
- id: generateUUID(),
23071
+ id: generateId(),
22872
23072
  type: "PullResponder",
22873
23073
  driveId,
22874
23074
  filter,
@@ -23301,7 +23501,7 @@ class BaseDocumentDriveServer {
23301
23501
  async _initializeDrive(driveId) {
23302
23502
  var _a2, _b, _c;
23303
23503
  const drive = await this.getDrive(driveId);
23304
- this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.state.global.slug}"`);
23504
+ this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.slug}"`);
23305
23505
  await this.synchronizationManager.initializeDriveSyncStatus(driveId, drive);
23306
23506
  if (this.shouldSyncRemoteDrive(drive)) {
23307
23507
  this.logger.verbose(`[SYNC DEBUG] Starting sync for remote drive ${driveId}`);
@@ -23315,7 +23515,7 @@ class BaseDocumentDriveServer {
23315
23515
  this.logger.verbose(`[SYNC DEBUG] Created SwitchboardPush transmitter with URL: ${zodListener.callInfo.data || "none"}`);
23316
23516
  await this.listenerManager.setListener(driveId, {
23317
23517
  block: zodListener.block,
23318
- driveId: drive.state.global.id,
23518
+ driveId: drive.id,
23319
23519
  filter: {
23320
23520
  branch: zodListener.filter.branch ?? [],
23321
23521
  documentId: zodListener.filter.documentId ?? [],
@@ -23377,25 +23577,25 @@ class BaseDocumentDriveServer {
23377
23577
  return [...this.documentModelModules];
23378
23578
  }
23379
23579
  async addDrive(input, preferredEditor) {
23380
- const id = input.global.id || generateUUID();
23381
- if (!id) {
23382
- throw new Error("Invalid Drive Id");
23383
- }
23384
- const drives = await this.legacyStorage.getDrives();
23385
- if (drives.includes(id)) {
23386
- throw new DocumentAlreadyExistsError(id);
23387
- }
23388
23580
  const document = createDocument({
23389
- state: input
23581
+ id: input.id,
23582
+ slug: input.slug,
23583
+ state: {
23584
+ global: {
23585
+ icon: input.global.icon ?? null,
23586
+ name: input.global.name
23587
+ },
23588
+ local: input.local
23589
+ }
23390
23590
  });
23391
23591
  document.meta = {
23392
23592
  preferredEditor
23393
23593
  };
23394
- await this.legacyStorage.createDrive(id, document);
23395
- if (input.global.slug) {
23396
- await this.cache.deleteDriveBySlug(input.global.slug);
23594
+ await this.documentStorage.create(document);
23595
+ if (input.slug && input.slug.length > 0) {
23596
+ await this.cache.deleteDriveBySlug(input.slug);
23397
23597
  }
23398
- await this._initializeDrive(id);
23598
+ await this._initializeDrive(document.id);
23399
23599
  this.eventEmitter.emit("driveAdded", document);
23400
23600
  return document;
23401
23601
  }
@@ -23407,11 +23607,11 @@ class BaseDocumentDriveServer {
23407
23607
  pullInterval
23408
23608
  });
23409
23609
  return await this.addDrive({
23610
+ id,
23611
+ slug,
23410
23612
  global: {
23411
- id,
23412
23613
  name: name2,
23413
- slug,
23414
- icon: icon ?? null
23614
+ icon
23415
23615
  },
23416
23616
  local: {
23417
23617
  triggers: [...triggers, pullTrigger],
@@ -23426,7 +23626,7 @@ class BaseDocumentDriveServer {
23426
23626
  this.stopSyncRemoteDrive(driveId),
23427
23627
  this.listenerManager.removeDrive(driveId),
23428
23628
  this.cache.deleteDrive(driveId),
23429
- this.legacyStorage.deleteDrive(driveId)
23629
+ this.documentStorage.delete(driveId)
23430
23630
  ]);
23431
23631
  this.eventEmitter.emit("driveDeleted", driveId);
23432
23632
  result.forEach((r) => {
@@ -23435,8 +23635,16 @@ class BaseDocumentDriveServer {
23435
23635
  }
23436
23636
  });
23437
23637
  }
23438
- getDrives() {
23439
- return this.legacyStorage.getDrives();
23638
+ // TODO: paginate
23639
+ async getDrives() {
23640
+ const drives = [];
23641
+ let cursor;
23642
+ do {
23643
+ const { documents, nextCursor } = await this.documentStorage.findByType("powerhouse/document-drive", 100, cursor);
23644
+ drives.push(...documents);
23645
+ cursor = nextCursor;
23646
+ } while (cursor);
23647
+ return drives;
23440
23648
  }
23441
23649
  async getDrive(driveId, options) {
23442
23650
  let document;
@@ -23510,8 +23718,13 @@ class BaseDocumentDriveServer {
23510
23718
  state = doc.state;
23511
23719
  }
23512
23720
  const document = input.document ?? this.getDocumentModelModule(input.documentType).utils.createDocument();
23721
+ if (input.id && input.id.length > 0) {
23722
+ document.id = input.id;
23723
+ }
23513
23724
  const documentStorage = {
23725
+ id: document.id,
23514
23726
  name: document.name,
23727
+ slug: document.slug,
23515
23728
  revision: document.revision,
23516
23729
  documentType: document.documentType,
23517
23730
  created: document.created,
@@ -23521,7 +23734,7 @@ class BaseDocumentDriveServer {
23521
23734
  clipboard: [],
23522
23735
  state: state ?? document.state
23523
23736
  };
23524
- await this.documentStorage.create(input.id, documentStorage);
23737
+ await this.documentStorage.create(documentStorage);
23525
23738
  try {
23526
23739
  await this.documentStorage.addChild(driveId, input.id);
23527
23740
  } catch (e) {
@@ -23660,12 +23873,18 @@ class BaseDocumentDriveServer {
23660
23873
  handler = () => this.deleteDocument(driveId, signal.input.id);
23661
23874
  break;
23662
23875
  case "COPY_CHILD_DOCUMENT":
23663
- handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => this.createDocument(driveId, {
23664
- id: signal.input.newId,
23665
- documentType: documentToCopy.documentType,
23666
- document: documentToCopy,
23667
- synchronizationUnits: signal.input.synchronizationUnits
23668
- }));
23876
+ handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => {
23877
+ const doc = {
23878
+ ...documentToCopy,
23879
+ slug: signal.input.newId
23880
+ };
23881
+ return this.createDocument(driveId, {
23882
+ id: signal.input.newId,
23883
+ documentType: documentToCopy.documentType,
23884
+ document: doc,
23885
+ synchronizationUnits: signal.input.synchronizationUnits
23886
+ });
23887
+ });
23669
23888
  break;
23670
23889
  }
23671
23890
  if (handler) {
@@ -23922,13 +24141,6 @@ class BaseDocumentDriveServer {
23922
24141
  addDriveOperation(driveId, operation, options) {
23923
24142
  return this.addDriveOperations(driveId, [operation], options);
23924
24143
  }
23925
- async clearStorage() {
23926
- var _a2, _b;
23927
- for (const drive of await this.getDrives()) {
23928
- await this.deleteDrive(drive);
23929
- }
23930
- await ((_b = (_a2 = this.legacyStorage).clearStorage) == null ? void 0 : _b.call(_a2));
23931
- }
23932
24144
  async _addDriveOperations(driveId, callback) {
23933
24145
  if (!this.legacyStorage.addDriveOperationsWithTransaction) {
23934
24146
  const documentStorage = await this.documentStorage.get(driveId);
@@ -24203,17 +24415,32 @@ class MemoryStorage {
24203
24415
  exists(documentId) {
24204
24416
  return Promise.resolve(!!this.documents[documentId]);
24205
24417
  }
24206
- // TODO: this should throw an error if the document already exists.
24207
- create(documentId, document) {
24208
- var _a2;
24418
+ create(document) {
24419
+ const documentId = document.id;
24420
+ if (!isValidDocumentId(documentId)) {
24421
+ throw new DocumentIdValidationError(documentId);
24422
+ }
24423
+ if (this.documents[documentId]) {
24424
+ throw new DocumentAlreadyExistsError(documentId);
24425
+ }
24426
+ const slug = document.slug.length > 0 ? document.slug : documentId;
24427
+ if (!isValidSlug(slug)) {
24428
+ throw new DocumentSlugValidationError(slug);
24429
+ }
24430
+ if (slug && this.slugToDocumentId[slug]) {
24431
+ throw new DocumentAlreadyExistsError(documentId);
24432
+ }
24433
+ document.slug = slug;
24209
24434
  this.documents[documentId] = document;
24210
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24211
24435
  if (slug) {
24212
24436
  if (this.slugToDocumentId[slug]) {
24213
- throw new Error(`Document with slug ${slug} already exists`);
24437
+ throw new DocumentAlreadyExistsError(documentId);
24214
24438
  }
24215
24439
  this.slugToDocumentId[slug] = documentId;
24216
24440
  }
24441
+ if (document.documentType === "powerhouse/document-drive") {
24442
+ this.updateDriveManifest(documentId, { documentIds: /* @__PURE__ */ new Set() });
24443
+ }
24217
24444
  return Promise.resolve();
24218
24445
  }
24219
24446
  get(documentId) {
@@ -24230,20 +24457,56 @@ class MemoryStorage {
24230
24457
  }
24231
24458
  return this.get(documentId);
24232
24459
  }
24460
+ async findByType(documentModelType, limit = 100, cursor) {
24461
+ const documentsAndIds = Object.entries(this.documents).filter(([_, doc]) => doc.documentType === documentModelType).map(([id, doc]) => ({
24462
+ id,
24463
+ document: doc
24464
+ }));
24465
+ documentsAndIds.sort((a, b) => {
24466
+ const aDate = new Date(a.document.created);
24467
+ const bDate = new Date(b.document.created);
24468
+ if (aDate.getTime() === bDate.getTime()) {
24469
+ const aId = a.id;
24470
+ const bId = b.id;
24471
+ return aId.localeCompare(bId);
24472
+ }
24473
+ return aDate.getTime() - bDate.getTime();
24474
+ });
24475
+ let startIndex = 0;
24476
+ if (cursor) {
24477
+ const index = documentsAndIds.findIndex(({ id }) => id === cursor);
24478
+ if (index !== -1) {
24479
+ startIndex = index;
24480
+ }
24481
+ }
24482
+ const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
24483
+ let nextCursor;
24484
+ if (endIndex < documentsAndIds.length) {
24485
+ nextCursor = documentsAndIds[endIndex].id;
24486
+ }
24487
+ return {
24488
+ documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
24489
+ nextCursor
24490
+ };
24491
+ }
24233
24492
  async delete(documentId) {
24234
- var _a2;
24235
24493
  const document = this.documents[documentId];
24236
24494
  if (document) {
24237
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24495
+ const slug = document.slug.length > 0 ? document.slug : documentId;
24238
24496
  if (slug && this.slugToDocumentId[slug] === documentId) {
24239
24497
  delete this.slugToDocumentId[slug];
24240
24498
  }
24241
24499
  }
24242
- const drives = await this.getDrives();
24243
- for (const driveId of drives) {
24244
- if (driveId === documentId)
24245
- continue;
24246
- await this.removeChild(driveId, documentId);
24500
+ const parents = await this.getParents(documentId);
24501
+ for (const parent of parents) {
24502
+ await this.removeChild(parent, documentId);
24503
+ }
24504
+ const children = await this.getChildren(documentId);
24505
+ for (const child of children) {
24506
+ const childParents = await this.getParents(child);
24507
+ if (childParents.length === 1) {
24508
+ await this.delete(child);
24509
+ }
24247
24510
  }
24248
24511
  delete this.driveManifests[documentId];
24249
24512
  if (this.documents[documentId]) {
@@ -24277,14 +24540,26 @@ class MemoryStorage {
24277
24540
  const manifest = this.getManifest(parentId);
24278
24541
  return [...manifest.documentIds];
24279
24542
  }
24543
+ async getParents(childId) {
24544
+ const parents = [];
24545
+ for (const [driveId, manifest] of Object.entries(this.driveManifests)) {
24546
+ if (manifest.documentIds.has(childId)) {
24547
+ parents.push(driveId);
24548
+ }
24549
+ }
24550
+ return parents;
24551
+ }
24280
24552
  ////////////////////////////////
24281
- // IDriveStorage
24553
+ // IDocumentAdminStorage
24282
24554
  ////////////////////////////////
24283
- async clearStorage() {
24555
+ async clear() {
24284
24556
  this.documents = {};
24285
24557
  this.driveManifests = {};
24286
24558
  this.slugToDocumentId = {};
24287
24559
  }
24560
+ ////////////////////////////////
24561
+ // IDriveStorage
24562
+ ////////////////////////////////
24288
24563
  async addDocumentOperations(drive, id, operations, header) {
24289
24564
  const document = await this.get(id);
24290
24565
  if (!document) {
@@ -24297,13 +24572,6 @@ class MemoryStorage {
24297
24572
  operations: mergedOperations
24298
24573
  };
24299
24574
  }
24300
- async getDrives() {
24301
- return Object.keys(this.driveManifests);
24302
- }
24303
- async createDrive(id, drive) {
24304
- await this.create(id, drive);
24305
- this.updateDriveManifest(id, { documentIds: /* @__PURE__ */ new Set() });
24306
- }
24307
24575
  async addDriveOperations(id, operations, header) {
24308
24576
  const drive = await this.get(id);
24309
24577
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -24313,31 +24581,6 @@ class MemoryStorage {
24313
24581
  operations: mergedOperations
24314
24582
  };
24315
24583
  }
24316
- async deleteDrive(id) {
24317
- const manifest = this.getManifest(id);
24318
- const drives = await this.getDrives();
24319
- await Promise.all([...manifest.documentIds].map((docId) => {
24320
- var _a2;
24321
- for (const driveId of drives) {
24322
- if (driveId === id) {
24323
- continue;
24324
- }
24325
- const manifest2 = this.getManifest(driveId);
24326
- if (manifest2.documentIds.has(docId)) {
24327
- return;
24328
- }
24329
- }
24330
- const document = this.documents[docId];
24331
- if (document) {
24332
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24333
- if (slug && this.slugToDocumentId[slug] === docId) {
24334
- delete this.slugToDocumentId[slug];
24335
- }
24336
- }
24337
- delete this.documents[docId];
24338
- }));
24339
- await this.delete(id);
24340
- }
24341
24584
  async getSynchronizationUnitsRevision(units) {
24342
24585
  const results = await Promise.allSettled(units.map(async (unit) => {
24343
24586
  try {
@@ -25540,6 +25783,9 @@ function Syncing(props) {
25540
25783
  function Tabler(props) {
25541
25784
  return jsxs("svg", { ...props, width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("path", { d: "M4.5 9V7.5C4.5 6.30653 4.97411 5.16193 5.81802 4.31802C6.66193 3.47411 7.80653 3 9 3C10.1935 3 11.3381 3.47411 12.182 4.31802C13.0259 5.16193 13.5 6.30653 13.5 7.5V9M3 13.5C3 13.8978 3.15804 14.2794 3.43934 14.5607C3.72064 14.842 4.10218 15 4.5 15C4.89782 15 5.27936 14.842 5.56066 14.5607C5.84196 14.2794 6 13.8978 6 13.5C6 13.1022 5.84196 12.7206 5.56066 12.4393C5.27936 12.158 4.89782 12 4.5 12C4.10218 12 3.72064 12.158 3.43934 12.4393C3.15804 12.7206 3 13.1022 3 13.5ZM12 13.5C12 13.8978 12.158 14.2794 12.4393 14.5607C12.7206 14.842 13.1022 15 13.5 15C13.8978 15 14.2794 14.842 14.5607 14.5607C14.842 14.2794 15 13.8978 15 13.5C15 13.1022 14.842 12.7206 14.5607 12.4393C14.2794 12.158 13.8978 12 13.5 12C13.1022 12 12.7206 12.158 12.4393 12.4393C12.158 12.7206 12 13.1022 12 13.5Z", stroke: "currentcolor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M11.25 6.75L13.5 9L15.75 6.75", stroke: "currentcolor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] });
25542
25785
  }
25786
+ function TimelineCaret(props) {
25787
+ return jsx("svg", { ...props, width: "10", height: "7", viewBox: "0 0 10 7", fill: "currentcolor", children: jsx("path", { d: "M0.539174 0.830403L0.539396 0.830693L4.81717 6.41675L0.539174 0.830403ZM0.539174 0.830403C0.492941 0.770121 0.486776 0.69618 0.524599 0.622069C0.562768 0.547277 0.632849 0.5 0.721373 0.5L9.27711 0.5C9.36895 0.5 9.44336 0.552912 9.47789 0.620069C9.51177 0.686686 9.50789 0.767089 9.45938 0.830307L9.45889 0.83095M0.539174 0.830403L9.45889 0.83095M9.45889 0.83095C9.05222 1.36269 7.09357 3.91999 5.94678 5.41729C5.588 5.88573 5.30868 6.25042 5.18122 6.41687M9.45889 0.83095L5.18122 6.41687M5.18122 6.41687C5.1428 6.46691 5.07824 6.5 4.99924 6.5M5.18122 6.41687L4.99924 6.5M4.99924 6.5C4.92023 6.5 4.85567 6.46691 4.81726 6.41687L4.99924 6.5Z", fill: "currentcolor", stroke: "currentcolor" }) });
25788
+ }
25543
25789
  function Timeline(props) {
25544
25790
  return jsxs("svg", { ...props, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentcolor", children: [jsx("rect", { width: "16", height: "16", fill: "url(#pattern0_1256_1508)" }), jsxs("defs", { children: [jsx("pattern", { id: "pattern0_1256_1508", patternContentUnits: "objectBoundingBox", width: "1", height: "1", children: jsx("use", { href: "#image0_1256_1508", transform: "scale(0.00195312)" }) }), jsx("image", { id: "image0_1256_1508", width: "512", height: "512", preserveAspectRatio: "none", href: "data:image/png;base64,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" })] })] });
25545
25791
  }
@@ -25680,6 +25926,7 @@ const iconComponents = {
25680
25926
  Synced,
25681
25927
  Syncing,
25682
25928
  Tabler,
25929
+ TimelineCaret,
25683
25930
  Timeline,
25684
25931
  TrashFill,
25685
25932
  Trash,
@@ -25742,7 +25989,12 @@ const ADD_TRIGGER = "ADD_TRIGGER";
25742
25989
  const ADD_INVALID_TRIGGER = "ADD_INVALID_TRIGGER";
25743
25990
  const defaultDriveOptions = [NEW_FOLDER, RENAME, SETTINGS];
25744
25991
  const defaultFileOptions = [RENAME, DELETE, DUPLICATE];
25745
- const defaultFolderOptions = [RENAME, DELETE, DUPLICATE];
25992
+ const defaultFolderOptions = [
25993
+ NEW_FOLDER,
25994
+ RENAME,
25995
+ DELETE,
25996
+ DUPLICATE
25997
+ ];
25746
25998
  const debugNodeOptions = [
25747
25999
  ADD_TRIGGER,
25748
26000
  REMOVE_TRIGGER,
@@ -25822,19 +26074,19 @@ const nodeOptionsMap = {
25822
26074
  };
25823
26075
  const name = "@powerhousedao/connect";
25824
26076
  const productName = "Powerhouse-Connect";
25825
- const version$1 = "1.0.23-staging.2";
26077
+ const version$1 = "1.0.25-dev.0";
25826
26078
  const description = "Powerhouse Connect";
25827
26079
  const main = "./dist/index.html";
25828
26080
  const type = "module";
25829
- const engines = { "node": ">=20.0.0" };
26081
+ const engines = { "node": ">=22.0.0" };
25830
26082
  const files$1 = ["dist", "nginx.conf", "nginx.sh", "scripts"];
25831
26083
  const license = "AGPL-3.0-only";
25832
26084
  const author = "acaldas@powerhouse.inc";
25833
26085
  const repository = { "type": "git", "url": "git+https://github.com/powerhouse-inc/document-model-electron.git" };
25834
26086
  const bugs = { "url": "https://github.com/powerhouse-inc/document-model-electron/issues" };
25835
26087
  const homepage = "https://github.com/powerhouse-inc/document-model-electron#readme";
25836
- const scripts = { "build:tsc": "tsc --build", "start": "electron-forge start", "package": "electron-forge package", "make": "PH_CONNECT_BASE_HREF=./ electron-forge make", "make:mac": "PH_CONNECT_BASE_HREF=./ electron-forge make -p darwin", "make:linux": "PH_CONNECT_BASE_HREF=./ electron-forge make -p linux", "make:windows": "PH_CONNECT_BASE_HREF=./ electron-forge make -p win32", "publish:electron": "electron-forge publish", "prepublishOnly": "npm run build", "lint": "eslint .", "lint:fix": "eslint --fix .", "lint:nx": "eslint --quiet --fix .", "format": 'prettier --write "**/*.+(js|ts|jsx|tsx|json)"', "dev": "vite -c vite.renderer.config.mts", "dev:nocache": "rm -rf node_modules/.vite && rm -rf node_modules/.cache && npm run dev", "prebuild": "tsc --build --noEmit", "build": "NODE_OPTIONS=--max-old-space-size=6144 vite build -c vite.renderer.config.mts", "preview:web": "vite preview -c vite.renderer.config.mts", "e2e": "playwright test", "cy:open": "cypress open", "build:service-worker": "tsc --build ./tsconfig.sw.json", "clean": "rimraf dist", "clean:node_modules": "rimraf node_modules" };
25837
- const devDependencies = { "@electron-forge/cli": "^6.1.1", "@electron-forge/maker-deb": "^6.1.1", "@electron-forge/maker-rpm": "^6.1.1", "@electron-forge/maker-squirrel": "^6.1.1", "@electron-forge/maker-zip": "^6.1.1", "@electron-forge/plugin-vite": "^6.1.1", "@electron-forge/publisher-electron-release-server": "^6.2.1", "@electron-forge/publisher-github": "^7.2.0", "@electron-forge/shared-types": "^7.7.0", "@playwright/test": "^1.41.2", "@powerhousedao/builder-tools": "workspace:*", "@powerhousedao/common": "workspace:*", "@powerhousedao/config": "workspace:*", "@powerhousedao/design-system": "workspace:*", "@powerhousedao/reactor-browser": "workspace:*", "@rollup/plugin-node-resolve": "^15.2.3", "@sentry/browser": "^9.1.0", "@sentry/react": "^7.109.0", "@sentry/vite-plugin": "^2.23.0", "@tailwindcss/vite": "^4.1.4", "@tanstack/react-virtual": "^3.8.1", "@types/node": "^22.13.10", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.18", "@types/uuid": "^9.0.7", "@types/wicg-file-system-access": "^2020.9.6", "@vitejs/plugin-basic-ssl": "^2.0.0", "@vitejs/plugin-react": "^4.4.1", "asar": "^3.2.0", "did-key-creator": "^1.2.0", "document-drive": "workspace:*", "document-model": "workspace:*", "electron": "30.0.0", "electron-is-dev": "^3.0.1", "electron-playwright-helpers": "^1.7.1", "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", "esbuild": "^0.24.0", "graphql": "^16.11.0", "graphql-request": "^6.1.0", "i18next": "^23.7.6", "jotai": "^2.1.0", "jotai-effect": "^1.1.6", "localforage": "^1.10.0", "lz-string": "^1.5.0", "playwright": "^1.41.2", "playwright-core": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^4.0.11", "react-hotkeys-hook": "^4.5.0", "react-i18next": "^13.5.0", "react-router-dom": "^6.11.2", "tailwind-merge": "^3.0.2", "tailwindcss": "^4.1.4", "uuid": "^9.0.1", "viem": "^2.8.13", "vite": "^6.3.3", "vite-envs": "^4.6.0", "vite-plugin-html": "^3.2.2", "vite-plugin-node-polyfills": "^0.23.0", "vite-plugin-svgr": "^4.3.0", "vite-tsconfig-paths": "^5.1.4", "xvfb-maybe": "^0.2.1" };
26088
+ const scripts = { "build:tsc": "tsc --build", "start": "electron-forge start", "package": "electron-forge package", "make": "PH_CONNECT_BASE_HREF=./ electron-forge make", "make:mac": "PH_CONNECT_BASE_HREF=./ electron-forge make -p darwin", "make:linux": "PH_CONNECT_BASE_HREF=./ electron-forge make -p linux", "make:windows": "PH_CONNECT_BASE_HREF=./ electron-forge make -p win32", "publish:electron": "electron-forge publish", "prepublishOnly": "npm run build", "lint": "eslint .", "lint:fix": "eslint --fix .", "lint:nx": "eslint --quiet --fix .", "format": 'prettier --write "**/*.+(js|ts|jsx|tsx|json)"', "dev": "vite -c vite.renderer.config.mts", "dev:nocache": "rm -rf node_modules/.vite && rm -rf node_modules/.cache && npm run dev", "prebuild": "npm run clean && tsc --build --noEmit", "build": "NODE_OPTIONS=--max-old-space-size=6144 vite build -c vite.renderer.config.mts", "preview:web": "vite preview -c vite.renderer.config.mts", "e2e": "playwright test", "cy:open": "cypress open", "build:service-worker": "tsc --build ./tsconfig.sw.json", "clean": "rimraf dist", "clean:node_modules": "rimraf node_modules" };
26089
+ const devDependencies = { "@electron-forge/cli": "^6.1.1", "@electron-forge/maker-deb": "^6.1.1", "@electron-forge/maker-rpm": "^6.1.1", "@electron-forge/maker-squirrel": "^6.1.1", "@electron-forge/maker-zip": "^6.1.1", "@electron-forge/plugin-vite": "^6.1.1", "@electron-forge/publisher-electron-release-server": "^6.2.1", "@electron-forge/publisher-github": "^7.2.0", "@electron-forge/shared-types": "^7.7.0", "@playwright/test": "^1.41.2", "@powerhousedao/builder-tools": "workspace:*", "@powerhousedao/common": "workspace:*", "@powerhousedao/config": "workspace:*", "@powerhousedao/design-system": "workspace:*", "@powerhousedao/diff-analyzer": "^0.0.0-dev.4", "@powerhousedao/reactor-browser": "workspace:*", "@powerhousedao/scalars": "workspace:*", "@rollup/plugin-node-resolve": "^15.2.3", "@sentry/browser": "^9.1.0", "@sentry/react": "^7.109.0", "@sentry/vite-plugin": "^2.22.2", "@tailwindcss/vite": "^4.0.9", "@tanstack/react-virtual": "^3.8.1", "@types/node": "^22.15.17", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.18", "@types/uuid": "^9.0.7", "@types/wicg-file-system-access": "^2020.9.6", "@vitejs/plugin-basic-ssl": "^1.2.0", "@vitejs/plugin-react": "^4.2.1", "asar": "^3.2.0", "did-key-creator": "^1.2.0", "document-drive": "workspace:*", "document-model": "workspace:*", "electron": "30.0.0", "electron-is-dev": "^3.0.1", "electron-playwright-helpers": "^1.7.1", "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", "esbuild": "^0.24.0", "graphql": "^16.8.1", "graphql-request": "^6.1.0", "i18next": "^23.7.6", "jotai": "^2.1.0", "jotai-effect": "^1.1.6", "localforage": "^1.10.0", "lz-string": "^1.5.0", "playwright": "^1.41.2", "playwright-core": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^4.0.11", "react-hotkeys-hook": "^4.5.0", "react-i18next": "^13.5.0", "react-router-dom": "^6.11.2", "tailwind-merge": "^3.0.2", "tailwindcss": "^4.0.9", "uuid": "^9.0.1", "viem": "^2.8.13", "vite": "^6.2.2", "vite-envs": "^4.4.11", "vite-plugin-html": "^3.2.2", "vite-plugin-node-polyfills": "^0.23.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.3.2", "xvfb-maybe": "^0.2.1" };
25838
26090
  const optionalDependencies = { "@esbuild/linux-x64": "^0.21.4", "@rollup/rollup-linux-x64-musl": "4.14.3" };
25839
26091
  const packageJson = {
25840
26092
  name,
@@ -25875,13 +26127,15 @@ const PH_CONNECT_SENTRY_ENV = window.__VITE_ENVS.PH_CONNECT_SENTRY_ENV || "dev";
25875
26127
  const PH_CONNECT_SENTRY_TRACING_ENABLED = window.__VITE_ENVS.PH_CONNECT_SENTRY_TRACING_ENABLED || "false";
25876
26128
  const GA_TRACKING_ID = window.__VITE_ENVS.PH_CONNECT_GA_TRACKING_ID;
25877
26129
  const PH_CONNECT_CLI_VERSION = window.__VITE_ENVS.PH_CONNECT_CLI_VERSION || void 0;
25878
- setLogLevel(window.__VITE_ENVS.LOG_LEVEL);
25879
- logger$1.info(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
26130
+ const LOG_LEVEL = isLogLevel(window.__VITE_ENVS.LOG_LEVEL) ? window.__VITE_ENVS.LOG_LEVEL : "info";
26131
+ setLogLevel(LOG_LEVEL);
26132
+ logger$1.debug(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
25880
26133
  const connectConfig = {
25881
26134
  appVersion: APP_VERSION,
25882
26135
  studioMode: PH_CONNECT_STUDIO_MODE.toString() === "true",
25883
26136
  warnOutdatedApp: WARN_OUTDATED_APP === "true",
25884
26137
  routerBasename: PH_CONNECT_ROUTER_BASENAME,
26138
+ analyticsDatabaseName: `${PH_CONNECT_ROUTER_BASENAME}:analytics`,
25885
26139
  sentry: {
25886
26140
  dsn: PH_CONNECT_SENTRY_DSN,
25887
26141
  env: PH_CONNECT_SENTRY_ENV,
@@ -25975,6 +26229,7 @@ DriveSections.filter(
25975
26229
  };
25976
26230
  });
25977
26231
  var lzString = { exports: {} };
26232
+ lzString.exports;
25978
26233
  var hasRequiredLzString;
25979
26234
  function requireLzString() {
25980
26235
  if (hasRequiredLzString) return lzString.exports;
@@ -28615,6 +28870,9 @@ const _BrowserStorage = class _BrowserStorage {
28615
28870
  name: namespace ? `${namespace}:${_BrowserStorage.DBName}` : _BrowserStorage.DBName
28616
28871
  }));
28617
28872
  }
28873
+ ////////////////////////////////
28874
+ // IDocumentAdminStorage
28875
+ ////////////////////////////////
28618
28876
  async clear() {
28619
28877
  const db = await this.db;
28620
28878
  await db.clear();
@@ -28627,19 +28885,35 @@ const _BrowserStorage = class _BrowserStorage {
28627
28885
  const document = await db.getItem(this.buildDocumentKey(documentId));
28628
28886
  return !!document;
28629
28887
  }
28630
- // TODO: this should throw an error if the document already exists.
28631
- async create(documentId, document) {
28632
- var _a2;
28888
+ async create(document) {
28889
+ const documentId = document.id;
28890
+ if (!isValidDocumentId(documentId)) {
28891
+ throw new DocumentIdValidationError(documentId);
28892
+ }
28633
28893
  const db = await this.db;
28894
+ if (await this.exists(documentId)) {
28895
+ throw new DocumentAlreadyExistsError(documentId);
28896
+ }
28897
+ const slug = document.slug.length > 0 ? document.slug : documentId;
28898
+ if (!isValidSlug(slug)) {
28899
+ throw new DocumentSlugValidationError(slug);
28900
+ }
28901
+ const slugManifest = await this.getSlugManifest();
28902
+ if (slugManifest.slugToId[slug]) {
28903
+ throw new DocumentAlreadyExistsError(documentId);
28904
+ }
28905
+ document.slug = slug;
28634
28906
  await db.setItem(this.buildDocumentKey(documentId), document);
28635
- const slug = ((_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug) ?? documentId;
28636
28907
  if (slug) {
28637
- const slugManifest = await this.getSlugManifest();
28638
- if (slugManifest.slugToId[slug]) {
28908
+ const slugManifest2 = await this.getSlugManifest();
28909
+ if (slugManifest2.slugToId[slug]) {
28639
28910
  throw new Error(`Document with slug ${slug} already exists`);
28640
28911
  }
28641
- slugManifest.slugToId[slug] = documentId;
28642
- await this.updateSlugManifest(slugManifest);
28912
+ slugManifest2.slugToId[slug] = documentId;
28913
+ await this.updateSlugManifest(slugManifest2);
28914
+ }
28915
+ if (document.documentType === "powerhouse/document-drive") {
28916
+ this.updateDriveManifest(documentId, { documentIds: [] });
28643
28917
  }
28644
28918
  }
28645
28919
  async get(documentId) {
@@ -28658,15 +28932,56 @@ const _BrowserStorage = class _BrowserStorage {
28658
28932
  }
28659
28933
  return this.get(documentId);
28660
28934
  }
28935
+ async findByType(documentModelType, limit = 100, cursor) {
28936
+ const db = await this.db;
28937
+ const keys = await db.keys();
28938
+ const documentKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.DOCUMENT_KEY}${_BrowserStorage.SEP}`));
28939
+ const documentsAndIds = [];
28940
+ for (const key of documentKeys) {
28941
+ const documentId = key.slice(_BrowserStorage.DOCUMENT_KEY.length + _BrowserStorage.SEP.length);
28942
+ try {
28943
+ const document = await db.getItem(key);
28944
+ if (!document || document.documentType !== documentModelType) {
28945
+ continue;
28946
+ }
28947
+ documentsAndIds.push({ id: documentId, document });
28948
+ } catch (error) {
28949
+ continue;
28950
+ }
28951
+ }
28952
+ documentsAndIds.sort((a, b) => {
28953
+ const aDate = new Date(a.document.created);
28954
+ const bDate = new Date(b.document.created);
28955
+ if (aDate.getTime() === bDate.getTime()) {
28956
+ return a.id.localeCompare(b.id);
28957
+ }
28958
+ return aDate.getTime() - bDate.getTime();
28959
+ });
28960
+ let startIndex = 0;
28961
+ if (cursor) {
28962
+ const index = documentsAndIds.findIndex(({ id }) => id === cursor);
28963
+ if (index !== -1) {
28964
+ startIndex = index;
28965
+ }
28966
+ }
28967
+ const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
28968
+ let nextCursor;
28969
+ if (endIndex < documentsAndIds.length) {
28970
+ nextCursor = documentsAndIds[endIndex].id;
28971
+ }
28972
+ return {
28973
+ documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
28974
+ nextCursor
28975
+ };
28976
+ }
28661
28977
  async delete(documentId) {
28662
- var _a2;
28663
28978
  const db = await this.db;
28664
28979
  const document = await db.getItem(this.buildDocumentKey(documentId));
28665
28980
  if (!document) {
28666
28981
  return false;
28667
28982
  }
28983
+ const slug = document.slug.length > 0 ? document.slug : documentId;
28668
28984
  try {
28669
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
28670
28985
  if (slug) {
28671
28986
  const slugManifest = await this.getSlugManifest();
28672
28987
  if (slugManifest.slugToId[slug] === documentId) {
@@ -28676,11 +28991,16 @@ const _BrowserStorage = class _BrowserStorage {
28676
28991
  }
28677
28992
  } catch (error) {
28678
28993
  }
28679
- const drives = await this.getDrives();
28680
- for (const driveId of drives) {
28681
- if (driveId === documentId)
28682
- continue;
28683
- await this.removeChild(driveId, documentId);
28994
+ const parents = await this.getParents(documentId);
28995
+ for (const parent of parents) {
28996
+ await this.removeChild(parent, documentId);
28997
+ }
28998
+ const children = await this.getChildren(documentId);
28999
+ for (const child of children) {
29000
+ const childParents = await this.getParents(child);
29001
+ if (childParents.length === 1 && childParents[0] === documentId) {
29002
+ await this.delete(child);
29003
+ }
28684
29004
  }
28685
29005
  await db.removeItem(this.buildManifestKey(documentId));
28686
29006
  await db.removeItem(this.buildDocumentKey(documentId));
@@ -28714,6 +29034,20 @@ const _BrowserStorage = class _BrowserStorage {
28714
29034
  const manifest = await this.getManifest(parentId);
28715
29035
  return manifest.documentIds;
28716
29036
  }
29037
+ async getParents(childId) {
29038
+ const db = await this.db;
29039
+ const keys = await db.keys();
29040
+ const parents = [];
29041
+ const manifestKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.MANIFEST_KEY}${_BrowserStorage.SEP}`));
29042
+ for (const key of manifestKeys) {
29043
+ const driveId = key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length);
29044
+ const manifest = await this.getManifest(driveId);
29045
+ if (manifest.documentIds.includes(childId)) {
29046
+ parents.push(driveId);
29047
+ }
29048
+ }
29049
+ return parents;
29050
+ }
28717
29051
  ////////////////////////////////
28718
29052
  // IDriveStorage
28719
29053
  ////////////////////////////////
@@ -28735,9 +29069,6 @@ const _BrowserStorage = class _BrowserStorage {
28735
29069
  const db = await this.db;
28736
29070
  await db.setItem(_BrowserStorage.SLUG_MANIFEST_KEY, manifest);
28737
29071
  }
28738
- async clearStorage() {
28739
- return (await this.db).clear();
28740
- }
28741
29072
  async addDocumentOperations(drive, id, operations, header) {
28742
29073
  const document = await this.get(id);
28743
29074
  if (!document) {
@@ -28751,20 +29082,6 @@ const _BrowserStorage = class _BrowserStorage {
28751
29082
  operations: mergedOperations
28752
29083
  });
28753
29084
  }
28754
- async getDrives() {
28755
- const db = await this.db;
28756
- const keys = await db.keys();
28757
- return keys.filter((key) => key.startsWith(_BrowserStorage.MANIFEST_KEY)).map((key) => key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length));
28758
- }
28759
- async createDrive(id, drive) {
28760
- await this.create(id, drive);
28761
- await this.updateDriveManifest(id, { documentIds: [] });
28762
- }
28763
- async deleteDrive(id) {
28764
- const documents = await this.getChildren(id);
28765
- await Promise.all(documents.map((doc) => this.delete(doc)));
28766
- await this.delete(id);
28767
- }
28768
29085
  async addDriveOperations(id, operations, header) {
28769
29086
  const drive = await this.get(id);
28770
29087
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -28805,12 +29122,16 @@ const _BrowserStorage = class _BrowserStorage {
28805
29122
  }
28806
29123
  // migrates all stored operations from legacy signature to signatures array
28807
29124
  async migrateOperationSignatures() {
28808
- const drives = await this.getDrives();
28809
- for (const drive of drives) {
28810
- await this.migrateDrive(drive);
28811
- const documents = await this.getChildren(drive);
28812
- await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
28813
- }
29125
+ let cursor;
29126
+ do {
29127
+ const { documents: drives, nextCursor } = await this.findByType("powerhouse/document-drive", 100, cursor);
29128
+ for (const drive of drives) {
29129
+ await this.migrateDrive(drive);
29130
+ const documents = await this.getChildren(drive);
29131
+ await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
29132
+ }
29133
+ cursor = nextCursor;
29134
+ } while (cursor);
28814
29135
  }
28815
29136
  async migrateDrive(driveId) {
28816
29137
  const drive = await this.get(driveId);
@@ -28884,8 +29205,11 @@ const getReactorDefaultDrivesConfig = () => {
28884
29205
  }
28885
29206
  };
28886
29207
  };
28887
- function createBrowserDocumentDriveServer(documentModels, routerBasename) {
28888
- return new ReactorBuilder(documentModels).withStorage(new BrowserStorage(routerBasename)).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
29208
+ function createBrowserStorage(routerBasename) {
29209
+ return new BrowserStorage(routerBasename);
29210
+ }
29211
+ function createBrowserDocumentDriveServer(documentModels, storage) {
29212
+ return new ReactorBuilder(documentModels).withStorage(storage).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
28889
29213
  }
28890
29214
  const VERSION_CHECK_INTERVAL = parseInt(window.__VITE_ENVS.PH_CONNECT_VERSION_CHECK_INTERVAL) || 60 * 60 * 1e3;
28891
29215
  const basePath = connectConfig.routerBasename;
@@ -31444,14 +31768,14 @@ if (window.__VITE_ENVS.MODE === "development") {
31444
31768
  } else {
31445
31769
  serviceWorkerManager.registerServiceWorker(false);
31446
31770
  }
31447
- const App = lazy(() => __vitePreload(() => import("./app-_0wz8A4r.js").then((n) => n.a_), true ? __vite__mapDeps([0,1,2]) : void 0));
31771
+ const App = lazy(() => __vitePreload(() => import("./app-BUYipU-h.js").then((n) => n.bs), true ? __vite__mapDeps([0,1,2]) : void 0));
31448
31772
  const AppLoader = /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(App, {}) });
31449
31773
  const appLoader = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
31450
31774
  __proto__: null,
31451
31775
  default: AppLoader
31452
31776
  }, Symbol.toStringTag, { value: "Module" }));
31453
31777
  export {
31454
- getDefaultExportFromCjs as $,
31778
+ Icon as $,
31455
31779
  AddStateExampleInputSchema as A,
31456
31780
  SetModuleDescriptionInputSchema as B,
31457
31781
  SetModuleNameInputSchema as C,
@@ -31478,148 +31802,149 @@ export {
31478
31802
  baseLoadFromFile as X,
31479
31803
  baseLoadFromInput as Y,
31480
31804
  pascalCase as Z,
31481
- Icon as _,
31805
+ logger$1 as _,
31482
31806
  createReducer as a,
31483
- DELETE as a$,
31484
- LOCAL as a0,
31485
- commonjsGlobal as a1,
31486
- PUBLIC as a2,
31807
+ getNamedType as a$,
31808
+ getDefaultExportFromCjs as a0,
31809
+ LOCAL as a1,
31810
+ commonjsGlobal as a2,
31487
31811
  SWITCHBOARD as a3,
31488
- locationInfoByLocation as a4,
31489
- sharingTypeOptions as a5,
31490
- objectType as a6,
31491
- recordType as a7,
31812
+ PUBLIC as a4,
31813
+ locationInfoByLocation as a5,
31814
+ sharingTypeOptions as a6,
31815
+ objectType as a7,
31492
31816
  stringType as a8,
31493
- capitalCase as a9,
31494
- moveNode as aA,
31495
- generateNodesCopy as aB,
31496
- copyNode as aC,
31497
- createState as aD,
31498
- setDriveName as aE,
31499
- setAvailableOffline as aF,
31500
- setSharingType as aG,
31501
- SynchronizationUnitNotFoundError as aH,
31502
- removeTrigger as aI,
31503
- generateUUID as aJ,
31504
- PullResponderTransmitter as aK,
31505
- addTrigger as aL,
31506
- ReadDriveNotFoundError as aM,
31507
- openUrl as aN,
31508
- getNodeOptions as aO,
31509
- DRIVE as aP,
31510
- FOLDER as aQ,
31511
- requestPublicDrive as aR,
31512
- serviceWorkerManager as aS,
31513
- packageJson as aT,
31514
- t as aU,
31515
- gql as aV,
31516
- request as aW,
31517
- getDimensions as aX,
31518
- READ as aY,
31519
- nodeOptionsMap as aZ,
31520
- defaultFileOptions as a_,
31521
- CLOUD as aa,
31522
- createZip as ab,
31523
- logger$1 as ac,
31817
+ recordType as a9,
31818
+ updateNode as aA,
31819
+ FILE as aB,
31820
+ moveNode as aC,
31821
+ generateNodesCopy as aD,
31822
+ copyNode as aE,
31823
+ createState as aF,
31824
+ setDriveName as aG,
31825
+ setAvailableOffline as aH,
31826
+ setSharingType as aI,
31827
+ SynchronizationUnitNotFoundError as aJ,
31828
+ removeTrigger as aK,
31829
+ PullResponderTransmitter as aL,
31830
+ addTrigger as aM,
31831
+ ReadDriveNotFoundError as aN,
31832
+ openUrl as aO,
31833
+ getNodeOptions as aP,
31834
+ DRIVE as aQ,
31835
+ FOLDER as aR,
31836
+ requestPublicDrive as aS,
31837
+ serviceWorkerManager as aT,
31838
+ packageJson as aU,
31839
+ t as aV,
31840
+ gql as aW,
31841
+ request as aX,
31842
+ inspect as aY,
31843
+ GraphQLError as aZ,
31844
+ invariant as a_,
31845
+ capitalCase as aa,
31846
+ CLOUD as ab,
31847
+ createZip as ac,
31524
31848
  LZString as ad,
31525
31849
  buildSignedOperation as ae,
31526
- getI18n as af,
31527
- getDefaults as ag,
31850
+ getDefaults as af,
31851
+ getI18n as ag,
31528
31852
  connectConfig as ah,
31529
31853
  hashDocumentStateForScope as ai,
31530
31854
  getAugmentedNamespace as aj,
31531
- setErrorHandler as ak,
31532
- driveDocumentModelModule as al,
31533
- createBrowserDocumentDriveServer as am,
31534
- hashKey as an,
31535
- childLogger as ao,
31536
- reducer as ap,
31537
- isDocumentDrive as aq,
31538
- generateAddNodeAction as ar,
31539
- isFileNode as as,
31540
- uploadDocumentOperations as at,
31541
- updateFile as au,
31542
- addFolder as av,
31543
- isFolderNode as aw,
31544
- deleteNode as ax,
31545
- updateNode as ay,
31546
- FILE as az,
31855
+ childLogger as ak,
31856
+ process as al,
31857
+ setErrorHandler as am,
31858
+ driveDocumentModelModule as an,
31859
+ createBrowserStorage as ao,
31860
+ createBrowserDocumentDriveServer as ap,
31861
+ generateId as aq,
31862
+ reducer as ar,
31863
+ isDocumentDrive as as,
31864
+ generateAddNodeAction as at,
31865
+ isFileNode as au,
31866
+ uploadDocumentOperations as av,
31867
+ updateFile as aw,
31868
+ addFolder as ax,
31869
+ isFolderNode as ay,
31870
+ deleteNode as az,
31547
31871
  SetStateSchemaInputSchema as b,
31548
- isCompositeType as b$,
31549
- RENAME as b0,
31550
- WRITE as b1,
31551
- DUPLICATE as b2,
31552
- defaultFolderOptions as b3,
31553
- garbageCollect as b4,
31554
- sortOperations as b5,
31555
- UI_NODE as b6,
31556
- generateId as b7,
31557
- undo as b8,
31558
- redo as b9,
31559
- GraphQLInt as bA,
31560
- GraphQLDirective as bB,
31561
- GraphQLObjectType as bC,
31562
- GraphQLInterfaceType as bD,
31563
- GraphQLUnionType as bE,
31564
- GraphQLInputObjectType as bF,
31565
- GraphQLEnumType as bG,
31566
- isListType as bH,
31567
- GraphQLList as bI,
31568
- isNonNullType as bJ,
31569
- GraphQLNonNull as bK,
31570
- isNamedType as bL,
31571
- getNullableType as bM,
31572
- isLeafType as bN,
31573
- GraphQLSchema as bO,
31574
- buildSchema as bP,
31575
- buildASTSchema as bQ,
31576
- parse as bR,
31577
- validate as bS,
31578
- visit as bT,
31579
- snakeCase as bU,
31580
- constantCase as bV,
31581
- isAbstractType as bW,
31582
- BREAK as bX,
31583
- SchemaMetaFieldDef as bY,
31584
- TypeMetaFieldDef as bZ,
31585
- TypeNameMetaFieldDef as b_,
31586
- useDocumentDispatch as ba,
31587
- inspect as bb,
31588
- GraphQLError as bc,
31589
- getNamedType as bd,
31590
- invariant as be,
31591
- isInputObjectType as bf,
31592
- isScalarType as bg,
31593
- isObjectType as bh,
31594
- isInterfaceType as bi,
31595
- isUnionType as bj,
31596
- isEnumType as bk,
31597
- print as bl,
31598
- isPrintableAsBlockString as bm,
31599
- Kind as bn,
31600
- astFromValue as bo,
31601
- DEFAULT_DEPRECATION_REASON as bp,
31602
- isSpecifiedDirective as bq,
31603
- isSpecifiedScalarType as br,
31604
- isIntrospectionType as bs,
31605
- z as bt,
31606
- GraphQLScalarType as bu,
31607
- specifiedRules as bv,
31608
- GraphQLID as bw,
31609
- GraphQLBoolean as bx,
31610
- GraphQLString as by,
31611
- GraphQLFloat as bz,
31872
+ DUPLICATE as b$,
31873
+ isInputObjectType as b0,
31874
+ isScalarType as b1,
31875
+ isObjectType as b2,
31876
+ isInterfaceType as b3,
31877
+ isUnionType as b4,
31878
+ isEnumType as b5,
31879
+ astFromValue as b6,
31880
+ print as b7,
31881
+ DEFAULT_DEPRECATION_REASON as b8,
31882
+ Kind as b9,
31883
+ isInputType as bA,
31884
+ GraphQLBoolean as bB,
31885
+ assertAbstractType as bC,
31886
+ doTypesOverlap as bD,
31887
+ DirectiveLocation as bE,
31888
+ specifiedRules as bF,
31889
+ NoUnusedFragmentsRule as bG,
31890
+ ExecutableDefinitionsRule as bH,
31891
+ validate as bI,
31892
+ validateSchema as bJ,
31893
+ GraphQLID as bK,
31894
+ GraphQLString as bL,
31895
+ GraphQLFloat as bM,
31896
+ GraphQLInt as bN,
31897
+ GraphQLDirective as bO,
31898
+ GraphQLUnionType as bP,
31899
+ isNonNullType as bQ,
31900
+ GraphQLNonNull as bR,
31901
+ isNamedType as bS,
31902
+ isLeafType as bT,
31903
+ GraphQLSchema as bU,
31904
+ buildSchema as bV,
31905
+ sentenceCase as bW,
31906
+ getDimensions as bX,
31907
+ READ as bY,
31908
+ nodeOptionsMap as bZ,
31909
+ defaultFileOptions as b_,
31910
+ isPrintableAsBlockString as ba,
31911
+ isSpecifiedDirective as bb,
31912
+ isSpecifiedScalarType as bc,
31913
+ isIntrospectionType as bd,
31914
+ z as be,
31915
+ GraphQLScalarType as bf,
31916
+ parse as bg,
31917
+ visit as bh,
31918
+ buildASTSchema as bi,
31919
+ extendSchema as bj,
31920
+ getNullableType as bk,
31921
+ isListType as bl,
31922
+ snakeCase as bm,
31923
+ constantCase as bn,
31924
+ isAbstractType as bo,
31925
+ BREAK as bp,
31926
+ GraphQLInputObjectType as bq,
31927
+ GraphQLList as br,
31928
+ GraphQLEnumType as bs,
31929
+ GraphQLObjectType as bt,
31930
+ GraphQLInterfaceType as bu,
31931
+ SchemaMetaFieldDef as bv,
31932
+ TypeMetaFieldDef as bw,
31933
+ TypeNameMetaFieldDef as bx,
31934
+ isCompositeType as by,
31935
+ isOutputType as bz,
31612
31936
  createAction as c,
31613
- isOutputType as c0,
31614
- isInputType as c1,
31615
- assertAbstractType as c2,
31616
- doTypesOverlap as c3,
31617
- DirectiveLocation as c4,
31618
- NoUnusedFragmentsRule as c5,
31619
- ExecutableDefinitionsRule as c6,
31620
- validateSchema as c7,
31621
- sentenceCase as c8,
31622
- appLoader as c9,
31937
+ RENAME as c0,
31938
+ WRITE as c1,
31939
+ DELETE as c2,
31940
+ defaultFolderOptions as c3,
31941
+ garbageCollect as c4,
31942
+ sortOperations as c5,
31943
+ UI_NODE as c6,
31944
+ undo as c7,
31945
+ redo as c8,
31946
+ useDocumentDispatch as c9,
31947
+ appLoader as ca,
31623
31948
  ReorderModuleOperationsInputSchema as d,
31624
31949
  DeleteOperationInputSchema as e,
31625
31950
  SetOperationReducerInputSchema as f,
@@ -31644,3 +31969,4 @@ export {
31644
31969
  ReorderModulesInputSchema as y,
31645
31970
  DeleteModuleInputSchema as z
31646
31971
  };
31972
+ //# sourceMappingURL=app-loader-BnRwgIP_.js.map