@velarscript-labs/sqlite 0.3.1 → 0.3.2

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.
@@ -4,15 +4,15 @@
4
4
  "abiVersion": 1,
5
5
  "package": {
6
6
  "name": "@velarscript-labs/sqlite",
7
- "version": "0.3.1"
7
+ "version": "0.3.2"
8
8
  },
9
9
  "target": "node",
10
- "compilerVersion": "0.14.2",
10
+ "compilerVersion": "0.15.0",
11
11
  "sourceEntry": "src/index.vel",
12
12
  "sources": [
13
13
  {
14
14
  "path": "src/index.vel",
15
- "sha256": "2a561a3d17d372c8f0e95e416bc1e0b829b45e807b3454292c2191beb24a5d18"
15
+ "sha256": "d35ec69e071fdeab0e379a78209c7f075cabf1b9b5148c9ba033a325e9c482b6"
16
16
  }
17
17
  ],
18
18
  "entry": {
@@ -20,9 +20,9 @@
20
20
  "sourceMap": "index.js.map",
21
21
  "interface": "index.veli.json",
22
22
  "sha256": {
23
- "javascript": "bf5a8456e0778533840efb831a60b93ee23b3f0963735fccd29a89978a61358d",
24
- "sourceMap": "6b8fe8ab61326511de62813d3e33a16aacf9f53ec46b16e20eb1cf68e05e2391",
25
- "interface": "c340ec9d62adc30409be6de430791696e15cddb9e2b89da8b5d55cf444fc87b2"
23
+ "javascript": "33086d56ae3878ed41d4c31405ce57e17b8aca65ec3160a9a82ceada7b4b49d7",
24
+ "sourceMap": "d2e01a92404964ef4674985191acf85be17185a1ea75fb2369f5acaf6fb8aecf",
25
+ "interface": "93ed6516f8b9c501b068b4550424e472d536e1e7a9b3451bba536b3c3e736012"
26
26
  }
27
27
  }
28
28
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velarscript-labs/sqlite",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Injection-resistant bounded SQLite capability for VelarScript Node applications.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -34,10 +34,10 @@
34
34
  "entry": "src/index.vel",
35
35
  "artifacts": { "node": "dist/velar-library.json" },
36
36
  "targets": ["node"],
37
- "requires": {"capabilities": ["node"], "language": ">=0.14 <0.15"}
37
+ "requires": {"capabilities": ["node"], "language": ">=0.15 <0.16"}
38
38
  },
39
39
  "dependencies": {
40
- "@velarscript-labs/database": "0.3.1",
40
+ "@velarscript-labs/database": "0.3.2",
41
41
  "sqlite3-parser": "0.7.1"
42
42
  }
43
43
  }
package/src/index.vel CHANGED
@@ -19,7 +19,7 @@ export type SqliteOptions:
19
19
  journalMode: SqliteJournalMode?
20
20
  readOnly: bool?
21
21
 
22
- extern js()`
22
+ extern js`
23
23
  import { AsyncLocalStorage } from "node:async_hooks";
24
24
  import { Worker } from "node:worker_threads";
25
25
 
@@ -537,32 +537,25 @@ export class SqliteError extends Error:
537
537
  self.retryable = retryable
538
538
 
539
539
  export class SqliteBackpressureError extends SqliteError:
540
- constructor(message: string = "SQLite queue is full"):
541
- super(message, "SQLITE_BACKPRESSURE", "queue", true)
540
+ constructor(message: string = "SQLite queue is full"): super(message, "SQLITE_BACKPRESSURE", "queue", true)
542
541
 
543
542
  export class SqliteConcurrencyError extends SqliteError:
544
543
  constructor(message: string = "SQLite connection cannot be used from its transaction callback"):
545
544
  super(message, "SQLITE_CONCURRENCY", "transaction", true)
546
545
 
547
546
  def sqliteFailure(error: NativeSqliteError) -> SqliteError:
548
- if error is NativeSqliteBackpressureError:
549
- return SqliteBackpressureError(error.message)
550
- if error is NativeSqliteConcurrencyError:
551
- return SqliteConcurrencyError(error.message)
552
- if error is NativeSqliteError:
553
- return SqliteError(error.message, error.sqliteCode, error.operation, error.retryable)
547
+ if error is NativeSqliteBackpressureError: return SqliteBackpressureError(error.message)
548
+ if error is NativeSqliteConcurrencyError: return SqliteConcurrencyError(error.message)
549
+ if error is NativeSqliteError: return SqliteError(error.message, error.sqliteCode, error.operation, error.retryable)
554
550
  return SqliteError(error.message)
555
551
 
556
552
  /// Produces a SQLite literal only for grammar positions where bound parameters
557
553
  /// are not legal, such as schema defaults and PRAGMA assignments. Ordinary
558
554
  /// query values must still use sqlParameter/sqlTuple/sqlRows.
559
555
  export def sqliteLiteral(value: unknown) -> DatabaseStatement:
560
- if value == null:
561
- return trustedSql("NULL")
562
- if value is bool:
563
- return trustedSql(value ? "1" : "0")
564
- if value is string:
565
- return trustedSql("'" + value.replaceAll("'", "''") + "'")
556
+ if value == null: return trustedSql("NULL")
557
+ if value is bool: return trustedSql(value ? "1" : "0")
558
+ if value is string: return trustedSql("'" + value.replaceAll("'", "''") + "'")
566
559
  if value is number:
567
560
  assert value.isFinite() else "SQLite numeric literals must be finite"
568
561
  assert not value.isInteger() or (value >= -9007199254740991 and value <= 9007199254740991) else "SQLite integer literals must be safe integers"
@@ -576,39 +569,31 @@ export def sqliteIdentifier(value: string) -> DatabaseStatement:
576
569
  return trustedSql(`"` + value.replaceAll(`"`, `""`) + `"`)
577
570
 
578
571
  export class SqliteTransaction:
579
- constructor(private const native: NativeSqliteTransaction):
580
- pass
572
+ constructor(private const native: NativeSqliteTransaction): pass
581
573
 
582
574
  async def execute(statement: DatabaseStatement) -> number:
583
575
  const data = statement.data()
584
- try:
585
- return await self.native.execute(data.fragments, data.parameters)
576
+ try: return await self.native.execute(data.fragments, data.parameters)
586
577
  catch error:
587
- if error is NativeSqliteError:
588
- throw sqliteFailure(error)
578
+ if error is NativeSqliteError: throw sqliteFailure(error)
589
579
  throw SqliteError(error.message)
590
580
 
591
581
  /// Projects this transaction into the engine-neutral functional operation layer.
592
582
  def executor() -> DatabaseExecutor:
593
- async def executeStatement(statement: DatabaseStatement) -> number:
594
- return await self.execute(statement)
583
+ async def executeStatement(statement: DatabaseStatement) -> number: return await self.execute(statement)
595
584
 
596
585
  async def oneRow(statement: DatabaseStatement) -> unknown:
597
586
  const data = statement.data()
598
- try:
599
- return await self.native.one(data.fragments, data.parameters)
587
+ try: return await self.native.one(data.fragments, data.parameters)
600
588
  catch error:
601
- if error is NativeSqliteError:
602
- throw sqliteFailure(error)
589
+ if error is NativeSqliteError: throw sqliteFailure(error)
603
590
  throw SqliteError(error.message)
604
591
 
605
592
  async def allRows(statement: DatabaseStatement) -> List<unknown>:
606
593
  const data = statement.data()
607
- try:
608
- return await self.native.all(data.fragments, data.parameters)
594
+ try: return await self.native.all(data.fragments, data.parameters)
609
595
  catch error:
610
- if error is NativeSqliteError:
611
- throw sqliteFailure(error)
596
+ if error is NativeSqliteError: throw sqliteFailure(error)
612
597
  throw SqliteError(error.message)
613
598
 
614
599
  return {execute: executeStatement, one: oneRow, all: allRows}
@@ -617,12 +602,10 @@ export class SqliteTransaction:
617
602
  const data = statement.data()
618
603
  try:
619
604
  const row = await self.native.one(data.fragments, data.parameters)
620
- if row == null:
621
- return null
605
+ if row == null: return null
622
606
  return RowType.parse(row)
623
607
  catch error:
624
- if error is NativeSqliteError:
625
- throw sqliteFailure(error)
608
+ if error is NativeSqliteError: throw sqliteFailure(error)
626
609
  throw SqliteError(error.message)
627
610
 
628
611
  async def all<T>(statement: DatabaseStatement, RowType: Type<T>) -> List<T>:
@@ -631,44 +614,35 @@ export class SqliteTransaction:
631
614
  const rows = await self.native.all(data.fragments, data.parameters)
632
615
  return rows.map(row => RowType.parse(row))
633
616
  catch error:
634
- if error is NativeSqliteError:
635
- throw sqliteFailure(error)
617
+ if error is NativeSqliteError: throw sqliteFailure(error)
636
618
  throw SqliteError(error.message)
637
619
 
638
620
  export class SqliteConnection:
639
- constructor(private const native: NativeSqliteConnection):
640
- pass
621
+ constructor(private const native: NativeSqliteConnection): pass
641
622
 
642
623
  async def execute(statement: DatabaseStatement) -> number:
643
624
  const data = statement.data()
644
- try:
645
- return await self.native.execute(data.fragments, data.parameters)
625
+ try: return await self.native.execute(data.fragments, data.parameters)
646
626
  catch error:
647
- if error is NativeSqliteError:
648
- throw sqliteFailure(error)
627
+ if error is NativeSqliteError: throw sqliteFailure(error)
649
628
  throw SqliteError(error.message)
650
629
 
651
630
  /// Projects this connection into the engine-neutral functional operation layer.
652
631
  def executor() -> DatabaseExecutor:
653
- async def executeStatement(statement: DatabaseStatement) -> number:
654
- return await self.execute(statement)
632
+ async def executeStatement(statement: DatabaseStatement) -> number: return await self.execute(statement)
655
633
 
656
634
  async def oneRow(statement: DatabaseStatement) -> unknown:
657
635
  const data = statement.data()
658
- try:
659
- return await self.native.one(data.fragments, data.parameters)
636
+ try: return await self.native.one(data.fragments, data.parameters)
660
637
  catch error:
661
- if error is NativeSqliteError:
662
- throw sqliteFailure(error)
638
+ if error is NativeSqliteError: throw sqliteFailure(error)
663
639
  throw SqliteError(error.message)
664
640
 
665
641
  async def allRows(statement: DatabaseStatement) -> List<unknown>:
666
642
  const data = statement.data()
667
- try:
668
- return await self.native.all(data.fragments, data.parameters)
643
+ try: return await self.native.all(data.fragments, data.parameters)
669
644
  catch error:
670
- if error is NativeSqliteError:
671
- throw sqliteFailure(error)
645
+ if error is NativeSqliteError: throw sqliteFailure(error)
672
646
  throw SqliteError(error.message)
673
647
 
674
648
  return {execute: executeStatement, one: oneRow, all: allRows}
@@ -677,12 +651,10 @@ export class SqliteConnection:
677
651
  const data = statement.data()
678
652
  try:
679
653
  const row = await self.native.one(data.fragments, data.parameters)
680
- if row == null:
681
- return null
654
+ if row == null: return null
682
655
  return RowType.parse(row)
683
656
  catch error:
684
- if error is NativeSqliteError:
685
- throw sqliteFailure(error)
657
+ if error is NativeSqliteError: throw sqliteFailure(error)
686
658
  throw SqliteError(error.message)
687
659
 
688
660
  async def all<T>(statement: DatabaseStatement, RowType: Type<T>) -> List<T>:
@@ -691,38 +663,30 @@ export class SqliteConnection:
691
663
  const rows = await self.native.all(data.fragments, data.parameters)
692
664
  return rows.map(row => RowType.parse(row))
693
665
  catch error:
694
- if error is NativeSqliteError:
695
- throw sqliteFailure(error)
666
+ if error is NativeSqliteError: throw sqliteFailure(error)
696
667
  throw SqliteError(error.message)
697
668
 
698
669
  async def transaction<T>(operation: (SqliteTransaction) -> Promise<T>) -> T:
699
670
  const results: List<T> = []
700
- async def run<T>(native: NativeSqliteTransaction):
701
- results.append(await operation(SqliteTransaction(native)))
671
+ async def run<T>(native: NativeSqliteTransaction): results.append(await operation(SqliteTransaction(native)))
702
672
  try:
703
673
  await self.native.transaction(run)
704
674
  assert results.size == 1 else "SQLite transaction did not return exactly one result"
705
675
  return results[0]
706
676
  catch error:
707
- if error is NativeSqliteError:
708
- throw sqliteFailure(error)
677
+ if error is NativeSqliteError: throw sqliteFailure(error)
709
678
  throw error
710
679
 
711
680
  async def close():
712
- try:
713
- await self.native.close()
681
+ try: await self.native.close()
714
682
  catch error:
715
- if error is NativeSqliteError:
716
- throw sqliteFailure(error)
683
+ if error is NativeSqliteError: throw sqliteFailure(error)
717
684
  throw SqliteError(error.message)
718
685
 
719
- @dispose:
720
- await self.close()
686
+ @dispose: await self.close()
721
687
 
722
688
  export async def openSqlite(path: string, options: SqliteOptions = {}) -> SqliteConnection:
723
- try:
724
- return SqliteConnection(await openNativeSqlite(path, options))
689
+ try: return SqliteConnection(await openNativeSqlite(path, options))
725
690
  catch error:
726
- if error is NativeSqliteError:
727
- throw sqliteFailure(error)
691
+ if error is NativeSqliteError: throw sqliteFailure(error)
728
692
  throw SqliteError(error.message)