@seedprotocol/sdk 0.7.2 → 0.7.3-next.654.g52217f6

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 (166) hide show
  1. package/dist/{BasePathResolver-BdxCSIzn.js → BasePathResolver-CfSfMW5_.js} +7 -10
  2. package/dist/BasePathResolver-CfSfMW5_.js.map +1 -0
  3. package/dist/{ClientManager-ClCwwhwo.js → ClientManager-C-QXqUK9.js} +438 -153
  4. package/dist/ClientManager-C-QXqUK9.js.map +1 -0
  5. package/dist/{Item-B9Y4VuK1.js → Item-C7sUUu2B.js} +291 -105
  6. package/dist/Item-C7sUUu2B.js.map +1 -0
  7. package/dist/{ModelProperty-BMePcicQ.js → ModelProperty-DJxeOOrc.js} +28 -27
  8. package/dist/ModelProperty-DJxeOOrc.js.map +1 -0
  9. package/dist/{Schema-COsEXXaR.js → Schema-fXtvd-yL.js} +30 -30
  10. package/dist/{Schema-COsEXXaR.js.map → Schema-fXtvd-yL.js.map} +1 -1
  11. package/dist/{SchemaValidationService-DabGMzSE.js → SchemaValidationService-CvRS2HSO.js} +10 -9
  12. package/dist/{SchemaValidationService-DabGMzSE.js.map → SchemaValidationService-CvRS2HSO.js.map} +1 -1
  13. package/dist/{backfillMetadataPropertyIds-Ck6fumnm.js → backfillMetadataPropertyIds-SXW-8C64.js} +4 -4
  14. package/dist/{backfillMetadataPropertyIds-Ck6fumnm.js.map → backfillMetadataPropertyIds-SXW-8C64.js.map} +1 -1
  15. package/dist/cjs/{ModelProperty-BT6Un_MB.js → ModelProperty-DXZ39Wyv.js} +24 -23
  16. package/dist/cjs/{ModelProperty-BT6Un_MB.js.map → ModelProperty-DXZ39Wyv.js.map} +1 -1
  17. package/dist/cjs/{Schema-BXhXdUsA.js → Schema-DdP109QD.js} +26 -25
  18. package/dist/cjs/{Schema-BXhXdUsA.js.map → Schema-DdP109QD.js.map} +1 -1
  19. package/dist/cjs/{SchemaValidationService-CC18QDfc.js → SchemaValidationService-CSXxx7sQ.js} +5 -4
  20. package/dist/cjs/{SchemaValidationService-CC18QDfc.js.map → SchemaValidationService-CSXxx7sQ.js.map} +1 -1
  21. package/dist/cjs/{backfillMetadataPropertyIds-DEHC9ejq.js → backfillMetadataPropertyIds-CPYoaMl4.js} +6 -5
  22. package/dist/cjs/{backfillMetadataPropertyIds-DEHC9ejq.js.map → backfillMetadataPropertyIds-CPYoaMl4.js.map} +1 -1
  23. package/dist/cjs/{eas-C3CL0l7l.js → eas-B2YDQssV.js} +6 -5
  24. package/dist/cjs/{eas-C3CL0l7l.js.map → eas-B2YDQssV.js.map} +1 -1
  25. package/dist/cjs/{getItem-CrwWYCkj.js → getItem-DgnaQzbE.js} +5 -4
  26. package/dist/cjs/{getItem-CrwWYCkj.js.map → getItem-DgnaQzbE.js.map} +1 -1
  27. package/dist/cjs/{getPublishPayload-DRJh7WR0.js → getPublishPayload-CqlqRdot.js} +12 -11
  28. package/dist/cjs/{getPublishPayload-DRJh7WR0.js.map → getPublishPayload-CqlqRdot.js.map} +1 -1
  29. package/dist/cjs/getPublishUploads-DsXY9S4U.js +872 -0
  30. package/dist/cjs/getPublishUploads-DsXY9S4U.js.map +1 -0
  31. package/dist/cjs/{index-BA1RIYFG.js → index-BHaWOwNF.js} +6 -5
  32. package/dist/cjs/index-BHaWOwNF.js.map +1 -0
  33. package/dist/cjs/{index-Dls7aMjr.js → index-C4XlgCJ4.js} +1200 -528
  34. package/dist/cjs/index-C4XlgCJ4.js.map +1 -0
  35. package/dist/cjs/{property-ZerTWizX.js → property-fa0iju0J.js} +8 -7
  36. package/dist/cjs/{property-ZerTWizX.js.map → property-fa0iju0J.js.map} +1 -1
  37. package/dist/cjs/{publishDraftGraph-CPOAcQFf.js → publishDraftGraph-3ASwAlD7.js} +4 -4
  38. package/dist/cjs/{publishDraftGraph-CPOAcQFf.js.map → publishDraftGraph-3ASwAlD7.js.map} +1 -1
  39. package/dist/cjs/{resetAmbiguousLegacyItemData-adDl4LcT.js → resetAmbiguousLegacyItemData-Bu_MBBYt.js} +5 -4
  40. package/dist/cjs/{resetAmbiguousLegacyItemData-adDl4LcT.js.map → resetAmbiguousLegacyItemData-Bu_MBBYt.js.map} +1 -1
  41. package/dist/cjs/{resolveModelForSyncedSeed-DoNThPdL.js → resolveModelForSyncedSeed-BANIiuFU.js} +2 -2
  42. package/dist/cjs/{resolveModelForSyncedSeed-DoNThPdL.js.map → resolveModelForSyncedSeed-BANIiuFU.js.map} +1 -1
  43. package/dist/cjs/{syncDbWithEas-CYfPkus9.js → syncDbWithEas-CrmxxmUW.js} +10 -9
  44. package/dist/cjs/{syncDbWithEas-CYfPkus9.js.map → syncDbWithEas-CrmxxmUW.js.map} +1 -1
  45. package/dist/{configurePlatform-xU3Hsno3.js → configurePlatform-BRw2j0ZN.js} +7 -4
  46. package/dist/{configurePlatform-xU3Hsno3.js.map → configurePlatform-BRw2j0ZN.js.map} +1 -1
  47. package/dist/{db-W1g29qsM.js → db-D9K_f5cF.js} +14 -14
  48. package/dist/{db-W1g29qsM.js.map → db-D9K_f5cF.js.map} +1 -1
  49. package/dist/{eas-CSwV6MvB.js → eas-DHxfswCt.js} +8 -5
  50. package/dist/eas-DHxfswCt.js.map +1 -0
  51. package/dist/{getItem-BYQeM3DY.js → getItem-d6N_aM6S.js} +8 -5
  52. package/dist/{getItem-BYQeM3DY.js.map → getItem-d6N_aM6S.js.map} +1 -1
  53. package/dist/{getPublishPayload-D5CQZd-y.js → getPublishPayload-BHrxVtzY.js} +16 -16
  54. package/dist/{getPublishPayload-D5CQZd-y.js.map → getPublishPayload-BHrxVtzY.js.map} +1 -1
  55. package/dist/getPublishUploads-BEqRiKIS.js +657 -0
  56. package/dist/getPublishUploads-BEqRiKIS.js.map +1 -0
  57. package/dist/{index-Bev-hZF-.js → index-CiMEoGu3.js} +12 -11
  58. package/dist/index-CiMEoGu3.js.map +1 -0
  59. package/dist/{index-CSOQFAOn.js → index-DglvthOk.js} +2 -2
  60. package/dist/index-DglvthOk.js.map +1 -0
  61. package/dist/{index-DRXC5Mra.js → index-s15q14rm.js} +29 -29
  62. package/dist/{index-DRXC5Mra.js.map → index-s15q14rm.js.map} +1 -1
  63. package/dist/{index.browser-DO20vYuP.js → index.browser-Cm06tP4X.js} +553 -165
  64. package/dist/index.browser-Cm06tP4X.js.map +1 -0
  65. package/dist/{index.node-C4iyOhdo.js → index.node-C30dmFgn.js} +5 -5
  66. package/dist/{index.node-C4iyOhdo.js.map → index.node-C30dmFgn.js.map} +1 -1
  67. package/dist/main.cjs +4 -3
  68. package/dist/main.cjs.map +1 -1
  69. package/dist/main.js +32 -44
  70. package/dist/main.js.map +1 -1
  71. package/dist/mimeTypes-DHAHC4eZ.js +204 -0
  72. package/dist/mimeTypes-DHAHC4eZ.js.map +1 -0
  73. package/dist/node.js +13 -12
  74. package/dist/node.js.map +1 -1
  75. package/dist/platform.browser.js +9 -7
  76. package/dist/platform.browser.js.map +1 -1
  77. package/dist/platform.node.js +3 -3
  78. package/dist/{property-BT1zDSkd.js → property-DhmmYAvQ.js} +12 -9
  79. package/dist/property-DhmmYAvQ.js.map +1 -0
  80. package/dist/{publishDraftGraph-Bcfrdj7-.js → publishDraftGraph-yYP74WRt.js} +8 -8
  81. package/dist/{publishDraftGraph-Bcfrdj7-.js.map → publishDraftGraph-yYP74WRt.js.map} +1 -1
  82. package/dist/{resetAmbiguousLegacyItemData-Ci6PM_vC.js → resetAmbiguousLegacyItemData-Bk0QyDW8.js} +2 -2
  83. package/dist/{resetAmbiguousLegacyItemData-Ci6PM_vC.js.map → resetAmbiguousLegacyItemData-Bk0QyDW8.js.map} +1 -1
  84. package/dist/{resolveModelForSyncedSeed-CLlumTBq.js → resolveModelForSyncedSeed-8cAzvUFd.js} +2 -2
  85. package/dist/{resolveModelForSyncedSeed-CLlumTBq.js.map → resolveModelForSyncedSeed-8cAzvUFd.js.map} +1 -1
  86. package/dist/src/Item/Item.d.ts +1 -1
  87. package/dist/src/Item/Item.d.ts.map +1 -1
  88. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
  89. package/dist/src/browser/helpers/FileManager.d.ts +4 -1
  90. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  91. package/dist/src/browser/helpers/tolerantWebAccess.d.ts +79 -4
  92. package/dist/src/browser/helpers/tolerantWebAccess.d.ts.map +1 -1
  93. package/dist/src/browser/workers/FileDownloader.d.ts +19 -4
  94. package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
  95. package/dist/src/browser/workers/filesDownload.d.ts.map +1 -1
  96. package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
  97. package/dist/src/db/migrateLegacyItemStorageRows.d.ts +57 -0
  98. package/dist/src/db/migrateLegacyItemStorageRows.d.ts.map +1 -0
  99. package/dist/src/db/read/getCompositeChildPaths.d.ts +13 -0
  100. package/dist/src/db/read/getCompositeChildPaths.d.ts.map +1 -0
  101. package/dist/src/db/read/getItems.d.ts.map +1 -1
  102. package/dist/src/db/read/getPublishUploads.d.ts +32 -3
  103. package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
  104. package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
  105. package/dist/src/db/write/convertVerbatimItemStorageRow.d.ts +44 -0
  106. package/dist/src/db/write/convertVerbatimItemStorageRow.d.ts.map +1 -0
  107. package/dist/src/db/write/createNewItem.d.ts.map +1 -1
  108. package/dist/src/events/files/download.d.ts.map +1 -1
  109. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +3 -3
  110. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  111. package/dist/src/helpers/FileManager/IFileManager.d.ts +25 -1
  112. package/dist/src/helpers/FileManager/IFileManager.d.ts.map +1 -1
  113. package/dist/src/helpers/arweaveContentTags.d.ts +33 -0
  114. package/dist/src/helpers/arweaveContentTags.d.ts.map +1 -0
  115. package/dist/src/helpers/compositeUpload.d.ts +28 -0
  116. package/dist/src/helpers/compositeUpload.d.ts.map +1 -0
  117. package/dist/src/helpers/itemStorageFile.d.ts +57 -0
  118. package/dist/src/helpers/itemStorageFile.d.ts.map +1 -0
  119. package/dist/src/helpers/mapWithConcurrency.d.ts +7 -0
  120. package/dist/src/helpers/mapWithConcurrency.d.ts.map +1 -0
  121. package/dist/src/helpers/mimeTypes.d.ts +43 -0
  122. package/dist/src/helpers/mimeTypes.d.ts.map +1 -0
  123. package/dist/src/helpers/ownership.d.ts +19 -3
  124. package/dist/src/helpers/ownership.d.ts.map +1 -1
  125. package/dist/src/helpers/storageDir.d.ts +16 -0
  126. package/dist/src/helpers/storageDir.d.ts.map +1 -0
  127. package/dist/src/helpers/tabCoordinator.d.ts +5 -1
  128. package/dist/src/helpers/tabCoordinator.d.ts.map +1 -1
  129. package/dist/src/helpers/tabEvents.d.ts +23 -2
  130. package/dist/src/helpers/tabEvents.d.ts.map +1 -1
  131. package/dist/src/helpers/tabLocks.d.ts +11 -1
  132. package/dist/src/helpers/tabLocks.d.ts.map +1 -1
  133. package/dist/src/index.d.ts +6 -4
  134. package/dist/src/index.d.ts.map +1 -1
  135. package/dist/src/types/fileManager.d.ts +3 -14
  136. package/dist/src/types/fileManager.d.ts.map +1 -1
  137. package/dist/src/types/publish.d.ts +14 -0
  138. package/dist/src/types/publish.d.ts.map +1 -1
  139. package/dist/{syncDbWithEas-BQsXjGhe.js → syncDbWithEas--HUA9WNb.js} +15 -14
  140. package/dist/syncDbWithEas--HUA9WNb.js.map +1 -0
  141. package/dist/{tabEvents-C9qUKx_z.js → tabEvents-DguZpCCv.js} +338 -60
  142. package/dist/tabEvents-DguZpCCv.js.map +1 -0
  143. package/dist/tolerantWebAccess-BZYWt09Y.js +551 -0
  144. package/dist/tolerantWebAccess-BZYWt09Y.js.map +1 -0
  145. package/dist/{updateSeedRevokedAt-D6q0h7pj.js → updateSeedRevokedAt-D_EG-q3b.js} +3 -3
  146. package/dist/{updateSeedRevokedAt-D6q0h7pj.js.map → updateSeedRevokedAt-D_EG-q3b.js.map} +1 -1
  147. package/package.json +5 -5
  148. package/dist/BasePathResolver-BdxCSIzn.js.map +0 -1
  149. package/dist/ClientManager-ClCwwhwo.js.map +0 -1
  150. package/dist/Item-B9Y4VuK1.js.map +0 -1
  151. package/dist/ModelProperty-BMePcicQ.js.map +0 -1
  152. package/dist/cjs/getPublishUploads-Bh22D3zJ.js +0 -495
  153. package/dist/cjs/getPublishUploads-Bh22D3zJ.js.map +0 -1
  154. package/dist/cjs/index-BA1RIYFG.js.map +0 -1
  155. package/dist/cjs/index-Dls7aMjr.js.map +0 -1
  156. package/dist/eas-CSwV6MvB.js.map +0 -1
  157. package/dist/getPublishUploads-BGpDsrBp.js +0 -484
  158. package/dist/getPublishUploads-BGpDsrBp.js.map +0 -1
  159. package/dist/index-Bev-hZF-.js.map +0 -1
  160. package/dist/index-CSOQFAOn.js.map +0 -1
  161. package/dist/index.browser-DO20vYuP.js.map +0 -1
  162. package/dist/property-BT1zDSkd.js.map +0 -1
  163. package/dist/syncDbWithEas-BQsXjGhe.js.map +0 -1
  164. package/dist/tabEvents-C9qUKx_z.js.map +0 -1
  165. package/dist/tolerantWebAccess-B-9bwxbw.js +0 -160
  166. package/dist/tolerantWebAccess-B-9bwxbw.js.map +0 -1
@@ -1,160 +0,0 @@
1
- import { Inode, constants } from '@zenfs/core';
2
- import { join } from '@zenfs/core/path';
3
- import { WebAccess, WebAccessFS } from '@zenfs/dom';
4
- import debug from 'debug';
5
- import { i as isSkippableOpfsEntryError } from './index.browser-DO20vYuP.js';
6
- import './BasePathResolver-BdxCSIzn.js';
7
- import 'drizzle-orm/sqlite-core';
8
- import 'drizzle-orm';
9
- import '@seedprotocol/arweave';
10
- import './tabEvents-C9qUKx_z.js';
11
- import '@seedprotocol/eas';
12
- import 'xstate';
13
- import 'pluralize';
14
- import './db-W1g29qsM.js';
15
- import 'drizzle-orm/casing';
16
- import 'lodash-es';
17
- import '@sinclair/typebox';
18
- import 'nanoid';
19
- import 'nanoid-dictionary';
20
- import '@seedprotocol/query';
21
- import './errors-CrBxGWah.js';
22
- import 'drizzle-orm/sqlite-proxy';
23
- import '@noble/hashes/sha256';
24
- import '@noble/hashes/utils';
25
- import './index-CSOQFAOn.js';
26
- import 'sqlocal/drizzle';
27
- import 'rxjs';
28
- import 'graphql-request';
29
- import 'arweave';
30
- import '@tanstack/react-query';
31
-
32
- const logger = debug('seedSdk:browser:helpers:tolerantWebAccess');
33
- /**
34
- * WebAccessFS mounts by walking all of OPFS and reading every file's size, and one unreadable
35
- * entry fails the whole mount. This variant skips such entries instead. A skipped file is still
36
- * listed by readdir, and WebAccessFS.stat() indexes it lazily on first use, once it is readable.
37
- *
38
- * Overrides @zenfs/dom 1.2.9 / @zenfs/core 2.5.6 internals (`_loadHandles`, `_loadMetadata`,
39
- * `crossCopy`, `_handles`, `_sync`, `index`); both packages are pinned to exact versions, and
40
- * tolerantWebAccess.test.ts covers the coupling.
41
- */
42
- class TolerantWebAccessFS extends WebAccessFS {
43
- async _loadHandles(path, handle) {
44
- try {
45
- for await (const [key, child] of handle.entries()) {
46
- const p = join(path, key);
47
- this._handles.set(p, child);
48
- if (child.kind == 'directory')
49
- await this._loadHandles(p, child);
50
- }
51
- }
52
- catch (error) {
53
- // An unreadable root means nothing was walked; let initializeFileSystem retry the mount.
54
- if (!isSkippableOpfsEntryError(error) || path == '/')
55
- throw error;
56
- // The directory went away (or became unreadable) mid-walk: forget it and anything under it.
57
- logger(`skipping directory ${path}: ${error.name}`);
58
- for (const p of [...this._handles.keys()]) {
59
- if (p == path || p.startsWith(path + '/'))
60
- this._handles.delete(p);
61
- }
62
- }
63
- }
64
- async _loadMetadata(metadataPath) {
65
- if (metadataPath)
66
- return super._loadMetadata(metadataPath);
67
- this._handles.set('/', this.root);
68
- await this._loadHandles('/', this.root);
69
- for (const [path, handle] of [...this._handles]) {
70
- if (handle.kind == 'directory') {
71
- this.index.set(path, new Inode({ mode: 0o777 | constants.S_IFDIR, size: 0 }));
72
- continue;
73
- }
74
- try {
75
- const { lastModified, size } = await handle.getFile();
76
- this.index.set(path, new Inode({ mode: 0o644 | constants.S_IFREG, size, mtimeMs: lastModified }));
77
- }
78
- catch (error) {
79
- if (!isSkippableOpfsEntryError(error))
80
- throw error;
81
- logger(`skipping file ${path}: ${error.name}`);
82
- // A removed file's handle would keep resolving to nothing; a locked one is still valid.
83
- if (error.name == 'NotFoundError')
84
- this._handles.delete(path);
85
- }
86
- }
87
- }
88
- /**
89
- * Forgets what the mount cached for `path` (size, handle, contents) and reads it again from OPFS.
90
- * For files written outside this ZenFS instance: by another tab, or by a worker writing to OPFS
91
- * directly. A file that's gone stays forgotten. The in-memory copy is only refreshed when its
92
- * directory is already cached; async reads re-index the file either way (WebAccessFS.stat).
93
- */
94
- async invalidate(path) {
95
- if (path == '/')
96
- return;
97
- this.index.delete(path);
98
- this._handles.delete(path);
99
- try {
100
- this._sync.unlinkSync(path);
101
- }
102
- catch {
103
- // Not cached.
104
- }
105
- await this.crossCopy(path);
106
- }
107
- /**
108
- * The Async mixin's ready() then copies every file's contents into an in-memory cache, a second
109
- * walk that reads the same busy entries. Skip those too; the root still fails the mount.
110
- */
111
- async crossCopy(path) {
112
- const crossCopy = WebAccessFS.prototype.crossCopy;
113
- if (path == '/')
114
- return crossCopy.call(this, path);
115
- try {
116
- await crossCopy.call(this, path);
117
- }
118
- catch (error) {
119
- if (!isSkippableOpfsEntryError(error) && !isErrnoChangedEntry(error))
120
- throw error;
121
- logger(`not caching ${path}: ${error.name}`);
122
- // Drop a half-copied entry so the cache doesn't serve an empty file in its place.
123
- try {
124
- this._sync.unlinkSync(path);
125
- }
126
- catch {
127
- try {
128
- this._sync.rmdirSync(path);
129
- }
130
- catch {
131
- // Nothing was copied.
132
- }
133
- }
134
- }
135
- }
136
- }
137
- /**
138
- * ZenFS converts most DOMExceptions to errno errors: an entry removed mid-walk becomes ENOENT, and
139
- * a file whose size changed since _loadMetadata (SQLite writing in another tab) fails read() with
140
- * an EIO size mismatch.
141
- */
142
- function isErrnoChangedEntry(error) {
143
- const { code, message } = (error ?? {});
144
- if (code === 'ENOENT')
145
- return true;
146
- return code === 'EIO' && typeof message === 'string' && message.includes('mismatch in file data size');
147
- }
148
- /** Drop-in for `WebAccess` in `configureSingle({ backend, handle })`. */
149
- const TolerantWebAccess = {
150
- ...WebAccess,
151
- name: 'TolerantWebAccess',
152
- async create(options) {
153
- const fs = new TolerantWebAccessFS(options.handle, options.disableHandleCache);
154
- await fs._loadMetadata(options.metadata);
155
- return fs;
156
- },
157
- };
158
-
159
- export { TolerantWebAccess, TolerantWebAccessFS };
160
- //# sourceMappingURL=tolerantWebAccess-B-9bwxbw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tolerantWebAccess-B-9bwxbw.js","sources":["../../src/browser/helpers/tolerantWebAccess.ts"],"sourcesContent":["import { constants, Inode } from '@zenfs/core'\nimport { join } from '@zenfs/core/path'\nimport { WebAccess, WebAccessFS } from '@zenfs/dom'\nimport type { WebAccessOptions } from '@zenfs/dom'\nimport debug from 'debug'\nimport { isSkippableOpfsEntryError } from './opfsErrors'\n\nconst logger = debug('seedSdk:browser:helpers:tolerantWebAccess')\n\n/**\n * WebAccessFS mounts by walking all of OPFS and reading every file's size, and one unreadable\n * entry fails the whole mount. This variant skips such entries instead. A skipped file is still\n * listed by readdir, and WebAccessFS.stat() indexes it lazily on first use, once it is readable.\n *\n * Overrides @zenfs/dom 1.2.9 / @zenfs/core 2.5.6 internals (`_loadHandles`, `_loadMetadata`,\n * `crossCopy`, `_handles`, `_sync`, `index`); both packages are pinned to exact versions, and\n * tolerantWebAccess.test.ts covers the coupling.\n */\nexport class TolerantWebAccessFS extends WebAccessFS {\n async _loadHandles(path: string, handle: FileSystemDirectoryHandle): Promise<void> {\n try {\n for await (const [key, child] of (handle as any).entries() as AsyncIterable<[string, FileSystemHandle]>) {\n const p = join(path, key)\n this._handles.set(p, child)\n if (child.kind == 'directory') await this._loadHandles(p, child as FileSystemDirectoryHandle)\n }\n } catch (error) {\n // An unreadable root means nothing was walked; let initializeFileSystem retry the mount.\n if (!isSkippableOpfsEntryError(error) || path == '/') throw error\n // The directory went away (or became unreadable) mid-walk: forget it and anything under it.\n logger(`skipping directory ${path}: ${(error as DOMException).name}`)\n for (const p of [...this._handles.keys()]) {\n if (p == path || p.startsWith(path + '/')) this._handles.delete(p)\n }\n }\n }\n\n async _loadMetadata(metadataPath?: string): Promise<void> {\n if (metadataPath) return super._loadMetadata(metadataPath)\n\n this._handles.set('/', this.root)\n await this._loadHandles('/', this.root)\n\n for (const [path, handle] of [...this._handles]) {\n if (handle.kind == 'directory') {\n this.index.set(path, new Inode({ mode: 0o777 | constants.S_IFDIR, size: 0 }))\n continue\n }\n try {\n const { lastModified, size } = await (handle as FileSystemFileHandle).getFile()\n this.index.set(path, new Inode({ mode: 0o644 | constants.S_IFREG, size, mtimeMs: lastModified }))\n } catch (error) {\n if (!isSkippableOpfsEntryError(error)) throw error\n logger(`skipping file ${path}: ${(error as DOMException).name}`)\n // A removed file's handle would keep resolving to nothing; a locked one is still valid.\n if ((error as DOMException).name == 'NotFoundError') this._handles.delete(path)\n }\n }\n }\n\n /**\n * Forgets what the mount cached for `path` (size, handle, contents) and reads it again from OPFS.\n * For files written outside this ZenFS instance: by another tab, or by a worker writing to OPFS\n * directly. A file that's gone stays forgotten. The in-memory copy is only refreshed when its\n * directory is already cached; async reads re-index the file either way (WebAccessFS.stat).\n */\n async invalidate(path: string): Promise<void> {\n if (path == '/') return\n this.index.delete(path)\n this._handles.delete(path)\n try {\n this._sync.unlinkSync(path)\n } catch {\n // Not cached.\n }\n await this.crossCopy(path)\n }\n\n /**\n * The Async mixin's ready() then copies every file's contents into an in-memory cache, a second\n * walk that reads the same busy entries. Skip those too; the root still fails the mount.\n */\n async crossCopy(path: string): Promise<void> {\n const crossCopy = (WebAccessFS.prototype as unknown as AsyncCrossCopy).crossCopy\n if (path == '/') return crossCopy.call(this, path)\n try {\n await crossCopy.call(this, path)\n } catch (error) {\n if (!isSkippableOpfsEntryError(error) && !isErrnoChangedEntry(error)) throw error\n logger(`not caching ${path}: ${(error as Error).name}`)\n // Drop a half-copied entry so the cache doesn't serve an empty file in its place.\n try {\n this._sync.unlinkSync(path)\n } catch {\n try {\n this._sync.rmdirSync(path)\n } catch {\n // Nothing was copied.\n }\n }\n }\n }\n}\n\ntype AsyncCrossCopy = { crossCopy(this: TolerantWebAccessFS, path: string): Promise<void> }\n\n/**\n * ZenFS converts most DOMExceptions to errno errors: an entry removed mid-walk becomes ENOENT, and\n * a file whose size changed since _loadMetadata (SQLite writing in another tab) fails read() with\n * an EIO size mismatch.\n */\nfunction isErrnoChangedEntry(error: unknown): boolean {\n const { code, message } = (error ?? {}) as { code?: unknown; message?: unknown }\n if (code === 'ENOENT') return true\n return code === 'EIO' && typeof message === 'string' && message.includes('mismatch in file data size')\n}\n\n/** Drop-in for `WebAccess` in `configureSingle({ backend, handle })`. */\nexport const TolerantWebAccess = {\n ...WebAccess,\n name: 'TolerantWebAccess',\n async create(options: WebAccessOptions): Promise<WebAccessFS> {\n const fs = new TolerantWebAccessFS(options.handle, options.disableHandleCache)\n await fs._loadMetadata(options.metadata)\n return fs\n },\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,MAAM,GAAG,KAAK,CAAC,2CAA2C,CAAC;AAEjE;;;;;;;;AAQG;AACG,MAAO,mBAAoB,SAAQ,WAAW,CAAA;AAClD,IAAA,MAAM,YAAY,CAAC,IAAY,EAAE,MAAiC,EAAA;AAChE,QAAA,IAAI;AACF,YAAA,WAAW,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAK,MAAc,CAAC,OAAO,EAA+C,EAAE;gBACvG,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;gBACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;AAC3B,gBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW;oBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAkC,CAAC;YAC/F;QACF;QAAE,OAAO,KAAK,EAAE;;YAEd,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG;AAAE,gBAAA,MAAM,KAAK;;YAEjE,MAAM,CAAC,sBAAsB,IAAI,CAAA,EAAA,EAAM,KAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;AACrE,YAAA,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE;gBACzC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACpE;QACF;IACF;IAEA,MAAM,aAAa,CAAC,YAAqB,EAAA;AACvC,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC;QAE1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;AAEvC,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAA,IAAI,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC7E;YACF;AACA,YAAA,IAAI;gBACF,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,MAAO,MAA+B,CAAC,OAAO,EAAE;gBAC/E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YACnG;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAAE,oBAAA,MAAM,KAAK;gBAClD,MAAM,CAAC,iBAAiB,IAAI,CAAA,EAAA,EAAM,KAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;;AAEhE,gBAAA,IAAK,KAAsB,CAAC,IAAI,IAAI,eAAe;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YACjF;QACF;IACF;AAEA;;;;;AAKG;IACH,MAAM,UAAU,CAAC,IAAY,EAAA;QAC3B,IAAI,IAAI,IAAI,GAAG;YAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7B;AAAE,QAAA,MAAM;;QAER;AACA,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B;AAEA;;;AAGG;IACH,MAAM,SAAS,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAI,WAAW,CAAC,SAAuC,CAAC,SAAS;QAChF,IAAI,IAAI,IAAI,GAAG;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAClD,QAAA,IAAI;YACF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QAClC;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK;YACjF,MAAM,CAAC,eAAe,IAAI,CAAA,EAAA,EAAM,KAAe,CAAC,IAAI,CAAA,CAAE,CAAC;;AAEvD,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAC7B;AAAE,YAAA,MAAM;AACN,gBAAA,IAAI;AACF,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC5B;AAAE,gBAAA,MAAM;;gBAER;YACF;QACF;IACF;AACD;AAID;;;;AAIG;AACH,SAAS,mBAAmB,CAAC,KAAc,EAAA;IACzC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,CAA0C;IAChF,IAAI,IAAI,KAAK,QAAQ;AAAE,QAAA,OAAO,IAAI;AAClC,IAAA,OAAO,IAAI,KAAK,KAAK,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC;AACxG;AAEA;AACO,MAAM,iBAAiB,GAAG;AAC/B,IAAA,GAAG,SAAS;AACZ,IAAA,IAAI,EAAE,mBAAmB;IACzB,MAAM,MAAM,CAAC,OAAyB,EAAA;AACpC,QAAA,MAAM,EAAE,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC;QAC9E,MAAM,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxC,QAAA,OAAO,EAAE;IACX,CAAC;;;"}