@bbn/bbn 2.0.237 → 2.0.239

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 (86) hide show
  1. package/dist/$.js +1 -1
  2. package/dist/bbn.js +3 -3
  3. package/dist/bbn.js.map +1 -1
  4. package/dist/bbn.sw.js +3 -3
  5. package/dist/bbn.sw.js.map +1 -1
  6. package/dist/com.js +13 -21
  7. package/dist/{vars.d.ts → data.d.ts} +1 -0
  8. package/dist/{vars.js → data.js} +1 -0
  9. package/dist/db/classes/Center.d.ts +10 -0
  10. package/dist/db/classes/Center.js +88 -0
  11. package/dist/db/classes/Object.d.ts +3 -0
  12. package/dist/db/classes/Object.js +469 -0
  13. package/dist/db/classes/ObjectProxy.d.ts +18 -0
  14. package/dist/db/classes/ObjectProxy.js +79 -0
  15. package/dist/db/classes/Proxy.d.ts +10 -0
  16. package/dist/db/classes/Proxy.js +52 -0
  17. package/dist/db/functions/fieldsFromFilter.d.ts +1 -0
  18. package/dist/db/functions/fieldsFromFilter.js +33 -0
  19. package/dist/db/functions/getPrimaryKey.d.ts +2 -0
  20. package/dist/db/functions/getPrimaryKey.js +8 -0
  21. package/dist/db/functions/requestToPromise.d.ts +1 -0
  22. package/dist/db/functions/requestToPromise.js +6 -0
  23. package/dist/db/functions/transactionDone.d.ts +1 -0
  24. package/dist/db/functions/transactionDone.js +7 -0
  25. package/dist/db/functions/transformResult.d.ts +1 -0
  26. package/dist/db/functions/transformResult.js +16 -0
  27. package/dist/db/types.d.ts +56 -0
  28. package/dist/db/types.js +1 -0
  29. package/dist/db.d.ts +3 -66
  30. package/dist/db.js +3 -558
  31. package/dist/dt/classes/{date.d.ts → Date.d.ts} +1 -1
  32. package/dist/dt/classes/{date.js → Date.js} +8 -3
  33. package/dist/dt/classes/{dateTime.d.ts → DateTime.d.ts} +1 -1
  34. package/dist/dt/classes/{dateTime.js → DateTime.js} +9 -3
  35. package/dist/dt/classes/{dt.d.ts → Dt.d.ts} +1 -1
  36. package/dist/dt/classes/{dt.js → Dt.js} +36 -48
  37. package/dist/dt/classes/Duration.js +193 -0
  38. package/dist/dt/classes/{monthDay.d.ts → MonthDay.d.ts} +1 -1
  39. package/dist/dt/classes/{monthDay.js → MonthDay.js} +2 -2
  40. package/dist/dt/classes/{time.d.ts → Time.d.ts} +1 -1
  41. package/dist/dt/classes/{time.js → Time.js} +2 -2
  42. package/dist/dt/classes/{yearMonth.d.ts → YearMonth.d.ts} +1 -1
  43. package/dist/dt/classes/{yearMonth.js → YearMonth.js} +2 -2
  44. package/dist/dt/classes/{zoned.d.ts → Zoned.d.ts} +1 -1
  45. package/dist/dt/classes/{zoned.js → Zoned.js} +9 -3
  46. package/dist/dt/functions/buildLocaleFromIntl.js +1 -1
  47. package/dist/dt/functions/guessFormat.js +1 -1
  48. package/dist/dt/functions/intl-weekinfo-polyfill.js +11 -4
  49. package/dist/dt/functions/parse.js +20 -22
  50. package/dist/dt/functions/setupIntl.js +33 -44
  51. package/dist/dt.d.ts +1 -1
  52. package/dist/dt.js +9 -8
  53. package/dist/env.d.ts +1 -1
  54. package/dist/env.js +6 -7
  55. package/dist/fn/ajax/abort.js +1 -1
  56. package/dist/fn/ajax/ajax.d.ts +1 -1
  57. package/dist/fn/ajax/ajax.js +2 -2
  58. package/dist/fn/ajax/download.js +1 -1
  59. package/dist/fn/ajax/getFileContent.js +2 -3
  60. package/dist/fn/ajax/link.js +2 -2
  61. package/dist/fn/ajax/stream.js +5 -4
  62. package/dist/fn/browser/executeSlowly.js +11 -22
  63. package/dist/fn/browser/log.js +5 -3
  64. package/dist/fn/browser/yieldToBrowser.js +7 -19
  65. package/dist/fn/html/makeReactive.js +2 -2
  66. package/dist/fn/init.d.ts +1 -1
  67. package/dist/fn/init.js +4 -5
  68. package/dist/fn/object/_filter.js +3 -2
  69. package/dist/fn/object/filter.js +2 -1
  70. package/dist/fn/phone/fphone.js +1 -2
  71. package/dist/fn/string/cast.js +1 -2
  72. package/dist/fn/string/shorten.js +1 -1
  73. package/dist/fn/string/treatForHash.js +1 -1
  74. package/dist/fn/style/addColors.d.ts +1 -1
  75. package/dist/fn/style/addColors.js +4 -4
  76. package/dist/fn/type/checkType.js +1 -2
  77. package/dist/fn/type/isCp.js +1 -2
  78. package/dist/fn/type/isHostname.js +1 -1
  79. package/dist/fn/type/isIP.js +1 -1
  80. package/dist/fn/type/isSame.js +2 -2
  81. package/dist/fn/type/isURL.js +1 -1
  82. package/dist/index-no-dep.js +11 -4
  83. package/dist/index.js +13 -4
  84. package/package.json +1 -1
  85. package/dist/dt/classes/duration.js +0 -199
  86. /package/dist/dt/classes/{duration.d.ts → Duration.d.ts} +0 -0
@@ -0,0 +1,18 @@
1
+ import { DbApi, OrderClause } from '../types.js';
2
+ export default class bbnDbObjectProxy implements DbApi {
3
+ private readonly _dbName;
4
+ lastErr: any;
5
+ constructor(dbName: string);
6
+ get dbName(): string;
7
+ insert(table: string, data: any): Promise<number>;
8
+ update(table: string, data: any, where: any, replace?: boolean): Promise<number>;
9
+ delete(table: string, where: any): Promise<number>;
10
+ selectOne(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number): Promise<unknown>;
11
+ select(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number): Promise<unknown>;
12
+ selectAll(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<unknown>;
13
+ getColumnValues(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<unknown>;
14
+ copyTable(target: string, table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<number>;
15
+ deleteTable(table: string): Promise<boolean>;
16
+ close(): void;
17
+ lastError(): unknown;
18
+ }
@@ -0,0 +1,79 @@
1
+ import log from '../../fn/browser/log.js';
2
+ let requestId = 0;
3
+ function callServiceWorker(obj, method, args) {
4
+ return new Promise((resolve, reject) => {
5
+ if (!navigator.serviceWorker?.controller) {
6
+ reject(new Error('No active service worker controller'));
7
+ return;
8
+ }
9
+ const id = ++requestId;
10
+ const channel = new MessageChannel();
11
+ channel.port1.onmessage = event => {
12
+ const msg = event.data;
13
+ log(['SW response', msg]);
14
+ if (msg?.id !== id) {
15
+ return;
16
+ }
17
+ if (msg.error) {
18
+ obj.lastErr = msg.error;
19
+ }
20
+ if (msg.ok) {
21
+ resolve(msg.result);
22
+ }
23
+ else {
24
+ reject(new Error(msg.error || 'IndexedDB service worker error'));
25
+ }
26
+ channel.port1.close();
27
+ };
28
+ const command = {
29
+ id,
30
+ database: obj.dbName,
31
+ method,
32
+ args
33
+ };
34
+ navigator.serviceWorker.controller.postMessage(command, [channel.port2]);
35
+ });
36
+ }
37
+ export default class bbnDbObjectProxy {
38
+ _dbName;
39
+ lastErr = null;
40
+ constructor(dbName) {
41
+ this._dbName = dbName;
42
+ }
43
+ get dbName() {
44
+ return this._dbName;
45
+ }
46
+ insert(table, data) {
47
+ return callServiceWorker(this, 'object.insert', [table, data]);
48
+ }
49
+ update(table, data, where, replace = false) {
50
+ return callServiceWorker(this, 'object.update', [table, data, where, replace]);
51
+ }
52
+ delete(table, where) {
53
+ return callServiceWorker(this, 'object.delete', [table, where]);
54
+ }
55
+ selectOne(table, field, where, order, start, limit) {
56
+ return callServiceWorker(this, 'object.selectOne', [table, field, where, order, start, limit]);
57
+ }
58
+ select(table, fields, where, order, start) {
59
+ return callServiceWorker(this, 'object.select', [table, fields, where, order, start]);
60
+ }
61
+ selectAll(table, fields, where, order, start, limit) {
62
+ return callServiceWorker(this, 'object.selectAll', [table, fields, where, order, start, limit]);
63
+ }
64
+ getColumnValues(table, field, where, order, start, limit) {
65
+ return callServiceWorker(this, 'object.getColumnValues', [table, field, where, order, start, limit]);
66
+ }
67
+ copyTable(target, table, fields, where, order, start, limit) {
68
+ return callServiceWorker(this, 'object.copyTable', [target, table, fields, where, order, start, limit]);
69
+ }
70
+ deleteTable(table) {
71
+ return callServiceWorker(this, 'object.deleteTable', [table]);
72
+ }
73
+ close() {
74
+ void callServiceWorker(this, 'object.close', []);
75
+ }
76
+ lastError() {
77
+ return callServiceWorker(this, 'object.lastError', [this.dbName]);
78
+ }
79
+ }
@@ -0,0 +1,10 @@
1
+ import { DbApi, DbStructure } from '../types.js';
2
+ declare const bbnDbProxy: {
3
+ ok: boolean;
4
+ open(database: string, version?: number): Promise<DbApi>;
5
+ add(database: string, name: string, structure: DbStructure): Promise<boolean>;
6
+ remove(database: string, name: string): Promise<void>;
7
+ importStructure(database: string, structure: Record<string, DbStructure>): Promise<void>;
8
+ close(database: string): Promise<void>;
9
+ };
10
+ export default bbnDbProxy;
@@ -0,0 +1,52 @@
1
+ import bbnDbObjectProxy from './ObjectProxy.js';
2
+ let requestId = 0;
3
+ function callServiceWorker(database, method, args) {
4
+ return new Promise((resolve, reject) => {
5
+ if (!navigator.serviceWorker?.controller) {
6
+ reject(new Error('No active service worker controller'));
7
+ return;
8
+ }
9
+ const id = ++requestId;
10
+ const channel = new MessageChannel();
11
+ channel.port1.onmessage = event => {
12
+ const msg = event.data;
13
+ if (msg?.id !== id) {
14
+ return;
15
+ }
16
+ if (msg.ok) {
17
+ resolve(msg.result);
18
+ }
19
+ else {
20
+ reject(new Error(msg.error || 'IndexedDB service worker error'));
21
+ }
22
+ channel.port1.close();
23
+ };
24
+ const command = {
25
+ id,
26
+ database,
27
+ method,
28
+ args
29
+ };
30
+ navigator.serviceWorker.controller.postMessage(command, [channel.port2]);
31
+ });
32
+ }
33
+ const bbnDbProxy = {
34
+ ok: true,
35
+ async open(database, version) {
36
+ await callServiceWorker(database, 'manager.open', [database, version]);
37
+ return new bbnDbObjectProxy(database);
38
+ },
39
+ async add(database, name, structure) {
40
+ return await callServiceWorker(database, 'manager.add', [database, name, structure]);
41
+ },
42
+ async remove(database, name) {
43
+ return await callServiceWorker(database, 'manager.remove', [database, name]);
44
+ },
45
+ async importStructure(database, structure) {
46
+ return await callServiceWorker(database, 'manager.importStructure', [database, structure]);
47
+ },
48
+ async close(database) {
49
+ return await callServiceWorker(database, 'manager.close', [database]);
50
+ }
51
+ };
52
+ export default bbnDbProxy;
@@ -0,0 +1 @@
1
+ export default function fieldsFromFilter(filter: unknown, fields?: string[]): string[];
@@ -0,0 +1,33 @@
1
+ import iterate from '../../fn/loop/iterate.js';
2
+ import isObject from '../../fn/type/isObject.js';
3
+ import isArray from '../../fn/type/isArray.js';
4
+ export default function fieldsFromFilter(filter, fields = []) {
5
+ if (filter?.conditions?.length) {
6
+ filter.conditions.forEach((cond) => {
7
+ if (cond.field && !fields.includes(cond.field)) {
8
+ fields.push(cond.field);
9
+ }
10
+ else if (cond.conditions) {
11
+ fieldsFromFilter(cond, fields);
12
+ }
13
+ });
14
+ }
15
+ else if (isObject(filter)) {
16
+ iterate(filter, (_v, n) => {
17
+ if (!fields.includes(n)) {
18
+ fields.push(n);
19
+ }
20
+ });
21
+ }
22
+ else if (isArray(filter)) {
23
+ filter.forEach((cond) => {
24
+ if (cond.field && !fields.includes(cond.field)) {
25
+ fields.push(cond.field);
26
+ }
27
+ else if (cond.conditions) {
28
+ fieldsFromFilter(cond, fields);
29
+ }
30
+ });
31
+ }
32
+ return fields;
33
+ }
@@ -0,0 +1,2 @@
1
+ import { DbStructure } from '../types.js';
2
+ export default function getPrimaryKey(structure: DbStructure): string | string[];
@@ -0,0 +1,8 @@
1
+ import _ from '../../_.js';
2
+ export default function getPrimaryKey(structure) {
3
+ if (!structure.keys?.PRIMARY?.columns) {
4
+ throw new Error(_('No primary key defined in the structure'));
5
+ }
6
+ const cols = structure.keys.PRIMARY.columns;
7
+ return cols.length > 1 ? cols : cols[0];
8
+ }
@@ -0,0 +1 @@
1
+ export default function requestToPromise<T = unknown>(req: IDBRequest<T>): Promise<T>;
@@ -0,0 +1,6 @@
1
+ export default function requestToPromise(req) {
2
+ return new Promise((resolve, reject) => {
3
+ req.onsuccess = () => resolve(req.result);
4
+ req.onerror = () => reject(req.error);
5
+ });
6
+ }
@@ -0,0 +1 @@
1
+ export default function transactionDone(tx: IDBTransaction): Promise<void>;
@@ -0,0 +1,7 @@
1
+ export default function transactionDone(tx) {
2
+ return new Promise((resolve, reject) => {
3
+ tx.oncomplete = () => resolve();
4
+ tx.onabort = () => reject(tx.error);
5
+ tx.onerror = () => reject(tx.error);
6
+ });
7
+ }
@@ -0,0 +1 @@
1
+ export default function transformResult(obj: Record<string, unknown> | undefined, fields?: string[]): Record<string, unknown> | undefined;
@@ -0,0 +1,16 @@
1
+ import iterate from '../../fn/loop/iterate.js';
2
+ export default function transformResult(obj, fields) {
3
+ if (!obj) {
4
+ return undefined;
5
+ }
6
+ if (fields?.length) {
7
+ const res = {};
8
+ iterate(obj, (v, n) => {
9
+ if (fields.includes(n)) {
10
+ res[n] = v;
11
+ }
12
+ });
13
+ return res;
14
+ }
15
+ return obj;
16
+ }
@@ -0,0 +1,56 @@
1
+ export type IndexedDbFactory = IDBFactory | undefined;
2
+ export type Primitive = string | number | boolean | null | undefined | Date;
3
+ export interface DbIndexDefinition {
4
+ columns: string[];
5
+ unique?: boolean;
6
+ }
7
+ export interface DbStructure {
8
+ keys: Record<string, DbIndexDefinition>;
9
+ fields: Record<string, Record<string, unknown>>;
10
+ version?: number;
11
+ }
12
+ export interface DbStructures {
13
+ [database: string]: {
14
+ [store: string]: DbStructure;
15
+ };
16
+ }
17
+ export type WhereObject = Record<string, unknown> | null;
18
+ export type OrderClause = unknown;
19
+ export type DbCommand = {
20
+ id: number;
21
+ database: string;
22
+ method: string;
23
+ args: unknown[];
24
+ };
25
+ export interface DbApi {
26
+ lastErr: any;
27
+ get dbName(): string;
28
+ lastError(): unknown;
29
+ close(): void;
30
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<number>;
31
+ update(table: string, data: Record<string, unknown>, where: WhereObject, replace?: boolean): Promise<number>;
32
+ delete(table: string, where: Record<string, unknown>): Promise<number>;
33
+ selectOne(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number): Promise<unknown>;
34
+ select(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number): Promise<unknown>;
35
+ selectAll(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<unknown>;
36
+ getColumnValues(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<unknown>;
37
+ copyTable(target: string, table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<number>;
38
+ deleteTable(table: string): Promise<boolean>;
39
+ }
40
+ export interface DbManager {
41
+ ok: boolean;
42
+ open(name: string, version?: number): Promise<DbApi>;
43
+ add(database: string, name: string, structure: DbStructure): Promise<boolean>;
44
+ remove(database: string, name: string): Promise<void>;
45
+ importStructure(database: string, structure: Record<string, DbStructure>): Promise<void>;
46
+ close(database: string): void;
47
+ }
48
+ export interface DbManagerInternal extends DbManager {
49
+ _structures: DbStructures;
50
+ _connections: Record<string, IDBDatabase>;
51
+ _objects: Record<string, DbApi>;
52
+ _stores: Record<string, unknown>;
53
+ updateStructure(storeName: string, structure: DbStructure, database: IDBDatabase): void;
54
+ reopenWithUpgrade(name: string): Promise<DbApi>;
55
+ getExistingVersion(name: string): Promise<number>;
56
+ }
@@ -0,0 +1 @@
1
+ export {};
package/dist/db.d.ts CHANGED
@@ -1,66 +1,3 @@
1
- interface DbIndexDefinition {
2
- columns: string[];
3
- unique?: boolean;
4
- }
5
- interface DbStructure {
6
- keys: Record<string, DbIndexDefinition>;
7
- fields: Record<string, Record<string, unknown>>;
8
- version?: number;
9
- }
10
- interface DbStructures {
11
- [database: string]: {
12
- [store: string]: DbStructure;
13
- };
14
- }
15
- type WhereObject = Record<string, unknown> | null;
16
- type OrderClause = unknown;
17
- interface IDbApi {
18
- lastError(): unknown;
19
- close(): void;
20
- insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<number>;
21
- update(table: string, data: Record<string, unknown>, where: WhereObject, replace?: boolean): Promise<number>;
22
- delete(table: string, where: Record<string, unknown>): Promise<number>;
23
- selectOne(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number): Promise<unknown>;
24
- select(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number): Promise<Record<string, unknown> | null>;
25
- selectAll(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<Record<string, unknown>[]>;
26
- getColumnValues(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<unknown[]>;
27
- copyTable(target: string, table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<number>;
28
- deleteTable(table: string): Promise<boolean>;
29
- }
30
- declare class DbObject implements IDbApi {
31
- private readonly dbName;
32
- private lastErr;
33
- constructor(dbName: string);
34
- private hasMissingStores;
35
- private getConnection;
36
- private get structure();
37
- private getStore;
38
- lastError(): unknown;
39
- close(): void;
40
- insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<number>;
41
- update(table: string, data: Record<string, unknown>, where: WhereObject, replace?: boolean): Promise<number>;
42
- delete(table: string, where: Record<string, unknown>): Promise<number>;
43
- selectOne(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number): Promise<unknown>;
44
- select(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number): Promise<Record<string, unknown> | null>;
45
- selectAll(table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<Record<string, unknown>[]>;
46
- getColumnValues(table: string, field: string, where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<unknown[]>;
47
- copyTable(target: string, table: string, fields?: string[], where?: unknown, order?: OrderClause, start?: number, limit?: number | null): Promise<number>;
48
- deleteTable(table: string): Promise<boolean>;
49
- }
50
- interface DbManager {
51
- _structures: DbStructures;
52
- _connections: Record<string, IDBDatabase>;
53
- _objects: Record<string, DbObject>;
54
- _stores: Record<string, unknown>;
55
- ok: boolean;
56
- open(name: string, version?: number): Promise<IDbApi>;
57
- add(database: string, name: string, structure: DbStructure): Promise<boolean>;
58
- remove(database: string, name: string): Promise<void>;
59
- updateStructure(storeName: string, structure: DbStructure, database: IDBDatabase): void;
60
- importStructure(database: string, structure: Record<string, DbStructure>): Promise<void>;
61
- reopenWithUpgrade(name: string): Promise<IDbApi>;
62
- getExistingVersion(name: string): Promise<number>;
63
- close(database: string): void;
64
- }
65
- declare const db: DbManager;
66
- export default db;
1
+ import bbnDb from './db/classes/Object.js';
2
+ import bbnDbProxy from './db/classes/Proxy.js';
3
+ export { bbnDb, bbnDbProxy };