@orchestr-sh/orchestr 1.0.1 → 1.1.1
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/dist/Database/Adapters/DrizzleAdapter.d.ts +119 -0
- package/dist/Database/Adapters/DrizzleAdapter.d.ts.map +1 -0
- package/dist/Database/Adapters/DrizzleAdapter.js +384 -0
- package/dist/Database/Adapters/DrizzleAdapter.js.map +1 -0
- package/dist/Database/Connection.d.ts +103 -0
- package/dist/Database/Connection.d.ts.map +1 -0
- package/dist/Database/Connection.js +164 -0
- package/dist/Database/Connection.js.map +1 -0
- package/dist/Database/Contracts/DatabaseAdapter.d.ts +85 -0
- package/dist/Database/Contracts/DatabaseAdapter.d.ts.map +1 -0
- package/dist/Database/Contracts/DatabaseAdapter.js +9 -0
- package/dist/Database/Contracts/DatabaseAdapter.js.map +1 -0
- package/dist/Database/Contracts/QueryBuilderInterface.d.ts +196 -0
- package/dist/Database/Contracts/QueryBuilderInterface.d.ts.map +1 -0
- package/dist/Database/Contracts/QueryBuilderInterface.js +8 -0
- package/dist/Database/Contracts/QueryBuilderInterface.js.map +1 -0
- package/dist/Database/Contracts/Schema.d.ts +234 -0
- package/dist/Database/Contracts/Schema.d.ts.map +1 -0
- package/dist/Database/Contracts/Schema.js +8 -0
- package/dist/Database/Contracts/Schema.js.map +1 -0
- package/dist/Database/DatabaseManager.d.ts +61 -0
- package/dist/Database/DatabaseManager.d.ts.map +1 -0
- package/dist/Database/DatabaseManager.js +102 -0
- package/dist/Database/DatabaseManager.js.map +1 -0
- package/dist/Database/DatabaseServiceProvider.d.ts +17 -0
- package/dist/Database/DatabaseServiceProvider.d.ts.map +1 -0
- package/dist/Database/DatabaseServiceProvider.js +44 -0
- package/dist/Database/DatabaseServiceProvider.js.map +1 -0
- package/dist/Database/Eloquent/Builder.d.ts +76 -0
- package/dist/Database/Eloquent/Builder.d.ts.map +1 -0
- package/dist/Database/Eloquent/Builder.js +154 -0
- package/dist/Database/Eloquent/Builder.js.map +1 -0
- package/dist/Database/Eloquent/Collection.d.ts +137 -0
- package/dist/Database/Eloquent/Collection.d.ts.map +1 -0
- package/dist/Database/Eloquent/Collection.js +284 -0
- package/dist/Database/Eloquent/Collection.js.map +1 -0
- package/dist/Database/Eloquent/Concerns/HasAttributes.d.ts +44 -0
- package/dist/Database/Eloquent/Concerns/HasAttributes.d.ts.map +1 -0
- package/dist/Database/Eloquent/Concerns/HasAttributes.js +8 -0
- package/dist/Database/Eloquent/Concerns/HasAttributes.js.map +1 -0
- package/dist/Database/Eloquent/Concerns/HasTimestamps.d.ts +41 -0
- package/dist/Database/Eloquent/Concerns/HasTimestamps.d.ts.map +1 -0
- package/dist/Database/Eloquent/Concerns/HasTimestamps.js +14 -0
- package/dist/Database/Eloquent/Concerns/HasTimestamps.js.map +1 -0
- package/dist/Database/Eloquent/Model.d.ts +265 -0
- package/dist/Database/Eloquent/Model.d.ts.map +1 -0
- package/dist/Database/Eloquent/Model.js +523 -0
- package/dist/Database/Eloquent/Model.js.map +1 -0
- package/dist/Database/Eloquent/SoftDeletes.d.ts +41 -0
- package/dist/Database/Eloquent/SoftDeletes.d.ts.map +1 -0
- package/dist/Database/Eloquent/SoftDeletes.js +22 -0
- package/dist/Database/Eloquent/SoftDeletes.js.map +1 -0
- package/dist/Database/Ensemble/Concerns/HasAttributes.d.ts +44 -0
- package/dist/Database/Ensemble/Concerns/HasAttributes.d.ts.map +1 -0
- package/dist/Database/Ensemble/Concerns/HasAttributes.js +8 -0
- package/dist/Database/Ensemble/Concerns/HasAttributes.js.map +1 -0
- package/dist/Database/Ensemble/Concerns/HasTimestamps.d.ts +41 -0
- package/dist/Database/Ensemble/Concerns/HasTimestamps.d.ts.map +1 -0
- package/dist/Database/Ensemble/Concerns/HasTimestamps.js +14 -0
- package/dist/Database/Ensemble/Concerns/HasTimestamps.js.map +1 -0
- package/dist/Database/Ensemble/Ensemble.d.ts +266 -0
- package/dist/Database/Ensemble/Ensemble.d.ts.map +1 -0
- package/dist/Database/Ensemble/Ensemble.js +524 -0
- package/dist/Database/Ensemble/Ensemble.js.map +1 -0
- package/dist/Database/Ensemble/EnsembleBuilder.d.ts +76 -0
- package/dist/Database/Ensemble/EnsembleBuilder.d.ts.map +1 -0
- package/dist/Database/Ensemble/EnsembleBuilder.js +154 -0
- package/dist/Database/Ensemble/EnsembleBuilder.js.map +1 -0
- package/dist/Database/Ensemble/EnsembleCollection.d.ts +137 -0
- package/dist/Database/Ensemble/EnsembleCollection.d.ts.map +1 -0
- package/dist/Database/Ensemble/EnsembleCollection.js +284 -0
- package/dist/Database/Ensemble/EnsembleCollection.js.map +1 -0
- package/dist/Database/Ensemble/SoftDeletes.d.ts +41 -0
- package/dist/Database/Ensemble/SoftDeletes.d.ts.map +1 -0
- package/dist/Database/Ensemble/SoftDeletes.js +22 -0
- package/dist/Database/Ensemble/SoftDeletes.js.map +1 -0
- package/dist/Database/Query/Builder.d.ts +219 -0
- package/dist/Database/Query/Builder.d.ts.map +1 -0
- package/dist/Database/Query/Builder.js +554 -0
- package/dist/Database/Query/Builder.js.map +1 -0
- package/dist/Database/Query/Expression.d.ts +22 -0
- package/dist/Database/Query/Expression.d.ts.map +1 -0
- package/dist/Database/Query/Expression.js +35 -0
- package/dist/Database/Query/Expression.js.map +1 -0
- package/dist/Facades/DB.d.ts +7 -0
- package/dist/Facades/DB.d.ts.map +1 -0
- package/dist/Facades/DB.js +42 -0
- package/dist/Facades/DB.js.map +1 -0
- package/dist/Facades/Route.d.ts +1 -1
- package/dist/Facades/Route.d.ts.map +1 -1
- package/dist/Facades/Route.js.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/package.json +13 -5
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Model Class
|
|
4
|
+
*
|
|
5
|
+
* Base class for Eloquent models with ActiveRecord pattern
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Model = void 0;
|
|
9
|
+
const Builder_1 = require("./Builder");
|
|
10
|
+
class Model {
|
|
11
|
+
/**
|
|
12
|
+
* The connection resolver instance
|
|
13
|
+
*/
|
|
14
|
+
static connectionResolver;
|
|
15
|
+
/**
|
|
16
|
+
* The table associated with the model
|
|
17
|
+
*/
|
|
18
|
+
table;
|
|
19
|
+
/**
|
|
20
|
+
* The primary key for the model
|
|
21
|
+
*/
|
|
22
|
+
primaryKey = 'id';
|
|
23
|
+
/**
|
|
24
|
+
* Indicates if the IDs are auto-incrementing
|
|
25
|
+
*/
|
|
26
|
+
incrementing = true;
|
|
27
|
+
/**
|
|
28
|
+
* The data type of the primary key
|
|
29
|
+
*/
|
|
30
|
+
keyType = 'int';
|
|
31
|
+
/**
|
|
32
|
+
* The attributes that are mass assignable
|
|
33
|
+
*/
|
|
34
|
+
fillable = [];
|
|
35
|
+
/**
|
|
36
|
+
* The attributes that aren't mass assignable
|
|
37
|
+
*/
|
|
38
|
+
guarded = ['*'];
|
|
39
|
+
/**
|
|
40
|
+
* The attributes that should be hidden for serialization
|
|
41
|
+
*/
|
|
42
|
+
hidden = [];
|
|
43
|
+
/**
|
|
44
|
+
* The attributes that should be visible for serialization
|
|
45
|
+
*/
|
|
46
|
+
visible = [];
|
|
47
|
+
/**
|
|
48
|
+
* The accessors to append to the model's array form
|
|
49
|
+
*/
|
|
50
|
+
appends = [];
|
|
51
|
+
/**
|
|
52
|
+
* The attributes that should be cast
|
|
53
|
+
*/
|
|
54
|
+
casts = {};
|
|
55
|
+
/**
|
|
56
|
+
* Indicates if the model should be timestamped
|
|
57
|
+
*/
|
|
58
|
+
timestamps = true;
|
|
59
|
+
/**
|
|
60
|
+
* The name of the "created at" column
|
|
61
|
+
*/
|
|
62
|
+
static CREATED_AT = 'created_at';
|
|
63
|
+
/**
|
|
64
|
+
* The name of the "updated at" column
|
|
65
|
+
*/
|
|
66
|
+
static UPDATED_AT = 'updated_at';
|
|
67
|
+
/**
|
|
68
|
+
* The name of the "deleted at" column (for soft deletes)
|
|
69
|
+
*/
|
|
70
|
+
static DELETED_AT = 'deleted_at';
|
|
71
|
+
/**
|
|
72
|
+
* The model's attributes
|
|
73
|
+
*/
|
|
74
|
+
attributes = {};
|
|
75
|
+
/**
|
|
76
|
+
* The model's original attributes
|
|
77
|
+
*/
|
|
78
|
+
original = {};
|
|
79
|
+
/**
|
|
80
|
+
* Indicates if the model exists in the database
|
|
81
|
+
*/
|
|
82
|
+
exists = false;
|
|
83
|
+
/**
|
|
84
|
+
* Indicates if the model was inserted during this request
|
|
85
|
+
*/
|
|
86
|
+
wasRecentlyCreated = false;
|
|
87
|
+
/**
|
|
88
|
+
* The connection name for the model
|
|
89
|
+
*/
|
|
90
|
+
connection;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new Eloquent model instance
|
|
93
|
+
*/
|
|
94
|
+
constructor(attributes = {}) {
|
|
95
|
+
this.fill(attributes);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Fill the model with an array of attributes
|
|
99
|
+
*/
|
|
100
|
+
fill(attributes) {
|
|
101
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
102
|
+
if (this.isFillable(key)) {
|
|
103
|
+
this.setAttribute(key, value);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Set a given attribute on the model
|
|
110
|
+
*/
|
|
111
|
+
setAttribute(key, value) {
|
|
112
|
+
// Check for mutator
|
|
113
|
+
const mutator = `set${this.studly(key)}Attribute`;
|
|
114
|
+
if (typeof this[mutator] === 'function') {
|
|
115
|
+
this[mutator](value);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
this.attributes[key] = value;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get an attribute from the model
|
|
123
|
+
*/
|
|
124
|
+
getAttribute(key) {
|
|
125
|
+
if (!key) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
// Check if we have an accessor
|
|
129
|
+
const accessor = `get${this.studly(key)}Attribute`;
|
|
130
|
+
if (typeof this[accessor] === 'function') {
|
|
131
|
+
return this[accessor]();
|
|
132
|
+
}
|
|
133
|
+
// Get the attribute value
|
|
134
|
+
const value = this.attributes[key];
|
|
135
|
+
// Cast the attribute if needed
|
|
136
|
+
if (this.hasCast(key)) {
|
|
137
|
+
return this.castAttribute(key, value);
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Determine if the given attribute may be mass assigned
|
|
143
|
+
*/
|
|
144
|
+
isFillable(key) {
|
|
145
|
+
if (this.fillable.length > 0) {
|
|
146
|
+
return this.fillable.includes(key);
|
|
147
|
+
}
|
|
148
|
+
if (this.guarded.length > 0 && !this.guarded.includes('*')) {
|
|
149
|
+
return !this.guarded.includes(key);
|
|
150
|
+
}
|
|
151
|
+
return this.guarded[0] !== '*';
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Determine if a get mutator exists for an attribute
|
|
155
|
+
*/
|
|
156
|
+
hasGetMutator(key) {
|
|
157
|
+
return typeof this[`get${this.studly(key)}Attribute`] === 'function';
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Determine if a set mutator exists for an attribute
|
|
161
|
+
*/
|
|
162
|
+
hasSetMutator(key) {
|
|
163
|
+
return typeof this[`set${this.studly(key)}Attribute`] === 'function';
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Determine if a cast is defined for an attribute
|
|
167
|
+
*/
|
|
168
|
+
hasCast(key) {
|
|
169
|
+
return key in this.casts;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Cast an attribute to a native PHP type
|
|
173
|
+
*/
|
|
174
|
+
castAttribute(key, value) {
|
|
175
|
+
if (value === null) {
|
|
176
|
+
return value;
|
|
177
|
+
}
|
|
178
|
+
const castType = this.casts[key];
|
|
179
|
+
switch (castType) {
|
|
180
|
+
case 'int':
|
|
181
|
+
case 'integer':
|
|
182
|
+
return parseInt(value);
|
|
183
|
+
case 'real':
|
|
184
|
+
case 'float':
|
|
185
|
+
case 'double':
|
|
186
|
+
return parseFloat(value);
|
|
187
|
+
case 'string':
|
|
188
|
+
return String(value);
|
|
189
|
+
case 'bool':
|
|
190
|
+
case 'boolean':
|
|
191
|
+
return Boolean(value);
|
|
192
|
+
case 'object':
|
|
193
|
+
return typeof value === 'string' ? JSON.parse(value) : value;
|
|
194
|
+
case 'array':
|
|
195
|
+
case 'json':
|
|
196
|
+
return typeof value === 'string' ? JSON.parse(value) : value;
|
|
197
|
+
case 'collection':
|
|
198
|
+
return typeof value === 'string' ? JSON.parse(value) : value;
|
|
199
|
+
case 'date':
|
|
200
|
+
case 'datetime':
|
|
201
|
+
case 'timestamp':
|
|
202
|
+
return value instanceof Date ? value : new Date(value);
|
|
203
|
+
default:
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Convert the model to a plain object
|
|
209
|
+
*/
|
|
210
|
+
toObject() {
|
|
211
|
+
const attributes = {};
|
|
212
|
+
for (const key of Object.keys(this.attributes)) {
|
|
213
|
+
if (this.isVisible(key)) {
|
|
214
|
+
attributes[key] = this.getAttribute(key);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Add appended accessors
|
|
218
|
+
for (const key of this.appends) {
|
|
219
|
+
attributes[key] = this.getAttribute(key);
|
|
220
|
+
}
|
|
221
|
+
return attributes;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Convert the model to JSON
|
|
225
|
+
*/
|
|
226
|
+
toJSON() {
|
|
227
|
+
return this.toObject();
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Determine if an attribute is visible
|
|
231
|
+
*/
|
|
232
|
+
isVisible(key) {
|
|
233
|
+
if (this.visible.length > 0) {
|
|
234
|
+
return this.visible.includes(key);
|
|
235
|
+
}
|
|
236
|
+
return !this.hidden.includes(key);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get the table associated with the model
|
|
240
|
+
*/
|
|
241
|
+
getTable() {
|
|
242
|
+
if (this.table) {
|
|
243
|
+
return this.table;
|
|
244
|
+
}
|
|
245
|
+
// Convert class name to snake_case plural
|
|
246
|
+
// e.g., User -> users, BlogPost -> blog_posts
|
|
247
|
+
const className = this.constructor.name;
|
|
248
|
+
return this.pluralize(this.snake(className));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get the primary key for the model
|
|
252
|
+
*/
|
|
253
|
+
getKeyName() {
|
|
254
|
+
return this.primaryKey;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get the value of the model's primary key
|
|
258
|
+
*/
|
|
259
|
+
getKey() {
|
|
260
|
+
return this.getAttribute(this.getKeyName());
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Set the connection resolver instance
|
|
264
|
+
*/
|
|
265
|
+
static setConnectionResolver(resolver) {
|
|
266
|
+
Model.connectionResolver = resolver;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get the database connection for the model
|
|
270
|
+
*/
|
|
271
|
+
getConnection() {
|
|
272
|
+
return this.constructor.connectionResolver.connection(this.connection);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Begin querying the model
|
|
276
|
+
*/
|
|
277
|
+
static query() {
|
|
278
|
+
const instance = new this();
|
|
279
|
+
return new Builder_1.Builder(instance.getConnection().getAdapter(), instance);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get all of the models from the database
|
|
283
|
+
*/
|
|
284
|
+
static async all(columns = ['*']) {
|
|
285
|
+
return this.query().select(...columns).get();
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Find a model by its primary key
|
|
289
|
+
*/
|
|
290
|
+
static async find(id, columns = ['*']) {
|
|
291
|
+
return this.query().select(...columns).find(id);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Find a model by its primary key or throw an exception
|
|
295
|
+
*/
|
|
296
|
+
static async findOrFail(id, columns = ['*']) {
|
|
297
|
+
const model = await this.find(id, columns);
|
|
298
|
+
if (!model) {
|
|
299
|
+
throw new Error(`Model not found with id: ${id}`);
|
|
300
|
+
}
|
|
301
|
+
return model;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Find multiple models by their primary keys
|
|
305
|
+
*/
|
|
306
|
+
static async findMany(ids, columns = ['*']) {
|
|
307
|
+
const instance = new this();
|
|
308
|
+
return this.query().select(...columns).whereIn(instance.getKeyName(), ids).get();
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Create a new instance and save it to the database
|
|
312
|
+
*/
|
|
313
|
+
static async create(attributes) {
|
|
314
|
+
const instance = new this(attributes);
|
|
315
|
+
await instance.save();
|
|
316
|
+
return instance;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Update or create a model matching the attributes
|
|
320
|
+
*/
|
|
321
|
+
static async updateOrCreate(attributes, values = {}) {
|
|
322
|
+
const instance = await this.query().where(attributes).first();
|
|
323
|
+
if (instance) {
|
|
324
|
+
instance.fill(values);
|
|
325
|
+
await instance.save();
|
|
326
|
+
return instance;
|
|
327
|
+
}
|
|
328
|
+
return this.create({ ...attributes, ...values });
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Save the model to the database
|
|
332
|
+
*/
|
|
333
|
+
async save() {
|
|
334
|
+
if (this.exists) {
|
|
335
|
+
return this.performUpdate();
|
|
336
|
+
}
|
|
337
|
+
return this.performInsert();
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Perform a model insert operation
|
|
341
|
+
*/
|
|
342
|
+
async performInsert() {
|
|
343
|
+
const attributes = this.getAttributesForInsert();
|
|
344
|
+
if (this.timestamps) {
|
|
345
|
+
this.updateTimestamps();
|
|
346
|
+
}
|
|
347
|
+
const connection = this.getConnection();
|
|
348
|
+
const table = this.getTable();
|
|
349
|
+
const id = await connection.table(table).insertGetId(attributes);
|
|
350
|
+
if (this.incrementing) {
|
|
351
|
+
this.setAttribute(this.getKeyName(), id);
|
|
352
|
+
}
|
|
353
|
+
this.exists = true;
|
|
354
|
+
this.wasRecentlyCreated = true;
|
|
355
|
+
this.syncOriginal();
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Perform a model update operation
|
|
360
|
+
*/
|
|
361
|
+
async performUpdate() {
|
|
362
|
+
const dirty = this.getDirty();
|
|
363
|
+
if (Object.keys(dirty).length === 0) {
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
if (this.timestamps) {
|
|
367
|
+
this.updateTimestamps();
|
|
368
|
+
}
|
|
369
|
+
const connection = this.getConnection();
|
|
370
|
+
const table = this.getTable();
|
|
371
|
+
await connection
|
|
372
|
+
.table(table)
|
|
373
|
+
.where(this.getKeyName(), '=', this.getKey())
|
|
374
|
+
.update(dirty);
|
|
375
|
+
this.syncOriginal();
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Update the model's timestamps
|
|
380
|
+
*/
|
|
381
|
+
updateTimestamps() {
|
|
382
|
+
const time = new Date();
|
|
383
|
+
const updatedAtColumn = this.constructor.UPDATED_AT;
|
|
384
|
+
if (updatedAtColumn && !this.isDirty(updatedAtColumn)) {
|
|
385
|
+
this.setAttribute(updatedAtColumn, time);
|
|
386
|
+
}
|
|
387
|
+
const createdAtColumn = this.constructor.CREATED_AT;
|
|
388
|
+
if (!this.exists && createdAtColumn && !this.isDirty(createdAtColumn)) {
|
|
389
|
+
this.setAttribute(createdAtColumn, time);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get the attributes that have been changed
|
|
394
|
+
*/
|
|
395
|
+
getDirty() {
|
|
396
|
+
const dirty = {};
|
|
397
|
+
for (const [key, value] of Object.entries(this.attributes)) {
|
|
398
|
+
if (!this.originalIsEquivalent(key, value)) {
|
|
399
|
+
dirty[key] = value;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return dirty;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Determine if the given attribute has been changed
|
|
406
|
+
*/
|
|
407
|
+
isDirty(attribute) {
|
|
408
|
+
if (!attribute) {
|
|
409
|
+
return Object.keys(this.getDirty()).length > 0;
|
|
410
|
+
}
|
|
411
|
+
return attribute in this.getDirty();
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Determine if the original value is equivalent to the current value
|
|
415
|
+
*/
|
|
416
|
+
originalIsEquivalent(key, current) {
|
|
417
|
+
if (!(key in this.original)) {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
const original = this.original[key];
|
|
421
|
+
if (current === original) {
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
if (current === null) {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
if (this.isDateAttribute(key)) {
|
|
428
|
+
return this.compareDates(current, original);
|
|
429
|
+
}
|
|
430
|
+
return String(current) === String(original);
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Determine if the given attribute is a date or date castable
|
|
434
|
+
*/
|
|
435
|
+
isDateAttribute(key) {
|
|
436
|
+
const cast = this.casts[key];
|
|
437
|
+
return cast === 'date' || cast === 'datetime' || cast === 'timestamp';
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Compare two dates
|
|
441
|
+
*/
|
|
442
|
+
compareDates(current, original) {
|
|
443
|
+
const currentDate = current instanceof Date ? current : new Date(current);
|
|
444
|
+
const originalDate = original instanceof Date ? original : new Date(original);
|
|
445
|
+
return currentDate.getTime() === originalDate.getTime();
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Get the attributes for insert
|
|
449
|
+
*/
|
|
450
|
+
getAttributesForInsert() {
|
|
451
|
+
return { ...this.attributes };
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Sync the original attributes with the current
|
|
455
|
+
*/
|
|
456
|
+
syncOriginal() {
|
|
457
|
+
this.original = { ...this.attributes };
|
|
458
|
+
return this;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Delete the model from the database
|
|
462
|
+
*/
|
|
463
|
+
async delete() {
|
|
464
|
+
if (!this.exists) {
|
|
465
|
+
return false;
|
|
466
|
+
}
|
|
467
|
+
const connection = this.getConnection();
|
|
468
|
+
const table = this.getTable();
|
|
469
|
+
await connection
|
|
470
|
+
.table(table)
|
|
471
|
+
.where(this.getKeyName(), '=', this.getKey())
|
|
472
|
+
.delete();
|
|
473
|
+
this.exists = false;
|
|
474
|
+
return true;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Reload the current model instance from the database
|
|
478
|
+
*/
|
|
479
|
+
async refresh() {
|
|
480
|
+
if (!this.exists) {
|
|
481
|
+
return this;
|
|
482
|
+
}
|
|
483
|
+
const fresh = await this.constructor.find(this.getKey());
|
|
484
|
+
if (!fresh) {
|
|
485
|
+
throw new Error('Model not found');
|
|
486
|
+
}
|
|
487
|
+
this.attributes = fresh.attributes;
|
|
488
|
+
this.syncOriginal();
|
|
489
|
+
return this;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Convert a string to studly case
|
|
493
|
+
*/
|
|
494
|
+
studly(value) {
|
|
495
|
+
return value
|
|
496
|
+
.split('_')
|
|
497
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
498
|
+
.join('');
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Convert a string to snake case
|
|
502
|
+
*/
|
|
503
|
+
snake(value) {
|
|
504
|
+
return value
|
|
505
|
+
.replace(/([A-Z])/g, '_$1')
|
|
506
|
+
.toLowerCase()
|
|
507
|
+
.replace(/^_/, '');
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Pluralize a string (simple implementation)
|
|
511
|
+
*/
|
|
512
|
+
pluralize(value) {
|
|
513
|
+
if (value.endsWith('y')) {
|
|
514
|
+
return value.slice(0, -1) + 'ies';
|
|
515
|
+
}
|
|
516
|
+
if (value.endsWith('s')) {
|
|
517
|
+
return value + 'es';
|
|
518
|
+
}
|
|
519
|
+
return value + 's';
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
exports.Model = Model;
|
|
523
|
+
//# sourceMappingURL=Model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/Database/Eloquent/Model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SoftDeletes Interface
|
|
3
|
+
*
|
|
4
|
+
* Provides soft delete functionality for models
|
|
5
|
+
*/
|
|
6
|
+
export interface SoftDeletes {
|
|
7
|
+
/**
|
|
8
|
+
* Indicates if the model is currently force deleting
|
|
9
|
+
*/
|
|
10
|
+
forceDeleting: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Force a hard delete on a soft deleted model
|
|
13
|
+
*/
|
|
14
|
+
forceDelete(): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Restore a soft-deleted model instance
|
|
17
|
+
*/
|
|
18
|
+
restore(): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Determine if the model instance has been soft-deleted
|
|
21
|
+
*/
|
|
22
|
+
trashed(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get the name of the "deleted at" column
|
|
25
|
+
*/
|
|
26
|
+
getDeletedAtColumn(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Get the fully qualified "deleted at" column
|
|
29
|
+
*/
|
|
30
|
+
getQualifiedDeletedAtColumn(): string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Default deleted at column name
|
|
34
|
+
*/
|
|
35
|
+
export declare const DELETED_AT = "deleted_at";
|
|
36
|
+
/**
|
|
37
|
+
* Placeholder for soft deletes mixin
|
|
38
|
+
* TODO: Implement mixin pattern or use a trait-like approach
|
|
39
|
+
*/
|
|
40
|
+
export declare function softDeletes(): any;
|
|
41
|
+
//# sourceMappingURL=SoftDeletes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SoftDeletes.d.ts","sourceRoot":"","sources":["../../../src/Database/Eloquent/SoftDeletes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5B;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC;IAE7B;;OAEG;IACH,2BAA2B,IAAI,MAAM,CAAC;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,WAAW,IAAI,GAAG,CAGjC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SoftDeletes Interface
|
|
4
|
+
*
|
|
5
|
+
* Provides soft delete functionality for models
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DELETED_AT = void 0;
|
|
9
|
+
exports.softDeletes = softDeletes;
|
|
10
|
+
/**
|
|
11
|
+
* Default deleted at column name
|
|
12
|
+
*/
|
|
13
|
+
exports.DELETED_AT = 'deleted_at';
|
|
14
|
+
/**
|
|
15
|
+
* Placeholder for soft deletes mixin
|
|
16
|
+
* TODO: Implement mixin pattern or use a trait-like approach
|
|
17
|
+
*/
|
|
18
|
+
function softDeletes() {
|
|
19
|
+
console.warn('SoftDeletes mixin not yet implemented. Use interface for type checking.');
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=SoftDeletes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SoftDeletes.js","sourceRoot":"","sources":["../../../src/Database/Eloquent/SoftDeletes.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA2CH,kCAGC;AAZD;;GAEG;AACU,QAAA,UAAU,GAAG,YAAY,CAAC;AAEvC;;;GAGG;AACH,SAAgB,WAAW;IACzB,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HasAttributes Concern
|
|
3
|
+
*
|
|
4
|
+
* Provides attribute handling functionality for models
|
|
5
|
+
*/
|
|
6
|
+
export interface HasAttributes {
|
|
7
|
+
/**
|
|
8
|
+
* The model's attributes
|
|
9
|
+
*/
|
|
10
|
+
attributes: Record<string, any>;
|
|
11
|
+
/**
|
|
12
|
+
* The model's original attributes
|
|
13
|
+
*/
|
|
14
|
+
original: Record<string, any>;
|
|
15
|
+
/**
|
|
16
|
+
* The attributes that should be cast
|
|
17
|
+
*/
|
|
18
|
+
casts: Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* The attributes that should be hidden
|
|
21
|
+
*/
|
|
22
|
+
hidden: string[];
|
|
23
|
+
/**
|
|
24
|
+
* The attributes that should be visible
|
|
25
|
+
*/
|
|
26
|
+
visible: string[];
|
|
27
|
+
/**
|
|
28
|
+
* The accessors to append
|
|
29
|
+
*/
|
|
30
|
+
appends: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Cast types supported by the model
|
|
34
|
+
*/
|
|
35
|
+
export type CastType = 'int' | 'integer' | 'real' | 'float' | 'double' | 'decimal' | 'string' | 'bool' | 'boolean' | 'object' | 'array' | 'json' | 'collection' | 'date' | 'datetime' | 'timestamp';
|
|
36
|
+
/**
|
|
37
|
+
* Attribute mutator function type
|
|
38
|
+
*/
|
|
39
|
+
export type AttributeMutator = (value: any) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Attribute accessor function type
|
|
42
|
+
*/
|
|
43
|
+
export type AttributeAccessor = () => any;
|
|
44
|
+
//# sourceMappingURL=HasAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HasAttributes.d.ts","sourceRoot":"","sources":["../../../../src/Database/Ensemble/Concerns/HasAttributes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,KAAK,GACL,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,MAAM,GACN,YAAY,GACZ,MAAM,GACN,UAAU,GACV,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HasAttributes.js","sourceRoot":"","sources":["../../../../src/Database/Ensemble/Concerns/HasAttributes.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|