@sprucelabs/data-stores 24.0.39 → 25.0.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/README.md +0 -1
- package/build/esm/stores/AbstractStore.d.ts +6 -6
- package/build/esm/stores/AbstractStore.js +2 -4
- package/build/esm/types/stores.types.d.ts +1 -0
- package/build/stores/AbstractStore.d.ts +6 -6
- package/build/stores/AbstractStore.js +2 -4
- package/build/types/stores.types.d.ts +1 -0
- package/package.json +15 -15
package/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Schema, SchemaFieldNames, SchemaPartialValues, SchemaPublicFieldNames, SchemaValues } from '@sprucelabs/schema';
|
|
2
2
|
import AbstractMutexer from '../mutexers/AbstractMutexer';
|
|
3
3
|
import { Database } from '../types/database.types';
|
|
4
4
|
import { QueryBuilder, QueryOptions } from '../types/query.types';
|
|
5
5
|
import { PrepareOptions, PrepareResults, SaveOperations } from '../types/stores.types';
|
|
6
|
-
type Response<FullSchema extends Schema, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, PF extends SchemaPublicFieldNames<FullSchema>, F extends SchemaFieldNames<FullSchema>> = IsDynamicSchema<FullSchema> extends true ? DynamicSchemaAllValues<FullSchema, CreateEntityInstances> : IncludePrivateFields extends false ? Pick<SchemaPublicValues<FullSchema, CreateEntityInstances>, PF> : Pick<SchemaAllValues<FullSchema, CreateEntityInstances>, F>;
|
|
7
6
|
export default abstract class AbstractStore<FullSchema extends Schema, CreateSchema extends Schema = FullSchema, UpdateSchema extends Schema = CreateSchema, DatabaseSchema extends Schema = FullSchema, DatabaseRecord = SchemaValues<DatabaseSchema> & {
|
|
8
7
|
id: string;
|
|
9
8
|
}, QueryRecord = SchemaPartialValues<FullSchema>, FullRecord = SchemaValues<FullSchema>, CreateRecord = SchemaValues<CreateSchema>, UpdateRecord = SchemaValues<UpdateSchema> & SaveOperations> extends AbstractMutexer {
|
|
@@ -29,10 +28,10 @@ export default abstract class AbstractStore<FullSchema extends Schema, CreateSch
|
|
|
29
28
|
getCollectionName(): string;
|
|
30
29
|
protected prepareAndNormalizeRecord<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(record: any, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
|
|
31
30
|
create<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(values: CreateRecord[], options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>[]>;
|
|
32
|
-
createOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(values: CreateRecord, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<
|
|
33
|
-
findOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<
|
|
31
|
+
createOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(values: CreateRecord, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<SchemaValues<FullSchema, false, CreateEntityInstances, false, F, SchemaPublicFieldNames<FullSchema>>>;
|
|
32
|
+
findOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<SchemaValues<FullSchema, false, CreateEntityInstances, false, F, SchemaPublicFieldNames<FullSchema>> | null>;
|
|
34
33
|
count(query?: QueryBuilder<QueryRecord>): Promise<number>;
|
|
35
|
-
find<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, queryOptions?: Omit<QueryOptions, 'includeFields'>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Awaited<
|
|
34
|
+
find<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, queryOptions?: Omit<QueryOptions, 'includeFields'>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Awaited<SchemaValues<FullSchema, false, CreateEntityInstances, false, F, SchemaPublicFieldNames<FullSchema>>>[]>;
|
|
36
35
|
upsertOne<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, updates: UpdateRecord & CreateRecord & {
|
|
37
36
|
id?: string;
|
|
38
37
|
}, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
|
|
@@ -40,10 +39,11 @@ export default abstract class AbstractStore<FullSchema extends Schema, CreateSch
|
|
|
40
39
|
update(query: QueryBuilder<QueryRecord>, updates: UpdateRecord): Promise<number>;
|
|
41
40
|
private findOneAndUpdate;
|
|
42
41
|
private pluckOperations;
|
|
43
|
-
scramble(id: string): Promise<
|
|
42
|
+
scramble(id: string): Promise<SchemaValues<FullSchema, false, false, false, Extract<keyof FullSchema["fields"], string>, SchemaPublicFieldNames<FullSchema>>>;
|
|
44
43
|
private isScrambled;
|
|
45
44
|
private generateScrambledRecord;
|
|
46
45
|
deleteOne(query: QueryBuilder<QueryRecord>): Promise<number>;
|
|
47
46
|
delete(query: QueryBuilder<QueryRecord>): Promise<number>;
|
|
48
47
|
}
|
|
48
|
+
type Response<FullSchema extends Schema, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, PF extends SchemaPublicFieldNames<FullSchema>, F extends SchemaFieldNames<FullSchema>> = SchemaValues<FullSchema, CreateEntityInstances, IncludePrivateFields, false, F, PF>;
|
|
49
49
|
export {};
|
|
@@ -47,7 +47,7 @@ export default class AbstractStore extends AbstractMutexer {
|
|
|
47
47
|
if (isScrambled) {
|
|
48
48
|
return preparedRecord;
|
|
49
49
|
}
|
|
50
|
-
return normalizeSchemaValues(this.fullSchema, preparedRecord, Object.assign(Object.assign({}, options), { fields: options.includeFields, shouldIncludePrivateFields: options.shouldIncludePrivateFields === true,
|
|
50
|
+
return normalizeSchemaValues(this.fullSchema, preparedRecord, Object.assign(Object.assign({}, options), { fields: options.includeFields, shouldIncludePrivateFields: options.shouldIncludePrivateFields === true, shouldCreateEntityInstances: false, shouldIncludeNullAndUndefinedFields: false }));
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
create(values, options) {
|
|
@@ -129,9 +129,7 @@ export default class AbstractStore extends AbstractMutexer {
|
|
|
129
129
|
return __awaiter(this, void 0, void 0, function* () {
|
|
130
130
|
const results = yield this.db.find(this.collectionName, query, Object.assign(Object.assign({}, queryOptions), { includeFields: options === null || options === void 0 ? void 0 : options.includeFields }));
|
|
131
131
|
if (results) {
|
|
132
|
-
const all = results.map((result) =>
|
|
133
|
-
//@ts-ignore
|
|
134
|
-
this.prepareAndNormalizeRecord(result, options));
|
|
132
|
+
const all = results.map((result) => this.prepareAndNormalizeRecord(result, Object.assign(Object.assign({}, options), { shouldStripUndefinedAndNullValues: true })));
|
|
135
133
|
const records = yield Promise.all(all);
|
|
136
134
|
return records;
|
|
137
135
|
}
|
|
@@ -23,6 +23,7 @@ export interface StoreOptionsMap {
|
|
|
23
23
|
export interface PrepareOptions<IncludePrivateFields extends boolean, S extends Schema, FieldNames extends SchemaFieldNames<S> = SchemaFieldNames<S>> {
|
|
24
24
|
shouldIncludePrivateFields?: IncludePrivateFields;
|
|
25
25
|
includeFields?: FieldNames[];
|
|
26
|
+
shouldStripUndefinedAndNullValues?: boolean;
|
|
26
27
|
}
|
|
27
28
|
export type PrepareResults<S extends Schema, IncludePrivateFields extends boolean> = IncludePrivateFields extends true ? SchemaPublicValues<S> : SchemaValues<S>;
|
|
28
29
|
export type StoreName = keyof StoreMap;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Schema, SchemaFieldNames, SchemaPartialValues, SchemaPublicFieldNames, SchemaValues } from '@sprucelabs/schema';
|
|
2
2
|
import AbstractMutexer from '../mutexers/AbstractMutexer';
|
|
3
3
|
import { Database } from '../types/database.types';
|
|
4
4
|
import { QueryBuilder, QueryOptions } from '../types/query.types';
|
|
5
5
|
import { PrepareOptions, PrepareResults, SaveOperations } from '../types/stores.types';
|
|
6
|
-
type Response<FullSchema extends Schema, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, PF extends SchemaPublicFieldNames<FullSchema>, F extends SchemaFieldNames<FullSchema>> = IsDynamicSchema<FullSchema> extends true ? DynamicSchemaAllValues<FullSchema, CreateEntityInstances> : IncludePrivateFields extends false ? Pick<SchemaPublicValues<FullSchema, CreateEntityInstances>, PF> : Pick<SchemaAllValues<FullSchema, CreateEntityInstances>, F>;
|
|
7
6
|
export default abstract class AbstractStore<FullSchema extends Schema, CreateSchema extends Schema = FullSchema, UpdateSchema extends Schema = CreateSchema, DatabaseSchema extends Schema = FullSchema, DatabaseRecord = SchemaValues<DatabaseSchema> & {
|
|
8
7
|
id: string;
|
|
9
8
|
}, QueryRecord = SchemaPartialValues<FullSchema>, FullRecord = SchemaValues<FullSchema>, CreateRecord = SchemaValues<CreateSchema>, UpdateRecord = SchemaValues<UpdateSchema> & SaveOperations> extends AbstractMutexer {
|
|
@@ -29,10 +28,10 @@ export default abstract class AbstractStore<FullSchema extends Schema, CreateSch
|
|
|
29
28
|
getCollectionName(): string;
|
|
30
29
|
protected prepareAndNormalizeRecord<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(record: any, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
|
|
31
30
|
create<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(values: CreateRecord[], options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>[]>;
|
|
32
|
-
createOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(values: CreateRecord, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<
|
|
33
|
-
findOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<
|
|
31
|
+
createOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(values: CreateRecord, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<SchemaValues<FullSchema, false, CreateEntityInstances, false, F, SchemaPublicFieldNames<FullSchema>>>;
|
|
32
|
+
findOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<SchemaValues<FullSchema, false, CreateEntityInstances, false, F, SchemaPublicFieldNames<FullSchema>> | null>;
|
|
34
33
|
count(query?: QueryBuilder<QueryRecord>): Promise<number>;
|
|
35
|
-
find<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, queryOptions?: Omit<QueryOptions, 'includeFields'>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Awaited<
|
|
34
|
+
find<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, queryOptions?: Omit<QueryOptions, 'includeFields'>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Awaited<SchemaValues<FullSchema, false, CreateEntityInstances, false, F, SchemaPublicFieldNames<FullSchema>>>[]>;
|
|
36
35
|
upsertOne<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, updates: UpdateRecord & CreateRecord & {
|
|
37
36
|
id?: string;
|
|
38
37
|
}, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
|
|
@@ -40,10 +39,11 @@ export default abstract class AbstractStore<FullSchema extends Schema, CreateSch
|
|
|
40
39
|
update(query: QueryBuilder<QueryRecord>, updates: UpdateRecord): Promise<number>;
|
|
41
40
|
private findOneAndUpdate;
|
|
42
41
|
private pluckOperations;
|
|
43
|
-
scramble(id: string): Promise<
|
|
42
|
+
scramble(id: string): Promise<SchemaValues<FullSchema, false, false, false, Extract<keyof FullSchema["fields"], string>, SchemaPublicFieldNames<FullSchema>>>;
|
|
44
43
|
private isScrambled;
|
|
45
44
|
private generateScrambledRecord;
|
|
46
45
|
deleteOne(query: QueryBuilder<QueryRecord>): Promise<number>;
|
|
47
46
|
delete(query: QueryBuilder<QueryRecord>): Promise<number>;
|
|
48
47
|
}
|
|
48
|
+
type Response<FullSchema extends Schema, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, PF extends SchemaPublicFieldNames<FullSchema>, F extends SchemaFieldNames<FullSchema>> = SchemaValues<FullSchema, CreateEntityInstances, IncludePrivateFields, false, F, PF>;
|
|
49
49
|
export {};
|
|
@@ -65,7 +65,7 @@ class AbstractStore extends AbstractMutexer_1.default {
|
|
|
65
65
|
if (isScrambled) {
|
|
66
66
|
return preparedRecord;
|
|
67
67
|
}
|
|
68
|
-
return (0, schema_1.normalizeSchemaValues)(this.fullSchema, preparedRecord, Object.assign(Object.assign({}, options), { fields: options.includeFields, shouldIncludePrivateFields: options.shouldIncludePrivateFields === true,
|
|
68
|
+
return (0, schema_1.normalizeSchemaValues)(this.fullSchema, preparedRecord, Object.assign(Object.assign({}, options), { fields: options.includeFields, shouldIncludePrivateFields: options.shouldIncludePrivateFields === true, shouldCreateEntityInstances: false, shouldIncludeNullAndUndefinedFields: false }));
|
|
69
69
|
}
|
|
70
70
|
async create(values, options) {
|
|
71
71
|
try {
|
|
@@ -137,9 +137,7 @@ class AbstractStore extends AbstractMutexer_1.default {
|
|
|
137
137
|
async find(query, queryOptions, options) {
|
|
138
138
|
const results = await this.db.find(this.collectionName, query, Object.assign(Object.assign({}, queryOptions), { includeFields: options === null || options === void 0 ? void 0 : options.includeFields }));
|
|
139
139
|
if (results) {
|
|
140
|
-
const all = results.map((result) =>
|
|
141
|
-
//@ts-ignore
|
|
142
|
-
this.prepareAndNormalizeRecord(result, options));
|
|
140
|
+
const all = results.map((result) => this.prepareAndNormalizeRecord(result, Object.assign(Object.assign({}, options), { shouldStripUndefinedAndNullValues: true })));
|
|
143
141
|
const records = await Promise.all(all);
|
|
144
142
|
return records;
|
|
145
143
|
}
|
|
@@ -23,6 +23,7 @@ export interface StoreOptionsMap {
|
|
|
23
23
|
export interface PrepareOptions<IncludePrivateFields extends boolean, S extends Schema, FieldNames extends SchemaFieldNames<S> = SchemaFieldNames<S>> {
|
|
24
24
|
shouldIncludePrivateFields?: IncludePrivateFields;
|
|
25
25
|
includeFields?: FieldNames[];
|
|
26
|
+
shouldStripUndefinedAndNullValues?: boolean;
|
|
26
27
|
}
|
|
27
28
|
export type PrepareResults<S extends Schema, IncludePrivateFields extends boolean> = IncludePrivateFields extends true ? SchemaPublicValues<S> : SchemaValues<S>;
|
|
28
29
|
export type StoreName = keyof StoreMap;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "
|
|
6
|
+
"version": "25.0.0",
|
|
7
7
|
"files": [
|
|
8
8
|
"build/**/*",
|
|
9
9
|
"!build/__tests__",
|
|
@@ -69,38 +69,38 @@
|
|
|
69
69
|
"upgrade.packages.test": "yarn upgrade.packages.all && yarn lint && yarn build.dev && yarn test"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@sprucelabs/error": "^5.1.
|
|
73
|
-
"@sprucelabs/globby": "^1.0.
|
|
74
|
-
"@sprucelabs/schema": "^
|
|
75
|
-
"@sprucelabs/spruce-skill-utils": "^29.1.
|
|
72
|
+
"@sprucelabs/error": "^5.1.14",
|
|
73
|
+
"@sprucelabs/globby": "^1.0.2",
|
|
74
|
+
"@sprucelabs/schema": "^29.0.5",
|
|
75
|
+
"@sprucelabs/spruce-skill-utils": "^29.1.26",
|
|
76
76
|
"just-clone": "^6.2.0",
|
|
77
77
|
"lodash": "^4.17.21",
|
|
78
|
-
"mongodb": "^5.
|
|
78
|
+
"mongodb": "^5.7.0",
|
|
79
79
|
"nedb": "^1.8.0"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@sprucelabs/esm-postbuild": "^5.0.
|
|
83
|
-
"@sprucelabs/jest-json-reporter": "^7.0.
|
|
82
|
+
"@sprucelabs/esm-postbuild": "^5.0.29",
|
|
83
|
+
"@sprucelabs/jest-json-reporter": "^7.0.60",
|
|
84
84
|
"@sprucelabs/jest-sheets-reporter": "^3.0.25",
|
|
85
|
-
"@sprucelabs/resolve-path-aliases": "^1.1.
|
|
85
|
+
"@sprucelabs/resolve-path-aliases": "^1.1.229",
|
|
86
86
|
"@sprucelabs/semantic-release": "^4.0.8",
|
|
87
|
-
"@sprucelabs/test": "^
|
|
88
|
-
"@sprucelabs/test-utils": "^
|
|
87
|
+
"@sprucelabs/test": "^8.0.0",
|
|
88
|
+
"@sprucelabs/test-utils": "^4.0.2",
|
|
89
89
|
"@types/lodash": "^4.14.195",
|
|
90
90
|
"@types/nedb": "^1.8.13",
|
|
91
91
|
"@types/node": "17.0.5",
|
|
92
92
|
"chokidar-cli": "^3.0.0",
|
|
93
93
|
"concurrently": "^8.2.0",
|
|
94
94
|
"dotenv": "^16.3.1",
|
|
95
|
-
"eslint": "^8.
|
|
95
|
+
"eslint": "^8.44.0",
|
|
96
96
|
"eslint-config-spruce": "^10.12.0",
|
|
97
|
-
"jest": "^29.
|
|
98
|
-
"jest-circus": "^29.
|
|
97
|
+
"jest": "^29.6.1",
|
|
98
|
+
"jest-circus": "^29.6.1",
|
|
99
99
|
"prettier": "^2.8.8",
|
|
100
100
|
"ts-node": "^10.9.1",
|
|
101
101
|
"tsc-watch": "^6.0.4",
|
|
102
102
|
"tsconfig-paths": "^4.2.0",
|
|
103
|
-
"typescript": "^5.1.
|
|
103
|
+
"typescript": "^5.1.6"
|
|
104
104
|
},
|
|
105
105
|
"engines": {
|
|
106
106
|
"node": ">=12",
|