taon-type-sql 21.0.47 → 21.0.49
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/VERIFIED-BUILD-DATA.jsonc +3 -3
- package/browser/package.json +1 -1
- package/browser-prod/fesm2022/taon-type-sql-browser-prod.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/package.json +1 -1
- package/lib-esm/app/routing/+admin-users/index.d.ts +1 -0
- package/lib-esm/app/routing/+admin-users/index.js +2 -0
- package/lib-esm/app/routing/+admin-users/index.js.map +1 -0
- package/lib-esm/app/shared/user/index.d.ts +0 -0
- package/lib-esm/app/shared/user/index.js +6 -0
- package/lib-esm/app/shared/user/index.js.map +1 -0
- package/lib-esm/app/shared/user/user.controller.d.ts +0 -0
- package/lib-esm/app/shared/user/user.controller.js +76 -0
- package/lib-esm/app/shared/user/user.controller.js.map +1 -0
- package/lib-esm/app/shared/user/user.d.ts +0 -0
- package/lib-esm/app/shared/user/user.helpers.d.ts +1 -0
- package/lib-esm/app/shared/user/user.helpers.js +2 -0
- package/lib-esm/app/shared/user/user.helpers.js.map +1 -0
- package/lib-esm/app/shared/user/user.js +53 -0
- package/lib-esm/app/shared/user/user.js.map +1 -0
- package/lib-esm/app/shared/user/user.models.d.ts +0 -0
- package/lib-esm/app/shared/user/user.models.js +25 -0
- package/lib-esm/app/shared/user/user.models.js.map +1 -0
- package/lib-esm/app.d.ts +0 -0
- package/lib-esm/app.electron.d.ts +0 -0
- package/lib-esm/app.electron.js +82 -0
- package/lib-esm/app.electron.js.map +1 -0
- package/lib-esm/app.hosts.d.ts +3 -0
- package/lib-esm/app.hosts.js +48 -0
- package/lib-esm/app.hosts.js.map +1 -0
- package/lib-esm/app.js +102 -0
- package/lib-esm/app.js.map +1 -0
- package/lib-esm/app.vscode.d.ts +0 -0
- package/lib-esm/app.vscode.js +47 -0
- package/lib-esm/app.vscode.js.map +1 -0
- package/lib-esm/index.d.ts +1 -0
- package/lib-esm/index.js +4 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/lib/build-info._auto-generated_.d.ts +24 -0
- package/lib-esm/lib/build-info._auto-generated_.js +27 -0
- package/lib-esm/lib/build-info._auto-generated_.js.map +1 -0
- package/lib-esm/lib/builder/column/basic-column.d.ts +8 -0
- package/lib-esm/lib/builder/column/basic-column.js +12 -0
- package/lib-esm/lib/builder/column/basic-column.js.map +1 -0
- package/lib-esm/lib/builder/column/boolean-column.d.ts +9 -0
- package/lib-esm/lib/builder/column/boolean-column.js +12 -0
- package/lib-esm/lib/builder/column/boolean-column.js.map +1 -0
- package/lib-esm/lib/builder/column/comparable-column.d.ts +18 -0
- package/lib-esm/lib/builder/column/comparable-column.js +40 -0
- package/lib-esm/lib/builder/column/comparable-column.js.map +1 -0
- package/lib-esm/lib/builder/column/date-column.d.ts +9 -0
- package/lib-esm/lib/builder/column/date-column.js +12 -0
- package/lib-esm/lib/builder/column/date-column.js.map +1 -0
- package/lib-esm/lib/builder/column/number-column.d.ts +10 -0
- package/lib-esm/lib/builder/column/number-column.js +17 -0
- package/lib-esm/lib/builder/column/number-column.js.map +1 -0
- package/lib-esm/lib/builder/column/query-column.d.ts +18 -0
- package/lib-esm/lib/builder/column/query-column.js +24 -0
- package/lib-esm/lib/builder/column/query-column.js.map +1 -0
- package/lib-esm/lib/builder/column/string-column.d.ts +17 -0
- package/lib-esm/lib/builder/column/string-column.js +34 -0
- package/lib-esm/lib/builder/column/string-column.js.map +1 -0
- package/lib-esm/lib/builder/column/value-column.d.ts +15 -0
- package/lib-esm/lib/builder/column/value-column.js +28 -0
- package/lib-esm/lib/builder/column/value-column.js.map +1 -0
- package/lib-esm/lib/builder/condition/query-column-condition.d.ts +13 -0
- package/lib-esm/lib/builder/condition/query-column-condition.js +20 -0
- package/lib-esm/lib/builder/condition/query-column-condition.js.map +1 -0
- package/lib-esm/lib/builder/condition/query-condition-chain.d.ts +17 -0
- package/lib-esm/lib/builder/condition/query-condition-chain.js +31 -0
- package/lib-esm/lib/builder/condition/query-condition-chain.js.map +1 -0
- package/lib-esm/lib/builder/condition/query-condition.d.ts +7 -0
- package/lib-esm/lib/builder/condition/query-condition.js +5 -0
- package/lib-esm/lib/builder/condition/query-condition.js.map +1 -0
- package/lib-esm/lib/builder/condition/query-join-condition.d.ts +12 -0
- package/lib-esm/lib/builder/condition/query-join-condition.js +20 -0
- package/lib-esm/lib/builder/condition/query-join-condition.js.map +1 -0
- package/lib-esm/lib/builder/helpers/generics-helper.d.ts +2 -0
- package/lib-esm/lib/builder/helpers/generics-helper.js +4 -0
- package/lib-esm/lib/builder/helpers/generics-helper.js.map +1 -0
- package/lib-esm/lib/builder/helpers/internal-types.d.ts +15 -0
- package/lib-esm/lib/builder/helpers/internal-types.js +3 -0
- package/lib-esm/lib/builder/helpers/internal-types.js.map +1 -0
- package/lib-esm/lib/builder/join/joined-tables-chain.d.ts +11 -0
- package/lib-esm/lib/builder/join/joined-tables-chain.js +15 -0
- package/lib-esm/lib/builder/join/joined-tables-chain.js.map +1 -0
- package/lib-esm/lib/builder/join/joined-tables.d.ts +12 -0
- package/lib-esm/lib/builder/join/joined-tables.js +22 -0
- package/lib-esm/lib/builder/join/joined-tables.js.map +1 -0
- package/lib-esm/lib/builder/other/query-ordering.d.ts +10 -0
- package/lib-esm/lib/builder/other/query-ordering.js +18 -0
- package/lib-esm/lib/builder/other/query-ordering.js.map +1 -0
- package/lib-esm/lib/builder/query/select-query.d.ts +29 -0
- package/lib-esm/lib/builder/query/select-query.js +51 -0
- package/lib-esm/lib/builder/query/select-query.js.map +1 -0
- package/lib-esm/lib/builder/query/table-condition-query.d.ts +16 -0
- package/lib-esm/lib/builder/query/table-condition-query.js +28 -0
- package/lib-esm/lib/builder/query/table-condition-query.js.map +1 -0
- package/lib-esm/lib/builder/query/table-query.d.ts +23 -0
- package/lib-esm/lib/builder/query/table-query.js +57 -0
- package/lib-esm/lib/builder/query/table-query.js.map +1 -0
- package/lib-esm/lib/builder/query-source.d.ts +14 -0
- package/lib-esm/lib/builder/query-source.js +19 -0
- package/lib-esm/lib/builder/query-source.js.map +1 -0
- package/lib-esm/lib/builder/query-table.d.ts +15 -0
- package/lib-esm/lib/builder/query-table.js +26 -0
- package/lib-esm/lib/builder/query-table.js.map +1 -0
- package/lib-esm/lib/client/mysql.d.ts +5 -0
- package/lib-esm/lib/client/mysql.js +8 -0
- package/lib-esm/lib/client/mysql.js.map +1 -0
- package/lib-esm/lib/client/pg.d.ts +5 -0
- package/lib-esm/lib/client/pg.js +8 -0
- package/lib-esm/lib/client/pg.js.map +1 -0
- package/lib-esm/lib/client/query-processor.d.ts +10 -0
- package/lib-esm/lib/client/query-processor.js +70 -0
- package/lib-esm/lib/client/query-processor.js.map +1 -0
- package/lib-esm/lib/converter/param-converter.d.ts +2 -0
- package/lib-esm/lib/converter/param-converter.js +27 -0
- package/lib-esm/lib/converter/param-converter.js.map +1 -0
- package/lib-esm/lib/converter/parameterized-converter.d.ts +5 -0
- package/lib-esm/lib/converter/parameterized-converter.js +15 -0
- package/lib-esm/lib/converter/parameterized-converter.js.map +1 -0
- package/lib-esm/lib/converter/query-converter.d.ts +2 -0
- package/lib-esm/lib/converter/query-converter.js +281 -0
- package/lib-esm/lib/converter/query-converter.js.map +1 -0
- package/lib-esm/lib/converter/result-converter.d.ts +2 -0
- package/lib-esm/lib/converter/result-converter.js +86 -0
- package/lib-esm/lib/converter/result-converter.js.map +1 -0
- package/lib-esm/lib/converter/sql-converter.d.ts +2 -0
- package/lib-esm/lib/converter/sql-converter.js +6 -0
- package/lib-esm/lib/converter/sql-converter.js.map +1 -0
- package/lib-esm/lib/converter/type-converter.d.ts +4 -0
- package/lib-esm/lib/converter/type-converter.js +37 -0
- package/lib-esm/lib/converter/type-converter.js.map +1 -0
- package/lib-esm/lib/converter/types.d.ts +5 -0
- package/lib-esm/lib/converter/types.js +2 -0
- package/lib-esm/lib/converter/types.js.map +1 -0
- package/lib-esm/lib/env/env.angular-node-app.d.ts +66 -0
- package/lib-esm/lib/env/env.angular-node-app.js +135 -0
- package/lib-esm/lib/env/env.angular-node-app.js.map +1 -0
- package/lib-esm/lib/env/env.docs-webapp.d.ts +66 -0
- package/lib-esm/lib/env/env.docs-webapp.js +135 -0
- package/lib-esm/lib/env/env.docs-webapp.js.map +1 -0
- package/lib-esm/lib/env/env.electron-app.d.ts +66 -0
- package/lib-esm/lib/env/env.electron-app.js +135 -0
- package/lib-esm/lib/env/env.electron-app.js.map +1 -0
- package/lib-esm/lib/env/env.mobile-app.d.ts +66 -0
- package/lib-esm/lib/env/env.mobile-app.js +135 -0
- package/lib-esm/lib/env/env.mobile-app.js.map +1 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +66 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +135 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-esm/lib/env/env.vscode-plugin.d.ts +66 -0
- package/lib-esm/lib/env/env.vscode-plugin.js +135 -0
- package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -0
- package/lib-esm/lib/env/index.d.ts +6 -0
- package/lib-esm/lib/env/index.js +7 -0
- package/lib-esm/lib/env/index.js.map +1 -0
- package/lib-esm/lib/index._auto-generated_.d.ts +0 -0
- package/lib-esm/lib/index._auto-generated_.js +6 -0
- package/lib-esm/lib/index._auto-generated_.js.map +1 -0
- package/lib-esm/lib/index.d.ts +25 -0
- package/lib-esm/lib/index.js +24 -0
- package/lib-esm/lib/index.js.map +1 -0
- package/lib-esm/lib/migrations/index.d.ts +1 -0
- package/lib-esm/lib/migrations/index.js +3 -0
- package/lib-esm/lib/migrations/index.js.map +1 -0
- package/lib-esm/lib/migrations/migrations_index._auto-generated_.d.ts +0 -0
- package/lib-esm/lib/migrations/migrations_index._auto-generated_.js +4 -0
- package/lib-esm/lib/migrations/migrations_index._auto-generated_.js.map +1 -0
- package/lib-prod/build-info._auto-generated_.d.ts +1 -1
- package/lib-prod/build-info._auto-generated_.js +1 -1
- package/lib-prod/package.json +1 -1
- package/package.json +1 -1
- package/src.js +4 -20
- package/websql/package.json +1 -1
- package/websql-prod/fesm2022/taon-type-sql-websql-prod.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import QueryTable from "../query-table";
|
|
2
|
+
import TableConditionQuery from "./table-condition-query";
|
|
3
|
+
import QueryCondition from "../condition/query-condition";
|
|
4
|
+
import QueryColumn from "../column/query-column";
|
|
5
|
+
import { QueryProcessor, QueryAction } from "../helpers/internal-types";
|
|
6
|
+
export default class TableQuery<Entity, Id, Table extends QueryTable<Entity, Id>> {
|
|
7
|
+
protected _queryProcessor: QueryProcessor;
|
|
8
|
+
protected _table: Table;
|
|
9
|
+
constructor(_queryProcessor: QueryProcessor, _table: Table);
|
|
10
|
+
protected _entity: Entity | Entity[] | Partial<Entity>;
|
|
11
|
+
protected _action: QueryAction;
|
|
12
|
+
protected _columns: QueryColumn<Table, any>[];
|
|
13
|
+
where(...conditions: QueryCondition<Table>[]): TableConditionQuery<Entity, Table>;
|
|
14
|
+
insert(entity: Entity): Promise<any>;
|
|
15
|
+
insert(entities: Entity[]): Promise<void>;
|
|
16
|
+
deleteAll(): Promise<number>;
|
|
17
|
+
updateAll(entity: Partial<Entity>): Promise<number>;
|
|
18
|
+
countAll(): Promise<number>;
|
|
19
|
+
delete(id: Id): Promise<boolean>;
|
|
20
|
+
update(id: Id, entity: Partial<Entity>): Promise<boolean>;
|
|
21
|
+
get(id: Id): Promise<Entity | undefined>;
|
|
22
|
+
_whereId(id: Id): TableConditionQuery<Entity, Table>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import TableConditionQuery from "./table-condition-query";
|
|
2
|
+
import ValueColumn from "../column/value-column";
|
|
3
|
+
export default class TableQuery {
|
|
4
|
+
_queryProcessor;
|
|
5
|
+
_table;
|
|
6
|
+
constructor(_queryProcessor, _table) {
|
|
7
|
+
this._queryProcessor = _queryProcessor;
|
|
8
|
+
this._table = _table;
|
|
9
|
+
}
|
|
10
|
+
_entity;
|
|
11
|
+
_action;
|
|
12
|
+
_columns = [];
|
|
13
|
+
where(...conditions) {
|
|
14
|
+
return new TableConditionQuery(this._queryProcessor, this._table, conditions);
|
|
15
|
+
}
|
|
16
|
+
insert(param) {
|
|
17
|
+
this._entity = param;
|
|
18
|
+
this._action = 'insert';
|
|
19
|
+
return this._queryProcessor(this);
|
|
20
|
+
}
|
|
21
|
+
deleteAll() {
|
|
22
|
+
this._action = 'delete';
|
|
23
|
+
return this._queryProcessor(this);
|
|
24
|
+
}
|
|
25
|
+
updateAll(entity) {
|
|
26
|
+
this._entity = entity;
|
|
27
|
+
this._action = 'update';
|
|
28
|
+
return this._queryProcessor(this);
|
|
29
|
+
}
|
|
30
|
+
countAll() {
|
|
31
|
+
this._columns = [this._table.$all.count()];
|
|
32
|
+
this._action = 'select';
|
|
33
|
+
return this._queryProcessor(this).then((rows) => rows[0]);
|
|
34
|
+
}
|
|
35
|
+
delete(id) {
|
|
36
|
+
return this._whereId(id).delete().then(count => count > 0);
|
|
37
|
+
}
|
|
38
|
+
update(id, entity) {
|
|
39
|
+
return this._whereId(id).update(entity).then(count => count > 0);
|
|
40
|
+
}
|
|
41
|
+
get(id) {
|
|
42
|
+
let query = this._whereId(id);
|
|
43
|
+
return this._queryProcessor({ _action: 'select', ...query })
|
|
44
|
+
.then((rows) => rows[0]);
|
|
45
|
+
}
|
|
46
|
+
_whereId(id) {
|
|
47
|
+
// TODO remove assertions if $id typing is fixed
|
|
48
|
+
let $id = this._table.$id;
|
|
49
|
+
if ($id instanceof ValueColumn) {
|
|
50
|
+
return this.where($id.eq(id));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return this.where(...Object.keys($id).map(key => this._table[key].eq(id[key])));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=table-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-query.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,yBAAyB,CAAC;AAE1D,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,UAAU;IAGb;IACA;IAFd,YACc,eAA+B,EAC/B,MAAa;QADb,oBAAe,GAAf,eAAe,CAAgB;QAC/B,WAAM,GAAN,MAAM,CAAO;IACxB,CAAC;IAEM,OAAO,CAAsC;IAC7C,OAAO,CAAc;IACrB,QAAQ,GAA8B,EAAE,CAAC;IAEnD,KAAK,CAAC,GAAG,UAAmC;QACxC,OAAO,IAAI,mBAAmB,CAAgB,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjG,CAAC;IAID,MAAM,CAAC,KAAU;QACb,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,SAAS;QACL,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,CAAC,MAAuB;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,EAAM;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,MAAuB;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,GAAG,CAAC,EAAM;QACN,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;aACvD,IAAI,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,EAAM;QACX,gDAAgD;QAChD,IAAI,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,CAAC;QACnC,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAG,IAAI,CAAC,MAAc,CAAC,GAAG,CAA6B,CAAC,EAAE,CAAE,EAAU,CAAC,GAAG,CAAQ,CAAC,CAAC,CAAC,CAAC;QAC1I,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import QueryTable from './query-table';
|
|
2
|
+
import SelectQuery from './query/select-query';
|
|
3
|
+
import { QueryProcessor } from "./helpers/internal-types";
|
|
4
|
+
import JoinedTables from "./join/joined-tables";
|
|
5
|
+
import TableQuery from "./query/table-query";
|
|
6
|
+
export default class QuerySource {
|
|
7
|
+
protected _queryProcessor: QueryProcessor;
|
|
8
|
+
constructor(_queryProcessor: QueryProcessor);
|
|
9
|
+
from<Entity, Table1 extends QueryTable<Entity, any>>(table1: Table1 & QueryTable<Entity, any>): SelectQuery<Entity, Table1>;
|
|
10
|
+
from<Tables extends QueryTable<any, any>>(tables: JoinedTables<Tables>): SelectQuery<any, Tables>;
|
|
11
|
+
from<Table1 extends QueryTable<any, any>, Table2 extends QueryTable<any, any>>(table1: Table1, table2: Table2): SelectQuery<any, Table1 | Table2>;
|
|
12
|
+
from<Table1 extends QueryTable<any, any>, Table2 extends QueryTable<any, any>, Table3 extends QueryTable<any, any>>(table1: Table1, table2: Table2, table3: Table3): SelectQuery<any, Table1 | Table2 | Table3>;
|
|
13
|
+
table<Entity, Id, Table extends QueryTable<Entity, Id>>(table: Table & QueryTable<Entity, Id>): TableQuery<Entity, Id, Table>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import SelectQuery from './query/select-query';
|
|
2
|
+
import TableQuery from "./query/table-query";
|
|
3
|
+
export default class QuerySource {
|
|
4
|
+
_queryProcessor;
|
|
5
|
+
constructor(_queryProcessor) {
|
|
6
|
+
this._queryProcessor = _queryProcessor;
|
|
7
|
+
}
|
|
8
|
+
from(table1, table2, table3) {
|
|
9
|
+
if (table3 != null)
|
|
10
|
+
return new SelectQuery(this._queryProcessor, [table1, table2, table3]);
|
|
11
|
+
else if (table2 != null)
|
|
12
|
+
return new SelectQuery(this._queryProcessor, [table1, table2]);
|
|
13
|
+
return new SelectQuery(this._queryProcessor, [table1]);
|
|
14
|
+
}
|
|
15
|
+
table(table) {
|
|
16
|
+
return new TableQuery(this._queryProcessor, table);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=query-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-source.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAG/C,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAG7C,MAAM,CAAC,OAAO,OAAO,WAAW;IAEN;IAAtB,YAAsB,eAA+B;QAA/B,oBAAe,GAAf,eAAe,CAAgB;IAAG,CAAC;IAMzD,IAAI,CAAwH,MAAW,EAAE,MAAY,EAAE,MAAY;QAC/J,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,IAAI,WAAW,CAAgC,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;aACrH,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,IAAI,WAAW,CAAuB,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9G,OAAO,IAAI,WAAW,CAAiB,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAmD,KAAqC;QACzF,OAAO,IAAI,UAAU,CAAoB,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;CACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import BasicColumn from "./column/basic-column";
|
|
2
|
+
import GenericsHelper from "./helpers/generics-helper";
|
|
3
|
+
import JoinedTablesChain from "./join/joined-tables-chain";
|
|
4
|
+
declare abstract class QueryTable<Entity, Id> {
|
|
5
|
+
protected _$name: string;
|
|
6
|
+
constructor(_$name: string);
|
|
7
|
+
protected _$type: GenericsHelper<Entity>;
|
|
8
|
+
protected _$idType: GenericsHelper<Id>;
|
|
9
|
+
$all: BasicColumn<this, Entity>;
|
|
10
|
+
innerJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable>;
|
|
11
|
+
leftJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable>;
|
|
12
|
+
rightJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable>;
|
|
13
|
+
fullJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable>;
|
|
14
|
+
}
|
|
15
|
+
export default QueryTable;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import BasicColumn from "./column/basic-column";
|
|
2
|
+
import JoinedTablesChain from "./join/joined-tables-chain";
|
|
3
|
+
class QueryTable {
|
|
4
|
+
_$name;
|
|
5
|
+
constructor(_$name) {
|
|
6
|
+
this._$name = _$name;
|
|
7
|
+
}
|
|
8
|
+
_$type;
|
|
9
|
+
_$idType;
|
|
10
|
+
// abstract readonly $id; // FIXME I got a dozen incomprehensible type errors
|
|
11
|
+
$all = new BasicColumn(this, '*');
|
|
12
|
+
innerJoin(table) {
|
|
13
|
+
return new JoinedTablesChain(table, 'inner', this);
|
|
14
|
+
}
|
|
15
|
+
leftJoin(table) {
|
|
16
|
+
return new JoinedTablesChain(table, 'left', this);
|
|
17
|
+
}
|
|
18
|
+
rightJoin(table) {
|
|
19
|
+
return new JoinedTablesChain(table, 'right', this);
|
|
20
|
+
}
|
|
21
|
+
fullJoin(table) {
|
|
22
|
+
return new JoinedTablesChain(table, 'full', this);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export default QueryTable;
|
|
26
|
+
//# sourceMappingURL=query-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-table.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAEhD,OAAO,iBAAiB,MAAM,4BAA4B,CAAC;AAG3D,MAAe,UAAU;IAEC;IAAtB,YAAsB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE9B,MAAM,CAAyB;IAC/B,QAAQ,CAAqB;IAEvC,6EAA6E;IAE7E,IAAI,GAAG,IAAI,WAAW,CAAe,IAAI,EAAE,GAAG,CAAC,CAAC;IAEhD,SAAS,CAAyC,KAAgB;QAC9D,OAAO,IAAI,iBAAiB,CAAmB,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,QAAQ,CAAyC,KAAgB;QAC7D,OAAO,IAAI,iBAAiB,CAAmB,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,SAAS,CAAyC,KAAgB;QAC9D,OAAO,IAAI,iBAAiB,CAAmB,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,QAAQ,CAAyC,KAAgB;QAC7D,OAAO,IAAI,iBAAiB,CAAmB,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;CACJ;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import QuerySource from "../builder/query-source";
|
|
2
|
+
import { createQueryProcessor } from "./query-processor";
|
|
3
|
+
export default class MySqlQuerySource extends QuerySource {
|
|
4
|
+
constructor(client, options = {}) {
|
|
5
|
+
super(createQueryProcessor(client, options, 'mysql'));
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=mysql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAwB,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE9E,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IAErD,YAAY,MAAW,EAAE,UAAiC,EAAE;QACxD,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;CACJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import QuerySource from "../builder/query-source";
|
|
2
|
+
import { createQueryProcessor } from "./query-processor";
|
|
3
|
+
export default class PgQuerySource extends QuerySource {
|
|
4
|
+
constructor(client, options = {}) {
|
|
5
|
+
super(createQueryProcessor(client, options, 'pg'));
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=pg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAwB,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE9E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IAElD,YAAY,MAAW,EAAE,UAAiC,EAAE;QACxD,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;CACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { QueryEngine } from '../converter/types';
|
|
2
|
+
import { QueryProcessor } from '../builder/helpers/internal-types';
|
|
3
|
+
export interface QueryProcessorOptions {
|
|
4
|
+
lineBreaks?: boolean;
|
|
5
|
+
parameterized?: boolean;
|
|
6
|
+
logging?: boolean;
|
|
7
|
+
logger?: (sql: string, params?: any[]) => void;
|
|
8
|
+
identifierQuote?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createQueryProcessor(client: any, _options?: QueryProcessorOptions, engine?: QueryEngine): QueryProcessor;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Log } from 'ng2-logger/lib';
|
|
2
|
+
import { convertQueryToParameterizedSQL } from '../converter/parameterized-converter';
|
|
3
|
+
import { convertQueryToSQL } from '../converter/sql-converter';
|
|
4
|
+
const log = Log.create('query processor');
|
|
5
|
+
const DEFAULT_OPTIONS = {
|
|
6
|
+
lineBreaks: false,
|
|
7
|
+
parameterized: true,
|
|
8
|
+
logging: true,
|
|
9
|
+
identifierQuote: '"'
|
|
10
|
+
};
|
|
11
|
+
function mySqlTypeCast(field, next) {
|
|
12
|
+
if (field.type == 'TINY' && field.length == 1) { // Boolean
|
|
13
|
+
let value = field.string();
|
|
14
|
+
if (value == '1')
|
|
15
|
+
return true;
|
|
16
|
+
if (value == '0')
|
|
17
|
+
return false;
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
else if (field.type == 'JSON') {
|
|
21
|
+
let value = field.string();
|
|
22
|
+
return value == null ? null : JSON.parse(value);
|
|
23
|
+
}
|
|
24
|
+
return next();
|
|
25
|
+
}
|
|
26
|
+
export function createQueryProcessor(client, _options = {}, engine = 'pg') {
|
|
27
|
+
let options = Object.assign({}, DEFAULT_OPTIONS, _options);
|
|
28
|
+
let queryOptions = {
|
|
29
|
+
lineBreak: options.lineBreaks ? '\n' : ' ',
|
|
30
|
+
nameEscape: _options.identifierQuote || (engine === 'mysql' ? '`' : '"')
|
|
31
|
+
};
|
|
32
|
+
// function processSql(query: any, sql: string, params: any[] | undefined, callback: any): Promise<any> {
|
|
33
|
+
// if (options.logging) log.i(sql);
|
|
34
|
+
// if (options.logger) options.logger(sql, params);
|
|
35
|
+
// return new Promise((resolve, reject) => {
|
|
36
|
+
// callback(sql, params, (err: any, result: any) => {
|
|
37
|
+
// if (err) reject(err);
|
|
38
|
+
// else resolve(convertResult(query, result, engine));
|
|
39
|
+
// });
|
|
40
|
+
// });
|
|
41
|
+
// }
|
|
42
|
+
// function executeSql(sql: string, params: any[] | undefined, cb: any) {
|
|
43
|
+
// if (engine === 'pg') {
|
|
44
|
+
// client.query(sql, params || cb, params ? cb : undefined);
|
|
45
|
+
// } else if (engine === 'mysql') {
|
|
46
|
+
// client.query({
|
|
47
|
+
// sql,
|
|
48
|
+
// values: params,
|
|
49
|
+
// typeCast: mySqlTypeCast
|
|
50
|
+
// }, cb);
|
|
51
|
+
// } else throw new Error('Unknown DB engine: ' + engine);
|
|
52
|
+
// }
|
|
53
|
+
return (query) => {
|
|
54
|
+
if (options.parameterized) {
|
|
55
|
+
let { sql, params } = convertQueryToParameterizedSQL(query, queryOptions, engine);
|
|
56
|
+
// if (Helpers.isWebSQL || Helpers.isNode) {
|
|
57
|
+
return client.query(sql, params);
|
|
58
|
+
// }
|
|
59
|
+
// return processSql(query, sql, params, (sql: string, params: any[], cb: any) => executeSql(sql, params, cb));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
let sql = convertQueryToSQL(query, queryOptions, engine);
|
|
63
|
+
// if (Helpers.isWebSQL || Helpers.isNode) {
|
|
64
|
+
return client.query(sql, undefined);
|
|
65
|
+
// }
|
|
66
|
+
// return processSql(query, sql, undefined, (sql: string, params: undefined, cb: any) => executeSql(sql, undefined, cb));
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=query-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-processor.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAM/D,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAEvC,CAAA;AAUD,MAAM,eAAe,GAA0B;IAC7C,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,GAAG;CACrB,CAAC;AAEF,SAAS,aAAa,CAAC,KAAU,EAAE,IAAS;IAC1C,IAAI,KAAK,CAAC,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU;QACzD,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;QAChC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAW,EAAE,WAAkC,EAAE,EAAE,SAAsB,IAAI;IAEhH,IAAI,OAAO,GAA0B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;IAElF,IAAI,YAAY,GAAqB;QACnC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;QAC1C,UAAU,EAAE,QAAQ,CAAC,eAAe,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;KACzE,CAAC;IAEF,yGAAyG;IACzG,qCAAqC;IACrC,qDAAqD;IAErD,8CAA8C;IAC9C,yDAAyD;IACzD,8BAA8B;IAC9B,4DAA4D;IAC5D,UAAU;IACV,QAAQ;IACR,IAAI;IAEJ,yEAAyE;IACzE,2BAA2B;IAC3B,gEAAgE;IAChE,qCAAqC;IACrC,qBAAqB;IACrB,aAAa;IACb,wBAAwB;IACxB,gCAAgC;IAChC,cAAc;IACd,4DAA4D;IAC5D,IAAI;IAEJ,OAAO,CAAC,KAAU,EAAE,EAAE;QACpB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,8BAA8B,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;YAClF,4CAA4C;YAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI;YACJ,+GAA+G;QACjH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;YACzD,4CAA4C;YAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI;YACJ,yHAAyH;QAC3H,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function convertSubstitutionParam(param) {
|
|
2
|
+
if (param == null)
|
|
3
|
+
return 'NULL';
|
|
4
|
+
if (typeof param === 'string' || param instanceof String) {
|
|
5
|
+
return `'${String(param)}'`;
|
|
6
|
+
}
|
|
7
|
+
else if (typeof param === 'boolean' || param instanceof Boolean) {
|
|
8
|
+
return String(param).toUpperCase();
|
|
9
|
+
}
|
|
10
|
+
else if (param instanceof Date) {
|
|
11
|
+
return `'${param.toISOString()}'`;
|
|
12
|
+
}
|
|
13
|
+
else if (typeof param === 'number' || param instanceof Number) {
|
|
14
|
+
return String(param);
|
|
15
|
+
}
|
|
16
|
+
return `'${JSON.stringify(param)}'`;
|
|
17
|
+
}
|
|
18
|
+
// node mysql doesn't have an typeCast equivalent solution for the other direction
|
|
19
|
+
// node-postgres: https://github.com/brianc/node-postgres/issues/442
|
|
20
|
+
export function convertEscapedParam(param) {
|
|
21
|
+
if (typeof param === 'object' && !(param == null || param instanceof String || param instanceof Number ||
|
|
22
|
+
param instanceof Boolean || param instanceof Date)) {
|
|
23
|
+
return JSON.stringify(param);
|
|
24
|
+
}
|
|
25
|
+
return param;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=param-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-converter.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CAAC,KAAU;IAC/C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QACvD,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAChC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;SAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;IACtC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,CAAC;AAED,kFAAkF;AAClF,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CAAC,KAAU;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,MAAM,IAAI,KAAK,YAAY,MAAM;QAClG,KAAK,YAAY,OAAO,IAAI,KAAK,YAAY,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createQueryConverter } from "./query-converter";
|
|
2
|
+
import { convertEscapedParam } from './param-converter';
|
|
3
|
+
let pgParamConverter = (index) => '$' + index;
|
|
4
|
+
let mySqlParamConverter = (index) => '?';
|
|
5
|
+
function convertSingleParam(param, params, paramConverter) {
|
|
6
|
+
params.push(convertEscapedParam(param));
|
|
7
|
+
return paramConverter(params.length);
|
|
8
|
+
}
|
|
9
|
+
export function convertQueryToParameterizedSQL(query, options, engine) {
|
|
10
|
+
let params = [];
|
|
11
|
+
let paramConverter = engine === 'mysql' ? mySqlParamConverter : pgParamConverter;
|
|
12
|
+
let sql = createQueryConverter((param) => convertSingleParam(param, params, paramConverter), options, engine)(query);
|
|
13
|
+
return { sql, params };
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=parameterized-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameterized-converter.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAGtD,IAAI,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC;AACtD,IAAI,mBAAmB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,CAAC;AAEjD,SAAS,kBAAkB,CAAC,KAAU,EAAE,MAAa,EAAE,cAAsC;IACzF,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAU,EAAE,OAAyB,EAAE,MAAmB;IACrG,IAAI,MAAM,GAAU,EAAE,CAAC;IAEvB,IAAI,cAAc,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACjF,IAAI,GAAG,GAAG,oBAAoB,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAE1H,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
|