@framers/sql-storage-adapter 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +363 -0
- package/dist/adapters/baseStorageAdapter.d.ts +204 -0
- package/dist/adapters/baseStorageAdapter.d.ts.map +1 -0
- package/dist/adapters/baseStorageAdapter.js +364 -0
- package/dist/adapters/baseStorageAdapter.js.map +1 -0
- package/dist/adapters/betterSqliteAdapter.d.ts +64 -0
- package/dist/adapters/betterSqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/betterSqliteAdapter.js +206 -0
- package/dist/adapters/betterSqliteAdapter.js.map +1 -0
- package/dist/adapters/capacitorSqliteAdapter.d.ts +33 -0
- package/dist/adapters/capacitorSqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/capacitorSqliteAdapter.js +95 -0
- package/dist/adapters/capacitorSqliteAdapter.js.map +1 -0
- package/dist/adapters/postgresAdapter.d.ts +180 -0
- package/dist/adapters/postgresAdapter.d.ts.map +1 -0
- package/dist/adapters/postgresAdapter.js +271 -0
- package/dist/adapters/postgresAdapter.js.map +1 -0
- package/dist/adapters/sqlJsAdapter.d.ts +28 -0
- package/dist/adapters/sqlJsAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlJsAdapter.js +136 -0
- package/dist/adapters/sqlJsAdapter.js.map +1 -0
- package/dist/adapters/supabase.d.ts +58 -0
- package/dist/adapters/supabase.d.ts.map +1 -0
- package/dist/adapters/supabase.js +385 -0
- package/dist/adapters/supabase.js.map +1 -0
- package/dist/database.d.ts +124 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +136 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver.d.ts +24 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +91 -0
- package/dist/resolver.js.map +1 -0
- package/dist/types/context.d.ts +221 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +9 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/events.d.ts +225 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +8 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/extensions.d.ts +73 -0
- package/dist/types/extensions.d.ts.map +1 -0
- package/dist/types/extensions.js +7 -0
- package/dist/types/extensions.js.map +1 -0
- package/dist/types/limitations.d.ts +46 -0
- package/dist/types/limitations.d.ts.map +1 -0
- package/dist/types/limitations.js +154 -0
- package/dist/types/limitations.js.map +1 -0
- package/dist/types.d.ts +235 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cloudBackup.d.ts +219 -0
- package/dist/utils/cloudBackup.d.ts.map +1 -0
- package/dist/utils/cloudBackup.js +289 -0
- package/dist/utils/cloudBackup.js.map +1 -0
- package/dist/utils/dataExport.d.ts +77 -0
- package/dist/utils/dataExport.d.ts.map +1 -0
- package/dist/utils/dataExport.js +212 -0
- package/dist/utils/dataExport.js.map +1 -0
- package/dist/utils/dataImport.d.ts +54 -0
- package/dist/utils/dataImport.d.ts.map +1 -0
- package/dist/utils/dataImport.js +324 -0
- package/dist/utils/dataImport.js.map +1 -0
- package/dist/utils/migration.d.ts +89 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +184 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/parameterUtils.d.ts +9 -0
- package/dist/utils/parameterUtils.d.ts.map +1 -0
- package/dist/utils/parameterUtils.js +17 -0
- package/dist/utils/parameterUtils.js.map +1 -0
- package/dist/utils/syncManager.d.ts +342 -0
- package/dist/utils/syncManager.d.ts.map +1 -0
- package/dist/utils/syncManager.js +533 -0
- package/dist/utils/syncManager.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level, user-friendly API for SQL storage.
|
|
3
|
+
*
|
|
4
|
+
* This module provides simple functions like:
|
|
5
|
+
* - createDatabase() - Automatically picks the best database for your environment
|
|
6
|
+
* - connectDatabase() - Explicit connection with clear options
|
|
7
|
+
* - openDatabase() - Simple file-based database
|
|
8
|
+
*/
|
|
9
|
+
import type { StorageAdapter } from './types';
|
|
10
|
+
import { type AdapterKind } from './resolver';
|
|
11
|
+
import type { PostgresAdapterOptions } from './adapters/postgresAdapter';
|
|
12
|
+
import type { CapacitorAdapterOptions } from './adapters/capacitorSqliteAdapter';
|
|
13
|
+
/**
|
|
14
|
+
* Database connection options.
|
|
15
|
+
*/
|
|
16
|
+
export interface DatabaseOptions {
|
|
17
|
+
/**
|
|
18
|
+
* Database URL (e.g., postgresql://user:pass@host/db).
|
|
19
|
+
* If provided, PostgreSQL will be used.
|
|
20
|
+
*/
|
|
21
|
+
url?: string;
|
|
22
|
+
/**
|
|
23
|
+
* File path for SQLite database.
|
|
24
|
+
* Used for local/offline storage.
|
|
25
|
+
*/
|
|
26
|
+
file?: string;
|
|
27
|
+
/**
|
|
28
|
+
* PostgreSQL-specific configuration.
|
|
29
|
+
* Automatically uses PostgreSQL when provided.
|
|
30
|
+
*/
|
|
31
|
+
postgres?: PostgresAdapterOptions;
|
|
32
|
+
/**
|
|
33
|
+
* Mobile (Capacitor) configuration.
|
|
34
|
+
* Automatically detected on mobile platforms.
|
|
35
|
+
*/
|
|
36
|
+
mobile?: CapacitorAdapterOptions;
|
|
37
|
+
/**
|
|
38
|
+
* Force a specific database type.
|
|
39
|
+
* Leave empty to auto-detect.
|
|
40
|
+
*/
|
|
41
|
+
type?: 'postgres' | 'sqlite' | 'browser' | 'mobile' | 'memory';
|
|
42
|
+
/**
|
|
43
|
+
* Custom priority order for adapter selection.
|
|
44
|
+
* Advanced: Only use if you need fine-grained control.
|
|
45
|
+
*/
|
|
46
|
+
priority?: AdapterKind[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a database connection.
|
|
50
|
+
* Automatically picks the best database for your environment.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* // Auto-detect (PostgreSQL in prod, SQLite locally)
|
|
55
|
+
* const db = await createDatabase();
|
|
56
|
+
*
|
|
57
|
+
* // Specify database URL
|
|
58
|
+
* const db = await createDatabase({
|
|
59
|
+
* url: process.env.DATABASE_URL
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* // Specify file path
|
|
63
|
+
* const db = await createDatabase({
|
|
64
|
+
* file: './my-app.db'
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* // Full PostgreSQL config
|
|
68
|
+
* const db = await createDatabase({
|
|
69
|
+
* postgres: {
|
|
70
|
+
* host: 'db.example.com',
|
|
71
|
+
* database: 'myapp',
|
|
72
|
+
* user: 'dbuser',
|
|
73
|
+
* password: process.env.DB_PASSWORD,
|
|
74
|
+
* ssl: true
|
|
75
|
+
* }
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function createDatabase(options?: DatabaseOptions): Promise<StorageAdapter>;
|
|
80
|
+
/**
|
|
81
|
+
* Connect to a remote database.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* // Simple connection string
|
|
86
|
+
* const db = await connectDatabase('postgresql://user:pass@host/db');
|
|
87
|
+
*
|
|
88
|
+
* // With full config
|
|
89
|
+
* const db = await connectDatabase({
|
|
90
|
+
* host: 'db.example.com',
|
|
91
|
+
* database: 'myapp',
|
|
92
|
+
* user: 'dbuser',
|
|
93
|
+
* password: process.env.DB_PASSWORD,
|
|
94
|
+
* ssl: true
|
|
95
|
+
* });
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function connectDatabase(config: string | PostgresAdapterOptions): Promise<StorageAdapter>;
|
|
99
|
+
/**
|
|
100
|
+
* Open a local database file.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* // SQLite file
|
|
105
|
+
* const db = await openDatabase('./my-app.db');
|
|
106
|
+
*
|
|
107
|
+
* // In-memory database
|
|
108
|
+
* const db = await openDatabase(':memory:');
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function openDatabase(filePath: string): Promise<StorageAdapter>;
|
|
112
|
+
/**
|
|
113
|
+
* Create an in-memory database.
|
|
114
|
+
* Perfect for testing or temporary storage.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* const db = await createMemoryDatabase();
|
|
119
|
+
* await db.exec('CREATE TABLE users (id INTEGER, name TEXT)');
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export declare function createMemoryDatabase(): Promise<StorageAdapter>;
|
|
123
|
+
export { resolveStorageAdapter } from './resolver';
|
|
124
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAwD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;;OAGG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgD3F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GACtC,OAAO,CAAC,cAAc,CAAC,CAKzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5E;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAEpE;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/database.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level, user-friendly API for SQL storage.
|
|
3
|
+
*
|
|
4
|
+
* This module provides simple functions like:
|
|
5
|
+
* - createDatabase() - Automatically picks the best database for your environment
|
|
6
|
+
* - connectDatabase() - Explicit connection with clear options
|
|
7
|
+
* - openDatabase() - Simple file-based database
|
|
8
|
+
*/
|
|
9
|
+
import { resolveStorageAdapter } from './resolver';
|
|
10
|
+
/**
|
|
11
|
+
* Create a database connection.
|
|
12
|
+
* Automatically picks the best database for your environment.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Auto-detect (PostgreSQL in prod, SQLite locally)
|
|
17
|
+
* const db = await createDatabase();
|
|
18
|
+
*
|
|
19
|
+
* // Specify database URL
|
|
20
|
+
* const db = await createDatabase({
|
|
21
|
+
* url: process.env.DATABASE_URL
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Specify file path
|
|
25
|
+
* const db = await createDatabase({
|
|
26
|
+
* file: './my-app.db'
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Full PostgreSQL config
|
|
30
|
+
* const db = await createDatabase({
|
|
31
|
+
* postgres: {
|
|
32
|
+
* host: 'db.example.com',
|
|
33
|
+
* database: 'myapp',
|
|
34
|
+
* user: 'dbuser',
|
|
35
|
+
* password: process.env.DB_PASSWORD,
|
|
36
|
+
* ssl: true
|
|
37
|
+
* }
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function createDatabase(options = {}) {
|
|
42
|
+
const resolverOptions = {};
|
|
43
|
+
// Handle URL (PostgreSQL)
|
|
44
|
+
if (options.url) {
|
|
45
|
+
resolverOptions.postgres = { connectionString: options.url };
|
|
46
|
+
}
|
|
47
|
+
// Handle PostgreSQL config
|
|
48
|
+
if (options.postgres) {
|
|
49
|
+
resolverOptions.postgres = options.postgres;
|
|
50
|
+
}
|
|
51
|
+
// Handle file path
|
|
52
|
+
if (options.file) {
|
|
53
|
+
resolverOptions.filePath = options.file;
|
|
54
|
+
}
|
|
55
|
+
// Handle mobile config
|
|
56
|
+
if (options.mobile) {
|
|
57
|
+
resolverOptions.capacitor = options.mobile;
|
|
58
|
+
}
|
|
59
|
+
// Handle explicit type
|
|
60
|
+
if (options.type) {
|
|
61
|
+
const typeMap = {
|
|
62
|
+
'postgres': 'postgres',
|
|
63
|
+
'sqlite': 'better-sqlite3',
|
|
64
|
+
'browser': 'sqljs',
|
|
65
|
+
'mobile': 'capacitor',
|
|
66
|
+
'memory': 'better-sqlite3' // Memory mode uses better-sqlite3 with :memory:
|
|
67
|
+
};
|
|
68
|
+
resolverOptions.priority = [typeMap[options.type]];
|
|
69
|
+
// Set in-memory mode for SQLite
|
|
70
|
+
if (options.type === 'memory') {
|
|
71
|
+
resolverOptions.filePath = ':memory:';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Handle custom priority
|
|
75
|
+
if (options.priority) {
|
|
76
|
+
resolverOptions.priority = options.priority;
|
|
77
|
+
}
|
|
78
|
+
const adapter = await resolveStorageAdapter(resolverOptions);
|
|
79
|
+
await adapter.open(resolverOptions.openOptions);
|
|
80
|
+
return adapter;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Connect to a remote database.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* // Simple connection string
|
|
88
|
+
* const db = await connectDatabase('postgresql://user:pass@host/db');
|
|
89
|
+
*
|
|
90
|
+
* // With full config
|
|
91
|
+
* const db = await connectDatabase({
|
|
92
|
+
* host: 'db.example.com',
|
|
93
|
+
* database: 'myapp',
|
|
94
|
+
* user: 'dbuser',
|
|
95
|
+
* password: process.env.DB_PASSWORD,
|
|
96
|
+
* ssl: true
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export async function connectDatabase(config) {
|
|
101
|
+
if (typeof config === 'string') {
|
|
102
|
+
return createDatabase({ url: config });
|
|
103
|
+
}
|
|
104
|
+
return createDatabase({ postgres: config });
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Open a local database file.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* // SQLite file
|
|
112
|
+
* const db = await openDatabase('./my-app.db');
|
|
113
|
+
*
|
|
114
|
+
* // In-memory database
|
|
115
|
+
* const db = await openDatabase(':memory:');
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export async function openDatabase(filePath) {
|
|
119
|
+
return createDatabase({ file: filePath });
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create an in-memory database.
|
|
123
|
+
* Perfect for testing or temporary storage.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const db = await createMemoryDatabase();
|
|
128
|
+
* await db.exec('CREATE TABLE users (id INTEGER, name TEXT)');
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export async function createMemoryDatabase() {
|
|
132
|
+
return openDatabase(':memory:');
|
|
133
|
+
}
|
|
134
|
+
// Re-export for backwards compatibility
|
|
135
|
+
export { resolveStorageAdapter } from './resolver';
|
|
136
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,qBAAqB,EAAmD,MAAM,YAAY,CAAC;AA6CpG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA2B,EAAE;IAChE,MAAM,eAAe,GAA6B,EAAE,CAAC;IAErD,0BAA0B;IAC1B,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,eAAe,CAAC,QAAQ,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/D,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,eAAe,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,gBAAgB,CAAE,gDAAgD;SACpE,CAAC;QACX,eAAe,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnD,gCAAgC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,eAAe,CAAC,QAAQ,GAAG,UAAU,CAAC;QACxC,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuC;IAEvC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED,wCAAwC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './types';
|
|
2
|
+
export * from './types/extensions';
|
|
3
|
+
export * from './types/context';
|
|
4
|
+
export * from './types/events';
|
|
5
|
+
export * from './types/limitations';
|
|
6
|
+
export * from './adapters/betterSqliteAdapter';
|
|
7
|
+
export * from './adapters/sqlJsAdapter';
|
|
8
|
+
export * from './adapters/capacitorSqliteAdapter';
|
|
9
|
+
export * from './adapters/postgresAdapter';
|
|
10
|
+
export * from './database';
|
|
11
|
+
export * from './resolver';
|
|
12
|
+
export * from './utils/dataExport';
|
|
13
|
+
export * from './utils/dataImport';
|
|
14
|
+
export * from './utils/migration';
|
|
15
|
+
export * from './utils/cloudBackup';
|
|
16
|
+
export * from './utils/syncManager';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAG3C,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Core types and interfaces
|
|
2
|
+
export * from './types';
|
|
3
|
+
// Extended types for advanced features
|
|
4
|
+
export * from './types/extensions';
|
|
5
|
+
export * from './types/context';
|
|
6
|
+
export * from './types/events';
|
|
7
|
+
export * from './types/limitations';
|
|
8
|
+
// Adapter implementations
|
|
9
|
+
export * from './adapters/betterSqliteAdapter';
|
|
10
|
+
export * from './adapters/sqlJsAdapter';
|
|
11
|
+
export * from './adapters/capacitorSqliteAdapter';
|
|
12
|
+
export * from './adapters/postgresAdapter';
|
|
13
|
+
// High-level API (recommended)
|
|
14
|
+
export * from './database';
|
|
15
|
+
// Low-level resolver (advanced usage)
|
|
16
|
+
export * from './resolver';
|
|
17
|
+
// Data export/import/migration utilities
|
|
18
|
+
export * from './utils/dataExport';
|
|
19
|
+
export * from './utils/dataImport';
|
|
20
|
+
export * from './utils/migration';
|
|
21
|
+
// Cloud backup and scheduled backup utilities
|
|
22
|
+
export * from './utils/cloudBackup';
|
|
23
|
+
// Sync manager for offline/online hybrid databases
|
|
24
|
+
export * from './utils/syncManager';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,cAAc,SAAS,CAAC;AAExB,uCAAuC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AAEpC,0BAA0B;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAE3C,+BAA+B;AAC/B,cAAc,YAAY,CAAC;AAE3B,sCAAsC;AACtC,cAAc,YAAY,CAAC;AAE3B,yCAAyC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAElC,8CAA8C;AAC9C,cAAc,qBAAqB,CAAC;AAEpC,mDAAmD;AACnD,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { StorageAdapter, StorageOpenOptions } from './types';
|
|
2
|
+
import type { AdapterKind } from './types/context';
|
|
3
|
+
import { type CapacitorAdapterOptions } from './adapters/capacitorSqliteAdapter';
|
|
4
|
+
export type { AdapterKind } from './types/context';
|
|
5
|
+
export interface StorageResolutionOptions {
|
|
6
|
+
/** Absolute path for sqlite file (used by better-sqlite3/sql.js when persistence is desired). */
|
|
7
|
+
filePath?: string;
|
|
8
|
+
/** Explicit adapter priority override. */
|
|
9
|
+
priority?: AdapterKind[];
|
|
10
|
+
/** Options passed to the Capacitor adapter. */
|
|
11
|
+
capacitor?: CapacitorAdapterOptions;
|
|
12
|
+
/** Options passed to the Postgres adapter. */
|
|
13
|
+
postgres?: {
|
|
14
|
+
connectionString?: string;
|
|
15
|
+
};
|
|
16
|
+
/** Options forwarded to adapter.open. */
|
|
17
|
+
openOptions?: StorageOpenOptions;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves the most appropriate storage adapter for the current runtime.
|
|
21
|
+
* Tries candidates in the supplied priority order and falls back when one fails.
|
|
22
|
+
*/
|
|
23
|
+
export declare const resolveStorageAdapter: (options?: StorageResolutionOptions) => Promise<StorageAdapter>;
|
|
24
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAyB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAgC,KAAK,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAI/G,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,yCAAyC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAgBD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAU,UAAS,wBAA6B,KAAG,OAAO,CAAC,cAAc,CA4E1G,CAAC"}
|
package/dist/resolver.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { StorageResolutionError } from './types';
|
|
3
|
+
import { createBetterSqliteAdapter } from './adapters/betterSqliteAdapter';
|
|
4
|
+
import { createSqlJsAdapter } from './adapters/sqlJsAdapter';
|
|
5
|
+
import { createCapacitorSqliteAdapter } from './adapters/capacitorSqliteAdapter';
|
|
6
|
+
import { createPostgresAdapter } from './adapters/postgresAdapter';
|
|
7
|
+
const isCapacitorRuntime = () => {
|
|
8
|
+
if (typeof window === 'undefined') {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const maybeCapacitor = window.Capacitor;
|
|
12
|
+
return Boolean(maybeCapacitor?.isNativePlatform?.());
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Resolves the most appropriate storage adapter for the current runtime.
|
|
16
|
+
* Tries candidates in the supplied priority order and falls back when one fails.
|
|
17
|
+
*/
|
|
18
|
+
export const resolveStorageAdapter = async (options = {}) => {
|
|
19
|
+
const envOverride = process.env.STORAGE_ADAPTER;
|
|
20
|
+
const postgresConnection = options.postgres?.connectionString ?? process.env.DATABASE_URL ?? undefined;
|
|
21
|
+
const filePath = options.filePath ?? path.join(process.cwd(), 'db_data', 'app.sqlite3');
|
|
22
|
+
const defaultPriority = (() => {
|
|
23
|
+
if (options.priority && options.priority.length > 0) {
|
|
24
|
+
return options.priority;
|
|
25
|
+
}
|
|
26
|
+
if (envOverride) {
|
|
27
|
+
return [envOverride];
|
|
28
|
+
}
|
|
29
|
+
if (isCapacitorRuntime()) {
|
|
30
|
+
return ['capacitor', 'sqljs'];
|
|
31
|
+
}
|
|
32
|
+
if (postgresConnection) {
|
|
33
|
+
return ['postgres', 'better-sqlite3', 'sqljs'];
|
|
34
|
+
}
|
|
35
|
+
return ['better-sqlite3', 'sqljs'];
|
|
36
|
+
})();
|
|
37
|
+
const candidates = defaultPriority.map((name) => {
|
|
38
|
+
switch (name) {
|
|
39
|
+
case 'postgres': {
|
|
40
|
+
return {
|
|
41
|
+
name,
|
|
42
|
+
factory: async () => {
|
|
43
|
+
if (!postgresConnection) {
|
|
44
|
+
throw new Error('DATABASE_URL or postgres connection string not provided.');
|
|
45
|
+
}
|
|
46
|
+
return createPostgresAdapter(postgresConnection);
|
|
47
|
+
},
|
|
48
|
+
openOptions: { connectionString: postgresConnection }
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
case 'better-sqlite3':
|
|
52
|
+
return {
|
|
53
|
+
name,
|
|
54
|
+
factory: async () => createBetterSqliteAdapter(filePath),
|
|
55
|
+
openOptions: { filePath }
|
|
56
|
+
};
|
|
57
|
+
case 'capacitor':
|
|
58
|
+
return {
|
|
59
|
+
name,
|
|
60
|
+
factory: async () => createCapacitorSqliteAdapter(options.capacitor)
|
|
61
|
+
};
|
|
62
|
+
case 'sqljs':
|
|
63
|
+
default:
|
|
64
|
+
return {
|
|
65
|
+
name: 'sqljs',
|
|
66
|
+
factory: async () => createSqlJsAdapter(),
|
|
67
|
+
openOptions: { filePath }
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const errors = [];
|
|
72
|
+
for (const candidate of candidates) {
|
|
73
|
+
try {
|
|
74
|
+
const adapter = await candidate.factory();
|
|
75
|
+
const openOptions = {
|
|
76
|
+
...candidate.openOptions,
|
|
77
|
+
...options.openOptions,
|
|
78
|
+
};
|
|
79
|
+
await adapter.open(openOptions);
|
|
80
|
+
console.info(`[StorageAdapter] Using adapter "${candidate.name}".`);
|
|
81
|
+
return adapter;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.warn(`[StorageAdapter] Failed to initialise adapter "${candidate.name}".`, error);
|
|
85
|
+
errors.push(error);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
throw new StorageResolutionError('Unable to resolve a storage adapter for the current environment.', errors);
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime context and introspection types for storage adapters.
|
|
3
|
+
*
|
|
4
|
+
* These types enable runtime inspection of adapter capabilities,
|
|
5
|
+
* connection state, and performance characteristics without requiring
|
|
6
|
+
* developers to manually check capability flags.
|
|
7
|
+
*/
|
|
8
|
+
import type { StorageAdapter, StorageCapability } from '../types';
|
|
9
|
+
import type { PerformanceMetrics } from './extensions';
|
|
10
|
+
/**
|
|
11
|
+
* Type of database connection.
|
|
12
|
+
*/
|
|
13
|
+
export type ConnectionType = 'file' | 'memory' | 'network';
|
|
14
|
+
/**
|
|
15
|
+
* Database engine identifier.
|
|
16
|
+
*/
|
|
17
|
+
export type DatabaseEngine = 'sqlite' | 'postgres' | 'mysql' | 'sqljs' | 'capacitor' | 'supabase';
|
|
18
|
+
/**
|
|
19
|
+
* Adapter identifier used by the resolver.
|
|
20
|
+
*/
|
|
21
|
+
export type AdapterKind = 'postgres' | 'better-sqlite3' | 'capacitor' | 'sqljs' | 'supabase';
|
|
22
|
+
/**
|
|
23
|
+
* Information about the current database connection.
|
|
24
|
+
*/
|
|
25
|
+
export interface ConnectionInfo {
|
|
26
|
+
/** Type of connection (file-based, in-memory, or network) */
|
|
27
|
+
type: ConnectionType;
|
|
28
|
+
/** Database engine being used */
|
|
29
|
+
engine: DatabaseEngine;
|
|
30
|
+
/** Engine version (if available) */
|
|
31
|
+
version?: string;
|
|
32
|
+
/** File path for file-based databases */
|
|
33
|
+
filePath?: string;
|
|
34
|
+
/** Host for network databases */
|
|
35
|
+
host?: string;
|
|
36
|
+
/** Database name for network databases */
|
|
37
|
+
database?: string;
|
|
38
|
+
/** Whether the connection is read-only */
|
|
39
|
+
readOnly: boolean;
|
|
40
|
+
/** When the connection was established */
|
|
41
|
+
connectedAt?: Date;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Concurrency model supported by the adapter.
|
|
45
|
+
*/
|
|
46
|
+
export type ConcurrencyModel = 'single' | 'pooled' | 'unlimited';
|
|
47
|
+
/**
|
|
48
|
+
* Persistence model of the adapter.
|
|
49
|
+
*/
|
|
50
|
+
export type PersistenceModel = 'memory' | 'file' | 'network';
|
|
51
|
+
/**
|
|
52
|
+
* Performance characteristics of an adapter.
|
|
53
|
+
*/
|
|
54
|
+
export interface PerformanceCharacteristics {
|
|
55
|
+
/** Concurrency model */
|
|
56
|
+
concurrency: ConcurrencyModel;
|
|
57
|
+
/** Persistence model */
|
|
58
|
+
persistence: PersistenceModel;
|
|
59
|
+
/** Supported transaction isolation levels */
|
|
60
|
+
transactionIsolation: string[];
|
|
61
|
+
/** Whether the adapter uses connection pooling */
|
|
62
|
+
usesConnectionPool: boolean;
|
|
63
|
+
/** Whether queries are executed asynchronously */
|
|
64
|
+
asyncExecution: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Adapter-specific limitations and constraints.
|
|
68
|
+
*/
|
|
69
|
+
export interface AdapterLimitations {
|
|
70
|
+
/** Maximum number of concurrent connections (if applicable) */
|
|
71
|
+
maxConnections?: number;
|
|
72
|
+
/** Maximum length of a single SQL statement (in bytes/characters) */
|
|
73
|
+
maxStatementLength?: number;
|
|
74
|
+
/** Maximum number of operations in a single batch */
|
|
75
|
+
maxBatchSize?: number;
|
|
76
|
+
/** Maximum size of a single parameter value (in bytes) */
|
|
77
|
+
maxParameterSize?: number;
|
|
78
|
+
/** Data types supported by this adapter */
|
|
79
|
+
supportedDataTypes: string[];
|
|
80
|
+
/** Features that are explicitly not supported */
|
|
81
|
+
unsupportedFeatures: string[];
|
|
82
|
+
/** Performance characteristics */
|
|
83
|
+
performanceCharacteristics: PerformanceCharacteristics;
|
|
84
|
+
/** Additional adapter-specific constraints */
|
|
85
|
+
constraints?: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Current health and status of the adapter.
|
|
89
|
+
*/
|
|
90
|
+
export interface AdapterStatus {
|
|
91
|
+
/** Whether the adapter is functioning correctly */
|
|
92
|
+
healthy: boolean;
|
|
93
|
+
/** Whether the adapter is currently connected */
|
|
94
|
+
connected: boolean;
|
|
95
|
+
/** Last error encountered (if any) */
|
|
96
|
+
lastError?: Error;
|
|
97
|
+
/** Timestamp of last successful query */
|
|
98
|
+
lastQuery?: Date;
|
|
99
|
+
/** Total number of queries executed */
|
|
100
|
+
totalQueries: number;
|
|
101
|
+
/** Total number of errors encountered */
|
|
102
|
+
errors: number;
|
|
103
|
+
/** Time since adapter was opened (in milliseconds) */
|
|
104
|
+
uptime: number;
|
|
105
|
+
/** Performance metrics (if available) */
|
|
106
|
+
metrics?: PerformanceMetrics;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Runtime context providing introspection into the current adapter.
|
|
110
|
+
*
|
|
111
|
+
* This interface provides a high-level API for querying adapter
|
|
112
|
+
* capabilities, connection state, and performance without requiring
|
|
113
|
+
* manual capability flag checking.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const context = adapter.context;
|
|
118
|
+
*
|
|
119
|
+
* // Simple boolean checks
|
|
120
|
+
* if (context.supportsBatch) {
|
|
121
|
+
* await adapter.batch(operations);
|
|
122
|
+
* }
|
|
123
|
+
*
|
|
124
|
+
* // Get detailed status
|
|
125
|
+
* const status = context.getStatus();
|
|
126
|
+
* console.log(`Healthy: ${status.healthy}, Queries: ${status.totalQueries}`);
|
|
127
|
+
*
|
|
128
|
+
* // Get limitations
|
|
129
|
+
* const limits = context.getLimitations();
|
|
130
|
+
* console.log(`Max batch size: ${limits.maxBatchSize}`);
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
export interface AdapterContext {
|
|
134
|
+
/** Reference to the underlying adapter */
|
|
135
|
+
readonly adapter: StorageAdapter;
|
|
136
|
+
/** Adapter kind identifier */
|
|
137
|
+
readonly kind: AdapterKind;
|
|
138
|
+
/** Set of capabilities supported by this adapter */
|
|
139
|
+
readonly capabilities: ReadonlySet<StorageCapability>;
|
|
140
|
+
/** Whether the adapter is currently open/connected */
|
|
141
|
+
readonly isOpen: boolean;
|
|
142
|
+
/** Whether the adapter supports synchronous operations */
|
|
143
|
+
readonly supportsSync: boolean;
|
|
144
|
+
/** Whether the adapter supports ACID transactions */
|
|
145
|
+
readonly supportsTransactions: boolean;
|
|
146
|
+
/** Whether the adapter supports batch operations */
|
|
147
|
+
readonly supportsBatch: boolean;
|
|
148
|
+
/** Whether the adapter supports prepared statements */
|
|
149
|
+
readonly supportsPrepared: boolean;
|
|
150
|
+
/** Whether the adapter supports streaming results */
|
|
151
|
+
readonly supportsStreaming: boolean;
|
|
152
|
+
/** Whether the adapter supports Write-Ahead Logging */
|
|
153
|
+
readonly supportsWAL: boolean;
|
|
154
|
+
/** Whether the adapter supports native JSON operations */
|
|
155
|
+
readonly supportsJSON: boolean;
|
|
156
|
+
/** Whether the adapter supports array data types */
|
|
157
|
+
readonly supportsArrays: boolean;
|
|
158
|
+
/** Whether the adapter supports concurrent connections */
|
|
159
|
+
readonly supportsConcurrent: boolean;
|
|
160
|
+
/** Whether the adapter persists data across restarts */
|
|
161
|
+
readonly supportsPersistence: boolean;
|
|
162
|
+
/** Information about the current connection */
|
|
163
|
+
readonly connectionInfo: ConnectionInfo;
|
|
164
|
+
/**
|
|
165
|
+
* Check if a specific capability is supported.
|
|
166
|
+
*
|
|
167
|
+
* @param capability - The capability to check
|
|
168
|
+
* @returns True if the capability is supported
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* if (context.hasCapability('streaming')) {
|
|
173
|
+
* // Use streaming API
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
hasCapability(capability: StorageCapability): boolean;
|
|
178
|
+
/**
|
|
179
|
+
* Require a specific capability, throwing an error if not supported.
|
|
180
|
+
*
|
|
181
|
+
* @param capability - The required capability
|
|
182
|
+
* @throws {Error} If the capability is not supported
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```typescript
|
|
186
|
+
* context.requiresCapability('transactions');
|
|
187
|
+
* // Safe to use transactions now
|
|
188
|
+
* await adapter.transaction(async (trx) => { ... });
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
requiresCapability(capability: StorageCapability): void;
|
|
192
|
+
/**
|
|
193
|
+
* Get detailed limitations and constraints for this adapter.
|
|
194
|
+
*
|
|
195
|
+
* @returns Adapter-specific limitations
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const limits = context.getLimitations();
|
|
200
|
+
* if (operations.length > limits.maxBatchSize) {
|
|
201
|
+
* // Split into chunks
|
|
202
|
+
* }
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
getLimitations(): AdapterLimitations;
|
|
206
|
+
/**
|
|
207
|
+
* Get current health and status information.
|
|
208
|
+
*
|
|
209
|
+
* @returns Current adapter status
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* const status = context.getStatus();
|
|
214
|
+
* if (!status.healthy) {
|
|
215
|
+
* logger.error('Database unhealthy', status.lastError);
|
|
216
|
+
* }
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
getStatus(): AdapterStatus;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"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"}
|