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