remult 0.22.3 → 0.22.4
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/angular/interfaces/index.d.ts +1 -0
- package/esm/angular/interfaces/index.js +1 -0
- package/esm/angular/interfaces/src/column-collection.d.ts +70 -0
- package/esm/angular/interfaces/src/column-collection.js +341 -0
- package/esm/angular/interfaces/src/data-area-settings.d.ts +15 -0
- package/esm/angular/interfaces/src/data-area-settings.js +35 -0
- package/esm/angular/interfaces/src/data-control-interfaces.d.ts +36 -0
- package/esm/angular/interfaces/src/data-control-interfaces.js +57 -0
- package/esm/angular/interfaces/src/dataList.d.ts +13 -0
- package/esm/angular/interfaces/src/dataList.js +42 -0
- package/esm/angular/interfaces/src/filter-helper.d.ts +13 -0
- package/esm/angular/interfaces/src/filter-helper.js +59 -0
- package/esm/angular/interfaces/src/grid-settings.d.ts +145 -0
- package/esm/angular/interfaces/src/grid-settings.js +387 -0
- package/esm/angular/interfaces/src/public_api.d.ts +4 -0
- package/esm/angular/interfaces/src/public_api.js +4 -0
- package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +4 -0
- package/esm/angular/src/angular/RemultAngularPluginsService.js +3 -0
- package/esm/angular/src/angular/data-control/data-control2.component.d.ts +49 -0
- package/esm/angular/src/angular/data-control/data-control2.component.js +138 -0
- package/esm/core/SseSubscriptionServer.d.ts +33 -0
- package/esm/core/SseSubscriptionServer.js +107 -0
- package/esm/core/assign.d.ts +1 -0
- package/esm/core/assign.js +5 -0
- package/esm/core/classType.d.ts +3 -0
- package/esm/core/classType.js +1 -0
- package/esm/core/index.d.ts +27 -0
- package/esm/core/index.js +25 -0
- package/esm/core/inputTypes.d.ts +9 -0
- package/esm/core/inputTypes.js +9 -0
- package/esm/core/live-query/data-provider-live-query-storage.d.ts +22 -0
- package/esm/core/live-query/data-provider-live-query-storage.js +71 -0
- package/esm/core/postgres/index.d.ts +2 -0
- package/esm/core/postgres/index.js +2 -0
- package/esm/core/postgres/postgres-data-provider.d.ts +36 -0
- package/esm/core/postgres/postgres-data-provider.js +120 -0
- package/esm/core/postgres/schema-builder.d.ts +17 -0
- package/esm/core/postgres/schema-builder.js +153 -0
- package/esm/core/remult-fresh.d.ts +17 -0
- package/esm/core/remult-fresh.js +29 -0
- package/esm/core/remult-knex/index.d.ts +30 -0
- package/esm/core/remult-knex/index.js +446 -0
- package/esm/core/remult-mongo.d.ts +24 -0
- package/esm/core/remult-mongo.js +254 -0
- package/esm/core/server/JsonEntityFileStorage.d.ts +10 -0
- package/esm/core/server/JsonEntityFileStorage.js +25 -0
- package/esm/core/server/core.d.ts +4 -0
- package/esm/core/server/core.js +4 -0
- package/esm/core/server/expressBridge.d.ts +182 -0
- package/esm/core/server/expressBridge.js +938 -0
- package/esm/core/server/index.d.ts +6 -0
- package/esm/core/server/index.js +9 -0
- package/esm/core/server/initAsyncHooks.d.ts +1 -0
- package/esm/core/server/initAsyncHooks.js +9 -0
- package/esm/core/server/initDataProvider.d.ts +2 -0
- package/esm/core/server/initDataProvider.js +14 -0
- package/esm/core/src/__EntityValueProvider.d.ts +11 -0
- package/esm/core/src/__EntityValueProvider.js +1 -0
- package/esm/core/src/__RowsOfDataForTesting.d.ts +3 -0
- package/esm/core/src/__RowsOfDataForTesting.js +1 -0
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +6 -0
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +147 -0
- package/{src → esm/core/src}/backend-tests/my-test.backend-spec.d.ts +1 -1
- package/esm/core/src/backend-tests/my-test.backend-spec.js +197 -0
- package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +1 -0
- package/esm/core/src/backend-tests/test-http-server.backend-spec.js +167 -0
- package/esm/core/src/buildRestDataProvider.d.ts +31 -0
- package/esm/core/src/buildRestDataProvider.js +113 -0
- package/esm/core/src/column-interfaces.d.ts +154 -0
- package/esm/core/src/column-interfaces.js +7 -0
- package/esm/core/src/column.d.ts +58 -0
- package/esm/core/src/column.js +174 -0
- package/esm/core/src/context.d.ts +134 -0
- package/esm/core/src/context.js +286 -0
- package/esm/core/src/data-api.d.ts +39 -0
- package/esm/core/src/data-api.js +279 -0
- package/esm/core/src/data-interfaces.d.ts +41 -0
- package/esm/core/src/data-interfaces.js +12 -0
- package/esm/core/src/data-providers/array-entity-data-provider.d.ts +22 -0
- package/esm/core/src/data-providers/array-entity-data-provider.js +252 -0
- package/esm/core/src/data-providers/in-memory-database.d.ts +9 -0
- package/esm/core/src/data-providers/in-memory-database.js +14 -0
- package/esm/core/src/data-providers/json-data-provider.d.ts +12 -0
- package/esm/core/src/data-providers/json-data-provider.js +55 -0
- package/esm/core/src/data-providers/rest-data-provider.d.ts +49 -0
- package/esm/core/src/data-providers/rest-data-provider.js +256 -0
- package/esm/core/src/data-providers/sql-database.d.ts +33 -0
- package/esm/core/src/data-providers/sql-database.js +384 -0
- package/esm/core/src/data-providers/web-sql-data-provider.d.ts +24 -0
- package/esm/core/src/data-providers/web-sql-data-provider.js +143 -0
- package/esm/core/src/entity.d.ts +91 -0
- package/esm/core/src/entity.js +1 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +50 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +150 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +1 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +1 -0
- package/esm/core/src/filter/filter-interfaces.d.ts +85 -0
- package/esm/core/src/filter/filter-interfaces.js +477 -0
- package/esm/core/src/live-query/LiveQueryClient.d.ts +20 -0
- package/esm/core/src/live-query/LiveQueryClient.js +188 -0
- package/esm/core/src/live-query/SseSubscriptionClient.d.ts +5 -0
- package/esm/core/src/live-query/SseSubscriptionClient.js +86 -0
- package/esm/core/src/live-query/SubscriptionChannel.d.ts +72 -0
- package/esm/core/src/live-query/SubscriptionChannel.js +123 -0
- package/esm/core/src/live-query/SubscriptionServer.d.ts +53 -0
- package/esm/core/src/live-query/SubscriptionServer.js +111 -0
- package/esm/core/src/live-query/live-query-tests.spec.d.ts +6 -0
- package/esm/core/src/live-query/live-query-tests.spec.js +952 -0
- package/esm/core/src/remult-proxy.d.ts +35 -0
- package/esm/core/src/remult-proxy.js +113 -0
- package/esm/core/src/remult3/DecoratorReplacer.d.ts +10 -0
- package/esm/core/src/remult3/DecoratorReplacer.js +20 -0
- package/esm/core/src/remult3/RepositoryImplementation.d.ts +355 -0
- package/esm/core/src/remult3/RepositoryImplementation.js +2109 -0
- package/esm/core/src/remult3/index.d.ts +2 -0
- package/esm/core/src/remult3/index.js +2 -0
- package/esm/core/src/remult3/remult3.d.ts +395 -0
- package/esm/core/src/remult3/remult3.js +2 -0
- package/esm/core/src/server-action.d.ts +81 -0
- package/esm/core/src/server-action.js +394 -0
- package/esm/core/src/shared-tests/db-tests-setup.d.ts +32 -0
- package/esm/core/src/shared-tests/db-tests-setup.js +78 -0
- package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +25 -0
- package/esm/core/src/shared-tests/db-tests.db-tests.js +810 -0
- package/esm/core/src/shared-tests/deleteAll.d.ts +2 -0
- package/esm/core/src/shared-tests/deleteAll.js +4 -0
- package/esm/core/src/shared-tests/entityWithValidations.d.ts +14 -0
- package/esm/core/src/shared-tests/entityWithValidations.js +43 -0
- package/esm/core/src/shared-tests/index.d.ts +4 -0
- package/esm/core/src/shared-tests/index.js +4 -0
- package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +1 -0
- package/esm/core/src/shared-tests/test-custom-id-column.spec.js +67 -0
- package/esm/core/src/shared-tests/test-special-value.spec.d.ts +10 -0
- package/esm/core/src/shared-tests/test-special-value.spec.js +73 -0
- package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +1 -0
- package/esm/core/src/shared-tests/test-update-with-null.spec.js +31 -0
- package/esm/core/src/sort.d.ts +16 -0
- package/esm/core/src/sort.js +103 -0
- package/esm/core/src/sql-command.d.ts +19 -0
- package/esm/core/src/sql-command.js +1 -0
- package/esm/core/src/test.d.ts +3 -0
- package/esm/core/src/test.js +12 -0
- package/esm/core/src/tests/Done.d.ts +5 -0
- package/esm/core/src/tests/Done.js +9 -0
- package/esm/core/src/tests/RowProvider.spec.d.ts +16 -0
- package/esm/core/src/tests/RowProvider.spec.js +631 -0
- package/esm/core/src/tests/TestDataApiResponse.d.ts +10 -0
- package/esm/core/src/tests/TestDataApiResponse.js +22 -0
- package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +8 -0
- package/esm/core/src/tests/basicRowFunctionality.spec.js +2103 -0
- package/esm/core/src/tests/c.d.ts +8 -0
- package/esm/core/src/tests/c.js +13 -0
- package/esm/core/src/tests/createData.d.ts +7 -0
- package/esm/core/src/tests/createData.js +22 -0
- package/esm/core/src/tests/d.d.ts +6 -0
- package/esm/core/src/tests/d.js +11 -0
- package/esm/core/src/tests/dWithPrefilter.d.ts +7 -0
- package/esm/core/src/tests/dWithPrefilter.js +18 -0
- package/esm/core/src/tests/entityForCustomFilter.d.ts +16 -0
- package/esm/core/src/tests/entityForCustomFilter.js +33 -0
- package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +5 -0
- package/esm/core/src/tests/entityWithValidationsOnColumn.js +13 -0
- package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +4 -0
- package/esm/core/src/tests/frontend-database-tests-setup.spec.js +37 -0
- package/esm/core/src/tests/h.d.ts +6 -0
- package/esm/core/src/tests/h.js +24 -0
- package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +1 -0
- package/esm/core/src/tests/remult-3-basic-tests.spec.js +236 -0
- package/esm/core/src/tests/remult-3-entities.d.ts +23 -0
- package/esm/core/src/tests/remult-3-entities.js +39 -0
- package/esm/core/src/tests/tasks.d.ts +6 -0
- package/esm/core/src/tests/tasks.js +10 -0
- 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 +1 -0
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +1 -0
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +389 -0
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +5 -0
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +152 -0
- package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +1 -0
- package/esm/core/src/tests/test-decorator-precedence.spec.js +38 -0
- package/esm/core/src/tests/test-default-value.spec.d.ts +1 -0
- package/esm/core/src/tests/test-default-value.spec.js +33 -0
- package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +14 -0
- package/esm/core/src/tests/test-entity-inheritance.spec.js +82 -0
- package/esm/core/src/tests/test-exceptions.spec.d.ts +1 -0
- package/esm/core/src/tests/test-exceptions.spec.js +375 -0
- package/esm/core/src/tests/test-json.spec.d.ts +1 -0
- package/esm/core/src/tests/test-json.spec.js +115 -0
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +9 -0
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +809 -0
- package/esm/core/src/tests/test-non-active-record.spec.d.ts +1 -0
- package/esm/core/src/tests/test-non-active-record.spec.js +66 -0
- package/esm/core/src/tests/test-object-column.spec.d.ts +1 -0
- package/esm/core/src/tests/test-object-column.spec.js +189 -0
- package/esm/core/src/tests/test-paged-foreach.spec.d.ts +1 -0
- package/esm/core/src/tests/test-paged-foreach.spec.js +328 -0
- package/esm/core/src/tests/test-remult-angular.spec.d.ts +1 -0
- package/esm/core/src/tests/test-remult-angular.spec.js +23 -0
- package/esm/core/src/tests/test-server-controller.spec.d.ts +7 -0
- package/esm/core/src/tests/test-server-controller.spec.js +489 -0
- package/esm/core/src/tests/test-server-expressions.spec.d.ts +1 -0
- package/esm/core/src/tests/test-server-expressions.spec.js +178 -0
- package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +1 -0
- package/esm/core/src/tests/test-server-method-on-entity.spec.js +306 -0
- package/esm/core/src/tests/test-sql-expression.spec.d.ts +5 -0
- package/esm/core/src/tests/test-sql-expression.spec.js +205 -0
- package/esm/core/src/tests/test-sql.spec.d.ts +1 -0
- package/esm/core/src/tests/test-sql.spec.js +170 -0
- package/esm/core/src/tests/test-subscribe.spec.d.ts +1 -0
- package/esm/core/src/tests/test-subscribe.spec.js +135 -0
- package/esm/core/src/tests/test-type-recovery.spec.d.ts +1 -0
- package/esm/core/src/tests/test-type-recovery.spec.js +49 -0
- package/esm/core/src/tests/test-where-api.spec.d.ts +1 -0
- package/esm/core/src/tests/test-where-api.spec.js +434 -0
- package/esm/core/src/tests/testHelper.spec.d.ts +36 -0
- package/esm/core/src/tests/testHelper.spec.js +226 -0
- package/esm/core/src/tests/testModel/models.d.ts +16 -0
- package/esm/core/src/tests/testModel/models.js +25 -0
- package/esm/core/src/validators.d.ts +14 -0
- package/esm/core/src/validators.js +33 -0
- package/{valueConverters.d.ts → esm/core/src/valueConverters.d.ts} +13 -12
- package/esm/core/src/valueConverters.js +197 -0
- package/esm/core/urlBuilder.d.ts +6 -0
- package/esm/core/urlBuilder.js +20 -0
- package/esm/graphql.js +27 -27
- package/esm/postgres/schema-builder.js +4 -4
- package/esm/src/remult3/RepositoryImplementation.d.ts +1 -1
- package/esm/src/remult3/RepositoryImplementation.js +27 -4
- package/esm/src/shared-tests/db-tests.db-tests.js +57 -0
- package/esm/test-servers/shared/Task.d.ts +9 -0
- package/esm/test-servers/shared/Task.js +32 -0
- package/esm/test.d.ts +5 -0
- package/esm/test.js +6 -0
- package/package.json +1 -1
- package/src/remult3/RepositoryImplementation.d.ts +1 -1
- package/src/remult3/RepositoryImplementation.js +88 -63
- package/src/shared-tests/db-tests.db-tests.js +97 -0
- package/esm/src/id-entity.d.ts +0 -4
- package/esm/src/id-entity.js +0 -8
- package/postgres/postgresColumnSyntax.d.ts +0 -2
- package/postgres/postgresColumnSyntax.js +0 -34
- package/remult-middleware.d.ts +0 -2
- package/remult-middleware.js +0 -70
- package/server/register-actions-on-server.d.ts +0 -3
- package/server/register-actions-on-server.js +0 -50
- package/server/register-entities-on-server.d.ts +0 -3
- package/server/register-entities-on-server.js +0 -19
- package/src/backend-tests/my-test.backend-spec.js +0 -217
- package/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
- package/src/backend-tests/test-http-server.backend-spec.js +0 -342
- package/src/id-entity.d.ts +0 -4
- package/src/id-entity.js +0 -17
- package/valueConverters.js +0 -168
|
@@ -116,8 +116,8 @@ export class PostgresSchemaBuilder {
|
|
|
116
116
|
try {
|
|
117
117
|
let cmd = this.pool.createCommand();
|
|
118
118
|
const colName = e.$dbNameOf(c(entity));
|
|
119
|
-
if ((await cmd.execute(`select 1
|
|
120
|
-
FROM information_schema.columns
|
|
119
|
+
if ((await cmd.execute(`select 1
|
|
120
|
+
FROM information_schema.columns
|
|
121
121
|
WHERE table_name=${cmd.addParameterAndReturnSqlToken(e.$entityName.toLocaleLowerCase())} and column_name=${cmd.addParameterAndReturnSqlToken(colName.toLocaleLowerCase())}` + this.additionalWhere)).rows.length == 0) {
|
|
122
122
|
let sql = `alter table ${e.$entityName} add column ${postgresColumnSyntax(c(entity), colName)}`;
|
|
123
123
|
if (PostgresSchemaBuilder.logToConsole)
|
|
@@ -133,8 +133,8 @@ export class PostgresSchemaBuilder {
|
|
|
133
133
|
try {
|
|
134
134
|
let cmd = this.pool.createCommand();
|
|
135
135
|
let e = await dbNamesOf(entity);
|
|
136
|
-
let cols = (await cmd.execute(`select column_name
|
|
137
|
-
FROM information_schema.columns
|
|
136
|
+
let cols = (await cmd.execute(`select column_name
|
|
137
|
+
FROM information_schema.columns
|
|
138
138
|
WHERE table_name=${cmd.addParameterAndReturnSqlToken(e.$entityName.toLocaleLowerCase())} ` + this.additionalWhere)).rows.map((x) => x.column_name.toLocaleLowerCase());
|
|
139
139
|
for (const col of entity.fields) {
|
|
140
140
|
if (!isDbReadonly(col, e)) {
|
|
@@ -124,7 +124,7 @@ export declare class rowHelperImplementation<T> extends rowHelperBase<T> impleme
|
|
|
124
124
|
private _columns;
|
|
125
125
|
get fields(): FieldsRef<T>;
|
|
126
126
|
private _saving;
|
|
127
|
-
save(): Promise<T>;
|
|
127
|
+
save(onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject?: string[]): Promise<T>;
|
|
128
128
|
private getIdFilter;
|
|
129
129
|
delete(): Promise<void>;
|
|
130
130
|
loadDataFrom(data: any, loadItems?: FieldMetadata[]): Promise<void>;
|
|
@@ -190,8 +190,28 @@ export class RepositoryImplementation {
|
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
async update(id, entity) {
|
|
193
|
+
{
|
|
194
|
+
let ref = getEntityRef(entity, false);
|
|
195
|
+
if (ref)
|
|
196
|
+
return (await ref.save());
|
|
197
|
+
}
|
|
193
198
|
let ref = this.getRefForExistingRow(entity, id);
|
|
194
|
-
|
|
199
|
+
if (this.dataProvider.isProxy) {
|
|
200
|
+
return await ref.save(Object.keys(entity));
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const r = await this.findId(ref.id, { useCache: false });
|
|
204
|
+
if (!r)
|
|
205
|
+
throw new Error('Not Found');
|
|
206
|
+
for (const key in entity) {
|
|
207
|
+
if (Object.prototype.hasOwnProperty.call(entity, key)) {
|
|
208
|
+
let f = ref.fields[key];
|
|
209
|
+
if (f)
|
|
210
|
+
r[key] = f.value;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return await getEntityRef(r).save();
|
|
214
|
+
}
|
|
195
215
|
}
|
|
196
216
|
getRefForExistingRow(entity, id) {
|
|
197
217
|
let ref = getEntityRef(entity, false);
|
|
@@ -909,7 +929,7 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
909
929
|
}
|
|
910
930
|
return this._columns;
|
|
911
931
|
}
|
|
912
|
-
async save() {
|
|
932
|
+
async save(onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject) {
|
|
913
933
|
try {
|
|
914
934
|
if (this._saving)
|
|
915
935
|
throw new Error('cannot save while entity is already saving');
|
|
@@ -917,7 +937,8 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
917
937
|
if (this.wasDeleted())
|
|
918
938
|
throw new Error('cannot save a deleted row');
|
|
919
939
|
this.isLoading = true;
|
|
920
|
-
|
|
940
|
+
if (onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject === undefined) // no need
|
|
941
|
+
await this.__validateEntity();
|
|
921
942
|
let doNotSave = false;
|
|
922
943
|
for (const col of this.fields) {
|
|
923
944
|
if (col.metadata.options.saving)
|
|
@@ -930,7 +951,9 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
930
951
|
let d = this.copyDataToObject();
|
|
931
952
|
let ignoreKeys = [];
|
|
932
953
|
for (const field of this.metadata.fields) {
|
|
933
|
-
if (field.dbReadOnly
|
|
954
|
+
if (field.dbReadOnly ||
|
|
955
|
+
(onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject !== undefined &&
|
|
956
|
+
!onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject.includes(field.key))) {
|
|
934
957
|
d[field.key] = undefined;
|
|
935
958
|
ignoreKeys.push(field.key);
|
|
936
959
|
let f = this.fields.find(field);
|
|
@@ -1117,3 +1117,60 @@ testAll('test relation to string id', async ({ createEntity }) => {
|
|
|
1117
1117
|
expect(await taskRepo.count({ category: cat[1] })).toBe(1);
|
|
1118
1118
|
expect(await taskRepo.count({ category: { $id: cat[0].id } })).toBe(2);
|
|
1119
1119
|
}, false, { exclude: [TestDbs.mongo, TestDbs.mongoNoTrans] });
|
|
1120
|
+
testAll("test update doesn't override other values", async ({ createEntity, remult }) => {
|
|
1121
|
+
const catRepo = await createEntity(Categories);
|
|
1122
|
+
const cat = await catRepo.insert({ id: 1, categoryName: 'cat' });
|
|
1123
|
+
const task = class {
|
|
1124
|
+
constructor() {
|
|
1125
|
+
this.id = 0;
|
|
1126
|
+
this.title = '';
|
|
1127
|
+
this.completed = false;
|
|
1128
|
+
}
|
|
1129
|
+
};
|
|
1130
|
+
describeClass(task, Entity('tasks', { allowApiCrud: true }), {
|
|
1131
|
+
id: Fields.integer(),
|
|
1132
|
+
title: Fields.string(),
|
|
1133
|
+
cat: Field(() => Categories),
|
|
1134
|
+
completed: Fields.boolean(),
|
|
1135
|
+
});
|
|
1136
|
+
const taskRepo = await createEntity(task);
|
|
1137
|
+
await taskRepo.insert({ id: 1, cat, title: 'noam' });
|
|
1138
|
+
{
|
|
1139
|
+
const aTask = await taskRepo.findFirst({}, { useCache: false });
|
|
1140
|
+
expect(aTask.title).toBe('noam');
|
|
1141
|
+
expect(aTask.cat.categoryName).toBe('cat');
|
|
1142
|
+
expect(aTask.completed).toBe(false);
|
|
1143
|
+
}
|
|
1144
|
+
await taskRepo.update(1, { completed: true });
|
|
1145
|
+
{
|
|
1146
|
+
const aTask = await taskRepo.findFirst({}, { useCache: false });
|
|
1147
|
+
expect(aTask.id).toBe(1);
|
|
1148
|
+
expect(aTask.title).toBe('noam');
|
|
1149
|
+
expect(aTask.cat.categoryName).toBe('cat');
|
|
1150
|
+
expect(aTask.completed).toBe(true);
|
|
1151
|
+
}
|
|
1152
|
+
}, false);
|
|
1153
|
+
testAll("test update doesn't validate non included fields", async ({ createEntity, remult }) => {
|
|
1154
|
+
const catRepo = await createEntity(Categories);
|
|
1155
|
+
const cat = await catRepo.insert({ id: 1, categoryName: 'cat' });
|
|
1156
|
+
const task = class {
|
|
1157
|
+
constructor() {
|
|
1158
|
+
this.id = 0;
|
|
1159
|
+
this.title = '';
|
|
1160
|
+
this.completed = false;
|
|
1161
|
+
}
|
|
1162
|
+
};
|
|
1163
|
+
describeClass(task, Entity('tasks', { allowApiCrud: true }), {
|
|
1164
|
+
id: Fields.integer(),
|
|
1165
|
+
title: Fields.string({ validate: Validators.required }),
|
|
1166
|
+
cat: Field(() => Categories),
|
|
1167
|
+
completed: Fields.boolean(),
|
|
1168
|
+
});
|
|
1169
|
+
const taskRepo = await createEntity(task);
|
|
1170
|
+
await taskRepo.insert({ id: 1, cat, title: 'noam' });
|
|
1171
|
+
await taskRepo.update(1, { completed: true });
|
|
1172
|
+
{
|
|
1173
|
+
const aTask = await taskRepo.findId(1, { useCache: false });
|
|
1174
|
+
expect(aTask.completed).toBe(true);
|
|
1175
|
+
}
|
|
1176
|
+
}, false);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Remult } from '../../core/src/context';
|
|
2
|
+
export declare class Task {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
completed: boolean;
|
|
6
|
+
static testForbidden(): void;
|
|
7
|
+
static testStaticRemult(): Promise<number>;
|
|
8
|
+
static testInjectedRemult(remult?: Remult): Promise<number>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Entity, Fields } from '../../core/src/remult3';
|
|
2
|
+
import { Validators } from '../../core/src/validators';
|
|
3
|
+
import { BackendMethod } from '../../core/src/server-action';
|
|
4
|
+
import { remult } from '../../core/src/remult-proxy';
|
|
5
|
+
import { isBackend } from '../../core/src/context';
|
|
6
|
+
@Entity("tasks", {
|
|
7
|
+
allowApiCrud: true
|
|
8
|
+
})
|
|
9
|
+
export class Task {
|
|
10
|
+
@Fields.uuid()
|
|
11
|
+
id;
|
|
12
|
+
@Fields.string({
|
|
13
|
+
validate: (r, c) => {
|
|
14
|
+
if (isBackend())
|
|
15
|
+
Validators.required(r, c);
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
title = '';
|
|
19
|
+
@Fields.boolean()
|
|
20
|
+
completed = false;
|
|
21
|
+
@BackendMethod({ allowed: false })
|
|
22
|
+
static testForbidden() {
|
|
23
|
+
}
|
|
24
|
+
@BackendMethod({ allowed: true })
|
|
25
|
+
static async testStaticRemult() {
|
|
26
|
+
return await remult.repo(Task).count();
|
|
27
|
+
}
|
|
28
|
+
@BackendMethod({ allowed: true })
|
|
29
|
+
static async testInjectedRemult(remult) {
|
|
30
|
+
return await remult.repo(Task).count();
|
|
31
|
+
}
|
|
32
|
+
}
|
package/esm/test.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type ClassType<T> = {
|
|
2
|
+
new (...args: any[]): T;
|
|
3
|
+
};
|
|
4
|
+
export declare function Field1<valueType>(valueType: () => ClassType<valueType>): (target: any, context: ClassFieldDecoratorContext<any, valueType | undefined> | string) => void;
|
|
5
|
+
export declare function createdAt(): (target: any, context: string | ClassFieldDecoratorContext<any, Date>) => void;
|
package/esm/test.js
ADDED
package/package.json
CHANGED
|
@@ -124,7 +124,7 @@ export declare class rowHelperImplementation<T> extends rowHelperBase<T> impleme
|
|
|
124
124
|
private _columns;
|
|
125
125
|
get fields(): FieldsRef<T>;
|
|
126
126
|
private _saving;
|
|
127
|
-
save(): Promise<T>;
|
|
127
|
+
save(onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject?: string[]): Promise<T>;
|
|
128
128
|
private getIdFilter;
|
|
129
129
|
delete(): Promise<void>;
|
|
130
130
|
loadDataFrom(data: any, loadItems?: FieldMetadata[]): Promise<void>;
|
|
@@ -324,13 +324,33 @@ var RepositoryImplementation = /** @class */ (function () {
|
|
|
324
324
|
};
|
|
325
325
|
RepositoryImplementation.prototype.update = function (id, entity) {
|
|
326
326
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
327
|
-
var ref;
|
|
327
|
+
var ref_1, ref, r, key, f;
|
|
328
328
|
return tslib_1.__generator(this, function (_a) {
|
|
329
329
|
switch (_a.label) {
|
|
330
330
|
case 0:
|
|
331
|
-
|
|
332
|
-
return [
|
|
331
|
+
ref_1 = getEntityRef(entity, false);
|
|
332
|
+
if (!ref_1) return [3 /*break*/, 2];
|
|
333
|
+
return [4 /*yield*/, ref_1.save()];
|
|
333
334
|
case 1: return [2 /*return*/, (_a.sent())];
|
|
335
|
+
case 2:
|
|
336
|
+
ref = this.getRefForExistingRow(entity, id);
|
|
337
|
+
if (!this.dataProvider.isProxy) return [3 /*break*/, 4];
|
|
338
|
+
return [4 /*yield*/, ref.save(Object.keys(entity))];
|
|
339
|
+
case 3: return [2 /*return*/, _a.sent()];
|
|
340
|
+
case 4: return [4 /*yield*/, this.findId(ref.id, { useCache: false })];
|
|
341
|
+
case 5:
|
|
342
|
+
r = _a.sent();
|
|
343
|
+
if (!r)
|
|
344
|
+
throw new Error('Not Found');
|
|
345
|
+
for (key in entity) {
|
|
346
|
+
if (Object.prototype.hasOwnProperty.call(entity, key)) {
|
|
347
|
+
f = ref.fields[key];
|
|
348
|
+
if (f)
|
|
349
|
+
r[key] = f.value;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return [4 /*yield*/, getEntityRef(r).save()];
|
|
353
|
+
case 6: return [2 /*return*/, _a.sent()];
|
|
334
354
|
}
|
|
335
355
|
});
|
|
336
356
|
});
|
|
@@ -1525,7 +1545,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
|
|
|
1525
1545
|
enumerable: false,
|
|
1526
1546
|
configurable: true
|
|
1527
1547
|
});
|
|
1528
|
-
rowHelperImplementation.prototype.save = function () {
|
|
1548
|
+
rowHelperImplementation.prototype.save = function (onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject) {
|
|
1529
1549
|
var _a;
|
|
1530
1550
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1531
1551
|
var doNotSave_1, _b, _c, col, e_25_1, d, ignoreKeys, _d, _e, field, f, updatedRow, isNew, changesOnly, wasChanged, key, element, _f, _g, listener, e_26_1, err_1;
|
|
@@ -1533,58 +1553,63 @@ var rowHelperImplementation = /** @class */ (function (_super) {
|
|
|
1533
1553
|
return tslib_1.__generator(this, function (_l) {
|
|
1534
1554
|
switch (_l.label) {
|
|
1535
1555
|
case 0:
|
|
1536
|
-
_l.trys.push([0, ,
|
|
1556
|
+
_l.trys.push([0, , 35, 36]);
|
|
1537
1557
|
if (this._saving)
|
|
1538
1558
|
throw new Error('cannot save while entity is already saving');
|
|
1539
1559
|
this._saving = true;
|
|
1540
1560
|
if (this.wasDeleted())
|
|
1541
1561
|
throw new Error('cannot save a deleted row');
|
|
1542
1562
|
this.isLoading = true;
|
|
1563
|
+
if (!(onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject === undefined)) return [3 /*break*/, 2];
|
|
1543
1564
|
return [4 /*yield*/, this.__validateEntity()];
|
|
1544
1565
|
case 1:
|
|
1545
1566
|
_l.sent();
|
|
1546
|
-
doNotSave_1 = false;
|
|
1547
1567
|
_l.label = 2;
|
|
1548
1568
|
case 2:
|
|
1549
|
-
|
|
1550
|
-
_b = tslib_1.__values(this.fields), _c = _b.next();
|
|
1569
|
+
doNotSave_1 = false;
|
|
1551
1570
|
_l.label = 3;
|
|
1552
1571
|
case 3:
|
|
1553
|
-
|
|
1572
|
+
_l.trys.push([3, 8, 9, 10]);
|
|
1573
|
+
_b = tslib_1.__values(this.fields), _c = _b.next();
|
|
1574
|
+
_l.label = 4;
|
|
1575
|
+
case 4:
|
|
1576
|
+
if (!!_c.done) return [3 /*break*/, 7];
|
|
1554
1577
|
col = _c.value;
|
|
1555
|
-
if (!col.metadata.options.saving) return [3 /*break*/,
|
|
1578
|
+
if (!col.metadata.options.saving) return [3 /*break*/, 6];
|
|
1556
1579
|
return [4 /*yield*/, col.metadata.options.saving(this.instance, col)];
|
|
1557
|
-
case 4:
|
|
1558
|
-
_l.sent();
|
|
1559
|
-
_l.label = 5;
|
|
1560
1580
|
case 5:
|
|
1581
|
+
_l.sent();
|
|
1582
|
+
_l.label = 6;
|
|
1583
|
+
case 6:
|
|
1561
1584
|
_c = _b.next();
|
|
1562
|
-
return [3 /*break*/,
|
|
1563
|
-
case
|
|
1564
|
-
case
|
|
1585
|
+
return [3 /*break*/, 4];
|
|
1586
|
+
case 7: return [3 /*break*/, 10];
|
|
1587
|
+
case 8:
|
|
1565
1588
|
e_25_1 = _l.sent();
|
|
1566
1589
|
e_25 = { error: e_25_1 };
|
|
1567
|
-
return [3 /*break*/,
|
|
1568
|
-
case
|
|
1590
|
+
return [3 /*break*/, 10];
|
|
1591
|
+
case 9:
|
|
1569
1592
|
try {
|
|
1570
1593
|
if (_c && !_c.done && (_h = _b.return)) _h.call(_b);
|
|
1571
1594
|
}
|
|
1572
1595
|
finally { if (e_25) throw e_25.error; }
|
|
1573
1596
|
return [7 /*endfinally*/];
|
|
1574
|
-
case 9:
|
|
1575
|
-
if (!this.info.entityInfo.saving) return [3 /*break*/, 11];
|
|
1576
|
-
return [4 /*yield*/, this.info.entityInfo.saving(this.instance, function () { return (doNotSave_1 = true); })];
|
|
1577
1597
|
case 10:
|
|
1578
|
-
|
|
1579
|
-
|
|
1598
|
+
if (!this.info.entityInfo.saving) return [3 /*break*/, 12];
|
|
1599
|
+
return [4 /*yield*/, this.info.entityInfo.saving(this.instance, function () { return (doNotSave_1 = true); })];
|
|
1580
1600
|
case 11:
|
|
1601
|
+
_l.sent();
|
|
1602
|
+
_l.label = 12;
|
|
1603
|
+
case 12:
|
|
1581
1604
|
this.__assertValidity();
|
|
1582
1605
|
d = this.copyDataToObject();
|
|
1583
1606
|
ignoreKeys = [];
|
|
1584
1607
|
try {
|
|
1585
1608
|
for (_d = tslib_1.__values(this.metadata.fields), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
1586
1609
|
field = _e.value;
|
|
1587
|
-
if (field.dbReadOnly
|
|
1610
|
+
if (field.dbReadOnly ||
|
|
1611
|
+
(onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject !== undefined &&
|
|
1612
|
+
!onlyTheseFieldsSentOnlyInTheCaseOfProxySaveWithPartialObject.includes(field.key))) {
|
|
1588
1613
|
d[field.key] = undefined;
|
|
1589
1614
|
ignoreKeys.push(field.key);
|
|
1590
1615
|
f = this.fields.find(field);
|
|
@@ -1603,16 +1628,16 @@ var rowHelperImplementation = /** @class */ (function (_super) {
|
|
|
1603
1628
|
delete d.id;
|
|
1604
1629
|
updatedRow = void 0;
|
|
1605
1630
|
isNew = this.isNew();
|
|
1606
|
-
_l.label =
|
|
1607
|
-
case
|
|
1608
|
-
_l.trys.push([
|
|
1631
|
+
_l.label = 13;
|
|
1632
|
+
case 13:
|
|
1633
|
+
_l.trys.push([13, 32, , 34]);
|
|
1609
1634
|
(_a = this._subscribers) === null || _a === void 0 ? void 0 : _a.reportChanged();
|
|
1610
|
-
if (!this.isNew()) return [3 /*break*/,
|
|
1635
|
+
if (!this.isNew()) return [3 /*break*/, 15];
|
|
1611
1636
|
return [4 /*yield*/, this.edp.insert(d)];
|
|
1612
|
-
case 13:
|
|
1613
|
-
updatedRow = _l.sent();
|
|
1614
|
-
return [3 /*break*/, 18];
|
|
1615
1637
|
case 14:
|
|
1638
|
+
updatedRow = _l.sent();
|
|
1639
|
+
return [3 /*break*/, 19];
|
|
1640
|
+
case 15:
|
|
1616
1641
|
changesOnly = {};
|
|
1617
1642
|
wasChanged = false;
|
|
1618
1643
|
for (key in d) {
|
|
@@ -1627,70 +1652,70 @@ var rowHelperImplementation = /** @class */ (function (_super) {
|
|
|
1627
1652
|
}
|
|
1628
1653
|
if (!wasChanged)
|
|
1629
1654
|
return [2 /*return*/, this.instance];
|
|
1630
|
-
if (!doNotSave_1) return [3 /*break*/,
|
|
1655
|
+
if (!doNotSave_1) return [3 /*break*/, 17];
|
|
1631
1656
|
return [4 /*yield*/, this.edp.find({ where: this.getIdFilter() })];
|
|
1632
|
-
case
|
|
1657
|
+
case 16:
|
|
1633
1658
|
updatedRow = (_l.sent())[0];
|
|
1634
|
-
return [3 /*break*/,
|
|
1635
|
-
case
|
|
1636
|
-
case
|
|
1659
|
+
return [3 /*break*/, 19];
|
|
1660
|
+
case 17: return [4 /*yield*/, this.edp.update(this.id, changesOnly)];
|
|
1661
|
+
case 18:
|
|
1637
1662
|
updatedRow = _l.sent();
|
|
1638
|
-
_l.label =
|
|
1639
|
-
case
|
|
1640
|
-
case 19:
|
|
1641
|
-
_l.sent();
|
|
1642
|
-
if (!this.info.entityInfo.saved) return [3 /*break*/, 21];
|
|
1643
|
-
return [4 /*yield*/, this.info.entityInfo.saved(this.instance)];
|
|
1663
|
+
_l.label = 19;
|
|
1664
|
+
case 19: return [4 /*yield*/, this.loadDataFrom(updatedRow)];
|
|
1644
1665
|
case 20:
|
|
1645
1666
|
_l.sent();
|
|
1646
|
-
|
|
1667
|
+
if (!this.info.entityInfo.saved) return [3 /*break*/, 22];
|
|
1668
|
+
return [4 /*yield*/, this.info.entityInfo.saved(this.instance)];
|
|
1647
1669
|
case 21:
|
|
1648
|
-
|
|
1670
|
+
_l.sent();
|
|
1649
1671
|
_l.label = 22;
|
|
1650
1672
|
case 22:
|
|
1651
|
-
|
|
1652
|
-
_f = tslib_1.__values(this.repository.listeners.filter(function (x) { return x.saved; })), _g = _f.next();
|
|
1673
|
+
if (!this.repository.listeners) return [3 /*break*/, 30];
|
|
1653
1674
|
_l.label = 23;
|
|
1654
1675
|
case 23:
|
|
1655
|
-
|
|
1676
|
+
_l.trys.push([23, 28, 29, 30]);
|
|
1677
|
+
_f = tslib_1.__values(this.repository.listeners.filter(function (x) { return x.saved; })), _g = _f.next();
|
|
1678
|
+
_l.label = 24;
|
|
1679
|
+
case 24:
|
|
1680
|
+
if (!!_g.done) return [3 /*break*/, 27];
|
|
1656
1681
|
listener = _g.value;
|
|
1657
1682
|
return [4 /*yield*/, listener.saved(this.instance, isNew)];
|
|
1658
|
-
case 24:
|
|
1659
|
-
_l.sent();
|
|
1660
|
-
_l.label = 25;
|
|
1661
1683
|
case 25:
|
|
1684
|
+
_l.sent();
|
|
1685
|
+
_l.label = 26;
|
|
1686
|
+
case 26:
|
|
1662
1687
|
_g = _f.next();
|
|
1663
|
-
return [3 /*break*/,
|
|
1664
|
-
case
|
|
1665
|
-
case
|
|
1688
|
+
return [3 /*break*/, 24];
|
|
1689
|
+
case 27: return [3 /*break*/, 30];
|
|
1690
|
+
case 28:
|
|
1666
1691
|
e_26_1 = _l.sent();
|
|
1667
1692
|
e_26 = { error: e_26_1 };
|
|
1668
|
-
return [3 /*break*/,
|
|
1669
|
-
case
|
|
1693
|
+
return [3 /*break*/, 30];
|
|
1694
|
+
case 29:
|
|
1670
1695
|
try {
|
|
1671
1696
|
if (_g && !_g.done && (_k = _f.return)) _k.call(_f);
|
|
1672
1697
|
}
|
|
1673
1698
|
finally { if (e_26) throw e_26.error; }
|
|
1674
1699
|
return [7 /*endfinally*/];
|
|
1675
|
-
case
|
|
1676
|
-
case
|
|
1700
|
+
case 30: return [4 /*yield*/, this.repository.remult.liveQueryPublisher.itemChanged(this.repository.metadata.key, [{ id: this.getId(), oldId: this.getOriginalId(), deleted: false }])];
|
|
1701
|
+
case 31:
|
|
1677
1702
|
_l.sent();
|
|
1678
1703
|
this.saveOriginalData();
|
|
1679
1704
|
this._isNew = false;
|
|
1680
1705
|
return [2 /*return*/, this.instance];
|
|
1681
|
-
case
|
|
1706
|
+
case 32:
|
|
1682
1707
|
err_1 = _l.sent();
|
|
1683
1708
|
return [4 /*yield*/, this.catchSaveErrors(err_1)];
|
|
1684
|
-
case
|
|
1709
|
+
case 33:
|
|
1685
1710
|
_l.sent();
|
|
1686
|
-
return [3 /*break*/,
|
|
1687
|
-
case
|
|
1688
|
-
case
|
|
1711
|
+
return [3 /*break*/, 34];
|
|
1712
|
+
case 34: return [3 /*break*/, 36];
|
|
1713
|
+
case 35:
|
|
1689
1714
|
this.isLoading = false;
|
|
1690
1715
|
this._reportChangedToEntityAndFields();
|
|
1691
1716
|
this._saving = false;
|
|
1692
1717
|
return [7 /*endfinally*/];
|
|
1693
|
-
case
|
|
1718
|
+
case 36: return [2 /*return*/];
|
|
1694
1719
|
}
|
|
1695
1720
|
});
|
|
1696
1721
|
});
|
|
@@ -2441,3 +2441,100 @@ db_tests_setup_1.testAll('test relation to string id', function (_a) {
|
|
|
2441
2441
|
});
|
|
2442
2442
|
});
|
|
2443
2443
|
}, false, { exclude: [db_tests_setup_1.TestDbs.mongo, db_tests_setup_1.TestDbs.mongoNoTrans] });
|
|
2444
|
+
db_tests_setup_1.testAll("test update doesn't override other values", function (_a) {
|
|
2445
|
+
var createEntity = _a.createEntity, remult = _a.remult;
|
|
2446
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
2447
|
+
var catRepo, cat, task, taskRepo, aTask, aTask;
|
|
2448
|
+
return tslib_1.__generator(this, function (_b) {
|
|
2449
|
+
switch (_b.label) {
|
|
2450
|
+
case 0: return [4 /*yield*/, createEntity(remult_3_entities_1.Categories)];
|
|
2451
|
+
case 1:
|
|
2452
|
+
catRepo = _b.sent();
|
|
2453
|
+
return [4 /*yield*/, catRepo.insert({ id: 1, categoryName: 'cat' })];
|
|
2454
|
+
case 2:
|
|
2455
|
+
cat = _b.sent();
|
|
2456
|
+
task = /** @class */ (function () {
|
|
2457
|
+
function class_14() {
|
|
2458
|
+
this.id = 0;
|
|
2459
|
+
this.title = '';
|
|
2460
|
+
this.completed = false;
|
|
2461
|
+
}
|
|
2462
|
+
return class_14;
|
|
2463
|
+
}());
|
|
2464
|
+
DecoratorReplacer_1.describeClass(task, remult3_1.Entity('tasks', { allowApiCrud: true }), {
|
|
2465
|
+
id: remult3_1.Fields.integer(),
|
|
2466
|
+
title: remult3_1.Fields.string(),
|
|
2467
|
+
cat: remult3_1.Field(function () { return remult_3_entities_1.Categories; }),
|
|
2468
|
+
completed: remult3_1.Fields.boolean(),
|
|
2469
|
+
});
|
|
2470
|
+
return [4 /*yield*/, createEntity(task)];
|
|
2471
|
+
case 3:
|
|
2472
|
+
taskRepo = _b.sent();
|
|
2473
|
+
return [4 /*yield*/, taskRepo.insert({ id: 1, cat: cat, title: 'noam' })];
|
|
2474
|
+
case 4:
|
|
2475
|
+
_b.sent();
|
|
2476
|
+
return [4 /*yield*/, taskRepo.findFirst({}, { useCache: false })];
|
|
2477
|
+
case 5:
|
|
2478
|
+
aTask = _b.sent();
|
|
2479
|
+
expect(aTask.title).toBe('noam');
|
|
2480
|
+
expect(aTask.cat.categoryName).toBe('cat');
|
|
2481
|
+
expect(aTask.completed).toBe(false);
|
|
2482
|
+
return [4 /*yield*/, taskRepo.update(1, { completed: true })];
|
|
2483
|
+
case 6:
|
|
2484
|
+
_b.sent();
|
|
2485
|
+
return [4 /*yield*/, taskRepo.findFirst({}, { useCache: false })];
|
|
2486
|
+
case 7:
|
|
2487
|
+
aTask = _b.sent();
|
|
2488
|
+
expect(aTask.id).toBe(1);
|
|
2489
|
+
expect(aTask.title).toBe('noam');
|
|
2490
|
+
expect(aTask.cat.categoryName).toBe('cat');
|
|
2491
|
+
expect(aTask.completed).toBe(true);
|
|
2492
|
+
return [2 /*return*/];
|
|
2493
|
+
}
|
|
2494
|
+
});
|
|
2495
|
+
});
|
|
2496
|
+
}, false);
|
|
2497
|
+
db_tests_setup_1.testAll("test update doesn't validate non included fields", function (_a) {
|
|
2498
|
+
var createEntity = _a.createEntity, remult = _a.remult;
|
|
2499
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
2500
|
+
var catRepo, cat, task, taskRepo, aTask;
|
|
2501
|
+
return tslib_1.__generator(this, function (_b) {
|
|
2502
|
+
switch (_b.label) {
|
|
2503
|
+
case 0: return [4 /*yield*/, createEntity(remult_3_entities_1.Categories)];
|
|
2504
|
+
case 1:
|
|
2505
|
+
catRepo = _b.sent();
|
|
2506
|
+
return [4 /*yield*/, catRepo.insert({ id: 1, categoryName: 'cat' })];
|
|
2507
|
+
case 2:
|
|
2508
|
+
cat = _b.sent();
|
|
2509
|
+
task = /** @class */ (function () {
|
|
2510
|
+
function class_15() {
|
|
2511
|
+
this.id = 0;
|
|
2512
|
+
this.title = '';
|
|
2513
|
+
this.completed = false;
|
|
2514
|
+
}
|
|
2515
|
+
return class_15;
|
|
2516
|
+
}());
|
|
2517
|
+
DecoratorReplacer_1.describeClass(task, remult3_1.Entity('tasks', { allowApiCrud: true }), {
|
|
2518
|
+
id: remult3_1.Fields.integer(),
|
|
2519
|
+
title: remult3_1.Fields.string({ validate: validators_1.Validators.required }),
|
|
2520
|
+
cat: remult3_1.Field(function () { return remult_3_entities_1.Categories; }),
|
|
2521
|
+
completed: remult3_1.Fields.boolean(),
|
|
2522
|
+
});
|
|
2523
|
+
return [4 /*yield*/, createEntity(task)];
|
|
2524
|
+
case 3:
|
|
2525
|
+
taskRepo = _b.sent();
|
|
2526
|
+
return [4 /*yield*/, taskRepo.insert({ id: 1, cat: cat, title: 'noam' })];
|
|
2527
|
+
case 4:
|
|
2528
|
+
_b.sent();
|
|
2529
|
+
return [4 /*yield*/, taskRepo.update(1, { completed: true })];
|
|
2530
|
+
case 5:
|
|
2531
|
+
_b.sent();
|
|
2532
|
+
return [4 /*yield*/, taskRepo.findId(1, { useCache: false })];
|
|
2533
|
+
case 6:
|
|
2534
|
+
aTask = _b.sent();
|
|
2535
|
+
expect(aTask.completed).toBe(true);
|
|
2536
|
+
return [2 /*return*/];
|
|
2537
|
+
}
|
|
2538
|
+
});
|
|
2539
|
+
});
|
|
2540
|
+
}, false);
|
package/esm/src/id-entity.d.ts
DELETED
package/esm/src/id-entity.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.postgresColumnSyntax = void 0;
|
|
4
|
-
var valueConverters_1 = require("../valueConverters");
|
|
5
|
-
function postgresColumnSyntax(x, dbName) {
|
|
6
|
-
var result = dbName;
|
|
7
|
-
if (x.valueType == Number) {
|
|
8
|
-
if (!x.valueConverter.fieldTypeInDb)
|
|
9
|
-
result += " numeric" + (x.allowNull ? "" : " default 0 not null");
|
|
10
|
-
else
|
|
11
|
-
result += " " + x.valueConverter.fieldTypeInDb + (x.allowNull ? "" : " default 0 not null");
|
|
12
|
-
}
|
|
13
|
-
else if (x.valueType == Date) {
|
|
14
|
-
if (!x.valueConverter.fieldTypeInDb)
|
|
15
|
-
if (x.valueConverter == valueConverters_1.ValueConverters.DateOnly)
|
|
16
|
-
result += " date";
|
|
17
|
-
else
|
|
18
|
-
result += " timestamp";
|
|
19
|
-
else
|
|
20
|
-
result += " " + x.valueConverter.fieldTypeInDb;
|
|
21
|
-
}
|
|
22
|
-
else if (x.valueType == Boolean)
|
|
23
|
-
result += " boolean" + (x.allowNull ? "" : " default false not null");
|
|
24
|
-
else if (x.valueConverter.fieldTypeInDb) {
|
|
25
|
-
result += " " + x.valueConverter.fieldTypeInDb;
|
|
26
|
-
if (!x.allowNull && x.valueConverter.fieldTypeInDb == 'integer') {
|
|
27
|
-
result += " default 0 not null";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
else
|
|
31
|
-
result += " varchar" + (x.allowNull ? "" : " default '' not null");
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
exports.postgresColumnSyntax = postgresColumnSyntax;
|
package/remult-middleware.d.ts
DELETED