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,247 +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/PrismaAdapter.ts
21
- var PrismaAdapter_exports = {};
22
- __export(PrismaAdapter_exports, {
23
- PrismaAdapter: () => PrismaAdapter
24
- });
25
- module.exports = __toCommonJS(PrismaAdapter_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 UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
123
- function isUUID(value) {
124
- return UUID_REGEX.test(value);
125
- }
126
-
127
- // src/adapters/PrismaAdapter.ts
128
- var PrismaAdapter = class extends BaseAdapter {
129
- constructor(prisma) {
130
- super();
131
- this.prisma = prisma;
132
- this.name = "prisma";
133
- }
134
- getPrisma() {
135
- return this.prisma;
136
- }
137
- async findByKey(modelName, key, value, options = {}) {
138
- this.validateModel(modelName);
139
- try {
140
- const model = this.prisma[modelName];
141
- if (!model) {
142
- throw new InvalidModelError(`Model '${modelName}' not found in Prisma schema`, modelName);
143
- }
144
- const transformedValue = this.transformValue(modelName, key, value);
145
- const queryOptions = {
146
- where: { [key]: transformedValue }
147
- };
148
- if (options.where) {
149
- queryOptions.where = {
150
- ...queryOptions.where,
151
- ...options.where
152
- };
153
- }
154
- if (options.select && options.select.length > 0) {
155
- queryOptions.select = options.select.reduce((acc, field) => {
156
- acc[field] = true;
157
- return acc;
158
- }, {});
159
- }
160
- if (options.include) {
161
- queryOptions.include = this.buildIncludeOptions(options.include);
162
- delete queryOptions.select;
163
- }
164
- if (options.query) {
165
- options.query(queryOptions);
166
- }
167
- let result = null;
168
- try {
169
- result = await model.findUnique(queryOptions);
170
- } catch {
171
- result = await model.findFirst(queryOptions);
172
- }
173
- if (!result && key !== this.getPrimaryKeyName(modelName)) {
174
- result = await model.findFirst(queryOptions);
175
- }
176
- return result;
177
- } catch (error) {
178
- if (error instanceof InvalidModelError) {
179
- throw error;
180
- }
181
- throw new BindingError(
182
- `Failed to fetch ${modelName}: ${error.message}`,
183
- error
184
- );
185
- }
186
- }
187
- getPrimaryKeyName(_modelName) {
188
- return "id";
189
- }
190
- isValidModel(modelName) {
191
- if (typeof modelName !== "string") {
192
- return false;
193
- }
194
- if (modelName.startsWith("$")) {
195
- return false;
196
- }
197
- return !!this.prisma[modelName];
198
- }
199
- transformValue(_modelName, key, value) {
200
- if (key === "id" || key.endsWith("Id")) {
201
- const num = parseInt(value, 10);
202
- if (!isNaN(num) && num.toString() === value && Number.isSafeInteger(num)) {
203
- return num;
204
- }
205
- }
206
- if (isUUID(value)) {
207
- return value;
208
- }
209
- return value;
210
- }
211
- supportsSoftDeletes(_modelName) {
212
- return false;
213
- }
214
- getModelMetadata(modelName) {
215
- return {
216
- name: modelName,
217
- primaryKey: this.getPrimaryKeyName(modelName),
218
- softDeletes: false,
219
- adapter: this.name
220
- };
221
- }
222
- buildIncludeOptions(includes) {
223
- if (Array.isArray(includes)) {
224
- return includes.reduce((acc, relation) => {
225
- acc[relation] = true;
226
- return acc;
227
- }, {});
228
- }
229
- return Object.entries(includes).reduce((acc, [relation, opts]) => {
230
- if (typeof opts === "boolean") {
231
- acc[relation] = opts;
232
- } else if (typeof opts === "object" && opts !== null) {
233
- const nestedOpts = opts;
234
- acc[relation] = {
235
- ...nestedOpts,
236
- include: nestedOpts.include ? this.buildIncludeOptions(nestedOpts.include) : void 0
237
- };
238
- }
239
- return acc;
240
- }, {});
241
- }
242
- };
243
- // Annotate the CommonJS export names for ESM import in node:
244
- 0 && (module.exports = {
245
- PrismaAdapter
246
- });
247
- //# sourceMappingURL=PrismaAdapter.js.map
1
+ 'use strict';var chunkOKPAWWZN_js=require('../chunk-OKPAWWZN.js');require('../chunk-7I3EYD6K.js');Object.defineProperty(exports,"PrismaAdapter",{enumerable:true,get:function(){return chunkOKPAWWZN_js.a}});
@@ -1,220 +1 @@
1
- // src/errors/index.ts
2
- var BindingError = class extends Error {
3
- constructor(message, originalError) {
4
- super(message);
5
- this.name = "BindingError";
6
- this.originalError = originalError;
7
- Error.captureStackTrace(this, this.constructor);
8
- }
9
- toJSON() {
10
- return {
11
- name: this.name,
12
- message: this.message,
13
- originalError: this.originalError?.message
14
- };
15
- }
16
- };
17
- var InvalidModelError = class extends Error {
18
- constructor(message, model) {
19
- super(message);
20
- this.name = "InvalidModelError";
21
- this.model = model;
22
- Error.captureStackTrace(this, this.constructor);
23
- }
24
- toJSON() {
25
- return {
26
- name: this.name,
27
- message: this.message,
28
- model: typeof this.model === "string" ? this.model : String(this.model)
29
- };
30
- }
31
- };
32
-
33
- // src/core/BaseAdapter.ts
34
- var BaseAdapter = class {
35
- transformValue(_model, _key, value) {
36
- if (/^\d+$/.test(value)) {
37
- const num = parseInt(value, 10);
38
- if (!isNaN(num) && Number.isSafeInteger(num)) {
39
- return num;
40
- }
41
- }
42
- return value;
43
- }
44
- supportsSoftDeletes(_model) {
45
- return false;
46
- }
47
- getModelMetadata(model) {
48
- return {
49
- name: this.getModelName(model),
50
- primaryKey: this.getPrimaryKeyName(model),
51
- softDeletes: this.supportsSoftDeletes(model),
52
- adapter: this.name
53
- };
54
- }
55
- validateModel(model) {
56
- if (!this.isValidModel(model)) {
57
- throw new InvalidModelError(`Invalid model for ${this.name} adapter`, model);
58
- }
59
- }
60
- getModelName(model) {
61
- if (typeof model === "string") {
62
- return model;
63
- }
64
- if (model && typeof model === "object") {
65
- const obj = model;
66
- if (typeof obj.name === "string") return obj.name;
67
- if (typeof obj.modelName === "string") return obj.modelName;
68
- if (typeof obj.tableName === "string") return obj.tableName;
69
- }
70
- if (model && typeof model === "function") {
71
- return model.name || "Unknown";
72
- }
73
- return "Unknown";
74
- }
75
- applySoftDeleteFilter(queryBuilder, _options) {
76
- return queryBuilder;
77
- }
78
- applyIncludes(queryBuilder, _includes) {
79
- return queryBuilder;
80
- }
81
- applySelect(queryBuilder, _select) {
82
- return queryBuilder;
83
- }
84
- applyWhereConditions(queryBuilder, _where) {
85
- return queryBuilder;
86
- }
87
- applyCustomQuery(queryBuilder, queryFn) {
88
- if (queryFn) {
89
- return queryFn(queryBuilder);
90
- }
91
- return queryBuilder;
92
- }
93
- };
94
-
95
- // src/utils/validators.ts
96
- var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
97
- function isUUID(value) {
98
- return UUID_REGEX.test(value);
99
- }
100
-
101
- // src/adapters/PrismaAdapter.ts
102
- var PrismaAdapter = class extends BaseAdapter {
103
- constructor(prisma) {
104
- super();
105
- this.prisma = prisma;
106
- this.name = "prisma";
107
- }
108
- getPrisma() {
109
- return this.prisma;
110
- }
111
- async findByKey(modelName, key, value, options = {}) {
112
- this.validateModel(modelName);
113
- try {
114
- const model = this.prisma[modelName];
115
- if (!model) {
116
- throw new InvalidModelError(`Model '${modelName}' not found in Prisma schema`, modelName);
117
- }
118
- const transformedValue = this.transformValue(modelName, key, value);
119
- const queryOptions = {
120
- where: { [key]: transformedValue }
121
- };
122
- if (options.where) {
123
- queryOptions.where = {
124
- ...queryOptions.where,
125
- ...options.where
126
- };
127
- }
128
- if (options.select && options.select.length > 0) {
129
- queryOptions.select = options.select.reduce((acc, field) => {
130
- acc[field] = true;
131
- return acc;
132
- }, {});
133
- }
134
- if (options.include) {
135
- queryOptions.include = this.buildIncludeOptions(options.include);
136
- delete queryOptions.select;
137
- }
138
- if (options.query) {
139
- options.query(queryOptions);
140
- }
141
- let result = null;
142
- try {
143
- result = await model.findUnique(queryOptions);
144
- } catch {
145
- result = await model.findFirst(queryOptions);
146
- }
147
- if (!result && key !== this.getPrimaryKeyName(modelName)) {
148
- result = await model.findFirst(queryOptions);
149
- }
150
- return result;
151
- } catch (error) {
152
- if (error instanceof InvalidModelError) {
153
- throw error;
154
- }
155
- throw new BindingError(
156
- `Failed to fetch ${modelName}: ${error.message}`,
157
- error
158
- );
159
- }
160
- }
161
- getPrimaryKeyName(_modelName) {
162
- return "id";
163
- }
164
- isValidModel(modelName) {
165
- if (typeof modelName !== "string") {
166
- return false;
167
- }
168
- if (modelName.startsWith("$")) {
169
- return false;
170
- }
171
- return !!this.prisma[modelName];
172
- }
173
- transformValue(_modelName, key, value) {
174
- if (key === "id" || key.endsWith("Id")) {
175
- const num = parseInt(value, 10);
176
- if (!isNaN(num) && num.toString() === value && Number.isSafeInteger(num)) {
177
- return num;
178
- }
179
- }
180
- if (isUUID(value)) {
181
- return value;
182
- }
183
- return value;
184
- }
185
- supportsSoftDeletes(_modelName) {
186
- return false;
187
- }
188
- getModelMetadata(modelName) {
189
- return {
190
- name: modelName,
191
- primaryKey: this.getPrimaryKeyName(modelName),
192
- softDeletes: false,
193
- adapter: this.name
194
- };
195
- }
196
- buildIncludeOptions(includes) {
197
- if (Array.isArray(includes)) {
198
- return includes.reduce((acc, relation) => {
199
- acc[relation] = true;
200
- return acc;
201
- }, {});
202
- }
203
- return Object.entries(includes).reduce((acc, [relation, opts]) => {
204
- if (typeof opts === "boolean") {
205
- acc[relation] = opts;
206
- } else if (typeof opts === "object" && opts !== null) {
207
- const nestedOpts = opts;
208
- acc[relation] = {
209
- ...nestedOpts,
210
- include: nestedOpts.include ? this.buildIncludeOptions(nestedOpts.include) : void 0
211
- };
212
- }
213
- return acc;
214
- }, {});
215
- }
216
- };
217
- export {
218
- PrismaAdapter
219
- };
220
- //# sourceMappingURL=PrismaAdapter.mjs.map
1
+ export{a as PrismaAdapter}from'../chunk-LLYCNTZ7.mjs';import'../chunk-DBYMXDVA.mjs';
@@ -1,5 +1,5 @@
1
1
  import { ModelStatic, Model, FindOptions, Sequelize } from 'sequelize';
2
- import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-BjvLQijd.mjs';
2
+ import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-Dr9a8ZUY.mjs';
3
3
  import 'express';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { ModelStatic, Model, FindOptions, Sequelize } from 'sequelize';
2
- import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-BjvLQijd.js';
2
+ import { b as BaseAdapter, Q as QueryOptions, d as ModelMetadata } from '../BaseAdapter-Dr9a8ZUY.js';
3
3
  import 'express';
4
4
 
5
5
  /**