@dolthub/doltlite-wasm 0.11.26 → 0.11.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dolthub/doltlite-wasm",
3
- "version": "0.11.26",
3
+ "version": "0.11.28",
4
4
  "description": "DoltLite compiled to WebAssembly: SQLite with Dolt-style version control (branches, commits, merge, diff) for the browser and any JS runtime.",
5
5
  "type": "module",
6
6
  "main": "index.mjs",
@@ -4239,6 +4239,65 @@ async function createWasm() {
4239
4239
  }
4240
4240
 
4241
4241
 
4242
+ function ___syscall_getdents64(fd, dirp, count) {
4243
+ try {
4244
+
4245
+ var stream = SYSCALLS.getStreamFromFD(fd)
4246
+ stream.getdents ||= FS.readdir(stream.path);
4247
+
4248
+ var struct_size = 280;
4249
+ var pos = 0;
4250
+ var off = FS.llseek(stream, 0, 1);
4251
+
4252
+ var startIdx = Math.floor(off / struct_size);
4253
+ var endIdx = Math.min(stream.getdents.length, startIdx + Math.floor(count/struct_size))
4254
+ for (var idx = startIdx; idx < endIdx; idx++) {
4255
+ var id;
4256
+ var type;
4257
+ var name = stream.getdents[idx];
4258
+ if (name === '.') {
4259
+ id = stream.node.id;
4260
+ type = 4; // DT_DIR
4261
+ }
4262
+ else if (name === '..') {
4263
+ var lookup = FS.lookupPath(stream.path, { parent: true });
4264
+ id = lookup.node.id;
4265
+ type = 4; // DT_DIR
4266
+ }
4267
+ else {
4268
+ var child;
4269
+ try {
4270
+ child = FS.lookupNode(stream.node, name);
4271
+ } catch (e) {
4272
+ // If the entry is not a directory, file, or symlink, nodefs
4273
+ // lookupNode will raise EINVAL. Skip these and continue.
4274
+ if (e?.errno === 28) {
4275
+ continue;
4276
+ }
4277
+ throw e;
4278
+ }
4279
+ id = child.id;
4280
+ type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.
4281
+ FS.isDir(child.mode) ? 4 : // DT_DIR, directory.
4282
+ FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.
4283
+ 8; // DT_REG, regular file.
4284
+ }
4285
+ HEAP64[((dirp + pos)>>3)] = BigInt(id);
4286
+ HEAP64[(((dirp + pos)+(8))>>3)] = BigInt((idx + 1) * struct_size);
4287
+ HEAP16[(((dirp + pos)+(16))>>1)] = 280;
4288
+ HEAP8[(dirp + pos)+(18)] = type;
4289
+ stringToUTF8(name, dirp + pos + 19, 256);
4290
+ pos += struct_size;
4291
+ }
4292
+ FS.llseek(stream, idx * struct_size, 0);
4293
+ return pos;
4294
+ } catch (e) {
4295
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
4296
+ return -e.errno;
4297
+ }
4298
+ }
4299
+
4300
+
4242
4301
  function ___syscall_ioctl(fd, op, varargs) {
4243
4302
  SYSCALLS.varargs = varargs;
4244
4303
  try {
@@ -4411,6 +4470,21 @@ async function createWasm() {
4411
4470
  }
4412
4471
  }
4413
4472
 
4473
+ function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {
4474
+ try {
4475
+
4476
+ oldpath = SYSCALLS.getStr(oldpath);
4477
+ newpath = SYSCALLS.getStr(newpath);
4478
+ oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);
4479
+ newpath = SYSCALLS.calculateAt(newdirfd, newpath);
4480
+ FS.rename(oldpath, newpath);
4481
+ return 0;
4482
+ } catch (e) {
4483
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
4484
+ return -e.errno;
4485
+ }
4486
+ }
4487
+
4414
4488
  function ___syscall_rmdir(path) {
4415
4489
  try {
4416
4490
 
@@ -4510,15 +4584,6 @@ async function createWasm() {
4510
4584
  }
4511
4585
  }
4512
4586
 
4513
-
4514
-
4515
-
4516
- var __emscripten_lookup_name = (name) => {
4517
- // uint32_t _emscripten_lookup_name(const char *name);
4518
- var nameString = UTF8ToString(name);
4519
- return inetPton4(DNS.lookup_name(nameString));
4520
- };
4521
-
4522
4587
  function __gmtime_js(time, tmPtr) {
4523
4588
  time = bigintToI53Checked(time);
4524
4589
 
@@ -5022,6 +5087,219 @@ async function createWasm() {
5022
5087
  }
5023
5088
 
5024
5089
 
5090
+
5091
+
5092
+
5093
+
5094
+
5095
+
5096
+
5097
+
5098
+
5099
+ /** @param {number=} addrlen */
5100
+ var writeSockaddr = (sa, family, addr, port, addrlen) => {
5101
+ switch (family) {
5102
+ case 2:
5103
+ addr = inetPton4(addr);
5104
+ zeroMemory(sa, 16);
5105
+ if (addrlen) {
5106
+ HEAP32[((addrlen)>>2)] = 16;
5107
+ }
5108
+ HEAP16[((sa)>>1)] = family;
5109
+ HEAP32[(((sa)+(4))>>2)] = addr;
5110
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
5111
+ break;
5112
+ case 10:
5113
+ addr = inetPton6(addr);
5114
+ zeroMemory(sa, 28);
5115
+ if (addrlen) {
5116
+ HEAP32[((addrlen)>>2)] = 28;
5117
+ }
5118
+ HEAP32[((sa)>>2)] = family;
5119
+ HEAP32[(((sa)+(8))>>2)] = addr[0];
5120
+ HEAP32[(((sa)+(12))>>2)] = addr[1];
5121
+ HEAP32[(((sa)+(16))>>2)] = addr[2];
5122
+ HEAP32[(((sa)+(20))>>2)] = addr[3];
5123
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
5124
+ break;
5125
+ default:
5126
+ return 5;
5127
+ }
5128
+ return 0;
5129
+ };
5130
+
5131
+
5132
+
5133
+ var _getaddrinfo = (node, service, hint, out) => {
5134
+ // Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL
5135
+ // hints are specified or ai_family set to AF_UNSPEC or ai_socktype or ai_protocol set to 0 then we
5136
+ // really should provide a linked list of suitable addrinfo values.
5137
+ var addrs = [];
5138
+ var canon = null;
5139
+ var addr = 0;
5140
+ var port = 0;
5141
+ var flags = 0;
5142
+ var family = 0;
5143
+ var type = 0;
5144
+ var proto = 0;
5145
+ var ai, last;
5146
+
5147
+ function allocaddrinfo(family, type, proto, canon, addr, port) {
5148
+ var sa, salen, ai;
5149
+ var errno;
5150
+
5151
+ salen = family === 10 ?
5152
+ 28 :
5153
+ 16;
5154
+ addr = family === 10 ?
5155
+ inetNtop6(addr) :
5156
+ inetNtop4(addr);
5157
+ sa = _malloc(salen);
5158
+ errno = writeSockaddr(sa, family, addr, port);
5159
+ assert(!errno);
5160
+
5161
+ ai = _malloc(32);
5162
+ HEAP32[(((ai)+(4))>>2)] = family;
5163
+ HEAP32[(((ai)+(8))>>2)] = type;
5164
+ HEAP32[(((ai)+(12))>>2)] = proto;
5165
+ HEAPU32[(((ai)+(24))>>2)] = canon;
5166
+ HEAPU32[(((ai)+(20))>>2)] = sa;
5167
+ if (family === 10) {
5168
+ HEAP32[(((ai)+(16))>>2)] = 28;
5169
+ } else {
5170
+ HEAP32[(((ai)+(16))>>2)] = 16;
5171
+ }
5172
+ HEAP32[(((ai)+(28))>>2)] = 0;
5173
+
5174
+ return ai;
5175
+ }
5176
+
5177
+ if (hint) {
5178
+ flags = HEAP32[((hint)>>2)];
5179
+ family = HEAP32[(((hint)+(4))>>2)];
5180
+ type = HEAP32[(((hint)+(8))>>2)];
5181
+ proto = HEAP32[(((hint)+(12))>>2)];
5182
+ }
5183
+ if (type && !proto) {
5184
+ proto = type === 2 ? 17 : 6;
5185
+ }
5186
+ if (!type && proto) {
5187
+ type = proto === 17 ? 2 : 1;
5188
+ }
5189
+
5190
+ // If type or proto are set to zero in hints we should really be returning multiple addrinfo values, but for
5191
+ // now default to a TCP STREAM socket so we can at least return a sensible addrinfo given NULL hints.
5192
+ if (proto === 0) {
5193
+ proto = 6;
5194
+ }
5195
+ if (type === 0) {
5196
+ type = 1;
5197
+ }
5198
+
5199
+ if (!node && !service) {
5200
+ return -2;
5201
+ }
5202
+ if (flags & ~(1|2|4|
5203
+ 1024|8|16|32)) {
5204
+ return -1;
5205
+ }
5206
+ if (hint !== 0 && (HEAP32[((hint)>>2)] & 2) && !node) {
5207
+ return -1;
5208
+ }
5209
+ if (flags & 32) {
5210
+ // TODO
5211
+ return -2;
5212
+ }
5213
+ if (type !== 0 && type !== 1 && type !== 2) {
5214
+ return -7;
5215
+ }
5216
+ if (family !== 0 && family !== 2 && family !== 10) {
5217
+ return -6;
5218
+ }
5219
+
5220
+ if (service) {
5221
+ service = UTF8ToString(service);
5222
+ port = parseInt(service, 10);
5223
+
5224
+ if (isNaN(port)) {
5225
+ if (flags & 1024) {
5226
+ return -2;
5227
+ }
5228
+ // TODO support resolving well-known service names from:
5229
+ // http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt
5230
+ return -8;
5231
+ }
5232
+ }
5233
+
5234
+ if (!node) {
5235
+ if (family === 0) {
5236
+ family = 2;
5237
+ }
5238
+ if ((flags & 1) === 0) {
5239
+ if (family === 2) {
5240
+ addr = _htonl(2130706433);
5241
+ } else {
5242
+ addr = [0, 0, 0, _htonl(1)];
5243
+ }
5244
+ }
5245
+ ai = allocaddrinfo(family, type, proto, null, addr, port);
5246
+ HEAPU32[((out)>>2)] = ai;
5247
+ return 0;
5248
+ }
5249
+
5250
+ //
5251
+ // try as a numeric address
5252
+ //
5253
+ node = UTF8ToString(node);
5254
+ addr = inetPton4(node);
5255
+ if (addr !== null) {
5256
+ // incoming node is a valid ipv4 address
5257
+ if (family === 0 || family === 2) {
5258
+ family = 2;
5259
+ }
5260
+ else if (family === 10 && (flags & 8)) {
5261
+ addr = [0, 0, _htonl(0xffff), addr];
5262
+ family = 10;
5263
+ } else {
5264
+ return -2;
5265
+ }
5266
+ } else {
5267
+ addr = inetPton6(node);
5268
+ if (addr !== null) {
5269
+ // incoming node is a valid ipv6 address
5270
+ if (family === 0 || family === 10) {
5271
+ family = 10;
5272
+ } else {
5273
+ return -2;
5274
+ }
5275
+ }
5276
+ }
5277
+ if (addr != null) {
5278
+ ai = allocaddrinfo(family, type, proto, node, addr, port);
5279
+ HEAPU32[((out)>>2)] = ai;
5280
+ return 0;
5281
+ }
5282
+ if (flags & 4) {
5283
+ return -2;
5284
+ }
5285
+
5286
+ //
5287
+ // try as a hostname
5288
+ //
5289
+ // resolve the hostname to a temporary fake address
5290
+ node = DNS.lookup_name(node);
5291
+ addr = inetPton4(node);
5292
+ if (family === 0) {
5293
+ family = 2;
5294
+ } else if (family === 10) {
5295
+ addr = [0, 0, _htonl(0xffff), addr];
5296
+ }
5297
+ ai = allocaddrinfo(family, type, proto, null, addr, port);
5298
+ HEAPU32[((out)>>2)] = ai;
5299
+ return 0;
5300
+ };
5301
+
5302
+
5025
5303
  var arraySum = (array, index) => {
5026
5304
  var sum = 0;
5027
5305
  for (var i = 0; i <= index; sum += array[i++]) {
@@ -5356,6 +5634,8 @@ var wasmImports = {
5356
5634
  /** @export */
5357
5635
  __syscall_getcwd: ___syscall_getcwd,
5358
5636
  /** @export */
5637
+ __syscall_getdents64: ___syscall_getdents64,
5638
+ /** @export */
5359
5639
  __syscall_ioctl: ___syscall_ioctl,
5360
5640
  /** @export */
5361
5641
  __syscall_lstat64: ___syscall_lstat64,
@@ -5368,6 +5648,8 @@ var wasmImports = {
5368
5648
  /** @export */
5369
5649
  __syscall_readlinkat: ___syscall_readlinkat,
5370
5650
  /** @export */
5651
+ __syscall_renameat: ___syscall_renameat,
5652
+ /** @export */
5371
5653
  __syscall_rmdir: ___syscall_rmdir,
5372
5654
  /** @export */
5373
5655
  __syscall_socket: ___syscall_socket,
@@ -5378,8 +5660,6 @@ var wasmImports = {
5378
5660
  /** @export */
5379
5661
  __syscall_utimensat: ___syscall_utimensat,
5380
5662
  /** @export */
5381
- _emscripten_lookup_name: __emscripten_lookup_name,
5382
- /** @export */
5383
5663
  _gmtime_js: __gmtime_js,
5384
5664
  /** @export */
5385
5665
  _localtime_js: __localtime_js,
@@ -5420,6 +5700,8 @@ var wasmImports = {
5420
5700
  /** @export */
5421
5701
  fd_write: _fd_write,
5422
5702
  /** @export */
5703
+ getaddrinfo: _getaddrinfo,
5704
+ /** @export */
5423
5705
  memory: wasmMemory,
5424
5706
  /** @export */
5425
5707
  strptime: _strptime
@@ -5679,6 +5961,7 @@ var _sqlite3_preupdate_count = Module['_sqlite3_preupdate_count'] = (a0) => (_sq
5679
5961
  var _sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = (a0) => (_sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = wasmExports['sqlite3_preupdate_depth'])(a0);
5680
5962
  var _sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = (a0) => (_sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = wasmExports['sqlite3_preupdate_blobwrite'])(a0);
5681
5963
  var _sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = (a0, a1, a2) => (_sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = wasmExports['sqlite3_preupdate_new'])(a0, a1, a2);
5964
+ var _htonl = (a0) => (_htonl = wasmExports['htonl'])(a0);
5682
5965
  var _htons = (a0) => (_htons = wasmExports['htons'])(a0);
5683
5966
  var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign'])(a0, a1);
5684
5967
  var _ntohs = (a0) => (_ntohs = wasmExports['ntohs'])(a0);
package/sqlite3-node.mjs CHANGED
@@ -4355,6 +4355,65 @@ async function createWasm() {
4355
4355
  }
4356
4356
 
4357
4357
 
4358
+ function ___syscall_getdents64(fd, dirp, count) {
4359
+ try {
4360
+
4361
+ var stream = SYSCALLS.getStreamFromFD(fd)
4362
+ stream.getdents ||= FS.readdir(stream.path);
4363
+
4364
+ var struct_size = 280;
4365
+ var pos = 0;
4366
+ var off = FS.llseek(stream, 0, 1);
4367
+
4368
+ var startIdx = Math.floor(off / struct_size);
4369
+ var endIdx = Math.min(stream.getdents.length, startIdx + Math.floor(count/struct_size))
4370
+ for (var idx = startIdx; idx < endIdx; idx++) {
4371
+ var id;
4372
+ var type;
4373
+ var name = stream.getdents[idx];
4374
+ if (name === '.') {
4375
+ id = stream.node.id;
4376
+ type = 4; // DT_DIR
4377
+ }
4378
+ else if (name === '..') {
4379
+ var lookup = FS.lookupPath(stream.path, { parent: true });
4380
+ id = lookup.node.id;
4381
+ type = 4; // DT_DIR
4382
+ }
4383
+ else {
4384
+ var child;
4385
+ try {
4386
+ child = FS.lookupNode(stream.node, name);
4387
+ } catch (e) {
4388
+ // If the entry is not a directory, file, or symlink, nodefs
4389
+ // lookupNode will raise EINVAL. Skip these and continue.
4390
+ if (e?.errno === 28) {
4391
+ continue;
4392
+ }
4393
+ throw e;
4394
+ }
4395
+ id = child.id;
4396
+ type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.
4397
+ FS.isDir(child.mode) ? 4 : // DT_DIR, directory.
4398
+ FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.
4399
+ 8; // DT_REG, regular file.
4400
+ }
4401
+ HEAP64[((dirp + pos)>>3)] = BigInt(id);
4402
+ HEAP64[(((dirp + pos)+(8))>>3)] = BigInt((idx + 1) * struct_size);
4403
+ HEAP16[(((dirp + pos)+(16))>>1)] = 280;
4404
+ HEAP8[(dirp + pos)+(18)] = type;
4405
+ stringToUTF8(name, dirp + pos + 19, 256);
4406
+ pos += struct_size;
4407
+ }
4408
+ FS.llseek(stream, idx * struct_size, 0);
4409
+ return pos;
4410
+ } catch (e) {
4411
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
4412
+ return -e.errno;
4413
+ }
4414
+ }
4415
+
4416
+
4358
4417
  function ___syscall_ioctl(fd, op, varargs) {
4359
4418
  SYSCALLS.varargs = varargs;
4360
4419
  try {
@@ -4527,6 +4586,21 @@ async function createWasm() {
4527
4586
  }
4528
4587
  }
4529
4588
 
4589
+ function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {
4590
+ try {
4591
+
4592
+ oldpath = SYSCALLS.getStr(oldpath);
4593
+ newpath = SYSCALLS.getStr(newpath);
4594
+ oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);
4595
+ newpath = SYSCALLS.calculateAt(newdirfd, newpath);
4596
+ FS.rename(oldpath, newpath);
4597
+ return 0;
4598
+ } catch (e) {
4599
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
4600
+ return -e.errno;
4601
+ }
4602
+ }
4603
+
4530
4604
  function ___syscall_rmdir(path) {
4531
4605
  try {
4532
4606
 
@@ -4626,15 +4700,6 @@ async function createWasm() {
4626
4700
  }
4627
4701
  }
4628
4702
 
4629
-
4630
-
4631
-
4632
- var __emscripten_lookup_name = (name) => {
4633
- // uint32_t _emscripten_lookup_name(const char *name);
4634
- var nameString = UTF8ToString(name);
4635
- return inetPton4(DNS.lookup_name(nameString));
4636
- };
4637
-
4638
4703
  function __gmtime_js(time, tmPtr) {
4639
4704
  time = bigintToI53Checked(time);
4640
4705
 
@@ -5138,6 +5203,219 @@ async function createWasm() {
5138
5203
  }
5139
5204
 
5140
5205
 
5206
+
5207
+
5208
+
5209
+
5210
+
5211
+
5212
+
5213
+
5214
+
5215
+ /** @param {number=} addrlen */
5216
+ var writeSockaddr = (sa, family, addr, port, addrlen) => {
5217
+ switch (family) {
5218
+ case 2:
5219
+ addr = inetPton4(addr);
5220
+ zeroMemory(sa, 16);
5221
+ if (addrlen) {
5222
+ HEAP32[((addrlen)>>2)] = 16;
5223
+ }
5224
+ HEAP16[((sa)>>1)] = family;
5225
+ HEAP32[(((sa)+(4))>>2)] = addr;
5226
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
5227
+ break;
5228
+ case 10:
5229
+ addr = inetPton6(addr);
5230
+ zeroMemory(sa, 28);
5231
+ if (addrlen) {
5232
+ HEAP32[((addrlen)>>2)] = 28;
5233
+ }
5234
+ HEAP32[((sa)>>2)] = family;
5235
+ HEAP32[(((sa)+(8))>>2)] = addr[0];
5236
+ HEAP32[(((sa)+(12))>>2)] = addr[1];
5237
+ HEAP32[(((sa)+(16))>>2)] = addr[2];
5238
+ HEAP32[(((sa)+(20))>>2)] = addr[3];
5239
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
5240
+ break;
5241
+ default:
5242
+ return 5;
5243
+ }
5244
+ return 0;
5245
+ };
5246
+
5247
+
5248
+
5249
+ var _getaddrinfo = (node, service, hint, out) => {
5250
+ // Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL
5251
+ // hints are specified or ai_family set to AF_UNSPEC or ai_socktype or ai_protocol set to 0 then we
5252
+ // really should provide a linked list of suitable addrinfo values.
5253
+ var addrs = [];
5254
+ var canon = null;
5255
+ var addr = 0;
5256
+ var port = 0;
5257
+ var flags = 0;
5258
+ var family = 0;
5259
+ var type = 0;
5260
+ var proto = 0;
5261
+ var ai, last;
5262
+
5263
+ function allocaddrinfo(family, type, proto, canon, addr, port) {
5264
+ var sa, salen, ai;
5265
+ var errno;
5266
+
5267
+ salen = family === 10 ?
5268
+ 28 :
5269
+ 16;
5270
+ addr = family === 10 ?
5271
+ inetNtop6(addr) :
5272
+ inetNtop4(addr);
5273
+ sa = _malloc(salen);
5274
+ errno = writeSockaddr(sa, family, addr, port);
5275
+ assert(!errno);
5276
+
5277
+ ai = _malloc(32);
5278
+ HEAP32[(((ai)+(4))>>2)] = family;
5279
+ HEAP32[(((ai)+(8))>>2)] = type;
5280
+ HEAP32[(((ai)+(12))>>2)] = proto;
5281
+ HEAPU32[(((ai)+(24))>>2)] = canon;
5282
+ HEAPU32[(((ai)+(20))>>2)] = sa;
5283
+ if (family === 10) {
5284
+ HEAP32[(((ai)+(16))>>2)] = 28;
5285
+ } else {
5286
+ HEAP32[(((ai)+(16))>>2)] = 16;
5287
+ }
5288
+ HEAP32[(((ai)+(28))>>2)] = 0;
5289
+
5290
+ return ai;
5291
+ }
5292
+
5293
+ if (hint) {
5294
+ flags = HEAP32[((hint)>>2)];
5295
+ family = HEAP32[(((hint)+(4))>>2)];
5296
+ type = HEAP32[(((hint)+(8))>>2)];
5297
+ proto = HEAP32[(((hint)+(12))>>2)];
5298
+ }
5299
+ if (type && !proto) {
5300
+ proto = type === 2 ? 17 : 6;
5301
+ }
5302
+ if (!type && proto) {
5303
+ type = proto === 17 ? 2 : 1;
5304
+ }
5305
+
5306
+ // If type or proto are set to zero in hints we should really be returning multiple addrinfo values, but for
5307
+ // now default to a TCP STREAM socket so we can at least return a sensible addrinfo given NULL hints.
5308
+ if (proto === 0) {
5309
+ proto = 6;
5310
+ }
5311
+ if (type === 0) {
5312
+ type = 1;
5313
+ }
5314
+
5315
+ if (!node && !service) {
5316
+ return -2;
5317
+ }
5318
+ if (flags & ~(1|2|4|
5319
+ 1024|8|16|32)) {
5320
+ return -1;
5321
+ }
5322
+ if (hint !== 0 && (HEAP32[((hint)>>2)] & 2) && !node) {
5323
+ return -1;
5324
+ }
5325
+ if (flags & 32) {
5326
+ // TODO
5327
+ return -2;
5328
+ }
5329
+ if (type !== 0 && type !== 1 && type !== 2) {
5330
+ return -7;
5331
+ }
5332
+ if (family !== 0 && family !== 2 && family !== 10) {
5333
+ return -6;
5334
+ }
5335
+
5336
+ if (service) {
5337
+ service = UTF8ToString(service);
5338
+ port = parseInt(service, 10);
5339
+
5340
+ if (isNaN(port)) {
5341
+ if (flags & 1024) {
5342
+ return -2;
5343
+ }
5344
+ // TODO support resolving well-known service names from:
5345
+ // http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt
5346
+ return -8;
5347
+ }
5348
+ }
5349
+
5350
+ if (!node) {
5351
+ if (family === 0) {
5352
+ family = 2;
5353
+ }
5354
+ if ((flags & 1) === 0) {
5355
+ if (family === 2) {
5356
+ addr = _htonl(2130706433);
5357
+ } else {
5358
+ addr = [0, 0, 0, _htonl(1)];
5359
+ }
5360
+ }
5361
+ ai = allocaddrinfo(family, type, proto, null, addr, port);
5362
+ HEAPU32[((out)>>2)] = ai;
5363
+ return 0;
5364
+ }
5365
+
5366
+ //
5367
+ // try as a numeric address
5368
+ //
5369
+ node = UTF8ToString(node);
5370
+ addr = inetPton4(node);
5371
+ if (addr !== null) {
5372
+ // incoming node is a valid ipv4 address
5373
+ if (family === 0 || family === 2) {
5374
+ family = 2;
5375
+ }
5376
+ else if (family === 10 && (flags & 8)) {
5377
+ addr = [0, 0, _htonl(0xffff), addr];
5378
+ family = 10;
5379
+ } else {
5380
+ return -2;
5381
+ }
5382
+ } else {
5383
+ addr = inetPton6(node);
5384
+ if (addr !== null) {
5385
+ // incoming node is a valid ipv6 address
5386
+ if (family === 0 || family === 10) {
5387
+ family = 10;
5388
+ } else {
5389
+ return -2;
5390
+ }
5391
+ }
5392
+ }
5393
+ if (addr != null) {
5394
+ ai = allocaddrinfo(family, type, proto, node, addr, port);
5395
+ HEAPU32[((out)>>2)] = ai;
5396
+ return 0;
5397
+ }
5398
+ if (flags & 4) {
5399
+ return -2;
5400
+ }
5401
+
5402
+ //
5403
+ // try as a hostname
5404
+ //
5405
+ // resolve the hostname to a temporary fake address
5406
+ node = DNS.lookup_name(node);
5407
+ addr = inetPton4(node);
5408
+ if (family === 0) {
5409
+ family = 2;
5410
+ } else if (family === 10) {
5411
+ addr = [0, 0, _htonl(0xffff), addr];
5412
+ }
5413
+ ai = allocaddrinfo(family, type, proto, null, addr, port);
5414
+ HEAPU32[((out)>>2)] = ai;
5415
+ return 0;
5416
+ };
5417
+
5418
+
5141
5419
  var arraySum = (array, index) => {
5142
5420
  var sum = 0;
5143
5421
  for (var i = 0; i <= index; sum += array[i++]) {
@@ -5472,6 +5750,8 @@ var wasmImports = {
5472
5750
  /** @export */
5473
5751
  __syscall_getcwd: ___syscall_getcwd,
5474
5752
  /** @export */
5753
+ __syscall_getdents64: ___syscall_getdents64,
5754
+ /** @export */
5475
5755
  __syscall_ioctl: ___syscall_ioctl,
5476
5756
  /** @export */
5477
5757
  __syscall_lstat64: ___syscall_lstat64,
@@ -5484,6 +5764,8 @@ var wasmImports = {
5484
5764
  /** @export */
5485
5765
  __syscall_readlinkat: ___syscall_readlinkat,
5486
5766
  /** @export */
5767
+ __syscall_renameat: ___syscall_renameat,
5768
+ /** @export */
5487
5769
  __syscall_rmdir: ___syscall_rmdir,
5488
5770
  /** @export */
5489
5771
  __syscall_socket: ___syscall_socket,
@@ -5494,8 +5776,6 @@ var wasmImports = {
5494
5776
  /** @export */
5495
5777
  __syscall_utimensat: ___syscall_utimensat,
5496
5778
  /** @export */
5497
- _emscripten_lookup_name: __emscripten_lookup_name,
5498
- /** @export */
5499
5779
  _gmtime_js: __gmtime_js,
5500
5780
  /** @export */
5501
5781
  _localtime_js: __localtime_js,
@@ -5536,6 +5816,8 @@ var wasmImports = {
5536
5816
  /** @export */
5537
5817
  fd_write: _fd_write,
5538
5818
  /** @export */
5819
+ getaddrinfo: _getaddrinfo,
5820
+ /** @export */
5539
5821
  memory: wasmMemory,
5540
5822
  /** @export */
5541
5823
  strptime: _strptime
@@ -5795,6 +6077,7 @@ var _sqlite3_preupdate_count = Module['_sqlite3_preupdate_count'] = (a0) => (_sq
5795
6077
  var _sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = (a0) => (_sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = wasmExports['sqlite3_preupdate_depth'])(a0);
5796
6078
  var _sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = (a0) => (_sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = wasmExports['sqlite3_preupdate_blobwrite'])(a0);
5797
6079
  var _sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = (a0, a1, a2) => (_sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = wasmExports['sqlite3_preupdate_new'])(a0, a1, a2);
6080
+ var _htonl = (a0) => (_htonl = wasmExports['htonl'])(a0);
5798
6081
  var _htons = (a0) => (_htons = wasmExports['htons'])(a0);
5799
6082
  var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign'])(a0, a1);
5800
6083
  var _ntohs = (a0) => (_ntohs = wasmExports['ntohs'])(a0);
package/sqlite3.mjs CHANGED
@@ -4330,6 +4330,65 @@ async function createWasm() {
4330
4330
  }
4331
4331
 
4332
4332
 
4333
+ function ___syscall_getdents64(fd, dirp, count) {
4334
+ try {
4335
+
4336
+ var stream = SYSCALLS.getStreamFromFD(fd)
4337
+ stream.getdents ||= FS.readdir(stream.path);
4338
+
4339
+ var struct_size = 280;
4340
+ var pos = 0;
4341
+ var off = FS.llseek(stream, 0, 1);
4342
+
4343
+ var startIdx = Math.floor(off / struct_size);
4344
+ var endIdx = Math.min(stream.getdents.length, startIdx + Math.floor(count/struct_size))
4345
+ for (var idx = startIdx; idx < endIdx; idx++) {
4346
+ var id;
4347
+ var type;
4348
+ var name = stream.getdents[idx];
4349
+ if (name === '.') {
4350
+ id = stream.node.id;
4351
+ type = 4; // DT_DIR
4352
+ }
4353
+ else if (name === '..') {
4354
+ var lookup = FS.lookupPath(stream.path, { parent: true });
4355
+ id = lookup.node.id;
4356
+ type = 4; // DT_DIR
4357
+ }
4358
+ else {
4359
+ var child;
4360
+ try {
4361
+ child = FS.lookupNode(stream.node, name);
4362
+ } catch (e) {
4363
+ // If the entry is not a directory, file, or symlink, nodefs
4364
+ // lookupNode will raise EINVAL. Skip these and continue.
4365
+ if (e?.errno === 28) {
4366
+ continue;
4367
+ }
4368
+ throw e;
4369
+ }
4370
+ id = child.id;
4371
+ type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.
4372
+ FS.isDir(child.mode) ? 4 : // DT_DIR, directory.
4373
+ FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.
4374
+ 8; // DT_REG, regular file.
4375
+ }
4376
+ HEAP64[((dirp + pos)>>3)] = BigInt(id);
4377
+ HEAP64[(((dirp + pos)+(8))>>3)] = BigInt((idx + 1) * struct_size);
4378
+ HEAP16[(((dirp + pos)+(16))>>1)] = 280;
4379
+ HEAP8[(dirp + pos)+(18)] = type;
4380
+ stringToUTF8(name, dirp + pos + 19, 256);
4381
+ pos += struct_size;
4382
+ }
4383
+ FS.llseek(stream, idx * struct_size, 0);
4384
+ return pos;
4385
+ } catch (e) {
4386
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
4387
+ return -e.errno;
4388
+ }
4389
+ }
4390
+
4391
+
4333
4392
  function ___syscall_ioctl(fd, op, varargs) {
4334
4393
  SYSCALLS.varargs = varargs;
4335
4394
  try {
@@ -4502,6 +4561,21 @@ async function createWasm() {
4502
4561
  }
4503
4562
  }
4504
4563
 
4564
+ function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {
4565
+ try {
4566
+
4567
+ oldpath = SYSCALLS.getStr(oldpath);
4568
+ newpath = SYSCALLS.getStr(newpath);
4569
+ oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);
4570
+ newpath = SYSCALLS.calculateAt(newdirfd, newpath);
4571
+ FS.rename(oldpath, newpath);
4572
+ return 0;
4573
+ } catch (e) {
4574
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
4575
+ return -e.errno;
4576
+ }
4577
+ }
4578
+
4505
4579
  function ___syscall_rmdir(path) {
4506
4580
  try {
4507
4581
 
@@ -4601,15 +4675,6 @@ async function createWasm() {
4601
4675
  }
4602
4676
  }
4603
4677
 
4604
-
4605
-
4606
-
4607
- var __emscripten_lookup_name = (name) => {
4608
- // uint32_t _emscripten_lookup_name(const char *name);
4609
- var nameString = UTF8ToString(name);
4610
- return inetPton4(DNS.lookup_name(nameString));
4611
- };
4612
-
4613
4678
  function __gmtime_js(time, tmPtr) {
4614
4679
  time = bigintToI53Checked(time);
4615
4680
 
@@ -5113,6 +5178,219 @@ async function createWasm() {
5113
5178
  }
5114
5179
 
5115
5180
 
5181
+
5182
+
5183
+
5184
+
5185
+
5186
+
5187
+
5188
+
5189
+
5190
+ /** @param {number=} addrlen */
5191
+ var writeSockaddr = (sa, family, addr, port, addrlen) => {
5192
+ switch (family) {
5193
+ case 2:
5194
+ addr = inetPton4(addr);
5195
+ zeroMemory(sa, 16);
5196
+ if (addrlen) {
5197
+ HEAP32[((addrlen)>>2)] = 16;
5198
+ }
5199
+ HEAP16[((sa)>>1)] = family;
5200
+ HEAP32[(((sa)+(4))>>2)] = addr;
5201
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
5202
+ break;
5203
+ case 10:
5204
+ addr = inetPton6(addr);
5205
+ zeroMemory(sa, 28);
5206
+ if (addrlen) {
5207
+ HEAP32[((addrlen)>>2)] = 28;
5208
+ }
5209
+ HEAP32[((sa)>>2)] = family;
5210
+ HEAP32[(((sa)+(8))>>2)] = addr[0];
5211
+ HEAP32[(((sa)+(12))>>2)] = addr[1];
5212
+ HEAP32[(((sa)+(16))>>2)] = addr[2];
5213
+ HEAP32[(((sa)+(20))>>2)] = addr[3];
5214
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
5215
+ break;
5216
+ default:
5217
+ return 5;
5218
+ }
5219
+ return 0;
5220
+ };
5221
+
5222
+
5223
+
5224
+ var _getaddrinfo = (node, service, hint, out) => {
5225
+ // Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL
5226
+ // hints are specified or ai_family set to AF_UNSPEC or ai_socktype or ai_protocol set to 0 then we
5227
+ // really should provide a linked list of suitable addrinfo values.
5228
+ var addrs = [];
5229
+ var canon = null;
5230
+ var addr = 0;
5231
+ var port = 0;
5232
+ var flags = 0;
5233
+ var family = 0;
5234
+ var type = 0;
5235
+ var proto = 0;
5236
+ var ai, last;
5237
+
5238
+ function allocaddrinfo(family, type, proto, canon, addr, port) {
5239
+ var sa, salen, ai;
5240
+ var errno;
5241
+
5242
+ salen = family === 10 ?
5243
+ 28 :
5244
+ 16;
5245
+ addr = family === 10 ?
5246
+ inetNtop6(addr) :
5247
+ inetNtop4(addr);
5248
+ sa = _malloc(salen);
5249
+ errno = writeSockaddr(sa, family, addr, port);
5250
+ assert(!errno);
5251
+
5252
+ ai = _malloc(32);
5253
+ HEAP32[(((ai)+(4))>>2)] = family;
5254
+ HEAP32[(((ai)+(8))>>2)] = type;
5255
+ HEAP32[(((ai)+(12))>>2)] = proto;
5256
+ HEAPU32[(((ai)+(24))>>2)] = canon;
5257
+ HEAPU32[(((ai)+(20))>>2)] = sa;
5258
+ if (family === 10) {
5259
+ HEAP32[(((ai)+(16))>>2)] = 28;
5260
+ } else {
5261
+ HEAP32[(((ai)+(16))>>2)] = 16;
5262
+ }
5263
+ HEAP32[(((ai)+(28))>>2)] = 0;
5264
+
5265
+ return ai;
5266
+ }
5267
+
5268
+ if (hint) {
5269
+ flags = HEAP32[((hint)>>2)];
5270
+ family = HEAP32[(((hint)+(4))>>2)];
5271
+ type = HEAP32[(((hint)+(8))>>2)];
5272
+ proto = HEAP32[(((hint)+(12))>>2)];
5273
+ }
5274
+ if (type && !proto) {
5275
+ proto = type === 2 ? 17 : 6;
5276
+ }
5277
+ if (!type && proto) {
5278
+ type = proto === 17 ? 2 : 1;
5279
+ }
5280
+
5281
+ // If type or proto are set to zero in hints we should really be returning multiple addrinfo values, but for
5282
+ // now default to a TCP STREAM socket so we can at least return a sensible addrinfo given NULL hints.
5283
+ if (proto === 0) {
5284
+ proto = 6;
5285
+ }
5286
+ if (type === 0) {
5287
+ type = 1;
5288
+ }
5289
+
5290
+ if (!node && !service) {
5291
+ return -2;
5292
+ }
5293
+ if (flags & ~(1|2|4|
5294
+ 1024|8|16|32)) {
5295
+ return -1;
5296
+ }
5297
+ if (hint !== 0 && (HEAP32[((hint)>>2)] & 2) && !node) {
5298
+ return -1;
5299
+ }
5300
+ if (flags & 32) {
5301
+ // TODO
5302
+ return -2;
5303
+ }
5304
+ if (type !== 0 && type !== 1 && type !== 2) {
5305
+ return -7;
5306
+ }
5307
+ if (family !== 0 && family !== 2 && family !== 10) {
5308
+ return -6;
5309
+ }
5310
+
5311
+ if (service) {
5312
+ service = UTF8ToString(service);
5313
+ port = parseInt(service, 10);
5314
+
5315
+ if (isNaN(port)) {
5316
+ if (flags & 1024) {
5317
+ return -2;
5318
+ }
5319
+ // TODO support resolving well-known service names from:
5320
+ // http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt
5321
+ return -8;
5322
+ }
5323
+ }
5324
+
5325
+ if (!node) {
5326
+ if (family === 0) {
5327
+ family = 2;
5328
+ }
5329
+ if ((flags & 1) === 0) {
5330
+ if (family === 2) {
5331
+ addr = _htonl(2130706433);
5332
+ } else {
5333
+ addr = [0, 0, 0, _htonl(1)];
5334
+ }
5335
+ }
5336
+ ai = allocaddrinfo(family, type, proto, null, addr, port);
5337
+ HEAPU32[((out)>>2)] = ai;
5338
+ return 0;
5339
+ }
5340
+
5341
+ //
5342
+ // try as a numeric address
5343
+ //
5344
+ node = UTF8ToString(node);
5345
+ addr = inetPton4(node);
5346
+ if (addr !== null) {
5347
+ // incoming node is a valid ipv4 address
5348
+ if (family === 0 || family === 2) {
5349
+ family = 2;
5350
+ }
5351
+ else if (family === 10 && (flags & 8)) {
5352
+ addr = [0, 0, _htonl(0xffff), addr];
5353
+ family = 10;
5354
+ } else {
5355
+ return -2;
5356
+ }
5357
+ } else {
5358
+ addr = inetPton6(node);
5359
+ if (addr !== null) {
5360
+ // incoming node is a valid ipv6 address
5361
+ if (family === 0 || family === 10) {
5362
+ family = 10;
5363
+ } else {
5364
+ return -2;
5365
+ }
5366
+ }
5367
+ }
5368
+ if (addr != null) {
5369
+ ai = allocaddrinfo(family, type, proto, node, addr, port);
5370
+ HEAPU32[((out)>>2)] = ai;
5371
+ return 0;
5372
+ }
5373
+ if (flags & 4) {
5374
+ return -2;
5375
+ }
5376
+
5377
+ //
5378
+ // try as a hostname
5379
+ //
5380
+ // resolve the hostname to a temporary fake address
5381
+ node = DNS.lookup_name(node);
5382
+ addr = inetPton4(node);
5383
+ if (family === 0) {
5384
+ family = 2;
5385
+ } else if (family === 10) {
5386
+ addr = [0, 0, _htonl(0xffff), addr];
5387
+ }
5388
+ ai = allocaddrinfo(family, type, proto, null, addr, port);
5389
+ HEAPU32[((out)>>2)] = ai;
5390
+ return 0;
5391
+ };
5392
+
5393
+
5116
5394
  var arraySum = (array, index) => {
5117
5395
  var sum = 0;
5118
5396
  for (var i = 0; i <= index; sum += array[i++]) {
@@ -5447,6 +5725,8 @@ var wasmImports = {
5447
5725
  /** @export */
5448
5726
  __syscall_getcwd: ___syscall_getcwd,
5449
5727
  /** @export */
5728
+ __syscall_getdents64: ___syscall_getdents64,
5729
+ /** @export */
5450
5730
  __syscall_ioctl: ___syscall_ioctl,
5451
5731
  /** @export */
5452
5732
  __syscall_lstat64: ___syscall_lstat64,
@@ -5459,6 +5739,8 @@ var wasmImports = {
5459
5739
  /** @export */
5460
5740
  __syscall_readlinkat: ___syscall_readlinkat,
5461
5741
  /** @export */
5742
+ __syscall_renameat: ___syscall_renameat,
5743
+ /** @export */
5462
5744
  __syscall_rmdir: ___syscall_rmdir,
5463
5745
  /** @export */
5464
5746
  __syscall_socket: ___syscall_socket,
@@ -5469,8 +5751,6 @@ var wasmImports = {
5469
5751
  /** @export */
5470
5752
  __syscall_utimensat: ___syscall_utimensat,
5471
5753
  /** @export */
5472
- _emscripten_lookup_name: __emscripten_lookup_name,
5473
- /** @export */
5474
5754
  _gmtime_js: __gmtime_js,
5475
5755
  /** @export */
5476
5756
  _localtime_js: __localtime_js,
@@ -5511,6 +5791,8 @@ var wasmImports = {
5511
5791
  /** @export */
5512
5792
  fd_write: _fd_write,
5513
5793
  /** @export */
5794
+ getaddrinfo: _getaddrinfo,
5795
+ /** @export */
5514
5796
  memory: wasmMemory,
5515
5797
  /** @export */
5516
5798
  strptime: _strptime
@@ -5770,6 +6052,7 @@ var _sqlite3_preupdate_count = Module['_sqlite3_preupdate_count'] = (a0) => (_sq
5770
6052
  var _sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = (a0) => (_sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = wasmExports['sqlite3_preupdate_depth'])(a0);
5771
6053
  var _sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = (a0) => (_sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = wasmExports['sqlite3_preupdate_blobwrite'])(a0);
5772
6054
  var _sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = (a0, a1, a2) => (_sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = wasmExports['sqlite3_preupdate_new'])(a0, a1, a2);
6055
+ var _htonl = (a0) => (_htonl = wasmExports['htonl'])(a0);
5773
6056
  var _htons = (a0) => (_htons = wasmExports['htons'])(a0);
5774
6057
  var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign'])(a0, a1);
5775
6058
  var _ntohs = (a0) => (_ntohs = wasmExports['ntohs'])(a0);
package/sqlite3.wasm CHANGED
Binary file