remult 0.22.2 → 0.22.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/esm/graphql.js +27 -27
- package/esm/postgres/schema-builder.js +4 -4
- package/esm/remult-knex/index.js +2 -2
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
- package/esm/src/id-entity.d.ts +4 -0
- package/esm/src/id-entity.js +8 -0
- package/esm/src/remult3/RepositoryImplementation.js +7 -5
- package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
- package/package.json +1 -1
- package/postgres/postgresColumnSyntax.d.ts +2 -0
- package/postgres/postgresColumnSyntax.js +34 -0
- package/remult-knex/index.js +2 -2
- package/remult-middleware.d.ts +2 -0
- package/remult-middleware.js +70 -0
- package/server/register-actions-on-server.d.ts +3 -0
- package/server/register-actions-on-server.js +50 -0
- package/server/register-entities-on-server.d.ts +3 -0
- package/server/register-entities-on-server.js +19 -0
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
- package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
- package/src/backend-tests/my-test.backend-spec.js +217 -0
- package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
- package/src/backend-tests/test-http-server.backend-spec.js +342 -0
- package/src/id-entity.d.ts +4 -0
- package/src/id-entity.js +17 -0
- package/src/remult3/RepositoryImplementation.js +15 -13
- package/src/shared-tests/db-tests.db-tests.js +64 -0
- package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
- package/valueConverters.js +168 -0
- package/esm/angular/interfaces/index.d.ts +0 -1
- package/esm/angular/interfaces/index.js +0 -1
- package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
- package/esm/angular/interfaces/src/column-collection.js +0 -341
- package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
- package/esm/angular/interfaces/src/data-area-settings.js +0 -35
- package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
- package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
- package/esm/angular/interfaces/src/dataList.d.ts +0 -13
- package/esm/angular/interfaces/src/dataList.js +0 -42
- package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
- package/esm/angular/interfaces/src/filter-helper.js +0 -59
- package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
- package/esm/angular/interfaces/src/grid-settings.js +0 -387
- package/esm/angular/interfaces/src/public_api.d.ts +0 -4
- package/esm/angular/interfaces/src/public_api.js +0 -4
- package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
- package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
- package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
- package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
- package/esm/core/SseSubscriptionServer.d.ts +0 -33
- package/esm/core/SseSubscriptionServer.js +0 -107
- package/esm/core/assign.d.ts +0 -1
- package/esm/core/assign.js +0 -5
- package/esm/core/classType.d.ts +0 -3
- package/esm/core/classType.js +0 -1
- package/esm/core/index.d.ts +0 -27
- package/esm/core/index.js +0 -25
- package/esm/core/inputTypes.d.ts +0 -9
- package/esm/core/inputTypes.js +0 -9
- package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
- package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
- package/esm/core/postgres/index.d.ts +0 -2
- package/esm/core/postgres/index.js +0 -2
- package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
- package/esm/core/postgres/postgres-data-provider.js +0 -120
- package/esm/core/postgres/schema-builder.d.ts +0 -17
- package/esm/core/postgres/schema-builder.js +0 -153
- package/esm/core/remult-fresh.d.ts +0 -17
- package/esm/core/remult-fresh.js +0 -29
- package/esm/core/remult-knex/index.d.ts +0 -30
- package/esm/core/remult-knex/index.js +0 -446
- package/esm/core/remult-mongo.d.ts +0 -24
- package/esm/core/remult-mongo.js +0 -254
- package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
- package/esm/core/server/JsonEntityFileStorage.js +0 -25
- package/esm/core/server/core.d.ts +0 -4
- package/esm/core/server/core.js +0 -4
- package/esm/core/server/expressBridge.d.ts +0 -182
- package/esm/core/server/expressBridge.js +0 -938
- package/esm/core/server/index.d.ts +0 -6
- package/esm/core/server/index.js +0 -9
- package/esm/core/server/initAsyncHooks.d.ts +0 -1
- package/esm/core/server/initAsyncHooks.js +0 -9
- package/esm/core/server/initDataProvider.d.ts +0 -2
- package/esm/core/server/initDataProvider.js +0 -14
- package/esm/core/src/__EntityValueProvider.d.ts +0 -11
- package/esm/core/src/__EntityValueProvider.js +0 -1
- package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
- package/esm/core/src/__RowsOfDataForTesting.js +0 -1
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
- package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
- package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
- package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
- package/esm/core/src/buildRestDataProvider.d.ts +0 -31
- package/esm/core/src/buildRestDataProvider.js +0 -113
- package/esm/core/src/column-interfaces.d.ts +0 -154
- package/esm/core/src/column-interfaces.js +0 -7
- package/esm/core/src/column.d.ts +0 -58
- package/esm/core/src/column.js +0 -174
- package/esm/core/src/context.d.ts +0 -134
- package/esm/core/src/context.js +0 -286
- package/esm/core/src/data-api.d.ts +0 -39
- package/esm/core/src/data-api.js +0 -279
- package/esm/core/src/data-interfaces.d.ts +0 -41
- package/esm/core/src/data-interfaces.js +0 -12
- package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
- package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
- package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
- package/esm/core/src/data-providers/in-memory-database.js +0 -14
- package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
- package/esm/core/src/data-providers/json-data-provider.js +0 -55
- package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
- package/esm/core/src/data-providers/rest-data-provider.js +0 -256
- package/esm/core/src/data-providers/sql-database.d.ts +0 -33
- package/esm/core/src/data-providers/sql-database.js +0 -384
- package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
- package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
- package/esm/core/src/entity.d.ts +0 -91
- package/esm/core/src/entity.js +0 -1
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
- package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
- package/esm/core/src/filter/filter-interfaces.js +0 -477
- package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
- package/esm/core/src/live-query/LiveQueryClient.js +0 -188
- package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
- package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
- package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
- package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
- package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
- package/esm/core/src/live-query/SubscriptionServer.js +0 -111
- package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
- package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
- package/esm/core/src/remult-proxy.d.ts +0 -35
- package/esm/core/src/remult-proxy.js +0 -113
- package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
- package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
- package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
- package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
- package/esm/core/src/remult3/index.d.ts +0 -2
- package/esm/core/src/remult3/index.js +0 -2
- package/esm/core/src/remult3/remult3.d.ts +0 -395
- package/esm/core/src/remult3/remult3.js +0 -2
- package/esm/core/src/server-action.d.ts +0 -81
- package/esm/core/src/server-action.js +0 -394
- package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
- package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
- package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
- package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
- package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
- package/esm/core/src/shared-tests/deleteAll.js +0 -4
- package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
- package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
- package/esm/core/src/shared-tests/index.d.ts +0 -4
- package/esm/core/src/shared-tests/index.js +0 -4
- package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
- package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
- package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
- package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
- package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
- package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
- package/esm/core/src/sort.d.ts +0 -16
- package/esm/core/src/sort.js +0 -103
- package/esm/core/src/sql-command.d.ts +0 -19
- package/esm/core/src/sql-command.js +0 -1
- package/esm/core/src/test.d.ts +0 -3
- package/esm/core/src/test.js +0 -12
- package/esm/core/src/tests/Done.d.ts +0 -5
- package/esm/core/src/tests/Done.js +0 -9
- package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
- package/esm/core/src/tests/RowProvider.spec.js +0 -631
- package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
- package/esm/core/src/tests/TestDataApiResponse.js +0 -22
- package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
- package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
- package/esm/core/src/tests/c.d.ts +0 -8
- package/esm/core/src/tests/c.js +0 -13
- package/esm/core/src/tests/createData.d.ts +0 -7
- package/esm/core/src/tests/createData.js +0 -22
- package/esm/core/src/tests/d.d.ts +0 -6
- package/esm/core/src/tests/d.js +0 -11
- package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
- package/esm/core/src/tests/dWithPrefilter.js +0 -18
- package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
- package/esm/core/src/tests/entityForCustomFilter.js +0 -33
- package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
- package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
- package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
- package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
- package/esm/core/src/tests/h.d.ts +0 -6
- package/esm/core/src/tests/h.js +0 -24
- package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
- package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
- package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
- package/esm/core/src/tests/remult-3-entities.js +0 -39
- package/esm/core/src/tests/tasks.d.ts +0 -6
- package/esm/core/src/tests/tasks.js +0 -10
- package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
- package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
- package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
- package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
- package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
- package/esm/core/src/tests/test-default-value.spec.js +0 -33
- package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
- package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
- package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
- package/esm/core/src/tests/test-exceptions.spec.js +0 -375
- package/esm/core/src/tests/test-json.spec.d.ts +0 -1
- package/esm/core/src/tests/test-json.spec.js +0 -115
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
- package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
- package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
- package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
- package/esm/core/src/tests/test-object-column.spec.js +0 -189
- package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
- package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
- package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
- package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
- package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
- package/esm/core/src/tests/test-server-controller.spec.js +0 -489
- package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
- package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
- package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
- package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
- package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
- package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
- package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
- package/esm/core/src/tests/test-sql.spec.js +0 -170
- package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
- package/esm/core/src/tests/test-subscribe.spec.js +0 -135
- package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
- package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
- package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
- package/esm/core/src/tests/test-where-api.spec.js +0 -434
- package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
- package/esm/core/src/tests/testHelper.spec.js +0 -226
- package/esm/core/src/tests/testModel/models.d.ts +0 -16
- package/esm/core/src/tests/testModel/models.js +0 -25
- package/esm/core/src/validators.d.ts +0 -14
- package/esm/core/src/validators.js +0 -33
- package/esm/core/src/valueConverters.js +0 -197
- package/esm/core/urlBuilder.d.ts +0 -6
- package/esm/core/urlBuilder.js +0 -20
- package/esm/test-servers/shared/Task.d.ts +0 -9
- package/esm/test-servers/shared/Task.js +0 -32
- package/esm/test.d.ts +0 -5
- package/esm/test.js +0 -6
package/esm/core/remult-mongo.js
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { CompoundIdField, Filter } from '.';
|
|
2
|
-
import { dbNamesOf } from './src/filter/filter-consumer-bridge-to-sql-request';
|
|
3
|
-
import { getRepository } from './src/remult3';
|
|
4
|
-
import { remult as remultContext } from './src/remult-proxy';
|
|
5
|
-
export class MongoDataProvider {
|
|
6
|
-
db;
|
|
7
|
-
client;
|
|
8
|
-
constructor(db, client, options) {
|
|
9
|
-
this.db = db;
|
|
10
|
-
this.client = client;
|
|
11
|
-
this.session = options?.session;
|
|
12
|
-
this.disableTransactions = options?.disableTransactions;
|
|
13
|
-
}
|
|
14
|
-
session;
|
|
15
|
-
disableTransactions = false;
|
|
16
|
-
static getDb(remult) {
|
|
17
|
-
const r = (remult || remultContext).dataProvider;
|
|
18
|
-
if (!r.db)
|
|
19
|
-
throw "the data provider is not a MongoDataProvider";
|
|
20
|
-
return { db: r.db, session: r.session };
|
|
21
|
-
}
|
|
22
|
-
getEntityDataProvider(entity) {
|
|
23
|
-
return new MongoEntityDataProvider(this.db, entity, this.session);
|
|
24
|
-
}
|
|
25
|
-
async transaction(action) {
|
|
26
|
-
let session = await this.client.startSession();
|
|
27
|
-
session.startTransaction();
|
|
28
|
-
const db = this.client.db(this.db.databaseName);
|
|
29
|
-
try {
|
|
30
|
-
await action(new MongoDataProvider(db, undefined, { session }));
|
|
31
|
-
await session.commitTransaction();
|
|
32
|
-
}
|
|
33
|
-
catch (err) {
|
|
34
|
-
await session.abortTransaction();
|
|
35
|
-
throw err;
|
|
36
|
-
}
|
|
37
|
-
finally {
|
|
38
|
-
await session.endSession();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
static async filterToRaw(entity, condition) {
|
|
42
|
-
const repo = getRepository(entity);
|
|
43
|
-
var b = new FilterConsumerBridgeToMongo(await dbNamesOf(repo.metadata));
|
|
44
|
-
b._addWhere = false;
|
|
45
|
-
await (await (repo.translateWhereToFilter(condition))).__applyToConsumer(b);
|
|
46
|
-
let r = await b.resolveWhere();
|
|
47
|
-
return r;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
const NULL = { $null: "$null" };
|
|
51
|
-
function isNull(x) {
|
|
52
|
-
return x?.$null === NULL.$null;
|
|
53
|
-
}
|
|
54
|
-
class MongoEntityDataProvider {
|
|
55
|
-
db;
|
|
56
|
-
entity;
|
|
57
|
-
session;
|
|
58
|
-
constructor(db, entity, session) {
|
|
59
|
-
this.db = db;
|
|
60
|
-
this.entity = entity;
|
|
61
|
-
this.session = session;
|
|
62
|
-
}
|
|
63
|
-
translateFromJson(row, nameProvider) {
|
|
64
|
-
let result = {};
|
|
65
|
-
for (const col of this.entity.fields) {
|
|
66
|
-
let val = row[nameProvider.$dbNameOf(col)];
|
|
67
|
-
if (isNull(val))
|
|
68
|
-
val = null;
|
|
69
|
-
result[col.key] = col.valueConverter.fromDb(val);
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
72
|
-
}
|
|
73
|
-
translateToJson(row, nameProvider) {
|
|
74
|
-
let result = {};
|
|
75
|
-
for (const col of this.entity.fields) {
|
|
76
|
-
let val = col.valueConverter.toDb(row[col.key]);
|
|
77
|
-
if (val === null)
|
|
78
|
-
val = NULL;
|
|
79
|
-
result[nameProvider.$dbNameOf(col)] = val;
|
|
80
|
-
}
|
|
81
|
-
return result;
|
|
82
|
-
}
|
|
83
|
-
async count(where) {
|
|
84
|
-
const { collection, e } = await this.collection();
|
|
85
|
-
let x = new FilterConsumerBridgeToMongo(e);
|
|
86
|
-
where.__applyToConsumer(x);
|
|
87
|
-
let w = await x.resolveWhere();
|
|
88
|
-
return await collection.countDocuments(w, { session: this.session });
|
|
89
|
-
}
|
|
90
|
-
async find(options) {
|
|
91
|
-
let { collection, e } = await this.collection();
|
|
92
|
-
let x = new FilterConsumerBridgeToMongo(e);
|
|
93
|
-
if (options?.where)
|
|
94
|
-
options.where.__applyToConsumer(x);
|
|
95
|
-
let where = await x.resolveWhere();
|
|
96
|
-
let op = {
|
|
97
|
-
session: this.session
|
|
98
|
-
};
|
|
99
|
-
if (options.limit) {
|
|
100
|
-
op.limit = options.limit;
|
|
101
|
-
if (options.page) {
|
|
102
|
-
op.skip = (options.page - 1) * options.limit;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (options.orderBy) {
|
|
106
|
-
op.sort = {};
|
|
107
|
-
for (const s of options.orderBy.Segments) {
|
|
108
|
-
op.sort[e.$dbNameOf(s.field)] = s.isDescending ? -1 : 1;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return await Promise.all(await collection.find(where, op).map(x => this.translateFromJson(x, e)).toArray());
|
|
112
|
-
}
|
|
113
|
-
async update(id, data) {
|
|
114
|
-
let { collection, e } = await this.collection();
|
|
115
|
-
let f = new FilterConsumerBridgeToMongo(e);
|
|
116
|
-
Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
|
|
117
|
-
let resultFilter = this.entity.idMetadata.getIdFilter(id);
|
|
118
|
-
if (data.id != undefined)
|
|
119
|
-
resultFilter = this.entity.idMetadata.getIdFilter(data.id);
|
|
120
|
-
for (const x of this.entity.fields) {
|
|
121
|
-
if (x instanceof CompoundIdField) {
|
|
122
|
-
resultFilter = x.resultIdFilter(id, data);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
let newR = {};
|
|
126
|
-
let keys = Object.keys(data);
|
|
127
|
-
for (const f of this.entity.fields) {
|
|
128
|
-
if (!f.dbReadOnly && !f.isServerExpression) {
|
|
129
|
-
if (keys.includes(f.key)) {
|
|
130
|
-
newR[f.key] = f.valueConverter.toJson(data[f.key]);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
let r = await collection.updateOne(await f.resolveWhere(), {
|
|
135
|
-
$set: newR
|
|
136
|
-
}, { session: this.session });
|
|
137
|
-
return this.find({ where: Filter.fromEntityFilter(this.entity, resultFilter) }).then(y => y[0]);
|
|
138
|
-
}
|
|
139
|
-
async delete(id) {
|
|
140
|
-
const { e, collection } = await this.collection();
|
|
141
|
-
let f = new FilterConsumerBridgeToMongo(e);
|
|
142
|
-
Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
|
|
143
|
-
collection.deleteOne(await f.resolveWhere(), { session: this.session });
|
|
144
|
-
}
|
|
145
|
-
async insert(data) {
|
|
146
|
-
let { collection, e } = await this.collection();
|
|
147
|
-
let r = await collection.insertOne(await this.translateToJson(data, e), { session: this.session });
|
|
148
|
-
return await this.translateFromJson(await collection.findOne({ _id: r.insertedId }, { session: this.session }), e);
|
|
149
|
-
}
|
|
150
|
-
async collection() {
|
|
151
|
-
const e = await dbNamesOf(this.entity);
|
|
152
|
-
const collection = this.db.collection(e.$entityName);
|
|
153
|
-
return { e, collection };
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
class FilterConsumerBridgeToMongo {
|
|
157
|
-
nameProvider;
|
|
158
|
-
_addWhere = true;
|
|
159
|
-
promises = [];
|
|
160
|
-
result = [];
|
|
161
|
-
async resolveWhere() {
|
|
162
|
-
while (this.promises.length > 0) {
|
|
163
|
-
let p = this.promises;
|
|
164
|
-
this.promises = [];
|
|
165
|
-
for (const pr of p) {
|
|
166
|
-
await pr;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
if (this.result.length > 0)
|
|
170
|
-
return { $and: this.result.map(x => x()) };
|
|
171
|
-
else
|
|
172
|
-
return {};
|
|
173
|
-
}
|
|
174
|
-
constructor(nameProvider) {
|
|
175
|
-
this.nameProvider = nameProvider;
|
|
176
|
-
}
|
|
177
|
-
custom(key, customItem) {
|
|
178
|
-
throw new Error("Custom filter should be translated before it gets here");
|
|
179
|
-
}
|
|
180
|
-
or(orElements) {
|
|
181
|
-
this.promises.push((async () => {
|
|
182
|
-
let result = [];
|
|
183
|
-
for (const element of orElements) {
|
|
184
|
-
let f = new FilterConsumerBridgeToMongo(this.nameProvider);
|
|
185
|
-
f._addWhere = false;
|
|
186
|
-
element.__applyToConsumer(f);
|
|
187
|
-
let where = await f.resolveWhere();
|
|
188
|
-
if (where?.$and?.length > 0) {
|
|
189
|
-
result.push(where);
|
|
190
|
-
}
|
|
191
|
-
else
|
|
192
|
-
return; //since empty or is all rows;
|
|
193
|
-
}
|
|
194
|
-
this.result.push(() => ({
|
|
195
|
-
$or: result
|
|
196
|
-
}));
|
|
197
|
-
})());
|
|
198
|
-
}
|
|
199
|
-
isNull(col) {
|
|
200
|
-
this.add(col, NULL, "$eq");
|
|
201
|
-
}
|
|
202
|
-
isNotNull(col) {
|
|
203
|
-
this.add(col, NULL, "$ne");
|
|
204
|
-
}
|
|
205
|
-
isIn(col, val) {
|
|
206
|
-
this.result.push(() => ({
|
|
207
|
-
[this.nameProvider.$dbNameOf(col)]: {
|
|
208
|
-
$in: val.map(x => col.valueConverter.toDb(x))
|
|
209
|
-
}
|
|
210
|
-
}));
|
|
211
|
-
}
|
|
212
|
-
isEqualTo(col, val) {
|
|
213
|
-
this.add(col, val, "$eq");
|
|
214
|
-
}
|
|
215
|
-
isDifferentFrom(col, val) {
|
|
216
|
-
this.add(col, val, "$ne");
|
|
217
|
-
}
|
|
218
|
-
isGreaterOrEqualTo(col, val) {
|
|
219
|
-
this.add(col, val, "$gte");
|
|
220
|
-
}
|
|
221
|
-
isGreaterThan(col, val) {
|
|
222
|
-
this.add(col, val, "$gt");
|
|
223
|
-
}
|
|
224
|
-
isLessOrEqualTo(col, val) {
|
|
225
|
-
this.add(col, val, "$lte");
|
|
226
|
-
}
|
|
227
|
-
isLessThan(col, val) {
|
|
228
|
-
this.add(col, val, "$lt");
|
|
229
|
-
}
|
|
230
|
-
containsCaseInsensitive(col, val) {
|
|
231
|
-
throw "containsCaseInsensitive not yet implemented";
|
|
232
|
-
// this.promises.push(col.getDbName().then(colName => {
|
|
233
|
-
// this.result.push(b => b.whereRaw(
|
|
234
|
-
// 'lower (' + colName + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"));
|
|
235
|
-
// }));
|
|
236
|
-
}
|
|
237
|
-
add(col, val, operator) {
|
|
238
|
-
this.result.push(() => ({
|
|
239
|
-
[this.nameProvider.$dbNameOf(col)]: { [operator]: isNull(val) ? val : col.valueConverter.toDb(val) }
|
|
240
|
-
}));
|
|
241
|
-
}
|
|
242
|
-
databaseCustom(databaseCustom) {
|
|
243
|
-
throw "error";
|
|
244
|
-
// this.promises.push((async () => {
|
|
245
|
-
// if (databaseCustom?.buildSql) {
|
|
246
|
-
// let item = new CustomSqlFilterBuilder(this.knex);
|
|
247
|
-
// await databaseCustom.buildSql(item);
|
|
248
|
-
// if (item.sql) {
|
|
249
|
-
// this.addToWhere("(" + item.sql + ")");
|
|
250
|
-
// }
|
|
251
|
-
// }
|
|
252
|
-
// })());
|
|
253
|
-
}
|
|
254
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { JsonDataProvider, JsonEntityStorage } from '../index';
|
|
2
|
-
export declare class JsonEntityFileStorage implements JsonEntityStorage {
|
|
3
|
-
private folderPath;
|
|
4
|
-
getItem(entityDbName: string): string;
|
|
5
|
-
setItem(entityDbName: string, json: string): void;
|
|
6
|
-
constructor(folderPath: string);
|
|
7
|
-
}
|
|
8
|
-
export declare class JsonFileDataProvider extends JsonDataProvider {
|
|
9
|
-
constructor(folderPath: string);
|
|
10
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import { JsonDataProvider } from '../index';
|
|
4
|
-
export class JsonEntityFileStorage {
|
|
5
|
-
folderPath;
|
|
6
|
-
getItem(entityDbName) {
|
|
7
|
-
let fn = path.join(this.folderPath, entityDbName) + '.json';
|
|
8
|
-
if (fs.existsSync(fn)) {
|
|
9
|
-
return fs.readFileSync(fn).toString();
|
|
10
|
-
}
|
|
11
|
-
return undefined;
|
|
12
|
-
}
|
|
13
|
-
setItem(entityDbName, json) {
|
|
14
|
-
if (!fs.existsSync(this.folderPath)) {
|
|
15
|
-
fs.mkdirSync(this.folderPath);
|
|
16
|
-
}
|
|
17
|
-
return fs.writeFileSync(path.join(this.folderPath, entityDbName) + '.json', json);
|
|
18
|
-
}
|
|
19
|
-
constructor(folderPath) {
|
|
20
|
-
this.folderPath = folderPath;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export class JsonFileDataProvider extends JsonDataProvider {
|
|
24
|
-
constructor(folderPath) { super(new JsonEntityFileStorage(folderPath)); }
|
|
25
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, GenericResponse, GenericRouter, createRemultServerCore, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
|
|
2
|
-
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
3
|
-
export { SseSubscriptionServer } from '../SseSubscriptionServer';
|
|
4
|
-
export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
|
package/esm/core/server/core.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { createRemultServerCore } from './expressBridge';
|
|
2
|
-
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
3
|
-
export { SseSubscriptionServer } from '../SseSubscriptionServer';
|
|
4
|
-
export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { ActionInterface, queuedJobInfoResponse } from '../src/server-action';
|
|
2
|
-
import type { DataProvider } from '../src/data-interfaces';
|
|
3
|
-
import { DataApi, DataApiRequest, DataApiResponse } from '../src/data-api';
|
|
4
|
-
import { AllowedForInstance, Remult, UserInfo } from '../src/context';
|
|
5
|
-
import type { ClassType } from '../classType';
|
|
6
|
-
import { EntityMetadata, IdEntity, Repository } from '../src/remult3';
|
|
7
|
-
import { LiveQueryStorage, PerformWithContext, SubscriptionServer } from '../src/live-query/SubscriptionServer';
|
|
8
|
-
export interface RemultServerOptions<RequestType> {
|
|
9
|
-
/**Entities to use for the api */
|
|
10
|
-
entities?: ClassType<any>[];
|
|
11
|
-
/**Controller to use for the api */
|
|
12
|
-
controllers?: ClassType<any>[];
|
|
13
|
-
/** Will be called to get the current user based on the current request */
|
|
14
|
-
getUser?: (request: RequestType) => Promise<UserInfo | undefined>;
|
|
15
|
-
/** Will be called for each request and can be used for configuration */
|
|
16
|
-
initRequest?: (request: RequestType, options: InitRequestOptions) => Promise<void>;
|
|
17
|
-
/** Will be called once the server is loaded and the data provider is ready */
|
|
18
|
-
initApi?: (remult: Remult) => void | Promise<void>;
|
|
19
|
-
/** Data Provider to use for the api.
|
|
20
|
-
*
|
|
21
|
-
* @see [Connecting to a Database](https://remult.dev/docs/databases.html).
|
|
22
|
-
*/
|
|
23
|
-
dataProvider?: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>);
|
|
24
|
-
/** Will create tables and columns in supporting databases. default: true
|
|
25
|
-
*
|
|
26
|
-
* @description
|
|
27
|
-
* when set to true, it'll create entities that do not exist, and add columns that are missing.
|
|
28
|
-
*/
|
|
29
|
-
ensureSchema?: boolean;
|
|
30
|
-
/** The path to use for the api, default:/api
|
|
31
|
-
*
|
|
32
|
-
* @description
|
|
33
|
-
* If you want to use a different api path adjust this field
|
|
34
|
-
*/
|
|
35
|
-
rootPath?: string;
|
|
36
|
-
/** The default limit to use for find requests that did not specify a limit */
|
|
37
|
-
defaultGetLimit?: number;
|
|
38
|
-
/** When set to true (default) it'll console log each api endpoint that is created */
|
|
39
|
-
logApiEndPoints?: boolean;
|
|
40
|
-
/** A subscription server to use for live query and message channels */
|
|
41
|
-
subscriptionServer?: SubscriptionServer;
|
|
42
|
-
/** A storage to use to store live queries, relevant mostly for serverless scenarios or larger scales */
|
|
43
|
-
liveQueryStorage?: LiveQueryStorage;
|
|
44
|
-
/** Used to store the context relevant info for re running a live query */
|
|
45
|
-
contextSerializer?: {
|
|
46
|
-
serialize(remult: Remult): Promise<any>;
|
|
47
|
-
deserialize(json: any, options: InitRequestOptions): Promise<void>;
|
|
48
|
-
};
|
|
49
|
-
/** Storage to use for backend methods that use queue */
|
|
50
|
-
queueStorage?: QueueStorage;
|
|
51
|
-
}
|
|
52
|
-
export interface InitRequestOptions {
|
|
53
|
-
liveQueryStorage: LiveQueryStorage;
|
|
54
|
-
readonly remult: Remult;
|
|
55
|
-
}
|
|
56
|
-
export declare function createRemultServerCore<RequestType>(options: RemultServerOptions<RequestType>, serverCoreOptions: ServerCoreOptions<RequestType>): RemultServer<RequestType>;
|
|
57
|
-
export type GenericRequestHandler = (req: GenericRequestInfo, res: GenericResponse, next: VoidFunction) => void;
|
|
58
|
-
export interface ServerHandleResponse {
|
|
59
|
-
data?: any;
|
|
60
|
-
statusCode: number;
|
|
61
|
-
}
|
|
62
|
-
export interface RemultServer<RequestType> extends RemultServerCore<RequestType> {
|
|
63
|
-
withRemult(req: RequestType, res: GenericResponse, next: VoidFunction): any;
|
|
64
|
-
registerRouter(r: GenericRouter): void;
|
|
65
|
-
handle(req: RequestType, gRes?: GenericResponse): Promise<ServerHandleResponse | undefined>;
|
|
66
|
-
withRemultPromise<T>(request: RequestType, what: () => Promise<T>): Promise<T>;
|
|
67
|
-
}
|
|
68
|
-
export interface RemultServerCore<RequestType> {
|
|
69
|
-
getRemult(req: RequestType): Promise<Remult>;
|
|
70
|
-
openApiDoc(options: {
|
|
71
|
-
title: string;
|
|
72
|
-
version?: string;
|
|
73
|
-
}): any;
|
|
74
|
-
}
|
|
75
|
-
export type GenericRouter = {
|
|
76
|
-
route(path: string): SpecificRoute;
|
|
77
|
-
};
|
|
78
|
-
export type SpecificRoute = {
|
|
79
|
-
get(handler: GenericRequestHandler): SpecificRoute;
|
|
80
|
-
put(handler: GenericRequestHandler): SpecificRoute;
|
|
81
|
-
post(handler: GenericRequestHandler): SpecificRoute;
|
|
82
|
-
delete(handler: GenericRequestHandler): SpecificRoute;
|
|
83
|
-
};
|
|
84
|
-
export interface GenericRequestInfo {
|
|
85
|
-
url?: string;
|
|
86
|
-
method?: any;
|
|
87
|
-
query?: any;
|
|
88
|
-
params?: any;
|
|
89
|
-
}
|
|
90
|
-
export interface GenericResponse {
|
|
91
|
-
json(data: any): any;
|
|
92
|
-
status(statusCode: number): GenericResponse;
|
|
93
|
-
end(): any;
|
|
94
|
-
}
|
|
95
|
-
export declare class RemultServerImplementation<RequestType> implements RemultServer<RequestType> {
|
|
96
|
-
queue: inProcessQueueHandler;
|
|
97
|
-
options: RemultServerOptions<any>;
|
|
98
|
-
dataProvider: DataProvider | Promise<DataProvider>;
|
|
99
|
-
private coreOptions;
|
|
100
|
-
private entitiesMetaData;
|
|
101
|
-
liveQueryStorage: LiveQueryStorage;
|
|
102
|
-
constructor(queue: inProcessQueueHandler, options: RemultServerOptions<any>, dataProvider: DataProvider | Promise<DataProvider>, coreOptions: ServerCoreOptions<RequestType>, entitiesMetaData: EntityMetadata[]);
|
|
103
|
-
withRemultPromise<T>(request: RequestType, what: () => Promise<T>): Promise<T>;
|
|
104
|
-
getEntities(): EntityMetadata<any>[];
|
|
105
|
-
runWithSerializedJsonContextData: PerformWithContext;
|
|
106
|
-
subscriptionServer: SubscriptionServer;
|
|
107
|
-
withRemult: (req: RequestType, res: GenericResponse, next: VoidFunction) => void;
|
|
108
|
-
routeImpl: RouteImplementation<RequestType>;
|
|
109
|
-
getRouteImpl(): RouteImplementation<RequestType>;
|
|
110
|
-
handle(req: RequestType, gRes?: GenericResponse): Promise<ServerHandleResponse>;
|
|
111
|
-
registeredRouter: boolean;
|
|
112
|
-
registerRouter(r: GenericRouter): void;
|
|
113
|
-
serializeContext(remult: Remult): Promise<{
|
|
114
|
-
user: UserInfo | undefined;
|
|
115
|
-
context: undefined;
|
|
116
|
-
}>;
|
|
117
|
-
add(key: string, dataApiFactory: ((req: Remult) => DataApi), r: GenericRouter): void;
|
|
118
|
-
private runWithRemult;
|
|
119
|
-
process(what: (remult: Remult, myReq: DataApiRequest, myRes: DataApiResponse, genReq: GenericRequestInfo, origRes: GenericResponse, origReq: RequestType) => Promise<void>): (req: RequestType, origRes: GenericResponse) => Promise<void>;
|
|
120
|
-
getRemult(req: RequestType): Promise<Remult>;
|
|
121
|
-
hasQueue: boolean;
|
|
122
|
-
addAction(action: ActionInterface, r: GenericRouter): void;
|
|
123
|
-
openApiDoc(options: {
|
|
124
|
-
title: string;
|
|
125
|
-
version?: string;
|
|
126
|
-
}): any;
|
|
127
|
-
backendMethodsOpenApi: {
|
|
128
|
-
path: string;
|
|
129
|
-
allowed: AllowedForInstance<any>;
|
|
130
|
-
tag: string;
|
|
131
|
-
}[];
|
|
132
|
-
}
|
|
133
|
-
declare class inProcessQueueHandler {
|
|
134
|
-
private storage;
|
|
135
|
-
constructor(storage: QueueStorage);
|
|
136
|
-
submitJob(url: string, req: Remult, body: any): Promise<string>;
|
|
137
|
-
mapQueuedAction(url: string, what: (data: any, r: Remult, res: DataApiResponse) => void): void;
|
|
138
|
-
actions: Map<string, (data: any, r: Remult, res: DataApiResponse) => void>;
|
|
139
|
-
getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
|
|
140
|
-
}
|
|
141
|
-
export interface queuedJobInfo {
|
|
142
|
-
info: queuedJobInfoResponse;
|
|
143
|
-
userId: string;
|
|
144
|
-
setErrorResult(error: any): void;
|
|
145
|
-
setResult(result: any): void;
|
|
146
|
-
setProgress(progress: number): void;
|
|
147
|
-
}
|
|
148
|
-
export interface QueueStorage {
|
|
149
|
-
createJob(url: string, userId: string): Promise<string>;
|
|
150
|
-
getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
|
|
151
|
-
}
|
|
152
|
-
export declare class EntityQueueStorage implements QueueStorage {
|
|
153
|
-
private repo;
|
|
154
|
-
constructor(repo: Repository<JobsInQueueEntity>);
|
|
155
|
-
sync: Promise<any>;
|
|
156
|
-
doSync<T>(what: () => Promise<T>): Promise<any>;
|
|
157
|
-
getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
|
|
158
|
-
createJob(url: string, userId: string): Promise<string>;
|
|
159
|
-
}
|
|
160
|
-
declare class RouteImplementation<RequestType> {
|
|
161
|
-
private coreOptions;
|
|
162
|
-
constructor(coreOptions: ServerCoreOptions<RequestType>);
|
|
163
|
-
map: Map<string, Map<string, GenericRequestHandler>>;
|
|
164
|
-
route(path: string): SpecificRoute;
|
|
165
|
-
handle(req: RequestType, gRes?: GenericResponse): Promise<ServerHandleResponse | undefined>;
|
|
166
|
-
middleware(origReq: RequestType, res: GenericResponse, next: VoidFunction): void;
|
|
167
|
-
}
|
|
168
|
-
export declare class JobsInQueueEntity extends IdEntity {
|
|
169
|
-
userId: string;
|
|
170
|
-
url: string;
|
|
171
|
-
submitTime: Date;
|
|
172
|
-
doneTime: Date;
|
|
173
|
-
result: string;
|
|
174
|
-
done: boolean;
|
|
175
|
-
error: boolean;
|
|
176
|
-
progress: number;
|
|
177
|
-
}
|
|
178
|
-
export interface ServerCoreOptions<RequestType> {
|
|
179
|
-
buildGenericRequestInfo(req: RequestType): GenericRequestInfo;
|
|
180
|
-
getRequestBody(req: RequestType): Promise<any>;
|
|
181
|
-
}
|
|
182
|
-
export {};
|