@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.
Files changed (95) hide show
  1. package/.claude/settings.local.json +22 -1
  2. package/CHANGELOG.md +4 -0
  3. package/README.md +29 -0
  4. package/dist/cjs/schema.js +2 -2
  5. package/package.json +3 -3
  6. package/src/schema.js +2 -2
  7. package/tsconfig.validate.json +8 -0
  8. package/types/generated/access.d.ts.map +1 -0
  9. package/types/{assign.d.ts.map → generated/assign.d.ts.map} +1 -1
  10. package/types/{cache.d.ts.map → generated/cache.d.ts.map} +1 -1
  11. package/types/{clone.d.ts.map → generated/clone.d.ts.map} +1 -1
  12. package/types/generated/const.d.ts.map +1 -0
  13. package/types/generated/delete-hooks.d.ts.map +1 -0
  14. package/types/{disallowed.d.ts.map → generated/disallowed.d.ts.map} +1 -1
  15. package/types/generated/env.d.ts.map +1 -0
  16. package/types/generated/errors.d.ts.map +1 -0
  17. package/types/{export.d.ts.map → generated/export.d.ts.map} +1 -1
  18. package/types/{hydrate.d.ts.map → generated/hydrate.d.ts.map} +1 -1
  19. package/types/generated/include.d.ts.map +1 -0
  20. package/types/generated/index.d.ts +7 -0
  21. package/types/{index.d.ts.map → generated/index.d.ts.map} +1 -1
  22. package/types/generated/load.d.ts.map +1 -0
  23. package/types/{query.d.ts.map → generated/query.d.ts.map} +1 -1
  24. package/types/{reload.d.ts.map → generated/reload.d.ts.map} +1 -1
  25. package/types/generated/schema.d.ts +12 -0
  26. package/types/generated/schema.d.ts.map +1 -0
  27. package/types/{search.d.ts → generated/search.d.ts} +7 -2
  28. package/types/generated/search.d.ts.map +1 -0
  29. package/types/generated/serialization.d.ts.map +1 -0
  30. package/types/generated/slug.d.ts.map +1 -0
  31. package/types/generated/soft-delete.d.ts.map +1 -0
  32. package/types/generated/testing.d.ts.map +1 -0
  33. package/types/{upsert.d.ts.map → generated/upsert.d.ts.map} +1 -1
  34. package/types/generated/utils.d.ts.map +1 -0
  35. package/types/{validation-schemas.d.ts → generated/validation-schemas.d.ts} +28 -8
  36. package/types/generated/validation-schemas.d.ts.map +1 -0
  37. package/types/generated/validation.d.ts.map +1 -0
  38. package/types/generated/warn.d.ts.map +1 -0
  39. package/types/index.d.ts +22 -7
  40. package/types/modules/assign.d.ts +22 -0
  41. package/types/modules/cache.d.ts +31 -0
  42. package/types/modules/clone.d.ts +18 -0
  43. package/types/modules/delete-hooks.d.ts +33 -0
  44. package/types/modules/export.d.ts +17 -0
  45. package/types/modules/hydrate.d.ts +37 -0
  46. package/types/modules/include.d.ts +92 -0
  47. package/types/modules/reload.d.ts +17 -0
  48. package/types/modules/search.d.ts +137 -0
  49. package/types/modules/slug.d.ts +80 -0
  50. package/types/modules/soft-delete.d.ts +458 -0
  51. package/types/modules/upsert.d.ts +67 -0
  52. package/types/modules/validation.d.ts +145 -0
  53. package/types/access.d.ts.map +0 -1
  54. package/types/const.d.ts.map +0 -1
  55. package/types/delete-hooks.d.ts.map +0 -1
  56. package/types/env.d.ts.map +0 -1
  57. package/types/errors.d.ts.map +0 -1
  58. package/types/include.d.ts.map +0 -1
  59. package/types/load.d.ts.map +0 -1
  60. package/types/references.d.ts +0 -2
  61. package/types/references.d.ts.map +0 -1
  62. package/types/schema.d.ts +0 -76
  63. package/types/schema.d.ts.map +0 -1
  64. package/types/search.d.ts.map +0 -1
  65. package/types/serialization.d.ts.map +0 -1
  66. package/types/slug.d.ts.map +0 -1
  67. package/types/soft-delete.d.ts.map +0 -1
  68. package/types/testing.d.ts.map +0 -1
  69. package/types/utils.d.ts.map +0 -1
  70. package/types/validation-schemas.d.ts.map +0 -1
  71. package/types/validation.d.ts.map +0 -1
  72. package/types/warn.d.ts.map +0 -1
  73. /package/types/{access.d.ts → generated/access.d.ts} +0 -0
  74. /package/types/{assign.d.ts → generated/assign.d.ts} +0 -0
  75. /package/types/{cache.d.ts → generated/cache.d.ts} +0 -0
  76. /package/types/{clone.d.ts → generated/clone.d.ts} +0 -0
  77. /package/types/{const.d.ts → generated/const.d.ts} +0 -0
  78. /package/types/{delete-hooks.d.ts → generated/delete-hooks.d.ts} +0 -0
  79. /package/types/{disallowed.d.ts → generated/disallowed.d.ts} +0 -0
  80. /package/types/{env.d.ts → generated/env.d.ts} +0 -0
  81. /package/types/{errors.d.ts → generated/errors.d.ts} +0 -0
  82. /package/types/{export.d.ts → generated/export.d.ts} +0 -0
  83. /package/types/{hydrate.d.ts → generated/hydrate.d.ts} +0 -0
  84. /package/types/{include.d.ts → generated/include.d.ts} +0 -0
  85. /package/types/{load.d.ts → generated/load.d.ts} +0 -0
  86. /package/types/{query.d.ts → generated/query.d.ts} +0 -0
  87. /package/types/{reload.d.ts → generated/reload.d.ts} +0 -0
  88. /package/types/{serialization.d.ts → generated/serialization.d.ts} +0 -0
  89. /package/types/{slug.d.ts → generated/slug.d.ts} +0 -0
  90. /package/types/{soft-delete.d.ts → generated/soft-delete.d.ts} +0 -0
  91. /package/types/{testing.d.ts → generated/testing.d.ts} +0 -0
  92. /package/types/{upsert.d.ts → generated/upsert.d.ts} +0 -0
  93. /package/types/{utils.d.ts → generated/utils.d.ts} +0 -0
  94. /package/types/{validation.d.ts → generated/validation.d.ts} +0 -0
  95. /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
+ }