flatsql 3.11.1 → 3.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -795
- package/bin/flatsql.mjs +76 -0
- package/cpp/README.md +18 -0
- package/cpp/include/flatsql/flatsql.h +162 -0
- package/cpp/include/flatsql/flatsql_io.h +159 -0
- package/docs/API-3.12.md +126 -0
- package/package.json +28 -123
- package/wasm/flatsql.wasm +0 -0
- package/wasm/index.d.ts +61 -548
- package/wasm/index.js +280 -1281
- package/wasm/integrity.json +6 -26
- package/wasm/runtime/LICENSE.sdk.txt +190 -0
- package/wasm/runtime/NOTICE.txt +2 -0
- package/wasm/runtime/browser-guest.mjs +1 -0
- package/wasm/runtime/browser-host.mjs +1 -0
- package/wasm/runtime/node-guest.mjs +2 -0
- package/wasm/runtime/node-host.mjs +5 -0
- package/wasm/runtime/opfsIoWorker.mjs +1 -0
- package/wasm/runtime/wasiThreadBrowserWorker.mjs +1 -0
- package/dist/artifacts/index.d.ts +0 -3
- package/dist/artifacts/index.d.ts.map +0 -1
- package/dist/artifacts/index.js +0 -3
- package/dist/artifacts/index.js.map +0 -1
- package/dist/artifacts/transport.d.ts +0 -5
- package/dist/artifacts/transport.d.ts.map +0 -1
- package/dist/artifacts/transport.js +0 -45
- package/dist/artifacts/transport.js.map +0 -1
- package/dist/artifacts/types.d.ts +0 -34
- package/dist/artifacts/types.d.ts.map +0 -1
- package/dist/artifacts/types.js +0 -2
- package/dist/artifacts/types.js.map +0 -1
- package/dist/btree/btree.d.ts +0 -34
- package/dist/btree/btree.d.ts.map +0 -1
- package/dist/btree/btree.js +0 -234
- package/dist/btree/btree.js.map +0 -1
- package/dist/btree/index.d.ts +0 -3
- package/dist/btree/index.d.ts.map +0 -1
- package/dist/btree/index.js +0 -3
- package/dist/btree/index.js.map +0 -1
- package/dist/btree/types.d.ts +0 -36
- package/dist/btree/types.d.ts.map +0 -1
- package/dist/btree/types.js +0 -55
- package/dist/btree/types.js.map +0 -1
- package/dist/cluster/index.d.ts +0 -11
- package/dist/cluster/index.d.ts.map +0 -1
- package/dist/cluster/index.js +0 -59
- package/dist/cluster/index.js.map +0 -1
- package/dist/response/artifact.d.ts +0 -4
- package/dist/response/artifact.d.ts.map +0 -1
- package/dist/response/artifact.js +0 -102
- package/dist/response/artifact.js.map +0 -1
- package/dist/response/cache-key.d.ts +0 -6
- package/dist/response/cache-key.d.ts.map +0 -1
- package/dist/response/cache-key.js +0 -114
- package/dist/response/cache-key.js.map +0 -1
- package/dist/response/index.d.ts +0 -5
- package/dist/response/index.d.ts.map +0 -1
- package/dist/response/index.js +0 -5
- package/dist/response/index.js.map +0 -1
- package/dist/response/memory-cache.d.ts +0 -17
- package/dist/response/memory-cache.d.ts.map +0 -1
- package/dist/response/memory-cache.js +0 -76
- package/dist/response/memory-cache.js.map +0 -1
- package/dist/response/types.d.ts +0 -57
- package/dist/response/types.d.ts.map +0 -1
- package/dist/response/types.js +0 -2
- package/dist/response/types.js.map +0 -1
- package/dist/schema/index.d.ts +0 -3
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -3
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/parser.d.ts +0 -25
- package/dist/schema/parser.d.ts.map +0 -1
- package/dist/schema/parser.js +0 -474
- package/dist/schema/parser.js.map +0 -1
- package/dist/schema/types.d.ts +0 -33
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/types.js +0 -29
- package/dist/schema/types.js.map +0 -1
- package/dist/standalone/index.d.ts +0 -3
- package/dist/standalone/index.d.ts.map +0 -1
- package/dist/standalone/index.js +0 -3
- package/dist/standalone/index.js.map +0 -1
- package/dist/standalone/process-client.d.ts +0 -85
- package/dist/standalone/process-client.d.ts.map +0 -1
- package/dist/standalone/process-client.js +0 -537
- package/dist/standalone/process-client.js.map +0 -1
- package/dist/standalone/wasmedge-runner.d.ts +0 -19
- package/dist/standalone/wasmedge-runner.d.ts.map +0 -1
- package/dist/standalone/wasmedge-runner.js +0 -108
- package/dist/standalone/wasmedge-runner.js.map +0 -1
- package/dist/storage/index.d.ts +0 -3
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -3
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/stacked-flatbuffers.d.ts +0 -38
- package/dist/storage/stacked-flatbuffers.d.ts.map +0 -1
- package/dist/storage/stacked-flatbuffers.js +0 -253
- package/dist/storage/stacked-flatbuffers.js.map +0 -1
- package/dist/storage/types.d.ts +0 -23
- package/dist/storage/types.d.ts.map +0 -1
- package/dist/storage/types.js +0 -27
- package/dist/storage/types.js.map +0 -1
- package/dist/stress/aggregate.d.ts +0 -3
- package/dist/stress/aggregate.d.ts.map +0 -1
- package/dist/stress/aggregate.js +0 -61
- package/dist/stress/aggregate.js.map +0 -1
- package/dist/stress/docker-compose.d.ts +0 -17
- package/dist/stress/docker-compose.d.ts.map +0 -1
- package/dist/stress/docker-compose.js +0 -156
- package/dist/stress/docker-compose.js.map +0 -1
- package/dist/stress/index.d.ts +0 -10
- package/dist/stress/index.d.ts.map +0 -1
- package/dist/stress/index.js +0 -10
- package/dist/stress/index.js.map +0 -1
- package/dist/stress/metrics.d.ts +0 -3
- package/dist/stress/metrics.d.ts.map +0 -1
- package/dist/stress/metrics.js +0 -83
- package/dist/stress/metrics.js.map +0 -1
- package/dist/stress/native-publish-event-workload.d.ts +0 -3
- package/dist/stress/native-publish-event-workload.d.ts.map +0 -1
- package/dist/stress/native-publish-event-workload.js +0 -465
- package/dist/stress/native-publish-event-workload.js.map +0 -1
- package/dist/stress/production-gate.d.ts +0 -4
- package/dist/stress/production-gate.d.ts.map +0 -1
- package/dist/stress/production-gate.js +0 -12
- package/dist/stress/production-gate.js.map +0 -1
- package/dist/stress/report.d.ts +0 -3
- package/dist/stress/report.d.ts.map +0 -1
- package/dist/stress/report.js +0 -174
- package/dist/stress/report.js.map +0 -1
- package/dist/stress/sds-discovery.d.ts +0 -4
- package/dist/stress/sds-discovery.d.ts.map +0 -1
- package/dist/stress/sds-discovery.js +0 -40
- package/dist/stress/sds-discovery.js.map +0 -1
- package/dist/stress/smoke-runner.d.ts +0 -3
- package/dist/stress/smoke-runner.d.ts.map +0 -1
- package/dist/stress/smoke-runner.js +0 -64
- package/dist/stress/smoke-runner.js.map +0 -1
- package/dist/stress/types.d.ts +0 -219
- package/dist/stress/types.d.ts.map +0 -1
- package/dist/stress/types.js +0 -2
- package/dist/stress/types.js.map +0 -1
- package/dist/stress/workload.d.ts +0 -6
- package/dist/stress/workload.d.ts.map +0 -1
- package/dist/stress/workload.js +0 -144
- package/dist/stress/workload.js.map +0 -1
- package/docs/PARTITION-STORE-WASM.md +0 -338
- package/docs/PARTITION-STORE.md +0 -2380
- package/docs/agents/response-artifacts.md +0 -65
- package/docs/response-artifacts.md +0 -86
- package/scripts/stress-docker.sh +0 -279
- package/sdm/flatsql-spatial.wasm +0 -0
- package/sdm/index.d.ts +0 -88
- package/sdm/index.js +0 -253
- package/sdm/manifest.json +0 -402
- package/stress/docker/Dockerfile +0 -11
- package/stress/docker/docker-compose.yml +0 -51
- package/stress/sds/aggregate.mjs +0 -97
- package/stress/sds/run.mjs +0 -105
- package/stress/sds/write-compose.mjs +0 -96
- package/wasm/flatsql-client.js +0 -280
- package/wasm/flatsql-io.d.ts +0 -97
- package/wasm/flatsql-io.js +0 -625
- package/wasm/flatsql-p4-threads.wasm +0 -0
- package/wasm/flatsql-ps-threads.wasm +0 -0
- package/wasm/flatsql-wasi-noeh.wasm +0 -0
- package/wasm/flatsql-wasi.wasm +0 -0
- package/wasm/flatsql.js +0 -2
- package/wasm/flatsql.worker.js +0 -209
- package/wasm/native/flatsql_wasmedge_runner.cpp +0 -858
- package/wasm/ps-node-fault.d.mts +0 -23
- package/wasm/ps-node-fault.mjs +0 -381
- package/wasm/ps-node-guest.mjs +0 -173
- package/wasm/ps-node-host.d.mts +0 -95
- package/wasm/ps-node-host.mjs +0 -476
- package/wasm/ps-node-imports.mjs +0 -847
- package/wasm/ps.d.ts +0 -21
- package/wasm/ps.js +0 -75
- package/wasm/wasi.d.ts +0 -11
- package/wasm/wasi.js +0 -51
package/wasm/integrity.json
CHANGED
|
@@ -1,33 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha384",
|
|
3
|
-
"hash": "
|
|
4
|
-
"sri": "sha384-
|
|
5
|
-
"size":
|
|
3
|
+
"hash": "Ji4/kLqVV2SvV2J2STAiEJTq5WS8kyJCs8JViNye+DPlp2itkbgVREOuoh+Gy6re",
|
|
4
|
+
"sri": "sha384-Ji4/kLqVV2SvV2J2STAiEJTq5WS8kyJCs8JViNye+DPlp2itkbgVREOuoh+Gy6re",
|
|
5
|
+
"size": 3719863,
|
|
6
6
|
"files": {
|
|
7
|
-
"flatsql-p4-threads.wasm": {
|
|
8
|
-
"sha256": "56b242de531a657714141583f0ed378335049cc6a94c28930e0f85a2d7297477",
|
|
9
|
-
"sri": "sha384-5n15mndPLu4Nl68m5LiZVLnopDGeJaIhO9PFaf94IaUL1xxP11ylXueXffRM88MX",
|
|
10
|
-
"size": 3615814
|
|
11
|
-
},
|
|
12
|
-
"flatsql-ps-threads.wasm": {
|
|
13
|
-
"sha256": "aa1ed58de773347c478215a763328f2aca9bca795c0944a85247e53b2433736a",
|
|
14
|
-
"sri": "sha384-ZTcxIdR1ya/icHbvLaKv9rOjJcsXQ0NXXN3BQOuIwk86iF73DqqQM8vz9PtNmpqq",
|
|
15
|
-
"size": 2680218
|
|
16
|
-
},
|
|
17
|
-
"flatsql-wasi-noeh.wasm": {
|
|
18
|
-
"sha256": "48dbf9473b5a4a506b0b42e5a1a66a6d5d2ff8173d6dbfef0cd59dfe4b24af86",
|
|
19
|
-
"sri": "sha384-ohr1g+djwFDAMymrT5Q/ojNp27OKhe7manAdOBPVE7Bc4wwLmy06+TvNxKWxiYg+",
|
|
20
|
-
"size": 2241020
|
|
21
|
-
},
|
|
22
|
-
"flatsql-wasi.wasm": {
|
|
23
|
-
"sha256": "d0bc62d6d73f0af2a521d45345f8f066742f9f24df7b39fe5d332d18fecfc54c",
|
|
24
|
-
"sri": "sha384-Gh5r7/pAFDJOyoqVLKCxZ2h9Ov9o9ijfGLBCkjxDpsVTijhRa9KdbWMPJm9lNHjF",
|
|
25
|
-
"size": 2335758
|
|
26
|
-
},
|
|
27
7
|
"flatsql.wasm": {
|
|
28
|
-
"sha256": "
|
|
29
|
-
"sri": "sha384-
|
|
30
|
-
"size":
|
|
8
|
+
"sha256": "75f33a69d462a07a15e0c2aa2e2e601f8b49c3c8101f29302782aadf82a32e06",
|
|
9
|
+
"sri": "sha384-Ji4/kLqVV2SvV2J2STAiEJTq5WS8kyJCs8JViNye+DPlp2itkbgVREOuoh+Gy6re",
|
|
10
|
+
"size": 3719863
|
|
31
11
|
}
|
|
32
12
|
}
|
|
33
13
|
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to the Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by the Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding any notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
Copyright 2024 Edgesource Corporation
|
|
179
|
+
|
|
180
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
|
+
you may not use this file except in compliance with the License.
|
|
182
|
+
You may obtain a copy of the License at
|
|
183
|
+
|
|
184
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
185
|
+
|
|
186
|
+
Unless required by applicable law or agreed to in writing, software
|
|
187
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
188
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
189
|
+
See the License for the specific language governing permissions and
|
|
190
|
+
limitations under the License.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var be=class extends Error{constructor(t){super(`WASI exit with code ${t}`),this.name="WasiExitError",this.code=t}};function it({args:e=[],env:t={},stdinBytes:r=[],maxOutputBytes:n=16*1024*1024}={}){let o=new Uint8Array(r),a=new Uint8Array(new SharedArrayBuffer(o.length));return a.set(o),{args:e,env:t,input:a,control:new Int32Array(new SharedArrayBuffer(5*4)),stdout:new Uint8Array(new SharedArrayBuffer(n)),stderr:new Uint8Array(new SharedArrayBuffer(n))}}function _r(e,t,r,n){for(;;){let o=Atomics.load(e,t);if(r>n-o)return-1;if(Atomics.compareExchange(e,t,o,o+r)===o)return o}}function ct(e={}){let t=e.processState,r=t?.args??e.args??[],n=t?.env??e.env??{},o=t?.input??new Uint8Array(e.stdinBytes??[]),a=e.logOutput===!0,u=e.performance??globalThis.performance??{now:()=>Date.now(),timeOrigin:0},d=e.crypto??globalThis.crypto??null,m=[],y=[],S=0,F=null;function E(l){F=l}function A(){return F}function I(){return new Uint8Array(F.buffer)}function i(){return new DataView(F.buffer)}let c=Object.entries(n).map(([l,w])=>`${l}=${w}`).map(l=>new TextEncoder().encode(l)),p=r.map(l=>new TextEncoder().encode(l));function h(l,w,R){let B;if(l===0)B=BigInt(Math.round((u.timeOrigin+u.now())*1e6));else if(l===1)B=BigInt(Math.round(u.now()*1e6));else return 28;return i().setBigUint64(R,B,!0),0}function f(l,w,R,B){if(l!==1&&l!==2)return 8;let T=l===1?m:y,b=0,Z=i(),te=I();for(let P=0;P<R;P++){let H=w+P*8,v=Z.getUint32(H,!0),C=Z.getUint32(H+4,!0);if(t){let z=l===1?t.stdout:t.stderr,at=_r(t.control,l,C,z.length);if(at<0)return 51;z.set(te.subarray(v,v+C),at)}else T.push(te.slice(v,v+C));b+=C}return Z.setUint32(B,b,!0),0}function O(l,w,R,B){if(l!==0)return i().setUint32(B,0,!0),8;let T=i(),b=I(),Z=0;for(let te=0;te<R;te+=1){let P=w+te*8,H=T.getUint32(P,!0),v=T.getUint32(P+4,!0),C,z;if(t)do C=Atomics.load(t.control,0),z=Math.min(v,o.length-C);while(Atomics.compareExchange(t.control,0,C,C+z)!==C);else C=S,z=Math.min(v,o.length-C),S+=z;if(z===0){if(C>=o.length)break;continue}b.set(o.subarray(C,C+z),H),Z+=z}return T.setUint32(B,Z,!0),0}function N(l){return l<=2?0:8}function G(l,w,R,B){return l<=2?70:8}function U(l,w){if(l>2)return 8;let R=i();return R.setUint8(w,2),R.setUint16(w+2,0,!0),R.setBigUint64(w+8,0n,!0),R.setBigUint64(w+16,0n,!0),0}function me(l,w){return l<=2?0:8}function Ne(l,w){return 8}function fe(l,w,R){return 8}function ee(){return 8}function ue(l,w){let R=i();R.setUint32(l,c.length,!0);let B=0;for(let T of c)B+=T.length+1;return R.setUint32(w,B,!0),0}function ne(l,w){let R=i(),B=I(),T=w;for(let b=0;b<c.length;b++)R.setUint32(l+b*4,T,!0),B.set(c[b],T),T+=c[b].length,B[T]=0,T+=1;return 0}function Ce(l,w){let R=i();R.setUint32(l,p.length,!0);let B=0;for(let T of p)B+=T.length+1;return R.setUint32(w,B,!0),0}function Fe(l,w){let R=i(),B=I(),T=w;for(let b=0;b<p.length;b++)R.setUint32(l+b*4,T,!0),B.set(p[b],T),T+=p[b].length,B[T]=0,T+=1;return 0}function st(l,w){return d?.getRandomValues?(d.getRandomValues(I().subarray(l,l+w)),0):52}function L(l){throw t&&(Atomics.store(t.control,4,l),Atomics.store(t.control,3,1)),a&&D(),new be(l)}function g(){return 0}function D(){if(m.length>0){let l=x(m);if(a){let w=new TextDecoder().decode(l);w&&console.log(w)}m.length=0}if(y.length>0){let l=x(y);if(a){let w=new TextDecoder().decode(l);w&&console.warn(w)}y.length=0}}function x(l){let w=0;for(let T of l)w+=T.length;let R=new Uint8Array(w),B=0;for(let T of l)R.set(T,B),B+=T.length;return R}return{imports:{wasi_snapshot_preview1:{clock_time_get:h,fd_write:f,fd_read:O,fd_close:N,fd_seek:G,fd_fdstat_get:U,fd_fdstat_set_flags:me,fd_prestat_get:Ne,fd_prestat_dir_name:fe,path_open:ee,environ_sizes_get:ue,environ_get:ne,args_sizes_get:Ce,args_get:Fe,random_get:st,proc_exit:L,sched_yield:g}},setMemory:E,getMemory:A,flushOutput:D,get stdout(){return t?t.stdout.slice(0,Atomics.load(t.control,1)):x(m)},get stderr(){return t?t.stderr.slice(0,Atomics.load(t.control,2)):x(y)}}}var we="node:";var pr=typeof process<"u"&&!!process.release&&process.release.name==="node",ye="wasiThreadBrowserWorker.mjs",lt=(()=>{try{return new URL(`./${ye}`,import.meta.url)}catch{return null}})(),hr=null;function Er(e){let t=String(e);return t.endsWith("/")?t:`${t}/`}function Ar({browserWorkerUrl:e,browserWorkerBaseUrl:t}={}){if(e)return String(e);let r=t?Er(t):hr;if(r){let n=typeof globalThis<"u"&&globalThis.location&&typeof globalThis.location.href=="string"?globalThis.location.href:void 0;return n?new URL(`${r}${ye}`,n).href:`${r}${ye}`}if(!lt)throw new de("(no packaged anchor: this host source was bundled without import.meta.url)");return String(lt)}var de=class extends Error{constructor(t,r){super(`[wasi-thread] pooled browser worker asset is unreachable at ${t}. The anchor must name a directory that serves BOTH ${ye} and wasiThreadWorkerRuntime.js. When this host source is bundled, pass browserWorkerBaseUrl / browserWorkerUrl to createWasiThreadSpawn (or call setBrowserWasiThreadWorkerBase) \u2014 import.meta.url anchors to the bundle, not to the package layout.`),this.name="WasiThreadWorkerUnreachableError",this.workerUrl=String(t),r!==void 0&&(this.cause=r)}};var Sr=1500;function mr(e,{wasmModule:t,memory:r,hostcallChannel:n,processState:o,extraImports:a,timeoutMs:u,partial:d,onExit:m,onGuestError:y,onWorkerError:S}){return new Promise(F=>{let E=e.length,A=!1,I=[],i=new WeakSet,s=new Set,c=new Set,p=(f,O={})=>{if(!A){A=!0;for(let N of I)clearTimeout(N);F({ok:f,unreachable:!1,error:null,readyWorkers:e.filter(N=>s.has(N)),failed:e.filter(N=>c.has(N)),...O})}},h=(f,O)=>{s.has(f)||c.has(f)||((O?s:c).add(f),E-=1,d?E===0&&p(s.size>0):O?E===0&&p(!0):p(!1))};e.forEach((f,O)=>{let N=setTimeout(()=>h(f,!1),u);I.push(N),f.onmessage=G=>{let U=G.data||{};i.add(f),U.t==="ready"?(clearTimeout(N),U.ok!==!0&&U.error&&console.error("[wasi-thread] pooled worker not ready:",U.error),h(f,U.ok===!0)):U.t==="exit"?m(f,U.tid):U.t==="error"&&(console.error("[wasi-thread] pooled worker guest error:",U.error),y?.(U.tid??null,U.error))},f.onerror=G=>{if(clearTimeout(N),console.error("[wasi-thread] pooled worker error:",G?.message??G),A){S?.(f,G);return}if(!i.has(f)){p(!1,{unreachable:!0,error:G});return}h(f,!1)},f.postMessage({t:"probe",wasmModule:t,memory:r,hostcallChannel:n??null,processState:o,extraImports:a??[],workerIndex:O})})})}function wr(e){return typeof SharedArrayBuffer=="function"&&!!e&&e.buffer instanceof SharedArrayBuffer}function yr(){return typeof navigator<"u"&&Number.isFinite(navigator.hardwareConcurrency)?navigator.hardwareConcurrency:typeof self<"u"&&self.navigator&&Number.isFinite(self.navigator.hardwareConcurrency)?self.navigator.hardwareConcurrency:1}function Ir(e){for(let t of e??[])if(typeof t=="function")throw new TypeError('createWasiThreadSpawn extraImports must be structured-cloneable descriptors (e.g. { provider: "flatsql-io", instanceId, channels }) or { moduleUrl } entries: a function cannot cross into a worker thread.')}function De({poolSize:e,onSpawnDeclined:t}){let r={poolSize:e,armed:0,failedToArm:0,spawned:0,declined:0,declinedByReason:{},lastDeclineReason:null};return{ledger:r,decline(n){if(r.declined+=1,r.declinedByReason[n]=(r.declinedByReason[n]??0)+1,r.lastDeclineReason=n,typeof t=="function")try{t({reason:n,poolSize:e,declined:r.declined})}catch{}return-1}}}function Me(e,t,r,n){if(typeof e=="function")try{e(t??null,r??null,n)}catch{}}async function ft({wasmModule:e,memory:t,requestedThreads:r,poolSize:n,extraImports:o,instanceId:a,onGuestError:u,onSpawnDeclined:d,probeTimeoutMs:m,hostcallChannel:y,processState:S,requiresHostcalls:F=!1,enableBrowserThreads:E,browserWorkerBaseUrl:A,browserWorkerUrl:I,browserWorkerType:i="module"}={}){let s=0,c=0,p=Number.isFinite(n);if(p&&(n<0||Math.floor(n)!==n))throw new RangeError("poolSize must be a non-negative integer.");if(Ir(o),F&&!y){let{ledger:L,decline:g}=De({poolSize:p?n:0,onSpawnDeclined:d});return{threadSpawn:()=>g("hostcall-channel-missing"),activeThreadCount:()=>0,spawnCount:()=>0,distinctOsThreadCount:()=>0,spawnReport:()=>({...L,active:0}),async terminateAll(){}}}if(pr){let L=new Set,g=new Set,{ledger:D,decline:x}=De({poolSize:p?n:null,onSpawnDeclined:d}),R=(await import(we+"worker_threads")).Worker,B=new URL("./wasiThreadWorker.mjs",import.meta.url),T=globalThis.process.execArgv,b=["--input-type","--eval","-e","--print","-p"],Z=T.some(P=>P.startsWith("--input-type"))?T.filter((P,H,v)=>!b.some(C=>P===C||P.startsWith(`${C}=`))&&!(H>0&&b.includes(v[H-1]))):void 0;return{threadSpawn:P=>{if(p&&L.size>=n)return x("pool-exhausted");let H=s+=1;try{let v=new R(B,{execArgv:Z,workerData:{wasmModule:e,memory:t,tid:H,startArg:P,hostcallChannel:y??null,processState:S,extraImports:o??[],workerIndex:H-1}});return typeof v.threadId=="number"&&g.add(v.threadId),v.on("error",C=>{console.error("[wasi-thread] worker error:",C),Me(u,a,H,C)}),v.once("exit",()=>L.delete(v)),L.add(v),c+=1,D.spawned+=1,H}catch{return x("worker-create-failed")}},activeThreadCount:()=>L.size,spawnCount:()=>c,distinctOsThreadCount:()=>g.size,spawnReport:()=>({...D,active:L.size}),async terminateAll(){for(let P of L)try{await P.terminate?.()}catch{}L.clear()}}}let h=[],f=new Map,O=[],N=!0,U=(E??globalThis.__SDM_ENABLE_BROWSER_WASI_THREADS__===!0)===!0&&globalThis.crossOriginIsolated===!0&&wr(t),me=yr(),Ne=Number.isFinite(r)?Math.floor(r):me,fe=U?p?n:Math.max(0,Math.min(Math.floor(me)-1,Ne)):0,{ledger:ee,decline:ue}=De({poolSize:p?n:fe,onSpawnDeclined:d}),ne=U?null:"threads-unavailable",Ce=(L,g)=>{g!=null&&f.delete(g),!N&&O.includes(L)&&!h.includes(L)&&h.push(L)},Fe=(L,g)=>{let D=null;for(let[w,R]of f)R===L&&(D=w,f.delete(w));let x=O.indexOf(L);x>=0&&O.splice(x,1);let l=h.indexOf(L);l>=0&&h.splice(l,1),Me(u,a,D,g)};if(fe>0){let L=Ar({browserWorkerUrl:I,browserWorkerBaseUrl:A}),g=[];try{for(let x=0;x<fe;x+=1)g.push(i==="classic"?new Worker(L):new Worker(L,{type:"module"}))}catch(x){for(let l of g)try{l.terminate()}catch{}throw new de(L,x)}let D=await mr(g,{wasmModule:e,memory:t,hostcallChannel:y,processState:S,extraImports:o,timeoutMs:Number.isFinite(m)&&m>0?m:Sr,partial:p,onExit:Ce,onGuestError:(x,l)=>Me(u,a,x,l),onWorkerError:Fe});if(D.unreachable){for(let x of g)try{x.terminate()}catch{}throw new de(L,D.error)}if(D.ok){N=!1;let x=p?D.readyWorkers:g;for(let l of x)O.push(l),h.push(l);for(let l of g)if(!x.includes(l))try{l.terminate()}catch{}ee.armed=x.length,ee.failedToArm=g.length-x.length}else{for(let x of g)try{x.terminate()}catch{}ee.failedToArm=g.length,ne="pool-not-armed"}}else U&&(ne="pool-empty");return{threadSpawn:L=>{if(N)return ue(ne??"pool-disabled");let g=h.pop();if(!g)return ue("pool-exhausted");let D=s+=1;f.set(D,g);try{g.postMessage({t:"run",tid:D,startArg:L})}catch{return f.delete(D),h.push(g),ue("dispatch-failed")}return c+=1,ee.spawned+=1,D},activeThreadCount:()=>f.size,spawnCount:()=>c,distinctOsThreadCount:()=>O.length,spawnReport:()=>({...ee,active:f.size,idle:h.length}),async terminateAll(){N=!0,ne="terminated";for(let L of O)try{L.terminate()}catch{}O.length=0,h.length=0,f.clear()}}}var ln=Object.freeze({READ:1,WRITE:2,CREATE:4,EXCL:8,TRUNC:16,DELETE_ON_CLOSE:32,PROBE:64,UNLINK:128,CREATE_PARENTS:256,UNLINK_IF_UNUSED:512,OPEN_DEFERRED:1024}),fn=Object.freeze({OK:0,GENERIC:-1,NOENT:-2,ACCESS:-3,IO:-4,NOSPACE:-5,BADHANDLE:-6,BUSY:-7});var un=Object.freeze(["flatsql_io_open","flatsql_io_read","flatsql_io_write","flatsql_io_truncate","flatsql_io_sync","flatsql_io_size","flatsql_io_close"]),oe=4096;var dn=typeof TextDecoder=="function"?new TextDecoder("utf-8",{fatal:!0}):null;function ut(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e[r],t=Math.imul(t,16777619);return t>>>0}var pt=1330201683,ht=1,Et=0,At=1,St=2,mt=3,wt=4,he=5,He=6,$e=7;var Or=9,Oe=10,yt=11;var It=13,qe=64,Ue=qe*4;var Ot=1;var Rr=3;var Ve=1,Rt=0,Tt=1,ze=2,ie=3,J=32767,K=0,Lt=1,ke=2,gt=3,xt=4,Bt=5,Nt=6,Ct=7,Ft=8,bt=9,ve=10,Ye=11,Dt=12,Mt=13,Ut=8,Ge=9,Ie=128,Qe=0,Tr=1,Ke=2,kt=3,vt=4,Lr=0,gr=1,xr=0,Qt=1,Pt=1,se=2,pe=3,Wt=4,Ht=5,$t=6,qt=7,Br=64,Nr=64*1024,Cr=64,Pe=250,Fr=20;function dt(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}function We(e,t){return Math.ceil(e/t)*t}function Vt(e){if(typeof SharedArrayBuffer!="function"||!(e instanceof SharedArrayBuffer))throw new TypeError("The SAB I/O channel requires a SharedArrayBuffer (cross-origin isolation in browsers).")}function zt(e={}){if(typeof SharedArrayBuffer!="function")throw new Error("SharedArrayBuffer is unavailable; the I/O channel requires it (browsers additionally require cross-origin isolation: COOP+COEP).");let t=Number.isInteger(e.slots)?e.slots:Br,r=Number.isInteger(e.dataBytes)?e.dataBytes:Nr,n=Number.isInteger(e.maxInstances)?e.maxInstances:Cr;if(t<1||t>4096)throw new RangeError("slots must be an integer in 1..4096.");if(r<oe||r%8!==0)throw new RangeError(`dataBytes must be a multiple of 8 and at least ${oe}.`);if(n<1||n>J)throw new RangeError(`maxInstances must be in 1..${J}.`);let o=We(Ie+r,64),a=We(Ue+n*4,64),u=new SharedArrayBuffer(a+t*o),d=new Int32Array(u,0,qe);return d[Et]=pt,d[At]=ht,d[St]=t,d[mt]=o,d[wt]=n,d[yt]=r,d[It]=Math.random()*2147483647|0||1,u}function re(e){Vt(e);let t=new Int32Array(e,0,qe);if(t[Et]!==pt||t[At]!==ht)throw new TypeError("Not a SAB I/O channel buffer (bad magic or version).");let r=t[St],n=t[mt],o=t[wt],a=t[yt],u=We(Ue+o*4,64),d=new Int32Array(e,Ue,o),m=[];for(let y=0;y<r;y+=1){let S=u+y*n;m.push({index:y,base:S,i32:new Int32Array(e,S,Ie/4),f64:new Float64Array(e,S,Ie/8),data:new Uint8Array(e,S+Ie,a)})}return{buffer:e,header:t,instances:d,slots:m,slotCount:r,slotBytes:n,dataBytes:a,maxInstances:o,channelId:t[It]}}function Xe(e){return`sdm-sab-io-doorbell-${e}`}function br(e){return`sdm-sab-io-done-${e}`}function Dr(e,t){Atomics.add(e.header,he,1),Atomics.notify(e.header,he),Atomics.load(e.header,$e)===Ve&&t()?.postMessage(0)}function Mr(e){let t=null;return{get(){return!t&&typeof BroadcastChannel=="function"&&(t=new BroadcastChannel(e)),t},close(){t?.close(),t=null}}}var Ur=typeof TextEncoder=="function"?new TextEncoder:null;function kr(){return(Math.random()*2147483646|0)+1}function vr(e,t){let r=(Atomics.add(e.header,Or,1)>>>0)%e.slotCount;for(let n=0;n<e.slotCount;n+=1){let o=e.slots[(r+n)%e.slotCount];if(Atomics.compareExchange(o.i32,K,Qe,Tr)===Qe)return Atomics.store(o.i32,Lt,t),o}return null}function _t(e,t){Atomics.store(t.i32,Lt,0),Atomics.store(t.i32,K,Qe),Atomics.add(e.header,Oe,1),Atomics.notify(e.header,Oe)}function Qr(e,t,r){let n=e.i32;n[xt]=t,n[Bt]=r.instanceId??J,n[Nt]=r.handle??-1,n[Ct]=r.flags??0,n[Ft]=r.ptr??0,n[bt]=r.len??0,n[Mt]=r.dataInSlot?Qt:xr,n[Ye]=0,e.f64[Ut]=r.offset??0,e.f64[Ge]=0,r.path?(e.data.set(r.path,0),n[ve]=r.path.length):n[ve]=0}function Pr(e){return Atomics.load(e.i32,Ye)}function Yt(e={}){Vt(e.buffer);let t=re(e.buffer),r=Number.isInteger(e.instanceId)?e.instanceId:J;if(r!==J&&(r<0||r>=t.maxInstances))throw new RangeError(`instanceId ${r} is outside 0..${t.maxInstances-1}.`);let n=typeof e.getMemory=="function"?e.getMemory:()=>null,o=Number.isFinite(e.spinMicros)?Math.max(0,e.spinMicros):Fr,a=kr(),u=Mr(Xe(t.channelId)),d=0;function m(){for(;;){let i=Atomics.load(t.header,Oe),s=vr(t,a);if(s)return s;Atomics.wait(t.header,Oe,i,Pe)}}function y(i,s,c){let p=Atomics.load(i.i32,ke)+1|0||1;Qr(i,s,c),Atomics.store(i.i32,Dt,Lr),Atomics.store(i.i32,ke,p),Atomics.store(i.i32,K,Ke),Dr(t,u.get);let h=o>0?dt()+o/1e3:0;for(;;){let f=Atomics.load(i.i32,K);if(f===vt&&Atomics.load(i.i32,gt)===p)break;h>0&&dt()<h||Atomics.wait(i.i32,K,f,Pe)}return d+=1,{status:Pr(i),result:i.f64[Ge]}}function S(i,s){let c=m();try{return y(c,i,s)}finally{_t(t,c)}}function F(){return r!==J&&Atomics.load(t.instances,r)===Tt}function E(){if(r===J)return!1;let i=Atomics.load(t.instances,r);return i===ze||i===ie}function A(i,s,c,p){let h=0;for(;h<c.length;){let f=Math.min(t.dataBytes,c.length-h),O=m(),N;try{i===pe&&O.data.set(c.subarray(h,h+f),0),N=y(O,i,{instanceId:r,dataInSlot:!0,handle:s,ptr:0,len:f,offset:p+h}).status,i===se&&N>0&&c.set(O.data.subarray(0,N),h)}finally{_t(t,O)}if(N<0)return h>0&&i===se?h:N;if(h+=N,N<f)break}return h}function I(i,s){let c=n(),p=c?.buffer??c;return!p||i<0||s<0||i+s>p.byteLength?null:new Uint8Array(p,i,s)}return{instanceId:r,get requests(){return d},open(i,s){let c=typeof i=="string"?Ur.encode(i):i;return!(c instanceof Uint8Array)||c.length===0?-1:c.length>Math.min(t.dataBytes,oe)?-1:S(Pt,{instanceId:r,flags:s|0,path:c}).status},read(i,s,c,p){if(c===0)return 0;if(F())return S(se,{instanceId:r,handle:i,ptr:s,len:c,offset:p}).status;let h=I(s,c);return h?A(se,i,h,p):E()?-3:-1},write(i,s,c,p){if(c===0)return 0;if(F())return S(pe,{instanceId:r,handle:i,ptr:s,len:c,offset:p}).status;let h=I(s,c);return h?A(pe,i,h,p):E()?-3:-1},readInto(i,s,c){return s.length===0?0:A(se,i,s,c)},writeFrom(i,s,c){return s.length===0?0:A(pe,i,s,c)},truncate(i,s){return S(Wt,{instanceId:r,handle:i,offset:s}).status},sync(i){return S(Ht,{instanceId:r,handle:i}).status},size(i){let{status:s,result:c}=S($t,{instanceId:r,handle:i});return s<0?s:c},close(i){return S(qt,{instanceId:r,handle:i}).status},release(){u.close()}}}async function Gt(e,t,{pollMs:r=5}={}){let n=re(e);if(t<0||t>=n.maxInstances)throw new RangeError(`instanceId ${t} is outside 0..${n.maxInstances-1}.`);if(Atomics.store(n.instances,t,ze),Atomics.add(n.header,he,1),Atomics.notify(n.header,he),Atomics.load(n.header,$e)===Ve){let o=typeof BroadcastChannel=="function"?new BroadcastChannel(Xe(n.channelId)):null;o?.postMessage(0),o?.close()}for(;;){let o=Atomics.load(n.instances,t);if(o===ie)return;if(Atomics.load(n.header,He)!==Ot){Atomics.store(n.instances,t,ie);return}if(typeof Atomics.waitAsync=="function"){let a=Atomics.waitAsync(n.instances,t,o,Pe);a.async&&await a.value}else await new Promise(a=>setTimeout(a,r))}}function Kt(e,t){let r=re(e);Atomics.store(r.instances,t,Rt)}function Xt(e,t=-4){let r=re(e);Atomics.store(r.header,He,Rr);let n=0;for(let o of r.slots){let a=Atomics.load(o.i32,K);(a===Ke||a===kt)&&(Zt(r,o,t,0),n+=1)}return n}var _e=null;function Wr(e){return typeof BroadcastChannel!="function"?null:((!_e||_e.id!==e.channelId)&&(_e?.channel.close(),_e={id:e.channelId,channel:new BroadcastChannel(br(e.channelId))}),_e.channel)}function Zt(e,t,r,n=0){t.f64[Ge]=n,Atomics.store(t.i32,Ye,r|0),Atomics.store(t.i32,gt,Atomics.load(t.i32,ke)),Atomics.store(t.i32,K,vt),Atomics.notify(t.i32,K),Atomics.load(t.i32,Dt)===gr&&Wr(e)?.postMessage(t.index)}var Hr=typeof TextEncoder=="function"?new TextEncoder:null;function $r(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e[r],t=Math.imul(t,16777619);return t|0}var Jt=new WeakMap;function jt(e){let t=Jt.get(e);if(t)return t;let r=new Int32Array(e,0,16);if(r[0]!==1380795475||r[1]!==1)throw new TypeError("Not a SAB I/O mirror buffer.");let n=r[2],o=r[3],a=r[4],u=16*4,d=u+n*32,m=d+n*a;return t={entries:n,entryBytes:o,maxPathBytes:a,i32:new Int32Array(e,u,n*32/4),f64:new Float64Array(e,u,n*32/8),paths:new Uint8Array(e,d,n*a),data:new Uint8Array(e,m,n*o)},Jt.set(e,t),t}function qr(e){return typeof e=="string"?Hr.encode(e):e}function Vr(e,t,r){let n=t*8;if(Atomics.load(e.i32,n+3)!==r.length)return!1;let o=t*e.maxPathBytes;for(let a=0;a<r.length;a+=1)if(e.paths[o+a]!==r[a])return!1;return!0}function zr(e,t,r){let n=(r>>>0)%e.entries;for(let o=0;o<e.entries;o+=1){let a=n*8,u=Atomics.load(e.i32,a+0);if(u===0)return-1;if((u===2||u===3)&&Atomics.load(e.i32,a+2)===r&&Vr(e,n,t))return n;n=(n+1)%e.entries}return-1}function er(e,t){let r=jt(e),n=qr(t);if(n.length>r.maxPathBytes)return-1;let o=zr(r,n,$r(n));return o<0?-1:Atomics.load(r.i32,o*(32/4)+0)===2?o:-1}function tr(e,t,r,n){let o=jt(e),a=t*(32/4),u=t*(32/8)+3,d=t*o.entryBytes;for(let m=0;m<64;m+=1){let y=Atomics.load(o.i32,a+1);if(y&1)continue;if(Atomics.load(o.i32,a+0)!==2)return-1;let S=o.f64[u],F=Atomics.load(o.i32,a+4),E;if(n>=S)E=0;else{let A=Math.min(r.length,S-n);n+A>F?E=-1:(r.set(o.data.subarray(d+n,d+n+A),0),E=A)}if(Atomics.load(o.i32,a+1)===y)return E}return-1}function rr(e=["/h.fsh"]){let t=Array.from(e,String);return r=>{let n=String(r);for(let o of t)if(n.endsWith(o)||n===o.replace(/^\//,""))return!0;return!1}}var Yr="flatsql-io",j=Object.freeze({open:1,read:2,write:3,truncate:4,sync:5,size:6,close:7,mirrorRead:8}),nr=24,or=16777215;function Ze(){return typeof performance<"u"&&performance.now?performance.now()*1e3:Date.now()*1e3}function Gr(e){if(!e?.buffer)return null;let t=new Int32Array(e.buffer,0,4),r=t[1],n=new Float64Array(e.buffer,16,r),o=new Uint8Array(e.buffer,16+r*8,r);return(a,u)=>{let d=Atomics.add(t,0,1);d<r&&(n[d]=Ze()-u,o[d]=a)}}function Kr(e,t,r){if(!e||r<=0||r>oe||t<0)return null;let n=e.buffer??e;return t+r>n.byteLength?null:new Uint8Array(n,t,r).slice()}function Xr(e={}){let t=e.getMemory;if(typeof t!="function")throw new TypeError("createFlatsqlIoImports requires getMemory().");let r=Array.isArray(e.provider)?e.provider:[e.provider];if(r.length===0||r.some(E=>!E||typeof E.open!="function"))throw new TypeError("createFlatsqlIoImports requires at least one provider.");if(r.length>127)throw new RangeError("At most 127 providers can be routed.");let n=r.length>1,o=Gr(e.trace),a=e.mirror?.buffer??null,u=a?rr(e.mirror.suffixes??["/h.fsh"]):null,d=new Map,m=new TextDecoder;function y(E){if(!n)return{provider:r[0],local:E};let A=E>>>nr,I=r[A];return I?{provider:I,local:E&or}:null}function S(E,A,I){let i=o?Ze():0,s;try{s=I()}catch{s=A}return o&&o(E,i),s}return{env:{flatsql_io_open(E,A,I){return S(j.open,-1,()=>{let i=Kr(t(),E,A);if(!i)return-1;let s=n?ut(i)%r.length:0,c=r[s].open(i,I|0);if(c<0)return c;if(n&&c>or)return-4;let p=n?s<<nr|c:c;if(u){let h=m.decode(i);u(h)&&d.set(p,h)}return p})},flatsql_io_read(E,A,I,i){if(a&&d.has(E)){let s=o?Ze():0;try{let c=t(),p=c.buffer??c;if(A>=0&&I>=0&&A+I<=p.byteLength){let h=er(a,d.get(E));if(h>=0){let f=tr(a,h,new Uint8Array(p,A,I),i);if(f>=0)return o&&o(j.mirrorRead,s),f}}}catch{}}return S(j.read,-4,()=>{let s=y(E);return s?s.provider.read(s.local,A,I,i):-6})},flatsql_io_write(E,A,I,i){return S(j.write,-4,()=>{let s=y(E);return s?s.provider.write(s.local,A,I,i):-6})},flatsql_io_truncate(E,A){return S(j.truncate,-4,()=>{let I=y(E);return I?I.provider.truncate(I.local,A):-6})},flatsql_io_sync(E){return S(j.sync,-4,()=>{let A=y(E);return A?A.provider.sync(A.local):-6})},flatsql_io_size(E){return S(j.size,-4,()=>{let A=y(E);return A?A.provider.size(A.local):-6})},flatsql_io_close(E){return S(j.close,-4,()=>{d.delete(E);let A=y(E);return A?A.provider.close(A.local):-6})}}}}function Zr(e,{getMemory:t}){let r=Array.isArray(e.channels)?e.channels:[e.channel??e.buffer];if(r.length===0||r.some(a=>!(a instanceof SharedArrayBuffer)))throw new TypeError("A flatsql-io descriptor needs channels: SharedArrayBuffer[].");let n=r.map(a=>Yt({buffer:a,instanceId:e.instanceId,getMemory:t}));return{imports:Xr({getMemory:t,provider:n,mirror:e.mirror,trace:e.trace}),close(){for(let a of n)a.release()}}}function sr(e,t){let r=[],n=[];for(let o of e??[]){let a;if(typeof o=="function")a=o(t);else if(o&&o.provider===Yr)a=Zr(o,t);else if(o&&typeof o.factory=="function")a=o.factory({...t,config:o.config});else throw new TypeError(`Unresolvable extraImports entry ${JSON.stringify(o?.provider??o?.moduleUrl??typeof o)}; pass a factory function, a { provider: "flatsql-io" } descriptor, or (module workers) a { moduleUrl } descriptor.`);a&&a.imports&&typeof a.close=="function"?(r.push(a.imports),n.push(a.close)):a&&r.push(a)}return{fragments:r,close(){for(let o of n)try{o()}catch{}}}}function ar(e,t){for(let r of t)for(let[n,o]of Object.entries(r??{}))e[n]={...e[n]??{},...o};return e}var Dn=256*1024;var Mn=263;var jr=typeof process<"u"&&!!process.release&&process.release.name==="node",lr="opfsIoWorker.mjs",xe=class extends Error{constructor(t,r){super(t),this.name="FlatsqlIoWorkerStartError",r!==void 0&&(this.cause=r)}};async function en({workerUrl:e,workerType:t}){if(jr){let n=we+"worker_threads",{Worker:o}=await import(n),a=e??new URL(`./${lr}`,import.meta.url),u=new o(a);return{raw:u,post:(d,m)=>u.postMessage(d,m),onMessage:d=>u.on("message",d),onError:d=>{u.on("error",d),u.on("exit",m=>d(new Error(`I/O worker exited with code ${m}`),!0))},terminate:()=>u.terminate()}}let r;if(e)r=t==="classic"?new Worker(e):new Worker(e,{type:"module"});else{let n;try{n=new URL(`./${lr}`,import.meta.url)}catch(o){throw new xe('No packaged I/O worker anchor (this source was bundled without import.meta.url): pass workerUrl, e.g. hostWorkerBundleUrl("flatsql-io") with workerType "classic".',o)}r=new Worker(n,{type:"module"})}return{raw:r,post:(n,o)=>r.postMessage(n,o??[]),onMessage:n=>{r.onmessage=o=>n(o.data)},onError:n=>{r.onerror=o=>{o?.preventDefault?.(),n(new Error(o?.message??"I/O worker error"),!1)},r.onmessageerror=()=>n(new Error("I/O worker message error"),!1)},terminate:()=>r.terminate()}}async function fr(e={}){let t=e.buffer??zt(e.channel??{}),r=re(t),n=new Map,o=new Map,a=1,u=null,d=null,m=!1,y=!1,S=0,F={t:"init",buffer:t,backend:e.backend??"opfs",role:e.role??"writer",chunkBytes:e.chunkBytes,doorbell:e.doorbell??"auto",mirror:e.mirror??null,rootDirectory:e.rootDirectory,handleMode:e.handleMode,memoryMaxBytes:e.memoryMaxBytes,openDelay:e.openDelay??null,lock:e.lock??null,busyRetry:e.busyRetry??null};function E(s){let c=a++;return new Promise(p=>{o.set(c,p),u.post({...s,id:c})})}async function A(){let s=await en(e);u=s,m=!1;let c,p=new Promise(f=>{c=f});s.onMessage(f=>{if(!(!f||u!==s)){if(f.t==="ready"){c(f);return}if(f.t==="attached"){let O=o.get(`attach:${f.instanceId}`);o.delete(`attach:${f.instanceId}`),O?.(f.ok);return}if(f.id!==void 0&&o.has(f.id)){let O=o.get(f.id);o.delete(f.id),O(f)}}}),s.onError((f,O)=>{if(!(y||u!==s)){if(!d){c({ok:!1,error:String(f?.message??f)});return}i(f,O)}}),s.post(F);let h=await p;if(!h.ok){try{s.terminate()}catch{}let f=new xe(`I/O worker failed to start: ${h.error}`);throw f.lockUnavailable=h.lockUnavailable===!0,f}d=h.info;for(let[f,O]of n)await I(f,O);return d}function I(s,c){return new Promise(p=>{o.set(`attach:${s}`,p),u.post({t:"attach",instanceId:s,memory:c})})}function i(s){if(m)return;m=!0;try{u.terminate()}catch{}let c=Xt(t,-4);for(let h of o.values())h({ok:!1,dead:!0});o.clear();let p=e.restart===!0;try{e.onError?.(s,{restarted:p,failedRequests:c})}catch{}p&&(S+=1,d=null,A().catch(h=>{try{e.onError?.(h,{restarted:!1,failedRequests:0})}catch{}}))}return await A(),{buffer:t,get info(){return d},get dead(){return m},get restarts(){return S},get worker(){return u?.raw??null},async attachMemory(s,c){return Atomics.load(r.instances,s)===ie&&Kt(t,s),n.set(s,c),I(s,c)},detachMemory(s){n.delete(s),u.post({t:"detach",instanceId:s})},async revoke(s){n.delete(s),await Gt(t,s)},async preopen(s,c){return(await E({t:"preopen",paths:s,flags:c})).statuses??s.map(()=>-4)},releasePreopen(s){u.post({t:"release-preopen",paths:s})},async stats(){return E({t:"stats"})},async reset(){await E({t:"reset"})},async clear(){return E({t:"clear"})},async stop(){y=!0,m||await E({t:"stop"});try{await u.terminate()}catch{}},kill(){i(new Error("I/O worker killed"),!0)}}}var Se=3,M=Se|4,$=new TextEncoder,tt=new TextDecoder;function tn(e,t){let r=new Uint8Array(e),n=t>>>0||1;for(let o=0;o<e;o+=1)n^=n<<13,n^=n>>>17,n^=n<<5,r[o]=n&255;return r}function rn(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(e[r]!==t[r])return!1;return!0}var rt=class extends Error{};function X(e,t){if(!e)throw new rt(t)}function _(e,t,r){X(e===t,`${r}: expected ${t}, got ${e}`)}function Q(e,t){X(Number.isInteger(e)&&e>=0,`${t}: expected a handle, got ${e}`)}var Yn=Object.freeze([{name:"open without CREATE on a missing file is NOENT",async run(e,t){_(await e.open(`${t}/missing.bin`,Se),-2,"open")}},{name:"create, write, size, short read at EOF, read past EOF",async run(e,t){let r=await e.open(`${t}/a.bin`,M);Q(r,"open"),_(await e.writeFrom(r,$.encode("hello"),0),5,"write"),_(await e.size(r),5,"size");let n=new Uint8Array(10);_(await e.readInto(r,n,0),5,"short read"),X(tt.decode(n.subarray(0,5))==="hello","short read bytes"),_(await e.readInto(r,new Uint8Array(4),5),0,"read at EOF"),_(await e.readInto(r,new Uint8Array(4),100),0,"read past EOF"),_(await e.close(r),0,"close")}},{name:"a write past EOF extends the file and the gap reads as zeros",async run(e,t){let r=await e.open(`${t}/sparse.bin`,M);Q(r,"open"),_(await e.writeFrom(r,$.encode("ab"),0),2,"write head"),_(await e.writeFrom(r,$.encode("z"),100),1,"write past EOF"),_(await e.size(r),101,"size");let n=new Uint8Array(98);n.fill(238),_(await e.readInto(r,n,2),98,"read gap"),X(n.every(o=>o===0),"gap is zeros"),_(await e.close(r),0,"close")}},{name:"truncate shrinks and grows; grown bytes read as zeros",async run(e,t){let r=await e.open(`${t}/t.bin`,M);Q(r,"open"),await e.writeFrom(r,$.encode("abcdefgh"),0),_(await e.truncate(r,3),0,"truncate down"),_(await e.size(r),3,"size after shrink"),_(await e.truncate(r,10),0,"truncate up"),_(await e.size(r),10,"size after grow");let n=new Uint8Array(10);_(await e.readInto(r,n,0),10,"read"),X(tt.decode(n.subarray(0,3))==="abc","kept prefix"),X(n.subarray(3).every(o=>o===0),"grown tail is zeros"),_(await e.sync(r),0,"sync"),_(await e.close(r),0,"close")}},{name:"closed and bogus handles are BADHANDLE",async run(e,t){let r=await e.open(`${t}/c.bin`,M);Q(r,"open"),_(await e.close(r),0,"close"),_(await e.close(r),-6,"close again"),_(await e.readInto(r,new Uint8Array(1),0),-6,"read"),_(await e.size(8388352),-6,"bogus size")}},{name:"PROBE reports existence without a handle",async run(e,t){let r=await e.open(`${t}/p.bin`,M);Q(r,"open"),await e.close(r),_(await e.open(`${t}/p.bin`,64),0,"probe existing"),_(await e.open(`${t}/nope.bin`,64),-2,"probe missing")}},{name:"EXCL on an existing file is GENERIC; TRUNC empties it",async run(e,t){let r=await e.open(`${t}/x.bin`,M);Q(r,"open"),await e.writeFrom(r,$.encode("data"),0),await e.close(r),_(await e.open(`${t}/x.bin`,M|8),-1,"EXCL");let n=await e.open(`${t}/x.bin`,Se|16);Q(n,"TRUNC open"),_(await e.size(n),0,"size after TRUNC"),await e.close(n)}},{name:"CREATE under a missing directory is NOENT; CREATE_PARENTS makes it",async run(e,t){_(await e.open(`${t}/p/00000001/h.fsh`,M),-2,"no parents");let r=await e.open(`${t}/p/00000001/h.fsh`,M|256);Q(r,"CREATE_PARENTS"),_(await e.writeFrom(r,$.encode("head"),0),4,"write"),await e.close(r),_(await e.open(`${t}/p/00000001/h.fsh`,64),0,"probe")}},{name:"UNLINK_IF_UNUSED is BUSY while a handle is open; UNLINK removes",async run(e,t){let r=await e.open(`${t}/u.bin`,M);Q(r,"open"),_(await e.open(`${t}/u.bin`,512),-7,"unlink while open"),await e.close(r),_(await e.open(`${t}/u.bin`,512),0,"unlink unused"),_(await e.open(`${t}/u.bin`,64),-2,"gone"),_(await e.open(`${t}/u.bin`,128),-2,"unlink missing");let n=await e.open(`${t}/v.bin`,M);await e.close(n),_(await e.open(`${t}/v.bin`,128),0,"plain unlink")}},{name:"DELETE_ON_CLOSE drops the file with its last handle",async run(e,t){let r=await e.open(`${t}/tmp.bin`,M|32);Q(r,"open"),await e.writeFrom(r,$.encode("scratch"),0),_(await e.close(r),0,"close"),_(await e.open(`${t}/tmp.bin`,64),-2,"probe")}},{name:"paths are confined below the root",async run(e,t){_(await e.open(`${t}/../../escape.bin`,M),-3,".."),_(await e.open("",M),-1,"empty path")}},{name:"access modes: read-only handles refuse writes, write-only refuse reads",async run(e,t){let r=await e.open(`${t}/m.bin`,M);await e.writeFrom(r,$.encode("mode"),0),await e.close(r);let n=await e.open(`${t}/m.bin`,1);Q(n,"read-only open"),_(await e.writeFrom(n,$.encode("x"),0),-4,"write on RO"),_(await e.truncate(n,0),-4,"truncate on RO"),await e.close(n);let o=await e.open(`${t}/m.bin`,2);Q(o,"write-only open"),_(await e.readInto(o,new Uint8Array(2),0),-4,"read on WO"),await e.close(o)}},{name:"OPEN_DEFERRED: a failed open surfaces at open or at first use",async run(e,t){let r=await e.open(`${t}/deferred-missing.bin`,Se|1024);r<0?_(r,-2,"sync host"):(_(await e.readInto(r,new Uint8Array(1),0),-2,"first use"),_(await e.close(r),0,"close failed deferred"));let n=await e.open(`${t}/deferred.bin`,M|1024);Q(n,"deferred create"),_(await e.writeFrom(n,$.encode("later"),0),5,"write after deferred"),_(await e.size(n),5,"size"),await e.close(n)}},{name:"two handles on one path see each other's writes",async run(e,t){let r=await e.open(`${t}/shared.bin`,M),n=await e.open(`${t}/shared.bin`,Se);Q(r,"a"),Q(n,"b"),await e.writeFrom(r,$.encode("from-a"),0);let o=new Uint8Array(6);_(await e.readInto(n,o,0),6,"read via b"),X(tt.decode(o)==="from-a","b sees a"),await e.writeFrom(n,$.encode("B"),0);let a=new Uint8Array(1);await e.readInto(r,a,0),X(a[0]===66,"a sees b"),await e.close(r),await e.close(n)}},{name:"1 MiB round trip across chunk boundaries at an unaligned offset",async run(e,t){let r=await e.open(`${t}/big.bin`,M);Q(r,"open");let n=tn(1024*1024+17,2654435769);_(await e.writeFrom(r,n,4093),n.length,"write"),_(await e.size(r),4093+n.length,"size");let o=new Uint8Array(n.length);_(await e.readInto(r,o,4093),n.length,"read"),X(rn(o,n),"bytes round trip"),await e.close(r)}}]);var V,le,Be,nt,ot,ur=e=>postMessage({fatal:String(e?.stack??e)});async function nn(e,t){let r=await WebAssembly.compile(e);V=new WebAssembly.Memory({initial:512,maximum:t.maximumPages??8192,shared:!0});let n=it({env:{}});Be=await fr({backend:t.backend??"opfs",rootDirectory:t.root??"flatsql",workerUrl:t.ioWorkerUrl,onError:ur,lock:t.backend==="memory"?void 0:{name:`flatsql/${t.root??"flatsql"}`,ifAvailable:!0}}),await Be.attachMemory(0,V);let o=[{provider:"flatsql-io",instanceId:0,channels:[Be.buffer]}],a=ct({processState:n});a.setMemory(V),ot=sr(o,{getMemory:()=>V,memory:V});let u=ar({...a.imports,env:{memory:V},wasi:{}},ot.fragments),d=()=>-1;u.wasi["thread-spawn"]=S=>d(S),le=await WebAssembly.instantiate(r,u),le.exports._initialize();let m=[],y=(t.maximumPages??8192)*65536;for(let S=2**30;S>=2**20&&m.length<64;){let F=V.buffer.byteLength+S+1048576<=y?le.exports.flatsql_alloc(S):0;F?m.push(F):S/=2}for(let S of m)le.exports.flatsql_free(S);return nt=await ft({wasmModule:r,memory:V,processState:n,poolSize:t.poolSize,extraImports:o,instanceId:0,enableBrowserThreads:!0,browserWorkerUrl:t.threadWorkerUrl,onGuestError:(S,F,E)=>ur(E)}),d=nt.threadSpawn,V}async function dr(){await nt?.terminateAll(),ot?.close(),await Be?.stop()}onmessage=async({data:e})=>{try{let t;if(e.op==="init")try{t=await nn(e.bytes,e.options)}catch(r){throw await dr(),r}else if(e.op==="call")t=le.exports[e.fn](...e.args);else if(e.op==="write"){if(t=le.exports.flatsql_alloc(Math.max(1,e.bytes.length)),!t)throw new Error("FlatSQL allocation failed");new Uint8Array(V.buffer).set(e.bytes,t)}else if(e.op==="read")t=new Uint8Array(V.buffer).slice(e.ptr,e.ptr+e.len);else if(e.op==="close")await dr();else throw new Error("Unknown FlatSQL worker operation");postMessage({id:e.id,value:t})}catch(t){postMessage({id:e.id,error:String(t?.stack??t)})}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function d(w,o={}){if(!globalThis.crossOriginIsolated||typeof SharedArrayBuffer!="function")throw new Error("FlatSQL requires cross-origin isolation (COOP/COEP) for shared WASM memory");let t=new Worker(o.workerUrl??new URL("./browser-guest.mjs",import.meta.url),{type:"module"}),f=0,n=null,a=new Map,s=e=>{n=e;for(let{reject:r}of a.values())r(e);a.clear()};t.onerror=e=>s(new Error(e.message||"FlatSQL worker failed")),t.onmessageerror=()=>s(new Error("FlatSQL worker message failed"));let i=e=>new Promise((r,l)=>{if(n)return l(n);let m=++f,u=setTimeout(()=>{s(new Error("FlatSQL worker request timed out")),t.terminate()},3e4);a.set(m,{resolve:c=>{clearTimeout(u),r(c)},reject:c=>{clearTimeout(u),l(c)}});try{t.postMessage({...e,id:m})}catch(c){a.get(m).reject(c),a.delete(m)}});t.onmessage=({data:e})=>{if(e.fatal){s(new Error(e.fatal));return}let r=a.get(e.id);r&&(a.delete(e.id),e.error?r.reject(new Error(e.error)):r.resolve(e.value))};try{return{memory:await i({op:"init",bytes:w,options:{maximumPages:o.maximumPages,root:o.root,backend:o.backend,poolSize:(o.writers??1)*2+(o.readers??1)+6,threadWorkerUrl:o.threadWorkerUrl?String(o.threadWorkerUrl):void 0,ioWorkerUrl:o.ioWorkerUrl?String(o.ioWorkerUrl):void 0}}),call:(r,...l)=>i({op:"call",fn:r,args:l}),write:r=>i({op:"write",bytes:r}),read:(r,l)=>i({op:"read",ptr:r,len:l}),faulted:()=>!!n,async close(){try{n||await i({op:"close"})}finally{t.terminate(),s(new Error("FlatSQL closed"))}}}}catch(e){throw t.terminate(),e}}export{d as createBrowserInstance};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{parentPort as tt,threadId as gn,workerData as hr}from"node:worker_threads";import{writeSync as xn}from"node:fs";import g from"node:fs";import ze from"node:path";import{randomFillSync as Jr}from"node:crypto";import{threadId as jr}from"node:worker_threads";var Cn=Object.freeze({READ:1,WRITE:2,CREATE:4,EXCL:8,TRUNC:16,DELETE_ON_CLOSE:32,PROBE:64,UNLINK:128,CREATE_PARENTS:256,UNLINK_IF_UNUSED:512,OPEN_DEFERRED:1024}),Bn=Object.freeze({OK:0,GENERIC:-1,NOENT:-2,ACCESS:-3,IO:-4,NOSPACE:-5,BADHANDLE:-6,BUSY:-7});var Dn=Object.freeze(["flatsql_io_open","flatsql_io_read","flatsql_io_write","flatsql_io_truncate","flatsql_io_sync","flatsql_io_size","flatsql_io_close"]),Ge=4096;function Ir(e,{during:r}={}){if(!e)return-1;let t=typeof e.code=="string"?e.code:null;if(t)switch(t){case"ENOENT":case"ENOTDIR":return-2;case"EACCES":case"EPERM":case"EROFS":return-3;case"ENOSPC":case"EDQUOT":return-5;case"EBADF":return-4;case"EEXIST":return-1;case"EBUSY":case"ETXTBSY":return-7;case"ENAMETOOLONG":case"EINVAL":return-1;default:return-4}switch(e.name){case"NotFoundError":return-2;case"NoModificationAllowedError":return-7;case"InvalidStateError":return r==="open"?-7:-6;case"QuotaExceededError":return-5;case"TypeMismatchError":case"SecurityError":case"NotAllowedError":return-3;case"InvalidModificationError":return-7;case"TypeError":case"RangeError":return-1;default:return-4}}function le(e,r){return e&&typeof e.status=="number"&&e.status<0?e.status:Ir(e,r)}function rt(e){if(typeof e!="string"||e.length===0||e.includes("\0"))return-1;let r=[];for(let t of e.split("/"))if(!(t===""||t===".")){if(t==="..")return-3;r.push(t)}return r.length===0?-1:r}var Ut=typeof TextDecoder=="function"?new TextDecoder("utf-8",{fatal:!0}):null;function nt(e){if(!Ut||e.length===0||e.length>Ge)return-1;let r=e.buffer instanceof ArrayBuffer?e:new Uint8Array(e);try{return Ut.decode(r)}catch{return-1}}function Mt(e){let r=2166136261;for(let t=0;t<e.length;t+=1)r^=e[t],r=Math.imul(r,16777619);return r>>>0}var yr=64,Mn=yr*4;var Pn=64*1024;var kn=typeof TextEncoder=="function"?new TextEncoder:null;var Or=typeof TextEncoder=="function"?new TextEncoder:null;function wr(e){let r=2166136261;for(let t=0;t<e.length;t+=1)r^=e[t],r=Math.imul(r,16777619);return r|0}var Pt=new WeakMap;function kt(e){let r=Pt.get(e);if(r)return r;let t=new Int32Array(e,0,16);if(t[0]!==1380795475||t[1]!==1)throw new TypeError("Not a SAB I/O mirror buffer.");let s=t[2],l=t[3],A=t[4],m=16*4,E=m+s*32,R=E+s*A;return r={entries:s,entryBytes:l,maxPathBytes:A,i32:new Int32Array(e,m,s*32/4),f64:new Float64Array(e,m,s*32/8),paths:new Uint8Array(e,E,s*A),data:new Uint8Array(e,R,s*l)},Pt.set(e,r),r}function Tr(e){return typeof e=="string"?Or.encode(e):e}function Rr(e,r,t){let s=r*8;if(Atomics.load(e.i32,s+3)!==t.length)return!1;let l=r*e.maxPathBytes;for(let A=0;A<t.length;A+=1)if(e.paths[l+A]!==t[A])return!1;return!0}function Lr(e,r,t){let s=(t>>>0)%e.entries;for(let l=0;l<e.entries;l+=1){let A=s*8,m=Atomics.load(e.i32,A+0);if(m===0)return-1;if((m===2||m===3)&&Atomics.load(e.i32,A+2)===t&&Rr(e,s,r))return s;s=(s+1)%e.entries}return-1}function Qt(e,r){let t=kt(e),s=Tr(r);if(s.length>t.maxPathBytes)return-1;let l=Lr(t,s,wr(s));return l<0?-1:Atomics.load(t.i32,l*(32/4)+0)===2?l:-1}function Ht(e,r,t,s){let l=kt(e),A=r*(32/4),m=r*(32/8)+3,E=r*l.entryBytes;for(let R=0;R<64;R+=1){let O=Atomics.load(l.i32,A+1);if(O&1)continue;if(Atomics.load(l.i32,A+0)!==2)return-1;let w=l.f64[m],x=Atomics.load(l.i32,A+4),S;if(s>=w)S=0;else{let L=Math.min(t.length,w-s);s+L>x?S=-1:(t.set(l.data.subarray(E+s,E+s+L),0),S=L)}if(Atomics.load(l.i32,A+1)===O)return S}return-1}function vt(e=["/h.fsh"]){let r=Array.from(e,String);return t=>{let s=String(t);for(let l of r)if(s.endsWith(l)||s===l.replace(/^\//,""))return!0;return!1}}var ue=Object.freeze({open:1,read:2,write:3,truncate:4,sync:5,size:6,close:7,mirrorRead:8}),Wt=24,Gt=16777215;function ot(){return typeof performance<"u"&&performance.now?performance.now()*1e3:Date.now()*1e3}function Nr(e){if(!e?.buffer)return null;let r=new Int32Array(e.buffer,0,4),t=r[1],s=new Float64Array(e.buffer,16,t),l=new Uint8Array(e.buffer,16+t*8,t);return(A,m)=>{let E=Atomics.add(r,0,1);E<t&&(s[E]=ot()-m,l[E]=A)}}function gr(e,r,t){if(!e||t<=0||t>Ge||r<0)return null;let s=e.buffer??e;return r+t>s.byteLength?null:new Uint8Array(s,r,t).slice()}function st(e={}){let r=e.getMemory;if(typeof r!="function")throw new TypeError("createFlatsqlIoImports requires getMemory().");let t=Array.isArray(e.provider)?e.provider:[e.provider];if(t.length===0||t.some(S=>!S||typeof S.open!="function"))throw new TypeError("createFlatsqlIoImports requires at least one provider.");if(t.length>127)throw new RangeError("At most 127 providers can be routed.");let s=t.length>1,l=Nr(e.trace),A=e.mirror?.buffer??null,m=A?vt(e.mirror.suffixes??["/h.fsh"]):null,E=new Map,R=new TextDecoder;function O(S){if(!s)return{provider:t[0],local:S};let L=S>>>Wt,I=t[L];return I?{provider:I,local:S&Gt}:null}function w(S,L,I){let D=l?ot():0,F;try{F=I()}catch{F=L}return l&&l(S,D),F}return{env:{flatsql_io_open(S,L,I){return w(ue.open,-1,()=>{let D=gr(r(),S,L);if(!D)return-1;let F=s?Mt(D)%t.length:0,q=t[F].open(D,I|0);if(q<0)return q;if(s&&q>Gt)return-4;let H=s?F<<Wt|q:q;if(m){let re=R.decode(D);m(re)&&E.set(H,re)}return H})},flatsql_io_read(S,L,I,D){if(A&&E.has(S)){let F=l?ot():0;try{let q=r(),H=q.buffer??q;if(L>=0&&I>=0&&L+I<=H.byteLength){let re=Qt(A,E.get(S));if(re>=0){let te=Ht(A,re,new Uint8Array(H,L,I),D);if(te>=0)return l&&l(ue.mirrorRead,F),te}}}catch{}}return w(ue.read,-4,()=>{let F=O(S);return F?F.provider.read(F.local,L,I,D):-6})},flatsql_io_write(S,L,I,D){return w(ue.write,-4,()=>{let F=O(S);return F?F.provider.write(F.local,L,I,D):-6})},flatsql_io_truncate(S,L){return w(ue.truncate,-4,()=>{let I=O(S);return I?I.provider.truncate(I.local,L):-6})},flatsql_io_sync(S){return w(ue.sync,-4,()=>{let L=O(S);return L?L.provider.sync(L.local):-6})},flatsql_io_size(S){return w(ue.size,-4,()=>{let L=O(S);return L?L.provider.size(L.local):-6})},flatsql_io_close(S){return w(ue.close,-4,()=>{E.delete(S);let L=O(S);return L?L.provider.close(L.local):-6})}}}}var bo=256*1024;var Uo=263;var Zo=typeof process<"u"&&!!process.release&&process.release.name==="node";var De=3,P=De|4,K=new TextEncoder,ct=new TextDecoder;function Br(e,r){let t=new Uint8Array(e),s=r>>>0||1;for(let l=0;l<e;l+=1)s^=s<<13,s^=s>>>17,s^=s<<5,t[l]=s&255;return t}function Dr(e,r){if(e.length!==r.length)return!1;for(let t=0;t<e.length;t+=1)if(e[t]!==r[t])return!1;return!0}var it=class extends Error{};function se(e,r){if(!e)throw new it(r)}function y(e,r,t){se(e===r,`${t}: expected ${r}, got ${e}`)}function v(e,r){se(Number.isInteger(e)&&e>=0,`${r}: expected a handle, got ${e}`)}var es=Object.freeze([{name:"open without CREATE on a missing file is NOENT",async run(e,r){y(await e.open(`${r}/missing.bin`,De),-2,"open")}},{name:"create, write, size, short read at EOF, read past EOF",async run(e,r){let t=await e.open(`${r}/a.bin`,P);v(t,"open"),y(await e.writeFrom(t,K.encode("hello"),0),5,"write"),y(await e.size(t),5,"size");let s=new Uint8Array(10);y(await e.readInto(t,s,0),5,"short read"),se(ct.decode(s.subarray(0,5))==="hello","short read bytes"),y(await e.readInto(t,new Uint8Array(4),5),0,"read at EOF"),y(await e.readInto(t,new Uint8Array(4),100),0,"read past EOF"),y(await e.close(t),0,"close")}},{name:"a write past EOF extends the file and the gap reads as zeros",async run(e,r){let t=await e.open(`${r}/sparse.bin`,P);v(t,"open"),y(await e.writeFrom(t,K.encode("ab"),0),2,"write head"),y(await e.writeFrom(t,K.encode("z"),100),1,"write past EOF"),y(await e.size(t),101,"size");let s=new Uint8Array(98);s.fill(238),y(await e.readInto(t,s,2),98,"read gap"),se(s.every(l=>l===0),"gap is zeros"),y(await e.close(t),0,"close")}},{name:"truncate shrinks and grows; grown bytes read as zeros",async run(e,r){let t=await e.open(`${r}/t.bin`,P);v(t,"open"),await e.writeFrom(t,K.encode("abcdefgh"),0),y(await e.truncate(t,3),0,"truncate down"),y(await e.size(t),3,"size after shrink"),y(await e.truncate(t,10),0,"truncate up"),y(await e.size(t),10,"size after grow");let s=new Uint8Array(10);y(await e.readInto(t,s,0),10,"read"),se(ct.decode(s.subarray(0,3))==="abc","kept prefix"),se(s.subarray(3).every(l=>l===0),"grown tail is zeros"),y(await e.sync(t),0,"sync"),y(await e.close(t),0,"close")}},{name:"closed and bogus handles are BADHANDLE",async run(e,r){let t=await e.open(`${r}/c.bin`,P);v(t,"open"),y(await e.close(t),0,"close"),y(await e.close(t),-6,"close again"),y(await e.readInto(t,new Uint8Array(1),0),-6,"read"),y(await e.size(8388352),-6,"bogus size")}},{name:"PROBE reports existence without a handle",async run(e,r){let t=await e.open(`${r}/p.bin`,P);v(t,"open"),await e.close(t),y(await e.open(`${r}/p.bin`,64),0,"probe existing"),y(await e.open(`${r}/nope.bin`,64),-2,"probe missing")}},{name:"EXCL on an existing file is GENERIC; TRUNC empties it",async run(e,r){let t=await e.open(`${r}/x.bin`,P);v(t,"open"),await e.writeFrom(t,K.encode("data"),0),await e.close(t),y(await e.open(`${r}/x.bin`,P|8),-1,"EXCL");let s=await e.open(`${r}/x.bin`,De|16);v(s,"TRUNC open"),y(await e.size(s),0,"size after TRUNC"),await e.close(s)}},{name:"CREATE under a missing directory is NOENT; CREATE_PARENTS makes it",async run(e,r){y(await e.open(`${r}/p/00000001/h.fsh`,P),-2,"no parents");let t=await e.open(`${r}/p/00000001/h.fsh`,P|256);v(t,"CREATE_PARENTS"),y(await e.writeFrom(t,K.encode("head"),0),4,"write"),await e.close(t),y(await e.open(`${r}/p/00000001/h.fsh`,64),0,"probe")}},{name:"UNLINK_IF_UNUSED is BUSY while a handle is open; UNLINK removes",async run(e,r){let t=await e.open(`${r}/u.bin`,P);v(t,"open"),y(await e.open(`${r}/u.bin`,512),-7,"unlink while open"),await e.close(t),y(await e.open(`${r}/u.bin`,512),0,"unlink unused"),y(await e.open(`${r}/u.bin`,64),-2,"gone"),y(await e.open(`${r}/u.bin`,128),-2,"unlink missing");let s=await e.open(`${r}/v.bin`,P);await e.close(s),y(await e.open(`${r}/v.bin`,128),0,"plain unlink")}},{name:"DELETE_ON_CLOSE drops the file with its last handle",async run(e,r){let t=await e.open(`${r}/tmp.bin`,P|32);v(t,"open"),await e.writeFrom(t,K.encode("scratch"),0),y(await e.close(t),0,"close"),y(await e.open(`${r}/tmp.bin`,64),-2,"probe")}},{name:"paths are confined below the root",async run(e,r){y(await e.open(`${r}/../../escape.bin`,P),-3,".."),y(await e.open("",P),-1,"empty path")}},{name:"access modes: read-only handles refuse writes, write-only refuse reads",async run(e,r){let t=await e.open(`${r}/m.bin`,P);await e.writeFrom(t,K.encode("mode"),0),await e.close(t);let s=await e.open(`${r}/m.bin`,1);v(s,"read-only open"),y(await e.writeFrom(s,K.encode("x"),0),-4,"write on RO"),y(await e.truncate(s,0),-4,"truncate on RO"),await e.close(s);let l=await e.open(`${r}/m.bin`,2);v(l,"write-only open"),y(await e.readInto(l,new Uint8Array(2),0),-4,"read on WO"),await e.close(l)}},{name:"OPEN_DEFERRED: a failed open surfaces at open or at first use",async run(e,r){let t=await e.open(`${r}/deferred-missing.bin`,De|1024);t<0?y(t,-2,"sync host"):(y(await e.readInto(t,new Uint8Array(1),0),-2,"first use"),y(await e.close(t),0,"close failed deferred"));let s=await e.open(`${r}/deferred.bin`,P|1024);v(s,"deferred create"),y(await e.writeFrom(s,K.encode("later"),0),5,"write after deferred"),y(await e.size(s),5,"size"),await e.close(s)}},{name:"two handles on one path see each other's writes",async run(e,r){let t=await e.open(`${r}/shared.bin`,P),s=await e.open(`${r}/shared.bin`,De);v(t,"a"),v(s,"b"),await e.writeFrom(t,K.encode("from-a"),0);let l=new Uint8Array(6);y(await e.readInto(s,l,0),6,"read via b"),se(ct.decode(l)==="from-a","b sees a"),await e.writeFrom(s,K.encode("B"),0);let A=new Uint8Array(1);await e.readInto(t,A,0),se(A[0]===66,"a sees b"),await e.close(t),await e.close(s)}},{name:"1 MiB round trip across chunk boundaries at an unaligned offset",async run(e,r){let t=await e.open(`${r}/big.bin`,P);v(t,"open");let s=Br(1024*1024+17,2654435769);y(await e.writeFrom(t,s,4093),s.length,"write"),y(await e.size(t),4093+s.length,"size");let l=new Uint8Array(s.length);y(await e.readInto(t,l,4093),s.length,"read"),se(Dr(l,s),"bytes round trip"),await e.close(t)}}]);import B from"node:fs";import X from"node:path";var br=1179534419,Ur=1,Vt=16,ut=8,ae=0,be=1,qe=2,lt=3,Mr=4,Ye=0,$t=1,pe=2,Pr=3;var kr=1,Qr=-1;function Hr(e){let r=new Int32Array(e,0,Vt);if(r[0]!==br||r[1]!==Ur)throw new TypeError("Not a Node sync-fs flatsql_io handle table.");let t=r[2],s=r[3],l=r[4],A=Vt*4,m=new Int32Array(e,A,l*2);A+=l*8;let E=new Int32Array(e,A,t*ut);A+=t*ut*4;let R=new Uint8Array(e,A,t*s);return{header:r,maxHandles:t,maxPathBytes:s,maxInstances:l,instances:m,slots:E,paths:R}}function ft(e){let r=-1;try{r=B.openSync(e,"r"),B.fsyncSync(r)}catch(t){if(!["EINVAL","ENOTSUP","EISDIR","EBADF","EPERM","EACCES"].includes(t?.code))throw t}finally{r>=0&&B.closeSync(r)}}function qt(e={}){if(typeof e.root!="string"||e.root.length===0)throw new TypeError("createNodeSyncFsIo requires a root directory.");let r=Hr(e.table),t=X.resolve(e.root),s=t;try{s=B.realpathSync(t)}catch{}let l=Number.isInteger(e.instanceId)?e.instanceId:Qr,A=typeof e.getMemory=="function"?e.getMemory:()=>null,m=typeof e.interpose=="function"?e.interpose:(n,o,c)=>o(...c),E=new Map,R=new TextEncoder,O=(n,o,...c)=>m(n,o,c);function w(n,o){return n===o||n.startsWith(o+X.sep)}function x(n){let o=X.join(t,n);if(!w(o,t))return-3;let c=X.dirname(o);for(;;)try{let d=B.realpathSync(c);if(!w(d,s)&&!w(d,t))return-3;break}catch{let d=X.dirname(c);if(d===c)break;c=d}return o}function S(){return l<0?!0:(Atomics.add(r.instances,l*2+1,1),Atomics.load(r.instances,l*2)===kr?(L(),!1):!0)}function L(){l<0||(Atomics.sub(r.instances,l*2+1,1),Atomics.notify(r.instances,l*2+1))}function I(n){return n*ut}function D(n){let o=Atomics.load(r.slots,I(n)+lt),c=n*r.maxPathBytes;return new TextDecoder().decode(r.paths.slice(c,c+o))}function F(n,o){if(Atomics.load(r.slots,I(n)+lt)!==o.length)return!1;let c=n*r.maxPathBytes;for(let d=0;d<o.length;d+=1)if(r.paths[c+d]!==o[d])return!1;return!0}function q(n){for(let o=0;o<r.maxHandles;o+=1){let c=Atomics.load(r.slots,I(o)+ae);if((c===pe||c===$t)&&F(o,n))return!0}return!1}function H(n,o){let c=(Atomics.add(r.header,5,1)>>>0)%r.maxHandles;for(let d=0;d<r.maxHandles;d+=1){let p=(c+d)%r.maxHandles,T=I(p);if(Atomics.compareExchange(r.slots,T+ae,Ye,$t)===Ye){let h=Atomics.load(r.slots,T+be)+1&255;return r.paths.set(n,p*r.maxPathBytes),Atomics.store(r.slots,T+lt,n.length),Atomics.store(r.slots,T+qe,o),Atomics.store(r.slots,T+Mr,l),Atomics.store(r.slots,T+be,h),{slot:p,gen:h}}}return null}function re(){for(let[n,o]of E){let c=I(n);if(Atomics.load(r.slots,c+ae)!==pe||Atomics.load(r.slots,c+be)!==o.gen){try{B.closeSync(o.fd)}catch{}E.delete(n)}}}function te(n,o){let c=B.constants,d=c.O_RDONLY;return n&2&&(d=n&1?c.O_RDWR:c.O_WRONLY),o||(n&4&&(d|=c.O_CREAT),n&8&&(d|=c.O_EXCL),n&16&&(d|=c.O_TRUNC)),d}function ie(n){if(!Number.isInteger(n)||n<0)return-6;let o=n>>>8,c=n&255;if(o>=r.maxHandles)return-6;let d=I(o),p=E.get(o);if(Atomics.load(r.slots,d+ae)!==pe||Atomics.load(r.slots,d+be)!==c){if(p&&p.gen===c){try{B.closeSync(p.fd)}catch{}E.delete(o)}return-6}if(p&&p.gen===c)return p.fd;if(p){try{B.closeSync(p.fd)}catch{}E.delete(o)}let T=X.join(t,D(o)),h=Atomics.load(r.slots,d+qe);try{let N=O("open",B.openSync,T,te(h,!0),384);return E.set(o,{gen:c,fd:N}),N}catch(N){return le(N)}}function ve(n){return Atomics.load(r.slots,I(n>>>8)+qe)}function C(n){let o=X.dirname(n),c=[],d=o;for(;!B.existsSync(d);){c.unshift(d);let p=X.dirname(d);if(p===d)break;d=p}for(let p of c){if(!w(p,t))throw Object.assign(new Error("escape"),{code:"EACCES"});try{O("mkdir",B.mkdirSync,p,448)}catch(T){if(T?.code!=="EEXIST")throw T}O("syncdir",ft,X.dirname(p))}}function bt(n,o){let c=nt(n);if(typeof c!="string")return c;let d=rt(c);if(!Array.isArray(d))return d;let p=d.join("/"),T=R.encode(p);if(T.length>r.maxPathBytes)return-1;let h=x(p);if(typeof h!="string")return h;if(o&64)try{return O("stat",B.statSync,h),0}catch{return-2}if(o&640){if(o&512&&q(T))return-7;try{return O("unlink",B.unlinkSync,h),O("syncdir",ft,X.dirname(h)),0}catch(k){return le(k)}}re();let N=!1;try{o&4&&o&256&&C(h),o&4&&o&256&&(N=!B.existsSync(h))}catch(k){return le(k)}let b=H(T,o);if(!b)return-1;let Y;try{Y=O("open",B.openSync,h,te(o,!1),384),N&&O("syncdir",ft,X.dirname(h))}catch(k){return Y!==void 0&&B.closeSync(Y),Atomics.store(r.slots,I(b.slot)+ae,Ye),le(k)}return E.set(b.slot,{gen:b.gen,fd:Y}),Atomics.store(r.slots,I(b.slot)+ae,pe),b.slot<<8|b.gen}function a(n){if(!S())return-3;try{return n()}catch(o){return le(o)}finally{L()}}function i(n,o){let c=A(),d=c?.buffer??c;return!d||n<0||o<0||n+o>d.byteLength?null:new Uint8Array(d,n,o)}function f(n,o,c){let d=ie(n);if(d<0)return d;let p=0;for(;p<o.length;){let T=O("read",B.readSync,d,o,p,o.length-p,c+p);if(T===0)break;p+=T}return p}function _(n,o,c){let d=ie(n);if(d<0)return d;if(!(ve(n)&2))return-4;let p=0;for(;p<o.length;)p+=O("write",B.writeSync,d,o,p,o.length-p,c+p);return p}return{kind:"node-sync-fs",instanceId:l,root:t,open(n,o){let c=typeof n=="string"?R.encode(n):n;return a(()=>bt(c,o|0))},read(n,o,c,d){return a(()=>{if(c===0)return 0;let p=i(o,c);return p?f(n,p,d):-1})},write(n,o,c,d){return a(()=>{if(c===0)return 0;let p=i(o,c);return p?_(n,p,d):-1})},readInto(n,o,c){return a(()=>f(n,o,c))},writeFrom(n,o,c){return a(()=>_(n,o,c))},truncate(n,o){return a(()=>{let c=ie(n);return c<0?c:ve(n)&2?(O("truncate",B.ftruncateSync,c,o),0):-4})},sync(n){return a(()=>{let o=ie(n);return o<0?o:(O("sync",B.fdatasyncSync,o),0)})},size(n){return a(()=>{let o=ie(n);return o<0?o:O("size",B.fstatSync,o).size})},close(n){try{if(!Number.isInteger(n)||n<0)return-6;let o=n>>>8,c=n&255;if(o>=r.maxHandles)return-6;let d=I(o);if(Atomics.load(r.slots,d+be)!==c)return-6;if(Atomics.compareExchange(r.slots,d+ae,pe,Pr)!==pe)return-6;let p=Atomics.load(r.slots,d+qe),T=D(o),h=E.get(o);if(h){E.delete(o);try{O("close",B.closeSync,h.fd)}catch{}}if(Atomics.store(r.slots,d+ae,Ye),p&32)try{O("unlink",B.unlinkSync,X.join(t,T))}catch{}return 0}catch(o){return le(o)}},closeLocalFds(){for(let n of E.values())try{B.closeSync(n.fd)}catch{}E.clear()},liveHandles(){let n=0;for(let o=0;o<r.maxHandles;o+=1)Atomics.load(r.slots,I(o)+ae)===pe&&(n+=1);return n},localFdCount(){return E.size}}}import Ue from"node:fs";import Yt from"node:path";var j=4096,vr=1179864148,Wr=0,Gr=1,Jt=2,Vr=3,$r=4,qr=5,Yr=6,zr=7,zt=16,U=8,Se=0,jt=1,ce=2,ge=3,St=4,dt=0,_t=1,er=2,Me=1,At=2,xe=1024,Ee=4,Kr=e=>{let r=2166136261;for(let t=0;t<e.length;t+=1)r^=e.charCodeAt(t),r=Math.imul(r,16777619)>>>0;return r};function Xr(e){let r=new Int32Array(e,0,zt);if(r[Wr]!==vr)throw new TypeError("not a fault overlay");let t=r[Vr],s=r[$r],l=zt*4,A=new Int32Array(e,l,t*U);l+=t*U*4;let m=new Float64Array(e,l,t);l+=t*8;let E=new Uint8Array(e,l,t*xe);l+=t*xe;let R=new Int32Array(e,l,s*Ee);l+=s*Ee*4;let O=new Uint8Array(e,l,s*j);return{h:r,maxFiles:t,maxPages:s,files:A,syncedSize:m,paths:E,pages:R,images:O}}function Le(e,r){let t=r*U+jt;for(;Atomics.compareExchange(e.files,t,0,1)!==0;)Atomics.wait(e.files,t,1,1)}function Ne(e,r){let t=r*U+jt;Atomics.store(e.files,t,0),Atomics.notify(e.files,t,1)}function tr(e,r){let t=e.files[r*U+St];return Buffer.from(e.paths.slice(r*xe,r*xe+t)).toString("utf8")}function Kt(e,r,t){let s=Buffer.from(r);if(s.length>xe)return-1;let l=Kr(r)%e.maxFiles;for(let A=0;A<e.maxFiles;A+=1,l=(l+1)%e.maxFiles){let m=l*U,E=Atomics.load(e.files,m+Se);if(E===dt){if(!t)return-1;if(Atomics.compareExchange(e.files,m+Se,dt,_t)===dt)return e.paths.set(s,l*xe),e.files[m+St]=s.length,e.files[m+ce]=0,e.files[m+ge]=-1,Atomics.store(e.files,m+Se,er),Atomics.notify(e.files,m+Se),l;E=Atomics.load(e.files,m+Se)}for(;E===_t;)Atomics.wait(e.files,m+Se,_t,1),E=Atomics.load(e.files,m+Se);if(e.files[m+St]===s.length&&tr(e,l)===r)return l}return Atomics.store(e.h,Jt,1),-1}function rr(e){return Ue.fstatSync(e).size}function Xt(e,r,t){let s=r*U+ce;e.files[s]&Me||(e.syncedSize[r]=rr(t),e.files[s]|=Me)}function Zt(e,r,t,s){if(s*j>=e.syncedSize[r])return!0;for(let R=e.files[r*U+ge];R>=0;R=e.pages[R*Ee+3])if(e.pages[R*Ee+1]===s)return!0;let l=Atomics.add(e.h,qr,1);if(l>=e.maxPages)return Atomics.store(e.h,Jt,1),!1;let A=e.images.subarray(l*j,(l+1)*j),m=Buffer.alloc(j),E=Ue.readSync(t,m,0,j,s*j);return A.set(m),e.pages[l*Ee]=r,e.pages[l*Ee+1]=s,e.pages[l*Ee+2]=E,e.pages[l*Ee+3]=e.files[r*U+ge],e.files[r*U+ge]=l,!0}function Zr(){return Object.assign(new Error("fault overlay frozen"),{code:"EIO"})}function nr(e,r){let t=Xr(e),s=new Map,l=new Set(["write","truncate","mkdir","unlink"]);return(A,m,E)=>{if(Atomics.load(t.h,Gr)&&(l.has(A)||A==="sync"||A==="syncdir"||A==="open"&&E[1]&Ue.constants.O_CREAT))throw Zr();if(A==="open"){let R=E[0],O=(E[1]&Ue.constants.O_CREAT)!==0,w=O?Ue.existsSync(R):!0,x=m(...E),S=Kt(t,R,!0);return S>=0&&(s.set(x,S),O&&!w&&(Le(t,S),t.files[S*U+ce]=(t.files[S*U+ce]|At)&~Me,t.syncedSize[S]=0,t.files[S*U+ce]|=Me,Ne(t,S))),x}if(A==="close")return s.delete(E[0]),m(...E);if(A==="write"){let[R,O,w,x,S]=E,L=s.get(R);if(L===void 0)return m(...E);Le(t,L);try{Xt(t,L,R);let I=Math.floor(S/j),D=Math.floor((S+x-1)/j);for(let F=I;F<=D;F+=1)Zt(t,L,R,F);return Atomics.add(t.h,Yr,1),m(R,O,w,x,S)}finally{Ne(t,L)}}if(A==="truncate"){let[R,O]=E,w=s.get(R);if(w===void 0)return m(...E);Le(t,w);try{Xt(t,w,R);let x=rr(R);for(let S=Math.floor(O/j);S*j<x;S+=1)Zt(t,w,R,S);return m(...E)}finally{Ne(t,w)}}if(A==="sync"){let[R]=E,O=s.get(R),w=m(...E);return O!==void 0&&(Le(t,O),t.files[O*U+ge]=-1,t.files[O*U+ce]&=~Me,Ne(t,O),Atomics.add(t.h,zr,1)),w}if(A==="syncdir"){let R=m(...E),O=Yt.resolve(E[0]);for(let w=0;w<t.maxFiles;w+=1)Atomics.load(t.files,w*U+Se)===er&&t.files[w*U+ce]&At&&Yt.dirname(tr(t,w))===O&&(Le(t,w),t.files[w*U+ce]&=~At,Ne(t,w));return R}if(A==="unlink"){let R=E[0],O=m(...E),w=Kt(t,R,!1);return w>=0&&(Le(t,w),t.files[w*U+ce]=0,t.files[w*U+ge]=-1,Ne(t,w)),O}return m(...E)}}var u=Object.freeze({SUCCESS:0,TOOBIG:1,ACCES:2,AGAIN:6,BADF:8,EXIST:20,INVAL:28,IO:29,ISDIR:31,LOOP:32,MFILE:33,NAMETOOLONG:37,NOENT:44,NOSPC:51,NOSYS:52,NOTDIR:54,NOTEMPTY:55,NOTSUP:58,PERM:63,SPIPE:70,XDEV:75,NOTCAPABLE:76}),en={ENOENT:u.NOENT,EEXIST:u.EXIST,ENOTDIR:u.NOTDIR,EISDIR:u.ISDIR,ENOTEMPTY:u.NOTEMPTY,EACCES:u.ACCES,EPERM:u.PERM,EBADF:u.BADF,EINVAL:u.INVAL,ENOSPC:u.NOSPC,EMFILE:u.MFILE,ELOOP:u.LOOP,ENAMETOOLONG:u.NAMETOOLONG,EXDEV:u.XDEV,EIO:u.IO,EAGAIN:u.AGAIN,ENOTSUP:u.NOTSUP,E2BIG:u.TOOBIG},tn=e=>en[e?.code]??u.IO,$=Object.freeze({UNKNOWN:0,CHAR:2,DIR:3,FILE:4,SYMLINK:7}),Et=1,rn=2,or=4,sr=8,pt=1,nn=1n<<1n,on=1n<<6n,ar=(1n<<30n)-1n,sn=1,an=0,cn=1,ln=2,cr=0,fn=1,un=2,dn=3,Ze=8,Pe=0,ir=1,lr=2,mt=3,Ke=4,ht=0,fr=1,Xe=2,me=1,ee=2,It=3,Fe=4,he=1024;function _n(e){let r=new Int32Array(e,0,4)[0],t=16,s=new Int32Array(e,t,r*Ze);t+=r*Ze*4;let l=new Float64Array(e,t,r);t+=r*8;let A=new Uint8Array(e,t,r*he);return{maxFds:r,words:s,positions:l,paths:A}}function yt(){return process.hrtime.bigint()}function ur(){return BigInt(Math.round((performance.timeOrigin+performance.now())*1e6))}var ke=0,je=1,Ot=2,An=3,dr=4,Sn=5,En=6,Ar=7,pn=16,mn=65536;function wt(e){let r=new Int32Array(e),t=Atomics.add(r,An,1)+1;for(;;){let l=Atomics.load(r,dr);if(t<=l||Atomics.compareExchange(r,dr,l,t)===l)break}Atomics.add(r,Sn,1);let s=Atomics.add(r,En,1);return s<mn&&Atomics.store(r,pn+s,jr),r}var Ce=class extends Error{constructor(r){super(`WASI exit with code ${r}`),this.name="WasiExitError",this.code=r}};function hn(e,r){let t=_n(e.fdTable),s=new Int32Array(e.control),l=new TextEncoder,A=(e.args??[]).map(a=>l.encode(a)),m=Object.entries(e.env??{}).map(([a,i])=>l.encode(`${a}=${i}`)),E=Number.isInteger(e.stdoutFd)?e.stdoutFd:1,R=Number.isInteger(e.stderrFd)?e.stderrFd:2,O=new Int32Array(new SharedArrayBuffer(4)),w=null;e.deterministic?.randomSeed!==void 0&&(w=new BigUint64Array(e.deterministic.randomState));let x=()=>new Uint8Array(r().buffer),S=()=>new DataView(r().buffer),L=(a,i)=>Buffer.from(x().slice(a,a+i)).toString("utf8");function I(a){if(!Number.isInteger(a)||a<0||a>=t.maxFds)return null;let i=a*Ze;return Atomics.load(t.words,i+Pe)!==Xe?null:{fd:a,base:i,kind:t.words[i+ir],osFd:t.words[i+lr]}}function D(a){let i=t.words[a.base+mt],f=t.paths.slice(a.fd*he,a.fd*he+i);if(a.kind===Fe){let _=f.indexOf(0);return Buffer.from(f.subarray(_+1)).toString("utf8")}return Buffer.from(f).toString("utf8")}function F(a){let i=t.words[a.base+mt],f=t.paths.subarray(a.fd*he,a.fd*he+i);return Buffer.from(f.slice(0,f.indexOf(0)))}function q(a,i,f,_){let n=Buffer.from(f);if(n.length>he)return-u.NAMETOOLONG;let o=3+new Int32Array(e.fdTable,0,4)[1];for(let c=o;c<t.maxFds;c+=1){let d=c*Ze;if(Atomics.compareExchange(t.words,d+Pe,ht,fr)===ht)return t.paths.set(n,c*he),t.words[d+mt]=n.length,t.words[d+ir]=a,t.words[d+lr]=i,t.words[d+Ke]=_?1:0,t.positions[c]=0,Atomics.store(t.words,d+Pe,Xe),c}return-u.MFILE}function H(a,i,f){let _=I(a);if(!_)return{errno:u.BADF};if(_.kind!==It&&_.kind!==Fe)return{errno:u.NOTDIR};let n=L(i,f);if(n.includes("\0"))return{errno:u.INVAL};let o=D(_),c=ze.resolve(o,n),d=re(o);return d!=="/"&&c!==d&&!c.startsWith(d+ze.sep)?{errno:u.NOTCAPABLE}:{full:c}}function re(a){let i=null,f=new Int32Array(e.fdTable,0,4)[1];for(let _=0;_<f;_+=1){let n=D(I(3+_));(n==="/"||a===n||a.startsWith(n+ze.sep))&&(!i||n.length>i.length)&&(i=n)}return i??"/"}function te(a,i){let f=S(),_=[];for(let n=0;n<i;n+=1)_.push([f.getUint32(a+n*8,!0),f.getUint32(a+n*8+4,!0)]);return _}function ie(a,i){let f=S(),_=i.isDirectory()?$.DIR:i.isFile()?$.FILE:i.isSymbolicLink()?$.SYMLINK:i.isCharacterDevice()?$.CHAR:$.UNKNOWN;f.setBigUint64(a,BigInt(i.dev),!0),f.setBigUint64(a+8,BigInt(i.ino),!0),f.setUint8(a+16,_),f.setBigUint64(a+24,BigInt(i.nlink),!0),f.setBigUint64(a+32,BigInt(i.size),!0),f.setBigUint64(a+40,i.atimeNs??BigInt(Math.round(i.atimeMs*1e6)),!0),f.setBigUint64(a+48,i.mtimeNs??BigInt(Math.round(i.mtimeMs*1e6)),!0),f.setBigUint64(a+56,i.ctimeNs??BigInt(Math.round(i.ctimeMs*1e6)),!0)}function ve(a){return a.kind===me?a.fd===1?E:a.fd===2?R:-1:a.osFd}let C=a=>(...i)=>{try{return a(...i)}catch(f){if(f instanceof Ce)throw f;return tn(f)}};return{args_sizes_get(a,i){let f=S();return f.setUint32(a,A.length,!0),f.setUint32(i,A.reduce((_,n)=>_+n.length+1,0),!0),u.SUCCESS},args_get(a,i){let f=S(),_=x(),n=i;return A.forEach((o,c)=>{f.setUint32(a+c*4,n,!0),_.set(o,n),_[n+o.length]=0,n+=o.length+1}),u.SUCCESS},environ_sizes_get(a,i){let f=S();return f.setUint32(a,m.length,!0),f.setUint32(i,m.reduce((_,n)=>_+n.length+1,0),!0),u.SUCCESS},environ_get(a,i){let f=S(),_=x(),n=i;return m.forEach((o,c)=>{f.setUint32(a+c*4,n,!0),_.set(o,n),_[n+o.length]=0,n+=o.length+1}),u.SUCCESS},clock_res_get(a,i){return S().setBigUint64(i,1000n,!0),u.SUCCESS},clock_time_get(a,i,f){let _;if(a===cr)_=ur();else if(a===fn||a===un||a===dn)_=yt();else return u.INVAL;return S().setBigUint64(f,_,!0),u.SUCCESS},fd_advise:()=>u.SUCCESS,fd_allocate:C((a,i,f)=>{let _=I(a);if(!_||_.kind!==ee)return u.BADF;let n=Number(i+f);return g.fstatSync(_.osFd).size<n&&g.ftruncateSync(_.osFd,n),u.SUCCESS}),fd_close:C(a=>{let i=I(a);if(!i)return u.BADF;if(i.kind===me||i.kind===Fe)return u.SUCCESS;if(Atomics.compareExchange(t.words,i.base+Pe,Xe,fr)!==Xe)return u.BADF;try{i.osFd>=0&&g.closeSync(i.osFd)}finally{Atomics.store(t.words,i.base+Pe,ht)}return u.SUCCESS}),fd_datasync:C(a=>{let i=I(a);return i?(i.osFd>=0&&i.kind===ee&&g.fdatasyncSync(i.osFd),u.SUCCESS):u.BADF}),fd_sync:C(a=>{let i=I(a);return i?(i.osFd>=0&&i.kind===ee&&g.fsyncSync(i.osFd),u.SUCCESS):u.BADF}),fd_fdstat_get:C((a,i)=>{let f=I(a);if(!f)return u.BADF;let _=S(),n=f.kind===me?$.CHAR:f.kind===ee?$.FILE:$.DIR;return _.setUint8(i,n),_.setUint16(i+2,t.words[f.base+Ke]?pt:0,!0),_.setBigUint64(i+8,ar,!0),_.setBigUint64(i+16,ar,!0),u.SUCCESS}),fd_fdstat_set_flags:C((a,i)=>{let f=I(a);return f?(t.words[f.base+Ke]=i&pt?1:0,u.SUCCESS):u.BADF}),fd_filestat_get:C((a,i)=>{let f=I(a);if(!f)return u.BADF;if(f.kind===me)return S().setUint8(i+16,$.CHAR),u.SUCCESS;let _=f.osFd>=0?g.fstatSync(f.osFd,{bigint:!0}):g.statSync(D(f),{bigint:!0});return ie(i,_),u.SUCCESS}),fd_filestat_set_size:C((a,i)=>{let f=I(a);return!f||f.kind!==ee?u.BADF:(g.ftruncateSync(f.osFd,Number(i)),u.SUCCESS)}),fd_filestat_set_times:()=>u.SUCCESS,fd_pread:C((a,i,f,_,n)=>{let o=I(a);if(!o||o.kind!==ee)return u.BADF;let c=Number(_),d=0;for(let[p,T]of te(i,f)){let h=Buffer.alloc(T),N=g.readSync(o.osFd,h,0,T,c);if(x().set(h.subarray(0,N),p),d+=N,c+=N,N<T)break}return S().setUint32(n,d,!0),u.SUCCESS}),fd_pwrite:C((a,i,f,_,n)=>{let o=I(a);if(!o||o.kind!==ee)return u.BADF;let c=Number(_),d=0;for(let[p,T]of te(i,f)){let h=g.writeSync(o.osFd,Buffer.from(x().slice(p,p+T)),0,T,c);d+=h,c+=h}return S().setUint32(n,d,!0),u.SUCCESS}),fd_read:C((a,i,f,_)=>{let n=I(a);if(!n)return u.BADF;if(n.kind===me)return S().setUint32(_,0,!0),a===0?u.SUCCESS:u.BADF;if(n.kind!==ee)return u.ISDIR;let o=0;for(let[c,d]of te(i,f)){let p=Buffer.alloc(d),T=t.positions[a],h=g.readSync(n.osFd,p,0,d,T);if(t.positions[a]=T+h,x().set(p.subarray(0,h),c),o+=h,h<d)break}return S().setUint32(_,o,!0),u.SUCCESS}),fd_write:C((a,i,f,_)=>{let n=I(a);if(!n)return u.BADF;let o=ve(n);if(o<0)return u.BADF;let c=0;for(let[d,p]of te(i,f)){if(p===0)continue;let T=Buffer.from(x().slice(d,d+p));if(n.kind===me){let b=0;for(;b<p;)b+=g.writeSync(o,T,b,p-b);c+=p;continue}let h=t.words[n.base+Ke]?g.fstatSync(o).size:t.positions[a],N=g.writeSync(o,T,0,p,h);t.positions[a]=h+N,c+=N}return S().setUint32(_,c,!0),u.SUCCESS}),fd_prestat_get(a,i){let f=I(a);if(!f||f.kind!==Fe)return u.BADF;let _=S();return _.setUint8(i,0),_.setUint32(i+4,F(f).length,!0),u.SUCCESS},fd_prestat_dir_name(a,i,f){let _=I(a);if(!_||_.kind!==Fe)return u.BADF;let n=F(_);return x().set(n.subarray(0,f),i),u.SUCCESS},fd_readdir:C((a,i,f,_,n)=>{let o=I(a);if(!o||o.kind!==It&&o.kind!==Fe)return u.BADF;let c=D(o),d=[".","..",...g.readdirSync(c)],p=S(),T=x(),h=0;for(let N=Number(_);N<d.length;N+=1){let b=Buffer.from(d[N]),Y=$.UNKNOWN,k=0n;try{let We=g.lstatSync(ze.join(c,d[N]),{bigint:!0});Y=We.isDirectory()?$.DIR:We.isFile()?$.FILE:We.isSymbolicLink()?$.SYMLINK:$.UNKNOWN,k=We.ino}catch{}let Z=new Uint8Array(24),ne=new DataView(Z.buffer);ne.setBigUint64(0,BigInt(N+1),!0),ne.setBigUint64(8,k,!0),ne.setUint32(16,b.length,!0),ne.setUint8(20,Y);let G=Buffer.concat([Buffer.from(Z),b]),J=f-h;if(J<=0||(T.set(G.subarray(0,Math.min(J,G.length)),i+h),h+=Math.min(J,G.length),G.length>J))break}return p.setUint32(n,h,!0),u.SUCCESS}),fd_renumber:()=>u.NOTSUP,fd_seek:C((a,i,f,_)=>{let n=I(a);if(!n)return u.BADF;if(n.kind===me)return u.SPIPE;if(n.kind!==ee)return u.ISDIR;let o=Number(i),c;if(f===an)c=o;else if(f===cn)c=t.positions[a]+o;else if(f===ln)c=g.fstatSync(n.osFd).size+o;else return u.INVAL;return c<0?u.INVAL:(t.positions[a]=c,S().setBigUint64(_,BigInt(c),!0),u.SUCCESS)}),fd_tell:C((a,i)=>{let f=I(a);return!f||f.kind!==ee?u.BADF:(S().setBigUint64(i,BigInt(t.positions[a]),!0),u.SUCCESS)}),path_create_directory:C((a,i,f)=>{let _=H(a,i,f);return _.errno?_.errno:(g.mkdirSync(_.full),u.SUCCESS)}),path_filestat_get:C((a,i,f,_,n)=>{let o=H(a,f,_);if(o.errno)return o.errno;let c=i&sn?g.statSync(o.full,{bigint:!0}):g.lstatSync(o.full,{bigint:!0});return ie(n,c),u.SUCCESS}),path_filestat_set_times:()=>u.SUCCESS,path_link:()=>u.NOTSUP,path_open:C((a,i,f,_,n,o,c,d,p)=>{let T=H(a,f,_);if(T.errno)return T.errno;let h=null;try{h=g.statSync(T.full)}catch(J){if(J?.code!=="ENOENT"||!(n&Et))throw J}if(h&&n&Et&&n&or)return u.EXIST;if(n&rn||h&&h.isDirectory()){if(h&&!h.isDirectory())return u.NOTDIR;if(!h)return u.NOENT;let J=q(It,-1,T.full,!1);return J<0?-J:(S().setUint32(p,J,!0),u.SUCCESS)}let N=BigInt.asUintN(64,BigInt(o)),b=(N&nn)!==0n,Y=(N&on)!==0n||(n&sr)!==0,k=g.constants,Z=Y?b?k.O_RDWR:k.O_WRONLY:k.O_RDONLY;n&Et&&(Z|=k.O_CREAT),n&or&&(Z|=k.O_EXCL),n&sr&&(Z|=k.O_TRUNC);let ne=g.openSync(T.full,Z,420),G=q(ee,ne,T.full,(d&pt)!==0);return G<0?(g.closeSync(ne),-G):(S().setUint32(p,G,!0),u.SUCCESS)}),path_readlink:C((a,i,f,_,n,o)=>{let c=H(a,i,f);if(c.errno)return c.errno;let d=Buffer.from(g.readlinkSync(c.full)),p=Math.min(n,d.length);return x().set(d.subarray(0,p),_),S().setUint32(o,p,!0),u.SUCCESS}),path_remove_directory:C((a,i,f)=>{let _=H(a,i,f);return _.errno?_.errno:(g.rmdirSync(_.full),u.SUCCESS)}),path_rename:C((a,i,f,_,n,o)=>{let c=H(a,i,f);if(c.errno)return c.errno;let d=H(_,n,o);return d.errno?d.errno:(g.renameSync(c.full,d.full),u.SUCCESS)}),path_symlink:()=>u.NOTSUP,path_unlink_file:C((a,i,f)=>{let _=H(a,i,f);return _.errno?_.errno:g.lstatSync(_.full).isDirectory()?u.ISDIR:(g.unlinkSync(_.full),u.SUCCESS)}),poll_oneoff:C((a,i,f,_)=>{let n=S(),o=yt(),c=null,d=[];for(let h=0;h<f;h+=1){let N=a+h*48,b=n.getBigUint64(N,!0),Y=n.getUint8(N+8);if(Y===0){let k=n.getUint32(N+16,!0),Z=n.getBigUint64(N+24,!0),ne=n.getUint16(N+40,!0)&1,G;ne?G=k===cr?o+(Z-ur()):Z:G=o+Z,d.push({userdata:b,tag:Y,deadline:G}),(c===null||G<c)&&(c=G)}else d.push({userdata:b,tag:Y,deadline:o}),c=o}if(c!==null&&c>o){let h=Number(c-o)/1e6;Atomics.wait(O,0,0,h)}let p=yt(),T=0;for(let h of d){if(h.deadline>p)continue;let N=i+T*32;n.setBigUint64(N,h.userdata,!0),n.setUint16(N+8,0,!0),n.setUint8(N+10,h.tag),n.setBigUint64(N+16,0n,!0),n.setUint16(N+24,0,!0),T+=1}return n.setUint32(_,T,!0),u.SUCCESS}),proc_exit(a){throw Atomics.compareExchange(s,ke,0,1)===0&&Atomics.store(s,je,a),Atomics.notify(s,ke),new Ce(a)},proc_raise:()=>u.NOSYS,random_get(a,i){let f=new Uint8Array(i);if(w)for(let _=0;_<i;_+=8){let n;for(;;){let c=Atomics.load(w,0);if(n=c,n^=n>>12n,n^=n<<25n&0xffffffffffffffffn,n^=n>>27n,Atomics.compareExchange(w,0,c,n)===c)break}let o=n*0x2545f4914f6cdd1dn&0xffffffffffffffffn;for(let c=0;c<8&&_+c<i;c+=1)f[_+c]=Number(o&0xffn),o>>=8n}else Jr(f);return x().set(f,a),u.SUCCESS},sched_yield:()=>u.SUCCESS,sock_accept:()=>u.NOSYS,sock_recv:()=>u.NOSYS,sock_send:()=>u.NOSYS,sock_shutdown:()=>u.NOSYS}}function In(e,r){let t=e.fault?nr(e.fault,e.ioRoot):void 0,s=qt({root:e.ioRoot,table:e.ioTable,instanceId:e.instanceId,getMemory:r,interpose:t});return{imports:st({getMemory:r,provider:s}),close:()=>s.closeLocalFds()}}function Sr(e,r){let t=hn(e,r),s=In(e,r);return{imports:{wasi_snapshot_preview1:t,env:{...s.imports.env}},close:s.close}}var yn=0,On=1,_r=2,wn=3,et=4,Tt=5,Tn=6,Rn=7,Qe=8,Rt=16,Lt=4;var Je=2,Ln=3,Nt=4,Er=5,pr=6,Nn=(1<<29)-1;function mr(e,r=6e4){let t=new Int32Array(e),s=t[yn];return l=>{let A=Atomics.add(t,wn,1);if(A>Nn)return-6;let m=performance.now()+r,E=-1/0;for(;;){let R=Math.min(Atomics.load(t,On),s);for(let x=0;x<R;x+=1){let S=Rt+x*Lt;if(Atomics.compareExchange(t,S,Je,Ln)===Je)return Atomics.store(t,S+1,A),Atomics.store(t,S+2,l),Atomics.store(t,S,Nt),Atomics.notify(t,S),Atomics.add(t,Tn,1),A}let O=performance.now();if(R<s&&O-E>50&&(Atomics.add(t,_r,1),Atomics.notify(t,_r),E=O),O>m)return Atomics.add(t,Rn,1),-6;let w=Atomics.load(t,Qe);Atomics.wait(t,Qe,w,5)}}}var{mode:Bt,wasmModule:gt,memory:He,cfg:ye}=hr,Ie=Bt==="pool"?new Int32Array(ye.control):wt(ye.control),W=new Int32Array(ye.pool),Dt=Sr(ye,()=>He),xt={...Dt.imports,env:{...Dt.imports.env,memory:He},wasi:{"thread-spawn":mr(ye.pool,ye.spawnWaitMs)}},Ft=e=>e instanceof Ce||e?.name==="WasiExitError";function Ct(e){Atomics.compareExchange(Ie,ke,0,1)===0&&Atomics.store(Ie,je,e),Atomics.notify(Ie,ke)}function Fn(e,r){try{xn(2,`[node-host] guest thread ${e} trapped: ${r?.stack??r}
|
|
2
|
+
`)}catch{}Atomics.store(Ie,Ar,e),Atomics.store(Ie,Ot,1),Atomics.notify(Ie,Ot)}if(Bt==="pool"){let e=Rt+hr.slot*Lt;Atomics.store(W,e+3,gn);let r=!1;for(;;){for(Atomics.store(W,e,Je),Atomics.add(W,Qe,1),Atomics.notify(W,Qe);;){let A=Atomics.load(W,e);if(A===Nt)break;Atomics.wait(W,e,A,1e3)}let t=Atomics.load(W,e+1),s=Atomics.load(W,e+2);r||(wt(ye.control),r=!0),Atomics.store(W,e,Er);let l=Atomics.add(W,et,1)+1;for(;;){let A=Atomics.load(W,Tt);if(l<=A||Atomics.compareExchange(W,Tt,A,l)===A)break}try{new WebAssembly.Instance(gt,xt).exports.wasi_thread_start(t,s)}catch(A){Atomics.sub(W,et,1),Atomics.store(W,e,pr),Ft(A)?Ct(A.code):Fn(t,A);break}Atomics.sub(W,et,1)}Dt.close()}else if(Bt==="command"){let e=new WebAssembly.Instance(gt,xt),r=0,t=null;try{e.exports._start()}catch(s){Ft(s)?r=s.code:(r=134,t=String(s?.stack??s))}Ct(r),tt.postMessage({t:"done",code:Atomics.load(Ie,je),error:t})}else{let e=new WebAssembly.Instance(gt,xt);e.exports._initialize?.();let r=()=>new Uint8Array(He.buffer);tt.on("message",t=>{let s=(l,A)=>tt.postMessage({t:"reply",id:t.id,value:l,error:A?String(A?.stack??A):null});try{if(t.op==="call"){let l=e.exports[t.fn];if(typeof l!="function")throw new Error(`no export ${t.fn}`);s(l(...t.args??[]))}else if(t.op==="write"){let l=t.bytes.length,A=e.exports.flatsql_alloc(Math.max(l,1));if(!A)throw new Error("flatsql_alloc failed");r().set(t.bytes,A),s(A)}else if(t.op==="read")s(r().slice(t.ptr,t.ptr+t.len));else if(t.op==="growHeap"){let{flatsql_alloc:l,flatsql_free:A}=e.exports,m=[];for(let E=2**30;E>=2**20&&m.length<64;){let R=He.buffer.byteLength+E+1048576<=t.limitBytes?l(E):0;if(!R){E/=2;continue}m.push(R)}for(let E of m)A(E);s(He.buffer.byteLength)}else throw new Error(`unknown op ${t.op}`)}catch(l){Ft(l)&&Ct(l.code),s(void 0,l)}}),tt.postMessage({t:"ready"})}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import U from"node:fs";import Je from"node:os";import C from"node:path";import{fileURLToPath as Oe}from"node:url";import{Worker as we}from"node:worker_threads";import Lt from"node:fs";import Nt from"node:path";var nt=Object.freeze({READ:1,WRITE:2,CREATE:4,EXCL:8,TRUNC:16,DELETE_ON_CLOSE:32,PROBE:64,UNLINK:128,CREATE_PARENTS:256,UNLINK_IF_UNUSED:512,OPEN_DEFERRED:1024}),ot=Object.freeze({OK:0,GENERIC:-1,NOENT:-2,ACCESS:-3,IO:-4,NOSPACE:-5,BADHANDLE:-6,BUSY:-7});var st=Object.freeze(["flatsql_io_open","flatsql_io_read","flatsql_io_write","flatsql_io_truncate","flatsql_io_sync","flatsql_io_size","flatsql_io_close"]);var at=typeof TextDecoder=="function"?new TextDecoder("utf-8",{fatal:!0}):null;var Fe=64,lt=Fe*4;var ft=64*1024;var ut=typeof TextEncoder=="function"?new TextEncoder:null;var _t=typeof TextEncoder=="function"?new TextEncoder:null;var Ot=Object.freeze({open:1,read:2,write:3,truncate:4,sync:5,size:6,close:7,mirrorRead:8});var Me=1179534419,Ue=1,ne=16,Pe=8;function oe(e={}){let t=e.maxHandles??4096,r=e.maxPathBytes??1024,n=e.maxInstances??64;if(!Number.isInteger(t)||t<1||t>1<<23)throw new RangeError("maxHandles must be in 1..2^23.");let s=ne*4+n*8+t*Pe*4+t*r,a=new SharedArrayBuffer(s),i=new Int32Array(a,0,ne);return i[0]=Me,i[1]=Ue,i[2]=t,i[3]=r,i[4]=n,a}import cn from"node:fs";import Ge from"node:path";import{randomFillSync as un}from"node:crypto";import{threadId as _n}from"node:worker_threads";var hr=256*1024;var yr=263;var Ur=typeof process<"u"&&!!process.release&&process.release.name==="node";var W=3,_=W|4,y=new TextEncoder,X=new TextDecoder;function He(e,t){let r=new Uint8Array(e),n=t>>>0||1;for(let s=0;s<e;s+=1)n^=n<<13,n^=n>>>17,n^=n<<5,r[s]=n&255;return r}function We(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(e[r]!==t[r])return!1;return!0}var Z=class extends Error{};function g(e,t){if(!e)throw new Z(t)}function o(e,t,r){g(e===t,`${r}: expected ${t}, got ${e}`)}function A(e,t){g(Number.isInteger(e)&&e>=0,`${t}: expected a handle, got ${e}`)}var Qr=Object.freeze([{name:"open without CREATE on a missing file is NOENT",async run(e,t){o(await e.open(`${t}/missing.bin`,W),-2,"open")}},{name:"create, write, size, short read at EOF, read past EOF",async run(e,t){let r=await e.open(`${t}/a.bin`,_);A(r,"open"),o(await e.writeFrom(r,y.encode("hello"),0),5,"write"),o(await e.size(r),5,"size");let n=new Uint8Array(10);o(await e.readInto(r,n,0),5,"short read"),g(X.decode(n.subarray(0,5))==="hello","short read bytes"),o(await e.readInto(r,new Uint8Array(4),5),0,"read at EOF"),o(await e.readInto(r,new Uint8Array(4),100),0,"read past EOF"),o(await e.close(r),0,"close")}},{name:"a write past EOF extends the file and the gap reads as zeros",async run(e,t){let r=await e.open(`${t}/sparse.bin`,_);A(r,"open"),o(await e.writeFrom(r,y.encode("ab"),0),2,"write head"),o(await e.writeFrom(r,y.encode("z"),100),1,"write past EOF"),o(await e.size(r),101,"size");let n=new Uint8Array(98);n.fill(238),o(await e.readInto(r,n,2),98,"read gap"),g(n.every(s=>s===0),"gap is zeros"),o(await e.close(r),0,"close")}},{name:"truncate shrinks and grows; grown bytes read as zeros",async run(e,t){let r=await e.open(`${t}/t.bin`,_);A(r,"open"),await e.writeFrom(r,y.encode("abcdefgh"),0),o(await e.truncate(r,3),0,"truncate down"),o(await e.size(r),3,"size after shrink"),o(await e.truncate(r,10),0,"truncate up"),o(await e.size(r),10,"size after grow");let n=new Uint8Array(10);o(await e.readInto(r,n,0),10,"read"),g(X.decode(n.subarray(0,3))==="abc","kept prefix"),g(n.subarray(3).every(s=>s===0),"grown tail is zeros"),o(await e.sync(r),0,"sync"),o(await e.close(r),0,"close")}},{name:"closed and bogus handles are BADHANDLE",async run(e,t){let r=await e.open(`${t}/c.bin`,_);A(r,"open"),o(await e.close(r),0,"close"),o(await e.close(r),-6,"close again"),o(await e.readInto(r,new Uint8Array(1),0),-6,"read"),o(await e.size(8388352),-6,"bogus size")}},{name:"PROBE reports existence without a handle",async run(e,t){let r=await e.open(`${t}/p.bin`,_);A(r,"open"),await e.close(r),o(await e.open(`${t}/p.bin`,64),0,"probe existing"),o(await e.open(`${t}/nope.bin`,64),-2,"probe missing")}},{name:"EXCL on an existing file is GENERIC; TRUNC empties it",async run(e,t){let r=await e.open(`${t}/x.bin`,_);A(r,"open"),await e.writeFrom(r,y.encode("data"),0),await e.close(r),o(await e.open(`${t}/x.bin`,_|8),-1,"EXCL");let n=await e.open(`${t}/x.bin`,W|16);A(n,"TRUNC open"),o(await e.size(n),0,"size after TRUNC"),await e.close(n)}},{name:"CREATE under a missing directory is NOENT; CREATE_PARENTS makes it",async run(e,t){o(await e.open(`${t}/p/00000001/h.fsh`,_),-2,"no parents");let r=await e.open(`${t}/p/00000001/h.fsh`,_|256);A(r,"CREATE_PARENTS"),o(await e.writeFrom(r,y.encode("head"),0),4,"write"),await e.close(r),o(await e.open(`${t}/p/00000001/h.fsh`,64),0,"probe")}},{name:"UNLINK_IF_UNUSED is BUSY while a handle is open; UNLINK removes",async run(e,t){let r=await e.open(`${t}/u.bin`,_);A(r,"open"),o(await e.open(`${t}/u.bin`,512),-7,"unlink while open"),await e.close(r),o(await e.open(`${t}/u.bin`,512),0,"unlink unused"),o(await e.open(`${t}/u.bin`,64),-2,"gone"),o(await e.open(`${t}/u.bin`,128),-2,"unlink missing");let n=await e.open(`${t}/v.bin`,_);await e.close(n),o(await e.open(`${t}/v.bin`,128),0,"plain unlink")}},{name:"DELETE_ON_CLOSE drops the file with its last handle",async run(e,t){let r=await e.open(`${t}/tmp.bin`,_|32);A(r,"open"),await e.writeFrom(r,y.encode("scratch"),0),o(await e.close(r),0,"close"),o(await e.open(`${t}/tmp.bin`,64),-2,"probe")}},{name:"paths are confined below the root",async run(e,t){o(await e.open(`${t}/../../escape.bin`,_),-3,".."),o(await e.open("",_),-1,"empty path")}},{name:"access modes: read-only handles refuse writes, write-only refuse reads",async run(e,t){let r=await e.open(`${t}/m.bin`,_);await e.writeFrom(r,y.encode("mode"),0),await e.close(r);let n=await e.open(`${t}/m.bin`,1);A(n,"read-only open"),o(await e.writeFrom(n,y.encode("x"),0),-4,"write on RO"),o(await e.truncate(n,0),-4,"truncate on RO"),await e.close(n);let s=await e.open(`${t}/m.bin`,2);A(s,"write-only open"),o(await e.readInto(s,new Uint8Array(2),0),-4,"read on WO"),await e.close(s)}},{name:"OPEN_DEFERRED: a failed open surfaces at open or at first use",async run(e,t){let r=await e.open(`${t}/deferred-missing.bin`,W|1024);r<0?o(r,-2,"sync host"):(o(await e.readInto(r,new Uint8Array(1),0),-2,"first use"),o(await e.close(r),0,"close failed deferred"));let n=await e.open(`${t}/deferred.bin`,_|1024);A(n,"deferred create"),o(await e.writeFrom(n,y.encode("later"),0),5,"write after deferred"),o(await e.size(n),5,"size"),await e.close(n)}},{name:"two handles on one path see each other's writes",async run(e,t){let r=await e.open(`${t}/shared.bin`,_),n=await e.open(`${t}/shared.bin`,W);A(r,"a"),A(n,"b"),await e.writeFrom(r,y.encode("from-a"),0);let s=new Uint8Array(6);o(await e.readInto(n,s,0),6,"read via b"),g(X.decode(s)==="from-a","b sees a"),await e.writeFrom(n,y.encode("B"),0);let a=new Uint8Array(1);await e.readInto(r,a,0),g(a[0]===66,"a sees b"),await e.close(r),await e.close(n)}},{name:"1 MiB round trip across chunk boundaries at an unaligned offset",async run(e,t){let r=await e.open(`${t}/big.bin`,_);A(r,"open");let n=He(1024*1024+17,2654435769);o(await e.writeFrom(r,n,4093),n.length,"write"),o(await e.size(r),4093+n.length,"size");let s=new Uint8Array(n.length);o(await e.readInto(r,s,4093),n.length,"read"),g(We(s,n),"bytes round trip"),await e.close(r)}}]);import en from"node:fs";import rn from"node:path";var m=Object.freeze({SUCCESS:0,TOOBIG:1,ACCES:2,AGAIN:6,BADF:8,EXIST:20,INVAL:28,IO:29,ISDIR:31,LOOP:32,MFILE:33,NAMETOOLONG:37,NOENT:44,NOSPC:51,NOSYS:52,NOTDIR:54,NOTEMPTY:55,NOTSUP:58,PERM:63,SPIPE:70,XDEV:75,NOTCAPABLE:76}),En={ENOENT:m.NOENT,EEXIST:m.EXIST,ENOTDIR:m.NOTDIR,EISDIR:m.ISDIR,ENOTEMPTY:m.NOTEMPTY,EACCES:m.ACCES,EPERM:m.PERM,EBADF:m.BADF,EINVAL:m.INVAL,ENOSPC:m.NOSPC,EMFILE:m.MFILE,ELOOP:m.LOOP,ENAMETOOLONG:m.NAMETOOLONG,EXDEV:m.XDEV,EIO:m.IO,EAGAIN:m.AGAIN,ENOTSUP:m.NOTSUP,E2BIG:m.TOOBIG};var pn=Object.freeze({UNKNOWN:0,CHAR:2,DIR:3,FILE:4,SYMLINK:7});var hn=1n<<1n,yn=1n<<6n,wn=(1n<<30n)-1n;var R=8,se=0,ae=1,ie=2,$e=3;var ce=2,Ve=1;var qe=4,M=1024;function le({preopens:e=[],maxFds:t=1024}={}){let r=t*R,n=new SharedArrayBuffer(16+r*4+t*8+t*M),s=new Int32Array(n,0,4);s[0]=t,s[1]=e.length;let a=Ye(n);for(let i=0;i<3;i+=1)a.words[i*R+ae]=Ve,a.words[i*R+ie]=i,a.words[i*R+se]=ce;return e.forEach((i,f)=>{let d=3+f,c=Buffer.from(Ge.resolve(i.host)),h=Buffer.from(i.guest);if(c.length+h.length+1>M)throw new RangeError("preopen path too long");a.paths.set(h,d*M),a.paths[d*M+h.length]=0,a.paths.set(c,d*M+h.length+1),a.words[d*R+ae]=qe,a.words[d*R+ie]=-1,a.words[d*R+$e]=h.length+1+c.length,a.words[d*R+se]=ce}),n}function Ye(e){let t=new Int32Array(e,0,4)[0],r=16,n=new Int32Array(e,r,t*R);r+=t*R*4;let s=new Float64Array(e,r,t);r+=t*8;let a=new Uint8Array(e,r,t*M);return{maxFds:t,words:n,positions:s,paths:a}}var fe=0,ue=1,de=2;var _e=5,me=6,J=7,j=16,ee=65536;function Se(){return new SharedArrayBuffer((j+ee)*4)}var ze=0,te=1,Ae=2,Ke=3,Ee=4,pe=5,re=6,he=7;var Xe=16,Ze=4;var In=(1<<29)-1;function ye(e){let t=new SharedArrayBuffer((Xe+e*Ze)*4),r=new Int32Array(t);return r[ze]=e,r[Ke]=1,t}var Ie=new URL("./node-guest.mjs",import.meta.url);function je(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),r=8,n=()=>{let a=0,i=0;for(;;){let f=t[r++];if(a+=(f&127)*2**i,i+=7,!(f&128))return a}},s=()=>{let a=n(),i=Buffer.from(t.subarray(r,r+a)).toString("utf8");return r+=a,i};for(;r<t.length;){let a=t[r++],i=n(),f=r+i;if(a===2){let d=n();for(let c=0;c<d;c+=1){let h=s(),L=s(),O=t[r++];if(O===0)n();else if(O===1){r+=1;let T=n();n(),T&1&&n()}else if(O===2){let T=n(),l=n(),u=T&1?n():void 0;return{module:h,name:L,initial:l,maximum:u,shared:(T&2)!==0}}else if(O===3)r+=2;else throw new Error(`unknown import kind ${O}`)}return null}r=f}return null}function Te(e){if(e.root)return U.mkdirSync(e.root,{recursive:!0}),{root:C.resolve(e.root),cleanup:()=>{}};let t=U.mkdtempSync(C.join(Je.tmpdir(),"flatsql-node-"));return{root:t,cleanup:()=>{e.keepRoot||U.rmSync(t,{recursive:!0,force:!0})}}}function Re(e,t){U.mkdirSync(C.join(t,"tmp"),{recursive:!0});let r=[{guest:"/",host:t},...e.mounts??[]],n=null;if(e.deterministic){let s=new SharedArrayBuffer(8);new BigUint64Array(s)[0]=BigInt(e.deterministic.randomSeed??0x9e3779b97f4a7c15n)|1n,n={randomSeed:String(e.deterministic.randomSeed??0),randomState:s}}return{args:e.args??[],env:{TMPDIR:"/tmp",...e.env??{}},fdTable:le({preopens:r}),control:Se(),pool:ye(e.maxThreads??512),spawnWaitMs:e.spawnWaitMs??6e4,ioRoot:t,ioTable:oe({maxHandles:e.maxHandles??16384}),instanceId:e.instanceId??0,fault:e.fault?.buffer??null,stdoutFd:e.stdoutFd,stderrFd:e.stderrFd,deterministic:n}}async function Le(e){if(e instanceof WebAssembly.Module)return{module:e,bytes:null};let t=typeof e=="string"?U.readFileSync(e):new Uint8Array(e);return{module:await WebAssembly.compile(t),bytes:t}}function ge(e,t){let r=je(e);if(!r||r.module!=="env"||r.name!=="memory"||!r.shared)throw new Error("the module must import a shared env.memory");let n=Math.max(r.initial,t.initialPages??0),s=Math.min(r.maximum??65536,t.maximumPages??65536),a=new WebAssembly.Memory({initial:n,maximum:s,shared:!0});return Ne.set(a,s*65536),a}var Ne=new WeakMap;function et(e,t){let r=Ne.get(e)??e.buffer.byteLength,n=t.heapBytes??1/0;return Math.min(r,2**32-16*2**20,e.buffer.byteLength+n)}var V=class{constructor(t,r,n,s){this.module=t,this.memory=r,this.cfg=n,this.control=new Int32Array(n.control),this.pool=new Int32Array(n.pool),this.cap=this.pool[0],this.workers=new Set,this.listeners=new Set,this.stopped=!1,this.poolErrors=[],this.memoryAtFirstThread=0;let a=Math.min(s.warmThreads??16,this.cap);for(let i=0;i<a;i+=1)this.startPoolWorker();this.timer=setInterval(()=>this.tick(),2)}startPoolWorker(){let t=Atomics.add(this.pool,te,1);if(t>=this.cap){Atomics.sub(this.pool,te,1);return}let r=new we(Ie,{execArgv:process.execArgv.filter(n=>!n.startsWith("--input-type")),workerData:{mode:"pool",slot:t,wasmModule:this.module,memory:this.memory,cfg:this.cfg}});r.on("error",n=>this.poolErrors.push(String(n?.stack??n))),r.once("exit",()=>this.workers.delete(r)),this.workers.add(r)}tick(){if(this.stopped)return;let t=Atomics.exchange(this.pool,Ae,0);for(let r=0;r<t;r+=1)this.startPoolWorker();!this.memoryAtFirstThread&&Atomics.load(this.pool,re)>0&&(this.memoryAtFirstThread=this.memory.buffer.byteLength);for(let r of this.listeners)r()}startGuest(t){let r=new we(Ie,{execArgv:process.execArgv.filter(n=>!n.startsWith("--input-type")),workerData:{mode:t,wasmModule:this.module,memory:this.memory,cfg:this.cfg}});return this.workers.add(r),r.once("exit",()=>this.workers.delete(r)),r}exited(){return Atomics.load(this.control,fe)!==0}faulted(){return Atomics.load(this.control,de)!==0}report(){let t=this.control,r=Math.min(Atomics.load(t,me),ee),n=new Set;for(let s=0;s<r;s+=1)n.add(Atomics.load(t,j+s));return{guestThreadsSpawned:Atomics.load(this.pool,re),maxConcurrentGuestThreads:Atomics.load(this.pool,pe)+1,runningGuestThreads:Atomics.load(this.pool,Ee),spawnsDeclined:Atomics.load(this.pool,he),workerThreads:Atomics.load(t,_e),distinctWorkerThreadIds:n.size,memoryBytes:this.memory.buffer.byteLength,memoryGrownWhileThreadsRan:this.memoryAtFirstThread?Math.max(0,this.memory.buffer.byteLength-this.memoryAtFirstThread):0}}async stop(){this.stopped=!0,clearInterval(this.timer),await Promise.all([...this.workers].map(t=>t.terminate().catch(()=>{}))),this.workers.clear()}};async function tt(e,t={}){let{module:r,bytes:n}=await Le(e),s=ge(n??t.bytes,t),a=typeof e=="string"?C.basename(e):"command.wasm",i=Te(t),f=Re({...t,args:[a,...t.args??[]]},i.root),d=performance.now(),c=new V(r,s,f,t),h=c.startGuest("command"),L=await new Promise(T=>{let l=!1,u=[],E=p=>{if(!l){l=!0;for(let S of u)clearTimeout(S);c.listeners.clear(),T(p)}},w={exitCode:0,killed:!1,timedOut:!1,fault:!1,error:null};h.on("message",p=>{p.t==="done"&&E({...w,exitCode:p.code,error:p.error,fault:p.error!==null})}),h.on("error",p=>E({...w,exitCode:134,error:String(p?.stack??p),fault:!0})),h.on("exit",p=>E({...w,exitCode:p||134,error:`guest worker exited (${p})`,fault:!0})),c.listeners.add(()=>{c.faulted()?E({...w,exitCode:134,error:`guest thread ${Atomics.load(c.control,J)} trapped`,fault:!0}):c.exited()&&u.push(setTimeout(()=>E({...w,exitCode:Atomics.load(c.control,ue)}),100))}),t.timeoutMs&&u.push(setTimeout(()=>E({...w,exitCode:124,timedOut:!0,error:`timed out after ${t.timeoutMs} ms`}),t.timeoutMs)),t.killAfterMs!==void 0&&u.push(setTimeout(()=>{t.beforeKill?.(),E({...w,exitCode:137,killed:!0})},t.killAfterMs))}),O=c.report();return await c.stop(),i.cleanup(),{...L,elapsedMs:performance.now()-d,threads:O,root:i.root,poolErrors:c.poolErrors}}async function Cn(e,t={}){let{module:r,bytes:n}=await Le(e),s=ge(n??t.bytes,t),a=Te(t),i=Re(t,a.root),f=new V(r,s,i,t),d=f.startGuest("reactor"),c=new Map,h=1,L=null,O=l=>{L=l;for(let u of c.values())u.reject(l);c.clear()};f.listeners.add(()=>{!L&&f.faulted()&&O(new Error(`guest thread ${Atomics.load(f.control,J)} trapped`))}),await new Promise((l,u)=>{let E=setTimeout(()=>u(new Error("FlatSQL guest startup timed out")),3e4),w=()=>{clearTimeout(E),l()},p=S=>{clearTimeout(E),O(S),u(S)};d.once("exit",S=>p(new Error(`FlatSQL guest exited (${S})`))),d.on("message",S=>{if(S.t==="ready")w();else if(S.t==="reply"){let q=c.get(S.id);if(c.delete(S.id),!q)return;S.error?q.reject(new Error(S.error)):q.resolve(S.value)}}),d.on("error",S=>{p(S)})}).catch(async l=>{throw await f.stop(),a.cleanup(),l}),t.growHeap!==!1&&await new Promise((l,u)=>{let E=h++;c.set(E,{resolve:l,reject:u}),d.postMessage({op:"growHeap",limitBytes:et(s,t),id:E})});let T=l=>{if(L)return Promise.reject(L);let u=h++;return new Promise((E,w)=>{c.set(u,{resolve:E,reject:w}),d.postMessage({...l,id:u})})};return{memory:s,root:a.root,call:(l,...u)=>T({op:"call",fn:l,args:u}),write:l=>T({op:"write",bytes:l instanceof Uint8Array?l:new Uint8Array(l)}),read:(l,u)=>T({op:"read",ptr:l,len:u}),threads:()=>f.report(),faulted:()=>!!L||f.faulted(),async close(){await f.stop(),a.cleanup()}}}var rt=process.argv[1]&&C.resolve(process.argv[1])===Oe(import.meta.url);if(rt){let[e,...t]=process.argv.slice(2);e||(process.stderr.write(`usage: node wasm/node-host.mjs <command.wasm> [args...]
|
|
2
|
+
`),process.exit(2));let r={};for(let[f,d]of Object.entries(process.env))(f.startsWith("FLATSQL_PS_")||f.startsWith("PS_"))&&(r[f]=d);let n=Number(process.env.FLATSQL_PS_TIMEOUT_MS??0)||void 0,s=C.resolve(C.dirname(Oe(import.meta.url)),".."),a=await tt(e,{args:t,env:r,timeoutMs:n,root:process.env.FLATSQL_PS_ROOT||void 0,keepRoot:process.env.FLATSQL_PS_KEEP_ROOT==="1",mounts:[{guest:s,host:s}]}),i=a.threads;process.env.FLATSQL_PS_REPORT&&U.writeFileSync(process.env.FLATSQL_PS_REPORT,`${JSON.stringify({...a,root:void 0})}
|
|
3
|
+
`),process.stderr.write(`node-host: exit ${a.exitCode}${a.error?` (${a.error})`:""}; guest threads spawned ${i.guestThreadsSpawned}, max concurrent ${i.maxConcurrentGuestThreads} on ${i.distinctWorkerThreadIds} distinct worker threads${i.spawnsDeclined?`, ${i.spawnsDeclined} spawns declined`:""}; memory ${(i.memoryBytes/2**20).toFixed(0)} MiB; ${(a.elapsedMs/1e3).toFixed(1)} s
|
|
4
|
+
`),i.memoryGrownWhileThreadsRan&&process.stderr.write(`node-host: WARNING memory grew ${(i.memoryGrownWhileThreadsRan/2**20).toFixed(0)} MiB while guest threads ran (V8 can trap a thread on memory another thread grew; grow the heap before threads start)
|
|
5
|
+
`),process.exit(a.exitCode)}export{Cn as createNodeInstance,je as importedMemoryLimits,tt as runCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Nn=Object.freeze({READ:1,WRITE:2,CREATE:4,EXCL:8,TRUNC:16,DELETE_ON_CLOSE:32,PROBE:64,UNLINK:128,CREATE_PARENTS:256,UNLINK_IF_UNUSED:512,OPEN_DEFERRED:1024}),Cn=Object.freeze({OK:0,GENERIC:-1,NOENT:-2,ACCESS:-3,IO:-4,NOSPACE:-5,BADHANDLE:-6,BUSY:-7});var Fn=Object.freeze(["flatsql_io_open","flatsql_io_read","flatsql_io_write","flatsql_io_truncate","flatsql_io_sync","flatsql_io_size","flatsql_io_close"]),Ye=4096;function vt(t,{during:n}={}){if(!t)return-1;let r=typeof t.code=="string"?t.code:null;if(r)switch(r){case"ENOENT":case"ENOTDIR":return-2;case"EACCES":case"EPERM":case"EROFS":return-3;case"ENOSPC":case"EDQUOT":return-5;case"EBADF":return-4;case"EEXIST":return-1;case"EBUSY":case"ETXTBSY":return-7;case"ENAMETOOLONG":case"EINVAL":return-1;default:return-4}switch(t.name){case"NotFoundError":return-2;case"NoModificationAllowedError":return-7;case"InvalidStateError":return n==="open"?-7:-6;case"QuotaExceededError":return-5;case"TypeMismatchError":case"SecurityError":case"NotAllowedError":return-3;case"InvalidModificationError":return-7;case"TypeError":case"RangeError":return-1;default:return-4}}var N=class extends Error{constructor(n,r){super(r??`flatsql_io status ${n}`),this.name="FlatsqlIoStatusError",this.status=n}};function V(t,n){return t&&typeof t.status=="number"&&t.status<0?t.status:vt(t,n)}function oe(t){if(typeof t!="string"||t.length===0||t.includes("\0"))return-1;let n=[];for(let r of t.split("/"))if(!(r===""||r===".")){if(r==="..")return-3;n.push(r)}return n.length===0?-1:n}var Ve=typeof TextDecoder=="function"?new TextDecoder("utf-8",{fatal:!0}):null;function Ge(t){if(!Ve||t.length===0||t.length>Ye)return-1;let n=t.buffer instanceof ArrayBuffer?t:new Uint8Array(t);try{return Ve.decode(n)}catch{return-1}}var Vt=1330201683,Yt=1,Gt=0,qt=1,Wt=2,$t=3,Kt=4,H=5,Ie=6,We=7,$e=8;var Xt=11,Ke=12,zt=13,Xe=64,qe=Xe*4;var ze=1,Ze=2;var se=0,Oe=1,Je=0,ae=1,ie=2,ce=3,je=32767,G=0;var Zt=2,Jt=3,et=4,tt=5,nt=6,rt=7,ot=8,st=9,at=10,jt=11,en=12,it=13,ct=8,tn=9,de=128;var _e=2,_t=3,nn=4;var rn=1;var ft=1,pe=1,fe=2,he=3,Re=4,Te=5,me=6,Le=7;var Mn=64*1024;function on(t,n){return Math.ceil(t/n)*n}function sn(t){if(typeof SharedArrayBuffer!="function"||!(t instanceof SharedArrayBuffer))throw new TypeError("The SAB I/O channel requires a SharedArrayBuffer (cross-origin isolation in browsers).")}function lt(t){sn(t);let n=new Int32Array(t,0,Xe);if(n[Gt]!==Vt||n[qt]!==Yt)throw new TypeError("Not a SAB I/O channel buffer (bad magic or version).");let r=n[Wt],s=n[$t],f=n[Kt],a=n[Xt],l=on(qe+f*4,64),L=new Int32Array(t,qe,f),S=[];for(let p=0;p<r;p+=1){let T=l+p*s;S.push({index:p,base:T,i32:new Int32Array(t,T,de/4),f64:new Float64Array(t,T,de/8),data:new Uint8Array(t,T+de,a)})}return{buffer:t,header:n,instances:L,slots:S,slotCount:r,slotBytes:s,dataBytes:a,maxInstances:f,channelId:n[zt]}}function ut(t){return`sdm-sab-io-doorbell-${t}`}function an(t){return`sdm-sab-io-done-${t}`}var Qn=typeof TextEncoder=="function"?new TextEncoder:null;var Y=null;function cn(t){return typeof BroadcastChannel!="function"?null:((!Y||Y.id!==t.channelId)&&(Y?.channel.close(),Y={id:t.channelId,channel:new BroadcastChannel(an(t.channelId))}),Y.channel)}function Et(t,n,r,s=0){n.f64[tn]=s,Atomics.store(n.i32,jt,r|0),Atomics.store(n.i32,Jt,Atomics.load(n.i32,Zt)),Atomics.store(n.i32,G,nn),Atomics.notify(n.i32,G),Atomics.load(n.i32,en)===rn&&cn(t)?.postMessage(n.index)}var _n=typeof TextEncoder=="function"?new TextEncoder:null;function St(t){let n=2166136261;for(let r=0;r<t.length;r+=1)n^=t[r],n=Math.imul(n,16777619);return n|0}var At=new WeakMap;function ye(t){let n=At.get(t);if(n)return n;let r=new Int32Array(t,0,16);if(r[0]!==1380795475||r[1]!==1)throw new TypeError("Not a SAB I/O mirror buffer.");let s=r[2],f=r[3],a=r[4],l=16*4,L=l+s*32,S=L+s*a;return n={entries:s,entryBytes:f,maxPathBytes:a,i32:new Int32Array(t,l,s*32/4),f64:new Float64Array(t,l,s*32/8),paths:new Uint8Array(t,L,s*a),data:new Uint8Array(t,S,s*f)},At.set(t,n),n}function dt(t){return ye(t).entryBytes}function It(t){return typeof t=="string"?_n.encode(t):t}function fn(t,n,r){let s=n*8;if(Atomics.load(t.i32,s+3)!==r.length)return!1;let f=n*t.maxPathBytes;for(let a=0;a<r.length;a+=1)if(t.paths[f+a]!==r[a])return!1;return!0}function Ot(t,n,r){let s=(r>>>0)%t.entries;for(let f=0;f<t.entries;f+=1){let a=s*8,l=Atomics.load(t.i32,a+0);if(l===0)return-1;if((l===2||l===3)&&Atomics.load(t.i32,a+2)===r&&fn(t,s,n))return s;s=(s+1)%t.entries}return-1}function ln(t,n,r){let s=(r>>>0)%t.entries;for(let f=0;f<t.entries;f+=1){let a=s*8;if(Atomics.compareExchange(t.i32,a+0,0,1)===0)return t.paths.set(n,s*t.maxPathBytes),Atomics.store(t.i32,a+3,n.length),Atomics.store(t.i32,a+2,r),Atomics.store(t.i32,a+4,0),t.f64[s*(32/8)+3]=0,Atomics.store(t.i32,a+0,3),s;s=(s+1)%t.entries}return-1}function W(t,n,r,s,{truncateTo:f}={}){let a=ye(t),l=It(n);if(l.length>a.maxPathBytes)return!1;let L=St(l),S=Ot(a,l,L);if(S<0&&(S=ln(a,l,L)),S<0)return!1;let p=S*(32/4),T=S*(32/8)+3,A=S*a.entryBytes,c=Atomics.load(a.i32,p+0)===2;Atomics.add(a.i32,p+1,1);let E=c?a.f64[T]:0,d=c?Atomics.load(a.i32,p+4):0;if(c||a.data.fill(0,A,A+a.entryBytes),s.length>0&&r<a.entryBytes){let m=Math.min(a.entryBytes,r+s.length);r>d&&a.data.fill(0,A+d,A+r),a.data.set(s.subarray(0,m-r),A+r)}return s.length>0&&(E=Math.max(E,r+s.length)),f!==void 0&&(f<d&&a.data.fill(0,A+f,A+d),E=f),d=Math.min(E,a.entryBytes),a.f64[T]=E,Atomics.store(a.i32,p+4,d),Atomics.store(a.i32,p+0,2),Atomics.add(a.i32,p+1,1),!0}function we(t,n){let r=ye(t),s=It(n);if(s.length>r.maxPathBytes)return;let f=Ot(r,s,St(s));if(f<0)return;let a=f*(32/4);Atomics.add(r.i32,a+1,1),Atomics.store(r.i32,a+0,3),Atomics.store(r.i32,a+4,0),r.f64[f*(32/8)+3]=0,Atomics.add(r.i32,a+1,1)}function pt(t=["/h.fsh"]){let n=Array.from(t,String);return r=>{let s=String(r);for(let f of n)if(s.endsWith(f)||s===f.replace(/^\//,""))return!0;return!1}}var Ce=256*1024,dn=50,In=8,Tt=250,mt=16777215,R=0,xe=1,Lt=2;function le(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}function On(){if(typeof MessageChannel=="function"){let t=new MessageChannel,n=[];return t.port1.onmessage=()=>n.shift()?.(),t.port1.unref?.(),t.port2.unref?.(),()=>new Promise(r=>{n.push(r),t.port2.postMessage(0)})}return()=>new Promise(t=>setTimeout(t,0))}function yt(t={}){let n=lt(t.buffer),r=t.backend;if(!r||typeof r.openFile!="function")throw new TypeError("createFlatsqlIoServer requires a backend with openFile().");let s=Number.isInteger(t.chunkBytes)&&t.chunkBytes>0?t.chunkBytes:Ce,f=t.doorbell??"auto",a=f==="message"||f==="auto"&&typeof Atomics.waitAsync!="function"?Oe:se,l=t.mirror??null,L=Number.isFinite(t.spinMicros)?Math.max(0,t.spinMicros):dn,S=typeof t.onEvent=="function"?t.onEvent:null,p=On(),T=new Map,A=new Map,c=new Map,E=new Map,d=new Map,m=[],y=new Set,x=1,F=!1,g=null,D=null,U=null,J=null,j=!1,w={served:0,opens:0,deferredOpens:0,parked:0,chunks:0,busy:0,revoked:0,sharedViewsRejected:!1,maxReady:0};function v(e){if(S)try{S(e)}catch{}}function ee(){if(a===se)Atomics.add(n.header,H,1),Atomics.notify(n.header,H);else{let e=D;D=null,e?.()}}async function Ft(e){if(a===se){let o=Atomics.waitAsync(n.header,H,e,Tt);o.async&&await o.value;return}Atomics.load(n.header,H)===e&&await new Promise(o=>{let _=setTimeout(()=>{D===u&&(D=null),o()},Tt),u=()=>{clearTimeout(_),o()};D=u})}function Ae(e,o){let u=(d.get(e)??Promise.resolve()).then(o,o),i=u.then(()=>{},()=>{});return d.set(e,i),i.then(()=>{d.get(e)===i&&d.delete(e)}),u}function gt(){for(let e=0;e<mt;e+=1){let o=x;if(x=x>=mt?1:x+1,!c.has(o))return o}return-1}function te(e,o,_){let u=gt();if(u<0)return-1;let i=(_&2)!==0,O={id:u,entry:e,instanceId:o,canWrite:i,canRead:!i||(_&1)!==0};c.set(u,O),e.refs+=1,_&32&&(e.deleteOnClose=!0);let I=E.get(o);return I||(I=new Set,E.set(o,I)),I.add(u),u}function ne(e){if(!(e.refs>0||e.pins>0)){if(A.get(e.path)===e&&A.delete(e.path),e.file){try{e.file.close()}catch{}e.file=null}e.deleteOnClose&&e.openStatus===0&&Ae(e.path,async()=>{try{await r.remove(e.path,e.components)}catch{}l&&l.write!==!1&&we(l.buffer,e.path)})}}function De(e){c.delete(e.id)&&(E.get(e.instanceId)?.delete(e.id),e.entry.refs-=1,ne(e.entry))}function Dt(e){return e===je?ae:e<0||e>=n.maxInstances?-1:Atomics.load(n.instances,e)}function Se(e){let o=Dt(e);return o===ie||o===ce}function Me(e){let{slot:o,ptr:_,len:u}=e;if(u<0||_<0)return null;if(e.dataMode===ft)return _+u>o.data.length?null:o.data.subarray(_,_+u);let i=T.get(e.instanceId),O=i?.buffer??i;return!O||_+u>O.byteLength?null:new Uint8Array(O,_,u)}function Qe(e){return(!J||J.length<e)&&(J=new Uint8Array(Math.max(e,s))),J.subarray(0,e)}function Pe(e,o,_){if(!j)try{return e.read(o,{at:_})}catch(O){if(!(O instanceof TypeError)||!(o.buffer instanceof SharedArrayBuffer))throw O;j=!0,w.sharedViewsRejected=!0,v({type:"shared-views-rejected"})}let u=Qe(o.length),i=e.read(u,{at:_});return o.set(u.subarray(0,i),0),i}function Mt(e,o,_){if(!j)try{return e.write(o,{at:_})}catch(i){if(!(i instanceof TypeError)||!(o.buffer instanceof SharedArrayBuffer))throw i;j=!0,w.sharedViewsRejected=!0,v({type:"shared-views-rejected"})}let u=Qe(o.length);return u.set(o,0),e.write(u,{at:_})}function h(e,o,_=0){y.delete(e.slot.index),w.served+=1,Atomics.add(n.header,Ke,1),Et(n,e.slot,o,_)}function Qt(e){let o=e.i32;return{slot:e,op:o[et],instanceId:o[tt],handleId:o[nt],flags:o[rt],ptr:o[ot],len:o[st],dataMode:o[it],pathLen:o[at],offset:e.f64[ct],done:0,phase:0}}function He(){let e=0;for(let o of n.slots)y.has(o.index)||Atomics.load(o.i32,G)===_e&&Atomics.compareExchange(o.i32,G,_e,_t)===_e&&(y.add(o.index),m.push(Qt(o)),e+=1);return m.length>w.maxReady&&(w.maxReady=m.length),e}function Ue(){for(let e=0;e<n.maxInstances;e+=1){if(Atomics.load(n.instances,e)!==ie)continue;let o=E.get(e);if(o){for(let _ of Array.from(o)){let u=c.get(_);u&&De(u)}E.delete(e)}T.delete(e),w.revoked+=1,Atomics.store(n.instances,e,ce),Atomics.notify(n.instances,e),v({type:"revoked",instanceId:e})}}function re(e,o){return w.parked+=1,o.waiters.push(e),Lt}function ke(e,o,_){if(e.opening=null,e.openStatus=o,e.file=_??null,o===0&&l&&l.write!==!1&&l.match(e.path)&&e.file)try{let i=e.file.getSize(),O=new Uint8Array(Math.min(i,dt(l.buffer)));O.length>0&&Pe(e.file,O,0),W(l.buffer,e.path,0,O,{truncateTo:i})}catch{}let u=e.waiters;e.waiters=[];for(let i of u)i.op===pe&&i.phase===1&&i.entry===e&&(o<0?i.result=o:Se(i.instanceId)?i.result=-3:i.result=te(e,i.instanceId,i.flags),i.phase=2),m.push(i);o<0&&e.refs===0&&e.pins===0&&A.get(e.path)===e?A.delete(e.path):o===0&&e.refs===0&&e.pins===0&&ne(e),ee()}function be(e,o){w.opens+=1,e.opening=Ae(e.path,async()=>{try{let _=await r.openFile(e.path,e.components,o);ke(e,0,_)}catch(_){ke(e,V(_,{during:"open"}),null)}})}function Pt(e){if(e.phase===2)return h(e,e.result),R;if(Se(e.instanceId))return h(e,-3),R;if(e.path===void 0){let I=e.slot.data.slice(0,Math.max(0,e.pathLen)),Q=Ge(I);if(typeof Q!="string")return h(e,Q),R;let P=oe(Q);if(!Array.isArray(P))return h(e,P),R;e.path=P.join("/"),e.components=P}let{path:o,components:_,flags:u}=e,i=A.get(o);if(u&704)return i?.opening?re(e,i):u&64?i&&i.openStatus===0?(h(e,0),R):ve(e,async()=>await r.exists(o,_)?0:-2):i&&i.refs>0?(w.busy+=1,h(e,-7),R):(i&&i.pins>0&&(i.pins=0,ne(i)),ve(e,async()=>(await r.remove(o,_),l&&l.write!==!1&&we(l.buffer,o),0)));if(i){if(i.opening){if(u&1024){w.deferredOpens+=1;let I=te(i,e.instanceId,u);return h(e,I),R}return re(e,i)}if(i.openStatus===0){if(u&8)return h(e,-1),R;if(u&16&&u&2)try{i.file.truncate(0),l&&l.write!==!1&&l.match(o)&&W(l.buffer,o,0,new Uint8Array(0),{truncateTo:0})}catch(Q){return h(e,V(Q)),R}let I=te(i,e.instanceId,u);return h(e,I),R}A.get(o)===i&&A.delete(o)}let O={path:o,components:_,file:null,opening:null,openStatus:0,refs:0,pins:0,deleteOnClose:!1,waiters:[]};if(A.set(o,O),be(O,u),u&1024){w.deferredOpens+=1;let I=te(O,e.instanceId,u);return h(e,I),R}return e.phase=1,e.entry=O,re(e,O)}function ve(e,o){return e.phase=2,Ae(e.path,async()=>{try{e.result=await o()}catch(_){e.result=V(_)}m.push(e),ee()}),w.parked+=1,Lt}function Ht(e){if(Se(e.instanceId))return h(e,-3),R;let o=c.get(e.handleId);if(!o)return h(e,-6),R;let _=o.entry;if(_.opening)return re(e,_);if(e.op===Le)return De(o),h(e,0),R;if(_.openStatus<0||!_.file)return h(e,_.openStatus<0?_.openStatus:-6),R;let u=_.file;try{switch(e.op){case fe:{if(!o.canRead)return h(e,-4),R;let i=Me(e);if(!i)return h(e,-1),R;let O=Math.min(s,e.len-e.done),I=Pe(u,i.subarray(e.done,e.done+O),e.offset+e.done);return w.chunks+=1,e.done+=I,I<O||e.done>=e.len?(h(e,e.done),R):xe}case he:{if(!o.canWrite)return h(e,-4),R;let i=Me(e);if(!i)return h(e,-1),R;let O=Math.min(s,e.len-e.done),I=i.subarray(e.done,e.done+O),Q=e.offset+e.done,P=Mt(u,I,Q);return w.chunks+=1,l&&l.write!==!1&&l.match(_.path)&&W(l.buffer,_.path,Q,I.subarray(0,P)),e.done+=P,P<O||e.done>=e.len?(h(e,e.done),R):xe}case Re:return o.canWrite?(u.truncate(e.offset),l&&l.write!==!1&&l.match(_.path)&&W(l.buffer,_.path,0,new Uint8Array(0),{truncateTo:e.offset}),h(e,0),R):(h(e,-4),R);case Te:return u.flush(),h(e,0),R;case me:return h(e,0,u.getSize()),R;default:return h(e,-1),R}}catch(i){let O=V(i);return h(e,e.done>0&&e.op===fe?e.done:O),R}}function Ut(e){try{return e.op===pe?Pt(e):e.op===fe||e.op===he||e.op===Re||e.op===Te||e.op===me||e.op===Le?Ht(e):(h(e,-1),R)}catch(o){return v({type:"step-error",error:o}),h(e,-4),R}}function kt(){let e=le();for(;m.length>0;){let o=m.shift();if(Ut(o)===xe&&m.push(o),Ue(),He(),le()-e>In)return!1}return!0}async function bt(){for(Atomics.store(n.header,We,a),Atomics.add(n.header,$e,1),Atomics.store(n.header,Ie,ze);F;){let e=Atomics.load(n.header,H);Ue(),He();let o=kt();if(!F)break;if(!o||m.length>0){await p();continue}if(L>0){let _=le()+L/1e3;for(;le()<_&&Atomics.load(n.header,H)===e;);if(Atomics.load(n.header,H)!==e)continue}await Ft(e)}}return{doorbellMode:a,stats:w,start(){return F||(F=!0,a===Oe&&typeof BroadcastChannel=="function"&&(U=new BroadcastChannel(ut(n.channelId)),U.onmessage=()=>{let e=D;D=null,e?.()}),g=bt().catch(e=>{throw v({type:"loop-error",error:e}),e})),g},async stop(){F=!1,ee();try{await g}catch{}U?.close(),U=null;for(let e of A.values())try{e.file?.close()}catch{}A.clear(),c.clear(),E.clear(),Atomics.store(n.header,Ie,Ze)},attachMemory(e,o){if(!Number.isInteger(e)||e<0||e>=n.maxInstances)return!1;let _=Atomics.load(n.instances,e);return _===ie||_===ce?!1:(T.set(e,o),Atomics.store(n.instances,e,ae),!0)},detachMemory(e){T.delete(e),Atomics.load(n.instances,e)===ae&&Atomics.store(n.instances,e,Je)},async preopen(e,o=7){let _=await Promise.all(e.map(async u=>{let i=oe(String(u));if(!Array.isArray(i))return i;let O=i.join("/"),I=A.get(O);return I||(I={path:O,components:i,file:null,opening:null,openStatus:0,refs:0,pins:0,deleteOnClose:!1,waiters:[]},A.set(O,I),be(I,o&-1025)),I.pins+=1,I.opening&&await I.opening,I.openStatus<0?(I.pins=Math.max(0,I.pins-1),I.openStatus):0}));return ee(),_},releasePreopen(e){for(let o of e){let _=oe(String(o));if(!Array.isArray(_))continue;let u=A.get(_.join("/"));u&&u.pins>0&&(u.pins-=1,ne(u))}},inventory(){return{files:Array.from(A.values()).map(e=>({path:e.path,refs:e.refs,pins:e.pins,opening:!!e.opening,openStatus:e.openStatus})),handles:c.size}}}}var vn=263;var Fe=class{constructor(){this.bytes=new Uint8Array(0),this.length=0}ensureCapacity(n,r){if(n<=this.bytes.length)return;let s=Math.max(64,this.bytes.length);for(;s<n;)s*=2;r.reserve(s-this.bytes.length);let f=new Uint8Array(s);f.set(this.bytes.subarray(0,this.length)),this.bytes=f}};function wt(t={}){let n=Number.isFinite(t.maxBytes)?t.maxBytes:1/0,r=new Map,s=new Set([""]),f=0,a={reserve(S){if(f+S>n)throw new N(-5,"memory store budget exhausted");f+=S},release(S){f=Math.max(0,f-S)}};function l(S){return S.slice(0,-1).join("/")}function L(S){let p=!1,T=()=>{if(p){let c=new Error("handle closed");throw c.name="InvalidStateError",c}let A=r.get(S);if(!A){let c=new Error("file removed");throw c.name="NotFoundError",c}return A};return{read(A,{at:c=0}={}){let E=T();if(c>=E.length)return 0;let d=Math.min(A.length,E.length-c);return A.set(E.bytes.subarray(c,c+d),0),d},write(A,{at:c=0}={}){let E=T(),d=c+A.length;return E.ensureCapacity(d,a),c>E.length&&E.bytes.fill(0,E.length,c),E.bytes.set(A,c),d>E.length&&(E.length=d),A.length},truncate(A){let c=T();A>c.length&&(c.ensureCapacity(A,a),c.bytes.fill(0,c.length,A)),c.length=A},flush(){T()},getSize(){return T().length},close(){p=!0}}}return{kind:"memory",openFile(S,p,T){let A=l(p);if(!s.has(A)){if(!(T&256)||!(T&4))throw new N(-2,`no directory ${A}`);for(let E=1;E<p.length;E+=1)s.add(p.slice(0,E).join("/"))}if(s.has(S))throw new N(-3,`${S} is a directory`);let c=r.get(S);if(c&&T&8)throw new N(-1,`${S} exists`);if(c)T&16&&(c.length=0);else{if(!(T&4))throw new N(-2,`no file ${S}`);c=new Fe,r.set(S,c)}return L(S)},exists(S){return r.has(S)||s.has(S)},remove(S){let p=r.get(S);if(!p)throw new N(-2,`no file ${S}`);a.release(p.bytes.length),r.delete(S)},reset(){r.clear(),s.clear(),s.add(""),f=0},usage(){return{files:r.size,allocatedBytes:f}},list(){return Array.from(r.keys()).sort()}}}var Ee="readwrite-unsafe";function hn(t){let n=new Error(t);return n.name="NotFoundError",n}function Bt(t){return new Promise(n=>setTimeout(n,t))}async function Rn(t,n=".sdm-mode-probe"){let r=null,s=null;try{let f=await t.getFileHandle(n,{create:!0});return r=await f.createSyncAccessHandle({mode:Ee}),r.mode!==Ee?{supported:!1,detail:"mode option ignored"}:(s=await f.createSyncAccessHandle({mode:Ee}),{supported:!0,detail:"two readwrite-unsafe handles"})}catch(f){return{supported:!1,detail:`${f?.name??"Error"}: ${f?.message??f}`}}finally{try{s?.close()}catch{}try{r?.close()}catch{}try{await t.removeEntry(n)}catch{}}}async function Tn(t,n=".sdm-view-probe"){let r=null;try{r=await(await t.getFileHandle(n,{create:!0})).createSyncAccessHandle();let f=new Uint8Array(new SharedArrayBuffer(16));f.fill(90);let a=r.write(f,{at:0}),l=new Uint8Array(new SharedArrayBuffer(16)),L=r.read(l,{at:0});return a===16&&L===16&&l[15]===90}catch{return!1}finally{try{r?.close()}catch{}try{await t.removeEntry(n)}catch{}}}function xt(t={}){let n=t.root??null,r=!1,s=null,f=t.handleMode??"auto",a=typeof t.openDelayMs=="function"?t.openDelayMs:null,l=new Map,L={attempts:Math.max(0,t.busyRetry?.attempts??0),baseMs:Math.max(1,t.busyRetry?.baseMs??10)};async function S(c){for(let E=0;;E+=1)try{return r?await c.createSyncAccessHandle({mode:Ee}):await c.createSyncAccessHandle()}catch(d){if(!(d?.name==="NoModificationAllowedError"||d?.name==="InvalidStateError")||E>=L.attempts)throw d;await Bt(L.baseMs*2**Math.min(E,8))}}async function p(){if(!n){if(typeof navigator>"u"||!navigator.storage?.getDirectory)throw new N(-1,"OPFS is unavailable here");if(n=await navigator.storage.getDirectory(),t.rootDirectory)for(let E of String(t.rootDirectory).split("/").filter(Boolean))n=await n.getDirectoryHandle(E,{create:!0})}let c=await Rn(n);if(s=await Tn(n),f==="shared"&&!c.supported)throw new N(-1,`shared OPFS handle modes are unsupported here (${c.detail})`);return r=f!=="exclusive"&&c.supported,l.set("",n),{sharedModes:r,sharedModesDetail:c.detail,sharedViews:s}}async function T(c,E){let d=c.join("/"),m=l.get(d);if(m)return m;let y=n,x="";for(let F of c){x=x?`${x}/${F}`:F;let g=l.get(x);if(g){y=g;continue}y=await y.getDirectoryHandle(F,{create:E}),l.set(x,y)}return y}async function A(c,E){try{return await c.getFileHandle(E)}catch(d){if(d?.name==="NotFoundError")return null;throw d}}return{kind:"opfs",init:p,get sharedModes(){return r},get sharedViews(){return s},async openFile(c,E,d){if(n||await p(),a){let U=a(c);U>0&&await Bt(U)}let m=(d&4)!==0,y=m&&(d&256)!==0,x=await T(E.slice(0,-1),y),F=E[E.length-1],g=null;if(d&8&&await A(x,F))throw new N(-1,`${c} exists`);g=await x.getFileHandle(F,{create:m});let D=await S(g);return d&16&&D.truncate(0),D},async exists(c,E){n||await p();let d;try{d=await T(E.slice(0,-1),!1)}catch(y){if(y?.name==="NotFoundError"||y?.name==="TypeMismatchError")return!1;throw y}let m=E[E.length-1];if(await A(d,m))return!0;try{return await d.getDirectoryHandle(m),!0}catch{return!1}},async remove(c,E){n||await p();let d;try{d=await T(E.slice(0,-1),!1)}catch(m){throw m?.name==="TypeMismatchError"?hn(c):m}await d.removeEntry(E[E.length-1])},async clear(){n||await p();for await(let c of n.keys())await n.removeEntry(c,{recursive:!0});l.clear(),l.set("",n)}}}var Nt="node:";var mn=typeof process<"u"&&!!process.release&&process.release.name==="node",B=null,M=null,Z=null;function Ln({name:t,ifAvailable:n=!1}){return typeof navigator>"u"||!navigator.locks?Promise.reject(new Error("Web Locks are unavailable in this context")):new Promise((r,s)=>{navigator.locks.request(t,{mode:"exclusive",ifAvailable:n},f=>{if(!f){r(!1);return}return r(!0),new Promise(a=>{Z=a})}).catch(s)})}function ge(t){return`${t?.name??"Error"}: ${t?.message??String(t)}`}function yn(t){if(!t||!t.pattern||!(t.ms>0))return;let n=new RegExp(t.pattern);return r=>n.test(r)?t.ms:0}async function wn(t,n){let r=t.role==="reader"?"reader":"writer";if(t.lock?.name&&!await Ln(t.lock)){let l=new Error(`the store lock ${t.lock.name} is held by another context`);throw l.name="LockUnavailableError",l}t.backend==="memory"?M=wt({maxBytes:t.memoryMaxBytes}):M=xt({rootDirectory:t.rootDirectory,handleMode:t.handleMode??"auto",openDelayMs:yn(t.openDelay),busyRetry:t.busyRetry??void 0});let s={backend:M.kind,role:r,lock:t.lock?.name??null};M.init&&Object.assign(s,await M.init());let f=t.mirror?.buffer?{buffer:t.mirror.buffer,match:pt(t.mirror.suffixes??["/h.fsh"]),write:t.mirror.write??r==="writer"}:null;return B=yt({buffer:t.buffer,backend:M,chunkBytes:t.chunkBytes??Ce,doorbell:t.doorbell??"auto",mirror:f,onEvent(a){(a.type==="loop-error"||a.type==="step-error")&&n({t:"event",event:{type:a.type,error:ge(a.error)}})}}),s.doorbellMode=B.doorbellMode===1?"message":"atomics",B.start().catch(a=>{setTimeout(()=>{throw a},0)}),s}async function Ct(t,n){switch(t?.t){case"init":try{let r=await wn(t,n);n({t:"ready",ok:!0,info:r})}catch(r){Z?.(),Z=null,n({t:"ready",ok:!1,error:ge(r),lockUnavailable:r?.name==="LockUnavailableError"})}return;case"attach":n({t:"attached",instanceId:t.instanceId,ok:!!B?.attachMemory(t.instanceId,t.memory)});return;case"detach":B?.detachMemory(t.instanceId);return;case"preopen":{let r=B?await B.preopen(t.paths??[],t.flags):[];n({t:"preopened",id:t.id,statuses:r});return}case"release-preopen":B?.releasePreopen(t.paths??[]);return;case"stats":n({t:"stats",id:t.id,stats:B?{...B.stats}:null,inventory:B?B.inventory():null,usage:M?.usage?M.usage():null});return;case"reset":M?.reset?.(),n({t:"reset",id:t.id});return;case"clear":try{await M?.clear?.(),n({t:"cleared",id:t.id,ok:!0})}catch(r){n({t:"cleared",id:t.id,ok:!1,error:ge(r)})}return;case"stop":await B?.stop(),B=null,Z?.(),Z=null,n({t:"stopped",id:t.id});return;default:}}function Bn(){let t=n=>self.postMessage(n);self.onmessage=n=>{Ct(n.data,t)}}async function xn(){let t=Nt+"worker_threads",{parentPort:n}=await import(t);if(!n)return;let r=s=>n.postMessage(s);n.on("message",s=>{Ct(s,r)})}mn?xn():typeof self<"u"&&typeof self.postMessage=="function"&&typeof window>"u"&&Bn();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var ct=new TextDecoder,it=new TextEncoder,J="$bin";function at(e){return e instanceof Uint8Array||e instanceof ArrayBuffer||ArrayBuffer.isView(e)}function ut(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function z(e,t){if(e==null)return e??null;if(at(e)){let r=t.length;return t.push(ut(e)),{[J]:r}}return e instanceof Date?e.toISOString():typeof e=="bigint"?e.toString():Array.isArray(e)?e.map(r=>z(r,t)):typeof e=="object"?Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0).map(([r,n])=>[r,z(n,t)])):e}function P(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(r=>P(r,t));if(typeof e=="object"){let r=Object.keys(e);if(r.length===1&&r[0]===J){let n=e[J];if(!Number.isInteger(n)||n<0||n>=t.length)throw new RangeError(`Hostcall envelope references missing binary segment ${n}.`);return t[n]}return Object.fromEntries(r.map(n=>[n,P(e[n],t)]))}return e}function ee(e,t=[]){let r=it.encode(JSON.stringify(e??null)),n=4+r.length+4;for(let E of t)n+=4+E.length;let o=new Uint8Array(n),c=new DataView(o.buffer),a=0;c.setUint32(a,r.length,!0),a+=4,o.set(r,a),a+=r.length,c.setUint32(a,t.length,!0),a+=4;for(let E of t)c.setUint32(a,E.length,!0),a+=4,o.set(E,a),a+=E.length;return o}function W(e){if(!(e instanceof Uint8Array))throw new TypeError("Hostcall envelope must be a Uint8Array.");if(e.length<8)throw new RangeError("Hostcall envelope is truncated.");let t=new DataView(e.buffer,e.byteOffset,e.byteLength),r=0,n=t.getUint32(r,!0);if(r+=4,r+n+4>e.length)throw new RangeError("Hostcall envelope meta exceeds envelope bounds.");let o=JSON.parse(ct.decode(e.subarray(r,r+n)));r+=n;let c=t.getUint32(r,!0);r+=4;let a=[];for(let E=0;E<c;E+=1){if(r+4>e.length)throw new RangeError("Hostcall envelope segment table is truncated.");let d=t.getUint32(r,!0);if(r+=4,r+d>e.length)throw new RangeError("Hostcall envelope segment exceeds envelope bounds.");a.push(e.subarray(r,r+d)),r+=d}return{meta:o,segments:a}}function fe(e){let{meta:t,segments:r}=W(e);return P(t,r)}var lt=new TextDecoder,re="space_data_module_host",v=0,te=1,Br=Object.freeze(["host.runtimeTarget","host.listCapabilities","host.listSupportedCapabilities","host.listOperations","host.hasCapability","clock.now","clock.monotonicNow","clock.nowIso","random.bytes","schedule.parse","schedule.matches","schedule.next","filesystem.resolvePath"]);function ft(e,t){let r=String(e??"").trim();if(!r)throw new TypeError(`${t} is required.`);return r}function Ae(e){if(typeof e!="function")throw new TypeError("getMemory must be a function returning WebAssembly.Memory.");let t=e();if(!t||typeof t!="object"||!("buffer"in t))throw new TypeError("getMemory must return a WebAssembly.Memory-like object.");let r=t.buffer;if(!(r instanceof ArrayBuffer||r instanceof SharedArrayBuffer))throw new TypeError("Hostcall memory buffer must be an ArrayBuffer or SharedArrayBuffer.");return r}function _e(e,t,r,n){if(!Number.isInteger(t)||t<0)throw new RangeError(`${n} pointer must be a non-negative integer.`);if(!Number.isInteger(r)||r<0)throw new RangeError(`${n} length must be a non-negative integer.`);let o=Ae(e);if(t+r>o.byteLength)throw new RangeError(`${n} range exceeds guest memory bounds.`);return new Uint8Array(o,t,r)}function _t(e,t,r,n){if(!Number.isInteger(t)||t<0)throw new RangeError("Response pointer must be a non-negative integer.");if(!Number.isInteger(n)||n<0)throw new RangeError("Response max length must be a non-negative integer.");let o=r instanceof Uint8Array?r:new Uint8Array(r),c=Ae(e),a=Math.min(o.length,n);if(t+a>c.byteLength)throw new RangeError("Response range exceeds guest memory bounds.");return new Uint8Array(c,t,a).set(o.subarray(0,a)),a}function Et(e){if(e.length===0)return null;let{meta:t,segments:r}=W(e);return P(t,r)}function Ee(e,t=null){return{name:e?.name??"Error",message:e?.message??String(e),code:e?.code??null,operation:e?.operation??t,capability:e?.capability??null}}function At(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function de(e={}){let t=e.dispatch;if(typeof t!="function")throw new TypeError("createHostcallBridge requires a dispatch function.");let r=e.getMemory,n=ft(e.moduleName??re,"Hostcall import module name"),o=Number.isInteger(e.maxRequestBytes)?e.maxRequestBytes:16*1024*1024,c=Number.isInteger(e.maxResponseBytes)?e.maxResponseBytes:64*1024*1024,a=v,E={ok:!0,result:null},d=ee(E,[]);function p(s,i){let u=[],m=z(i,u),S=ee(m,u);if(S.length>c)throw new Error(`Hostcall response exceeds ${c} byte limit.`);a=s,E=i,d=S}function A(s,i,u,m){try{if(m>o)throw new Error(`Hostcall request exceeds ${o} byte limit.`);let S=lt.decode(_e(r,s,i,"Operation")),w=Et(_e(r,u,m,"Payload")),L=t(S,w);if(At(L))throw new Error(`Operation "${S}" returned a Promise. The synchronous hostcall ABI only supports synchronous operations.`);return p(v,{ok:!0,result:L===void 0?null:L}),v}catch(S){try{p(te,{ok:!1,error:Ee(S)})}catch(w){p(te,{ok:!1,error:Ee(w)})}return te}}function T(){return d.length}function f(s,i){return _t(r,s,d,i)}function _(){return p(v,{ok:!0,result:null}),v}function h(){return a}return{moduleName:n,imports:{[n]:{call:A,response_len:T,read_response:f,clear_response:_,last_status_code:h}},getLastEnvelope(){return structuredClone(E)},getLastResponseBytes(){return new Uint8Array(d)},getLastResponseEnvelope(){let{meta:s,segments:i}=W(d);return P(s,i)}}}var Cr=Object.freeze({READ:1,WRITE:2,CREATE:4,EXCL:8,TRUNC:16,DELETE_ON_CLOSE:32,PROBE:64,UNLINK:128,CREATE_PARENTS:256,UNLINK_IF_UNUSED:512,OPEN_DEFERRED:1024}),Nr=Object.freeze({OK:0,GENERIC:-1,NOENT:-2,ACCESS:-3,IO:-4,NOSPACE:-5,BADHANDLE:-6,BUSY:-7});var Dr=Object.freeze(["flatsql_io_open","flatsql_io_read","flatsql_io_write","flatsql_io_truncate","flatsql_io_sync","flatsql_io_size","flatsql_io_close"]),j=4096;var Fr=typeof TextDecoder=="function"?new TextDecoder("utf-8",{fatal:!0}):null;function Se(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e[r],t=Math.imul(t,16777619);return t>>>0}var dt=1330201683,St=1,pt=0,yt=1,mt=2,ht=3,Rt=4,ye=5;var Ot=7;var It=9,Z=10,Tt=11;var gt=13,ge=64,me=ge*4;var wt=1;var xt=1,Lt=2,Bt=3,k=32767,V=0,we=1,he=2,bt=3,Ct=4,Nt=5,Dt=6,Ft=7,Mt=8,Ht=9,Re=10,xe=11,Ut=12,Pt=13,Qt=8,Le=9,ne=128,oe=0,vt=1,qt=2;var kt=4,Vt=0;var Yt=0,Gt=1,$t=1,q=2,X=3,Kt=4,zt=5,Wt=6,jt=7;var Ur=64*1024;var Oe=250,Xt=20;function Ie(){return typeof performance<"u"&&performance.now?performance.now():Date.now()}function Zt(e,t){return Math.ceil(e/t)*t}function Be(e){if(typeof SharedArrayBuffer!="function"||!(e instanceof SharedArrayBuffer))throw new TypeError("The SAB I/O channel requires a SharedArrayBuffer (cross-origin isolation in browsers).")}function Jt(e){Be(e);let t=new Int32Array(e,0,ge);if(t[pt]!==dt||t[yt]!==St)throw new TypeError("Not a SAB I/O channel buffer (bad magic or version).");let r=t[mt],n=t[ht],o=t[Rt],c=t[Tt],a=Zt(me+o*4,64),E=new Int32Array(e,me,o),d=[];for(let p=0;p<r;p+=1){let A=a+p*n;d.push({index:p,base:A,i32:new Int32Array(e,A,ne/4),f64:new Float64Array(e,A,ne/8),data:new Uint8Array(e,A+ne,c)})}return{buffer:e,header:t,instances:E,slots:d,slotCount:r,slotBytes:n,dataBytes:c,maxInstances:o,channelId:t[gt]}}function er(e){return`sdm-sab-io-doorbell-${e}`}function tr(e,t){Atomics.add(e.header,ye,1),Atomics.notify(e.header,ye),Atomics.load(e.header,Ot)===wt&&t()?.postMessage(0)}function rr(e){let t=null;return{get(){return!t&&typeof BroadcastChannel=="function"&&(t=new BroadcastChannel(e)),t},close(){t?.close(),t=null}}}var nr=typeof TextEncoder=="function"?new TextEncoder:null;function or(){return(Math.random()*2147483646|0)+1}function sr(e,t){let r=(Atomics.add(e.header,It,1)>>>0)%e.slotCount;for(let n=0;n<e.slotCount;n+=1){let o=e.slots[(r+n)%e.slotCount];if(Atomics.compareExchange(o.i32,V,oe,vt)===oe)return Atomics.store(o.i32,we,t),o}return null}function Te(e,t){Atomics.store(t.i32,we,0),Atomics.store(t.i32,V,oe),Atomics.add(e.header,Z,1),Atomics.notify(e.header,Z)}function cr(e,t,r){let n=e.i32;n[Ct]=t,n[Nt]=r.instanceId??k,n[Dt]=r.handle??-1,n[Ft]=r.flags??0,n[Mt]=r.ptr??0,n[Ht]=r.len??0,n[Pt]=r.dataInSlot?Gt:Yt,n[xe]=0,e.f64[Qt]=r.offset??0,e.f64[Le]=0,r.path?(e.data.set(r.path,0),n[Re]=r.path.length):n[Re]=0}function ir(e){return Atomics.load(e.i32,xe)}function be(e={}){Be(e.buffer);let t=Jt(e.buffer),r=Number.isInteger(e.instanceId)?e.instanceId:k;if(r!==k&&(r<0||r>=t.maxInstances))throw new RangeError(`instanceId ${r} is outside 0..${t.maxInstances-1}.`);let n=typeof e.getMemory=="function"?e.getMemory:()=>null,o=Number.isFinite(e.spinMicros)?Math.max(0,e.spinMicros):Xt,c=or(),a=rr(er(t.channelId)),E=0;function d(){for(;;){let s=Atomics.load(t.header,Z),i=sr(t,c);if(i)return i;Atomics.wait(t.header,Z,s,Oe)}}function p(s,i,u){let m=Atomics.load(s.i32,he)+1|0||1;cr(s,i,u),Atomics.store(s.i32,Ut,Vt),Atomics.store(s.i32,he,m),Atomics.store(s.i32,V,qt),tr(t,a.get);let S=o>0?Ie()+o/1e3:0;for(;;){let w=Atomics.load(s.i32,V);if(w===kt&&Atomics.load(s.i32,bt)===m)break;S>0&&Ie()<S||Atomics.wait(s.i32,V,w,Oe)}return E+=1,{status:ir(s),result:s.f64[Le]}}function A(s,i){let u=d();try{return p(u,s,i)}finally{Te(t,u)}}function T(){return r!==k&&Atomics.load(t.instances,r)===xt}function f(){if(r===k)return!1;let s=Atomics.load(t.instances,r);return s===Lt||s===Bt}function _(s,i,u,m){let S=0;for(;S<u.length;){let w=Math.min(t.dataBytes,u.length-S),L=d(),b;try{s===X&&L.data.set(u.subarray(S,S+w),0),b=p(L,s,{instanceId:r,dataInSlot:!0,handle:i,ptr:0,len:w,offset:m+S}).status,s===q&&b>0&&u.set(L.data.subarray(0,b),S)}finally{Te(t,L)}if(b<0)return S>0&&s===q?S:b;if(S+=b,b<w)break}return S}function h(s,i){let u=n(),m=u?.buffer??u;return!m||s<0||i<0||s+i>m.byteLength?null:new Uint8Array(m,s,i)}return{instanceId:r,get requests(){return E},open(s,i){let u=typeof s=="string"?nr.encode(s):s;return!(u instanceof Uint8Array)||u.length===0?-1:u.length>Math.min(t.dataBytes,j)?-1:A($t,{instanceId:r,flags:i|0,path:u}).status},read(s,i,u,m){if(u===0)return 0;if(T())return A(q,{instanceId:r,handle:s,ptr:i,len:u,offset:m}).status;let S=h(i,u);return S?_(q,s,S,m):f()?-3:-1},write(s,i,u,m){if(u===0)return 0;if(T())return A(X,{instanceId:r,handle:s,ptr:i,len:u,offset:m}).status;let S=h(i,u);return S?_(X,s,S,m):f()?-3:-1},readInto(s,i,u){return i.length===0?0:_(q,s,i,u)},writeFrom(s,i,u){return i.length===0?0:_(X,s,i,u)},truncate(s,i){return A(Kt,{instanceId:r,handle:s,offset:i}).status},sync(s){return A(zt,{instanceId:r,handle:s}).status},size(s){let{status:i,result:u}=A(Wt,{instanceId:r,handle:s});return i<0?i:u},close(s){return A(jt,{instanceId:r,handle:s}).status},release(){a.close()}}}var ar=typeof TextEncoder=="function"?new TextEncoder:null;function ur(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e[r],t=Math.imul(t,16777619);return t|0}var Ce=new WeakMap;function Ne(e){let t=Ce.get(e);if(t)return t;let r=new Int32Array(e,0,16);if(r[0]!==1380795475||r[1]!==1)throw new TypeError("Not a SAB I/O mirror buffer.");let n=r[2],o=r[3],c=r[4],a=16*4,E=a+n*32,d=E+n*c;return t={entries:n,entryBytes:o,maxPathBytes:c,i32:new Int32Array(e,a,n*32/4),f64:new Float64Array(e,a,n*32/8),paths:new Uint8Array(e,E,n*c),data:new Uint8Array(e,d,n*o)},Ce.set(e,t),t}function lr(e){return typeof e=="string"?ar.encode(e):e}function fr(e,t,r){let n=t*8;if(Atomics.load(e.i32,n+3)!==r.length)return!1;let o=t*e.maxPathBytes;for(let c=0;c<r.length;c+=1)if(e.paths[o+c]!==r[c])return!1;return!0}function _r(e,t,r){let n=(r>>>0)%e.entries;for(let o=0;o<e.entries;o+=1){let c=n*8,a=Atomics.load(e.i32,c+0);if(a===0)return-1;if((a===2||a===3)&&Atomics.load(e.i32,c+2)===r&&fr(e,n,t))return n;n=(n+1)%e.entries}return-1}function De(e,t){let r=Ne(e),n=lr(t);if(n.length>r.maxPathBytes)return-1;let o=_r(r,n,ur(n));return o<0?-1:Atomics.load(r.i32,o*(32/4)+0)===2?o:-1}function Fe(e,t,r,n){let o=Ne(e),c=t*(32/4),a=t*(32/8)+3,E=t*o.entryBytes;for(let d=0;d<64;d+=1){let p=Atomics.load(o.i32,c+1);if(p&1)continue;if(Atomics.load(o.i32,c+0)!==2)return-1;let A=o.f64[a],T=Atomics.load(o.i32,c+4),f;if(n>=A)f=0;else{let _=Math.min(r.length,A-n);n+_>T?f=-1:(r.set(o.data.subarray(E+n,E+n+_),0),f=_)}if(Atomics.load(o.i32,c+1)===p)return f}return-1}function Me(e=["/h.fsh"]){let t=Array.from(e,String);return r=>{let n=String(r);for(let o of t)if(n.endsWith(o)||n===o.replace(/^\//,""))return!0;return!1}}var Er="flatsql-io",N=Object.freeze({open:1,read:2,write:3,truncate:4,sync:5,size:6,close:7,mirrorRead:8}),He=24,Ue=16777215;function se(){return typeof performance<"u"&&performance.now?performance.now()*1e3:Date.now()*1e3}function Ar(e){if(!e?.buffer)return null;let t=new Int32Array(e.buffer,0,4),r=t[1],n=new Float64Array(e.buffer,16,r),o=new Uint8Array(e.buffer,16+r*8,r);return(c,a)=>{let E=Atomics.add(t,0,1);E<r&&(n[E]=se()-a,o[E]=c)}}function dr(e,t,r){if(!e||r<=0||r>j||t<0)return null;let n=e.buffer??e;return t+r>n.byteLength?null:new Uint8Array(n,t,r).slice()}function Sr(e={}){let t=e.getMemory;if(typeof t!="function")throw new TypeError("createFlatsqlIoImports requires getMemory().");let r=Array.isArray(e.provider)?e.provider:[e.provider];if(r.length===0||r.some(f=>!f||typeof f.open!="function"))throw new TypeError("createFlatsqlIoImports requires at least one provider.");if(r.length>127)throw new RangeError("At most 127 providers can be routed.");let n=r.length>1,o=Ar(e.trace),c=e.mirror?.buffer??null,a=c?Me(e.mirror.suffixes??["/h.fsh"]):null,E=new Map,d=new TextDecoder;function p(f){if(!n)return{provider:r[0],local:f};let _=f>>>He,h=r[_];return h?{provider:h,local:f&Ue}:null}function A(f,_,h){let s=o?se():0,i;try{i=h()}catch{i=_}return o&&o(f,s),i}return{env:{flatsql_io_open(f,_,h){return A(N.open,-1,()=>{let s=dr(t(),f,_);if(!s)return-1;let i=n?Se(s)%r.length:0,u=r[i].open(s,h|0);if(u<0)return u;if(n&&u>Ue)return-4;let m=n?i<<He|u:u;if(a){let S=d.decode(s);a(S)&&E.set(m,S)}return m})},flatsql_io_read(f,_,h,s){if(c&&E.has(f)){let i=o?se():0;try{let u=t(),m=u.buffer??u;if(_>=0&&h>=0&&_+h<=m.byteLength){let S=De(c,E.get(f));if(S>=0){let w=Fe(c,S,new Uint8Array(m,_,h),s);if(w>=0)return o&&o(N.mirrorRead,i),w}}}catch{}}return A(N.read,-4,()=>{let i=p(f);return i?i.provider.read(i.local,_,h,s):-6})},flatsql_io_write(f,_,h,s){return A(N.write,-4,()=>{let i=p(f);return i?i.provider.write(i.local,_,h,s):-6})},flatsql_io_truncate(f,_){return A(N.truncate,-4,()=>{let h=p(f);return h?h.provider.truncate(h.local,_):-6})},flatsql_io_sync(f){return A(N.sync,-4,()=>{let _=p(f);return _?_.provider.sync(_.local):-6})},flatsql_io_size(f){return A(N.size,-4,()=>{let _=p(f);return _?_.provider.size(_.local):-6})},flatsql_io_close(f){return A(N.close,-4,()=>{E.delete(f);let _=p(f);return _?_.provider.close(_.local):-6})}}}}function pr(e,{getMemory:t}){let r=Array.isArray(e.channels)?e.channels:[e.channel??e.buffer];if(r.length===0||r.some(c=>!(c instanceof SharedArrayBuffer)))throw new TypeError("A flatsql-io descriptor needs channels: SharedArrayBuffer[].");let n=r.map(c=>be({buffer:c,instanceId:e.instanceId,getMemory:t}));return{imports:Sr({getMemory:t,provider:n,mirror:e.mirror,trace:e.trace}),close(){for(let c of n)c.release()}}}function Pe(e,t){let r=[],n=[];for(let o of e??[]){let c;if(typeof o=="function")c=o(t);else if(o&&o.provider===Er)c=pr(o,t);else if(o&&typeof o.factory=="function")c=o.factory({...t,config:o.config});else throw new TypeError(`Unresolvable extraImports entry ${JSON.stringify(o?.provider??o?.moduleUrl??typeof o)}; pass a factory function, a { provider: "flatsql-io" } descriptor, or (module workers) a { moduleUrl } descriptor.`);c&&c.imports&&typeof c.close=="function"?(r.push(c.imports),n.push(c.close)):c&&r.push(c)}return{fragments:r,close(){for(let o of n)try{o()}catch{}}}}function Qe(e,t){for(let r of t)for(let[n,o]of Object.entries(r??{}))e[n]={...e[n]??{},...o};return e}var Y=0,yr=1,mr=2,qe=4,ce=0,ve=1;var hr=0;var ie=qe*4,Rr=4*1024*1024;function Or(e){if(typeof SharedArrayBuffer!="function"||!(e instanceof SharedArrayBuffer))throw new TypeError("SAB hostcall channel requires a SharedArrayBuffer (cross-origin isolation in browsers).")}function ke(e={}){if(typeof SharedArrayBuffer!="function")throw new Error("SharedArrayBuffer is unavailable; the async hostcall bridge requires it (browsers additionally require cross-origin isolation: COOP+COEP).");let t=Number.isInteger(e.maxResponseBytes)?e.maxResponseBytes:Rr;if(t<=0)throw new RangeError("maxResponseBytes must be a positive integer.");return new SharedArrayBuffer(ie+t)}function Ve(e={}){Or(e.buffer);let t=e.postRequest;if(typeof t!="function")throw new TypeError("createSabHostcallClientDispatch requires a postRequest function.");let r=Number.isFinite(e.timeoutMs)&&e.timeoutMs>0?e.timeoutMs:12e4,n=new Int32Array(e.buffer,0,qe),o=e.buffer.byteLength-ie;return function(a,E=null){if(Atomics.store(n,Y,ve),t({operation:a,params:E}),Atomics.wait(n,Y,ve,r)==="timed-out")throw Atomics.store(n,Y,ce),new Error(`Hostcall "${a}" timed out after ${r}ms waiting for the controlling thread.`);let p=Atomics.load(n,yr),A=Atomics.load(n,mr);if(A<0||A>o)throw Atomics.store(n,Y,ce),new RangeError(`Hostcall "${a}" response length ${A} exceeds channel capacity ${o}.`);let T=new Uint8Array(A);T.set(new Uint8Array(e.buffer,ie,A)),Atomics.store(n,Y,ce);let f=fe(T);if(p!==hr){let _=new Error(f?.message??`Hostcall "${a}" failed on the host thread.`);throw _.name=f?.name??"Error",_.code=f?.code??null,_.operation=f?.operation??a,_.capability=f?.capability??null,_}return f}}var ae=class extends Error{constructor(t){super(`WASI exit with code ${t}`),this.name="WasiExitError",this.code=t}};function Ir(e,t,r,n){for(;;){let o=Atomics.load(e,t);if(r>n-o)return-1;if(Atomics.compareExchange(e,t,o,o+r)===o)return o}}function Ye(e={}){let t=e.processState,r=t?.args??e.args??[],n=t?.env??e.env??{},o=t?.input??new Uint8Array(e.stdinBytes??[]),c=e.logOutput===!0,a=e.performance??globalThis.performance??{now:()=>Date.now(),timeOrigin:0},E=e.crypto??globalThis.crypto??null,d=[],p=[],A=0,T=null;function f(l){T=l}function _(){return T}function h(){return new Uint8Array(T.buffer)}function s(){return new DataView(T.buffer)}let u=Object.entries(n).map(([l,y])=>`${l}=${y}`).map(l=>new TextEncoder().encode(l)),m=r.map(l=>new TextEncoder().encode(l));function S(l,y,O){let I;if(l===0)I=BigInt(Math.round((a.timeOrigin+a.now())*1e6));else if(l===1)I=BigInt(Math.round(a.now()*1e6));else return 28;return s().setBigUint64(O,I,!0),0}function w(l,y,O,I){if(l!==1&&l!==2)return 8;let R=l===1?d:p,g=0,M=s(),H=h();for(let U=0;U<O;U++){let K=y+U*8,D=M.getUint32(K,!0),x=M.getUint32(K+4,!0);if(t){let B=l===1?t.stdout:t.stderr,le=Ir(t.control,l,x,B.length);if(le<0)return 51;B.set(H.subarray(D,D+x),le)}else R.push(H.slice(D,D+x));g+=x}return M.setUint32(I,g,!0),0}function L(l,y,O,I){if(l!==0)return s().setUint32(I,0,!0),8;let R=s(),g=h(),M=0;for(let H=0;H<O;H+=1){let U=y+H*8,K=R.getUint32(U,!0),D=R.getUint32(U+4,!0),x,B;if(t)do x=Atomics.load(t.control,0),B=Math.min(D,o.length-x);while(Atomics.compareExchange(t.control,0,x,x+B)!==x);else x=A,B=Math.min(D,o.length-x),A+=B;if(B===0){if(x>=o.length)break;continue}g.set(o.subarray(x,x+B),K),M+=B}return R.setUint32(I,M,!0),0}function b(l){return l<=2?0:8}function Ke(l,y,O,I){return l<=2?70:8}function ze(l,y){if(l>2)return 8;let O=s();return O.setUint8(y,2),O.setUint16(y+2,0,!0),O.setBigUint64(y+8,0n,!0),O.setBigUint64(y+16,0n,!0),0}function We(l,y){return l<=2?0:8}function je(l,y){return 8}function Xe(l,y,O){return 8}function Ze(){return 8}function Je(l,y){let O=s();O.setUint32(l,u.length,!0);let I=0;for(let R of u)I+=R.length+1;return O.setUint32(y,I,!0),0}function et(l,y){let O=s(),I=h(),R=y;for(let g=0;g<u.length;g++)O.setUint32(l+g*4,R,!0),I.set(u[g],R),R+=u[g].length,I[R]=0,R+=1;return 0}function tt(l,y){let O=s();O.setUint32(l,m.length,!0);let I=0;for(let R of m)I+=R.length+1;return O.setUint32(y,I,!0),0}function rt(l,y){let O=s(),I=h(),R=y;for(let g=0;g<m.length;g++)O.setUint32(l+g*4,R,!0),I.set(m[g],R),R+=m[g].length,I[R]=0,R+=1;return 0}function nt(l,y){return E?.getRandomValues?(E.getRandomValues(h().subarray(l,l+y)),0):52}function ot(l){throw t&&(Atomics.store(t.control,4,l),Atomics.store(t.control,3,1)),c&&ue(),new ae(l)}function st(){return 0}function ue(){if(d.length>0){let l=$(d);if(c){let y=new TextDecoder().decode(l);y&&console.log(y)}d.length=0}if(p.length>0){let l=$(p);if(c){let y=new TextDecoder().decode(l);y&&console.warn(y)}p.length=0}}function $(l){let y=0;for(let R of l)y+=R.length;let O=new Uint8Array(y),I=0;for(let R of l)O.set(R,I),I+=R.length;return O}return{imports:{wasi_snapshot_preview1:{clock_time_get:S,fd_write:w,fd_read:L,fd_close:b,fd_seek:Ke,fd_fdstat_get:ze,fd_fdstat_set_flags:We,fd_prestat_get:je,fd_prestat_dir_name:Xe,path_open:Ze,environ_sizes_get:Je,environ_get:et,args_sizes_get:tt,args_get:rt,random_get:nt,proc_exit:ot,sched_yield:st}},setMemory:f,getMemory:_,flushOutput:ue,get stdout(){return t?t.stdout.slice(0,Atomics.load(t.control,1)):$(d)},get stderr(){return t?t.stderr.slice(0,Atomics.load(t.control,2)):$(p)}}}var Tr="sdm.thread-hostcall";function gr(e){return WebAssembly.Module.imports(e).some(t=>t.module===re)}function wr(e){if(!e||typeof e!="object")throw new Error("A threaded guest that imports space_data_module_host requires an owning hostcall channel.");let t=String(e.channelName??"").trim(),r=String(e.token??"").trim();if(!t||!r)throw new Error("The owning thread-hostcall channel name and token are required.");if(typeof BroadcastChannel!="function")throw new Error("BroadcastChannel is required for nested pthread hostcalls.");let n=ke({maxResponseBytes:e.maxResponseBytes}),o=new BroadcastChannel(t),c=1;return{dispatch:Ve({buffer:n,timeoutMs:e.timeoutMs,postRequest(E){o.postMessage({type:Tr,token:r,requestId:c++,buffer:n,...E})}}),close(){o.close()}}}function Ge({wasmModule:e,memory:t,hostcallChannel:r,processState:n,extraImports:o,workerIndex:c,tid:a}={}){let E=Ye({processState:n});E.setMemory(t);let d=null,p=null,A={...E.imports,env:{memory:t},wasi:{"thread-spawn":()=>-1}};if(gr(e)){p=wr(r);let f=de({dispatch:p.dispatch,getMemory:()=>d?.exports?.memory??t});Object.assign(A,f.imports)}let T=Pe(o,{memory:t,getMemory:()=>d?.exports?.memory??t,workerIndex:c??null,tid:a??null});return Qe(A,T.fragments),A.env.memory=t,{imports:A,instantiate(){return d=new WebAssembly.Instance(e,A),E.setMemory(d.exports.memory??t),d},close(){p?.close(),T.close()}}}async function $e(e){let t=[];for(let r of e??[])if(r&&typeof r.moduleUrl=="string"){let o=(await import(r.moduleUrl))[r.exportName??"default"];if(typeof o!="function")throw new TypeError(`extraImports module ${r.moduleUrl} exports no factory "${r.exportName??"default"}".`);t.push({factory:o,config:r.config??null})}else t.push(r);return t}var G=null;self.onmessage=async e=>{let t=e.data??{};if(t.t==="probe"){try{let r=await $e(t.extraImports??[]);G=Ge({wasmModule:t.wasmModule,memory:t.memory,hostcallChannel:t.hostcallChannel??null,processState:t.processState,extraImports:r,workerIndex:t.workerIndex}),G.instantiate(),self.postMessage({t:"ready",ok:!0})}catch(r){G?.close(),G=null,self.postMessage({t:"ready",ok:!1,error:String(r?.message??r)})}return}if(t.t==="run"){try{G.instantiate().exports.wasi_thread_start(t.tid,t.startArg)}catch(r){r&&r.name==="WasiExitError"||(console.error(`[wasi-thread] guest thread ${t.tid} trapped:`,r),self.postMessage({t:"error",tid:t.tid,error:String(r?.message??r)}))}self.postMessage({t:"exit",tid:t.tid})}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|