@social-mail/social-mail-client 1.2.488 → 1.2.489

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.
Files changed (53) hide show
  1. package/content/local-db/worker.js +2 -2
  2. package/dist/admin/AdminAppIndex.pack.js +3 -2
  3. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  4. package/dist/admin/AdminAppIndex.pack.min.js +2 -2
  5. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  6. package/dist/public/store/cart/ShoppingCart.pack.js +2 -1
  7. package/dist/public/store/cart/ShoppingCart.pack.js.map +1 -1
  8. package/dist/public/store/cart/ShoppingCart.pack.min.js +1 -1
  9. package/dist/public/store/cart/ShoppingCart.pack.min.js.map +1 -1
  10. package/dist/services/LoginService.d.ts.map +1 -1
  11. package/dist/services/LoginService.js +2 -1
  12. package/dist/services/LoginService.js.map +1 -1
  13. package/dist/services/local-db/LocalDbService.d.ts +12 -5
  14. package/dist/services/local-db/LocalDbService.d.ts.map +1 -1
  15. package/dist/services/local-db/LocalDbService.js +50 -21
  16. package/dist/services/local-db/LocalDbService.js.map +1 -1
  17. package/dist/services/local-db/core/LocalTable.d.ts +16 -0
  18. package/dist/services/local-db/core/LocalTable.d.ts.map +1 -0
  19. package/dist/services/local-db/core/LocalTable.js +70 -0
  20. package/dist/services/local-db/core/LocalTable.js.map +1 -0
  21. package/dist/services/local-db/core/TemplateQuery.d.ts +26 -0
  22. package/dist/services/local-db/core/TemplateQuery.d.ts.map +1 -0
  23. package/dist/services/local-db/core/TemplateQuery.js +107 -0
  24. package/dist/services/local-db/core/TemplateQuery.js.map +1 -0
  25. package/dist/services/local-db/mailboxes/LocalMailbox.d.ts +14 -0
  26. package/dist/services/local-db/mailboxes/LocalMailbox.d.ts.map +1 -0
  27. package/dist/services/local-db/mailboxes/LocalMailbox.js +74 -0
  28. package/dist/services/local-db/mailboxes/LocalMailbox.js.map +1 -0
  29. package/dist/services/mime-service/MimeNode.js +1 -1
  30. package/dist/services/mime-service/MimeNode.js.map +1 -1
  31. package/dist/tests/template-query/template-queries.test.d.ts +2 -0
  32. package/dist/tests/template-query/template-queries.test.d.ts.map +1 -0
  33. package/dist/tests/template-query/template-queries.test.js +27 -0
  34. package/dist/tests/template-query/template-queries.test.js.map +1 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/dist/web/AppIndex.pack.js +3 -2
  37. package/dist/web/AppIndex.pack.js.map +1 -1
  38. package/dist/web/AppIndex.pack.min.js +2 -2
  39. package/dist/web/AppIndex.pack.min.js.map +1 -1
  40. package/package.json +1 -1
  41. package/pg-worker.js +15 -0
  42. package/src/services/LoginService.ts +5 -0
  43. package/src/services/local-db/LocalDbService.ts +61 -32
  44. package/src/services/local-db/core/LocalTable.ts +73 -0
  45. package/src/services/local-db/core/TemplateQuery.ts +109 -0
  46. package/src/services/local-db/mailboxes/LocalMailbox.ts +60 -0
  47. package/src/services/mime-service/MimeNode.ts +1 -1
  48. package/src/tests/template-query/template-queries.test.ts +22 -0
  49. package/dist/services/local-db/SqlDbFactory.d.ts +0 -47
  50. package/dist/services/local-db/SqlDbFactory.d.ts.map +0 -1
  51. package/dist/services/local-db/SqlDbFactory.js +0 -179
  52. package/dist/services/local-db/SqlDbFactory.js.map +0 -1
  53. package/src/services/local-db/SqlDbFactory.ts +0 -181
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-client",
3
- "version": "1.2.488",
3
+ "version": "1.2.489",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/pg-worker.js ADDED
@@ -0,0 +1,15 @@
1
+ import { PGliteWorker } from 'https://cdn.jsdelivr.net/npm/@electric-sql/pglite@0.2.7/dist/worker/index.js'
2
+
3
+ const pg = new PGliteWorker(
4
+ new Worker(new URL('/social-mail/local-db/worker.js', import.meta.url), {
5
+ type: 'module',
6
+ }),
7
+ {
8
+ dataDir: 'idb://social-mail-local-db',
9
+ meta: {
10
+ // additional metadata passed to `init`
11
+ },
12
+ },
13
+ )
14
+
15
+ export default pg;
@@ -8,6 +8,7 @@ import WebPushService from "./WebPushService";
8
8
  import sleep from "@web-atoms/core/dist/core/sleep";
9
9
  import DateTime from "@web-atoms/date-time/dist/DateTime";
10
10
  import { CancelToken } from "@web-atoms/core/dist/core/types";
11
+ import LocalDbService from "./local-db/LocalDbService";
11
12
 
12
13
  @DISingleton()
13
14
  export default class LoginService {
@@ -23,6 +24,10 @@ export default class LoginService {
23
24
  public async getUser() {
24
25
  this.user ??= (await this.entityService.query(LoginSession, "currentUser").firstOrDefault())?.user;
25
26
  SocialMailApp.user = this.user;
27
+ if (this.user?.userID) {
28
+ // let start syncing...
29
+ // this.app.resolve(LocalDbService).sync();
30
+ }
26
31
  return this.user;
27
32
  }
28
33
 
@@ -1,32 +1,61 @@
1
- import { UMD } from "@web-atoms/core/dist/core/types";
2
- import DISingleton from "@web-atoms/core/dist/di/DISingleton";
3
- import SqlDbFactory from "./SqlDbFactory";
4
-
5
- @DISingleton()
6
- export default class LocalDbService {
7
-
8
- async contacts() {
9
- const db = await this.load();
10
- return db.execute `SELECT * FROM mailbox_thread_emails`;
11
- }
12
-
13
- private load() {
14
- const r = (async () => {
15
- const db = await SqlDbFactory.load("sm1");
16
- // seed db...
17
- await db.query(`
18
- CREATE TABLE IF NOT EXISTS mailboxes (mailbox_id TEXT PRIMARY KEY, name TEXT);
19
- CREATE TABLE IF NOT EXISTS mailbox_threads (mailbox_id TEXT, email_address_id TEXT, PRIMARY KEY (mailbox_id, email_address_id));
20
- CREATE TABLE IF NOT EXISTS mailbox_thread_emails (mailbox_id TEXT, email_address_id TEXT, email_id TEXT, PRIMARY KEY (mailbox_id, email_address_id, email_id));
21
- `);
22
- return db;
23
- })();
24
-
25
- Object.defineProperty(this, "load", {
26
- value: () => r
27
- });
28
-
29
- return r;
30
- }
31
-
32
- }
1
+ /* eslint-disable no-console */
2
+ import DISingleton from "@web-atoms/core/dist/di/DISingleton";
3
+ import LocalMailbox from "./mailboxes/LocalMailbox";
4
+ import { UMD } from "@web-atoms/core/dist/core/types";
5
+ import Modules from "../../common/Modules";
6
+ import { Inject } from "@web-atoms/core/dist/di/Inject";
7
+ import EntityService from "../EntityService";
8
+ import TemplateQuery from "./core/TemplateQuery";
9
+
10
+ const pgWorker = UMD.resolvePath("@social-mail/social-mail-client/pg-worker.js");
11
+
12
+ export interface IResult<T> {
13
+ rows: T[];
14
+ affectedRows: number;
15
+ }
16
+
17
+ @DISingleton()
18
+ export default class LocalDbService {
19
+
20
+ @Inject
21
+ entityService: EntityService;
22
+
23
+ public mailboxes = new LocalMailbox(this);
24
+
25
+ sync() {
26
+ this.ready().catch(console.error);
27
+ }
28
+
29
+ ready() {
30
+ const w = (async () => {
31
+ const { default: pg }= await Modules.import(pgWorker);
32
+
33
+ await pg.waitReady;
34
+
35
+ // start syncing
36
+ for (const key in this) {
37
+ if (Object.prototype.hasOwnProperty.call(this, key)) {
38
+ const element = this[key];
39
+ if (element instanceof LocalMailbox) {
40
+ element.sync().catch(console.error);
41
+ }
42
+ }
43
+ }
44
+
45
+ return pg;
46
+ })();
47
+ Object.defineProperty(this, "ready", { value: () => w });
48
+ return w;
49
+ }
50
+
51
+ async query<T>(a: TemplateStringsArray | TemplateQuery, ... args: any[]): Promise<IResult<T>> {
52
+ const pg = await this.ready();
53
+ if (!(a instanceof TemplateQuery)) {
54
+ a = TemplateQuery.create(a, ... args);
55
+ }
56
+ const q = a.toQuery();
57
+ return pg.query(q.text, q.values);
58
+ }
59
+
60
+ }
61
+
@@ -0,0 +1,73 @@
1
+ import { IModel, IModelSchema, Model } from "@web-atoms/entity/dist/services/BaseEntityService";
2
+ import type LocalDbService from "../LocalDbService";
3
+ import TemplateQuery from "./TemplateQuery";
4
+ import { IResult } from "../LocalDbService";
5
+
6
+ export default abstract class LocalTable<T> {
7
+
8
+ name: TemplateQuery;
9
+ model: IModel<T>;
10
+
11
+ constructor(
12
+ protected readonly service: LocalDbService
13
+ ) {
14
+
15
+ }
16
+
17
+ async sync() {
18
+ const s = (async () => {
19
+ await this.init();
20
+ await this.startSync();
21
+ delete this.sync;
22
+ })();
23
+ Object.defineProperty(this, "sync", { value: () => s});
24
+ return s;
25
+ }
26
+
27
+
28
+ public abstract startSync(): Promise<void>;
29
+
30
+ public abstract init(): Promise<void>;
31
+
32
+ public query(a: TemplateStringsArray | TemplateQuery, ... args: any[]) {
33
+ return this.service.query(a, ... args) as Promise<IResult<T>>;
34
+ }
35
+
36
+ async save(element: T, retry = 3) {
37
+ try {
38
+ // try to update directly...
39
+ let where = TemplateQuery.fragments(" AND ");
40
+ for(const key of this.model.schema.keys) {
41
+ where = where.add `${TemplateQuery.literal(key.name)} === ${element[key.name]}`;
42
+ }
43
+
44
+ let fields = TemplateQuery.fragments(" , ");
45
+ for (const field of this.model.schema.properties) {
46
+ fields = fields.add `${TemplateQuery.literal(field.name)} = ${element[field.name]}`;
47
+ }
48
+
49
+ const { affectedRows } = await this.query `UPDATE ${this.name} SET ${fields} WHERE ${where}`;
50
+ if (affectedRows === 1) {
51
+ return;
52
+ }
53
+
54
+ // need to insert
55
+ let values = TemplateQuery.fragments(" , ");
56
+ let columns = TemplateQuery.fragments(" , ");
57
+ for(const key of this.model.schema.keys) {
58
+ columns = columns.add `${element[key.name]}`;
59
+ values = values.add `${element[key.name]}`;
60
+ }
61
+ await this.query `INSERT INTO ${this.name} (${columns}) VALUES (${values}) `;
62
+ } catch (error) {
63
+ if (-- retry) {
64
+ await this.save(element, retry);
65
+ return;
66
+ }
67
+ throw error;
68
+ }
69
+
70
+ }
71
+
72
+
73
+ }
@@ -0,0 +1,109 @@
1
+ export interface IQueryPart {
2
+ literal?: string;
3
+ arg?: any;
4
+ }
5
+
6
+ export class QueryFragments {
7
+
8
+ public readonly fragments: IQueryPart[] = [];
9
+
10
+ public readonly prefix: string;
11
+
12
+ public readonly separator: string;
13
+
14
+ constructor(
15
+ separator: string,
16
+ prefix?: string) {
17
+ this.prefix = prefix;
18
+ this.separator = separator;
19
+ }
20
+
21
+ public add(query: TemplateQuery | QueryFragments): QueryFragments;
22
+ public add(query: TemplateStringsArray, ... args: any[]): QueryFragments;
23
+ public add(query: TemplateQuery | QueryFragments | TemplateStringsArray, ... args: any[]): QueryFragments {
24
+ const { separator } = this;
25
+ if (separator && this.fragments.length) {
26
+ this.fragments.push({ literal: separator });
27
+ }
28
+
29
+ if (query instanceof QueryFragments) {
30
+ query = query.toQuery();
31
+ } else if (!(query instanceof TemplateQuery)) {
32
+ query = TemplateQuery.create(query, ... args);
33
+ }
34
+
35
+ this.fragments.push(... query.fragments);
36
+
37
+ return this;
38
+ }
39
+
40
+ public toQuery(): TemplateQuery {
41
+ const f = [];
42
+ if (this.prefix) {
43
+ f.push({ literal: this.prefix });
44
+ }
45
+ f.push(... this.fragments);
46
+ return new TemplateQuery(f);
47
+ }
48
+
49
+ }
50
+
51
+ export default class TemplateQuery {
52
+
53
+ public static literal(literal: string) {
54
+ return new TemplateQuery([ { literal }]);
55
+ }
56
+
57
+ public static create(query: TemplateStringsArray, ... args: any[]): TemplateQuery {
58
+ const q = new TemplateQuery();
59
+ for (let index = 0; index < query.length; index++) {
60
+ const literal = query[index];
61
+ q.fragments.push({ literal });
62
+ if (index < args.length) {
63
+
64
+ const arg = args[index];
65
+ if (arg instanceof TemplateQuery || arg instanceof QueryFragments) {
66
+ q.fragments.push(... arg.fragments);
67
+ continue;
68
+ }
69
+ q.fragments.push({ arg });
70
+ }
71
+ }
72
+ return q;
73
+ }
74
+
75
+ public static fragments(separator: string): QueryFragments;
76
+ public static fragments(separator: string, prefix?: string): QueryFragments {
77
+ return new QueryFragments(separator, prefix);
78
+ }
79
+
80
+ constructor(public fragments: IQueryPart[] = []) {}
81
+
82
+ public toQuery(prefix?: string, argName = (index) => `$${index + 1}`): IQuery {
83
+ let text = prefix ?? "";
84
+ const values = [];
85
+ const map = new Map();
86
+ for (const { literal, arg } of this.fragments) {
87
+ if (literal !== void 0) {
88
+ text += literal;
89
+ continue;
90
+ }
91
+ let an = map.get(arg ?? null);
92
+ if (!an) {
93
+ an = argName(values.length);
94
+ map.set(arg, an);
95
+ values.push(arg);
96
+ }
97
+ text += an;
98
+ }
99
+ return {
100
+ text,
101
+ values
102
+ };
103
+ }
104
+ }
105
+
106
+ export interface IQuery {
107
+ text: string;
108
+ values: any[];
109
+ }
@@ -0,0 +1,60 @@
1
+ import DateTime from "@web-atoms/date-time/dist/DateTime";
2
+ import { IMailbox, Mailbox } from "../../../model/model";
3
+ import LocalTable from "../core/LocalTable";
4
+ import TemplateQuery from "../core/TemplateQuery";
5
+
6
+ export default class LocalMailbox extends LocalTable<IMailbox> {
7
+
8
+ name = TemplateQuery.literal("mailboxes");
9
+
10
+ model = Mailbox;
11
+
12
+ public async startSync() {
13
+
14
+ const es = this.service.entityService;
15
+
16
+ let q = es.query(this.model);
17
+
18
+ let max = null;
19
+
20
+ // get last max updated...
21
+ const { rows:[first] } = await this.query `SELECT * FROM ${this.name} ORDER BY dateUpdated DESC LIMIT 1`;
22
+ if (first) {
23
+ max = first.dateUpdated;
24
+ q = q.where({ max}, (p) => (x) => x.dateUpdated >= p.max);
25
+ }
26
+
27
+ let min = DateTime.now;
28
+
29
+ do {
30
+ const result = await q.where({ min }, (p) => (x) => x.dateUpdated < p.min)
31
+ .orderByDescending((x) => x.dateUpdated)
32
+ .toPagedList({
33
+ start: 0,
34
+ size: 200,
35
+ count: false
36
+ });
37
+
38
+ if (!result.items.length) {
39
+ break;
40
+ }
41
+
42
+ for (const element of result.items) {
43
+ await this.save(element);
44
+ min = element.dateUpdated;
45
+ }
46
+ } while(true);
47
+ }
48
+
49
+ public async init() {
50
+ await this.service.query `CREATE TABLE ${this.name} IF NOT EXISTS
51
+ (
52
+ mailboxId char (200),
53
+ name char (200),
54
+ dateUpdated timestamp,
55
+ primary key (mailboxId)
56
+ )
57
+ `;
58
+ }
59
+
60
+ }
@@ -393,7 +393,7 @@ export class MimeNode {
393
393
  return;
394
394
  }
395
395
 
396
- let text = this.textContent;
396
+ let text = this.text;
397
397
  if (this.contentTransferEncoding === "quoted-printable") {
398
398
  text = quotedPrintable.encode( RawBuffer.encode(text));
399
399
  }
@@ -0,0 +1,22 @@
1
+ import TemplateQuery from "../../services/local-db/core/TemplateQuery";
2
+ import { Assert } from "../Assert";
3
+
4
+ export default function() {
5
+ let tq = TemplateQuery.fragments(" AND ");
6
+ tq = tq.add `a === ${4}`;
7
+ tq = tq.add `b === ${5}`;
8
+
9
+ let q = tq.toQuery().toQuery();
10
+ Assert.equal("a === $1 AND b === $2", q.text);
11
+
12
+
13
+ let o1 = TemplateQuery.fragments(" OR ");
14
+ o1 = o1.add `(a === ${4}`;
15
+ o1 = o1.add `b === ${5})`;
16
+
17
+ tq = tq.add(o1.toQuery());
18
+
19
+ q = tq.toQuery().toQuery();
20
+ Assert.equal("a === $1 AND b === $2 AND (a === $1 OR b === $2)", q.text);
21
+
22
+ }
@@ -1,47 +0,0 @@
1
- export type ISqlString = any;
2
- export type IPreparedStatement = any;
3
- export interface ISqlFactory {
4
- open_v2(name: string): Promise<any>;
5
- close(db: any): Promise<void>;
6
- exec(db: any, text: string, fx: (rows: any[], columns: string[]) => void): Promise<number>;
7
- str_new(db: any, txt: string): ISqlString;
8
- str_finish(txt: ISqlString): void;
9
- str_value(a: any): any;
10
- prepare_v2(db: any, sql: ISqlString): Promise<{
11
- sql: number;
12
- stmt: number;
13
- }>;
14
- bind(stmt: number, i: number, value: any): any;
15
- finalize(stmt: number): Promise<number>;
16
- step(stmt: number): Promise<number>;
17
- row(stmt: number): string[];
18
- column_names(stmt: number): string[];
19
- bind_parameter_count(stmt: number): number;
20
- bind_parameter_name(stmt: number, i: number): string;
21
- changes(stmt: number): number;
22
- }
23
- export interface ISqlResult {
24
- rows: any[];
25
- updated: number;
26
- }
27
- export declare class SqlDb {
28
- private sqlFactory;
29
- private name;
30
- private prev;
31
- private db;
32
- constructor(sqlFactory: ISqlFactory, name: string);
33
- execute(txt: TemplateStringsArray, ...a: any[]): Promise<{
34
- rows: any[];
35
- updated: number;
36
- }>;
37
- query(text: string): Promise<{
38
- rows: any[];
39
- updated: number;
40
- }>;
41
- private prepare;
42
- private newString;
43
- }
44
- export default class SqlDbFactory {
45
- static load(name: string): Promise<SqlDb>;
46
- }
47
- //# sourceMappingURL=SqlDbFactory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqlDbFactory.d.ts","sourceRoot":"","sources":["../../../src/services/local-db/SqlDbFactory.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC;AAC7B,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAErC,MAAM,WAAW,WAAW;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAEvB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAG;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACrC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,KAAK;IAOV,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IANhB,OAAO,CAAC,IAAI,CAA8C;IAE1D,OAAO,CAAC,EAAE,CAAM;gBAGJ,UAAU,EAAE,WAAW,EACvB,IAAI,EAAE,MAAM;IAElB,OAAO,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAI,CAAC,EAAE,GAAG,EAAE;;;;IAmDrD,KAAK,CAAC,IAAI,EAAE,MAAM;;;;YAwBF,OAAO;IA4BvB,OAAO,CAAC,SAAS;CAUpB;AAiBD,MAAM,CAAC,OAAO,OAAO,YAAY;WAEhB,IAAI,CAAC,IAAI,EAAE,MAAM;CAKjC"}
@@ -1,179 +0,0 @@
1
- System.register(["tslib", "@web-atoms/core/dist/core/types"], function (_export, _context) {
2
- "use strict";
3
-
4
- var __asyncGenerator, __asyncValues, __await, __awaiter, UMD, SqlDb, SqlDbFactory, factory, loadSqlFactory;
5
- _export({
6
- SqlDb: void 0,
7
- default: void 0
8
- });
9
- return {
10
- setters: [function (_tslib) {
11
- __asyncGenerator = _tslib.__asyncGenerator;
12
- __asyncValues = _tslib.__asyncValues;
13
- __await = _tslib.__await;
14
- __awaiter = _tslib.__awaiter;
15
- }, function (_webAtomsCoreDistCoreTypes) {
16
- UMD = _webAtomsCoreDistCoreTypes.UMD;
17
- }],
18
- execute: function () {
19
- _export("SqlDb", SqlDb = class SqlDb {
20
- constructor(sqlFactory, name) {
21
- this.sqlFactory = sqlFactory;
22
- this.name = name;
23
- this.prev = Promise.resolve(null);
24
- }
25
- execute(txt, ...a) {
26
- return __awaiter(this, void 0, void 0, function* () {
27
- let query = "";
28
- const values = {};
29
- const names = [];
30
- let pn = 1;
31
- for (let index = 0; index < txt.length; index++) {
32
- const element = txt[index];
33
- query += element;
34
- if (index < a.length) {
35
- const name = `p${pn++}`;
36
- names.push(name);
37
- query += `@${name}`;
38
- values[name] = a[index];
39
- }
40
- }
41
- const prev = this.prev;
42
- const {
43
- sqlFactory
44
- } = this;
45
- return yield this.prev = (() => __awaiter(this, void 0, void 0, function* () {
46
- var _a, e_1, _b, _c;
47
- try {
48
- yield prev;
49
- } catch (error) {}
50
- const d = yield this.sqlFactory.open_v2(this.name);
51
- yield using;
52
- d1 = {
53
- [Symbol.asyncDispose]: () => this.sqlFactory.close(this.db)
54
- };
55
- this.db = d;
56
- const rows = [];
57
- let updated = 0;
58
- try {
59
- for (var _d = true, _e = __asyncValues(this.prepare({
60
- query,
61
- values
62
- })), _f; _f = yield _e.next(), _a = _f.done, !_a;) {
63
- _c = _f.value;
64
- _d = false;
65
- try {
66
- const stmt = _c;
67
- let columns;
68
- while ((yield sqlFactory.step(stmt)) === SQLite.SQLITE_ROW) {
69
- columns !== null && columns !== void 0 ? columns : columns = sqlFactory.column_names(stmt);
70
- const items = sqlFactory.row(stmt);
71
- const row = {};
72
- for (let index = 0; index < columns.length; index++) {
73
- const element = columns[index];
74
- row[element] = items[index];
75
- }
76
- rows.push(row);
77
- }
78
- updated = sqlFactory.changes(this.db);
79
- } finally {
80
- _d = true;
81
- }
82
- }
83
- } catch (e_1_1) {
84
- e_1 = {
85
- error: e_1_1
86
- };
87
- } finally {
88
- try {
89
- if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
90
- } finally {
91
- if (e_1) throw e_1.error;
92
- }
93
- }
94
- return {
95
- rows,
96
- updated
97
- };
98
- }))();
99
- });
100
- }
101
- query(text) {
102
- return this.execute([text]);
103
- }
104
- prepare({
105
- query,
106
- values
107
- }) {
108
- return __asyncGenerator(this, arguments, function* prepare_1() {
109
- const {
110
- sqlFactory
111
- } = this;
112
- using;
113
- sql = this.newString(query);
114
- let prepared = {
115
- stmt: null,
116
- sql: sqlFactory.str_value(sql.str)
117
- };
118
- try {
119
- while (prepared = yield __await(sqlFactory.prepare_v2(this.db, prepared.sql))) {
120
- const {
121
- stmt
122
- } = prepared;
123
- const total = sqlFactory.bind_parameter_count(stmt);
124
- for (let index = 0; index < total; index++) {
125
- const name = sqlFactory.bind_parameter_name(stmt, index);
126
- if (values.hasOwnProperty(name)) {
127
- sqlFactory.bind(stmt, index, values[name]);
128
- }
129
- }
130
- yield yield __await(stmt);
131
- yield __await(sqlFactory.finalize(stmt));
132
- prepared.stmt = null;
133
- }
134
- } finally {
135
- if (prepared === null || prepared === void 0 ? void 0 : prepared.stmt) {
136
- yield __await(sqlFactory.finalize(prepared.stmt));
137
- }
138
- }
139
- });
140
- }
141
- newString(txt) {
142
- const {
143
- sqlFactory
144
- } = this;
145
- const str = sqlFactory.str_new(this.db, txt);
146
- return {
147
- str,
148
- [Symbol.dispose]() {
149
- return sqlFactory.str_finish(str);
150
- }
151
- };
152
- }
153
- });
154
- loadSqlFactory = () => {
155
- return factory !== null && factory !== void 0 ? factory : factory = new Promise((resolve, reject) => {
156
- const script = document.createElement("script");
157
- script.type = "module";
158
- script.src = UMD.resolvePath("@social-mail/social-mail-client/sqlite-loader.mjs");
159
- script.onerror = reject;
160
- document.body.addEventListener("sqliteLoaded", ce => {
161
- resolve(ce.detail);
162
- }, {
163
- once: true
164
- });
165
- document.body.appendChild(script);
166
- });
167
- };
168
- _export("default", SqlDbFactory = class SqlDbFactory {
169
- static load(name) {
170
- return __awaiter(this, void 0, void 0, function* () {
171
- const sqlFactory = yield loadSqlFactory();
172
- return new SqlDb(sqlFactory, name);
173
- });
174
- }
175
- });
176
- }
177
- };
178
- });
179
- //# sourceMappingURL=SqlDbFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["SqlDb","SqlDbFactory","factory","loadSqlFactory","_export","default","setters","_tslib","UMD","_webAtomsCoreDistCoreTypes","execute","constructor","sqlFactory","name","prev","Promise","resolve","txt","a","query","values","names","pn","index","length","element","push","__awaiter","error","d","open_v2","using","d1","Symbol","asyncDispose","close","db","rows","updated","_d","_e","__asyncValues","prepare","_f","next","_a","done","_c","value","stmt","columns","step","SQLite","SQLITE_ROW","column_names","items","row","changes","text","sql","newString","prepared","str_value","str","__await","prepare_v2","total","bind_parameter_count","bind_parameter_name","hasOwnProperty","bind","finalize","str_new","dispose","str_finish","reject","script","document","createElement","type","src","resolvePath","onerror","body","addEventListener","ce","detail","once","appendChild","load"],"sources":["../../../src/services/local-db/SqlDbFactory.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}