@enbox/dwn-sql-store 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +178 -0
- package/dist/cjs/main.js +3784 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/src/data-store-sql.js +103 -0
- package/dist/esm/src/data-store-sql.js.map +1 -0
- package/dist/esm/src/dialect/dialect.js +2 -0
- package/dist/esm/src/dialect/dialect.js.map +1 -0
- package/dist/esm/src/dialect/mysql-dialect.js +40 -0
- package/dist/esm/src/dialect/mysql-dialect.js.map +1 -0
- package/dist/esm/src/dialect/postgres-dialect.js +26 -0
- package/dist/esm/src/dialect/postgres-dialect.js.map +1 -0
- package/dist/esm/src/dialect/sqlite-dialect.js +33 -0
- package/dist/esm/src/dialect/sqlite-dialect.js.map +1 -0
- package/dist/esm/src/event-log-sql.js +169 -0
- package/dist/esm/src/event-log-sql.js.map +1 -0
- package/dist/esm/src/main.js +9 -0
- package/dist/esm/src/main.js.map +1 -0
- package/dist/esm/src/message-store-sql.js +317 -0
- package/dist/esm/src/message-store-sql.js.map +1 -0
- package/dist/esm/src/resumable-task-store-sql.js +141 -0
- package/dist/esm/src/resumable-task-store-sql.js.map +1 -0
- package/dist/esm/src/types.js +2 -0
- package/dist/esm/src/types.js.map +1 -0
- package/dist/esm/src/utils/filter.js +125 -0
- package/dist/esm/src/utils/filter.js.map +1 -0
- package/dist/esm/src/utils/sanitize.js +92 -0
- package/dist/esm/src/utils/sanitize.js.map +1 -0
- package/dist/esm/src/utils/tags.js +38 -0
- package/dist/esm/src/utils/tags.js.map +1 -0
- package/dist/esm/src/utils/transaction.js +25 -0
- package/dist/esm/src/utils/transaction.js.map +1 -0
- package/dist/types/src/data-store-sql.d.ts +14 -0
- package/dist/types/src/data-store-sql.d.ts.map +1 -0
- package/dist/types/src/dialect/dialect.d.ts +40 -0
- package/dist/types/src/dialect/dialect.d.ts.map +1 -0
- package/dist/types/src/dialect/mysql-dialect.d.ts +18 -0
- package/dist/types/src/dialect/mysql-dialect.d.ts.map +1 -0
- package/dist/types/src/dialect/postgres-dialect.d.ts +12 -0
- package/dist/types/src/dialect/postgres-dialect.d.ts.map +1 -0
- package/dist/types/src/dialect/sqlite-dialect.d.ts +12 -0
- package/dist/types/src/dialect/sqlite-dialect.d.ts.map +1 -0
- package/dist/types/src/event-log-sql.d.ts +24 -0
- package/dist/types/src/event-log-sql.d.ts.map +1 -0
- package/dist/types/src/main.d.ts +9 -0
- package/dist/types/src/main.d.ts.map +1 -0
- package/dist/types/src/message-store-sql.d.ts +46 -0
- package/dist/types/src/message-store-sql.d.ts.map +1 -0
- package/dist/types/src/resumable-task-store-sql.d.ts +16 -0
- package/dist/types/src/resumable-task-store-sql.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +100 -0
- package/dist/types/src/types.d.ts.map +1 -0
- package/dist/types/src/utils/filter.d.ts +13 -0
- package/dist/types/src/utils/filter.d.ts.map +1 -0
- package/dist/types/src/utils/sanitize.d.ts +28 -0
- package/dist/types/src/utils/sanitize.d.ts.map +1 -0
- package/dist/types/src/utils/tags.d.ts +20 -0
- package/dist/types/src/utils/tags.d.ts.map +1 -0
- package/dist/types/src/utils/transaction.d.ts +7 -0
- package/dist/types/src/utils/transaction.d.ts.map +1 -0
- package/package.json +91 -0
- package/src/data-store-sql.ts +148 -0
- package/src/dialect/dialect.ts +77 -0
- package/src/dialect/mysql-dialect.ts +86 -0
- package/src/dialect/postgres-dialect.ts +66 -0
- package/src/dialect/sqlite-dialect.ts +72 -0
- package/src/event-log-sql.ts +227 -0
- package/src/main.ts +8 -0
- package/src/message-store-sql.ts +440 -0
- package/src/resumable-task-store-sql.ts +174 -0
- package/src/types.ts +109 -0
- package/src/utils/filter.ts +136 -0
- package/src/utils/sanitize.ts +117 -0
- package/src/utils/tags.ts +46 -0
- package/src/utils/transaction.ts +28 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export function extractTagsAndSanitizeIndexes(records) {
|
|
2
|
+
const tags = {};
|
|
3
|
+
const indexes = { ...records };
|
|
4
|
+
sanitizeIndexes(indexes);
|
|
5
|
+
// tag values are prefixed with 'tag.', we extract them to be inserted separately into the tags reference tables.
|
|
6
|
+
// we delete them from the `indexes` object so they are not included in the main insert.
|
|
7
|
+
for (let key in indexes) {
|
|
8
|
+
if (key.startsWith('tag.')) {
|
|
9
|
+
let value = indexes[key];
|
|
10
|
+
delete indexes[key];
|
|
11
|
+
tags[key.slice(4)] = value;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return { tags, indexes };
|
|
15
|
+
}
|
|
16
|
+
export function sanitizeIndexes(records) {
|
|
17
|
+
for (let key in records) {
|
|
18
|
+
let value = records[key];
|
|
19
|
+
if (Array.isArray(value)) {
|
|
20
|
+
const sanitizedValues = [];
|
|
21
|
+
for (const valueItem of value) {
|
|
22
|
+
sanitizedValues.push(sanitizedValue(valueItem));
|
|
23
|
+
}
|
|
24
|
+
records[key] = sanitizedValues;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
records[key] = sanitizedValue(value);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sanitizes the given value into a string or number.
|
|
32
|
+
* NOTE: sqlite3 we use does not support inserting boolean values, so we convert them to a number.
|
|
33
|
+
*/
|
|
34
|
+
export function sanitizedValue(value) {
|
|
35
|
+
switch (typeof value) {
|
|
36
|
+
case 'boolean':
|
|
37
|
+
return value ? 1 : 0;
|
|
38
|
+
default:
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Sanitizes the filters and separates tags from non-tags filter.
|
|
44
|
+
*/
|
|
45
|
+
export function sanitizeFiltersAndSeparateTags(filters) {
|
|
46
|
+
const extractedFilters = [];
|
|
47
|
+
for (const filter of filters) {
|
|
48
|
+
const tagFilter = {};
|
|
49
|
+
const nonTagFilter = {};
|
|
50
|
+
// tag values are prefixed with 'tag.', we extract them to be queried separately in the tags tables.
|
|
51
|
+
for (let key in filter) {
|
|
52
|
+
const value = sanitizeFilterValue(filter[key]);
|
|
53
|
+
if (key.startsWith('tag.')) {
|
|
54
|
+
tagFilter[key.slice(4)] = value;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
nonTagFilter[key] = value;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
extractedFilters.push({
|
|
61
|
+
tags: tagFilter,
|
|
62
|
+
filter: nonTagFilter,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return extractedFilters;
|
|
66
|
+
}
|
|
67
|
+
// we sanitize the filter value for a number representation of the boolean
|
|
68
|
+
/**
|
|
69
|
+
* Sanitizes the given filter value to align with the value conversions done during insertions/updates.
|
|
70
|
+
* NOTE: sqlite3 we use does not support inserting boolean values,
|
|
71
|
+
* so we convert them to a number during insertions/updates, as a result we need to align the filter values in queries.
|
|
72
|
+
*/
|
|
73
|
+
// TODO: export filter types from `dwn-sdk-js`
|
|
74
|
+
export function sanitizeFilterValue(value) {
|
|
75
|
+
switch (typeof value) {
|
|
76
|
+
case 'boolean':
|
|
77
|
+
return value ? 1 : 0;
|
|
78
|
+
default:
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function sanitizeFilters(filters) {
|
|
83
|
+
filters.forEach(sanitizeFilter);
|
|
84
|
+
}
|
|
85
|
+
export function sanitizeFilter(filter) {
|
|
86
|
+
for (let key in filter) {
|
|
87
|
+
let value = filter[key];
|
|
88
|
+
filter[key] = sanitizeFilterValue(value);
|
|
89
|
+
}
|
|
90
|
+
return filter;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../../src/utils/sanitize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { sanitizedValue } from './sanitize.js';
|
|
2
|
+
/**
|
|
3
|
+
* Helper class to manage adding indexes for `RecordsWrite` messages which contain `tags`.
|
|
4
|
+
*/
|
|
5
|
+
export class TagTables {
|
|
6
|
+
dialect;
|
|
7
|
+
table;
|
|
8
|
+
/**
|
|
9
|
+
* @param dialect the target dialect, necessary for returning the `insertId`
|
|
10
|
+
* @param table the DB Table in order to index the tags and values in the correct tables. Choice between `messageStoreMessages` and `eventLogMessages`
|
|
11
|
+
*/
|
|
12
|
+
constructor(dialect, table) {
|
|
13
|
+
this.dialect = dialect;
|
|
14
|
+
this.table = table;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Inserts the given tags associated with the given foreign `insertId`.
|
|
18
|
+
*/
|
|
19
|
+
async executeTagsInsert(foreignInsertId, tags, tx) {
|
|
20
|
+
const tagTable = this.table === 'messageStoreMessages' ? 'messageStoreRecordsTags' : 'eventLogRecordsTags';
|
|
21
|
+
const foreignKeyReference = tagTable === 'messageStoreRecordsTags' ? { messageInsertId: foreignInsertId } : { eventWatermark: foreignInsertId };
|
|
22
|
+
for (const tag in tags) {
|
|
23
|
+
const tagValues = tags[tag];
|
|
24
|
+
const values = Array.isArray(tagValues) ? tagValues : [tagValues];
|
|
25
|
+
for (const value of values) {
|
|
26
|
+
const tagInsertValue = sanitizedValue(value);
|
|
27
|
+
const insertValues = {
|
|
28
|
+
tag,
|
|
29
|
+
valueNumber: typeof tagInsertValue === 'number' ? tagInsertValue : null,
|
|
30
|
+
valueString: typeof tagInsertValue === 'string' ? tagInsertValue : null,
|
|
31
|
+
...foreignKeyReference,
|
|
32
|
+
};
|
|
33
|
+
await this.dialect.insertThenReturnId(tx, tagTable, insertValues, 'id as insertId').executeTakeFirstOrThrow();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../../src/utils/tags.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,MAAM,OAAO,SAAS;IAMA;IAA0B;IAJ9C;;;OAGG;IACH,YAAoB,OAAgB,EAAU,KAAkD;QAA5E,YAAO,GAAP,OAAO,CAAS;QAAU,UAAK,GAAL,KAAK,CAA6C;IAAE,CAAC;IAEnG;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,eAAuB,EACvB,IAAe,EACf,EAAgC;QAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,sBAAsB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC3G,MAAM,mBAAmB,GAAG,QAAQ,KAAK,yBAAyB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;QAEhJ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,SAAS,CAAE,CAAC;YAEpE,KAAI,MAAM,KAAK,IAAI,MAAM,EAAE;gBACzB,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM,YAAY,GAAG;oBACnB,GAAG;oBACH,WAAW,EAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;oBACxE,WAAW,EAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;oBACxE,GAAG,mBAAmB;iBACvB,CAAC;gBACF,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC,uBAAuB,EAAE,CAAC;aAC/G;SACF;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executes the provided transactional operation with retry if the database is locked.
|
|
3
|
+
*/
|
|
4
|
+
export async function executeWithRetryIfDatabaseIsLocked(database, operation) {
|
|
5
|
+
let retryCount = 0;
|
|
6
|
+
let success = false;
|
|
7
|
+
while (!success) {
|
|
8
|
+
try {
|
|
9
|
+
await database.transaction().execute(operation);
|
|
10
|
+
success = true;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
// if error is "database is locked", we retry the transaction
|
|
14
|
+
// this mainly happens when multiple transactions are trying to access the database at the same time in SQLite implementation.
|
|
15
|
+
if (error.code === 'SQLITE_BUSY') {
|
|
16
|
+
retryCount++;
|
|
17
|
+
console.log(`Database is locked when attempting SQL operation, retrying #${retryCount}...`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../src/utils/transaction.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,QAAiC,EACjC,SAAuE;IAEvE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,CAAC,OAAO,EAAE;QACf,IAAI;YACF,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,OAAO,GAAG,IAAI,CAAC;SAChB;QAAC,OAAO,KAAK,EAAE;YACd,6DAA6D;YAC7D,8HAA8H;YAC9H,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;gBAChC,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,+DAA+D,UAAU,KAAK,CAAC,CAAC;aAC7F;iBAAM;gBACL,MAAM,KAAK,CAAC;aACb;SACF;KACF;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DataStore, DataStoreGetResult, DataStorePutResult } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import { Readable } from 'readable-stream';
|
|
3
|
+
import { Dialect } from './dialect/dialect.js';
|
|
4
|
+
export declare class DataStoreSql implements DataStore {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(dialect: Dialect);
|
|
7
|
+
open(): Promise<void>;
|
|
8
|
+
close(): Promise<void>;
|
|
9
|
+
get(tenant: string, recordId: string, dataCid: string): Promise<DataStoreGetResult | undefined>;
|
|
10
|
+
put(tenant: string, recordId: string, dataCid: string, dataStream: Readable): Promise<DataStorePutResult>;
|
|
11
|
+
delete(tenant: string, recordId: string, dataCid: string): Promise<void>;
|
|
12
|
+
clear(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data-store-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-store-sql.d.ts","sourceRoot":"","sources":["../../../src/data-store-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,qBAAa,YAAa,YAAW,SAAS;;gBAIhC,OAAO,EAAE,OAAO;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IA8BpC,GAAG,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,QAAQ,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAoBxB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAeV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ColumnBuilderCallback, ColumnDataType, CreateTableBuilder, Dialect as KyselyDialect, Kysely, InsertObject, InsertQueryBuilder, Selection, SelectExpression, Transaction } from 'kysely';
|
|
2
|
+
export interface Dialect extends KyselyDialect {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly isStreamingSupported: boolean;
|
|
5
|
+
hasTable(db: Kysely<any>, tableName: string): Promise<boolean>;
|
|
6
|
+
addAutoIncrementingColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
7
|
+
addBlobColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
8
|
+
/**
|
|
9
|
+
* This is a helper method to add a column with foreign key constraints.
|
|
10
|
+
* This is primarily useful because the `mySQL` dialect adds the constraints in a different way than `sqlite` and `postgres`.
|
|
11
|
+
*
|
|
12
|
+
* @param builder the CreateTableBuilder to add the column to.
|
|
13
|
+
* @param tableName the name of the table to add the column to.
|
|
14
|
+
* @param columnName the name of the column to add.
|
|
15
|
+
* @param columnType the type of the column to add.
|
|
16
|
+
* @param referenceTable the foreign table to reference.
|
|
17
|
+
* @param referenceColumnName the foreign column to reference.
|
|
18
|
+
* @param onDeleteAction the action to take when the referenced row is deleted.
|
|
19
|
+
*
|
|
20
|
+
* @returns {CreateTableBuilder} the CreateTableBuilder with the added column.
|
|
21
|
+
*/
|
|
22
|
+
addReferencedColumn<TB extends string>(builder: CreateTableBuilder<TB & string>, tableName: TB, columnName: string, columnType: ColumnDataType, referenceTable: string, referenceColumnName: string, onDeleteAction: 'cascade' | 'no action' | 'restrict' | 'set null' | 'set default'): CreateTableBuilder<TB & string>;
|
|
23
|
+
/**
|
|
24
|
+
* This is a helper method to return an `insertId` across all dialects after inserting values.
|
|
25
|
+
* `postgres` and `sqlite` both support the `returning` clause, however `mysql` does not and instead returns the last inserted id.
|
|
26
|
+
*
|
|
27
|
+
* @param db the Kysely DB object or a DB Transaction.
|
|
28
|
+
* @param table the table to insert into.
|
|
29
|
+
* @param values the values to insert.
|
|
30
|
+
* @param returning a string representing the generated key you'd like returned as an insertId.
|
|
31
|
+
*
|
|
32
|
+
* NOTE: the `returning` value must be formatted to return an insertId value.
|
|
33
|
+
* ex. if the generated key is `id` the string should be `id as insertId`.
|
|
34
|
+
* if the generated key is `watermark` the string should be `watermark as insertId`.
|
|
35
|
+
*
|
|
36
|
+
* @returns {InsertQueryBuilder} object to further modify the query or execute it.
|
|
37
|
+
*/
|
|
38
|
+
insertThenReturnId<DB, TB extends keyof DB = keyof DB, SE extends SelectExpression<DB, TB & string> = any>(db: Transaction<DB> | Kysely<DB>, table: TB & string, values: InsertObject<DB, TB & string>, returning: SE & `${string} as insertId`): InsertQueryBuilder<DB, TB & string, Selection<DB, TB & string, SE & `${string} as insertId`>>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../../src/dialect/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,OAAO,IAAI,aAAa,EACxB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACZ,MAAM,QAAQ,CAAC;AAEhB,MAAM,WAAW,OAAQ,SAAQ,aAAa;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAEvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,yBAAyB,CAAC,EAAE,SAAS,MAAM,EACzC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE1B,aAAa,CAAC,EAAE,SAAS,MAAM,EAC7B,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE1B;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EACnC,OAAO,EAAE,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC,EACxC,SAAS,EAAE,EAAE,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,EAC1B,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAChF,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAEnC;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,SAAS,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,EACvG,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,EAAE,GAAG,MAAM,EAClB,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,EACrC,SAAS,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,GACtC,kBAAkB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC;CAClG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Dialect } from './dialect.js';
|
|
2
|
+
import { AnyColumn, ColumnDataType, CreateTableBuilder, ColumnBuilderCallback, InsertObject, InsertQueryBuilder, SelectExpression, Selection, Transaction, MysqlDialect as KyselyMysqlDialect, Kysely } from 'kysely';
|
|
3
|
+
export declare class MysqlDialect extends KyselyMysqlDialect implements Dialect {
|
|
4
|
+
name: string;
|
|
5
|
+
isStreamingSupported: boolean;
|
|
6
|
+
hasTable(db: Kysely<any>, tableName: string): Promise<boolean>;
|
|
7
|
+
addAutoIncrementingColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
8
|
+
addBlobColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
9
|
+
/**
|
|
10
|
+
* In MySQL, the ForeignKey name it creates in `mysql` will be in the following format:
|
|
11
|
+
* `${referenceTable}_${referenceColumnName}__${tableName}_${columnName}`
|
|
12
|
+
* ex: if the reference table is `users` and the reference column is `id` and the table is `profiles` and the column is `userId`,
|
|
13
|
+
* the resulting name for the foreign key is: `users_id__profiles_userId`
|
|
14
|
+
*/
|
|
15
|
+
addReferencedColumn<TB extends string>(builder: CreateTableBuilder<TB & string>, tableName: TB, columnName: string, columnType: ColumnDataType, referenceTable: string, referenceColumnName: string, onDeleteAction: 'cascade' | 'no action' | 'restrict' | 'set null' | 'set default'): CreateTableBuilder<TB & string>;
|
|
16
|
+
insertThenReturnId<DB, TB extends keyof DB = keyof DB, SE extends SelectExpression<DB, TB & string> = AnyColumn<DB, TB>>(db: Transaction<DB> | Kysely<DB>, table: TB & string, values: InsertObject<DB, TB & string>, _returning: SE & `${string} as insertId`): InsertQueryBuilder<DB, TB & string, Selection<DB, TB & string, SE & `${string} as insertId`>>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=mysql-dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql-dialect.d.ts","sourceRoot":"","sources":["../../../../src/dialect/mysql-dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,YAAY,IAAI,kBAAkB,EAClC,MAAM,EACP,MAAM,QAAQ,CAAC;AAEhB,qBAAa,YAAa,SAAQ,kBAAmB,YAAW,OAAO;IACrE,IAAI,SAAW;IACf,oBAAoB,UAAQ;IAEtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpE,yBAAyB,CAAC,EAAE,SAAS,MAAM,EACzC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC;IAUzB,aAAa,CAAC,EAAE,SAAS,MAAM,EAC7B,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC;IAIzB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EACnC,OAAO,EAAE,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC,EACxC,SAAS,EAAE,EAAE,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,EAC1B,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAChF,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC;IAYlC,kBAAkB,CAAC,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,SAAS,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EACrH,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,EAAE,GAAG,MAAM,EAClB,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,EACrC,UAAU,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,GACvC,kBAAkB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,CAAC,CAAC;CAGjG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Dialect } from './dialect.js';
|
|
2
|
+
import { ColumnDataType, ColumnBuilderCallback, CreateTableBuilder, InsertObject, InsertQueryBuilder, Kysely, PostgresDialect as KyselyPostgresDialect, SelectExpression, Selection, Transaction } from 'kysely';
|
|
3
|
+
export declare class PostgresDialect extends KyselyPostgresDialect implements Dialect {
|
|
4
|
+
name: string;
|
|
5
|
+
isStreamingSupported: boolean;
|
|
6
|
+
hasTable(db: Kysely<any>, tableName: string): Promise<boolean>;
|
|
7
|
+
addAutoIncrementingColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
8
|
+
addBlobColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
9
|
+
addReferencedColumn<TB extends string>(builder: CreateTableBuilder<TB & string>, _tableName: TB, columnName: string, columnType: ColumnDataType, referenceTable: string, referenceColumnName: string, onDeleteAction: 'cascade' | 'no action' | 'restrict' | 'set null' | 'set default'): CreateTableBuilder<TB & string>;
|
|
10
|
+
insertThenReturnId<DB, TB extends keyof DB = keyof DB, SE extends SelectExpression<DB, TB & string> = any>(db: Transaction<DB> | Kysely<DB>, table: TB & string, values: InsertObject<DB, TB & string>, returning: SE & `${string} as insertId`): InsertQueryBuilder<DB, TB & string, Selection<DB, TB & string, SE & `${string} as insertId`>>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=postgres-dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-dialect.d.ts","sourceRoot":"","sources":["../../../../src/dialect/postgres-dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACN,eAAe,IAAI,qBAAqB,EACxC,gBAAgB,EAChB,SAAS,EACT,WAAW,EACZ,MAAM,QAAQ,CAAC;AAEhB,qBAAa,eAAgB,SAAQ,qBAAsB,YAAW,OAAO;IAC3E,IAAI,SAAgB;IACpB,oBAAoB,UAAQ;IAEtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpE,yBAAyB,CAAC,EAAE,SAAS,MAAM,EACzC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC;IAIzB,aAAa,CAAC,EAAE,SAAS,MAAM,EAC7B,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC;IAIzB,mBAAmB,CAAC,EAAE,SAAS,MAAM,EACnC,OAAO,EAAE,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC,EACxC,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,EAC1B,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAChF,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC;IAIlC,kBAAkB,CAAC,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,SAAS,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,EACvG,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,EAAE,GAAG,MAAM,EAClB,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,EACrC,SAAS,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,GACtC,kBAAkB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,CAAC,CAAC;CAIjG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Dialect } from './dialect.js';
|
|
2
|
+
import { ColumnBuilderCallback, ColumnDataType, CreateTableBuilder, Kysely, InsertObject, InsertQueryBuilder, SelectExpression, Selection, SqliteDialect as KyselySqliteDialect, Transaction } from 'kysely';
|
|
3
|
+
export declare class SqliteDialect extends KyselySqliteDialect implements Dialect {
|
|
4
|
+
name: string;
|
|
5
|
+
isStreamingSupported: boolean;
|
|
6
|
+
hasTable(db: Kysely<any>, tableName: string): Promise<boolean>;
|
|
7
|
+
addAutoIncrementingColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
8
|
+
addBlobColumn<TB extends string>(builder: CreateTableBuilder<TB>, columnName: string, callback?: ColumnBuilderCallback): CreateTableBuilder<TB>;
|
|
9
|
+
addReferencedColumn<TB extends string>(builder: CreateTableBuilder<TB & string>, _tableName: TB, columnName: string, columnType: ColumnDataType, referenceTable: string, referenceColumnName: string, onDeleteAction: 'cascade' | 'no action' | 'restrict' | 'set null' | 'set default'): CreateTableBuilder<TB & string>;
|
|
10
|
+
insertThenReturnId<DB, TB extends keyof DB = keyof DB, SE extends SelectExpression<DB, TB & string> = any>(db: Transaction<DB> | Kysely<DB>, table: TB & string, values: InsertObject<DB, TB & string>, returning: SE & `${string} as insertId`): InsertQueryBuilder<DB, TB & string, Selection<DB, TB & string, SE & `${string} as insertId`>>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=sqlite-dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-dialect.d.ts","sourceRoot":"","sources":["../../../../src/dialect/sqlite-dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,aAAa,IAAI,mBAAmB,EACpC,WAAW,EACZ,MAAM,QAAQ,CAAC;AAEhB,qBAAa,aAAc,SAAQ,mBAAoB,YAAW,OAAO;IACvE,IAAI,SAAY;IAChB,oBAAoB,UAAS;IAEvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWpE,yBAAyB,CAAC,EAAE,SAAS,MAAM,EACzC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC;IAUzB,aAAa,CAAC,EAAE,SAAS,MAAM,EAC7B,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,kBAAkB,CAAC,EAAE,CAAC;IAIzB,mBAAmB,CAAC,EAAE,SAAS,MAAM,EACnC,OAAO,EAAE,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC,EACxC,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,EAC1B,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAChF,kBAAkB,CAAC,EAAE,GAAG,MAAM,CAAC;IAIlC,kBAAkB,CAAC,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,SAAS,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,EACvG,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,EAAE,GAAG,MAAM,EAClB,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,EACrC,SAAS,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,GACtC,kBAAkB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,GAAG,MAAM,cAAc,CAAC,CAAC;CAGjG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { EventLog, Filter, PaginationCursor } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import { Dialect } from './dialect/dialect.js';
|
|
3
|
+
export declare class EventLogSql implements EventLog {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(dialect: Dialect);
|
|
6
|
+
open(): Promise<void>;
|
|
7
|
+
close(): Promise<void>;
|
|
8
|
+
append(tenant: string, messageCid: string, indexes: Record<string, string | boolean | number>): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a transactional operation to insert an event into the database.
|
|
11
|
+
*/
|
|
12
|
+
private constructPutEventOperation;
|
|
13
|
+
getEvents(tenant: string, cursor?: PaginationCursor): Promise<{
|
|
14
|
+
events: string[];
|
|
15
|
+
cursor?: PaginationCursor;
|
|
16
|
+
}>;
|
|
17
|
+
queryEvents(tenant: string, filters: Filter[], cursor?: PaginationCursor): Promise<{
|
|
18
|
+
events: string[];
|
|
19
|
+
cursor?: PaginationCursor;
|
|
20
|
+
}>;
|
|
21
|
+
deleteEventsByCid(tenant: string, messageCids: Array<string>): Promise<void>;
|
|
22
|
+
clear(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=event-log-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-log-sql.d.ts","sourceRoot":"","sources":["../../../src/event-log-sql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAO/C,qBAAa,WAAY,YAAW,QAAQ;;gBAK9B,OAAO,EAAE,OAAO;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC;IAchB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+B5B,SAAS,CACb,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAMpD,WAAW,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAqDpD,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GACzB,OAAO,CAAC,IAAI,CAAC;IAkBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './dialect/dialect.js';
|
|
2
|
+
export * from './dialect/mysql-dialect.js';
|
|
3
|
+
export * from './dialect/postgres-dialect.js';
|
|
4
|
+
export * from './dialect/sqlite-dialect.js';
|
|
5
|
+
export * from './data-store-sql.js';
|
|
6
|
+
export * from './event-log-sql.js';
|
|
7
|
+
export * from './message-store-sql.js';
|
|
8
|
+
export * from './resumable-task-store-sql.js';
|
|
9
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Filter, GenericMessage, MessageStore, MessageStoreOptions, MessageSort, Pagination, PaginationCursor } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import { Kysely } from 'kysely';
|
|
3
|
+
import { KeyValues } from './types.js';
|
|
4
|
+
import { Dialect } from './dialect/dialect.js';
|
|
5
|
+
export declare class MessageStoreSql implements MessageStore {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(dialect: Dialect);
|
|
8
|
+
open(): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Creates indexes on the given table.
|
|
11
|
+
* @param tableName The name of the table to create the indexes on.
|
|
12
|
+
* @param indexes Each inner array represents a single index and contains the column names to be indexed as a composite index.
|
|
13
|
+
* If the inner array contains only one element, it will be treated as a single column index.
|
|
14
|
+
*/
|
|
15
|
+
createIndexes<T>(database: Kysely<T>, tableName: string, indexes: string[][]): Promise<void>;
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
put(tenant: string, message: GenericMessage, indexes: KeyValues, options?: MessageStoreOptions): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Constructs the transactional operation to insert the given message into the database.
|
|
20
|
+
*/
|
|
21
|
+
private constructPutMessageOperation;
|
|
22
|
+
get(tenant: string, cid: string, options?: MessageStoreOptions): Promise<GenericMessage | undefined>;
|
|
23
|
+
query(tenant: string, filters: Filter[], messageSort?: MessageSort, pagination?: Pagination, options?: MessageStoreOptions): Promise<{
|
|
24
|
+
messages: GenericMessage[];
|
|
25
|
+
cursor?: PaginationCursor;
|
|
26
|
+
}>;
|
|
27
|
+
delete(tenant: string, cid: string, options?: MessageStoreOptions): Promise<void>;
|
|
28
|
+
clear(): Promise<void>;
|
|
29
|
+
private parseEncodedMessage;
|
|
30
|
+
/**
|
|
31
|
+
* Processes the paginated query results.
|
|
32
|
+
* Builds a pagination cursor if there are additional messages to paginate.
|
|
33
|
+
* Accepts more messages than the limit, as we query for additional records to check if we should paginate.
|
|
34
|
+
*
|
|
35
|
+
* @param messages a list of messages, potentially larger than the provided limit.
|
|
36
|
+
* @param limit the maximum number of messages to be returned
|
|
37
|
+
*
|
|
38
|
+
* @returns the pruned message results and an optional pagination cursor
|
|
39
|
+
*/
|
|
40
|
+
private processPaginationResults;
|
|
41
|
+
/**
|
|
42
|
+
* Extracts the appropriate sort property and direction given a MessageSort object.
|
|
43
|
+
*/
|
|
44
|
+
private extractSortProperties;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=message-store-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-store-sql.d.ts","sourceRoot":"","sources":["../../../src/message-store-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EACN,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,UAAU,EAEV,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAmB,SAAS,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAQ/C,qBAAa,eAAgB,YAAW,YAAY;;gBAKtC,OAAO,EAAE,OAAO;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4F3B;;;;;OAKG;IACG,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACP,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAoC9B,GAAG,CACP,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IA0BhC,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAC,CAAC;IA6D9D,MAAM,CACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAmBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAYd,mBAAmB;IAuBjC;;;;;;;;;OASG;YACW,wBAAwB;IAsBtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Dialect } from './dialect/dialect.js';
|
|
2
|
+
import { ManagedResumableTask, ResumableTaskStore } from '@enbox/dwn-sdk-js';
|
|
3
|
+
export declare class ResumableTaskStoreSql implements ResumableTaskStore {
|
|
4
|
+
#private;
|
|
5
|
+
private static readonly taskTimeoutInSeconds;
|
|
6
|
+
constructor(dialect: Dialect);
|
|
7
|
+
open(): Promise<void>;
|
|
8
|
+
close(): Promise<void>;
|
|
9
|
+
register(task: any, timeoutInSeconds: number): Promise<ManagedResumableTask>;
|
|
10
|
+
grab(count: number): Promise<ManagedResumableTask[]>;
|
|
11
|
+
read(taskId: string): Promise<ManagedResumableTask | undefined>;
|
|
12
|
+
extend(taskId: string, timeoutInSeconds: number): Promise<void>;
|
|
13
|
+
delete(taskId: string): Promise<void>;
|
|
14
|
+
clear(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=resumable-task-store-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumable-task-store-sql.d.ts","sourceRoot":"","sources":["../../../src/resumable-task-store-sql.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAO,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAElF,qBAAa,qBAAsB,YAAW,kBAAkB;;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAM;gBAKtC,OAAO,EAAE,OAAO;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoB5E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA0CpD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAsB/D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Generated } from 'kysely';
|
|
2
|
+
export type KeyValues = {
|
|
3
|
+
[key: string]: string | number | boolean | string[] | number[];
|
|
4
|
+
};
|
|
5
|
+
type EventLogTable = {
|
|
6
|
+
watermark: Generated<number>;
|
|
7
|
+
tenant: string;
|
|
8
|
+
messageCid: string;
|
|
9
|
+
interface: string | null;
|
|
10
|
+
method: string | null;
|
|
11
|
+
schema: string | null;
|
|
12
|
+
dataCid: string | null;
|
|
13
|
+
dataSize: number | null;
|
|
14
|
+
dateCreated: string | null;
|
|
15
|
+
messageTimestamp: string | null;
|
|
16
|
+
dataFormat: string | null;
|
|
17
|
+
isLatestBaseState: boolean | null;
|
|
18
|
+
published: boolean | null;
|
|
19
|
+
author: string | null;
|
|
20
|
+
recordId: string | null;
|
|
21
|
+
entryId: string | null;
|
|
22
|
+
datePublished: string | null;
|
|
23
|
+
latest: string | null;
|
|
24
|
+
protocol: string | null;
|
|
25
|
+
permissionsRequestId: string | null;
|
|
26
|
+
attester: string | null;
|
|
27
|
+
protocolPath: string | null;
|
|
28
|
+
recipient: string | null;
|
|
29
|
+
contextId: string | null;
|
|
30
|
+
parentId: string | null;
|
|
31
|
+
permissionGrantId: string | null;
|
|
32
|
+
prune: boolean | null;
|
|
33
|
+
};
|
|
34
|
+
type MessageStoreTable = {
|
|
35
|
+
id: Generated<number>;
|
|
36
|
+
tenant: string;
|
|
37
|
+
messageCid: string;
|
|
38
|
+
encodedMessageBytes: Uint8Array;
|
|
39
|
+
encodedData: string | null;
|
|
40
|
+
interface: string | null;
|
|
41
|
+
method: string | null;
|
|
42
|
+
schema: string | null;
|
|
43
|
+
dataCid: string | null;
|
|
44
|
+
dataSize: number | null;
|
|
45
|
+
dateCreated: string | null;
|
|
46
|
+
messageTimestamp: string | null;
|
|
47
|
+
dataFormat: string | null;
|
|
48
|
+
isLatestBaseState: boolean | null;
|
|
49
|
+
published: boolean | null;
|
|
50
|
+
author: string | null;
|
|
51
|
+
recordId: string | null;
|
|
52
|
+
entryId: string | null;
|
|
53
|
+
datePublished: string | null;
|
|
54
|
+
protocol: string | null;
|
|
55
|
+
permissionsRequestId: string | null;
|
|
56
|
+
attester: string | null;
|
|
57
|
+
protocolPath: string | null;
|
|
58
|
+
recipient: string | null;
|
|
59
|
+
contextId: string | null;
|
|
60
|
+
parentId: string | null;
|
|
61
|
+
permissionGrantId: string | null;
|
|
62
|
+
prune: boolean | null;
|
|
63
|
+
};
|
|
64
|
+
type MessageStoreRecordsTagsTable = {
|
|
65
|
+
id: Generated<number>;
|
|
66
|
+
tag: string;
|
|
67
|
+
messageInsertId: number;
|
|
68
|
+
valueString: string | null;
|
|
69
|
+
valueNumber: number | null;
|
|
70
|
+
};
|
|
71
|
+
type EventLogRecordsTagsTable = {
|
|
72
|
+
id: Generated<number>;
|
|
73
|
+
tag: string;
|
|
74
|
+
eventWatermark: number;
|
|
75
|
+
valueString: string | null;
|
|
76
|
+
valueNumber: number | null;
|
|
77
|
+
};
|
|
78
|
+
type DataStoreTable = {
|
|
79
|
+
id: Generated<number>;
|
|
80
|
+
tenant: string;
|
|
81
|
+
recordId: string;
|
|
82
|
+
dataCid: string;
|
|
83
|
+
data: Uint8Array;
|
|
84
|
+
};
|
|
85
|
+
type ResumableTaskTable = {
|
|
86
|
+
id: string;
|
|
87
|
+
task: string;
|
|
88
|
+
timeout: number;
|
|
89
|
+
retryCount: number;
|
|
90
|
+
};
|
|
91
|
+
export type DwnDatabaseType = {
|
|
92
|
+
eventLogMessages: EventLogTable;
|
|
93
|
+
eventLogRecordsTags: EventLogRecordsTagsTable;
|
|
94
|
+
messageStoreMessages: MessageStoreTable;
|
|
95
|
+
messageStoreRecordsTags: MessageStoreRecordsTagsTable;
|
|
96
|
+
dataStore: DataStoreTable;
|
|
97
|
+
resumableTasks: ResumableTaskTable;
|
|
98
|
+
};
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Filter } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import { SelectQueryBuilder } from 'kysely';
|
|
3
|
+
import { DwnDatabaseType } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Takes multiple Filters and returns a single query.
|
|
6
|
+
* Each filter is evaluated as an OR operation.
|
|
7
|
+
*
|
|
8
|
+
* @param filters Array of filters to be evaluated as OR operations
|
|
9
|
+
* @param query the incoming QueryBuilder.
|
|
10
|
+
* @returns The modified QueryBuilder respecting the provided filters.
|
|
11
|
+
*/
|
|
12
|
+
export declare function filterSelectQuery<DB = DwnDatabaseType, TB extends keyof DB = keyof DB, O = unknown>(filters: Filter[], query: SelectQueryBuilder<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
13
|
+
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/utils/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAuD,kBAAkB,EAAW,MAAM,QAAQ,CAAC;AAE1G,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,GAAG,eAAe,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,GAAG,OAAO,EACjG,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACnC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAe/B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Filter } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import { KeyValues } from '../types.js';
|
|
3
|
+
export declare function extractTagsAndSanitizeIndexes(records: KeyValues): {
|
|
4
|
+
tags: KeyValues;
|
|
5
|
+
indexes: KeyValues;
|
|
6
|
+
};
|
|
7
|
+
export declare function sanitizeIndexes(records: KeyValues): void;
|
|
8
|
+
/**
|
|
9
|
+
* Sanitizes the given value into a string or number.
|
|
10
|
+
* NOTE: sqlite3 we use does not support inserting boolean values, so we convert them to a number.
|
|
11
|
+
*/
|
|
12
|
+
export declare function sanitizedValue(value: string | number | boolean): string | number;
|
|
13
|
+
/**
|
|
14
|
+
* Sanitizes the filters and separates tags from non-tags filter.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sanitizeFiltersAndSeparateTags(filters: Filter[]): {
|
|
17
|
+
tags: Filter;
|
|
18
|
+
filter: Filter;
|
|
19
|
+
}[];
|
|
20
|
+
/**
|
|
21
|
+
* Sanitizes the given filter value to align with the value conversions done during insertions/updates.
|
|
22
|
+
* NOTE: sqlite3 we use does not support inserting boolean values,
|
|
23
|
+
* so we convert them to a number during insertions/updates, as a result we need to align the filter values in queries.
|
|
24
|
+
*/
|
|
25
|
+
export declare function sanitizeFilterValue(value: any): any;
|
|
26
|
+
export declare function sanitizeFilters(filters: Filter[]): void;
|
|
27
|
+
export declare function sanitizeFilter(filter: Filter): Filter;
|
|
28
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,SAAS,GAAG;IACjE,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;CACpB,CAkBA;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,QAcjD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAOhF;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,EAAE,CA0BF;AAID;;;;EAIE;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAOnD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAEhD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMrD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Transaction } from 'kysely';
|
|
2
|
+
import type { DwnDatabaseType, KeyValues } from '../types.js';
|
|
3
|
+
import { Dialect } from '../dialect/dialect.js';
|
|
4
|
+
/**
|
|
5
|
+
* Helper class to manage adding indexes for `RecordsWrite` messages which contain `tags`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TagTables {
|
|
8
|
+
private dialect;
|
|
9
|
+
private table;
|
|
10
|
+
/**
|
|
11
|
+
* @param dialect the target dialect, necessary for returning the `insertId`
|
|
12
|
+
* @param table the DB Table in order to index the tags and values in the correct tables. Choice between `messageStoreMessages` and `eventLogMessages`
|
|
13
|
+
*/
|
|
14
|
+
constructor(dialect: Dialect, table: 'messageStoreMessages' | 'eventLogMessages');
|
|
15
|
+
/**
|
|
16
|
+
* Inserts the given tags associated with the given foreign `insertId`.
|
|
17
|
+
*/
|
|
18
|
+
executeTagsInsert(foreignInsertId: number, tags: KeyValues, tx: Transaction<DwnDatabaseType>): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../../src/utils/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD;;GAEG;AACH,qBAAa,SAAS;IAMR,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,KAAK;IAJnD;;;OAGG;gBACiB,OAAO,EAAE,OAAO,EAAU,KAAK,EAAE,sBAAsB,GAAG,kBAAkB;IAEhG;;OAEG;IACG,iBAAiB,CACrB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,WAAW,CAAC,eAAe,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;CAoBhB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DwnDatabaseType } from '../types.js';
|
|
2
|
+
import { Kysely, Transaction } from 'kysely';
|
|
3
|
+
/**
|
|
4
|
+
* Executes the provided transactional operation with retry if the database is locked.
|
|
5
|
+
*/
|
|
6
|
+
export declare function executeWithRetryIfDatabaseIsLocked(database: Kysely<DwnDatabaseType>, operation: (transaction: Transaction<DwnDatabaseType>) => Promise<void>): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE7C;;GAEG;AACH,wBAAsB,kCAAkC,CACtD,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,EACjC,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACtE,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|