backend-plus 2.7.0-beta.2 → 2.7.0-beta.3
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/for-client/css/my-things.styl +11 -0
- package/lib/backend-plus.d.ts +1 -1
- package/lib/backend-plus.js +7 -3
- package/package.json +15 -15
- package/src/for-client/my-localdb.js +506 -0
- package/src/for-client/my-localdb.js.map +1 -0
- package/src/for-client/my-websqldb.js +433 -0
- package/src/for-client/my-websqldb.js.map +1 -0
- package/src/test/karma-test-localdb.d.ts +1 -0
- package/src/test/karma-test-localdb.js +325 -0
- package/src/test/karma-test-localdb.js.map +1 -0
- package/for-client/my-localdb.js +0 -689
- package/for-client/my-localdb.js.map +0 -1
- package/for-client/my-websqldb.js +0 -600
- package/for-client/my-websqldb.js.map +0 -1
- /package/{for-client → src/for-client}/my-localdb.d.ts +0 -0
- /package/{for-client → src/for-client}/my-websqldb.d.ts +0 -0
package/lib/backend-plus.d.ts
CHANGED
|
@@ -169,7 +169,7 @@ export interface TableContext extends Context{
|
|
|
169
169
|
superuser?:true
|
|
170
170
|
forDump?:boolean
|
|
171
171
|
}
|
|
172
|
-
export type PgKnownTypes='decimal'|'text'|'boolean'|'integer'|'bigint'|'date'|'interval'|'timestamp'|'jsonb'|'double'|'bytea'|'jsona'|'time'|'tsrange'|'time_range'|'daterange'|'time_multirange';
|
|
172
|
+
export type PgKnownTypes='decimal'|'text'|'boolean'|'integer'|'bigint'|'date'|'interval'|'timestamp'|'jsonb'|'double'|'bytea'|'jsona'|'time'|'tsrange'|'time_range'|'daterange'|'time_multirange'|'gpoint'|'point';
|
|
173
173
|
export type PgKnownDbValues='current_timestamp'|'current_user'|'session_user';
|
|
174
174
|
export type SequenceDefinition = {
|
|
175
175
|
name:string
|
package/lib/backend-plus.js
CHANGED
|
@@ -1032,6 +1032,7 @@ AppBackend.prototype.start = function start(opts){
|
|
|
1032
1032
|
console.log(err);
|
|
1033
1033
|
throw err;
|
|
1034
1034
|
}
|
|
1035
|
+
await pg.setAllTypes(client);
|
|
1035
1036
|
var data = await client.query("SELECT current_timestamp as cts").fetchUniqueRow();
|
|
1036
1037
|
if(verboseStartup){
|
|
1037
1038
|
console.log('NOW in Database',data.row.cts);
|
|
@@ -3611,9 +3612,12 @@ AppBackend.prototype.dumpDbSchema = async function dumpDbSchema(opts){
|
|
|
3611
3612
|
)
|
|
3612
3613
|
mainSql=be.config.install.dump.db.extensions.map(function(extension){
|
|
3613
3614
|
return ({
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3615
|
+
cube : "create extension if not exists cube ;",
|
|
3616
|
+
earthdistance : "create extension if not exists earthdistance ;",
|
|
3617
|
+
gist : "create extension if not exists btree_gist ;",
|
|
3618
|
+
pg_trgm : "create extension if not exists pg_trgm ;",
|
|
3619
|
+
pgcrypto : "create extension if not exists pgcrypto ;",
|
|
3620
|
+
postgis : "create extension if not exists postgis ;",
|
|
3617
3621
|
}[extension]||('--unknown exension '+extension))+'\n';
|
|
3618
3622
|
}).join('')+mainSql;
|
|
3619
3623
|
await fs.writeFile('local-db-dump.sql', mainSql);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backend-plus",
|
|
3
3
|
"description": "Backend for the anti Pareto rule",
|
|
4
|
-
"version": "2.7.0-beta.
|
|
4
|
+
"version": "2.7.0-beta.3",
|
|
5
5
|
"author": "Codenautas <codenautas@googlegroups.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "codenautas/backend-plus",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"ensure-login": "^0.1.6-beta.0",
|
|
47
47
|
"express": "^5.2.1",
|
|
48
48
|
"express-useragent": "^2.2.1",
|
|
49
|
-
"fs-extra": "^11.
|
|
49
|
+
"fs-extra": "^11.4.0",
|
|
50
50
|
"js-to-html": "^1.3.6",
|
|
51
|
-
"js-yaml": "^5.2.
|
|
51
|
+
"js-yaml": "^5.2.2",
|
|
52
52
|
"json4all": "^1.4.4",
|
|
53
53
|
"lazy-some": "^0.1.0",
|
|
54
54
|
"like-ar": "^0.5.3",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"multiparty": "^4.3.0",
|
|
60
60
|
"nodemailer": "^9.0.3",
|
|
61
61
|
"numeral": "^2.0.6",
|
|
62
|
-
"pg-promise-strict": "^1.
|
|
62
|
+
"pg-promise-strict": "^1.5.0",
|
|
63
63
|
"pg-triggers": "0.4.6",
|
|
64
64
|
"pikaday": "^1.8.2",
|
|
65
65
|
"require-bro": "^0.3.6",
|
|
@@ -68,46 +68,46 @@
|
|
|
68
68
|
"simple-git": "^3.36.0",
|
|
69
69
|
"sql-tools": "^0.1.7",
|
|
70
70
|
"stack-trace": "^1.0.0",
|
|
71
|
-
"type-store": "^0.
|
|
72
|
-
"typed-controls": "^0.12.
|
|
71
|
+
"type-store": "^0.6.0",
|
|
72
|
+
"typed-controls": "^0.12.7",
|
|
73
73
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@types/big.js": "^7.0.0",
|
|
77
|
-
"@types/expect.js": "
|
|
77
|
+
"@types/expect.js": "^0.3.32",
|
|
78
78
|
"@types/express": "^5.0.6",
|
|
79
79
|
"@types/express-useragent": "^1.0.5",
|
|
80
80
|
"@types/fs-extra": "^11.0.4",
|
|
81
81
|
"@types/js-yaml": "^4.0.9",
|
|
82
82
|
"@types/mocha": "^10.0.10",
|
|
83
|
-
"@types/multiparty": "
|
|
84
|
-
"@types/node": "^26.1.
|
|
83
|
+
"@types/multiparty": "^4.2.1",
|
|
84
|
+
"@types/node": "^26.1.1",
|
|
85
85
|
"@types/nodemailer": "^8.0.1",
|
|
86
86
|
"@types/numeral": "~2.0.5",
|
|
87
87
|
"@types/session-file-store": "^1.2.6",
|
|
88
|
-
"@types/stack-trace": "
|
|
88
|
+
"@types/stack-trace": "^0.0.33",
|
|
89
89
|
"@types/websql": "~0.0.30",
|
|
90
90
|
"backend-skins": "^0.1.34",
|
|
91
91
|
"discrepances": "^0.2.14",
|
|
92
92
|
"esprima": "^4.0.1",
|
|
93
|
-
"expect.js": "
|
|
93
|
+
"expect.js": "^0.3.1",
|
|
94
94
|
"karma": "6.4.4",
|
|
95
95
|
"karma-chrome-launcher": "^3.2.0",
|
|
96
96
|
"karma-expect": "^1.1.3",
|
|
97
97
|
"karma-firefox-launcher": "^2.1.3",
|
|
98
98
|
"karma-ie-launcher": "^1.0.0",
|
|
99
99
|
"karma-mocha": "^2.0.1",
|
|
100
|
-
"kill-9": "
|
|
100
|
+
"kill-9": "^0.4.3",
|
|
101
101
|
"mocha": "^11.7.6",
|
|
102
102
|
"nyc": "^18.0.0",
|
|
103
103
|
"puppeteer": "^25.3.0",
|
|
104
104
|
"qa-control": "0.7.5",
|
|
105
105
|
"regexplicit": "^0.1.3",
|
|
106
106
|
"self-explain": "^0.11.0",
|
|
107
|
-
"sinon": "^22.
|
|
107
|
+
"sinon": "^22.1.0",
|
|
108
108
|
"supertest": "^7.2.2",
|
|
109
|
-
"types.d.ts": "
|
|
110
|
-
"typescript": "^
|
|
109
|
+
"types.d.ts": "^0.6.22",
|
|
110
|
+
"typescript": "^7.0.2",
|
|
111
111
|
"why-is-node-running": "^3.2.2"
|
|
112
112
|
},
|
|
113
113
|
"engines": {
|
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
//import { TableDefinition } from "backend-plus";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
37
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
38
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
39
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
40
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
41
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
42
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.LocalDbTransaction = exports.LocalDb = exports.detectedFeatures = void 0;
|
|
47
|
+
//x// <amd-dependency path="../../../node_modules/like-ar/like-ar.d.ts" name="likeAr"/>
|
|
48
|
+
//x// <reference path="../../node_modules/like-ar/like-ar.d.ts" />
|
|
49
|
+
/// <reference path="../node_modules/types.d.ts/modules/myOwn/in-myOwn.d.ts" />
|
|
50
|
+
/// <reference path="../../../lib/in-backend-plus.d.ts" />
|
|
51
|
+
/// <reference path="../../../lib/backend-plus.d.ts" />
|
|
52
|
+
/// <reference path="../../lib/in-backend-plus.d.ts" />
|
|
53
|
+
/// <reference path="../../lib/backend-plus.d.ts" />
|
|
54
|
+
/// <reference path="../lib/in-backend-plus.d.ts" />
|
|
55
|
+
/// <reference path="../lib/backend-plus.d.ts" />
|
|
56
|
+
/// <reference path="lib/in-backend-plus.d.ts" />
|
|
57
|
+
/// <reference path="lib/backend-plus.d.ts" />
|
|
58
|
+
/****
|
|
59
|
+
* Atención en la implementación de este módulo se tiene en cuenta que según
|
|
60
|
+
* https://caniuse.com/#feat=indexeddb ocurren dos cosas trágicas:
|
|
61
|
+
* 1) en IE y EDGE no hay claves de tipo array
|
|
62
|
+
* 2) en iOS de 8 a 9.3 hay un error que no permite que en dos objetos distintos haya una misma Pk
|
|
63
|
+
*
|
|
64
|
+
* más explicaciones en:
|
|
65
|
+
* 1) https://stackoverflow.com/questions/14283257/dataerror-when-creating-an-index-with-a-compound-key-in-ie-10
|
|
66
|
+
* 2) https://www.raymondcamden.com/2014/09/25/IndexedDB-on-iOS-8-Broken-Bad/
|
|
67
|
+
*
|
|
68
|
+
* hay un test en:
|
|
69
|
+
* a) https://codepen.io/cemerick/pen/Itymi
|
|
70
|
+
*
|
|
71
|
+
* workarround para contemplar IE, y iOS viejos:
|
|
72
|
+
* 1) se transforman las claves antes de usarlas en un string (JSON.stringify del array para el problema del IE)
|
|
73
|
+
* 2) se prefija el string con el nombre del objectStore (para que todas las claves sean distintas y no haya problemas con el iOS viejo)
|
|
74
|
+
*
|
|
75
|
+
* detección
|
|
76
|
+
* 1) por ahora solo probamos la detección del problema del array de claves
|
|
77
|
+
* 2) TODO: Falta programar la detección del problema de iOS viejo, quizás haya que ser explícito, hay que probarlo con varios iPad
|
|
78
|
+
*/
|
|
79
|
+
const likeAr = __importStar(require("like-ar"));
|
|
80
|
+
exports.detectedFeatures = {
|
|
81
|
+
needToUnwrapArrayKeys: null
|
|
82
|
+
};
|
|
83
|
+
class LocalDb {
|
|
84
|
+
constructor(name) {
|
|
85
|
+
this.name = name;
|
|
86
|
+
var ldb = this;
|
|
87
|
+
var initialStores = {
|
|
88
|
+
$structures: 'name',
|
|
89
|
+
$internals: 'var',
|
|
90
|
+
$detect: ['detectKey'],
|
|
91
|
+
};
|
|
92
|
+
var initialVersionInfo = {
|
|
93
|
+
var: 'version',
|
|
94
|
+
num: 1,
|
|
95
|
+
timestamp: new Date().toJSON(),
|
|
96
|
+
stores: initialStores
|
|
97
|
+
};
|
|
98
|
+
var requestDB = indexedDB.open(this.name);
|
|
99
|
+
requestDB.onupgradeneeded = function () {
|
|
100
|
+
var db = requestDB.result;
|
|
101
|
+
if (!db.objectStoreNames.contains("$internals")) {
|
|
102
|
+
likeAr(initialStores).forEach(function (keyPath, tableName) {
|
|
103
|
+
var store = db.createObjectStore(tableName, { keyPath: keyPath });
|
|
104
|
+
if (tableName == '$internals') {
|
|
105
|
+
store.put(initialVersionInfo);
|
|
106
|
+
}
|
|
107
|
+
if (tableName == '$detect') {
|
|
108
|
+
ldb.wait4detectedFeatures = ldb.detectFeatures(store);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
ldb.wait4db = ldb.IDBX(requestDB);
|
|
114
|
+
}
|
|
115
|
+
static deleteDatabase(name) {
|
|
116
|
+
var request = indexedDB.deleteDatabase(name);
|
|
117
|
+
return new Promise(function (resolve, reject) {
|
|
118
|
+
request.onsuccess = function () {
|
|
119
|
+
resolve();
|
|
120
|
+
};
|
|
121
|
+
request.onerror = function (event) {
|
|
122
|
+
reject();
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
IDBX(request) {
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
return new Promise(function (resolve, reject) {
|
|
129
|
+
if ('onsuccess' in request) {
|
|
130
|
+
request.onsuccess = function () {
|
|
131
|
+
resolve(request.result);
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
request.oncomplete = function () {
|
|
136
|
+
resolve();
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
request.onerror = function () {
|
|
140
|
+
alertPromise(request.error.message || request.error.name);
|
|
141
|
+
reject(request.error);
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
registerStructure(tableDef) {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
var ldb = this;
|
|
149
|
+
var wait4dbCurrent = this.wait4db;
|
|
150
|
+
var registerTask = this.registerStructureInside(tableDef, wait4dbCurrent);
|
|
151
|
+
this.wait4db = registerTask.then(result => result.wait4db);
|
|
152
|
+
var result = yield registerTask;
|
|
153
|
+
return result.result;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
detectFeatures(store) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
return new Promise((resolve) => {
|
|
159
|
+
try {
|
|
160
|
+
// @ts-ignore
|
|
161
|
+
var os = window.myOwn.config.useragent.os;
|
|
162
|
+
// @ts-ignore
|
|
163
|
+
var version = parseInt(window.myOwn.config.useragent.version.split('.')[0]);
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
throw Error("unknowed OS or version");
|
|
167
|
+
}
|
|
168
|
+
if (os === 'OS X' && version < 11) {
|
|
169
|
+
exports.detectedFeatures.needToUnwrapArrayKeys = true;
|
|
170
|
+
resolve(exports.detectedFeatures);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
var request = store.put({ detectKey: 'one' });
|
|
174
|
+
request.onsuccess = function () {
|
|
175
|
+
var key = request.result;
|
|
176
|
+
if (typeof key === "string") {
|
|
177
|
+
exports.detectedFeatures.needToUnwrapArrayKeys = true;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
exports.detectedFeatures.needToUnwrapArrayKeys = false;
|
|
181
|
+
}
|
|
182
|
+
resolve(exports.detectedFeatures);
|
|
183
|
+
};
|
|
184
|
+
request.onerror = function () {
|
|
185
|
+
exports.detectedFeatures.needToUnwrapArrayKeys = true;
|
|
186
|
+
resolve(exports.detectedFeatures);
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
registerStructureInside(tableDef, wait4db) {
|
|
193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
var ldb = this;
|
|
195
|
+
var db = yield wait4db;
|
|
196
|
+
var result = { wait4db, result: { changed: null } };
|
|
197
|
+
var oldValue = yield this.IDBX(db.transaction('$structures', "readonly").objectStore('$structures').get(tableDef.name));
|
|
198
|
+
if (!oldValue) {
|
|
199
|
+
result.result.new = true;
|
|
200
|
+
}
|
|
201
|
+
yield ldb.IDBX(db.transaction('$structures', "readwrite").objectStore('$structures').put(tableDef));
|
|
202
|
+
result.result.changed = JSON.stringify(tableDef) != JSON.stringify(oldValue);
|
|
203
|
+
if (!ldb.wait4detectedFeatures) {
|
|
204
|
+
ldb.wait4detectedFeatures = ldb.detectFeatures(db.transaction('$detect', "readwrite").objectStore('$detect'));
|
|
205
|
+
}
|
|
206
|
+
yield ldb.wait4detectedFeatures;
|
|
207
|
+
var infoStore = exports.detectedFeatures.needToUnwrapArrayKeys ? null : tableDef.primaryKey;
|
|
208
|
+
var versionInfo = yield this.IDBX(db.transaction('$internals', "readonly").objectStore('$internals').get('version'));
|
|
209
|
+
if (JSON.stringify(versionInfo.stores[tableDef.name]) != JSON.stringify(infoStore)) {
|
|
210
|
+
db.close();
|
|
211
|
+
versionInfo.num++;
|
|
212
|
+
var requestDB = indexedDB.open(this.name, versionInfo.num);
|
|
213
|
+
requestDB.onupgradeneeded = function () {
|
|
214
|
+
var db = requestDB.result;
|
|
215
|
+
if (versionInfo.stores[tableDef.name]) {
|
|
216
|
+
db.deleteObjectStore(tableDef.name);
|
|
217
|
+
}
|
|
218
|
+
if (infoStore != null) {
|
|
219
|
+
db.createObjectStore(tableDef.name, { keyPath: infoStore });
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
db.createObjectStore(tableDef.name);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
result.wait4db = ldb.IDBX(requestDB);
|
|
226
|
+
db = yield result.wait4db;
|
|
227
|
+
versionInfo.stores[tableDef.name] = infoStore;
|
|
228
|
+
yield ldb.IDBX(db.transaction('$internals', "readwrite").objectStore('$internals').put(versionInfo));
|
|
229
|
+
}
|
|
230
|
+
return result;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
getStructure(tableName) {
|
|
234
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
235
|
+
var ldb = this;
|
|
236
|
+
var db = yield ldb.wait4db;
|
|
237
|
+
if (!ldb.wait4detectedFeatures) {
|
|
238
|
+
ldb.wait4detectedFeatures = ldb.detectFeatures(db.transaction('$detect', "readwrite").objectStore('$detect'));
|
|
239
|
+
}
|
|
240
|
+
yield ldb.wait4detectedFeatures;
|
|
241
|
+
var tableDef = yield ldb.IDBX(db.transaction('$structures', "readonly").objectStore('$structures').get(tableName));
|
|
242
|
+
return tableDef;
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
existsStructure(tableName) {
|
|
246
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
247
|
+
var tableDef = yield this.getStructure(tableName);
|
|
248
|
+
return tableDef ? true : false;
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
getOneIfExists(tableName, key) {
|
|
252
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
253
|
+
var ldb = this;
|
|
254
|
+
var db = yield ldb.wait4db;
|
|
255
|
+
var internalKey;
|
|
256
|
+
if (exports.detectedFeatures.needToUnwrapArrayKeys) {
|
|
257
|
+
internalKey = tableName + JSON.stringify(key);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
internalKey = key;
|
|
261
|
+
}
|
|
262
|
+
var result = yield ldb.IDBX(db.transaction(tableName, "readonly").objectStore(tableName).get(internalKey));
|
|
263
|
+
return result;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
getOne(tableName, key) {
|
|
267
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
268
|
+
var result = yield this.getOneIfExists(tableName, key);
|
|
269
|
+
if (!result) {
|
|
270
|
+
throw new Error("no result");
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
getChild(tableName, parentKey) {
|
|
276
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
277
|
+
var ldb = this;
|
|
278
|
+
var db = yield ldb.wait4db;
|
|
279
|
+
var rows = [];
|
|
280
|
+
var internalKey;
|
|
281
|
+
if (exports.detectedFeatures.needToUnwrapArrayKeys) {
|
|
282
|
+
internalKey = tableName + JSON.stringify(parentKey);
|
|
283
|
+
internalKey = internalKey.substr(0, internalKey.length - 1);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
internalKey = parentKey ? parentKey : '';
|
|
287
|
+
}
|
|
288
|
+
var cursor = db.transaction([tableName], 'readonly').objectStore(tableName).openCursor(parentKey == null ? null : IDBKeyRange.lowerBound(internalKey));
|
|
289
|
+
return new Promise(function (resolve, reject) {
|
|
290
|
+
cursor.onsuccess = function (event) {
|
|
291
|
+
// @ts-ignore target no conoce result en la definición de TS. Verificar dentro de un tiempo si TS mejoró
|
|
292
|
+
var cursor = event.target.result;
|
|
293
|
+
if (cursor && ((parentKey == null) || (exports.detectedFeatures.needToUnwrapArrayKeys ?
|
|
294
|
+
internalKey == cursor.key.slice(0, internalKey.length) :
|
|
295
|
+
!parentKey.find(function (expectedValue, i) {
|
|
296
|
+
var storedValue = cursor.key[i];
|
|
297
|
+
return expectedValue != storedValue;
|
|
298
|
+
})))) {
|
|
299
|
+
rows.push(cursor.value);
|
|
300
|
+
cursor.continue();
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
resolve(rows);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
cursor.onerror = function () {
|
|
307
|
+
reject(cursor.error);
|
|
308
|
+
};
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
getAll(tableName) {
|
|
313
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
314
|
+
return this.getChild(tableName, tableName[0] == '$' ? null : []);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
getAllStructures() {
|
|
318
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
319
|
+
return this.getAll('$structures');
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
isEmpty(tableName) {
|
|
323
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
324
|
+
var ldb = this;
|
|
325
|
+
var db = yield ldb.wait4db;
|
|
326
|
+
var count = yield ldb.IDBX(db.transaction(tableName, "readonly").objectStore(tableName).count());
|
|
327
|
+
return count == 0;
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
putOneAndGetIfNeeded(tableName, element, needed) {
|
|
331
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
332
|
+
var ldb = this;
|
|
333
|
+
var db = yield ldb.wait4db;
|
|
334
|
+
var tableDef = yield ldb.getStructure(tableName);
|
|
335
|
+
var createPromiseForFK = function createPromiseForFK(fk) {
|
|
336
|
+
return Promise.resolve().then(function () {
|
|
337
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
338
|
+
var fkTableDef = yield ldb.getStructure(fk.references);
|
|
339
|
+
if (fkTableDef) {
|
|
340
|
+
var pk = [];
|
|
341
|
+
fk.fields.forEach(function (field) {
|
|
342
|
+
pk.push(element[field.source]);
|
|
343
|
+
});
|
|
344
|
+
var isFKCompleteInSource = fk.fields.filter(function (field) {
|
|
345
|
+
return element[field.source] == null;
|
|
346
|
+
}).length == 0;
|
|
347
|
+
if (isFKCompleteInSource) {
|
|
348
|
+
var fkRecord = yield ldb.getOneIfExists(fk.references, pk);
|
|
349
|
+
if (fkRecord) {
|
|
350
|
+
fk.displayFields.forEach(function (field) {
|
|
351
|
+
element[fk.alias + '__' + field] = fkRecord[field];
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
};
|
|
359
|
+
var promisesArray = [];
|
|
360
|
+
if (tableDef.foreignKeys) {
|
|
361
|
+
tableDef.foreignKeys.forEach(function (fk) {
|
|
362
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
363
|
+
promisesArray.push(createPromiseForFK(fk));
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
if (tableDef.softForeignKeys) {
|
|
368
|
+
tableDef.softForeignKeys.forEach(function (fk) {
|
|
369
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
370
|
+
promisesArray.push(createPromiseForFK(fk));
|
|
371
|
+
});
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return Promise.all(promisesArray).then(function () {
|
|
375
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
376
|
+
if (exports.detectedFeatures.needToUnwrapArrayKeys) {
|
|
377
|
+
var newKey = tableName + JSON.stringify(tableDef.primaryKey.map(function (name) {
|
|
378
|
+
return element[name];
|
|
379
|
+
}));
|
|
380
|
+
var storeTask = db.transaction(tableName, "readwrite").objectStore(tableName).put(element, newKey);
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
var storeTask = db.transaction(tableName, "readwrite").objectStore(tableName).put(element);
|
|
384
|
+
}
|
|
385
|
+
if (needed) {
|
|
386
|
+
var key = yield ldb.IDBX(storeTask);
|
|
387
|
+
return yield ldb.IDBX(db.transaction(tableName, "readonly").objectStore(tableName).get(key));
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
return null;
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
putOne(tableName, element) {
|
|
397
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
398
|
+
return this.putOneAndGetIfNeeded(tableName, element, true);
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
putMany(tableName, elements) {
|
|
402
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
403
|
+
var ldb = this;
|
|
404
|
+
var db = yield ldb.wait4db;
|
|
405
|
+
var tableDef = yield ldb.getStructure(tableName);
|
|
406
|
+
var transaction = db.transaction(tableName, "readwrite");
|
|
407
|
+
var objectStore = transaction.objectStore(tableName);
|
|
408
|
+
var i = 0;
|
|
409
|
+
putNext();
|
|
410
|
+
function putNext() {
|
|
411
|
+
if (i < elements.length) {
|
|
412
|
+
if (exports.detectedFeatures.needToUnwrapArrayKeys) {
|
|
413
|
+
var newKey = tableName + JSON.stringify(tableDef.primaryKey.map(function (name) {
|
|
414
|
+
return elements[i][name];
|
|
415
|
+
}));
|
|
416
|
+
objectStore.put(elements[i], newKey).onsuccess = putNext;
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
objectStore.put(elements[i]).onsuccess = putNext;
|
|
420
|
+
}
|
|
421
|
+
++i;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
return Promise.resolve();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
close() {
|
|
430
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
431
|
+
var db = yield this.wait4db;
|
|
432
|
+
db.close();
|
|
433
|
+
this.wait4db = {
|
|
434
|
+
then: function () {
|
|
435
|
+
throw new Error("the database is closed");
|
|
436
|
+
},
|
|
437
|
+
catch: function () {
|
|
438
|
+
throw new Error("the database is closed");
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
clear(tableName) {
|
|
444
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
445
|
+
var ldb = this;
|
|
446
|
+
var db = yield ldb.wait4db;
|
|
447
|
+
yield ldb.IDBX(db.transaction(tableName, "readwrite").objectStore(tableName).clear());
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
exports.LocalDb = LocalDb;
|
|
452
|
+
class LocalDbTransaction {
|
|
453
|
+
constructor(localDbName) {
|
|
454
|
+
this.localDbName = localDbName;
|
|
455
|
+
this.oneByOneChain = Promise.resolve();
|
|
456
|
+
this.oneByOneChain = Promise.resolve();
|
|
457
|
+
}
|
|
458
|
+
inTransaction(callback) {
|
|
459
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
460
|
+
var name = this.localDbName;
|
|
461
|
+
this.oneByOneChain = this.oneByOneChain.then(function () {
|
|
462
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
463
|
+
var ldb = new LocalDb(name);
|
|
464
|
+
function closeLdb(previousError) {
|
|
465
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
466
|
+
try {
|
|
467
|
+
yield ldb.close();
|
|
468
|
+
if (previousError) {
|
|
469
|
+
// @ts-ignore
|
|
470
|
+
previousError.ldbWasClosed = true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
catch (errClose) {
|
|
474
|
+
if (previousError) {
|
|
475
|
+
// @ts-ignore
|
|
476
|
+
previousError.ldbWasNotClosedBecause = errClose;
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
throw errClose;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
try {
|
|
485
|
+
var result = yield callback(ldb);
|
|
486
|
+
}
|
|
487
|
+
catch (err) {
|
|
488
|
+
yield closeLdb(err);
|
|
489
|
+
throw err;
|
|
490
|
+
}
|
|
491
|
+
//await closeLdb();
|
|
492
|
+
return result;
|
|
493
|
+
});
|
|
494
|
+
});
|
|
495
|
+
return this.oneByOneChain;
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
getBindedInTransaction() {
|
|
499
|
+
var this4bind = this;
|
|
500
|
+
return function (ldb) {
|
|
501
|
+
return this4bind.inTransaction(ldb);
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
exports.LocalDbTransaction = LocalDbTransaction;
|
|
506
|
+
//# sourceMappingURL=my-localdb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"my-localdb.js","sourceRoot":"","sources":["my-localdb.ts"],"names":[],"mappings":"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"}
|