@bedrockio/model 0.19.3 → 0.20.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/.claude/settings.local.json +22 -1
- package/CHANGELOG.md +4 -0
- package/README.md +29 -0
- package/dist/cjs/schema.js +2 -2
- package/package.json +3 -3
- package/src/schema.js +2 -2
- package/tsconfig.validate.json +8 -0
- package/types/generated/access.d.ts.map +1 -0
- package/types/{assign.d.ts.map → generated/assign.d.ts.map} +1 -1
- package/types/{cache.d.ts.map → generated/cache.d.ts.map} +1 -1
- package/types/{clone.d.ts.map → generated/clone.d.ts.map} +1 -1
- package/types/generated/const.d.ts.map +1 -0
- package/types/generated/delete-hooks.d.ts.map +1 -0
- package/types/{disallowed.d.ts.map → generated/disallowed.d.ts.map} +1 -1
- package/types/generated/env.d.ts.map +1 -0
- package/types/generated/errors.d.ts.map +1 -0
- package/types/{export.d.ts.map → generated/export.d.ts.map} +1 -1
- package/types/{hydrate.d.ts.map → generated/hydrate.d.ts.map} +1 -1
- package/types/generated/include.d.ts.map +1 -0
- package/types/generated/index.d.ts +7 -0
- package/types/{index.d.ts.map → generated/index.d.ts.map} +1 -1
- package/types/generated/load.d.ts.map +1 -0
- package/types/{query.d.ts.map → generated/query.d.ts.map} +1 -1
- package/types/{reload.d.ts.map → generated/reload.d.ts.map} +1 -1
- package/types/generated/schema.d.ts +12 -0
- package/types/generated/schema.d.ts.map +1 -0
- package/types/{search.d.ts → generated/search.d.ts} +7 -2
- package/types/generated/search.d.ts.map +1 -0
- package/types/generated/serialization.d.ts.map +1 -0
- package/types/generated/slug.d.ts.map +1 -0
- package/types/generated/soft-delete.d.ts.map +1 -0
- package/types/generated/testing.d.ts.map +1 -0
- package/types/{upsert.d.ts.map → generated/upsert.d.ts.map} +1 -1
- package/types/generated/utils.d.ts.map +1 -0
- package/types/{validation-schemas.d.ts → generated/validation-schemas.d.ts} +28 -8
- package/types/generated/validation-schemas.d.ts.map +1 -0
- package/types/generated/validation.d.ts.map +1 -0
- package/types/generated/warn.d.ts.map +1 -0
- package/types/index.d.ts +22 -7
- package/types/modules/assign.d.ts +22 -0
- package/types/modules/cache.d.ts +31 -0
- package/types/modules/clone.d.ts +18 -0
- package/types/modules/delete-hooks.d.ts +33 -0
- package/types/modules/export.d.ts +17 -0
- package/types/modules/hydrate.d.ts +37 -0
- package/types/modules/include.d.ts +92 -0
- package/types/modules/reload.d.ts +17 -0
- package/types/modules/search.d.ts +137 -0
- package/types/modules/slug.d.ts +80 -0
- package/types/modules/soft-delete.d.ts +458 -0
- package/types/modules/upsert.d.ts +67 -0
- package/types/modules/validation.d.ts +145 -0
- package/types/access.d.ts.map +0 -1
- package/types/const.d.ts.map +0 -1
- package/types/delete-hooks.d.ts.map +0 -1
- package/types/env.d.ts.map +0 -1
- package/types/errors.d.ts.map +0 -1
- package/types/include.d.ts.map +0 -1
- package/types/load.d.ts.map +0 -1
- package/types/references.d.ts +0 -2
- package/types/references.d.ts.map +0 -1
- package/types/schema.d.ts +0 -76
- package/types/schema.d.ts.map +0 -1
- package/types/search.d.ts.map +0 -1
- package/types/serialization.d.ts.map +0 -1
- package/types/slug.d.ts.map +0 -1
- package/types/soft-delete.d.ts.map +0 -1
- package/types/testing.d.ts.map +0 -1
- package/types/utils.d.ts.map +0 -1
- package/types/validation-schemas.d.ts.map +0 -1
- package/types/validation.d.ts.map +0 -1
- package/types/warn.d.ts.map +0 -1
- /package/types/{access.d.ts → generated/access.d.ts} +0 -0
- /package/types/{assign.d.ts → generated/assign.d.ts} +0 -0
- /package/types/{cache.d.ts → generated/cache.d.ts} +0 -0
- /package/types/{clone.d.ts → generated/clone.d.ts} +0 -0
- /package/types/{const.d.ts → generated/const.d.ts} +0 -0
- /package/types/{delete-hooks.d.ts → generated/delete-hooks.d.ts} +0 -0
- /package/types/{disallowed.d.ts → generated/disallowed.d.ts} +0 -0
- /package/types/{env.d.ts → generated/env.d.ts} +0 -0
- /package/types/{errors.d.ts → generated/errors.d.ts} +0 -0
- /package/types/{export.d.ts → generated/export.d.ts} +0 -0
- /package/types/{hydrate.d.ts → generated/hydrate.d.ts} +0 -0
- /package/types/{include.d.ts → generated/include.d.ts} +0 -0
- /package/types/{load.d.ts → generated/load.d.ts} +0 -0
- /package/types/{query.d.ts → generated/query.d.ts} +0 -0
- /package/types/{reload.d.ts → generated/reload.d.ts} +0 -0
- /package/types/{serialization.d.ts → generated/serialization.d.ts} +0 -0
- /package/types/{slug.d.ts → generated/slug.d.ts} +0 -0
- /package/types/{soft-delete.d.ts → generated/soft-delete.d.ts} +0 -0
- /package/types/{testing.d.ts → generated/testing.d.ts} +0 -0
- /package/types/{upsert.d.ts → generated/upsert.d.ts} +0 -0
- /package/types/{utils.d.ts → generated/utils.d.ts} +0 -0
- /package/types/{validation.d.ts → generated/validation.d.ts} +0 -0
- /package/types/{warn.d.ts → generated/warn.d.ts} +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
|
+
|
|
3
|
+
declare module 'mongoose' {
|
|
4
|
+
interface Model<
|
|
5
|
+
TRawDocType,
|
|
6
|
+
TQueryHelpers = {},
|
|
7
|
+
TInstanceMethods = {},
|
|
8
|
+
TVirtuals = {},
|
|
9
|
+
THydratedDocumentType = HydratedDocument<
|
|
10
|
+
TRawDocType,
|
|
11
|
+
TVirtuals & TInstanceMethods,
|
|
12
|
+
TQueryHelpers,
|
|
13
|
+
TVirtuals
|
|
14
|
+
>,
|
|
15
|
+
TSchema = any,
|
|
16
|
+
> {
|
|
17
|
+
/**
|
|
18
|
+
* Creates a document and then populates related fields specified in the include parameter.
|
|
19
|
+
*
|
|
20
|
+
* @param {Object} attributes - Document attributes including optional include property
|
|
21
|
+
*
|
|
22
|
+
* | | | |
|
|
23
|
+
* |---|---|---|
|
|
24
|
+
* | `include` | `string\|string[]\|Set` | Fields to populate after creation |
|
|
25
|
+
*
|
|
26
|
+
* @returns {Promise<Document>} - The created and populated document
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```js
|
|
30
|
+
* const user = await User.createWithInclude({
|
|
31
|
+
* name: 'John Doe',
|
|
32
|
+
* email: 'john@example.com',
|
|
33
|
+
* organizationId: '507f1f77bcf86cd799439011',
|
|
34
|
+
* include: ['organization']
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @see {@link https://github.com/bedrockio/model#includes}
|
|
39
|
+
*/
|
|
40
|
+
createWithInclude(attributes: any): Promise<any>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface Document {
|
|
44
|
+
/**
|
|
45
|
+
* Populates related fields on this document and stores select parameters for serialization.
|
|
46
|
+
*
|
|
47
|
+
* @param {string|string[]|Set} include - Fields to populate
|
|
48
|
+
* @param {Object} [options] - Options
|
|
49
|
+
*
|
|
50
|
+
* | | | |
|
|
51
|
+
* |---|---|---|
|
|
52
|
+
* | `force` | `boolean` | Force re-population of already populated fields |
|
|
53
|
+
*
|
|
54
|
+
* @returns {Promise<void>}
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```js
|
|
58
|
+
* await user.include(['organization', 'createdBy']);
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @see {@link https://github.com/bedrockio/model#includes}
|
|
62
|
+
*/
|
|
63
|
+
include(
|
|
64
|
+
include: string | string[] | Set<string>,
|
|
65
|
+
options?: any,
|
|
66
|
+
): Promise<void>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Assigns attributes to this document and stores include parameters in $locals for later population.
|
|
70
|
+
*
|
|
71
|
+
* @param {Object} attributes - Document attributes including optional include property
|
|
72
|
+
*
|
|
73
|
+
* | | | |
|
|
74
|
+
* |---|---|---|
|
|
75
|
+
* | `include` | `string\|string[]\|Set` | Fields to populate after save |
|
|
76
|
+
*
|
|
77
|
+
* @returns {void}
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```js
|
|
81
|
+
* user.assignWithInclude({
|
|
82
|
+
* name: 'Jane Doe',
|
|
83
|
+
* include: ['organization']
|
|
84
|
+
* });
|
|
85
|
+
* await user.save();
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @see {@link https://github.com/bedrockio/model#includes}
|
|
89
|
+
*/
|
|
90
|
+
assignWithInclude(attributes: any): void;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare module 'mongoose' {
|
|
2
|
+
interface Document {
|
|
3
|
+
/**
|
|
4
|
+
* Reloads this document from the database, preserving populated paths and virtual references.
|
|
5
|
+
*
|
|
6
|
+
* @returns {Promise<void>}
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```js
|
|
10
|
+
* await user.reload();
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @see {@link https://github.com/bedrockio/model#reload}
|
|
14
|
+
*/
|
|
15
|
+
reload(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
|
+
|
|
3
|
+
declare module 'mongoose' {
|
|
4
|
+
interface Model<
|
|
5
|
+
TRawDocType,
|
|
6
|
+
TQueryHelpers = {},
|
|
7
|
+
TInstanceMethods = {},
|
|
8
|
+
TVirtuals = {},
|
|
9
|
+
THydratedDocumentType = HydratedDocument<
|
|
10
|
+
TRawDocType,
|
|
11
|
+
TVirtuals & TInstanceMethods,
|
|
12
|
+
TQueryHelpers,
|
|
13
|
+
TVirtuals
|
|
14
|
+
>,
|
|
15
|
+
TSchema = any,
|
|
16
|
+
> {
|
|
17
|
+
/**
|
|
18
|
+
* Performs a search query with pagination and filtering.
|
|
19
|
+
*
|
|
20
|
+
* @param {Object} options
|
|
21
|
+
*
|
|
22
|
+
* | | | |
|
|
23
|
+
* |---|---|---|
|
|
24
|
+
* | `ids` | `string[]` | Array of IDs to filter by |
|
|
25
|
+
* | `keyword` | `string` | Keyword for text search across specified fields |
|
|
26
|
+
* | `skip` | `number` | Number of records to skip (for pagination) |
|
|
27
|
+
* | `limit` | `number` | Maximum number of records to return |
|
|
28
|
+
* | `sort` | `Object\|Object[]` | Sort order specification |
|
|
29
|
+
* | `sort.field` | `string` | Field name to sort by |
|
|
30
|
+
* | `sort.order` | `'asc'\|'desc'` | Sort direction |
|
|
31
|
+
*
|
|
32
|
+
* @returns {Promise}
|
|
33
|
+
*
|
|
34
|
+
* | | | |
|
|
35
|
+
* |---|---|---|
|
|
36
|
+
* | `data` | `Array` | Array of matching documents |
|
|
37
|
+
* | `meta` | `Object` | Metadata about the search results |
|
|
38
|
+
* | `meta.total` | `number` | Total number of matching documents |
|
|
39
|
+
* | `meta.skip` | `number` | Number of records skipped |
|
|
40
|
+
* | `meta.limit` | `number` | Maximum number of records returned |
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```js
|
|
44
|
+
* // Basic search
|
|
45
|
+
* const results = await User.search({
|
|
46
|
+
* keyword: 'john',
|
|
47
|
+
* limit: 10,
|
|
48
|
+
* skip: 0,
|
|
49
|
+
* sort: {
|
|
50
|
+
* field: 'createdAt',
|
|
51
|
+
* order: 'desc'
|
|
52
|
+
* }
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @see {@link https://github.com/bedrockio/model#search}
|
|
57
|
+
*/
|
|
58
|
+
search(options: SearchOptions): Promise<SearchResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Performs a search using an aggregation pipeline.
|
|
61
|
+
*
|
|
62
|
+
* @param {Array} pipeline - MongoDB aggregation pipeline stages
|
|
63
|
+
* @param {Object} [options]
|
|
64
|
+
*
|
|
65
|
+
* | | | |
|
|
66
|
+
* |---|---|---|
|
|
67
|
+
* | `skip` | `number` | Number of records to skip (for pagination) |
|
|
68
|
+
* | `limit` | `number` | Maximum number of records to return |
|
|
69
|
+
* | `sort` | `Object\|Object[]` | Sort order specification |
|
|
70
|
+
* | `sort.field` | `string` | Field name to sort by |
|
|
71
|
+
* | `sort.order` | `'asc'\|'desc'` | Sort direction |
|
|
72
|
+
*
|
|
73
|
+
* @returns {Promise}
|
|
74
|
+
*
|
|
75
|
+
* | | | |
|
|
76
|
+
* |---|---|---|
|
|
77
|
+
* | `data` | `Array` | Array of matching documents |
|
|
78
|
+
* | `meta` | `Object` | Metadata about the search results |
|
|
79
|
+
* | `meta.total` | `number` | Total number of matching documents |
|
|
80
|
+
* | `meta.skip` | `number` | Number of records skipped |
|
|
81
|
+
* | `meta.limit` | `number` | Maximum number of records returned |
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```js
|
|
85
|
+
* // Pipeline search
|
|
86
|
+
* const results = await User.search(
|
|
87
|
+
* [
|
|
88
|
+
* {
|
|
89
|
+
* $match: {
|
|
90
|
+
* active: true
|
|
91
|
+
* }
|
|
92
|
+
* }
|
|
93
|
+
* ],
|
|
94
|
+
* {
|
|
95
|
+
* limit: 20
|
|
96
|
+
* }
|
|
97
|
+
* );
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @see {@link https://github.com/bedrockio/model#search}
|
|
101
|
+
*/
|
|
102
|
+
search(
|
|
103
|
+
pipeline: any[],
|
|
104
|
+
options?: SearchPipelineOptions,
|
|
105
|
+
): Promise<SearchResult>;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
type SortOption = {
|
|
110
|
+
field: string;
|
|
111
|
+
order: 'asc' | 'desc';
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
type SearchOptions = {
|
|
115
|
+
ids?: string[];
|
|
116
|
+
keyword?: string;
|
|
117
|
+
skip?: number;
|
|
118
|
+
limit?: number;
|
|
119
|
+
sort?: SortOption | SortOption[];
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
type SearchPipelineOptions = {
|
|
123
|
+
skip?: number;
|
|
124
|
+
limit?: number;
|
|
125
|
+
sort?: SortOption | SortOption[];
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
type SearchResultMeta = {
|
|
129
|
+
total: number;
|
|
130
|
+
skip: number;
|
|
131
|
+
limit: number;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
type SearchResult = {
|
|
135
|
+
data: any[];
|
|
136
|
+
meta: SearchResultMeta;
|
|
137
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { HydratedDocument } from 'mongoose';
|
|
2
|
+
|
|
3
|
+
declare module 'mongoose' {
|
|
4
|
+
interface Model<
|
|
5
|
+
TRawDocType,
|
|
6
|
+
TQueryHelpers = {},
|
|
7
|
+
TInstanceMethods = {},
|
|
8
|
+
TVirtuals = {},
|
|
9
|
+
THydratedDocumentType = HydratedDocument<
|
|
10
|
+
TRawDocType,
|
|
11
|
+
TVirtuals & TInstanceMethods,
|
|
12
|
+
TQueryHelpers,
|
|
13
|
+
TVirtuals
|
|
14
|
+
>,
|
|
15
|
+
TSchema = any,
|
|
16
|
+
> {
|
|
17
|
+
/**
|
|
18
|
+
* Finds a document by either its ObjectId or slug field. Automatically detects if the string is a valid 24-character ObjectId.
|
|
19
|
+
*
|
|
20
|
+
* @param {string} str - Either an ObjectId or a slug
|
|
21
|
+
* @param {Object} [projection] - Fields to include/exclude
|
|
22
|
+
* @param {Object} [options] - MongoDB options
|
|
23
|
+
*
|
|
24
|
+
* @returns {Promise<Document|null>} - The document or null
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```js
|
|
28
|
+
* const user = await User.findByIdOrSlug('john-doe');
|
|
29
|
+
* const sameUser = await User.findByIdOrSlug('507f1f77bcf86cd799439011');
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @see {@link https://github.com/bedrockio/model#slugs}
|
|
33
|
+
*/
|
|
34
|
+
findByIdOrSlug(str: string, projection?: any, options?: any): Promise<any>;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Finds a soft-deleted document by either its ObjectId or slug field.
|
|
38
|
+
*
|
|
39
|
+
* @param {string} str - Either an ObjectId or a slug
|
|
40
|
+
* @param {Object} [projection] - Fields to include/exclude
|
|
41
|
+
* @param {Object} [options] - MongoDB options
|
|
42
|
+
*
|
|
43
|
+
* @returns {Promise<Document|null>} - The deleted document or null
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```js
|
|
47
|
+
* const user = await User.findByIdOrSlugDeleted('john-doe');
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @see {@link https://github.com/bedrockio/model#slugs}
|
|
51
|
+
*/
|
|
52
|
+
findByIdOrSlugDeleted(
|
|
53
|
+
str: string,
|
|
54
|
+
projection?: any,
|
|
55
|
+
options?: any,
|
|
56
|
+
): Promise<any>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Finds a document (deleted or not) by either its ObjectId or slug field.
|
|
60
|
+
*
|
|
61
|
+
* @param {string} str - Either an ObjectId or a slug
|
|
62
|
+
* @param {Object} [projection] - Fields to include/exclude
|
|
63
|
+
* @param {Object} [options] - MongoDB options
|
|
64
|
+
*
|
|
65
|
+
* @returns {Promise<Document|null>} - The document or null
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```js
|
|
69
|
+
* const user = await User.findByIdOrSlugWithDeleted('john-doe');
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @see {@link https://github.com/bedrockio/model#slugs}
|
|
73
|
+
*/
|
|
74
|
+
findByIdOrSlugWithDeleted(
|
|
75
|
+
str: string,
|
|
76
|
+
projection?: any,
|
|
77
|
+
options?: any,
|
|
78
|
+
): Promise<any>;
|
|
79
|
+
}
|
|
80
|
+
}
|