remult 0.27.10 → 0.27.12
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/esm/index.js +0 -1
- package/esm/live-query/data-provider-live-query-storage.js +0 -2
- package/esm/postgres/schema-builder.js +0 -41
- package/esm/remult-duckdb.js +7 -12
- package/esm/remult-knex/index.js +0 -7
- package/esm/remult-mongo.js +33 -0
- package/esm/remult-sqlite-core.js +33 -5
- package/esm/server/get-remult-admin-html.js +1 -1
- package/esm/server/remult-api-server.js +4 -5
- package/esm/src/data-api.js +1 -1
- package/esm/src/data-providers/array-entity-data-provider.js +26 -11
- package/esm/src/data-providers/in-memory-database.js +1 -1
- package/esm/src/filter/filter-interfaces.js +1 -0
- package/esm/src/remult3/RepositoryImplementation.js +7 -3
- package/esm/src/remult3/remult3.js +7 -3
- package/index.d.ts +0 -1
- package/index.js +1 -3
- package/live-query/data-provider-live-query-storage.js +0 -2
- package/package.json +1 -1
- package/postgres/schema-builder.d.ts +0 -4
- package/postgres/schema-builder.js +15 -118
- package/remult-duckdb.d.ts +1 -1
- package/remult-duckdb.js +7 -12
- package/remult-knex/index.d.ts +0 -2
- package/remult-knex/index.js +0 -18
- package/remult-mongo.d.ts +2 -1
- package/remult-mongo.js +128 -37
- package/remult-sqlite-core.d.ts +2 -1
- package/remult-sqlite-core.js +116 -29
- package/server/get-remult-admin-html.js +1 -1
- package/server/remult-api-server.d.ts +1 -1
- package/server/remult-api-server.js +8 -8
- package/src/data-api.js +1 -1
- package/src/data-providers/array-entity-data-provider.js +82 -37
- package/src/data-providers/in-memory-database.js +1 -1
- package/src/entity.d.ts +4 -4
- package/src/filter/filter-interfaces.js +1 -0
- package/src/remult3/RepositoryImplementation.js +7 -3
- package/src/remult3/remult3.d.ts +17 -2
- package/src/remult3/remult3.js +7 -3
- package/esm/src/data-providers/web-sql-data-provider.js +0 -140
- package/src/data-providers/web-sql-data-provider.d.ts +0 -20
- package/src/data-providers/web-sql-data-provider.js +0 -228
|
@@ -35,8 +35,6 @@ export function createRemultServerCore(options, serverCoreOptions) {
|
|
|
35
35
|
RemultAsyncLocalStorage.enable();
|
|
36
36
|
{
|
|
37
37
|
let allControllers = [];
|
|
38
|
-
if (!safeOptions.entities)
|
|
39
|
-
safeOptions.entities = [...remultStatic.allEntities];
|
|
40
38
|
if (safeOptions.entities)
|
|
41
39
|
allControllers.push(...safeOptions.entities);
|
|
42
40
|
if (safeOptions.controllers)
|
|
@@ -77,7 +75,8 @@ export class RemultServerImplementation {
|
|
|
77
75
|
started = true;
|
|
78
76
|
console.time('Schema ensured');
|
|
79
77
|
};
|
|
80
|
-
|
|
78
|
+
if (options.entities)
|
|
79
|
+
entitiesMetaData.push(...options.entities.map((e) => remult.repo(e).metadata));
|
|
81
80
|
if (dp.ensureSchema) {
|
|
82
81
|
startConsoleLog();
|
|
83
82
|
await dp.ensureSchema(entitiesMetaData);
|
|
@@ -233,7 +232,7 @@ export class RemultServerImplementation {
|
|
|
233
232
|
res.success(await remult.liveQueryStorage.keepAliveAndReturnUnknownQueryIds(await this.coreOptions.getRequestBody(origReq)));
|
|
234
233
|
}));
|
|
235
234
|
}
|
|
236
|
-
this.options.entities
|
|
235
|
+
this.options.entities?.forEach((e) => {
|
|
237
236
|
let key = getEntityKey(e);
|
|
238
237
|
if (key != undefined)
|
|
239
238
|
this.add(key, (c) => {
|
|
@@ -806,7 +805,7 @@ class ResponseBridgeToDataApiResponse {
|
|
|
806
805
|
httpStatusCode = 400;
|
|
807
806
|
}
|
|
808
807
|
else {
|
|
809
|
-
httpStatusCode =
|
|
808
|
+
httpStatusCode = 400;
|
|
810
809
|
}
|
|
811
810
|
}
|
|
812
811
|
let responseSent = false;
|
package/esm/src/data-api.js
CHANGED
|
@@ -293,6 +293,16 @@ export class ArrayEntityDataProvider {
|
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
+
if (this.entity.idMetadata.fields.find((x) => newR[names.$dbNameOf(x)] != r[names.$dbNameOf(x)]) &&
|
|
297
|
+
this.rows().find((x) => {
|
|
298
|
+
for (const f of this.entity.idMetadata.fields) {
|
|
299
|
+
if (x[names.$dbNameOf(f)] != newR[names.$dbNameOf(f)])
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
return true;
|
|
303
|
+
})) {
|
|
304
|
+
throw Error('id already exists');
|
|
305
|
+
}
|
|
296
306
|
this.verifyThatRowHasAllNotNullColumns(newR, names);
|
|
297
307
|
this.rows()[i] = newR;
|
|
298
308
|
return Promise.resolve(this.translateFromJson(this.rows()[i], names));
|
|
@@ -315,19 +325,24 @@ export class ArrayEntityDataProvider {
|
|
|
315
325
|
const names = await this.init();
|
|
316
326
|
let j = this.translateToJson(data, names);
|
|
317
327
|
let idf = this.entity.idMetadata.field;
|
|
318
|
-
if (!(idf instanceof CompoundIdField)
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
328
|
+
if (!(idf instanceof CompoundIdField) &&
|
|
329
|
+
idf.valueConverter.fieldTypeInDb === 'autoincrement') {
|
|
330
|
+
j[idf.key] = 1;
|
|
331
|
+
for (const row of this.rows()) {
|
|
332
|
+
if (row[idf.key] >= j[idf.key])
|
|
333
|
+
j[idf.key] = row[idf.key] + 1;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
if (this.rows().find((x) => {
|
|
338
|
+
for (const f of this.entity.idMetadata.fields) {
|
|
339
|
+
if (x[names.$dbNameOf(f)] != j[names.$dbNameOf(f)])
|
|
340
|
+
return false;
|
|
324
341
|
}
|
|
342
|
+
return true;
|
|
343
|
+
})) {
|
|
344
|
+
throw Error('id already exists');
|
|
325
345
|
}
|
|
326
|
-
if (j[idf.key])
|
|
327
|
-
this.rows().forEach((i) => {
|
|
328
|
-
if (j[idf.key] == i[idf.key])
|
|
329
|
-
throw Error('id already exists');
|
|
330
|
-
});
|
|
331
346
|
}
|
|
332
347
|
this.verifyThatRowHasAllNotNullColumns(j, names);
|
|
333
348
|
this.rows().push(j);
|
|
@@ -12,7 +12,7 @@ export class InMemoryDataProvider {
|
|
|
12
12
|
}
|
|
13
13
|
rows = {};
|
|
14
14
|
getEntityDataProvider(entity) {
|
|
15
|
-
let name = entity.
|
|
15
|
+
let name = entity.dbName;
|
|
16
16
|
if (!this.rows[name])
|
|
17
17
|
this.rows[name] = [];
|
|
18
18
|
return new ArrayEntityDataProvider(entity, () => this.rows[name]);
|
|
@@ -1979,9 +1979,13 @@ class EntityFullInfo {
|
|
|
1979
1979
|
this.fields = r;
|
|
1980
1980
|
this.caption = buildCaption(entityInfo.caption, this.key, remult, this);
|
|
1981
1981
|
if (entityInfo.id) {
|
|
1982
|
-
let r = typeof entityInfo.id === '
|
|
1983
|
-
? entityInfo.id
|
|
1984
|
-
:
|
|
1982
|
+
let r = typeof entityInfo.id === 'string'
|
|
1983
|
+
? this.fields.find(entityInfo.id)
|
|
1984
|
+
: Array.isArray(entityInfo.id)
|
|
1985
|
+
? entityInfo.id.map((x) => this.fields.find(x))
|
|
1986
|
+
: typeof entityInfo.id === 'function'
|
|
1987
|
+
? entityInfo.id(this.fields)
|
|
1988
|
+
: Object.keys(entityInfo.id).map((x) => this.fields.find(x));
|
|
1985
1989
|
if (Array.isArray(r)) {
|
|
1986
1990
|
if (r.length > 1)
|
|
1987
1991
|
this.idMetadata.field = new CompoundIdField(...r);
|
|
@@ -7,12 +7,18 @@ export const GroupByOperators = [
|
|
|
7
7
|
'max',
|
|
8
8
|
'distinctCount',
|
|
9
9
|
];
|
|
10
|
+
const wn = [{ n: 1 }, { n: { $gt: 1 } }];
|
|
11
|
+
const wnu = [{ nu: 1 }, { nu: { $gt: 1 } }];
|
|
12
|
+
const wnn = [
|
|
13
|
+
{ nn: 1 },
|
|
14
|
+
{ nn: { $gt: 1 } },
|
|
15
|
+
{ nn: null },
|
|
16
|
+
];
|
|
10
17
|
export const flags = {
|
|
11
18
|
error500RetryCount: 4,
|
|
12
19
|
};
|
|
13
20
|
//p1 - add parameter all to deleteMany, and updateMany
|
|
14
21
|
//p1 filter.apply ApiPreFilter
|
|
15
|
-
//p1 - add not as an overload to not equal
|
|
16
22
|
/*p1 - add id and use uuid by default, but allow changes with Fields.id.defaultIdProvider NO but defaultProvider yes???
|
|
17
23
|
//p1 - replace uuid with crypto.randomUUID and allow custom fallback NO
|
|
18
24
|
//p1 - Add example for luid
|
|
@@ -20,7 +26,6 @@ export const flags = {
|
|
|
20
26
|
//p1 - explain the benefits of changing the default provider for testing in docs.
|
|
21
27
|
*/
|
|
22
28
|
//p1 - consider upsert (where,set)
|
|
23
|
-
//p1 TODO - consider id to also support keyof (id:['company','index']) - had problem with | (keyof Partial<entityType>)[] & `entity`
|
|
24
29
|
//p2 - add some kind of options handler that will help with translation etc... like in hagai - something that runs at the stage where options are being built
|
|
25
30
|
/*y1 - https://github.com/remult/remult/discussions/438
|
|
26
31
|
- https://github.com/remult/remult/blob/query-argumets/projects/tests/dbs/test-sql-database.spec.ts#L100-L128
|
|
@@ -34,7 +39,6 @@ export const flags = {
|
|
|
34
39
|
//p1 - tutorial about controller - and mutable controller
|
|
35
40
|
//p1 - docs abount subscription channel
|
|
36
41
|
//p1 - Consider enforcing serial operations on JSON database to prevent data loss
|
|
37
|
-
//p1 - fix sqlite to support alter table when adding a column with ensure schema = on
|
|
38
42
|
//p1 - add LifecycleEvent to documentation
|
|
39
43
|
//p1 - fix chaining of saving and saved in multiple entity options args
|
|
40
44
|
//p1 - review starter and examples and separate remult * auth from the routes
|
package/index.d.ts
CHANGED
|
@@ -17,7 +17,6 @@ export { FieldMetadata, FieldOptions, FieldValidator, ValueConverter, ValueListI
|
|
|
17
17
|
ValueOrExpression, } from './src/column-interfaces.js';
|
|
18
18
|
export { RestDataProvider } from './src/data-providers/rest-data-provider.js';
|
|
19
19
|
export { InMemoryDataProvider } from './src/data-providers/in-memory-database.js';
|
|
20
|
-
export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider.js';
|
|
21
20
|
export { SqlDatabase } from './src/data-providers/sql-database.js';
|
|
22
21
|
export { CustomSqlFilterBuilder, dbNamesOf, dbNamesOfOptions, CustomSqlFilterBuilderFunction, EntityDbNames, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
|
|
23
22
|
export { JsonDataProvider, JsonEntityStorage, } from './src/data-providers/json-data-provider.js';
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = exports.remult = exports.ValueConverters = exports.createValueValidator = exports.createValueValidatorWithArgs = exports.createValidatorWithArgs = exports.createValidator = exports.valueValidator = exports.Validators = exports.UrlBuilder = exports.Filter = exports.CompoundIdField = exports.Sort = exports.EventSource = exports.isBackend = exports.withRemult = exports.Remult = exports.Allow = exports.ForbiddenError = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonEntityOpfsStorage = exports.JsonDataProvider = exports.dbNamesOf = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.
|
|
3
|
+
exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = exports.remult = exports.ValueConverters = exports.createValueValidator = exports.createValueValidatorWithArgs = exports.createValidatorWithArgs = exports.createValidator = exports.valueValidator = exports.Validators = exports.UrlBuilder = exports.Filter = exports.CompoundIdField = exports.Sort = exports.EventSource = exports.isBackend = exports.withRemult = exports.Remult = exports.Allow = exports.ForbiddenError = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonEntityOpfsStorage = exports.JsonDataProvider = exports.dbNamesOf = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.InMemoryDataProvider = exports.RestDataProvider = exports.describeEntity = exports.describeBackendMethods = exports.describeClass = exports.IdEntity = exports.Relations = exports.Fields = exports.Field = exports.getEntityRef = exports.Entity = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.ArrayEntityDataProvider = void 0;
|
|
4
4
|
exports.repo = repo;
|
|
5
5
|
var array_entity_data_provider_js_1 = require("./src/data-providers/array-entity-data-provider.js");
|
|
6
6
|
Object.defineProperty(exports, "ArrayEntityDataProvider", { enumerable: true, get: function () { return array_entity_data_provider_js_1.ArrayEntityDataProvider; } });
|
|
@@ -31,8 +31,6 @@ var rest_data_provider_js_1 = require("./src/data-providers/rest-data-provider.j
|
|
|
31
31
|
Object.defineProperty(exports, "RestDataProvider", { enumerable: true, get: function () { return rest_data_provider_js_1.RestDataProvider; } });
|
|
32
32
|
var in_memory_database_js_1 = require("./src/data-providers/in-memory-database.js"); //V
|
|
33
33
|
Object.defineProperty(exports, "InMemoryDataProvider", { enumerable: true, get: function () { return in_memory_database_js_1.InMemoryDataProvider; } });
|
|
34
|
-
var web_sql_data_provider_js_1 = require("./src/data-providers/web-sql-data-provider.js"); //V
|
|
35
|
-
Object.defineProperty(exports, "WebSqlDataProvider", { enumerable: true, get: function () { return web_sql_data_provider_js_1.WebSqlDataProvider; } });
|
|
36
34
|
var sql_database_js_1 = require("./src/data-providers/sql-database.js"); //V
|
|
37
35
|
Object.defineProperty(exports, "SqlDatabase", { enumerable: true, get: function () { return sql_database_js_1.SqlDatabase; } });
|
|
38
36
|
var filter_consumer_bridge_to_sql_request_js_1 = require("./src/filter/filter-consumer-bridge-to-sql-request.js");
|
|
@@ -6,7 +6,6 @@ var context_js_1 = require("../src/context.js");
|
|
|
6
6
|
var RepositoryImplementation_js_1 = require("../src/remult3/RepositoryImplementation.js");
|
|
7
7
|
var Fields_js_1 = require("../src/remult3/Fields.js");
|
|
8
8
|
var entity_js_1 = require("../src/remult3/entity.js");
|
|
9
|
-
var remult_static_js_1 = require("../src/remult-static.js");
|
|
10
9
|
var initDataProviderOrJson_js_1 = require("../server/initDataProviderOrJson.js");
|
|
11
10
|
var DataProviderLiveQueryStorage = /** @class */ (function () {
|
|
12
11
|
function DataProviderLiveQueryStorage(dataProvider) {
|
|
@@ -262,4 +261,3 @@ var LiveQueryStorageEntity = /** @class */ (function (_super) {
|
|
|
262
261
|
return LiveQueryStorageEntity;
|
|
263
262
|
}(RepositoryImplementation_js_1.EntityBase));
|
|
264
263
|
exports.LiveQueryStorageEntity = LiveQueryStorageEntity;
|
|
265
|
-
remult_static_js_1.remultStatic.allEntities.splice(remult_static_js_1.remultStatic.allEntities.indexOf(LiveQueryStorageEntity), 1);
|
package/package.json
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import type { FieldMetadata } from '../src/column-interfaces.js';
|
|
2
|
-
import type { Remult } from '../src/context.js';
|
|
3
2
|
import type { SqlDatabase } from '../src/data-providers/sql-database.js';
|
|
4
3
|
import type { EntityMetadata } from '../src/remult3/remult3.js';
|
|
5
4
|
export declare function postgresColumnSyntax(x: FieldMetadata, dbName: string): string;
|
|
6
|
-
export declare function verifyStructureOfAllEntities(db: SqlDatabase, remult: Remult): Promise<void>;
|
|
7
5
|
export declare class PostgresSchemaBuilder {
|
|
8
6
|
private pool;
|
|
9
7
|
private removeQuotes;
|
|
10
8
|
private whereTableAndSchema;
|
|
11
9
|
private schemaAndName;
|
|
12
10
|
private schemaOnly;
|
|
13
|
-
verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
|
|
14
11
|
ensureSchema(entities: EntityMetadata[]): Promise<void>;
|
|
15
12
|
createIfNotExist(entity: EntityMetadata): Promise<void>;
|
|
16
|
-
addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: (e: T) => FieldMetadata): Promise<void>;
|
|
17
13
|
verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
|
|
18
14
|
specifiedSchema: string;
|
|
19
15
|
constructor(pool: SqlDatabase, schema?: string);
|
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PostgresSchemaBuilder = void 0;
|
|
4
4
|
exports.postgresColumnSyntax = postgresColumnSyntax;
|
|
5
|
-
exports.verifyStructureOfAllEntities = verifyStructureOfAllEntities;
|
|
6
5
|
var tslib_1 = require("tslib");
|
|
7
6
|
var filter_consumer_bridge_to_sql_request_js_1 = require("../src/filter/filter-consumer-bridge-to-sql-request.js");
|
|
8
|
-
var remult_proxy_js_1 = require("../src/remult-proxy.js");
|
|
9
|
-
var remult_static_js_1 = require("../src/remult-static.js");
|
|
10
7
|
var RepositoryImplementation_js_1 = require("../src/remult3/RepositoryImplementation.js");
|
|
11
8
|
var valueConverters_js_1 = require("../src/valueConverters.js");
|
|
12
9
|
function postgresColumnSyntax(x, dbName) {
|
|
@@ -41,16 +38,6 @@ function postgresColumnSyntax(x, dbName) {
|
|
|
41
38
|
result += ' varchar' + (x.allowNull ? '' : " default '' not null");
|
|
42
39
|
return result;
|
|
43
40
|
}
|
|
44
|
-
function verifyStructureOfAllEntities(db, remult) {
|
|
45
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
46
|
-
return tslib_1.__generator(this, function (_a) {
|
|
47
|
-
switch (_a.label) {
|
|
48
|
-
case 0: return [4 /*yield*/, new PostgresSchemaBuilder(db).verifyStructureOfAllEntities(remult)];
|
|
49
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
41
|
var PostgresSchemaBuilder = /** @class */ (function () {
|
|
55
42
|
function PostgresSchemaBuilder(pool, schema) {
|
|
56
43
|
this.pool = pool;
|
|
@@ -106,61 +93,10 @@ var PostgresSchemaBuilder = /** @class */ (function () {
|
|
|
106
93
|
// Should default to `public`
|
|
107
94
|
return 'public';
|
|
108
95
|
};
|
|
109
|
-
PostgresSchemaBuilder.prototype.verifyStructureOfAllEntities = function (remult) {
|
|
110
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
111
|
-
var completed, entities, _a, _b, entityClass, entity, e, e_1_1;
|
|
112
|
-
var e_1, _c;
|
|
113
|
-
return tslib_1.__generator(this, function (_d) {
|
|
114
|
-
switch (_d.label) {
|
|
115
|
-
case 0:
|
|
116
|
-
if (!remult) {
|
|
117
|
-
remult = remult_proxy_js_1.remult;
|
|
118
|
-
}
|
|
119
|
-
completed = new Set();
|
|
120
|
-
entities = [];
|
|
121
|
-
_d.label = 1;
|
|
122
|
-
case 1:
|
|
123
|
-
_d.trys.push([1, 6, 7, 8]);
|
|
124
|
-
_a = tslib_1.__values(tslib_1.__spreadArray([], tslib_1.__read(remult_static_js_1.remultStatic.allEntities), false).reverse()), _b = _a.next();
|
|
125
|
-
_d.label = 2;
|
|
126
|
-
case 2:
|
|
127
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
128
|
-
entityClass = _b.value;
|
|
129
|
-
entity = remult.repo(entityClass).metadata;
|
|
130
|
-
return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity, this.pool.wrapIdentifier)];
|
|
131
|
-
case 3:
|
|
132
|
-
e = _d.sent();
|
|
133
|
-
if (completed.has(e.$entityName))
|
|
134
|
-
return [3 /*break*/, 4];
|
|
135
|
-
completed.add(e.$entityName);
|
|
136
|
-
entities.push(entity);
|
|
137
|
-
_d.label = 4;
|
|
138
|
-
case 4:
|
|
139
|
-
_b = _a.next();
|
|
140
|
-
return [3 /*break*/, 2];
|
|
141
|
-
case 5: return [3 /*break*/, 8];
|
|
142
|
-
case 6:
|
|
143
|
-
e_1_1 = _d.sent();
|
|
144
|
-
e_1 = { error: e_1_1 };
|
|
145
|
-
return [3 /*break*/, 8];
|
|
146
|
-
case 7:
|
|
147
|
-
try {
|
|
148
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
149
|
-
}
|
|
150
|
-
finally { if (e_1) throw e_1.error; }
|
|
151
|
-
return [7 /*endfinally*/];
|
|
152
|
-
case 8: return [4 /*yield*/, this.ensureSchema(entities)];
|
|
153
|
-
case 9:
|
|
154
|
-
_d.sent();
|
|
155
|
-
return [2 /*return*/];
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
};
|
|
160
96
|
PostgresSchemaBuilder.prototype.ensureSchema = function (entities) {
|
|
161
97
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
162
|
-
var entities_1, entities_1_1, entity, e, err_1,
|
|
163
|
-
var
|
|
98
|
+
var entities_1, entities_1_1, entity, e, err_1, e_1_1;
|
|
99
|
+
var e_1, _a;
|
|
164
100
|
return tslib_1.__generator(this, function (_b) {
|
|
165
101
|
switch (_b.label) {
|
|
166
102
|
case 0:
|
|
@@ -194,14 +130,14 @@ var PostgresSchemaBuilder = /** @class */ (function () {
|
|
|
194
130
|
return [3 /*break*/, 1];
|
|
195
131
|
case 9: return [3 /*break*/, 12];
|
|
196
132
|
case 10:
|
|
197
|
-
|
|
198
|
-
|
|
133
|
+
e_1_1 = _b.sent();
|
|
134
|
+
e_1 = { error: e_1_1 };
|
|
199
135
|
return [3 /*break*/, 12];
|
|
200
136
|
case 11:
|
|
201
137
|
try {
|
|
202
138
|
if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
|
|
203
139
|
}
|
|
204
|
-
finally { if (
|
|
140
|
+
finally { if (e_1) throw e_1.error; }
|
|
205
141
|
return [7 /*endfinally*/];
|
|
206
142
|
case 12: return [2 /*return*/];
|
|
207
143
|
}
|
|
@@ -267,7 +203,7 @@ var PostgresSchemaBuilder = /** @class */ (function () {
|
|
|
267
203
|
PostgresSchemaBuilder.prototype.createTableScript = function (entity) {
|
|
268
204
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
269
205
|
var result, e, _a, _b, x, sql;
|
|
270
|
-
var
|
|
206
|
+
var e_2, _c;
|
|
271
207
|
return tslib_1.__generator(this, function (_d) {
|
|
272
208
|
switch (_d.label) {
|
|
273
209
|
case 0:
|
|
@@ -290,12 +226,12 @@ var PostgresSchemaBuilder = /** @class */ (function () {
|
|
|
290
226
|
}
|
|
291
227
|
}
|
|
292
228
|
}
|
|
293
|
-
catch (
|
|
229
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
294
230
|
finally {
|
|
295
231
|
try {
|
|
296
232
|
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
297
233
|
}
|
|
298
|
-
finally { if (
|
|
234
|
+
finally { if (e_2) throw e_2.error; }
|
|
299
235
|
}
|
|
300
236
|
result += ",\r\n primary key (".concat(entity.idMetadata.fields
|
|
301
237
|
.map(function (f) { return e.$dbNameOf(f); })
|
|
@@ -306,49 +242,10 @@ var PostgresSchemaBuilder = /** @class */ (function () {
|
|
|
306
242
|
});
|
|
307
243
|
});
|
|
308
244
|
};
|
|
309
|
-
PostgresSchemaBuilder.prototype.addColumnIfNotExist = function (entity, c) {
|
|
310
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
311
|
-
var e, cmd, colName, sql, err_2;
|
|
312
|
-
return tslib_1.__generator(this, function (_a) {
|
|
313
|
-
switch (_a.label) {
|
|
314
|
-
case 0: return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity, this.pool.wrapIdentifier)];
|
|
315
|
-
case 1:
|
|
316
|
-
e = _a.sent();
|
|
317
|
-
if ((0, filter_consumer_bridge_to_sql_request_js_1.shouldNotCreateField)(c(entity), e))
|
|
318
|
-
return [2 /*return*/];
|
|
319
|
-
_a.label = 2;
|
|
320
|
-
case 2:
|
|
321
|
-
_a.trys.push([2, 7, , 8]);
|
|
322
|
-
cmd = this.pool.createCommand();
|
|
323
|
-
colName = e.$dbNameOf(c(entity));
|
|
324
|
-
return [4 /*yield*/, cmd.execute("SELECT 1 FROM information_schema.columns WHERE " +
|
|
325
|
-
"".concat(this.whereTableAndSchema(cmd, e), " ") +
|
|
326
|
-
"AND column_name=".concat(cmd.param(colName.toLocaleLowerCase())))];
|
|
327
|
-
case 3:
|
|
328
|
-
if (!((_a.sent()).rows.length == 0)) return [3 /*break*/, 6];
|
|
329
|
-
return [4 /*yield*/, this.getAddColumnScript(entity, c(entity))];
|
|
330
|
-
case 4:
|
|
331
|
-
sql = _a.sent();
|
|
332
|
-
if (PostgresSchemaBuilder.logToConsole)
|
|
333
|
-
console.info(sql);
|
|
334
|
-
return [4 /*yield*/, this.pool.execute(sql)];
|
|
335
|
-
case 5:
|
|
336
|
-
_a.sent();
|
|
337
|
-
_a.label = 6;
|
|
338
|
-
case 6: return [3 /*break*/, 8];
|
|
339
|
-
case 7:
|
|
340
|
-
err_2 = _a.sent();
|
|
341
|
-
console.error(err_2);
|
|
342
|
-
return [3 /*break*/, 8];
|
|
343
|
-
case 8: return [2 /*return*/];
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
});
|
|
347
|
-
};
|
|
348
245
|
PostgresSchemaBuilder.prototype.verifyAllColumns = function (entity) {
|
|
349
246
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
350
|
-
var cmd, e, cols, _a, _b, col, colName, sql,
|
|
351
|
-
var
|
|
247
|
+
var cmd, e, cols, _a, _b, col, colName, sql, e_3_1, err_2;
|
|
248
|
+
var e_3, _c;
|
|
352
249
|
return tslib_1.__generator(this, function (_d) {
|
|
353
250
|
switch (_d.label) {
|
|
354
251
|
case 0:
|
|
@@ -387,19 +284,19 @@ var PostgresSchemaBuilder = /** @class */ (function () {
|
|
|
387
284
|
return [3 /*break*/, 4];
|
|
388
285
|
case 7: return [3 /*break*/, 10];
|
|
389
286
|
case 8:
|
|
390
|
-
|
|
391
|
-
|
|
287
|
+
e_3_1 = _d.sent();
|
|
288
|
+
e_3 = { error: e_3_1 };
|
|
392
289
|
return [3 /*break*/, 10];
|
|
393
290
|
case 9:
|
|
394
291
|
try {
|
|
395
292
|
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
396
293
|
}
|
|
397
|
-
finally { if (
|
|
294
|
+
finally { if (e_3) throw e_3.error; }
|
|
398
295
|
return [7 /*endfinally*/];
|
|
399
296
|
case 10: return [3 /*break*/, 12];
|
|
400
297
|
case 11:
|
|
401
|
-
|
|
402
|
-
console.error(
|
|
298
|
+
err_2 = _d.sent();
|
|
299
|
+
console.error(err_2);
|
|
403
300
|
return [3 /*break*/, 12];
|
|
404
301
|
case 12: return [2 /*return*/];
|
|
405
302
|
}
|
package/remult-duckdb.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import { type FieldMetadata, type EntityMetadata } from './index.js';
|
|
|
4
4
|
export declare class DuckDBDataProvider extends SqliteCoreDataProvider {
|
|
5
5
|
constructor(db: Database);
|
|
6
6
|
wrapIdentifier(name: string): string;
|
|
7
|
-
getCreateTableSql(entity: EntityMetadata<any>): Promise<string>;
|
|
7
|
+
getCreateTableSql(entity: EntityMetadata<any>): Promise<string[]>;
|
|
8
8
|
addColumnSqlSyntax(x: FieldMetadata, dbName: string, isAlterColumn: boolean): string;
|
|
9
9
|
}
|
package/remult-duckdb.js
CHANGED
|
@@ -62,7 +62,7 @@ var DuckDBDataProvider = /** @class */ (function (_super) {
|
|
|
62
62
|
.join(','), ")");
|
|
63
63
|
sql +=
|
|
64
64
|
'create table if not exists ' + e.$entityName + ' (' + result + '\r\n)';
|
|
65
|
-
return [2 /*return*/, sql];
|
|
65
|
+
return [2 /*return*/, [sql]];
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
});
|
|
@@ -70,8 +70,8 @@ var DuckDBDataProvider = /** @class */ (function (_super) {
|
|
|
70
70
|
DuckDBDataProvider.prototype.addColumnSqlSyntax = function (x, dbName, isAlterColumn) {
|
|
71
71
|
var result = dbName;
|
|
72
72
|
var allowNull = x.allowNull;
|
|
73
|
-
if (allowNull && isAlterColumn) {
|
|
74
|
-
allowNull =
|
|
73
|
+
if (!allowNull && isAlterColumn) {
|
|
74
|
+
allowNull = true;
|
|
75
75
|
console.log('DuckDB does not support altering columns to allow null on existing tables');
|
|
76
76
|
}
|
|
77
77
|
if (x.valueType == Number) {
|
|
@@ -81,7 +81,7 @@ var DuckDBDataProvider = /** @class */ (function (_super) {
|
|
|
81
81
|
result +=
|
|
82
82
|
' ' +
|
|
83
83
|
x.valueConverter.fieldTypeInDb +
|
|
84
|
-
(
|
|
84
|
+
(allowNull ? '' : ' default 0 not null');
|
|
85
85
|
}
|
|
86
86
|
else if (x.valueType == Date) {
|
|
87
87
|
if (!x.valueConverter.fieldTypeInDb)
|
|
@@ -93,20 +93,15 @@ var DuckDBDataProvider = /** @class */ (function (_super) {
|
|
|
93
93
|
result += ' ' + x.valueConverter.fieldTypeInDb;
|
|
94
94
|
}
|
|
95
95
|
else if (x.valueType == Boolean)
|
|
96
|
-
result +=
|
|
97
|
-
' boolean' +
|
|
98
|
-
(x.allowNull || isAlterColumn ? '' : ' default false not null');
|
|
96
|
+
result += ' boolean' + (allowNull ? '' : ' default false not null');
|
|
99
97
|
else if (x.valueConverter.fieldTypeInDb) {
|
|
100
98
|
result += ' ' + x.valueConverter.fieldTypeInDb;
|
|
101
|
-
if (!
|
|
102
|
-
x.valueConverter.fieldTypeInDb == 'integer') {
|
|
99
|
+
if (!allowNull && x.valueConverter.fieldTypeInDb == 'integer') {
|
|
103
100
|
result += ' default 0 not null';
|
|
104
101
|
}
|
|
105
102
|
}
|
|
106
103
|
else
|
|
107
|
-
result +=
|
|
108
|
-
' varchar' +
|
|
109
|
-
(x.allowNull || isAlterColumn ? '' : " default '' not null");
|
|
104
|
+
result += ' varchar' + (allowNull ? '' : " default '' not null");
|
|
110
105
|
return result;
|
|
111
106
|
};
|
|
112
107
|
return DuckDBDataProvider;
|
package/remult-knex/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
|
-
import type { Remult } from '../src/context.js';
|
|
3
2
|
import { type EntityDbNamesBase } from '../src/filter/filter-consumer-bridge-to-sql-request.js';
|
|
4
3
|
import type { FieldMetadata } from '../src/column-interfaces.js';
|
|
5
4
|
import type { DataProvider, EntityDataProvider } from '../src/data-interfaces.js';
|
|
@@ -26,7 +25,6 @@ export declare class KnexDataProvider implements DataProvider, HasWrapIdentifier
|
|
|
26
25
|
export type CustomKnexFilterBuilderFunction = () => Promise<(builder: Knex.QueryBuilder) => void>;
|
|
27
26
|
export declare class KnexSchemaBuilder {
|
|
28
27
|
private knex;
|
|
29
|
-
verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
|
|
30
28
|
ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
|
|
31
29
|
createIfNotExist(entity: EntityMetadata): Promise<void>;
|
|
32
30
|
createTableKnexCommand(entity: EntityMetadata, e: EntityDbNamesBase): Knex.SchemaBuilder;
|
package/remult-knex/index.js
CHANGED
|
@@ -12,7 +12,6 @@ var RepositoryImplementation_js_1 = require("../src/remult3/RepositoryImplementa
|
|
|
12
12
|
var sort_js_1 = require("../src/sort.js");
|
|
13
13
|
var valueConverters_js_1 = require("../src/valueConverters.js");
|
|
14
14
|
var repository_internals_js_1 = require("../src/remult3/repository-internals.js");
|
|
15
|
-
var remult_static_js_1 = require("../src/remult-static.js");
|
|
16
15
|
var sql_database_js_1 = require("../src/data-providers/sql-database.js");
|
|
17
16
|
var KnexDataProvider = /** @class */ (function () {
|
|
18
17
|
function KnexDataProvider(knex) {
|
|
@@ -784,23 +783,6 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
784
783
|
this.knex = knex;
|
|
785
784
|
this.additionalWhere = '';
|
|
786
785
|
}
|
|
787
|
-
KnexSchemaBuilder.prototype.verifyStructureOfAllEntities = function (remult) {
|
|
788
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
789
|
-
var entities;
|
|
790
|
-
return tslib_1.__generator(this, function (_a) {
|
|
791
|
-
switch (_a.label) {
|
|
792
|
-
case 0:
|
|
793
|
-
if (!remult)
|
|
794
|
-
remult = remult_proxy_js_1.remult;
|
|
795
|
-
entities = remult_static_js_1.remultStatic.allEntities.map(function (x) { return remult.repo(x).metadata; });
|
|
796
|
-
return [4 /*yield*/, this.ensureSchema(entities)];
|
|
797
|
-
case 1:
|
|
798
|
-
_a.sent();
|
|
799
|
-
return [2 /*return*/];
|
|
800
|
-
}
|
|
801
|
-
});
|
|
802
|
-
});
|
|
803
|
-
};
|
|
804
786
|
KnexSchemaBuilder.prototype.ensureSchema = function (entities) {
|
|
805
787
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
806
788
|
var entities_1, entities_1_1, entity, e, err_2, e_8_1;
|
package/remult-mongo.d.ts
CHANGED
|
@@ -14,7 +14,8 @@ export declare class MongoDataProvider implements DataProvider {
|
|
|
14
14
|
db: Db;
|
|
15
15
|
session: ClientSession | undefined;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
ensureSchema(entities: EntityMetadata[]): Promise<void>;
|
|
18
|
+
getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
|
|
18
19
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
19
20
|
static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<{
|
|
20
21
|
$and: any[];
|