@stonyx/orm 0.3.2-beta.88 → 0.3.2-beta.89
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/orm-request.js +3 -3
- package/dist/store.d.ts +3 -1
- package/dist/store.js +4 -3
- package/package.json +1 -1
- package/src/orm-request.ts +3 -3
- package/src/store.ts +4 -3
package/dist/orm-request.js
CHANGED
|
@@ -289,7 +289,7 @@ export default class OrmRequest extends Request {
|
|
|
289
289
|
return { data: record.toJSON?.() };
|
|
290
290
|
};
|
|
291
291
|
const deleteHandler = ({ params }) => {
|
|
292
|
-
store.remove(model, getId(params));
|
|
292
|
+
store.remove(model, getId(params), { _skipAutoPersist: true });
|
|
293
293
|
return 204;
|
|
294
294
|
};
|
|
295
295
|
// Wrap handlers with hooks
|
|
@@ -352,9 +352,9 @@ export default class OrmRequest extends Request {
|
|
|
352
352
|
if (operation === 'update' && response?.data) {
|
|
353
353
|
context.record = store.get(this.model, getId(request.params));
|
|
354
354
|
}
|
|
355
|
-
// Persist to SQL database for create/update
|
|
355
|
+
// Persist to SQL database for all write operations (create/update/delete)
|
|
356
356
|
const sqlDb = Orm.instance.sqlDb;
|
|
357
|
-
if (sqlDb && (operation
|
|
357
|
+
if (sqlDb && WRITE_OPERATIONS.has(operation)) {
|
|
358
358
|
await sqlDb.persist(operation, this.model, context, response);
|
|
359
359
|
}
|
|
360
360
|
// Add response and relevant records to context
|
package/dist/store.d.ts
CHANGED
|
@@ -45,7 +45,9 @@ export default class Store {
|
|
|
45
45
|
*/
|
|
46
46
|
private _isMemoryModel;
|
|
47
47
|
set(key: string, value: Map<number | string, unknown>): void;
|
|
48
|
-
remove(key: string, id?: number | string
|
|
48
|
+
remove(key: string, id?: number | string, options?: {
|
|
49
|
+
_skipAutoPersist?: boolean;
|
|
50
|
+
}): void;
|
|
49
51
|
/**
|
|
50
52
|
* Evict a record from the store with full relationship registry cleanup,
|
|
51
53
|
* WITHOUT calling record.clean(). This preserves the caller's reference
|
package/dist/store.js
CHANGED
|
@@ -107,13 +107,14 @@ export default class Store {
|
|
|
107
107
|
set(key, value) {
|
|
108
108
|
this.data.set(key, value);
|
|
109
109
|
}
|
|
110
|
-
remove(key, id) {
|
|
110
|
+
remove(key, id, options) {
|
|
111
111
|
// Guard: read-only views cannot have records removed
|
|
112
112
|
if (Orm.instance?.isView?.(key)) {
|
|
113
113
|
throw new Error(`Cannot remove records from read-only view '${key}'`);
|
|
114
114
|
}
|
|
115
|
-
// Auto-persist delete to SQL
|
|
116
|
-
|
|
115
|
+
// Auto-persist delete to SQL (fire-and-forget) — skipped when the
|
|
116
|
+
// request path handles persist itself to avoid double-delete.
|
|
117
|
+
if (id && Orm.instance?.sqlDb && !options?._skipAutoPersist) {
|
|
117
118
|
Orm.instance.sqlDb.persist('delete', key, { recordId: id }, {}).catch((err) => {
|
|
118
119
|
Orm.instance.emitPersistError({
|
|
119
120
|
operation: 'delete',
|
package/package.json
CHANGED
package/src/orm-request.ts
CHANGED
|
@@ -376,7 +376,7 @@ export default class OrmRequest extends Request {
|
|
|
376
376
|
};
|
|
377
377
|
|
|
378
378
|
const deleteHandler: HandlerFn = ({ params }) => {
|
|
379
|
-
store.remove(model, getId(params));
|
|
379
|
+
store.remove(model, getId(params), { _skipAutoPersist: true });
|
|
380
380
|
return 204;
|
|
381
381
|
};
|
|
382
382
|
|
|
@@ -448,9 +448,9 @@ export default class OrmRequest extends Request {
|
|
|
448
448
|
context.record = store.get(this.model, getId(request.params));
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
-
// Persist to SQL database for create/update
|
|
451
|
+
// Persist to SQL database for all write operations (create/update/delete)
|
|
452
452
|
const sqlDb = Orm.instance.sqlDb;
|
|
453
|
-
if (sqlDb && (operation
|
|
453
|
+
if (sqlDb && WRITE_OPERATIONS.has(operation)) {
|
|
454
454
|
await sqlDb.persist(operation, this.model, context, response);
|
|
455
455
|
}
|
|
456
456
|
|
package/src/store.ts
CHANGED
|
@@ -170,14 +170,15 @@ export default class Store {
|
|
|
170
170
|
this.data.set(key, value);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
remove(key: string, id?: number | string): void {
|
|
173
|
+
remove(key: string, id?: number | string, options?: { _skipAutoPersist?: boolean }): void {
|
|
174
174
|
// Guard: read-only views cannot have records removed
|
|
175
175
|
if (Orm.instance?.isView?.(key)) {
|
|
176
176
|
throw new Error(`Cannot remove records from read-only view '${key}'`);
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
// Auto-persist delete to SQL
|
|
180
|
-
|
|
179
|
+
// Auto-persist delete to SQL (fire-and-forget) — skipped when the
|
|
180
|
+
// request path handles persist itself to avoid double-delete.
|
|
181
|
+
if (id && Orm.instance?.sqlDb && !options?._skipAutoPersist) {
|
|
181
182
|
Orm.instance.sqlDb.persist('delete', key, { recordId: id }, {}).catch((err: unknown) => {
|
|
182
183
|
Orm.instance.emitPersistError({
|
|
183
184
|
operation: 'delete',
|