@quereus/plugin-nativescript-sqlite 0.1.1 → 0.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/plugin-nativescript-sqlite",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "description": "NativeScript SQLite storage plugin for Quereus - mobile persistent storage",
6
6
  "keywords": [
@@ -1,38 +0,0 @@
1
- /**
2
- * NativeScript SQLite storage plugin for Quereus.
3
- *
4
- * Provides SQLite-based persistent storage for NativeScript mobile environments
5
- * (iOS and Android).
6
- *
7
- * @example Using as a plugin (recommended)
8
- * ```typescript
9
- * import { openOrCreate } from '@nativescript-community/sqlite';
10
- * import { Database, registerPlugin } from '@quereus/quereus';
11
- * import sqlitePlugin from '@quereus/plugin-nativescript-sqlite/plugin';
12
- *
13
- * const sqliteDb = openOrCreate('quereus.db');
14
- * const db = new Database();
15
- * await registerPlugin(db, sqlitePlugin, { db: sqliteDb });
16
- *
17
- * await db.exec(`
18
- * create table users (id integer primary key, name text)
19
- * using store
20
- * `);
21
- * ```
22
- *
23
- * @example Using the provider directly
24
- * ```typescript
25
- * import { openOrCreate } from '@nativescript-community/sqlite';
26
- * import { createSQLiteProvider } from '@quereus/plugin-nativescript-sqlite';
27
- * import { StoreModule } from '@quereus/store';
28
- *
29
- * const sqliteDb = openOrCreate('quereus.db');
30
- * const provider = createSQLiteProvider({ db: sqliteDb });
31
- * const storeModule = new StoreModule(provider);
32
- * db.registerVtabModule('store', storeModule);
33
- * ```
34
- */
35
- export { SQLiteStore, type SQLiteDatabase, type SQLiteStoreOptions } from './store.js';
36
- export { SQLiteProvider, createSQLiteProvider, type SQLiteProviderOptions } from './provider.js';
37
- export { default as plugin, type SQLitePluginConfig } from './plugin.js';
38
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
package/dist/src/index.js DELETED
@@ -1,38 +0,0 @@
1
- /**
2
- * NativeScript SQLite storage plugin for Quereus.
3
- *
4
- * Provides SQLite-based persistent storage for NativeScript mobile environments
5
- * (iOS and Android).
6
- *
7
- * @example Using as a plugin (recommended)
8
- * ```typescript
9
- * import { openOrCreate } from '@nativescript-community/sqlite';
10
- * import { Database, registerPlugin } from '@quereus/quereus';
11
- * import sqlitePlugin from '@quereus/plugin-nativescript-sqlite/plugin';
12
- *
13
- * const sqliteDb = openOrCreate('quereus.db');
14
- * const db = new Database();
15
- * await registerPlugin(db, sqlitePlugin, { db: sqliteDb });
16
- *
17
- * await db.exec(`
18
- * create table users (id integer primary key, name text)
19
- * using store
20
- * `);
21
- * ```
22
- *
23
- * @example Using the provider directly
24
- * ```typescript
25
- * import { openOrCreate } from '@nativescript-community/sqlite';
26
- * import { createSQLiteProvider } from '@quereus/plugin-nativescript-sqlite';
27
- * import { StoreModule } from '@quereus/store';
28
- *
29
- * const sqliteDb = openOrCreate('quereus.db');
30
- * const provider = createSQLiteProvider({ db: sqliteDb });
31
- * const storeModule = new StoreModule(provider);
32
- * db.registerVtabModule('store', storeModule);
33
- * ```
34
- */
35
- export { SQLiteStore } from './store.js';
36
- export { SQLiteProvider, createSQLiteProvider } from './provider.js';
37
- export { default as plugin } from './plugin.js';
38
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,WAAW,EAAgD,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAA8B,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,OAAO,IAAI,MAAM,EAA2B,MAAM,aAAa,CAAC"}
@@ -1,54 +0,0 @@
1
- /**
2
- * NativeScript SQLite plugin for Quereus.
3
- *
4
- * Registers a StoreModule backed by SQLite for NativeScript mobile environments.
5
- */
6
- import type { Database, SqlValue } from '@quereus/quereus';
7
- import { StoreModule } from '@quereus/store';
8
- import type { SQLiteDatabase } from './store.js';
9
- /**
10
- * Plugin configuration options.
11
- */
12
- export interface SQLitePluginConfig {
13
- /**
14
- * The SQLite database instance.
15
- * Obtain this from @nativescript-community/sqlite's openOrCreate().
16
- */
17
- db: SQLiteDatabase;
18
- /**
19
- * Prefix for table names to avoid collisions.
20
- * @default 'quereus_'
21
- */
22
- tablePrefix?: string;
23
- /**
24
- * Module name to register. Tables are created with `USING <moduleName>`.
25
- * @default 'store'
26
- */
27
- moduleName?: string;
28
- }
29
- /**
30
- * Register the NativeScript SQLite plugin with a database.
31
- *
32
- * @example
33
- * ```typescript
34
- * import { openOrCreate } from '@nativescript-community/sqlite';
35
- * import { Database, registerPlugin } from '@quereus/quereus';
36
- * import sqlitePlugin from '@quereus/plugin-nativescript-sqlite/plugin';
37
- *
38
- * const sqliteDb = openOrCreate('quereus.db');
39
- * const db = new Database();
40
- * await registerPlugin(db, sqlitePlugin, { db: sqliteDb });
41
- *
42
- * await db.exec(`
43
- * create table users (id integer primary key, name text)
44
- * using store
45
- * `);
46
- * ```
47
- */
48
- export default function register(_db: Database, config?: Record<string, SqlValue>): {
49
- vtables: {
50
- name: string;
51
- module: StoreModule;
52
- }[];
53
- };
54
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,EAAE,EAAE,cAAc,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,GAAG,EAAE,QAAQ,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAM;;;;;EA6BtC"}
@@ -1,50 +0,0 @@
1
- /**
2
- * NativeScript SQLite plugin for Quereus.
3
- *
4
- * Registers a StoreModule backed by SQLite for NativeScript mobile environments.
5
- */
6
- import { StoreModule } from '@quereus/store';
7
- import { SQLiteProvider } from './provider.js';
8
- /**
9
- * Register the NativeScript SQLite plugin with a database.
10
- *
11
- * @example
12
- * ```typescript
13
- * import { openOrCreate } from '@nativescript-community/sqlite';
14
- * import { Database, registerPlugin } from '@quereus/quereus';
15
- * import sqlitePlugin from '@quereus/plugin-nativescript-sqlite/plugin';
16
- *
17
- * const sqliteDb = openOrCreate('quereus.db');
18
- * const db = new Database();
19
- * await registerPlugin(db, sqlitePlugin, { db: sqliteDb });
20
- *
21
- * await db.exec(`
22
- * create table users (id integer primary key, name text)
23
- * using store
24
- * `);
25
- * ```
26
- */
27
- export default function register(_db, config = {}) {
28
- // The SQLite database must be provided
29
- const sqliteDb = config.db;
30
- if (!sqliteDb) {
31
- throw new Error('@quereus/plugin-nativescript-sqlite requires a "db" option with an open SQLite database. ' +
32
- 'Use openOrCreate() from @nativescript-community/sqlite to create one.');
33
- }
34
- const tablePrefix = config.tablePrefix ?? 'quereus_';
35
- const moduleName = config.moduleName ?? 'store';
36
- const provider = new SQLiteProvider({
37
- db: sqliteDb,
38
- tablePrefix,
39
- });
40
- const storeModule = new StoreModule(provider);
41
- return {
42
- vtables: [
43
- {
44
- name: moduleName,
45
- module: storeModule,
46
- },
47
- ],
48
- };
49
- }
50
- //# sourceMappingURL=plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA0B/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,GAAa,EACb,SAAmC,EAAE;IAErC,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAA+B,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,2FAA2F;YAC3F,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAI,MAAM,CAAC,WAAsB,IAAI,UAAU,CAAC;IACjE,MAAM,UAAU,GAAI,MAAM,CAAC,UAAqB,IAAI,OAAO,CAAC;IAE5D,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC;QAClC,EAAE,EAAE,QAAQ;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,WAAW;aACpB;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1,54 +0,0 @@
1
- /**
2
- * SQLite KVStore provider implementation for NativeScript.
3
- *
4
- * Manages SQLite-backed KV stores for the StoreModule.
5
- * Uses a single SQLite database with multiple tables (one per logical store).
6
- */
7
- import type { KVStore, KVStoreProvider } from '@quereus/store';
8
- import { type SQLiteDatabase } from './store.js';
9
- /**
10
- * Options for creating a SQLite provider.
11
- */
12
- export interface SQLiteProviderOptions {
13
- /**
14
- * The SQLite database instance.
15
- * Obtain this from @nativescript-community/sqlite's openOrCreate().
16
- */
17
- db: SQLiteDatabase;
18
- /**
19
- * Prefix for table names to avoid collisions.
20
- * @default 'quereus_'
21
- */
22
- tablePrefix?: string;
23
- }
24
- /**
25
- * SQLite implementation of KVStoreProvider for NativeScript.
26
- *
27
- * Creates separate tables for each logical store within a single SQLite database.
28
- * This is more efficient than multiple database files on mobile.
29
- */
30
- export declare class SQLiteProvider implements KVStoreProvider {
31
- private db;
32
- private tablePrefix;
33
- private stores;
34
- private catalogStore;
35
- constructor(options: SQLiteProviderOptions);
36
- /**
37
- * Get the table name for a store.
38
- * Sanitizes schema/table names to valid SQLite identifiers.
39
- */
40
- private getTableName;
41
- /**
42
- * Get the key for the store cache.
43
- */
44
- private getStoreKey;
45
- getStore(schemaName: string, tableName: string, _options?: Record<string, unknown>): Promise<KVStore>;
46
- getCatalogStore(): Promise<KVStore>;
47
- closeStore(schemaName: string, tableName: string): Promise<void>;
48
- closeAll(): Promise<void>;
49
- }
50
- /**
51
- * Create a SQLite provider with the given options.
52
- */
53
- export declare function createSQLiteProvider(options: SQLiteProviderOptions): SQLiteProvider;
54
- //# sourceMappingURL=provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,EAAE,EAAE,cAAc,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,YAAY,CAA4B;gBAEpC,OAAO,EAAE,qBAAqB;IAK1C;;;OAGG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAIb,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAarG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAOnC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAchC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}
@@ -1,80 +0,0 @@
1
- /**
2
- * SQLite KVStore provider implementation for NativeScript.
3
- *
4
- * Manages SQLite-backed KV stores for the StoreModule.
5
- * Uses a single SQLite database with multiple tables (one per logical store).
6
- */
7
- import { SQLiteStore } from './store.js';
8
- /**
9
- * SQLite implementation of KVStoreProvider for NativeScript.
10
- *
11
- * Creates separate tables for each logical store within a single SQLite database.
12
- * This is more efficient than multiple database files on mobile.
13
- */
14
- export class SQLiteProvider {
15
- db;
16
- tablePrefix;
17
- stores = new Map();
18
- catalogStore = null;
19
- constructor(options) {
20
- this.db = options.db;
21
- this.tablePrefix = options.tablePrefix ?? 'quereus_';
22
- }
23
- /**
24
- * Get the table name for a store.
25
- * Sanitizes schema/table names to valid SQLite identifiers.
26
- */
27
- getTableName(schemaName, tableName) {
28
- const sanitized = `${schemaName}_${tableName}`.replace(/[^a-zA-Z0-9_]/g, '_');
29
- return `${this.tablePrefix}${sanitized}`;
30
- }
31
- /**
32
- * Get the key for the store cache.
33
- */
34
- getStoreKey(schemaName, tableName) {
35
- return `${schemaName}.${tableName}`.toLowerCase();
36
- }
37
- async getStore(schemaName, tableName, _options) {
38
- const key = this.getStoreKey(schemaName, tableName);
39
- let store = this.stores.get(key);
40
- if (!store) {
41
- const sqliteTableName = this.getTableName(schemaName, tableName);
42
- store = SQLiteStore.create(this.db, sqliteTableName);
43
- this.stores.set(key, store);
44
- }
45
- return store;
46
- }
47
- async getCatalogStore() {
48
- if (!this.catalogStore) {
49
- this.catalogStore = SQLiteStore.create(this.db, `${this.tablePrefix}__catalog__`);
50
- }
51
- return this.catalogStore;
52
- }
53
- async closeStore(schemaName, tableName) {
54
- const key = this.getStoreKey(schemaName, tableName);
55
- const store = this.stores.get(key);
56
- if (store) {
57
- await store.close();
58
- this.stores.delete(key);
59
- }
60
- }
61
- async closeAll() {
62
- for (const store of this.stores.values()) {
63
- await store.close();
64
- }
65
- this.stores.clear();
66
- if (this.catalogStore) {
67
- await this.catalogStore.close();
68
- this.catalogStore = null;
69
- }
70
- // Close the underlying database
71
- this.db.close();
72
- }
73
- }
74
- /**
75
- * Create a SQLite provider with the given options.
76
- */
77
- export function createSQLiteProvider(options) {
78
- return new SQLiteProvider(options);
79
- }
80
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- /**
2
- * SQLite-based KVStore implementation for NativeScript.
3
- *
4
- * Uses @nativescript-community/sqlite for SQLite bindings on iOS/Android.
5
- * Keys and values are stored as BLOBs for correct lexicographic ordering.
6
- */
7
- import type { KVStore, KVEntry, WriteBatch, IterateOptions } from '@quereus/store';
8
- /**
9
- * Type definition for @nativescript-community/sqlite database.
10
- * We use a minimal interface to avoid hard dependency on the package types.
11
- */
12
- export interface SQLiteDatabase {
13
- execute(sql: string, params?: unknown[]): void;
14
- select(sql: string, params?: unknown[]): unknown[];
15
- transaction<T>(fn: (cancelTransaction: () => void) => T): T;
16
- close(): void;
17
- }
18
- /**
19
- * Options for opening a SQLite store.
20
- */
21
- export interface SQLiteStoreOptions {
22
- /** The SQLite database instance. */
23
- db: SQLiteDatabase;
24
- /** Table name for this KV store. Default: 'kv' */
25
- tableName?: string;
26
- }
27
- /**
28
- * SQLite implementation of KVStore for NativeScript.
29
- *
30
- * Keys and values are stored as BLOBs. SQLite compares BLOBs using memcmp(),
31
- * which provides correct lexicographic byte ordering for range scans.
32
- */
33
- export declare class SQLiteStore implements KVStore {
34
- private db;
35
- private tableName;
36
- private closed;
37
- private readonly sqlGet;
38
- private readonly sqlPut;
39
- private readonly sqlDelete;
40
- private readonly sqlHas;
41
- constructor(options: SQLiteStoreOptions);
42
- /**
43
- * Create a SQLiteStore with a new table in the given database.
44
- */
45
- static create(db: SQLiteDatabase, tableName?: string): SQLiteStore;
46
- private ensureTable;
47
- get(key: Uint8Array): Promise<Uint8Array | undefined>;
48
- put(key: Uint8Array, value: Uint8Array): Promise<void>;
49
- delete(key: Uint8Array): Promise<void>;
50
- has(key: Uint8Array): Promise<boolean>;
51
- iterate(options?: IterateOptions): AsyncIterable<KVEntry>;
52
- private buildIterateQuery;
53
- batch(): WriteBatch;
54
- close(): Promise<void>;
55
- approximateCount(options?: IterateOptions): Promise<number>;
56
- private checkOpen;
57
- /**
58
- * Execute a batch of operations atomically.
59
- * Called by SQLiteWriteBatch.
60
- */
61
- executeBatch(ops: Array<{
62
- type: 'put';
63
- key: Uint8Array;
64
- value: Uint8Array;
65
- } | {
66
- type: 'delete';
67
- key: Uint8Array;
68
- }>): void;
69
- }
70
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACnD,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,EAAE,EAAE,cAAc,CAAC;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,kBAAkB;IAcvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,GAAE,MAAa,GAAG,WAAW;IAIxE,OAAO,CAAC,WAAW;IAWb,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAWrD,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrC,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;IAchE,OAAO,CAAC,iBAAiB;IAiCzB,KAAK,IAAI,UAAU;IAKb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,gBAAgB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBjE,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,IAAI;CAa1H"}
package/dist/src/store.js DELETED
@@ -1,200 +0,0 @@
1
- /**
2
- * SQLite-based KVStore implementation for NativeScript.
3
- *
4
- * Uses @nativescript-community/sqlite for SQLite bindings on iOS/Android.
5
- * Keys and values are stored as BLOBs for correct lexicographic ordering.
6
- */
7
- /**
8
- * SQLite implementation of KVStore for NativeScript.
9
- *
10
- * Keys and values are stored as BLOBs. SQLite compares BLOBs using memcmp(),
11
- * which provides correct lexicographic byte ordering for range scans.
12
- */
13
- export class SQLiteStore {
14
- db;
15
- tableName;
16
- closed = false;
17
- // Prepared SQL statements (built once)
18
- sqlGet;
19
- sqlPut;
20
- sqlDelete;
21
- sqlHas;
22
- constructor(options) {
23
- this.db = options.db;
24
- this.tableName = options.tableName ?? 'kv';
25
- // Pre-build SQL statements
26
- this.sqlGet = `select value from ${this.tableName} where key = ?`;
27
- this.sqlPut = `insert or replace into ${this.tableName} (key, value) values (?, ?)`;
28
- this.sqlDelete = `delete from ${this.tableName} where key = ?`;
29
- this.sqlHas = `select 1 from ${this.tableName} where key = ? limit 1`;
30
- // Create table if it doesn't exist
31
- this.ensureTable();
32
- }
33
- /**
34
- * Create a SQLiteStore with a new table in the given database.
35
- */
36
- static create(db, tableName = 'kv') {
37
- return new SQLiteStore({ db, tableName });
38
- }
39
- ensureTable() {
40
- // Use WITHOUT ROWID for better key-value performance
41
- // Keys are BLOBs - SQLite uses memcmp() for correct byte ordering
42
- this.db.execute(`
43
- create table if not exists ${this.tableName} (
44
- key blob primary key,
45
- value blob
46
- ) without rowid
47
- `);
48
- }
49
- async get(key) {
50
- this.checkOpen();
51
- const rows = this.db.select(this.sqlGet, [toArrayBuffer(key)]);
52
- if (rows.length === 0 || rows[0].value === null) {
53
- return undefined;
54
- }
55
- return toUint8Array(rows[0].value);
56
- }
57
- async put(key, value) {
58
- this.checkOpen();
59
- this.db.execute(this.sqlPut, [toArrayBuffer(key), toArrayBuffer(value)]);
60
- }
61
- async delete(key) {
62
- this.checkOpen();
63
- this.db.execute(this.sqlDelete, [toArrayBuffer(key)]);
64
- }
65
- async has(key) {
66
- this.checkOpen();
67
- const rows = this.db.select(this.sqlHas, [toArrayBuffer(key)]);
68
- return rows.length > 0;
69
- }
70
- async *iterate(options) {
71
- this.checkOpen();
72
- const { sql, params } = this.buildIterateQuery(options);
73
- const rows = this.db.select(sql, params);
74
- for (const row of rows) {
75
- yield {
76
- key: toUint8Array(row.key),
77
- value: toUint8Array(row.value),
78
- };
79
- }
80
- }
81
- buildIterateQuery(options) {
82
- const conditions = [];
83
- const params = [];
84
- if (options?.gte) {
85
- conditions.push('key >= ?');
86
- params.push(toArrayBuffer(options.gte));
87
- }
88
- if (options?.gt) {
89
- conditions.push('key > ?');
90
- params.push(toArrayBuffer(options.gt));
91
- }
92
- if (options?.lte) {
93
- conditions.push('key <= ?');
94
- params.push(toArrayBuffer(options.lte));
95
- }
96
- if (options?.lt) {
97
- conditions.push('key < ?');
98
- params.push(toArrayBuffer(options.lt));
99
- }
100
- let sql = `select key, value from ${this.tableName}`;
101
- if (conditions.length > 0) {
102
- sql += ` where ${conditions.join(' and ')}`;
103
- }
104
- sql += ` order by key ${options?.reverse ? 'desc' : 'asc'}`;
105
- if (options?.limit !== undefined) {
106
- sql += ` limit ${options.limit}`;
107
- }
108
- return { sql, params };
109
- }
110
- batch() {
111
- this.checkOpen();
112
- return new SQLiteWriteBatch(this);
113
- }
114
- async close() {
115
- // Mark as closed but don't close the DB - it may be shared
116
- this.closed = true;
117
- }
118
- async approximateCount(options) {
119
- this.checkOpen();
120
- if (!options?.gte && !options?.gt && !options?.lte && !options?.lt) {
121
- // Fast path: count all rows
122
- const rows = this.db.select(`select count(*) as cnt from ${this.tableName}`, []);
123
- return rows[0]?.cnt ?? 0;
124
- }
125
- // With bounds, we need to count with conditions
126
- const { sql, params } = this.buildIterateQuery(options);
127
- const countSql = sql.replace(/^select key, value/, 'select count(*) as cnt').replace(/ order by.*$/, '');
128
- const rows = this.db.select(countSql, params);
129
- return rows[0]?.cnt ?? 0;
130
- }
131
- checkOpen() {
132
- if (this.closed) {
133
- throw new Error('SQLiteStore is closed');
134
- }
135
- }
136
- /**
137
- * Execute a batch of operations atomically.
138
- * Called by SQLiteWriteBatch.
139
- */
140
- executeBatch(ops) {
141
- this.checkOpen();
142
- this.db.transaction(() => {
143
- for (const op of ops) {
144
- if (op.type === 'put') {
145
- this.db.execute(this.sqlPut, [toArrayBuffer(op.key), toArrayBuffer(op.value)]);
146
- }
147
- else {
148
- this.db.execute(this.sqlDelete, [toArrayBuffer(op.key)]);
149
- }
150
- }
151
- });
152
- }
153
- }
154
- /**
155
- * WriteBatch implementation for SQLite.
156
- */
157
- class SQLiteWriteBatch {
158
- store;
159
- ops = [];
160
- constructor(store) {
161
- this.store = store;
162
- }
163
- put(key, value) {
164
- this.ops.push({ type: 'put', key, value });
165
- }
166
- delete(key) {
167
- this.ops.push({ type: 'delete', key });
168
- }
169
- async write() {
170
- if (this.ops.length > 0) {
171
- this.store.executeBatch(this.ops);
172
- this.ops = [];
173
- }
174
- }
175
- clear() {
176
- this.ops = [];
177
- }
178
- }
179
- // ============================================================================
180
- // Binary conversion utilities
181
- // ============================================================================
182
- /**
183
- * Convert Uint8Array to ArrayBuffer for SQLite BLOB binding.
184
- */
185
- function toArrayBuffer(bytes) {
186
- // Create a new ArrayBuffer copy to handle views into SharedArrayBuffer
187
- const copy = new ArrayBuffer(bytes.byteLength);
188
- new Uint8Array(copy).set(bytes);
189
- return copy;
190
- }
191
- /**
192
- * Convert ArrayBuffer or Uint8Array to Uint8Array.
193
- */
194
- function toUint8Array(data) {
195
- if (data instanceof Uint8Array) {
196
- return data;
197
- }
198
- return new Uint8Array(data);
199
- }
200
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}