n8n-editor-ui 1.111.0 → 1.112.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 (133) hide show
  1. package/dist/assets/{AddDataStoreModal-D3j8deoq.css → AddDataStoreModal-B7jBhCjt.css} +5 -3
  2. package/dist/assets/{AddDataStoreModal-COmj3tI8.js → AddDataStoreModal-CLYFuWF4.js} +12 -7
  3. package/dist/assets/{AnimatedSpinner-BRe0Ugab.js → AnimatedSpinner-D7Nt5ZAz.js} +2 -1
  4. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BllZkKe3.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BzK1dfc7.js} +2 -1
  5. package/dist/assets/{AuthView-z58gFjsc.js → AuthView-Db8T18BU.js} +3 -2
  6. package/dist/assets/{ChangePasswordView-DUmtjPAx.js → ChangePasswordView-Clb7ta4t.js} +4 -3
  7. package/dist/assets/CollectionParameter-BGBoLgV2.js +5 -0
  8. package/dist/assets/{ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-4IRcAtjj.js → ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-BG5somV-.js} +2 -1
  9. package/dist/assets/{CredentialsView-Ie0l_odH.js → CredentialsView-CydHAPfb.js} +11 -9
  10. package/dist/assets/{DataStoreActions.vue_vue_type_script_setup_true_lang-d31tni9q.js → DataStoreActions.vue_vue_type_script_setup_true_lang-qftEof1u.js} +2 -2
  11. package/dist/assets/{DataStoreDetailsView-BPsHPucD.css → DataStoreDetailsView-C8fMxukz.css} +60 -39
  12. package/dist/assets/{DataStoreDetailsView-DLuRcsh-.js → DataStoreDetailsView-DZK3pYSP.js} +267 -102
  13. package/dist/assets/{DataStoreView-DmY3FIsv.js → DataStoreView-CT0OnFLR.js} +14 -29
  14. package/dist/assets/{DemoFooter-BQj55pTx.js → DemoFooter-DHwNRr6t.js} +7 -6
  15. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-NJbsTbk5.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-Y97PdUKW.js} +2 -1
  16. package/dist/assets/{EntityNotFound-B1VWHiBa.js → EntityNotFound-BDjIF_1D.js} +2 -1
  17. package/dist/assets/{EntityUnAuthorised-B0Yg7JWa.js → EntityUnAuthorised-Dz3DXm1-.js} +2 -1
  18. package/dist/assets/{ErrorView-aHqCD3ri.js → ErrorView-BH0St5KC.js} +2 -1
  19. package/dist/assets/{EvaluationsRootView-CoYRtuEz.js → EvaluationsRootView-CnJlr4OF.js} +2 -1
  20. package/dist/assets/{EvaluationsView-BC1UMOb0.js → EvaluationsView-DABp8z-m.js} +4 -3
  21. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-CMR49MM7.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-gCj_FZH6.js} +3 -2
  22. package/dist/assets/{ExecutionsView-C8r32amj.js → ExecutionsView-CivgrlFE.js} +14 -12
  23. package/dist/assets/{ExecutionsView-DpVZbkhT.css → ExecutionsView-GKNLT5Ec.css} +1 -1
  24. package/dist/assets/{FixedCollectionParameter-DTkvAml6.css → FixedCollectionParameter-Dg7ZadcB.css} +18 -18
  25. package/dist/assets/{FixedCollectionParameter-BzZrk2iw.js → FixedCollectionParameter-l8xC6wRw.js} +7 -3
  26. package/dist/assets/{ForgotMyPasswordView-CaXCwrIx.js → ForgotMyPasswordView-WF87QWAH.js} +4 -3
  27. package/dist/assets/{InfoAccordion-DUHSL9ZE.js → InfoAccordion-8iWJ2sSU.js} +2 -1
  28. package/dist/assets/{InsightsChartAverageRuntime-DFunYdc9.js → InsightsChartAverageRuntime-BEd6XJn6.js} +5 -4
  29. package/dist/assets/{InsightsChartFailed-0uRNHiAU.js → InsightsChartFailed-CVwzK3ch.js} +5 -4
  30. package/dist/assets/{InsightsChartFailureRate-BuiZokRI.js → InsightsChartFailureRate-BeA77_lp.js} +5 -4
  31. package/dist/assets/{InsightsChartTimeSaved-CK46Eo2R.js → InsightsChartTimeSaved-DkgR7j7U.js} +5 -4
  32. package/dist/assets/{InsightsChartTotal-ZhGp0D6c.js → InsightsChartTotal--1QxzvAZ.js} +5 -4
  33. package/dist/assets/{InsightsDashboard-DEJEg2jy.js → InsightsDashboard-cHCzH4ZY.js} +13 -11
  34. package/dist/assets/{InsightsPaywall-CEYbNF-U.js → InsightsPaywall-neQ9PmYP.js} +2 -1
  35. package/dist/assets/{InsightsSummary-D4c0lwdE.js → InsightsSummary-BekdjOxv.js} +4 -2
  36. package/dist/assets/{InsightsTableWorkflows-Cf2s_w2o.js → InsightsTableWorkflows-LMO-UU8h.js} +5 -4
  37. package/dist/assets/{Logo-DF7Ve1nG.js → Logo-DXNRuN8z.js} +2 -1
  38. package/dist/assets/{LogsPanel-Dz_R5wsR.js → LogsPanel-2GQHQFmh.js} +36 -22
  39. package/dist/assets/{LogsPanel-BinqqXXh.css → LogsPanel-CUsQIBpC.css} +17 -17
  40. package/dist/assets/{MainHeader-DBWR1wTC.js → MainHeader-BlBek00C.js} +12 -10
  41. package/dist/assets/{MainSidebar-3_9O8-rJ.js → MainSidebar-qdHg8D5V.js} +3 -2
  42. package/dist/assets/{NodeCreation-Dtlm36Oq.js → NodeCreation-DO5k3aK3.js} +4 -3
  43. package/dist/assets/{NodeCreator-DUoi7nAW.js → NodeCreator-C3Pmrqkh.js} +2 -1
  44. package/dist/assets/{NodeDetailsView-Di4Qgo0H.js → NodeDetailsView-BACft9ex.js} +18 -17
  45. package/dist/assets/{NodeDetailsView-CjdovDgq.css → NodeDetailsView-CBYV4Rrz.css} +11 -11
  46. package/dist/assets/{NodeDetailsViewV2-DeY6N1Bz.js → NodeDetailsViewV2--1S2eK5u.js} +14 -13
  47. package/dist/assets/{NodeView-DsbJeAY_.js → NodeView-BRwQ5Cqs.js} +113 -99
  48. package/dist/assets/{NodeView-DMJpfBYR.css → NodeView-Chs2u0U9.css} +28 -25
  49. package/dist/assets/{PageViewLayout-DC6xqvMl.js → PageViewLayout-DldtilHz.js} +2 -1
  50. package/dist/assets/{PrebuiltAgentTemplatesView-Bf_4L0Mz.js → PrebuiltAgentTemplatesView-ChyN8J2x.js} +3 -2
  51. package/dist/assets/{ProjectBreadcrumb-OJlbtg71.js → ProjectBreadcrumb-9uWmVmc7.js} +2 -1
  52. package/dist/assets/{ProjectHeader-CuQxn8hj.js → ProjectHeader-CWapIKXf.js} +93 -23
  53. package/dist/assets/{ProjectSettings-CyyS1dIR.js → ProjectSettings-BlYXGYRx.js} +5 -3
  54. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-DbrwK8IB.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DjpouOrH.js} +2 -1
  55. package/dist/assets/{ResourcesListLayout-i7do2ZBR.js → ResourcesListLayout-CfDIFGjS.js} +5 -4
  56. package/dist/assets/{RunDataJson-DRtbtIz3.js → RunDataJson-CTm3-xdY.js} +4 -3
  57. package/dist/assets/{RunDataJsonActions-7l2QvE2z.js → RunDataJsonActions-B_yBOGYB.js} +2 -1
  58. package/dist/assets/{RunDataParsedAiContent-CD12A0kN.js → RunDataParsedAiContent-Cg9vUI0v.js} +3 -2
  59. package/dist/assets/{RunDataSearch-LNeMq9j6.js → RunDataSearch-DPt2MvbI.js} +2 -1
  60. package/dist/assets/{RunDataTable-DcKBX4aO.js → RunDataTable-DHVRSqQT.js} +2 -1
  61. package/dist/assets/{SamlOnboarding-i5e6HuF6.js → SamlOnboarding-CN_xGqen.js} +4 -3
  62. package/dist/assets/{SelectedItemsInfo-CfUb0ZrI.css → SelectedItemsInfo-Dl4uynXs.css} +5 -3
  63. package/dist/assets/{SelectedItemsInfo-C55zD1dl.js → SelectedItemsInfo-DzoCyQOW.js} +12 -7
  64. package/dist/assets/{SettingsApiView-C3ju5H4H.js → SettingsApiView-BIKCRKGM.js} +2 -1
  65. package/dist/assets/{SettingsCommunityNodesView-i_vIhGwd.js → SettingsCommunityNodesView-ClWYmDB8.js} +7 -4
  66. package/dist/assets/{SettingsExternalSecrets-ChCiOX-n.js → SettingsExternalSecrets-D58JxT3V.js} +2 -1
  67. package/dist/assets/{SettingsLdapView-2QEfpHy6.js → SettingsLdapView-uImCjvMm.js} +2 -1
  68. package/dist/assets/{SettingsLogStreamingView-BORk25bO.js → SettingsLogStreamingView-DUn62Yq4.js} +2 -1
  69. package/dist/assets/{SettingsPersonalView-Yl43xiM_.js → SettingsPersonalView-DGiCMsXu.js} +2 -1
  70. package/dist/assets/{SettingsSourceControl-BpcJX-rJ.js → SettingsSourceControl-CVik5czR.js} +2 -1
  71. package/dist/assets/{SettingsSso-BugeRCyt.js → SettingsSso-BQkWpsdO.js} +2 -1
  72. package/dist/assets/{SettingsUsageAndPlan-Dt6g-FQw.js → SettingsUsageAndPlan-BuwgmEka.js} +2 -1
  73. package/dist/assets/{SettingsUsersView-BhBuZop9.js → SettingsUsersView-DCmtHeMa.js} +2 -1
  74. package/dist/assets/{SettingsView-Cx0SMMrn.js → SettingsView-CrBThv_a.js} +2 -1
  75. package/dist/assets/{SetupView-CUJOHrm2.js → SetupView-CES8Gnnv.js} +4 -3
  76. package/dist/assets/{SetupWorkflowCredentialsButton-D6h_IgTa.js → SetupWorkflowCredentialsButton-Bjhx_rck.js} +2 -1
  77. package/dist/assets/{SetupWorkflowFromTemplateView-_ReKyIk1.js → SetupWorkflowFromTemplateView-C8kmCc7J.js} +4 -3
  78. package/dist/assets/{SigninView--fAZZd3A.js → SigninView-24xKsh_S.js} +4 -3
  79. package/dist/assets/{SignoutView-DXoOH9BS.js → SignoutView-DgFIUUyh.js} +2 -1
  80. package/dist/assets/{SignupView-d0cK_S0B.js → SignupView-BckB-uUh.js} +4 -3
  81. package/dist/assets/{TableBase-D5vBzOrx.js → TableBase-CQEzJfeN.js} +2 -1
  82. package/dist/assets/{Tags-CZdua1l_.js → Tags-DbX-5_Fk.js} +2 -2
  83. package/dist/assets/{TemplateDetails-ccSWABeF.js → TemplateDetails-BGraOFbY.js} +3 -2
  84. package/dist/assets/{TemplateList-BKUKBRua.js → TemplateList-5P1N08U1.js} +2 -1
  85. package/dist/assets/{TemplatesCollectionView-BTyYNxNc.js → TemplatesCollectionView-D2-SU0eR.js} +7 -7
  86. package/dist/assets/{TemplatesSearchView-BYM3HbbU.js → TemplatesSearchView-ncBXTfOM.js} +4 -3
  87. package/dist/assets/{TemplatesView-CrH_O4he.js → TemplatesView-DO7HuUts.js} +2 -1
  88. package/dist/assets/{TemplatesWorkflowView-Dg3REjWI.js → TemplatesWorkflowView-BvrjU4RD.js} +7 -7
  89. package/dist/assets/{TriggerPanel-dDX4Bzu7.js → TriggerPanel-BFQ6veDz.js} +10 -8
  90. package/dist/assets/{VariablesView-DQw3gYG7.js → VariablesView-BVzruwEA.js} +7 -6
  91. package/dist/assets/{WorkerView-DIs4RXZZ.js → WorkerView-DRM6mgWJ.js} +9 -6
  92. package/dist/assets/{WorkflowActivator-z_Ef2Dd7.js → WorkflowActivator-BOt1oNlm.js} +4 -3
  93. package/dist/assets/{WorkflowExecutionsInfoAccordion-ptRuD88E.js → WorkflowExecutionsInfoAccordion-BjZUTKcs.js} +3 -2
  94. package/dist/assets/{WorkflowExecutionsLandingPage-C-RDf8Mu.js → WorkflowExecutionsLandingPage-ENKxL7Yh.js} +4 -3
  95. package/dist/assets/{WorkflowExecutionsPreview-Bk449wx1.js → WorkflowExecutionsPreview-Cdgg29u5.js} +5 -4
  96. package/dist/assets/{WorkflowExecutionsView-Dp0exxTM.js → WorkflowExecutionsView-t3W7WuAy.js} +9 -9
  97. package/dist/assets/{WorkflowHistory-D8zH1o6c.js → WorkflowHistory--OLvuBs1.js} +3 -2
  98. package/dist/assets/{WorkflowOnboardingView-8OmgIoUc.js → WorkflowOnboardingView-C8y96ur1.js} +2 -1
  99. package/dist/assets/{WorkflowPreview-jOuoMEkv.js → WorkflowPreview-C1XHoZmU.js} +2 -1
  100. package/dist/assets/{WorkflowsView-B9MpreL6.js → WorkflowsView-B9rxI0No.js} +272 -62
  101. package/dist/assets/{WorkflowsView-BuvoAeDm.css → WorkflowsView-MF9XcT0u.css} +186 -0
  102. package/dist/assets/{canvas-k8kjfgjE.js → canvas-D2PwiGnN.js} +1 -1
  103. package/dist/assets/{chartjs.utils-BXNxmkto.js → chartjs.utils-B6sz8yOh.js} +2 -2
  104. package/dist/assets/{core-e2mfCMV8.js → core-Be7WBA6o.js} +2 -1
  105. package/dist/assets/{en-C3wg5zl_.js → en-CJyn5rnO.js} +26 -20
  106. package/dist/assets/{global-link-actions-CR3odK4e.js → global-link-actions-B9WsUojd.js} +1 -1
  107. package/dist/assets/index-4g2Akj0I.js +13861 -0
  108. package/dist/assets/{index-DnpNicM9.css → index-B7wrqKiF.css} +8081 -8069
  109. package/dist/assets/{index-DuLlH1tF.js → index-BJG79OsS.js} +326896 -342404
  110. package/dist/assets/{index-DuaZRDhZ.js → index-LOlKxvn4.js} +2 -1
  111. package/dist/assets/loadDefaultEn-DNiURDi9.js +8 -0
  112. package/dist/assets/{pickBy-sB8d3BKD.js → pickBy-BMn768eW.js} +1 -1
  113. package/dist/assets/{readyToRunWorkflows.store-SxwN_l4P.js → readyToRunWorkflows.store-HSpbq3Bf.js} +2 -1
  114. package/dist/assets/readyToRunWorkflowsV2.store-DcRVIsRt.js +138 -0
  115. package/dist/assets/sqlite3-DBpDb1lf.wasm +0 -0
  116. package/dist/assets/sqlite3-opfs-async-proxy-CYRFPDln.js +579 -0
  117. package/dist/assets/sqlite3-worker1-bundler-friendly-DF3WqBKq.js +11289 -0
  118. package/dist/assets/{templateActions-BUeOwdy0.js → templateActions-DR_XHPc4.js} +1 -1
  119. package/dist/assets/{useBeforeUnload-DpCu12iW.js → useBeforeUnload-DmAaB1v5.js} +2 -1
  120. package/dist/assets/{useExecutionDebugging-XRtGhlAr.js → useExecutionDebugging-B8xDxcb6.js} +2 -1
  121. package/dist/assets/{useImportCurlCommand-DJJ0VEAg.js → useImportCurlCommand-BaN8fxqM.js} +2 -1
  122. package/dist/assets/{useProjectPages-DrMZX3ez.js → useProjectPages-B-oTYbCo.js} +2 -1
  123. package/dist/assets/{usePushConnection-CPQe3uqU.js → usePushConnection-Bcd2_XWM.js} +36 -22
  124. package/dist/assets/{useWorkflowActivate-RFJxTj5m.js → useWorkflowActivate-BDE2t3MM.js} +2 -1
  125. package/dist/assets/worker-DZxlyUFA.js +11826 -0
  126. package/dist/index.html +3 -2
  127. package/package.json +1 -1
  128. package/vite/i18n-locales-hmr-helpers.ts +19 -0
  129. package/vite.config.mts +25 -1
  130. package/dist/assets/CollectionParameter--MG-Jsbv.js +0 -4
  131. package/dist/assets/Tag-CGAmDPzS.js +0 -32
  132. package/dist/assets/Tag-Cg-Hqs2H.css +0 -153
  133. package/dist/assets/dataStore.store-vaNG0oX7.js +0 -291
@@ -0,0 +1,579 @@
1
+ const wPost = (type, ...args) => postMessage({ type, payload: args });
2
+ const installAsyncProxy = function() {
3
+ const toss = function(...args) {
4
+ throw new Error(args.join(" "));
5
+ };
6
+ if (globalThis.window === globalThis) {
7
+ toss(
8
+ "This code cannot run from the main thread.",
9
+ "Load it as a Worker from a separate Worker."
10
+ );
11
+ } else if (!navigator?.storage?.getDirectory) {
12
+ toss("This API requires navigator.storage.getDirectory.");
13
+ }
14
+ const state = /* @__PURE__ */ Object.create(null);
15
+ state.verbose = 1;
16
+ const loggers = {
17
+ 0: console.error.bind(console),
18
+ 1: console.warn.bind(console),
19
+ 2: console.log.bind(console)
20
+ };
21
+ const logImpl = (level, ...args) => {
22
+ if (state.verbose > level) loggers[level]("OPFS asyncer:", ...args);
23
+ };
24
+ const log = (...args) => logImpl(2, ...args);
25
+ const warn = (...args) => logImpl(1, ...args);
26
+ const error = (...args) => logImpl(0, ...args);
27
+ const __openFiles = /* @__PURE__ */ Object.create(null);
28
+ const __implicitLocks = /* @__PURE__ */ new Set();
29
+ const getResolvedPath = function(filename, splitIt) {
30
+ const p = new URL(filename, "file://irrelevant").pathname;
31
+ return splitIt ? p.split("/").filter((v) => !!v) : p;
32
+ };
33
+ const getDirForFilename = async function f(absFilename, createDirs = false) {
34
+ const path = getResolvedPath(absFilename, true);
35
+ const filename = path.pop();
36
+ let dh = state.rootDir;
37
+ for (const dirName of path) {
38
+ if (dirName) {
39
+ dh = await dh.getDirectoryHandle(dirName, { create: !!createDirs });
40
+ }
41
+ }
42
+ return [dh, filename];
43
+ };
44
+ const closeSyncHandle = async (fh) => {
45
+ if (fh.syncHandle) {
46
+ log("Closing sync handle for", fh.filenameAbs);
47
+ const h = fh.syncHandle;
48
+ delete fh.syncHandle;
49
+ delete fh.xLock;
50
+ __implicitLocks.delete(fh.fid);
51
+ return h.close();
52
+ }
53
+ };
54
+ const closeSyncHandleNoThrow = async (fh) => {
55
+ try {
56
+ await closeSyncHandle(fh);
57
+ } catch (e) {
58
+ warn("closeSyncHandleNoThrow() ignoring:", e, fh);
59
+ }
60
+ };
61
+ const releaseImplicitLocks = async () => {
62
+ if (__implicitLocks.size) {
63
+ for (const fid of __implicitLocks) {
64
+ const fh = __openFiles[fid];
65
+ await closeSyncHandleNoThrow(fh);
66
+ log("Auto-unlocked", fid, fh.filenameAbs);
67
+ }
68
+ }
69
+ };
70
+ const releaseImplicitLock = async (fh) => {
71
+ if (fh.releaseImplicitLocks && __implicitLocks.has(fh.fid)) {
72
+ return closeSyncHandleNoThrow(fh);
73
+ }
74
+ };
75
+ class GetSyncHandleError extends Error {
76
+ constructor(errorObject, ...msg) {
77
+ super(
78
+ [...msg, ": " + errorObject.name + ":", errorObject.message].join(" "),
79
+ {
80
+ cause: errorObject
81
+ }
82
+ );
83
+ this.name = "GetSyncHandleError";
84
+ }
85
+ }
86
+ GetSyncHandleError.convertRc = (e, rc) => {
87
+ if (e instanceof GetSyncHandleError) {
88
+ if (e.cause.name === "NoModificationAllowedError" || e.cause.name === "DOMException" && 0 === e.cause.message.indexOf("Access Handles cannot")) {
89
+ return state.sq3Codes.SQLITE_BUSY;
90
+ } else if ("NotFoundError" === e.cause.name) {
91
+ return state.sq3Codes.SQLITE_CANTOPEN;
92
+ }
93
+ } else if ("NotFoundError" === e?.name) {
94
+ return state.sq3Codes.SQLITE_CANTOPEN;
95
+ }
96
+ return rc;
97
+ };
98
+ const getSyncHandle = async (fh, opName) => {
99
+ if (!fh.syncHandle) {
100
+ const t = performance.now();
101
+ log("Acquiring sync handle for", fh.filenameAbs);
102
+ const maxTries = 6, msBase = state.asyncIdleWaitTime * 2;
103
+ let i = 1, ms = msBase;
104
+ for (; true; ms = msBase * ++i) {
105
+ try {
106
+ fh.syncHandle = await fh.fileHandle.createSyncAccessHandle();
107
+ break;
108
+ } catch (e) {
109
+ if (i === maxTries) {
110
+ throw new GetSyncHandleError(
111
+ e,
112
+ "Error getting sync handle for",
113
+ opName + "().",
114
+ maxTries,
115
+ "attempts failed.",
116
+ fh.filenameAbs
117
+ );
118
+ }
119
+ warn(
120
+ "Error getting sync handle for",
121
+ opName + "(). Waiting",
122
+ ms,
123
+ "ms and trying again.",
124
+ fh.filenameAbs,
125
+ e
126
+ );
127
+ Atomics.wait(state.sabOPView, state.opIds.retry, 0, ms);
128
+ }
129
+ }
130
+ log(
131
+ "Got",
132
+ opName + "() sync handle for",
133
+ fh.filenameAbs,
134
+ "in",
135
+ performance.now() - t,
136
+ "ms"
137
+ );
138
+ if (!fh.xLock) {
139
+ __implicitLocks.add(fh.fid);
140
+ log(
141
+ "Acquired implicit lock for",
142
+ opName + "()",
143
+ fh.fid,
144
+ fh.filenameAbs
145
+ );
146
+ }
147
+ }
148
+ return fh.syncHandle;
149
+ };
150
+ const storeAndNotify = (opName, value) => {
151
+ log(opName + "() => notify(", value, ")");
152
+ Atomics.store(state.sabOPView, state.opIds.rc, value);
153
+ Atomics.notify(state.sabOPView, state.opIds.rc);
154
+ };
155
+ const affirmNotRO = function(opName, fh) {
156
+ if (fh.readOnly) toss(opName + "(): File is read-only: " + fh.filenameAbs);
157
+ };
158
+ let flagAsyncShutdown = false;
159
+ const vfsAsyncImpls = {
160
+ "opfs-async-shutdown": async () => {
161
+ flagAsyncShutdown = true;
162
+ storeAndNotify("opfs-async-shutdown", 0);
163
+ },
164
+ mkdir: async (dirname) => {
165
+ let rc = 0;
166
+ try {
167
+ await getDirForFilename(dirname + "/filepart", true);
168
+ } catch (e) {
169
+ state.s11n.storeException(2, e);
170
+ rc = state.sq3Codes.SQLITE_IOERR;
171
+ }
172
+ storeAndNotify("mkdir", rc);
173
+ },
174
+ xAccess: async (filename) => {
175
+ let rc = 0;
176
+ try {
177
+ const [dh, fn] = await getDirForFilename(filename);
178
+ await dh.getFileHandle(fn);
179
+ } catch (e) {
180
+ state.s11n.storeException(2, e);
181
+ rc = state.sq3Codes.SQLITE_IOERR;
182
+ }
183
+ storeAndNotify("xAccess", rc);
184
+ },
185
+ xClose: async function(fid) {
186
+ const opName = "xClose";
187
+ __implicitLocks.delete(fid);
188
+ const fh = __openFiles[fid];
189
+ let rc = 0;
190
+ if (fh) {
191
+ delete __openFiles[fid];
192
+ await closeSyncHandle(fh);
193
+ if (fh.deleteOnClose) {
194
+ try {
195
+ await fh.dirHandle.removeEntry(fh.filenamePart);
196
+ } catch (e) {
197
+ warn("Ignoring dirHandle.removeEntry() failure of", fh, e);
198
+ }
199
+ }
200
+ } else {
201
+ state.s11n.serialize();
202
+ rc = state.sq3Codes.SQLITE_NOTFOUND;
203
+ }
204
+ storeAndNotify(opName, rc);
205
+ },
206
+ xDelete: async function(...args) {
207
+ const rc = await vfsAsyncImpls.xDeleteNoWait(...args);
208
+ storeAndNotify("xDelete", rc);
209
+ },
210
+ xDeleteNoWait: async function(filename, syncDir = 0, recursive = false) {
211
+ let rc = 0;
212
+ try {
213
+ while (filename) {
214
+ const [hDir, filenamePart] = await getDirForFilename(filename, false);
215
+ if (!filenamePart) break;
216
+ await hDir.removeEntry(filenamePart, { recursive });
217
+ if (4660 !== syncDir) break;
218
+ recursive = false;
219
+ filename = getResolvedPath(filename, true);
220
+ filename.pop();
221
+ filename = filename.join("/");
222
+ }
223
+ } catch (e) {
224
+ state.s11n.storeException(2, e);
225
+ rc = state.sq3Codes.SQLITE_IOERR_DELETE;
226
+ }
227
+ return rc;
228
+ },
229
+ xFileSize: async function(fid) {
230
+ const fh = __openFiles[fid];
231
+ let rc = 0;
232
+ try {
233
+ const sz = await (await getSyncHandle(fh, "xFileSize")).getSize();
234
+ state.s11n.serialize(Number(sz));
235
+ } catch (e) {
236
+ state.s11n.storeException(1, e);
237
+ rc = GetSyncHandleError.convertRc(e, state.sq3Codes.SQLITE_IOERR);
238
+ }
239
+ await releaseImplicitLock(fh);
240
+ storeAndNotify("xFileSize", rc);
241
+ },
242
+ xLock: async function(fid, lockType) {
243
+ const fh = __openFiles[fid];
244
+ let rc = 0;
245
+ const oldLockType = fh.xLock;
246
+ fh.xLock = lockType;
247
+ if (!fh.syncHandle) {
248
+ try {
249
+ await getSyncHandle(fh, "xLock");
250
+ __implicitLocks.delete(fid);
251
+ } catch (e) {
252
+ state.s11n.storeException(1, e);
253
+ rc = GetSyncHandleError.convertRc(
254
+ e,
255
+ state.sq3Codes.SQLITE_IOERR_LOCK
256
+ );
257
+ fh.xLock = oldLockType;
258
+ }
259
+ }
260
+ storeAndNotify("xLock", rc);
261
+ },
262
+ xOpen: async function(fid, filename, flags, opfsFlags) {
263
+ const opName = "xOpen";
264
+ const create = state.sq3Codes.SQLITE_OPEN_CREATE & flags;
265
+ try {
266
+ let hDir, filenamePart;
267
+ try {
268
+ [hDir, filenamePart] = await getDirForFilename(filename, !!create);
269
+ } catch (e) {
270
+ state.s11n.storeException(1, e);
271
+ storeAndNotify(opName, state.sq3Codes.SQLITE_NOTFOUND);
272
+ return;
273
+ }
274
+ if (state.opfsFlags.OPFS_UNLINK_BEFORE_OPEN & opfsFlags) {
275
+ try {
276
+ await hDir.removeEntry(filenamePart);
277
+ } catch (e) {
278
+ }
279
+ }
280
+ const hFile = await hDir.getFileHandle(filenamePart, { create });
281
+ const fh = Object.assign(/* @__PURE__ */ Object.create(null), {
282
+ fid,
283
+ filenameAbs: filename,
284
+ filenamePart,
285
+ dirHandle: hDir,
286
+ fileHandle: hFile,
287
+ sabView: state.sabFileBufView,
288
+ readOnly: !create && !!(state.sq3Codes.SQLITE_OPEN_READONLY & flags),
289
+ deleteOnClose: !!(state.sq3Codes.SQLITE_OPEN_DELETEONCLOSE & flags)
290
+ });
291
+ fh.releaseImplicitLocks = opfsFlags & state.opfsFlags.OPFS_UNLOCK_ASAP || state.opfsFlags.defaultUnlockAsap;
292
+ __openFiles[fid] = fh;
293
+ storeAndNotify(opName, 0);
294
+ } catch (e) {
295
+ error(opName, e);
296
+ state.s11n.storeException(1, e);
297
+ storeAndNotify(opName, state.sq3Codes.SQLITE_IOERR);
298
+ }
299
+ },
300
+ xRead: async function(fid, n, offset64) {
301
+ let rc = 0, nRead;
302
+ const fh = __openFiles[fid];
303
+ try {
304
+ nRead = (await getSyncHandle(fh, "xRead")).read(
305
+ fh.sabView.subarray(0, n),
306
+ { at: Number(offset64) }
307
+ );
308
+ if (nRead < n) {
309
+ fh.sabView.fill(0, nRead, n);
310
+ rc = state.sq3Codes.SQLITE_IOERR_SHORT_READ;
311
+ }
312
+ } catch (e) {
313
+ error("xRead() failed", e, fh);
314
+ state.s11n.storeException(1, e);
315
+ rc = GetSyncHandleError.convertRc(e, state.sq3Codes.SQLITE_IOERR_READ);
316
+ }
317
+ await releaseImplicitLock(fh);
318
+ storeAndNotify("xRead", rc);
319
+ },
320
+ xSync: async function(fid, flags) {
321
+ const fh = __openFiles[fid];
322
+ let rc = 0;
323
+ if (!fh.readOnly && fh.syncHandle) {
324
+ try {
325
+ await fh.syncHandle.flush();
326
+ } catch (e) {
327
+ state.s11n.storeException(2, e);
328
+ rc = state.sq3Codes.SQLITE_IOERR_FSYNC;
329
+ }
330
+ }
331
+ storeAndNotify("xSync", rc);
332
+ },
333
+ xTruncate: async function(fid, size) {
334
+ let rc = 0;
335
+ const fh = __openFiles[fid];
336
+ try {
337
+ affirmNotRO("xTruncate", fh);
338
+ await (await getSyncHandle(fh, "xTruncate")).truncate(size);
339
+ } catch (e) {
340
+ error("xTruncate():", e, fh);
341
+ state.s11n.storeException(2, e);
342
+ rc = GetSyncHandleError.convertRc(
343
+ e,
344
+ state.sq3Codes.SQLITE_IOERR_TRUNCATE
345
+ );
346
+ }
347
+ await releaseImplicitLock(fh);
348
+ storeAndNotify("xTruncate", rc);
349
+ },
350
+ xUnlock: async function(fid, lockType) {
351
+ let rc = 0;
352
+ const fh = __openFiles[fid];
353
+ if (fh.syncHandle && state.sq3Codes.SQLITE_LOCK_NONE === lockType) {
354
+ try {
355
+ await closeSyncHandle(fh);
356
+ } catch (e) {
357
+ state.s11n.storeException(1, e);
358
+ rc = state.sq3Codes.SQLITE_IOERR_UNLOCK;
359
+ }
360
+ }
361
+ storeAndNotify("xUnlock", rc);
362
+ },
363
+ xWrite: async function(fid, n, offset64) {
364
+ let rc;
365
+ const fh = __openFiles[fid];
366
+ try {
367
+ affirmNotRO("xWrite", fh);
368
+ rc = n === (await getSyncHandle(fh, "xWrite")).write(fh.sabView.subarray(0, n), {
369
+ at: Number(offset64)
370
+ }) ? 0 : state.sq3Codes.SQLITE_IOERR_WRITE;
371
+ } catch (e) {
372
+ error("xWrite():", e, fh);
373
+ state.s11n.storeException(1, e);
374
+ rc = GetSyncHandleError.convertRc(e, state.sq3Codes.SQLITE_IOERR_WRITE);
375
+ }
376
+ await releaseImplicitLock(fh);
377
+ storeAndNotify("xWrite", rc);
378
+ }
379
+ };
380
+ const initS11n = () => {
381
+ if (state.s11n) return state.s11n;
382
+ const textDecoder = new TextDecoder(), textEncoder = new TextEncoder("utf-8"), viewU8 = new Uint8Array(
383
+ state.sabIO,
384
+ state.sabS11nOffset,
385
+ state.sabS11nSize
386
+ ), viewDV = new DataView(
387
+ state.sabIO,
388
+ state.sabS11nOffset,
389
+ state.sabS11nSize
390
+ );
391
+ state.s11n = /* @__PURE__ */ Object.create(null);
392
+ const TypeIds = /* @__PURE__ */ Object.create(null);
393
+ TypeIds.number = {
394
+ id: 1,
395
+ size: 8,
396
+ getter: "getFloat64",
397
+ setter: "setFloat64"
398
+ };
399
+ TypeIds.bigint = {
400
+ id: 2,
401
+ size: 8,
402
+ getter: "getBigInt64",
403
+ setter: "setBigInt64"
404
+ };
405
+ TypeIds.boolean = {
406
+ id: 3,
407
+ size: 4,
408
+ getter: "getInt32",
409
+ setter: "setInt32"
410
+ };
411
+ TypeIds.string = { id: 4 };
412
+ const getTypeId = (v) => TypeIds[typeof v] || toss("Maintenance required: this value type cannot be serialized.", v);
413
+ const getTypeIdById = (tid) => {
414
+ switch (tid) {
415
+ case TypeIds.number.id:
416
+ return TypeIds.number;
417
+ case TypeIds.bigint.id:
418
+ return TypeIds.bigint;
419
+ case TypeIds.boolean.id:
420
+ return TypeIds.boolean;
421
+ case TypeIds.string.id:
422
+ return TypeIds.string;
423
+ default:
424
+ toss("Invalid type ID:", tid);
425
+ }
426
+ };
427
+ state.s11n.deserialize = function(clear = false) {
428
+ const argc = viewU8[0];
429
+ const rc = argc ? [] : null;
430
+ if (argc) {
431
+ const typeIds = [];
432
+ let offset = 1, i, n, v;
433
+ for (i = 0; i < argc; ++i, ++offset) {
434
+ typeIds.push(getTypeIdById(viewU8[offset]));
435
+ }
436
+ for (i = 0; i < argc; ++i) {
437
+ const t = typeIds[i];
438
+ if (t.getter) {
439
+ v = viewDV[t.getter](offset, state.littleEndian);
440
+ offset += t.size;
441
+ } else {
442
+ n = viewDV.getInt32(offset, state.littleEndian);
443
+ offset += 4;
444
+ v = textDecoder.decode(viewU8.slice(offset, offset + n));
445
+ offset += n;
446
+ }
447
+ rc.push(v);
448
+ }
449
+ }
450
+ if (clear) viewU8[0] = 0;
451
+ return rc;
452
+ };
453
+ state.s11n.serialize = function(...args) {
454
+ if (args.length) {
455
+ const typeIds = [];
456
+ let i = 0, offset = 1;
457
+ viewU8[0] = args.length & 255;
458
+ for (; i < args.length; ++i, ++offset) {
459
+ typeIds.push(getTypeId(args[i]));
460
+ viewU8[offset] = typeIds[i].id;
461
+ }
462
+ for (i = 0; i < args.length; ++i) {
463
+ const t = typeIds[i];
464
+ if (t.setter) {
465
+ viewDV[t.setter](offset, args[i], state.littleEndian);
466
+ offset += t.size;
467
+ } else {
468
+ const s = textEncoder.encode(args[i]);
469
+ viewDV.setInt32(offset, s.byteLength, state.littleEndian);
470
+ offset += 4;
471
+ viewU8.set(s, offset);
472
+ offset += s.byteLength;
473
+ }
474
+ }
475
+ } else {
476
+ viewU8[0] = 0;
477
+ }
478
+ };
479
+ state.s11n.storeException = state.asyncS11nExceptions ? (priority, e) => {
480
+ if (priority <= state.asyncS11nExceptions) {
481
+ state.s11n.serialize([e.name, ": ", e.message].join(""));
482
+ }
483
+ } : () => {
484
+ };
485
+ return state.s11n;
486
+ };
487
+ const waitLoop = async function f() {
488
+ const opHandlers = /* @__PURE__ */ Object.create(null);
489
+ for (let k of Object.keys(state.opIds)) {
490
+ const vi = vfsAsyncImpls[k];
491
+ if (!vi) continue;
492
+ const o = /* @__PURE__ */ Object.create(null);
493
+ opHandlers[state.opIds[k]] = o;
494
+ o.key = k;
495
+ o.f = vi;
496
+ }
497
+ while (!flagAsyncShutdown) {
498
+ try {
499
+ if ("not-equal" !== Atomics.wait(
500
+ state.sabOPView,
501
+ state.opIds.whichOp,
502
+ 0,
503
+ state.asyncIdleWaitTime
504
+ )) {
505
+ await releaseImplicitLocks();
506
+ continue;
507
+ }
508
+ const opId = Atomics.load(state.sabOPView, state.opIds.whichOp);
509
+ Atomics.store(state.sabOPView, state.opIds.whichOp, 0);
510
+ const hnd = opHandlers[opId] ?? toss("No waitLoop handler for whichOp #", opId);
511
+ const args = state.s11n.deserialize(true) || [];
512
+ if (hnd.f) await hnd.f(...args);
513
+ else error("Missing callback for opId", opId);
514
+ } catch (e) {
515
+ error("in waitLoop():", e);
516
+ }
517
+ }
518
+ };
519
+ navigator.storage.getDirectory().then(function(d) {
520
+ state.rootDir = d;
521
+ globalThis.onmessage = function({ data }) {
522
+ switch (data.type) {
523
+ case "opfs-async-init": {
524
+ const opt = data.args;
525
+ for (const k in opt) state[k] = opt[k];
526
+ state.verbose = opt.verbose ?? 1;
527
+ state.sabOPView = new Int32Array(state.sabOP);
528
+ state.sabFileBufView = new Uint8Array(
529
+ state.sabIO,
530
+ 0,
531
+ state.fileBufferSize
532
+ );
533
+ state.sabS11nView = new Uint8Array(
534
+ state.sabIO,
535
+ state.sabS11nOffset,
536
+ state.sabS11nSize
537
+ );
538
+ Object.keys(vfsAsyncImpls).forEach((k) => {
539
+ if (!Number.isFinite(state.opIds[k])) {
540
+ toss("Maintenance required: missing state.opIds[", k, "]");
541
+ }
542
+ });
543
+ initS11n();
544
+ log("init state", state);
545
+ wPost("opfs-async-inited");
546
+ waitLoop();
547
+ break;
548
+ }
549
+ case "opfs-async-restart":
550
+ if (flagAsyncShutdown) {
551
+ warn(
552
+ "Restarting after opfs-async-shutdown. Might or might not work."
553
+ );
554
+ flagAsyncShutdown = false;
555
+ waitLoop();
556
+ }
557
+ break;
558
+ }
559
+ };
560
+ wPost("opfs-async-loaded");
561
+ }).catch((e) => error("error initializing OPFS asyncer:", e));
562
+ };
563
+ if (!globalThis.SharedArrayBuffer) {
564
+ wPost(
565
+ "opfs-unavailable",
566
+ "Missing SharedArrayBuffer API.",
567
+ "The server must emit the COOP/COEP response headers to enable that."
568
+ );
569
+ } else if (!globalThis.Atomics) {
570
+ wPost(
571
+ "opfs-unavailable",
572
+ "Missing Atomics API.",
573
+ "The server must emit the COOP/COEP response headers to enable that."
574
+ );
575
+ } else if (!globalThis.FileSystemHandle || !globalThis.FileSystemDirectoryHandle || !globalThis.FileSystemFileHandle || !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle || !navigator?.storage?.getDirectory) {
576
+ wPost("opfs-unavailable", "Missing required OPFS APIs.");
577
+ } else {
578
+ installAsyncProxy();
579
+ }