@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.
- package/content/local-db/worker.js +2 -2
- package/dist/admin/AdminAppIndex.pack.js +3 -2
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +2 -2
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.js +2 -1
- package/dist/public/store/cart/ShoppingCart.pack.js.map +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.min.js +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.min.js.map +1 -1
- package/dist/services/LoginService.d.ts.map +1 -1
- package/dist/services/LoginService.js +2 -1
- package/dist/services/LoginService.js.map +1 -1
- package/dist/services/local-db/LocalDbService.d.ts +12 -5
- package/dist/services/local-db/LocalDbService.d.ts.map +1 -1
- package/dist/services/local-db/LocalDbService.js +50 -21
- package/dist/services/local-db/LocalDbService.js.map +1 -1
- package/dist/services/local-db/core/LocalTable.d.ts +16 -0
- package/dist/services/local-db/core/LocalTable.d.ts.map +1 -0
- package/dist/services/local-db/core/LocalTable.js +70 -0
- package/dist/services/local-db/core/LocalTable.js.map +1 -0
- package/dist/services/local-db/core/TemplateQuery.d.ts +26 -0
- package/dist/services/local-db/core/TemplateQuery.d.ts.map +1 -0
- package/dist/services/local-db/core/TemplateQuery.js +107 -0
- package/dist/services/local-db/core/TemplateQuery.js.map +1 -0
- package/dist/services/local-db/mailboxes/LocalMailbox.d.ts +14 -0
- package/dist/services/local-db/mailboxes/LocalMailbox.d.ts.map +1 -0
- package/dist/services/local-db/mailboxes/LocalMailbox.js +74 -0
- package/dist/services/local-db/mailboxes/LocalMailbox.js.map +1 -0
- package/dist/services/mime-service/MimeNode.js +1 -1
- package/dist/services/mime-service/MimeNode.js.map +1 -1
- package/dist/tests/template-query/template-queries.test.d.ts +2 -0
- package/dist/tests/template-query/template-queries.test.d.ts.map +1 -0
- package/dist/tests/template-query/template-queries.test.js +27 -0
- package/dist/tests/template-query/template-queries.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +3 -2
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +2 -2
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/package.json +1 -1
- package/pg-worker.js +15 -0
- package/src/services/LoginService.ts +5 -0
- package/src/services/local-db/LocalDbService.ts +61 -32
- package/src/services/local-db/core/LocalTable.ts +73 -0
- package/src/services/local-db/core/TemplateQuery.ts +109 -0
- package/src/services/local-db/mailboxes/LocalMailbox.ts +60 -0
- package/src/services/mime-service/MimeNode.ts +1 -1
- package/src/tests/template-query/template-queries.test.ts +22 -0
- package/dist/services/local-db/SqlDbFactory.d.ts +0 -47
- package/dist/services/local-db/SqlDbFactory.d.ts.map +0 -1
- package/dist/services/local-db/SqlDbFactory.js +0 -179
- package/dist/services/local-db/SqlDbFactory.js.map +0 -1
- package/src/services/local-db/SqlDbFactory.ts +0 -181
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-cond-assign */
|
|
2
|
-
/* eslint-disable no-var */
|
|
3
|
-
import { UMD } from "@web-atoms/core/dist/core/types";
|
|
4
|
-
|
|
5
|
-
export type ISqlString = any;
|
|
6
|
-
export type IPreparedStatement = any;
|
|
7
|
-
|
|
8
|
-
export interface ISqlFactory {
|
|
9
|
-
open_v2(name: string): Promise<any>;
|
|
10
|
-
close(db: any): Promise<void>;
|
|
11
|
-
exec(db: any, text: string, fx: (rows:any[], columns: string[]) => void): Promise<number>;
|
|
12
|
-
str_new(db: any, txt: string): ISqlString;
|
|
13
|
-
str_finish(txt: ISqlString): void;
|
|
14
|
-
str_value(a: any): any;
|
|
15
|
-
|
|
16
|
-
prepare_v2(db: any, sql: ISqlString): Promise<{ sql: number, stmt: number }>;
|
|
17
|
-
bind(stmt: number, i: number, value: any );
|
|
18
|
-
finalize(stmt: number): Promise<number>;
|
|
19
|
-
step(stmt: number): Promise<number>;
|
|
20
|
-
row(stmt: number): string[];
|
|
21
|
-
column_names(stmt: number): string[];
|
|
22
|
-
bind_parameter_count(stmt: number): number;
|
|
23
|
-
bind_parameter_name(stmt: number, i: number): string;
|
|
24
|
-
changes(stmt: number): number;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface ISqlResult {
|
|
28
|
-
rows: any[];
|
|
29
|
-
updated: number;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
declare var SQLite: any;
|
|
33
|
-
|
|
34
|
-
export class SqlDb {
|
|
35
|
-
|
|
36
|
-
private prev: Promise<ISqlResult> = Promise.resolve(null);
|
|
37
|
-
|
|
38
|
-
private db: any;
|
|
39
|
-
|
|
40
|
-
constructor(
|
|
41
|
-
private sqlFactory: ISqlFactory,
|
|
42
|
-
private name: string) {}
|
|
43
|
-
|
|
44
|
-
async execute(txt: TemplateStringsArray, ... a: any[]) {
|
|
45
|
-
let query = "";
|
|
46
|
-
const values = {};
|
|
47
|
-
const names = [];
|
|
48
|
-
let pn = 1;
|
|
49
|
-
for (let index = 0; index < txt.length; index++) {
|
|
50
|
-
const element = txt[index];
|
|
51
|
-
query += element;
|
|
52
|
-
if (index < a.length) {
|
|
53
|
-
const name = `p${pn++}`;
|
|
54
|
-
names.push(name);
|
|
55
|
-
query += `@${name}`;
|
|
56
|
-
values[name] = a[index];
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const prev = this.prev;
|
|
60
|
-
const { sqlFactory } = this;
|
|
61
|
-
return await (this.prev = (async () => {
|
|
62
|
-
try {
|
|
63
|
-
await prev;
|
|
64
|
-
} catch (error) {
|
|
65
|
-
// ignore...
|
|
66
|
-
}
|
|
67
|
-
const d = await this.sqlFactory.open_v2(this.name);
|
|
68
|
-
await using d1 = { [Symbol.asyncDispose]: () => this.sqlFactory.close(this.db) };
|
|
69
|
-
this.db = d;
|
|
70
|
-
const rows = [];
|
|
71
|
-
let updated = 0;
|
|
72
|
-
|
|
73
|
-
for await(const stmt of this.prepare({ query, values })) {
|
|
74
|
-
let columns: any[];
|
|
75
|
-
while(await sqlFactory.step(stmt) === SQLite.SQLITE_ROW) {
|
|
76
|
-
columns ??= sqlFactory.column_names(stmt);
|
|
77
|
-
const items = sqlFactory.row(stmt);
|
|
78
|
-
const row = {};
|
|
79
|
-
for (let index = 0; index < columns.length; index++) {
|
|
80
|
-
const element = columns[index];
|
|
81
|
-
row[element] = items[index];
|
|
82
|
-
}
|
|
83
|
-
rows.push(row);
|
|
84
|
-
}
|
|
85
|
-
updated = sqlFactory.changes(this.db);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return {
|
|
89
|
-
rows,
|
|
90
|
-
updated
|
|
91
|
-
};
|
|
92
|
-
})());
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
query(text: string) {
|
|
96
|
-
return this.execute([text] as any);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// async exec(query: string) {
|
|
100
|
-
// const { sqlFactory } = this;
|
|
101
|
-
// const db = await sqlFactory.open_v2(this.name);
|
|
102
|
-
// await using a = { [Symbol.asyncDispose]: () => sqlFactory.close(db)};
|
|
103
|
-
// const rows = [];
|
|
104
|
-
// const updated = 0;
|
|
105
|
-
// await sqlFactory.exec(db, query, (items, columns) => {
|
|
106
|
-
// const row = {};
|
|
107
|
-
// for (let index = 0; index < columns.length; index++) {
|
|
108
|
-
// const element = columns[index];
|
|
109
|
-
// row[element] = items[index];
|
|
110
|
-
// }
|
|
111
|
-
// rows.push(row);
|
|
112
|
-
// });
|
|
113
|
-
// return {
|
|
114
|
-
// rows,
|
|
115
|
-
// updated
|
|
116
|
-
// };
|
|
117
|
-
// }
|
|
118
|
-
|
|
119
|
-
private async * prepare({query, values}:{ query: string, values: any}) {
|
|
120
|
-
const { sqlFactory } = this;
|
|
121
|
-
using sql = this.newString(query);
|
|
122
|
-
let prepared = { stmt: null, sql: sqlFactory.str_value(sql.str) };
|
|
123
|
-
try {
|
|
124
|
-
while(prepared = await sqlFactory.prepare_v2(this.db, prepared.sql)){
|
|
125
|
-
|
|
126
|
-
// bind parameters...
|
|
127
|
-
const { stmt } = prepared;
|
|
128
|
-
// bind parameters...
|
|
129
|
-
const total = sqlFactory.bind_parameter_count(stmt);
|
|
130
|
-
for (let index = 0; index < total; index++) {
|
|
131
|
-
const name = sqlFactory.bind_parameter_name(stmt, index);
|
|
132
|
-
if (values.hasOwnProperty(name)) {
|
|
133
|
-
sqlFactory.bind(stmt, index, values[name]);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
yield stmt;
|
|
137
|
-
await sqlFactory.finalize(stmt);
|
|
138
|
-
prepared.stmt = null;
|
|
139
|
-
}
|
|
140
|
-
} finally {
|
|
141
|
-
if (prepared?.stmt) {
|
|
142
|
-
await sqlFactory.finalize(prepared.stmt);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
private newString(txt: string) {
|
|
148
|
-
const { sqlFactory } = this;
|
|
149
|
-
const str = sqlFactory.str_new(this.db, txt);
|
|
150
|
-
return {
|
|
151
|
-
str,
|
|
152
|
-
[Symbol.dispose]() {
|
|
153
|
-
return sqlFactory.str_finish(str);
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
let factory: Promise<ISqlFactory>;
|
|
160
|
-
|
|
161
|
-
const loadSqlFactory = () => {
|
|
162
|
-
return factory ??= new Promise<ISqlFactory>((resolve, reject) => {
|
|
163
|
-
const script = document.createElement("script");
|
|
164
|
-
script.type = "module";
|
|
165
|
-
script.src = UMD.resolvePath("@social-mail/social-mail-client/sqlite-loader.mjs");
|
|
166
|
-
script.onerror = reject;
|
|
167
|
-
document.body.addEventListener("sqliteLoaded", (ce: CustomEvent) => {
|
|
168
|
-
resolve(ce.detail);
|
|
169
|
-
}, { once: true });
|
|
170
|
-
document.body.appendChild(script);
|
|
171
|
-
});
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
export default class SqlDbFactory {
|
|
175
|
-
|
|
176
|
-
static async load(name: string) {
|
|
177
|
-
const sqlFactory = await loadSqlFactory();
|
|
178
|
-
return new SqlDb(sqlFactory, name);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
}
|