remult 3.3.19-next.2 → 3.4.0-next.2

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 (58) hide show
  1. package/SseSubscriptionServer.d.ts +2 -0
  2. package/SseSubscriptionServer.js +4 -2
  3. package/esm/SseSubscriptionServer.js +3 -1
  4. package/esm/index.js +6 -7
  5. package/esm/live-query/data-provider-live-query-storage.js +3 -1
  6. package/esm/remult-d1.js +0 -1
  7. package/esm/remult-knex/index.js +2 -112
  8. package/esm/remult-mongo.js +8 -17
  9. package/esm/remult-sqlite-core.js +0 -1
  10. package/esm/server/remult-api-server.js +6 -1
  11. package/esm/src/data-api.js +1 -0
  12. package/esm/src/data-interfaces.js +4 -4
  13. package/esm/src/data-providers/array-entity-data-provider.js +2 -14
  14. package/esm/src/data-providers/json-data-provider.js +2 -2
  15. package/esm/src/data-providers/rest-data-provider.js +12 -11
  16. package/esm/src/data-providers/sql-database.js +43 -110
  17. package/esm/src/live-query/LiveQueryClient.js +163 -52
  18. package/esm/src/live-query/SseSubscriptionClient.js +101 -43
  19. package/esm/src/live-query/SubscriptionChannel.js +37 -3
  20. package/esm/src/live-query/SubscriptionServer.js +11 -3
  21. package/esm/src/remult3/RepositoryImplementation.js +60 -90
  22. package/esm/src/remult3/remult3.js +6 -0
  23. package/index.d.ts +17 -31
  24. package/index.js +2 -5
  25. package/live-query/data-provider-live-query-storage.d.ts +4 -1
  26. package/live-query/data-provider-live-query-storage.js +18 -15
  27. package/package.json +1 -1
  28. package/remult-d1.d.ts +0 -1
  29. package/remult-d1.js +0 -1
  30. package/remult-knex/index.js +44 -329
  31. package/remult-mongo.js +36 -80
  32. package/remult-sqlite-core.d.ts +0 -1
  33. package/remult-sqlite-core.js +0 -1
  34. package/server/remult-api-server.js +13 -9
  35. package/src/data-api.js +1 -0
  36. package/src/data-interfaces.d.ts +3 -2
  37. package/src/data-interfaces.js +4 -4
  38. package/src/data-providers/array-entity-data-provider.d.ts +2 -2
  39. package/src/data-providers/array-entity-data-provider.js +14 -92
  40. package/src/data-providers/json-data-provider.js +2 -2
  41. package/src/data-providers/rest-data-provider.d.ts +3 -2
  42. package/src/data-providers/rest-data-provider.js +17 -18
  43. package/src/data-providers/sql-database.js +105 -254
  44. package/src/live-query/LiveQueryClient.js +215 -97
  45. package/src/live-query/SseSubscriptionClient.js +143 -83
  46. package/src/live-query/SubscriptionChannel.d.ts +8 -0
  47. package/src/live-query/SubscriptionChannel.js +47 -9
  48. package/src/live-query/SubscriptionServer.d.ts +7 -2
  49. package/src/live-query/SubscriptionServer.js +20 -10
  50. package/src/remult3/RepositoryImplementation.d.ts +1 -1
  51. package/src/remult3/RepositoryImplementation.js +270 -384
  52. package/src/remult3/remult3.d.ts +8 -2
  53. package/src/remult3/remult3.js +6 -0
  54. package/src/sql-command.d.ts +0 -2
  55. package/src/standard-schema/index.d.ts +1 -1
  56. package/esm/src/data-providers/indexed-db-data-provider.js +0 -811
  57. package/src/data-providers/indexed-db-data-provider.d.ts +0 -39
  58. package/src/data-providers/indexed-db-data-provider.js +0 -1387
@@ -282,7 +282,7 @@ export class RepositoryImplementation {
282
282
  return ref.delete();
283
283
  if (typeof item === 'string' || typeof item === 'number')
284
284
  if (this._dataProvider.isProxy)
285
- return this._edp.delete([item]);
285
+ return this._edp.delete(item);
286
286
  else {
287
287
  let ref2 = await this.findId(item);
288
288
  if (!ref2)
@@ -323,26 +323,36 @@ export class RepositoryImplementation {
323
323
  }
324
324
  async insert(entity, options) {
325
325
  if (Array.isArray(entity)) {
326
- let refs = [];
327
- let raw = [];
328
- for (const item of entity) {
329
- this.__cleanupPartialObject(item);
330
- let ref = getEntityRef(item, false);
331
- if (ref) {
332
- if (!ref.isNew())
333
- throw 'Item is not new';
326
+ if (this._dataProvider.isProxy) {
327
+ let refs = [];
328
+ let raw = [];
329
+ for (const item of entity) {
330
+ this.__cleanupPartialObject(item);
331
+ let ref = getEntityRef(entity, false);
332
+ if (ref) {
333
+ if (!ref.isNew())
334
+ throw 'Item is not new';
335
+ }
336
+ else {
337
+ ref = (await this.getEntityRef(this.create(item)));
338
+ }
339
+ refs.push(ref);
340
+ raw.push(await ref.buildDtoForInsert());
334
341
  }
335
- else {
336
- ref = this.getEntityRef(this.create(item));
342
+ const inserted = await this._edp.insertMany(raw, options);
343
+ if (options?.select === 'none')
344
+ return undefined;
345
+ return promiseAll(inserted, (item, i) => refs[i].processInsertResponseDto(item));
346
+ }
347
+ else {
348
+ let r = [];
349
+ for (const item of entity) {
350
+ r.push(await this.insert(item, options));
337
351
  }
338
- refs.push(ref);
339
- raw.push(await ref.buildDtoForInsert());
352
+ if (options?.select === 'none')
353
+ return undefined;
354
+ return r;
340
355
  }
341
- const inserted = await this._edp.insert(raw, options);
342
- const result = await promiseAll(inserted, (row, i) => refs[i].processInsertResponseDto(row));
343
- if (options?.select === 'none')
344
- return undefined;
345
- return result;
346
356
  }
347
357
  else {
348
358
  let ref = getEntityRef(entity, false);
@@ -876,19 +886,14 @@ export class RepositoryImplementation {
876
886
  return this._edp.deleteMany(where === 'all' ? 'all' : await this._translateWhereToFilter(where));
877
887
  }
878
888
  else {
889
+ let deleted = 0;
879
890
  if (where === 'all')
880
891
  where = undefined;
881
- const prepared = [];
882
892
  for await (const item of this.query({ where, aggregate: undefined })) {
883
- const ref = getEntityRef(item);
884
- prepared.push({ ref, ...(await ref.__prepareDelete()) });
893
+ await getEntityRef(item).delete();
894
+ deleted++;
885
895
  }
886
- const ids = prepared.filter((x) => x.doDelete).map((x) => x.ref.id);
887
- if (ids.length)
888
- await this._edp.delete(ids);
889
- for (const x of prepared)
890
- await x.ref.__finishDelete(x.event);
891
- return prepared.length;
896
+ return deleted;
892
897
  }
893
898
  }
894
899
  _cache = new Map();
@@ -1557,7 +1562,7 @@ export class rowHelperImplementation extends rowHelperBase {
1557
1562
  }))[0];
1558
1563
  }
1559
1564
  else
1560
- updatedRow = (await this.edp.insert([d], options))[0];
1565
+ updatedRow = await this.edp.insert(d, options);
1561
1566
  }
1562
1567
  else {
1563
1568
  let changesOnly = {};
@@ -1612,40 +1617,13 @@ export class rowHelperImplementation extends rowHelperBase {
1612
1617
  }
1613
1618
  }
1614
1619
  async processInsertResponseDto(updatedRow) {
1615
- try {
1616
- if (updatedRow)
1617
- await this.loadDataFrom(updatedRow);
1618
- const e = this.buildLifeCycleEvent();
1619
- e.id = this.getId();
1620
- if (!this.repo._dataProvider.isProxy) {
1621
- if (this.info.entityInfo.saved)
1622
- await this.info.entityInfo.saved(this.instance, e);
1623
- if (this.repo.listeners)
1624
- for (const listener of this.repo.listeners) {
1625
- await listener.saved?.(this.instance, true);
1626
- }
1627
- }
1628
- this.repo._remult.liveQueryPublisher.itemChanged(this.repo.metadata.key, [{ id: this.getId(), oldId: this.getOriginalId(), deleted: false }]);
1629
- this.saveOriginalData();
1630
- this._isNew = false;
1631
- return this.instance;
1632
- }
1633
- catch (err) {
1634
- throw await this.catchSaveErrors(err);
1635
- }
1620
+ await this.loadDataFrom(updatedRow);
1621
+ this.saveOriginalData();
1622
+ this._isNew = false;
1623
+ return this.instance;
1636
1624
  }
1637
1625
  async buildDtoForInsert() {
1638
1626
  await this.__validateEntity();
1639
- const e = this.buildLifeCycleEvent();
1640
- if (!this.repo._dataProvider.isProxy) {
1641
- for (const col of this.fields) {
1642
- if (col.metadata.options.saving)
1643
- await col.metadata.options.saving(this.instance, col, e);
1644
- }
1645
- if (this.info.entityInfo.saving) {
1646
- await this.info.entityInfo.saving(this.instance, e);
1647
- }
1648
- }
1649
1627
  this.__assertValidity();
1650
1628
  let d = this.copyDataToObject(this.isNew());
1651
1629
  for (const field of this.metadata.fields) {
@@ -1674,44 +1652,36 @@ export class rowHelperImplementation extends rowHelperBase {
1674
1652
  return await this.repo._translateWhereToFilter(this.repo.metadata.idMetadata.getIdFilter(this.id));
1675
1653
  }
1676
1654
  async delete() {
1677
- try {
1678
- const { doDelete, event } = await this.__prepareDelete();
1679
- if (doDelete)
1680
- await this.edp.delete([this.id]);
1681
- await this.__finishDelete(event);
1682
- }
1683
- catch (err) {
1684
- throw await this.catchSaveErrors(err);
1685
- }
1686
- }
1687
- //@internal
1688
- async __prepareDelete() {
1689
1655
  this.__clearErrorsAndReportChanged();
1690
1656
  let doDelete = true;
1691
- const event = this.buildLifeCycleEvent(() => (doDelete = false));
1657
+ let e = this.buildLifeCycleEvent(() => (doDelete = false));
1692
1658
  if (!this.repo._dataProvider.isProxy) {
1693
1659
  if (this.info.entityInfo.deleting)
1694
- await this.info.entityInfo.deleting(this.instance, event);
1660
+ await this.info.entityInfo.deleting(this.instance, e);
1695
1661
  }
1696
1662
  this.__assertValidity();
1697
- if (doDelete && this.id === undefined)
1698
- throw new Error('Invalid operation, id is undefined');
1699
- return { doDelete, event };
1700
- }
1701
- //@internal
1702
- async __finishDelete(e) {
1703
- if (!this.repo._dataProvider.isProxy) {
1704
- if (this.info.entityInfo.deleted)
1705
- await this.info.entityInfo.deleted(this.instance, e);
1706
- }
1707
- if (this.repo.listeners)
1708
- for (const listener of this.repo.listeners) {
1709
- await listener.deleted?.(this.instance);
1663
+ try {
1664
+ if (doDelete) {
1665
+ if (this.id === undefined)
1666
+ throw new Error('Invalid operation, id is undefined');
1667
+ await this.edp.delete(this.id);
1668
+ }
1669
+ if (!this.repo._dataProvider.isProxy) {
1670
+ if (this.info.entityInfo.deleted)
1671
+ await this.info.entityInfo.deleted(this.instance, e);
1710
1672
  }
1711
- this.repo._remult.liveQueryPublisher.itemChanged(this.repo.metadata.key, [
1712
- { id: this.getId(), oldId: this.getOriginalId(), deleted: true },
1713
- ]);
1714
- this._wasDeleted = true;
1673
+ if (this.repo.listeners)
1674
+ for (const listener of this.repo.listeners) {
1675
+ await listener.deleted?.(this.instance);
1676
+ }
1677
+ this.repo._remult.liveQueryPublisher.itemChanged(this.repo.metadata.key, [
1678
+ { id: this.getId(), oldId: this.getOriginalId(), deleted: true },
1679
+ ]);
1680
+ this._wasDeleted = true;
1681
+ }
1682
+ catch (err) {
1683
+ throw await this.catchSaveErrors(err);
1684
+ }
1715
1685
  }
1716
1686
  async loadDataFrom(data, loadItems) {
1717
1687
  for (const col of this.info.fields) {
@@ -16,6 +16,12 @@ const wnn = [
16
16
  ];
17
17
  export const flags = {
18
18
  error500RetryCount: 4,
19
+ /** Client treats SSE as dead if no event for this long */
20
+ sseStaleMs: 20_000,
21
+ /** HTTP keep-alive while SSE is healthy (touches lastUsed) */
22
+ liveQueryKeepAliveMs: 30_000,
23
+ /** Version poll while SSE is stale */
24
+ liveQueryPollWhenStaleMs: 1_000,
19
25
  };
20
26
  /*p1 - issues in https://stackblitz.com/edit/demo-allow-delete-based-on-other-entity:
21
27
  - don't like the ensure schema
package/index.d.ts CHANGED
@@ -2,11 +2,10 @@ import type { ClassType } from './classType.js';
2
2
  import type { DataProvider } from './src/data-interfaces.js';
3
3
  export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider.js';
4
4
  export type { ClassType } from './classType.js';
5
- export type { ValidateFieldEvent, MembersOnly, NumericKeys, FieldsMetadata, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, FindOptionsBase, QueryResult, QueryOptions, UpsertOptions, Repository, GroupByOptions, GroupByResult, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, EntityRef, SortSegments, Paginator, LiveQuery, LiveQueryChangeInfo, Subscribable, RefSubscriber, RefSubscriberBase, RelationOptions, ObjectMembersOnly, MembersToInclude, RepositoryRelations, EntityIdFields, EntitySelectFields, InsertOrUpdateOptions, ClassFieldDecorator, ClassFieldDecoratorContextStub, //n1 consider removing in ts5
5
+ export { ValidateFieldEvent, MembersOnly, NumericKeys, FieldsMetadata, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, FindOptionsBase, QueryResult, QueryOptions, UpsertOptions, Repository, GroupByOptions, GroupByResult, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, EntityRef, SortSegments, Paginator, LiveQuery, LiveQueryChangeInfo, Subscribable, RefSubscriber, RefSubscriberBase, RelationOptions, ObjectMembersOnly, MembersToInclude, RepositoryRelations, EntityIdFields, EntitySelectFields, InsertOrUpdateOptions, ClassFieldDecorator, ClassFieldDecoratorContextStub, //n1 consider removing in ts5
6
6
  LifecycleEvent, FieldsRefBase, FieldsRefForEntityBase, RepositoryRelationsForEntityBase, ControllerRefForControllerBase, ControllerRefBase, ControllerRef, EntityRefForEntityBase, IdMetadata, FindFirstOptionsBase, } from './src/remult3/remult3.js';
7
7
  export { standardSchema } from './src/standard-schema/index.js';
8
- export { EntityBase, ControllerBase, FieldType, getFields, ValueListFieldType, getValueList, ValueListInfo, } from './src/remult3/RepositoryImplementation.js';
9
- export type { ValueListFieldOptions } from './src/remult3/RepositoryImplementation.js';
8
+ export { EntityBase, ControllerBase, FieldType, getFields, ValueListFieldType, getValueList, ValueListFieldOptions, ValueListInfo, } from './src/remult3/RepositoryImplementation.js';
10
9
  export { LabelTransformer } from './src/remult3/RepositoryImplementation.js';
11
10
  /**
12
11
  * @deprecated use `LabelTransformer` instead
@@ -17,46 +16,33 @@ export declare const CaptionTransformer: {
17
16
  };
18
17
  export { Entity } from './src/remult3/entity.js';
19
18
  export { getEntityRef } from './src/remult3/getEntityRef.js';
20
- export { Field, Fields, Relations } from './src/remult3/Fields.js';
21
- export type { StringFieldOptions } from './src/remult3/Fields.js';
19
+ export { Field, Fields, StringFieldOptions, Relations, } from './src/remult3/Fields.js';
22
20
  export { IdEntity } from './src/remult3/IdEntity.js';
23
21
  export { describeClass, describeBackendMethods, describeEntity, } from './src/remult3/classDescribers.js';
24
- export type { EntityOptions, PreprocessFilterEvent } from './src/entity.js';
25
- export { EntityError } from './src/data-interfaces.js';
26
- export type { DataProvider, EntityDataProvider, EntityDataProviderGroupByOptions, EntityDataProviderFindOptions, ErrorInfo, RestDataProviderHttpProvider, } from './src/data-interfaces.js';
27
- export type { SqlCommand, SqlCommandWithParameters, SqlImplementation, SqlResult, } from './src/sql-command.js';
28
- export type { FieldMetadata, FieldOptions, FieldValidator, ValueConverter, ValueListItem, // reconsider, maybe it should go to remult angular as the abstraction ?
22
+ export { EntityOptions, PreprocessFilterEvent } from './src/entity.js';
23
+ export { DataProvider, EntityDataProvider, EntityDataProviderGroupByOptions, EntityDataProviderFindOptions, ErrorInfo, EntityError, RestDataProviderHttpProvider, } from './src/data-interfaces.js';
24
+ export { SqlCommand, SqlCommandWithParameters, SqlImplementation, SqlResult, } from './src/sql-command.js';
25
+ export { FieldMetadata, FieldOptions, FieldValidator, ValueConverter, ValueListItem, // reconsider, maybe it should go to remult angular as the abstraction ?
29
26
  ValueOrExpression, } from './src/column-interfaces.js';
30
27
  export { RestDataProvider } from './src/data-providers/rest-data-provider.js';
31
28
  export { InMemoryDataProvider } from './src/data-providers/in-memory-database.js';
32
29
  export { SqlDatabase } from './src/data-providers/sql-database.js';
33
- export { CustomSqlFilterBuilder, dbNamesOf, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
34
- export type { dbNamesOfOptions, CustomSqlFilterBuilderFunction, EntityDbNames, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
35
- export { JsonDataProvider } from './src/data-providers/json-data-provider.js';
36
- export type { JsonEntityStorage } from './src/data-providers/json-data-provider.js';
30
+ export { CustomSqlFilterBuilder, dbNamesOf, dbNamesOfOptions, CustomSqlFilterBuilderFunction, EntityDbNames, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
31
+ export { JsonDataProvider, JsonEntityStorage, } from './src/data-providers/json-data-provider.js';
37
32
  export { JsonEntityOpfsStorage } from './src/data-providers/json-entity-opfs-storage.js';
38
33
  export { JsonEntityIndexedDbStorage } from './src/data-providers/json-entity-indexed-db-data-provider.js';
39
- export { IndexedDbDataProvider, IndexedDbIndexBuilder, } from './src/data-providers/indexed-db-data-provider.js';
40
- export type { IndexedDbDataProviderOptions, IndexedDbIndexDef, } from './src/data-providers/indexed-db-data-provider.js';
41
- export { Controller, BackendMethod, ProgressListener, ForbiddenError, } from './src/server-action.js';
42
- export type { BackendMethodOptions } from './src/server-action.js';
43
- export { Allow, Remult, withRemult, isBackend, EventSource, } from './src/context.js';
44
- export type { Allowed, RemultContext, ApiClient, AllowedForInstance, EventDispatcher, UserInfo, } from './src/context.js';
45
- export type { ExternalHttpProvider } from './src/buildRestDataProvider.js';
46
- export { Sort } from './src/sort.js';
47
- export type { SortSegment } from './src/sort.js';
34
+ export { Controller, BackendMethodOptions, BackendMethod, ProgressListener, ForbiddenError, } from './src/server-action.js';
35
+ export { Allowed, Allow, Remult, withRemult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource, UserInfo, } from './src/context.js';
36
+ export { ExternalHttpProvider } from './src/buildRestDataProvider.js';
37
+ export { SortSegment, Sort } from './src/sort.js';
48
38
  export { CompoundIdField } from './src/CompoundIdField.js';
49
- export { Filter } from './src/filter/filter-interfaces.js';
50
- export type { FilterConsumer, FilterPreciseValues, } from './src/filter/filter-interfaces.js';
39
+ export { Filter, FilterConsumer, FilterPreciseValues, } from './src/filter/filter-interfaces.js';
51
40
  export { UrlBuilder } from './urlBuilder.js';
52
- export { Validators, valueValidator, createValidator, createValidatorWithArgs, createValueValidatorWithArgs, createValueValidator, } from './src/validators.js';
53
- export type { ValidationMessage, ValueValidationMessage, Validator, ValidatorWithArgs, } from './src/validators.js';
41
+ export { Validators, ValidationMessage, ValueValidationMessage, Validator, ValidatorWithArgs, valueValidator, createValidator, createValidatorWithArgs, createValueValidatorWithArgs, createValueValidator, } from './src/validators.js';
54
42
  export { ValueConverters } from './src/valueConverters.js';
55
43
  export { remult } from './src/remult-proxy.js';
56
- export { InMemoryLiveQueryStorage } from './src/live-query/SubscriptionServer.js';
57
- export type { SubscriptionServer, LiveQueryStorage, StoredQuery, } from './src/live-query/SubscriptionServer.js';
58
- export { SubscriptionChannel } from './src/live-query/SubscriptionChannel.js';
59
- export type { SubscriptionListener, SubscriptionClientConnection, SubscriptionClient, LiveQueryChange, Unsubscribe, } from './src/live-query/SubscriptionChannel.js';
44
+ export { SubscriptionServer, LiveQueryStorage, StoredQuery, InMemoryLiveQueryStorage, } from './src/live-query/SubscriptionServer.js';
45
+ export { SubscriptionListener, SubscriptionClientConnection, SubscriptionClient, SubscriptionChannel, LiveQueryChange, Unsubscribe, } from './src/live-query/SubscriptionChannel.js';
60
46
  /**
61
47
  * A convenient shortcut function to quickly obtain a repository for a specific entity type in Remult.
62
48
  *
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createValueValidator = exports.createValueValidatorWithArgs = exports.createValidatorWithArgs = exports.createValidator = exports.valueValidator = exports.Validators = exports.UrlBuilder = exports.Filter = exports.CompoundIdField = exports.Sort = exports.EventSource = exports.isBackend = exports.withRemult = exports.Remult = exports.Allow = exports.ForbiddenError = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.IndexedDbIndexBuilder = exports.IndexedDbDataProvider = exports.JsonEntityIndexedDbStorage = exports.JsonEntityOpfsStorage = exports.JsonDataProvider = exports.dbNamesOf = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.InMemoryDataProvider = exports.RestDataProvider = exports.EntityError = exports.describeEntity = exports.describeBackendMethods = exports.describeClass = exports.IdEntity = exports.Relations = exports.Fields = exports.Field = exports.getEntityRef = exports.Entity = exports.CaptionTransformer = exports.LabelTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.standardSchema = exports.ArrayEntityDataProvider = void 0;
4
- exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = exports.remult = exports.ValueConverters = void 0;
3
+ exports.remult = exports.ValueConverters = exports.createValueValidator = exports.createValueValidatorWithArgs = exports.createValidatorWithArgs = exports.createValidator = exports.valueValidator = exports.Validators = exports.UrlBuilder = exports.Filter = exports.CompoundIdField = exports.Sort = exports.EventSource = exports.isBackend = exports.withRemult = exports.Remult = exports.Allow = exports.ForbiddenError = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonEntityIndexedDbStorage = exports.JsonEntityOpfsStorage = exports.JsonDataProvider = exports.dbNamesOf = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.InMemoryDataProvider = exports.RestDataProvider = exports.EntityError = exports.describeEntity = exports.describeBackendMethods = exports.describeClass = exports.IdEntity = exports.Relations = exports.Fields = exports.Field = exports.getEntityRef = exports.Entity = exports.CaptionTransformer = exports.LabelTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.standardSchema = exports.ArrayEntityDataProvider = void 0;
4
+ exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = void 0;
5
5
  exports.repo = repo;
6
6
  var array_entity_data_provider_js_1 = require("./src/data-providers/array-entity-data-provider.js");
7
7
  Object.defineProperty(exports, "ArrayEntityDataProvider", { enumerable: true, get: function () { return array_entity_data_provider_js_1.ArrayEntityDataProvider; } });
@@ -53,9 +53,6 @@ var json_entity_opfs_storage_js_1 = require("./src/data-providers/json-entity-op
53
53
  Object.defineProperty(exports, "JsonEntityOpfsStorage", { enumerable: true, get: function () { return json_entity_opfs_storage_js_1.JsonEntityOpfsStorage; } });
54
54
  var json_entity_indexed_db_data_provider_js_1 = require("./src/data-providers/json-entity-indexed-db-data-provider.js");
55
55
  Object.defineProperty(exports, "JsonEntityIndexedDbStorage", { enumerable: true, get: function () { return json_entity_indexed_db_data_provider_js_1.JsonEntityIndexedDbStorage; } });
56
- var indexed_db_data_provider_js_1 = require("./src/data-providers/indexed-db-data-provider.js");
57
- Object.defineProperty(exports, "IndexedDbDataProvider", { enumerable: true, get: function () { return indexed_db_data_provider_js_1.IndexedDbDataProvider; } });
58
- Object.defineProperty(exports, "IndexedDbIndexBuilder", { enumerable: true, get: function () { return indexed_db_data_provider_js_1.IndexedDbIndexBuilder; } });
59
56
  //export * from './src/data-api'; //reconsider if to make internal
60
57
  var server_action_js_1 = require("./src/server-action.js");
61
58
  Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return server_action_js_1.Controller; } });
@@ -13,7 +13,10 @@ export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, S
13
13
  query: StoredQuery;
14
14
  setData(data: any): Promise<void>;
15
15
  }) => Promise<void>): Promise<void>;
16
- keepAliveAndReturnUnknownQueryIds(queryIds: string[]): Promise<string[]>;
16
+ keepAliveAndReturnUnknownQueryIds(queryIds: string[]): Promise<{
17
+ unknownQueryIds: string[];
18
+ versions: Record<string, number>;
19
+ }>;
17
20
  }
18
21
  export declare class LiveQueryStorageEntity extends EntityBase {
19
22
  id: string;
@@ -170,46 +170,49 @@ var DataProviderLiveQueryStorage = /** @class */ (function () {
170
170
  };
171
171
  DataProviderLiveQueryStorage.prototype.keepAliveAndReturnUnknownQueryIds = function (queryIds) {
172
172
  return tslib_1.__awaiter(this, void 0, void 0, function () {
173
- var repo, _loop_2, _a, _b, query, e_2_1;
173
+ var repo, versions, _loop_2, _a, _b, query, e_2_1;
174
174
  var e_2, _c;
175
- return tslib_1.__generator(this, function (_d) {
176
- switch (_d.label) {
175
+ var _d, _e;
176
+ return tslib_1.__generator(this, function (_f) {
177
+ switch (_f.label) {
177
178
  case 0: return [4 /*yield*/, this.repo];
178
179
  case 1:
179
- repo = _d.sent();
180
+ repo = _f.sent();
181
+ versions = {};
180
182
  _loop_2 = function (query) {
181
- return tslib_1.__generator(this, function (_e) {
182
- switch (_e.label) {
183
+ return tslib_1.__generator(this, function (_g) {
184
+ switch (_g.label) {
183
185
  case 0:
184
186
  query.lastUsedIso = new Date().toISOString();
185
187
  return [4 /*yield*/, repo.save(query)];
186
188
  case 1:
187
- _e.sent();
189
+ _g.sent();
190
+ versions[query.id] = (_e = (_d = query.data) === null || _d === void 0 ? void 0 : _d.version) !== null && _e !== void 0 ? _e : 0;
188
191
  queryIds = queryIds.filter(function (x) { return x !== query.id; });
189
192
  return [2 /*return*/];
190
193
  }
191
194
  });
192
195
  };
193
- _d.label = 2;
196
+ _f.label = 2;
194
197
  case 2:
195
- _d.trys.push([2, 8, 9, 10]);
198
+ _f.trys.push([2, 8, 9, 10]);
196
199
  return [4 /*yield*/, repo.find({ where: { id: queryIds } })];
197
200
  case 3:
198
- _a = tslib_1.__values.apply(void 0, [_d.sent()]), _b = _a.next();
199
- _d.label = 4;
201
+ _a = tslib_1.__values.apply(void 0, [_f.sent()]), _b = _a.next();
202
+ _f.label = 4;
200
203
  case 4:
201
204
  if (!!_b.done) return [3 /*break*/, 7];
202
205
  query = _b.value;
203
206
  return [5 /*yield**/, _loop_2(query)];
204
207
  case 5:
205
- _d.sent();
206
- _d.label = 6;
208
+ _f.sent();
209
+ _f.label = 6;
207
210
  case 6:
208
211
  _b = _a.next();
209
212
  return [3 /*break*/, 4];
210
213
  case 7: return [3 /*break*/, 10];
211
214
  case 8:
212
- e_2_1 = _d.sent();
215
+ e_2_1 = _f.sent();
213
216
  e_2 = { error: e_2_1 };
214
217
  return [3 /*break*/, 10];
215
218
  case 9:
@@ -218,7 +221,7 @@ var DataProviderLiveQueryStorage = /** @class */ (function () {
218
221
  }
219
222
  finally { if (e_2) throw e_2.error; }
220
223
  return [7 /*endfinally*/];
221
- case 10: return [2 /*return*/, queryIds];
224
+ case 10: return [2 /*return*/, { unknownQueryIds: queryIds, versions: versions }];
222
225
  }
223
226
  });
224
227
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "3.3.19-next.2",
3
+ "version": "3.4.0-next.2",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "homepage": "https://remult.dev",
6
6
  "repository": {
package/remult-d1.d.ts CHANGED
@@ -3,7 +3,6 @@ import { SqliteCoreDataProvider } from './remult-sqlite-core.js';
3
3
  export declare function createD1DataProvider(d1: D1Database): SqlDatabase;
4
4
  export declare class D1DataProvider extends SqliteCoreDataProvider {
5
5
  private d1;
6
- maxParametersInOneSqlStatement: number;
7
6
  /**
8
7
  * For production or local d1 using binding
9
8
  *
package/remult-d1.js CHANGED
@@ -23,7 +23,6 @@ var D1DataProvider = /** @class */ (function (_super) {
23
23
  });
24
24
  }); }) || this;
25
25
  _this.d1 = d1;
26
- _this.maxParametersInOneSqlStatement = 100;
27
26
  return _this;
28
27
  }
29
28
  D1DataProvider.prototype.transaction = function (action) {