remult 3.4.0-next.2 → 3.4.0-next.5
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/esm/index.js +7 -6
- package/esm/internals.js +1 -0
- package/esm/remult-d1.js +1 -0
- package/esm/remult-knex/index.js +112 -2
- package/esm/remult-mongo.js +17 -8
- package/esm/remult-sqlite-core.js +1 -0
- package/esm/src/data-api.js +13 -2
- package/esm/src/data-interfaces.js +4 -4
- package/esm/src/data-providers/array-entity-data-provider.js +14 -2
- package/esm/src/data-providers/in-memory-database.js +12 -1
- package/esm/src/data-providers/indexed-db-data-provider.js +844 -0
- package/esm/src/data-providers/json-data-provider.js +2 -2
- package/esm/src/data-providers/rest-data-provider.js +11 -12
- package/esm/src/data-providers/sql-database.js +110 -43
- package/esm/src/live-query/LiveQueryClient.js +53 -25
- package/esm/src/live-query/SseSubscriptionClient.js +49 -20
- package/esm/src/live-query/SubscriptionChannel.js +34 -10
- package/esm/src/remult3/RepositoryImplementation.js +135 -60
- package/esm/src/remult3/remult3.js +2 -2
- package/index.d.ts +31 -17
- package/index.js +5 -2
- package/internals.d.ts +1 -0
- package/internals.js +3 -1
- package/package.json +1 -1
- package/remult-d1.d.ts +1 -0
- package/remult-d1.js +1 -0
- package/remult-knex/index.js +329 -44
- package/remult-mongo.js +80 -36
- package/remult-sqlite-core.d.ts +1 -0
- package/remult-sqlite-core.js +1 -0
- package/src/data-api.js +38 -21
- package/src/data-interfaces.d.ts +9 -3
- package/src/data-interfaces.js +4 -4
- package/src/data-providers/array-entity-data-provider.d.ts +2 -2
- package/src/data-providers/array-entity-data-provider.js +92 -14
- package/src/data-providers/in-memory-database.d.ts +5 -2
- package/src/data-providers/in-memory-database.js +22 -1
- package/src/data-providers/indexed-db-data-provider.d.ts +61 -0
- package/src/data-providers/indexed-db-data-provider.js +1459 -0
- package/src/data-providers/json-data-provider.js +2 -2
- package/src/data-providers/rest-data-provider.d.ts +2 -3
- package/src/data-providers/rest-data-provider.js +18 -17
- package/src/data-providers/sql-database.js +254 -105
- package/src/entity.d.ts +12 -0
- package/src/live-query/LiveQueryClient.js +87 -37
- package/src/live-query/SseSubscriptionClient.js +75 -44
- package/src/live-query/SubscriptionChannel.d.ts +12 -0
- package/src/live-query/SubscriptionChannel.js +36 -11
- package/src/remult3/RepositoryImplementation.d.ts +7 -4
- package/src/remult3/RepositoryImplementation.js +521 -326
- package/src/remult3/remult3.d.ts +7 -5
- package/src/remult3/remult3.js +2 -2
- package/src/sql-command.d.ts +2 -0
- package/src/standard-schema/index.d.ts +1 -1
|
@@ -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,36 +323,48 @@ export class RepositoryImplementation {
|
|
|
323
323
|
}
|
|
324
324
|
async insert(entity, options) {
|
|
325
325
|
if (Array.isArray(entity)) {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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());
|
|
341
|
-
}
|
|
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) {
|
|
326
|
+
const useBulk = this._dataProvider.isProxy || this.metadata.options.bulkInsert;
|
|
327
|
+
if (!useBulk) {
|
|
328
|
+
const r = [];
|
|
329
|
+
for (const item of entity)
|
|
350
330
|
r.push(await this.insert(item, options));
|
|
351
|
-
}
|
|
352
331
|
if (options?.select === 'none')
|
|
353
332
|
return undefined;
|
|
354
333
|
return r;
|
|
355
334
|
}
|
|
335
|
+
const slots = [];
|
|
336
|
+
const raw = [];
|
|
337
|
+
for (const item of entity) {
|
|
338
|
+
this.__cleanupPartialObject(item);
|
|
339
|
+
let ref = getEntityRef(item, false);
|
|
340
|
+
if (ref) {
|
|
341
|
+
if (!ref.isNew())
|
|
342
|
+
throw 'Item is not new';
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
ref = this.getEntityRef(this.create(item));
|
|
346
|
+
}
|
|
347
|
+
const dto = await ref.buildDtoForInsert();
|
|
348
|
+
if (dto === null) {
|
|
349
|
+
slots.push({ ref, skip: true });
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
slots.push({ ref, skip: false });
|
|
353
|
+
raw.push(dto);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (raw.length) {
|
|
357
|
+
const inserted = await this._edp.insert(raw, options);
|
|
358
|
+
let i = 0;
|
|
359
|
+
for (const slot of slots) {
|
|
360
|
+
if (!slot.skip)
|
|
361
|
+
slot.row = inserted[i++];
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const result = await promiseAll(slots, (slot) => slot.ref.processInsertResponseDto(slot.row));
|
|
365
|
+
if (options?.select === 'none')
|
|
366
|
+
return undefined;
|
|
367
|
+
return result;
|
|
356
368
|
}
|
|
357
369
|
else {
|
|
358
370
|
let ref = getEntityRef(entity, false);
|
|
@@ -690,7 +702,16 @@ export class RepositoryImplementation {
|
|
|
690
702
|
return undefined;
|
|
691
703
|
})
|
|
692
704
|
.filter((x) => x !== undefined));
|
|
693
|
-
|
|
705
|
+
const select = loadOptions?.select;
|
|
706
|
+
let fieldsExcludedBySelect = undefined;
|
|
707
|
+
if (select) {
|
|
708
|
+
const selected = new Set(Object.keys(select).filter((x) => select[x]));
|
|
709
|
+
fieldsExcludedBySelect = new Set(this.fields
|
|
710
|
+
.toArray()
|
|
711
|
+
.map((f) => f.key)
|
|
712
|
+
.filter((key) => !selected.has(key)));
|
|
713
|
+
}
|
|
714
|
+
let result = await promiseAll(rawRows, async (r) => await this._mapRawDataToResult(r, loadFields, excludeRelationMembers, fieldsExcludedBySelect));
|
|
694
715
|
const fields = this.metadata.fields.toArray();
|
|
695
716
|
this._populateRelationsForFields(fields, loadOptions, result, loader);
|
|
696
717
|
return result;
|
|
@@ -819,9 +840,10 @@ export class RepositoryImplementation {
|
|
|
819
840
|
findOptions.limit = 1;
|
|
820
841
|
return { findOptions, returnNull, returnUndefined };
|
|
821
842
|
}
|
|
822
|
-
async _mapRawDataToResult(r, loadFields, excludeRelationMembers) {
|
|
843
|
+
async _mapRawDataToResult(r, loadFields, excludeRelationMembers, fieldsExcludedBySelect) {
|
|
823
844
|
let x = new this._entity(this._remult);
|
|
824
845
|
let helper = new rowHelperImplementation(this._info, x, this, this._edp, this._remult, false, excludeRelationMembers);
|
|
846
|
+
helper._fieldsExcludedBySelect = fieldsExcludedBySelect;
|
|
825
847
|
Object.defineProperty(x, entityMember, {
|
|
826
848
|
//I've used define property to hide this member from console.lo g
|
|
827
849
|
get: () => helper,
|
|
@@ -886,14 +908,19 @@ export class RepositoryImplementation {
|
|
|
886
908
|
return this._edp.deleteMany(where === 'all' ? 'all' : await this._translateWhereToFilter(where));
|
|
887
909
|
}
|
|
888
910
|
else {
|
|
889
|
-
let deleted = 0;
|
|
890
911
|
if (where === 'all')
|
|
891
912
|
where = undefined;
|
|
913
|
+
const prepared = [];
|
|
892
914
|
for await (const item of this.query({ where, aggregate: undefined })) {
|
|
893
|
-
|
|
894
|
-
|
|
915
|
+
const ref = getEntityRef(item);
|
|
916
|
+
prepared.push({ ref, ...(await ref.__prepareDelete()) });
|
|
895
917
|
}
|
|
896
|
-
|
|
918
|
+
const ids = prepared.filter((x) => x.doDelete).map((x) => x.ref.id);
|
|
919
|
+
if (ids.length)
|
|
920
|
+
await this._edp.delete(ids);
|
|
921
|
+
for (const x of prepared)
|
|
922
|
+
await x.ref.__finishDelete(x.event);
|
|
923
|
+
return prepared.length;
|
|
897
924
|
}
|
|
898
925
|
}
|
|
899
926
|
_cache = new Map();
|
|
@@ -1092,6 +1119,9 @@ class rowHelperBase {
|
|
|
1092
1119
|
this._error = val;
|
|
1093
1120
|
this._subscribers?.reportChanged();
|
|
1094
1121
|
}
|
|
1122
|
+
/** Fields left out by a partial `select` - they were never loaded, so they
|
|
1123
|
+
* must not be serialized by {@link toApiJson}. */
|
|
1124
|
+
_fieldsExcludedBySelect;
|
|
1095
1125
|
constructor(fieldsMetadata, instance, remult, isNewRow, excludeRelationMembers) {
|
|
1096
1126
|
this.fieldsMetadata = fieldsMetadata;
|
|
1097
1127
|
this.instance = instance;
|
|
@@ -1346,6 +1376,11 @@ class rowHelperBase {
|
|
|
1346
1376
|
toApiJson(includeRelatedEntities = false, notJustApi = false) {
|
|
1347
1377
|
let result = {};
|
|
1348
1378
|
for (const col of this.fieldsMetadata) {
|
|
1379
|
+
// A field excluded by `select` was never loaded. Running it through
|
|
1380
|
+
// valueConverter.toJson would emit a value ('' for dates and most custom
|
|
1381
|
+
// converters) that the caller can't tell apart from a real empty value.
|
|
1382
|
+
if (this._fieldsExcludedBySelect?.has(col.key))
|
|
1383
|
+
continue;
|
|
1349
1384
|
if (notJustApi || !this.remult || col.includedInApi(this.instance)) {
|
|
1350
1385
|
let val;
|
|
1351
1386
|
let lu = this.lookups.get(col.key);
|
|
@@ -1562,7 +1597,7 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
1562
1597
|
}))[0];
|
|
1563
1598
|
}
|
|
1564
1599
|
else
|
|
1565
|
-
updatedRow = await this.edp.insert(d, options);
|
|
1600
|
+
updatedRow = (await this.edp.insert([d], options))[0];
|
|
1566
1601
|
}
|
|
1567
1602
|
else {
|
|
1568
1603
|
let changesOnly = {};
|
|
@@ -1617,13 +1652,43 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
1617
1652
|
}
|
|
1618
1653
|
}
|
|
1619
1654
|
async processInsertResponseDto(updatedRow) {
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1655
|
+
try {
|
|
1656
|
+
if (updatedRow)
|
|
1657
|
+
await this.loadDataFrom(updatedRow);
|
|
1658
|
+
const e = this.buildLifeCycleEvent();
|
|
1659
|
+
e.id = this.getId();
|
|
1660
|
+
if (!this.repo._dataProvider.isProxy) {
|
|
1661
|
+
if (this.info.entityInfo.saved)
|
|
1662
|
+
await this.info.entityInfo.saved(this.instance, e);
|
|
1663
|
+
if (this.repo.listeners)
|
|
1664
|
+
for (const listener of this.repo.listeners) {
|
|
1665
|
+
await listener.saved?.(this.instance, true);
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
this.repo._remult.liveQueryPublisher.itemChanged(this.repo.metadata.key, [{ id: this.getId(), oldId: this.getOriginalId(), deleted: false }]);
|
|
1669
|
+
this.saveOriginalData();
|
|
1670
|
+
this._isNew = false;
|
|
1671
|
+
return this.instance;
|
|
1672
|
+
}
|
|
1673
|
+
catch (err) {
|
|
1674
|
+
throw await this.catchSaveErrors(err);
|
|
1675
|
+
}
|
|
1624
1676
|
}
|
|
1625
1677
|
async buildDtoForInsert() {
|
|
1626
1678
|
await this.__validateEntity();
|
|
1679
|
+
let skip = false;
|
|
1680
|
+
const e = this.buildLifeCycleEvent(() => {
|
|
1681
|
+
skip = true;
|
|
1682
|
+
});
|
|
1683
|
+
if (!this.repo._dataProvider.isProxy) {
|
|
1684
|
+
for (const col of this.fields) {
|
|
1685
|
+
if (col.metadata.options.saving)
|
|
1686
|
+
await col.metadata.options.saving(this.instance, col, e);
|
|
1687
|
+
}
|
|
1688
|
+
if (this.info.entityInfo.saving) {
|
|
1689
|
+
await this.info.entityInfo.saving(this.instance, e);
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1627
1692
|
this.__assertValidity();
|
|
1628
1693
|
let d = this.copyDataToObject(this.isNew());
|
|
1629
1694
|
for (const field of this.metadata.fields) {
|
|
@@ -1633,6 +1698,8 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
1633
1698
|
f.value = f.originalValue;
|
|
1634
1699
|
}
|
|
1635
1700
|
}
|
|
1701
|
+
if (skip)
|
|
1702
|
+
return null;
|
|
1636
1703
|
return d;
|
|
1637
1704
|
}
|
|
1638
1705
|
buildLifeCycleEvent(preventDefault = () => { }) {
|
|
@@ -1652,36 +1719,44 @@ export class rowHelperImplementation extends rowHelperBase {
|
|
|
1652
1719
|
return await this.repo._translateWhereToFilter(this.repo.metadata.idMetadata.getIdFilter(this.id));
|
|
1653
1720
|
}
|
|
1654
1721
|
async delete() {
|
|
1722
|
+
try {
|
|
1723
|
+
const { doDelete, event } = await this.__prepareDelete();
|
|
1724
|
+
if (doDelete)
|
|
1725
|
+
await this.edp.delete([this.id]);
|
|
1726
|
+
await this.__finishDelete(event);
|
|
1727
|
+
}
|
|
1728
|
+
catch (err) {
|
|
1729
|
+
throw await this.catchSaveErrors(err);
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
//@internal
|
|
1733
|
+
async __prepareDelete() {
|
|
1655
1734
|
this.__clearErrorsAndReportChanged();
|
|
1656
1735
|
let doDelete = true;
|
|
1657
|
-
|
|
1736
|
+
const event = this.buildLifeCycleEvent(() => (doDelete = false));
|
|
1658
1737
|
if (!this.repo._dataProvider.isProxy) {
|
|
1659
1738
|
if (this.info.entityInfo.deleting)
|
|
1660
|
-
await this.info.entityInfo.deleting(this.instance,
|
|
1739
|
+
await this.info.entityInfo.deleting(this.instance, event);
|
|
1661
1740
|
}
|
|
1662
1741
|
this.__assertValidity();
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
}
|
|
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);
|
|
1742
|
+
if (doDelete && this.id === undefined)
|
|
1743
|
+
throw new Error('Invalid operation, id is undefined');
|
|
1744
|
+
return { doDelete, event };
|
|
1745
|
+
}
|
|
1746
|
+
//@internal
|
|
1747
|
+
async __finishDelete(e) {
|
|
1748
|
+
if (!this.repo._dataProvider.isProxy) {
|
|
1749
|
+
if (this.info.entityInfo.deleted)
|
|
1750
|
+
await this.info.entityInfo.deleted(this.instance, e);
|
|
1684
1751
|
}
|
|
1752
|
+
if (this.repo.listeners)
|
|
1753
|
+
for (const listener of this.repo.listeners) {
|
|
1754
|
+
await listener.deleted?.(this.instance);
|
|
1755
|
+
}
|
|
1756
|
+
this.repo._remult.liveQueryPublisher.itemChanged(this.repo.metadata.key, [
|
|
1757
|
+
{ id: this.getId(), oldId: this.getOriginalId(), deleted: true },
|
|
1758
|
+
]);
|
|
1759
|
+
this._wasDeleted = true;
|
|
1685
1760
|
}
|
|
1686
1761
|
async loadDataFrom(data, loadItems) {
|
|
1687
1762
|
for (const col of this.info.fields) {
|
|
@@ -16,8 +16,8 @@ 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:
|
|
19
|
+
/** Client treats SSE as dead if no event for this long. Server pings every 15s; two missed pings plus slack, so a stalled event loop does not trigger a reconnect storm */
|
|
20
|
+
sseStaleMs: 40_000,
|
|
21
21
|
/** HTTP keep-alive while SSE is healthy (touches lastUsed) */
|
|
22
22
|
liveQueryKeepAliveMs: 30_000,
|
|
23
23
|
/** Version poll while SSE is stale */
|
package/index.d.ts
CHANGED
|
@@ -2,10 +2,11 @@ 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 { 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 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
|
|
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,
|
|
8
|
+
export { EntityBase, ControllerBase, FieldType, getFields, ValueListFieldType, getValueList, ValueListInfo, } from './src/remult3/RepositoryImplementation.js';
|
|
9
|
+
export type { ValueListFieldOptions } from './src/remult3/RepositoryImplementation.js';
|
|
9
10
|
export { LabelTransformer } from './src/remult3/RepositoryImplementation.js';
|
|
10
11
|
/**
|
|
11
12
|
* @deprecated use `LabelTransformer` instead
|
|
@@ -16,33 +17,46 @@ export declare const CaptionTransformer: {
|
|
|
16
17
|
};
|
|
17
18
|
export { Entity } from './src/remult3/entity.js';
|
|
18
19
|
export { getEntityRef } from './src/remult3/getEntityRef.js';
|
|
19
|
-
export { Field, Fields,
|
|
20
|
+
export { Field, Fields, Relations } from './src/remult3/Fields.js';
|
|
21
|
+
export type { StringFieldOptions } from './src/remult3/Fields.js';
|
|
20
22
|
export { IdEntity } from './src/remult3/IdEntity.js';
|
|
21
23
|
export { describeClass, describeBackendMethods, describeEntity, } from './src/remult3/classDescribers.js';
|
|
22
|
-
export { EntityOptions, PreprocessFilterEvent } from './src/entity.js';
|
|
23
|
-
export {
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
24
|
+
export type { EntityOptions, PreprocessFilterEvent } from './src/entity.js';
|
|
25
|
+
export { EntityError } from './src/data-interfaces.js';
|
|
26
|
+
export type { DataProvider, DroppableDataProvider, 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 ?
|
|
26
29
|
ValueOrExpression, } from './src/column-interfaces.js';
|
|
27
30
|
export { RestDataProvider } from './src/data-providers/rest-data-provider.js';
|
|
28
31
|
export { InMemoryDataProvider } from './src/data-providers/in-memory-database.js';
|
|
29
32
|
export { SqlDatabase } from './src/data-providers/sql-database.js';
|
|
30
|
-
export { CustomSqlFilterBuilder, dbNamesOf,
|
|
31
|
-
export {
|
|
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';
|
|
32
37
|
export { JsonEntityOpfsStorage } from './src/data-providers/json-entity-opfs-storage.js';
|
|
33
38
|
export { JsonEntityIndexedDbStorage } from './src/data-providers/json-entity-indexed-db-data-provider.js';
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
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';
|
|
38
48
|
export { CompoundIdField } from './src/CompoundIdField.js';
|
|
39
|
-
export { Filter
|
|
49
|
+
export { Filter } from './src/filter/filter-interfaces.js';
|
|
50
|
+
export type { FilterConsumer, FilterPreciseValues, } from './src/filter/filter-interfaces.js';
|
|
40
51
|
export { UrlBuilder } from './urlBuilder.js';
|
|
41
|
-
export { Validators,
|
|
52
|
+
export { Validators, valueValidator, createValidator, createValidatorWithArgs, createValueValidatorWithArgs, createValueValidator, } from './src/validators.js';
|
|
53
|
+
export type { ValidationMessage, ValueValidationMessage, Validator, ValidatorWithArgs, } from './src/validators.js';
|
|
42
54
|
export { ValueConverters } from './src/valueConverters.js';
|
|
43
55
|
export { remult } from './src/remult-proxy.js';
|
|
44
|
-
export {
|
|
45
|
-
export {
|
|
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';
|
|
46
60
|
/**
|
|
47
61
|
* A convenient shortcut function to quickly obtain a repository for a specific entity type in Remult.
|
|
48
62
|
*
|
package/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = void 0;
|
|
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;
|
|
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,6 +53,9 @@ 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; } });
|
|
56
59
|
//export * from './src/data-api'; //reconsider if to make internal
|
|
57
60
|
var server_action_js_1 = require("./src/server-action.js");
|
|
58
61
|
Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return server_action_js_1.Controller; } });
|
package/internals.d.ts
CHANGED
|
@@ -15,5 +15,6 @@ export declare const actionInfo: {
|
|
|
15
15
|
export { isOfType } from './src/isOfType.js';
|
|
16
16
|
export type { ClassType } from './classType.js';
|
|
17
17
|
export { flags } from './src/remult3/remult3.js';
|
|
18
|
+
export { SseSubscriptionClient } from './src/live-query/SseSubscriptionClient.js';
|
|
18
19
|
export { DataProviderPromiseWrapper } from './src/data-interfaces.js';
|
|
19
20
|
export { pagedQueryResult } from './src/remult3/pagedQueryResult.js';
|
package/internals.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pagedQueryResult = exports.DataProviderPromiseWrapper = exports.flags = exports.isOfType = exports.actionInfo = exports.__updateEntityBasedOnWhere = exports.getEntitySettings = exports.fieldOptionsEnricher = exports.getControllerRef = exports.controllerRefImpl = exports.decorateColumnSettings = exports.getRelationFieldInfo = exports.getRelationInfo = exports.sqlRelationsFilter = exports.sqlRelations = void 0;
|
|
3
|
+
exports.pagedQueryResult = exports.DataProviderPromiseWrapper = exports.SseSubscriptionClient = exports.flags = exports.isOfType = exports.actionInfo = exports.__updateEntityBasedOnWhere = exports.getEntitySettings = exports.fieldOptionsEnricher = exports.getControllerRef = exports.controllerRefImpl = exports.decorateColumnSettings = exports.getRelationFieldInfo = exports.getRelationInfo = exports.sqlRelationsFilter = exports.sqlRelations = void 0;
|
|
4
4
|
var remult_static_js_1 = require("./src/remult-static.js");
|
|
5
5
|
var sql_relations_js_1 = require("./src/data-providers/sql-relations.js");
|
|
6
6
|
Object.defineProperty(exports, "sqlRelations", { enumerable: true, get: function () { return sql_relations_js_1.sqlRelations; } });
|
|
@@ -22,6 +22,8 @@ var isOfType_js_1 = require("./src/isOfType.js");
|
|
|
22
22
|
Object.defineProperty(exports, "isOfType", { enumerable: true, get: function () { return isOfType_js_1.isOfType; } });
|
|
23
23
|
var remult3_js_1 = require("./src/remult3/remult3.js");
|
|
24
24
|
Object.defineProperty(exports, "flags", { enumerable: true, get: function () { return remult3_js_1.flags; } });
|
|
25
|
+
var SseSubscriptionClient_js_1 = require("./src/live-query/SseSubscriptionClient.js");
|
|
26
|
+
Object.defineProperty(exports, "SseSubscriptionClient", { enumerable: true, get: function () { return SseSubscriptionClient_js_1.SseSubscriptionClient; } });
|
|
25
27
|
var data_interfaces_js_1 = require("./src/data-interfaces.js");
|
|
26
28
|
Object.defineProperty(exports, "DataProviderPromiseWrapper", { enumerable: true, get: function () { return data_interfaces_js_1.DataProviderPromiseWrapper; } });
|
|
27
29
|
var pagedQueryResult_js_1 = require("./src/remult3/pagedQueryResult.js");
|
package/package.json
CHANGED
package/remult-d1.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ 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;
|
|
6
7
|
/**
|
|
7
8
|
* For production or local d1 using binding
|
|
8
9
|
*
|