express-model-binding 1.0.0 → 1.1.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 (51) hide show
  1. package/dist/{BaseAdapter-BjvLQijd.d.mts → BaseAdapter-Dr9a8ZUY.d.mts} +17 -1
  2. package/dist/{BaseAdapter-BjvLQijd.d.ts → BaseAdapter-Dr9a8ZUY.d.ts} +17 -1
  3. package/dist/adapters/KnexAdapter.d.mts +1 -1
  4. package/dist/adapters/KnexAdapter.d.ts +1 -1
  5. package/dist/adapters/KnexAdapter.js +1 -257
  6. package/dist/adapters/KnexAdapter.mjs +1 -229
  7. package/dist/adapters/MongooseAdapter.d.mts +1 -1
  8. package/dist/adapters/MongooseAdapter.d.ts +1 -1
  9. package/dist/adapters/MongooseAdapter.js +1 -245
  10. package/dist/adapters/MongooseAdapter.mjs +1 -225
  11. package/dist/adapters/PrismaAdapter.d.mts +1 -1
  12. package/dist/adapters/PrismaAdapter.d.ts +1 -1
  13. package/dist/adapters/PrismaAdapter.js +1 -247
  14. package/dist/adapters/PrismaAdapter.mjs +1 -220
  15. package/dist/adapters/SequelizeAdapter.d.mts +1 -1
  16. package/dist/adapters/SequelizeAdapter.d.ts +1 -1
  17. package/dist/adapters/SequelizeAdapter.js +1 -280
  18. package/dist/adapters/SequelizeAdapter.mjs +1 -260
  19. package/dist/adapters/TypeORMAdapter.d.mts +1 -1
  20. package/dist/adapters/TypeORMAdapter.d.ts +1 -1
  21. package/dist/adapters/TypeORMAdapter.js +1 -294
  22. package/dist/adapters/TypeORMAdapter.mjs +1 -267
  23. package/dist/chunk-7I3EYD6K.js +1 -0
  24. package/dist/chunk-7OR75DD2.mjs +1 -0
  25. package/dist/chunk-A7LUHNSI.mjs +1 -0
  26. package/dist/chunk-B3DBSP2J.mjs +1 -0
  27. package/dist/chunk-CKT6LD2K.js +1 -0
  28. package/dist/chunk-DBYMXDVA.mjs +1 -0
  29. package/dist/chunk-EEPSARTF.js +1 -0
  30. package/dist/chunk-ISSVD3WP.js +1 -0
  31. package/dist/chunk-LLYCNTZ7.mjs +1 -0
  32. package/dist/chunk-OKPAWWZN.js +1 -0
  33. package/dist/chunk-Z6WU7X3A.mjs +1 -0
  34. package/dist/chunk-ZJ2WW53U.js +1 -0
  35. package/dist/index.d.mts +4 -3
  36. package/dist/index.d.ts +4 -3
  37. package/dist/index.js +1 -1514
  38. package/dist/index.mjs +1 -1450
  39. package/package.json +5 -3
  40. package/dist/adapters/KnexAdapter.js.map +0 -1
  41. package/dist/adapters/KnexAdapter.mjs.map +0 -1
  42. package/dist/adapters/MongooseAdapter.js.map +0 -1
  43. package/dist/adapters/MongooseAdapter.mjs.map +0 -1
  44. package/dist/adapters/PrismaAdapter.js.map +0 -1
  45. package/dist/adapters/PrismaAdapter.mjs.map +0 -1
  46. package/dist/adapters/SequelizeAdapter.js.map +0 -1
  47. package/dist/adapters/SequelizeAdapter.mjs.map +0 -1
  48. package/dist/adapters/TypeORMAdapter.js.map +0 -1
  49. package/dist/adapters/TypeORMAdapter.mjs.map +0 -1
  50. package/dist/index.js.map +0 -1
  51. package/dist/index.mjs.map +0 -1
@@ -1,245 +1 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/adapters/MongooseAdapter.ts
21
- var MongooseAdapter_exports = {};
22
- __export(MongooseAdapter_exports, {
23
- MongooseAdapter: () => MongooseAdapter
24
- });
25
- module.exports = __toCommonJS(MongooseAdapter_exports);
26
-
27
- // src/errors/index.ts
28
- var BindingError = class extends Error {
29
- constructor(message, originalError) {
30
- super(message);
31
- this.name = "BindingError";
32
- this.originalError = originalError;
33
- Error.captureStackTrace(this, this.constructor);
34
- }
35
- toJSON() {
36
- return {
37
- name: this.name,
38
- message: this.message,
39
- originalError: this.originalError?.message
40
- };
41
- }
42
- };
43
- var InvalidModelError = class extends Error {
44
- constructor(message, model) {
45
- super(message);
46
- this.name = "InvalidModelError";
47
- this.model = model;
48
- Error.captureStackTrace(this, this.constructor);
49
- }
50
- toJSON() {
51
- return {
52
- name: this.name,
53
- message: this.message,
54
- model: typeof this.model === "string" ? this.model : String(this.model)
55
- };
56
- }
57
- };
58
-
59
- // src/core/BaseAdapter.ts
60
- var BaseAdapter = class {
61
- transformValue(_model, _key, value) {
62
- if (/^\d+$/.test(value)) {
63
- const num = parseInt(value, 10);
64
- if (!isNaN(num) && Number.isSafeInteger(num)) {
65
- return num;
66
- }
67
- }
68
- return value;
69
- }
70
- supportsSoftDeletes(_model) {
71
- return false;
72
- }
73
- getModelMetadata(model) {
74
- return {
75
- name: this.getModelName(model),
76
- primaryKey: this.getPrimaryKeyName(model),
77
- softDeletes: this.supportsSoftDeletes(model),
78
- adapter: this.name
79
- };
80
- }
81
- validateModel(model) {
82
- if (!this.isValidModel(model)) {
83
- throw new InvalidModelError(`Invalid model for ${this.name} adapter`, model);
84
- }
85
- }
86
- getModelName(model) {
87
- if (typeof model === "string") {
88
- return model;
89
- }
90
- if (model && typeof model === "object") {
91
- const obj = model;
92
- if (typeof obj.name === "string") return obj.name;
93
- if (typeof obj.modelName === "string") return obj.modelName;
94
- if (typeof obj.tableName === "string") return obj.tableName;
95
- }
96
- if (model && typeof model === "function") {
97
- return model.name || "Unknown";
98
- }
99
- return "Unknown";
100
- }
101
- applySoftDeleteFilter(queryBuilder, _options) {
102
- return queryBuilder;
103
- }
104
- applyIncludes(queryBuilder, _includes) {
105
- return queryBuilder;
106
- }
107
- applySelect(queryBuilder, _select) {
108
- return queryBuilder;
109
- }
110
- applyWhereConditions(queryBuilder, _where) {
111
- return queryBuilder;
112
- }
113
- applyCustomQuery(queryBuilder, queryFn) {
114
- if (queryFn) {
115
- return queryFn(queryBuilder);
116
- }
117
- return queryBuilder;
118
- }
119
- };
120
-
121
- // src/utils/validators.ts
122
- var OBJECT_ID_REGEX = /^[0-9a-f]{24}$/i;
123
- function isObjectId(value) {
124
- return OBJECT_ID_REGEX.test(value);
125
- }
126
-
127
- // src/adapters/MongooseAdapter.ts
128
- function isSchemaPathType(value) {
129
- return typeof value === "object" && value !== null && "instance" in value;
130
- }
131
- var MongooseAdapter = class extends BaseAdapter {
132
- constructor() {
133
- super(...arguments);
134
- this.name = "mongoose";
135
- }
136
- async findByKey(model, key, value, options = {}) {
137
- this.validateModel(model);
138
- try {
139
- const transformedValue = this.transformValue(model, key, value);
140
- let query = model.findOne({ [key]: transformedValue });
141
- if (options.select && options.select.length > 0) {
142
- query = query.select(options.select.join(" "));
143
- }
144
- if (options.include) {
145
- query = this.applyIncludes(query, options.include);
146
- }
147
- if (options.where) {
148
- Object.entries(options.where).forEach(([field, val]) => {
149
- query = query.where(field).equals(val);
150
- });
151
- }
152
- if (options.query) {
153
- query = this.applyCustomQuery(query, options.query);
154
- }
155
- const result = await query.exec();
156
- if (result && this.supportsSoftDeletes(model)) {
157
- const doc = result;
158
- const isDeleted = doc.deleted || doc.deletedAt || doc.isDeleted;
159
- if (!options.withTrashed && !options.onlyTrashed && isDeleted) {
160
- return null;
161
- }
162
- if (options.onlyTrashed && !isDeleted) {
163
- return null;
164
- }
165
- }
166
- return result;
167
- } catch (error) {
168
- throw new BindingError(
169
- `Failed to fetch ${model.modelName}: ${error.message}`,
170
- error
171
- );
172
- }
173
- }
174
- getPrimaryKeyName(_model) {
175
- return "_id";
176
- }
177
- isValidModel(model) {
178
- if (!model || typeof model !== "function") {
179
- return false;
180
- }
181
- const m = model;
182
- return typeof m.findOne === "function" && typeof m.modelName === "string" && m.schema !== void 0;
183
- }
184
- transformValue(model, key, value) {
185
- if (key === "_id" || key === "id") {
186
- if (isObjectId(value)) {
187
- try {
188
- const mongoose = require("mongoose");
189
- return new mongoose.Types.ObjectId(value);
190
- } catch {
191
- return value;
192
- }
193
- }
194
- return value;
195
- }
196
- const schemaType = model.schema.path(key);
197
- if (isSchemaPathType(schemaType) && schemaType.instance === "Number") {
198
- const num = parseInt(value, 10);
199
- if (!isNaN(num)) {
200
- return num;
201
- }
202
- }
203
- return value;
204
- }
205
- supportsSoftDeletes(model) {
206
- const schema = model.schema;
207
- return schema.path("deleted") !== void 0 || schema.path("deletedAt") !== void 0 || schema.path("isDeleted") !== void 0;
208
- }
209
- getModelMetadata(model) {
210
- const schema = model.schema;
211
- const paths = Object.keys(schema.paths);
212
- return {
213
- name: model.modelName,
214
- primaryKey: "_id",
215
- tableName: model.collection.name,
216
- softDeletes: this.supportsSoftDeletes(model),
217
- fields: paths,
218
- adapter: this.name
219
- };
220
- }
221
- applyIncludes(query, includes) {
222
- if (Array.isArray(includes)) {
223
- includes.forEach((relation) => {
224
- query = query.populate(relation);
225
- });
226
- } else {
227
- Object.entries(includes).forEach(([relation, options]) => {
228
- if (typeof options === "boolean" && options) {
229
- query = query.populate(relation);
230
- } else if (typeof options === "object" && options !== null) {
231
- query = query.populate({
232
- path: relation,
233
- ...options
234
- });
235
- }
236
- });
237
- }
238
- return query;
239
- }
240
- };
241
- // Annotate the CommonJS export names for ESM import in node:
242
- 0 && (module.exports = {
243
- MongooseAdapter
244
- });
245
- //# sourceMappingURL=MongooseAdapter.js.map
1
+ 'use strict';var chunkCKT6LD2K_js=require('../chunk-CKT6LD2K.js');require('../chunk-7I3EYD6K.js');Object.defineProperty(exports,"MongooseAdapter",{enumerable:true,get:function(){return chunkCKT6LD2K_js.a}});
@@ -1,225 +1 @@
1
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
- }) : x)(function(x) {
4
- if (typeof require !== "undefined") return require.apply(this, arguments);
5
- throw Error('Dynamic require of "' + x + '" is not supported');
6
- });
7
-
8
- // src/errors/index.ts
9
- var BindingError = class extends Error {
10
- constructor(message, originalError) {
11
- super(message);
12
- this.name = "BindingError";
13
- this.originalError = originalError;
14
- Error.captureStackTrace(this, this.constructor);
15
- }
16
- toJSON() {
17
- return {
18
- name: this.name,
19
- message: this.message,
20
- originalError: this.originalError?.message
21
- };
22
- }
23
- };
24
- var InvalidModelError = class extends Error {
25
- constructor(message, model) {
26
- super(message);
27
- this.name = "InvalidModelError";
28
- this.model = model;
29
- Error.captureStackTrace(this, this.constructor);
30
- }
31
- toJSON() {
32
- return {
33
- name: this.name,
34
- message: this.message,
35
- model: typeof this.model === "string" ? this.model : String(this.model)
36
- };
37
- }
38
- };
39
-
40
- // src/core/BaseAdapter.ts
41
- var BaseAdapter = class {
42
- transformValue(_model, _key, value) {
43
- if (/^\d+$/.test(value)) {
44
- const num = parseInt(value, 10);
45
- if (!isNaN(num) && Number.isSafeInteger(num)) {
46
- return num;
47
- }
48
- }
49
- return value;
50
- }
51
- supportsSoftDeletes(_model) {
52
- return false;
53
- }
54
- getModelMetadata(model) {
55
- return {
56
- name: this.getModelName(model),
57
- primaryKey: this.getPrimaryKeyName(model),
58
- softDeletes: this.supportsSoftDeletes(model),
59
- adapter: this.name
60
- };
61
- }
62
- validateModel(model) {
63
- if (!this.isValidModel(model)) {
64
- throw new InvalidModelError(`Invalid model for ${this.name} adapter`, model);
65
- }
66
- }
67
- getModelName(model) {
68
- if (typeof model === "string") {
69
- return model;
70
- }
71
- if (model && typeof model === "object") {
72
- const obj = model;
73
- if (typeof obj.name === "string") return obj.name;
74
- if (typeof obj.modelName === "string") return obj.modelName;
75
- if (typeof obj.tableName === "string") return obj.tableName;
76
- }
77
- if (model && typeof model === "function") {
78
- return model.name || "Unknown";
79
- }
80
- return "Unknown";
81
- }
82
- applySoftDeleteFilter(queryBuilder, _options) {
83
- return queryBuilder;
84
- }
85
- applyIncludes(queryBuilder, _includes) {
86
- return queryBuilder;
87
- }
88
- applySelect(queryBuilder, _select) {
89
- return queryBuilder;
90
- }
91
- applyWhereConditions(queryBuilder, _where) {
92
- return queryBuilder;
93
- }
94
- applyCustomQuery(queryBuilder, queryFn) {
95
- if (queryFn) {
96
- return queryFn(queryBuilder);
97
- }
98
- return queryBuilder;
99
- }
100
- };
101
-
102
- // src/utils/validators.ts
103
- var OBJECT_ID_REGEX = /^[0-9a-f]{24}$/i;
104
- function isObjectId(value) {
105
- return OBJECT_ID_REGEX.test(value);
106
- }
107
-
108
- // src/adapters/MongooseAdapter.ts
109
- function isSchemaPathType(value) {
110
- return typeof value === "object" && value !== null && "instance" in value;
111
- }
112
- var MongooseAdapter = class extends BaseAdapter {
113
- constructor() {
114
- super(...arguments);
115
- this.name = "mongoose";
116
- }
117
- async findByKey(model, key, value, options = {}) {
118
- this.validateModel(model);
119
- try {
120
- const transformedValue = this.transformValue(model, key, value);
121
- let query = model.findOne({ [key]: transformedValue });
122
- if (options.select && options.select.length > 0) {
123
- query = query.select(options.select.join(" "));
124
- }
125
- if (options.include) {
126
- query = this.applyIncludes(query, options.include);
127
- }
128
- if (options.where) {
129
- Object.entries(options.where).forEach(([field, val]) => {
130
- query = query.where(field).equals(val);
131
- });
132
- }
133
- if (options.query) {
134
- query = this.applyCustomQuery(query, options.query);
135
- }
136
- const result = await query.exec();
137
- if (result && this.supportsSoftDeletes(model)) {
138
- const doc = result;
139
- const isDeleted = doc.deleted || doc.deletedAt || doc.isDeleted;
140
- if (!options.withTrashed && !options.onlyTrashed && isDeleted) {
141
- return null;
142
- }
143
- if (options.onlyTrashed && !isDeleted) {
144
- return null;
145
- }
146
- }
147
- return result;
148
- } catch (error) {
149
- throw new BindingError(
150
- `Failed to fetch ${model.modelName}: ${error.message}`,
151
- error
152
- );
153
- }
154
- }
155
- getPrimaryKeyName(_model) {
156
- return "_id";
157
- }
158
- isValidModel(model) {
159
- if (!model || typeof model !== "function") {
160
- return false;
161
- }
162
- const m = model;
163
- return typeof m.findOne === "function" && typeof m.modelName === "string" && m.schema !== void 0;
164
- }
165
- transformValue(model, key, value) {
166
- if (key === "_id" || key === "id") {
167
- if (isObjectId(value)) {
168
- try {
169
- const mongoose = __require("mongoose");
170
- return new mongoose.Types.ObjectId(value);
171
- } catch {
172
- return value;
173
- }
174
- }
175
- return value;
176
- }
177
- const schemaType = model.schema.path(key);
178
- if (isSchemaPathType(schemaType) && schemaType.instance === "Number") {
179
- const num = parseInt(value, 10);
180
- if (!isNaN(num)) {
181
- return num;
182
- }
183
- }
184
- return value;
185
- }
186
- supportsSoftDeletes(model) {
187
- const schema = model.schema;
188
- return schema.path("deleted") !== void 0 || schema.path("deletedAt") !== void 0 || schema.path("isDeleted") !== void 0;
189
- }
190
- getModelMetadata(model) {
191
- const schema = model.schema;
192
- const paths = Object.keys(schema.paths);
193
- return {
194
- name: model.modelName,
195
- primaryKey: "_id",
196
- tableName: model.collection.name,
197
- softDeletes: this.supportsSoftDeletes(model),
198
- fields: paths,
199
- adapter: this.name
200
- };
201
- }
202
- applyIncludes(query, includes) {
203
- if (Array.isArray(includes)) {
204
- includes.forEach((relation) => {
205
- query = query.populate(relation);
206
- });
207
- } else {
208
- Object.entries(includes).forEach(([relation, options]) => {
209
- if (typeof options === "boolean" && options) {
210
- query = query.populate(relation);
211
- } else if (typeof options === "object" && options !== null) {
212
- query = query.populate({
213
- path: relation,
214
- ...options
215
- });
216
- }
217
- });
218
- }
219
- return query;
220
- }
221
- };
222
- export {
223
- MongooseAdapter
224
- };
225
- //# sourceMappingURL=MongooseAdapter.mjs.map
1
+ export{a as MongooseAdapter}from'../chunk-B3DBSP2J.mjs';import'../chunk-DBYMXDVA.mjs';
@@ -1,4 +1,4 @@
1
- import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-BjvLQijd.mjs';
1
+ import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-Dr9a8ZUY.mjs';
2
2
  import 'express';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-BjvLQijd.js';
1
+ import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-Dr9a8ZUY.js';
2
2
  import 'express';
3
3
 
4
4
  /**