remult 3.2.3 → 3.3.0
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 +1 -1
- package/esm/remult-knex/index.js +8 -2
- package/esm/remult-mongo.js +7 -3
- package/esm/server/remult-api-server.js +1 -1
- package/esm/src/data-api.js +30 -19
- package/esm/src/data-providers/rest-data-provider.js +50 -35
- package/esm/src/data-providers/sql-database.js +35 -13
- package/esm/src/filter/fieldDbName.js +4 -1
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +5 -2
- package/esm/src/remult-proxy.js +4 -4
- package/esm/src/remult3/RepositoryImplementation.js +34 -17
- package/esm/src/remult3/remult3.js +8 -0
- package/esm/src/valueConverters.js +10 -5
- package/graphql.js +1 -1
- package/index.d.ts +1 -1
- package/package.json +1 -1
- package/remult-knex/index.js +16 -8
- package/remult-mongo.js +6 -2
- package/server/remult-api-server.js +1 -0
- package/src/column-interfaces.d.ts +3 -1
- package/src/data-api.d.ts +4 -4
- package/src/data-api.js +50 -30
- package/src/data-interfaces.d.ts +7 -6
- package/src/data-providers/rest-data-provider.d.ts +4 -4
- package/src/data-providers/rest-data-provider.js +50 -35
- package/src/data-providers/sql-database.js +158 -90
- package/src/filter/fieldDbName.d.ts +2 -1
- package/src/filter/fieldDbName.js +5 -1
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +1 -0
- package/src/filter/filter-consumer-bridge-to-sql-request.js +7 -2
- package/src/remult-proxy.js +4 -4
- package/src/remult3/RepositoryImplementation.d.ts +6 -6
- package/src/remult3/RepositoryImplementation.js +209 -169
- package/src/remult3/remult3.d.ts +11 -7
- package/src/remult3/remult3.js +8 -0
- package/src/valueConverters.d.ts +3 -1
- package/src/valueConverters.js +10 -6
package/src/remult3/remult3.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export interface UpsertOptions<entityType> {
|
|
|
13
13
|
export interface EntityRefBase<entityType> extends Subscribable {
|
|
14
14
|
hasErrors(): boolean;
|
|
15
15
|
undoChanges(): void;
|
|
16
|
-
save(): Promise<entityType>;
|
|
16
|
+
save(options?: InsertOrUpdateOptions): Promise<entityType>;
|
|
17
17
|
reload(): Promise<entityType>;
|
|
18
18
|
delete(): Promise<void>;
|
|
19
19
|
isNew(): boolean;
|
|
@@ -555,19 +555,19 @@ export interface Repository<entityType> {
|
|
|
555
555
|
* @example
|
|
556
556
|
* await taskRepo.insert([{title:"task a"}, {title:"task b", completed:true }])
|
|
557
557
|
*/
|
|
558
|
-
insert(item: Partial<MembersOnly<entityType>>[]): Promise<entityType[]>;
|
|
559
|
-
insert(item: Partial<MembersOnly<entityType
|
|
558
|
+
insert(item: Partial<MembersOnly<entityType>>[], options?: InsertOrUpdateOptions): Promise<entityType[]>;
|
|
559
|
+
insert(item: Partial<MembersOnly<entityType>>, options?: InsertOrUpdateOptions): Promise<entityType>;
|
|
560
560
|
/** Updates an item, based on its `id`
|
|
561
561
|
* @example
|
|
562
562
|
* taskRepo.update(task.id,{...task,completed:true})
|
|
563
563
|
*/
|
|
564
|
-
update(id: idType<entityType>, item: Partial<MembersOnly<entityType
|
|
565
|
-
update(id: Partial<MembersOnly<entityType>>, item: Partial<MembersOnly<entityType
|
|
564
|
+
update(id: idType<entityType>, item: Partial<MembersOnly<entityType>>, options?: InsertOrUpdateOptions): Promise<entityType>;
|
|
565
|
+
update(id: Partial<MembersOnly<entityType>>, item: Partial<MembersOnly<entityType>>, options?: InsertOrUpdateOptions): Promise<entityType>;
|
|
566
566
|
/**
|
|
567
567
|
* Updates all items that match the `where` condition.
|
|
568
568
|
*/
|
|
569
569
|
updateMany(options: {
|
|
570
|
-
where: EntityFilter<entityType
|
|
570
|
+
where: EntityFilter<entityType> | 'all';
|
|
571
571
|
set: Partial<MembersOnly<entityType>>;
|
|
572
572
|
}): Promise<number>;
|
|
573
573
|
/**
|
|
@@ -607,7 +607,7 @@ export interface Repository<entityType> {
|
|
|
607
607
|
* Deletes all items that match the `where` condition.
|
|
608
608
|
*/
|
|
609
609
|
deleteMany(options: {
|
|
610
|
-
where: EntityFilter<entityType
|
|
610
|
+
where: EntityFilter<entityType> | 'all';
|
|
611
611
|
}): Promise<number>;
|
|
612
612
|
/** Creates an instance of an item. It'll not be saved to the data source unless `save` or `insert` will be called.
|
|
613
613
|
*
|
|
@@ -1069,6 +1069,7 @@ export interface FindOptionsBase<entityType> extends LoadOptions<entityType> {
|
|
|
1069
1069
|
* await repo(Products).find({ orderBy: { price: "desc", name: "asc" }})
|
|
1070
1070
|
*/
|
|
1071
1071
|
orderBy?: EntityOrderBy<entityType>;
|
|
1072
|
+
args?: any;
|
|
1072
1073
|
}
|
|
1073
1074
|
export interface FindFirstOptions<entityType> extends FindOptionsBase<entityType>, FindFirstOptionsBase<entityType> {
|
|
1074
1075
|
}
|
|
@@ -1197,6 +1198,9 @@ export declare type EntityIdFields<entityType> = {
|
|
|
1197
1198
|
export declare type EntitySelectFields<entityType> = {
|
|
1198
1199
|
[Properties in keyof Partial<MembersOnly<entityType>>]?: boolean;
|
|
1199
1200
|
};
|
|
1201
|
+
export declare type InsertOrUpdateOptions = {
|
|
1202
|
+
select: 'none';
|
|
1203
|
+
};
|
|
1200
1204
|
export interface ClassFieldDecoratorContextStub<entityType, valueType> {
|
|
1201
1205
|
readonly access: {
|
|
1202
1206
|
set(object: entityType, value: valueType | null): void;
|
package/src/remult3/remult3.js
CHANGED
|
@@ -44,6 +44,14 @@ exports.flags = {
|
|
|
44
44
|
|
|
45
45
|
-
|
|
46
46
|
*/
|
|
47
|
+
/*p1 - https://github.com/remult/remult/discussions/438
|
|
48
|
+
- should we use the arg for update and insert? for the returning query?
|
|
49
|
+
- Does dbNamesOf still makes sense? I think that abstraction, regarding sql expression has lost it's merit
|
|
50
|
+
- remember caching of sql expression calculations that took a recursive amount of time for JYC
|
|
51
|
+
- maybe introduce a ready dbNamesOf of argument that will be aware of prefixes
|
|
52
|
+
- I've changed the order by to support order by 1
|
|
53
|
+
|
|
54
|
+
*/
|
|
47
55
|
//p1 - deleteAll({title:undefined}) should throw an error - not return 0 (with direct call to db)
|
|
48
56
|
//p1 - remult-create, move db question ahead of auth - everyone needs a database, not everyone need auth
|
|
49
57
|
//p1 - allow experimental route registration on remult server, with at least get route, and support redirect, read header and set header - (and the existing get html etc...)
|
package/src/valueConverters.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ import type { ValueConverter } from './column-interfaces.js';
|
|
|
2
2
|
export declare class ValueConverters {
|
|
3
3
|
static readonly Date: ValueConverter<Date>;
|
|
4
4
|
static readonly DateOnly: ValueConverter<Date>;
|
|
5
|
-
static readonly DateOnlyString: ValueConverter<Date
|
|
5
|
+
static readonly DateOnlyString: ValueConverter<Date> & {
|
|
6
|
+
zeroDate: Date;
|
|
7
|
+
};
|
|
6
8
|
static readonly Boolean: ValueConverter<Boolean>;
|
|
7
9
|
static readonly Number: ValueConverter<number>;
|
|
8
10
|
static readonly String: ValueConverter<String>;
|
package/src/valueConverters.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ValueConverters = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var inputTypes_js_1 = require("../inputTypes.js");
|
|
6
|
+
var zeroDate = new Date('0000-01-01');
|
|
6
7
|
var ValueConverters = /** @class */ (function () {
|
|
7
8
|
function ValueConverters() {
|
|
8
9
|
}
|
|
@@ -71,6 +72,8 @@ var ValueConverters = /** @class */ (function () {
|
|
|
71
72
|
fromJson: function (value) {
|
|
72
73
|
if (!value || value == '' || value == '0000-00-00')
|
|
73
74
|
return null;
|
|
75
|
+
if (value == '0000-01-01')
|
|
76
|
+
return zeroDate;
|
|
74
77
|
var d = new Date(Date.parse(value));
|
|
75
78
|
d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
|
|
76
79
|
return d;
|
|
@@ -92,6 +95,8 @@ var ValueConverters = /** @class */ (function () {
|
|
|
92
95
|
},
|
|
93
96
|
};
|
|
94
97
|
ValueConverters.DateOnlyString = tslib_1.__assign(tslib_1.__assign({}, ValueConverters.DateOnly), { toDb: function (d) {
|
|
98
|
+
if (d === zeroDate)
|
|
99
|
+
return '00000000';
|
|
95
100
|
var val = ValueConverters.DateOnly.toJson(d);
|
|
96
101
|
if (!val)
|
|
97
102
|
return undefined;
|
|
@@ -101,12 +106,10 @@ var ValueConverters = /** @class */ (function () {
|
|
|
101
106
|
return null;
|
|
102
107
|
if (!val)
|
|
103
108
|
return undefined;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
val.substring(6, 8));
|
|
109
|
-
} });
|
|
109
|
+
if (val === '00000000')
|
|
110
|
+
return zeroDate;
|
|
111
|
+
return new Date(Number(val.substring(0, 4)), Number(val.substring(4, 6)) - 1, Number(val.substring(6, 8)));
|
|
112
|
+
}, zeroDate: zeroDate });
|
|
110
113
|
ValueConverters.Boolean = {
|
|
111
114
|
toDb: function (val) { return val; },
|
|
112
115
|
inputType: inputTypes_js_1.InputTypes.checkbox,
|
|
@@ -173,6 +176,7 @@ var ValueConverters = /** @class */ (function () {
|
|
|
173
176
|
toDb: function (x) { return ValueConverters.JsonString.toDb(x); },
|
|
174
177
|
fromInput: function (x) { return ValueConverters.Default.fromJson(x); },
|
|
175
178
|
toInput: function (x) { return ValueConverters.Default.toJson(x); },
|
|
179
|
+
toDbSql: function (x) { return x; },
|
|
176
180
|
displayValue: function (x) { return x + ''; },
|
|
177
181
|
fieldTypeInDb: '',
|
|
178
182
|
inputType: 'text',
|