remult 0.24.0 → 0.24.2-exp.0

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 (88) hide show
  1. package/esm/index.js +3 -2
  2. package/esm/src/data-providers/ipfs-data-provider.js +22 -0
  3. package/esm/src/data-providers/json-data-provider.js +8 -8
  4. package/esm/src/remult3/remult3.js +7 -20
  5. package/index.d.ts +3 -1
  6. package/index.js +5 -3
  7. package/package.json +1 -1
  8. package/src/data-providers/ipfs-data-provider.d.ts +5 -0
  9. package/src/data-providers/ipfs-data-provider.js +60 -0
  10. package/src/data-providers/json-data-provider.d.ts +2 -2
  11. package/src/data-providers/json-data-provider.js +39 -16
  12. package/src/remult3/remult3.d.ts +0 -20
  13. package/src/remult3/remult3.js +7 -20
  14. package/esm/SseSubscriptionServer.d.ts +0 -25
  15. package/esm/ably.d.ts +0 -13
  16. package/esm/assign.d.ts +0 -1
  17. package/esm/classType.d.ts +0 -3
  18. package/esm/graphql.d.ts +0 -14
  19. package/esm/index.d.ts +0 -46
  20. package/esm/inputTypes.d.ts +0 -9
  21. package/esm/internals.d.ts +0 -7
  22. package/esm/live-query/data-provider-live-query-storage.d.ts +0 -23
  23. package/esm/myLog.d.ts +0 -1
  24. package/esm/postgres/index.d.ts +0 -2
  25. package/esm/postgres/postgres-data-provider.d.ts +0 -36
  26. package/esm/postgres/schema-builder.d.ts +0 -20
  27. package/esm/remult-express.d.ts +0 -9
  28. package/esm/remult-fastify.d.ts +0 -6
  29. package/esm/remult-fresh.d.ts +0 -17
  30. package/esm/remult-hapi.d.ts +0 -6
  31. package/esm/remult-knex/index.d.ts +0 -30
  32. package/esm/remult-mongo.d.ts +0 -24
  33. package/esm/remult-next.d.ts +0 -25
  34. package/esm/remult-sveltekit.d.ts +0 -6
  35. package/esm/server/JsonEntityFileStorage.d.ts +0 -11
  36. package/esm/server/core.d.ts +0 -4
  37. package/esm/server/expressBridge.d.ts +0 -136
  38. package/esm/server/index.d.ts +0 -6
  39. package/esm/server/initAsyncHooks.d.ts +0 -1
  40. package/esm/server/initDataProvider.d.ts +0 -2
  41. package/esm/src/CompoundIdField.d.ts +0 -27
  42. package/esm/src/__EntityValueProvider.d.ts +0 -11
  43. package/esm/src/__RowsOfDataForTesting.d.ts +0 -3
  44. package/esm/src/buildRestDataProvider.d.ts +0 -30
  45. package/esm/src/column-interfaces.d.ts +0 -172
  46. package/esm/src/column.d.ts +0 -19
  47. package/esm/src/context.d.ts +0 -134
  48. package/esm/src/data-api.d.ts +0 -39
  49. package/esm/src/data-interfaces.d.ts +0 -41
  50. package/esm/src/data-providers/array-entity-data-provider.d.ts +0 -4
  51. package/esm/src/data-providers/in-memory-database.d.ts +0 -9
  52. package/esm/src/data-providers/json-data-provider.d.ts +0 -12
  53. package/esm/src/data-providers/rest-data-provider.d.ts +0 -39
  54. package/esm/src/data-providers/sql-database.d.ts +0 -33
  55. package/esm/src/data-providers/web-sql-data-provider.d.ts +0 -21
  56. package/esm/src/entity.d.ts +0 -126
  57. package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -51
  58. package/esm/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -0
  59. package/esm/src/filter/filter-consumer-bridge-to-url-builder.js +0 -0
  60. package/esm/src/filter/filter-interfaces.d.ts +0 -74
  61. package/esm/src/live-query/LiveQueryClient.d.ts +0 -1
  62. package/esm/src/live-query/SseSubscriptionClient.d.ts +0 -5
  63. package/esm/src/live-query/SubscriptionChannel.d.ts +0 -41
  64. package/esm/src/live-query/SubscriptionServer.d.ts +0 -38
  65. package/esm/src/remult-proxy.d.ts +0 -2
  66. package/esm/src/remult3/DecoratorReplacer.d.ts +0 -9
  67. package/esm/src/remult3/Fields.d.ts +0 -133
  68. package/esm/src/remult3/IdEntity.d.ts +0 -4
  69. package/esm/src/remult3/RepositoryImplementation.d.ts +0 -289
  70. package/esm/src/remult3/__updateEntityBasedOnWhere.d.ts +0 -2
  71. package/esm/src/remult3/columnInfo.d.ts +0 -6
  72. package/esm/src/remult3/entity.d.ts +0 -28
  73. package/esm/src/remult3/getEntityRef.d.ts +0 -9
  74. package/esm/src/remult3/relation-loader-types.d.ts +0 -7
  75. package/esm/src/remult3/relation-loader.d.ts +0 -40
  76. package/esm/src/remult3/relationInfoMember.d.ts +0 -4
  77. package/esm/src/remult3/remult3.d.ts +0 -604
  78. package/esm/src/remult3/repository-internals.d.ts +0 -14
  79. package/esm/src/resultCompoundIdFilter.d.ts +0 -3
  80. package/esm/src/server-action-info.d.ts +0 -10
  81. package/esm/src/server-action.d.ts +0 -79
  82. package/esm/src/sort.d.ts +0 -16
  83. package/esm/src/sql-command.d.ts +0 -19
  84. package/esm/src/validators.d.ts +0 -14
  85. package/esm/src/valueConverters.d.ts +0 -13
  86. package/esm/urlBuilder.d.ts +0 -6
  87. package/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -0
  88. package/src/filter/filter-consumer-bridge-to-url-builder.js +0 -0
package/esm/index.js CHANGED
@@ -10,6 +10,7 @@ export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider.j
10
10
  export { SqlDatabase } from './src/data-providers/sql-database.js'; //V
11
11
  export { CustomSqlFilterBuilder, dbNamesOf, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
12
12
  export { JsonDataProvider, } from './src/data-providers/json-data-provider.js'; //V
13
+ export { IpfsEntityFileStorage } from './src/data-providers/ipfs-data-provider.js';
13
14
  //export * from './src/data-api'; //reconsider if to make internal
14
15
  export { Controller, BackendMethod, ProgressListener, } from './src/server-action.js';
15
16
  export { Allow, Remult, withRemult, isBackend, EventSource, } from './src/context.js';
@@ -36,6 +37,6 @@ export { SubscriptionChannel, } from './src/live-query/SubscriptionChannel.js';
36
37
  * await repo(Customer).insert()
37
38
  * ```
38
39
  */
39
- export function repo(entity) {
40
- return remult.repo(entity);
40
+ export function repo(entity, dataProvider) {
41
+ return remult.repo(entity, dataProvider);
41
42
  }
@@ -0,0 +1,22 @@
1
+ export class IpfsEntityFileStorage {
2
+ //@internal
3
+ opfsRoot;
4
+ async getItem(entityDbName) {
5
+ if (!this.opfsRoot) {
6
+ this.opfsRoot = await navigator.storage.getDirectory();
7
+ }
8
+ const opfsFile = await this.opfsRoot.getFileHandle(entityDbName + '.json', {
9
+ create: true,
10
+ });
11
+ const readable = await opfsFile.getFile();
12
+ return await readable.text();
13
+ }
14
+ async setItem(entityDbName, json) {
15
+ const opfsFile = await this.opfsRoot.getFileHandle(entityDbName + '.json', {
16
+ create: true,
17
+ });
18
+ const writable = await opfsFile.createWritable();
19
+ await writable.write(json);
20
+ await writable.close();
21
+ }
22
+ }
@@ -21,11 +21,11 @@ class JsonEntityDataProvider {
21
21
  async loadEntityData(what) {
22
22
  let data = [];
23
23
  let dbName = await this.entity.options.dbName;
24
- let s = this.helper.getItem(dbName);
24
+ let s = await this.helper.getItem(dbName);
25
25
  if (s)
26
26
  data = JSON.parse(s);
27
27
  let dp = new ArrayEntityDataProvider(this.entity, data);
28
- return what(dp, () => this.helper.setItem(dbName, JSON.stringify(data, undefined, 2)));
28
+ return what(dp, async () => await this.helper.setItem(dbName, JSON.stringify(data, undefined, 2)));
29
29
  }
30
30
  p = Promise.resolve();
31
31
  find(options) {
@@ -35,20 +35,20 @@ class JsonEntityDataProvider {
35
35
  return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.count(where))));
36
36
  }
37
37
  update(id, data) {
38
- return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.update(id, data).then((x) => {
39
- save();
38
+ return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.update(id, data).then(async (x) => {
39
+ await save();
40
40
  return x;
41
41
  }))));
42
42
  }
43
43
  delete(id) {
44
- return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.delete(id).then((x) => {
45
- save();
44
+ return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.delete(id).then(async (x) => {
45
+ await save();
46
46
  return x;
47
47
  }))));
48
48
  }
49
49
  async insert(data) {
50
- return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.insert(data).then((x) => {
51
- save();
50
+ return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.insert(data).then(async (x) => {
51
+ await save();
52
52
  return x;
53
53
  }))));
54
54
  }
@@ -1,25 +1,12 @@
1
1
  export {};
2
- //p1 - V - sql-expression for knex
3
- //p1 - V - postgres case sensitive
4
- //p1 - V - filterToRaw should get a dbnames of - and we should create a dbnames of that supports an alias
5
- //p1 - V - fix sql log to console to make more sense
6
- //p1 - V - change wrap name to wrapIdentifier, case insensitive identifiers
7
- //p1 - v - add schema option to create postgres data provider
8
- /*p1 - V - with remult async for remultexpress
9
- //y1 - lint tests (reference to js)
10
- //p1 - V Operator '>' cannot be applied to types 'Number' and 'number'.ts(2365) - change fields to <entityType,number> (now it's Number)
11
- //p1 - V Field(()=>String) - doesn't play nice with strict mode - it prevents people from extending basic types
12
- //p1 - V withRemult function Add a with remult to Remult! - there is an existing one called Remult.run
13
- //p1 - V - dbname to metadata consider making dbname in the field metadata options - non optional, so it'll be clear that it always have value - something like require the specific key - or move it to the metadata field
14
- //p1 - V - getEntityRefClone What I would like is to make a copy of the item (without getting it from the server again)
15
- //p1 - V find one i had a question about find first's different syntax from find that confused a user
16
- //p1 - https://dexie.org/
17
- rename V - withremultpromise to that withRemultAsync
18
- expose live query storage in remult
19
-
20
- request optional - and depends on that run `getUser` & `initRequest`
21
- */
2
+ /*y1 - investigated sqlite in web, the chrome recommendation seemed hardly used -
3
+ - https://developer.chrome.com/blog/sqlite-wasm-in-the-browser-backed-by-the-origin-private-file-system/
4
+ - https://www.npmjs.com/package/@sqlite.org/sqlite-wasm
5
+ All I could find is correspondance around evolu :) the guy I met in prague last year
6
+ Indexed db was also annoying with it's upgrade process etc...
7
+ I'm OPFS & json for now.
22
8
  //y2 - from the crm-demo(https://crm-demo.up.railway.app/deals), after editing a deal: - _updateEntityBasedOnApi
9
+
23
10
  //y2 - Backend methods are transactions, it's not intuitive and maybe should be optional / opt in
24
11
  //y2 - how to run a transaction as a user
25
12
  //p1 - enum column
package/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { ClassType } from './classType.js';
2
+ import type { DataProvider } from './src/data-interfaces.js';
2
3
  export type { ClassType } from './classType.js';
3
4
  export { MembersOnly, FieldsMetadata, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, FindOptionsBase, QueryResult, QueryOptions, Repository, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, EntityRef, SortSegments, Paginator, LiveQuery, LiveQueryChangeInfo, Subscribable, RefSubscriber, RefSubscriberBase, RelationOptions, ObjectMembersOnly, MembersToInclude, RepositoryRelations, EntityIdFields, ClassFieldDecorator, ClassFieldDecoratorContextStub, //n1 consider removing in ts5
4
5
  LifecycleEvent, FieldsRefBase, FieldsRefForEntityBase, RepositoryRelationsForEntityBase, ControllerRefForControllerBase, ControllerRefBase, ControllerRef, EntityRefForEntityBase, IdMetadata, FindFirstOptionsBase, } from './src/remult3/remult3.js';
@@ -19,6 +20,7 @@ export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider.j
19
20
  export { SqlDatabase } from './src/data-providers/sql-database.js';
20
21
  export { CustomSqlFilterObject, CustomSqlFilterBuilder, dbNamesOf, CustomSqlFilterBuilderFunction, EntityDbNames, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
21
22
  export { JsonDataProvider, JsonEntityStorage, } from './src/data-providers/json-data-provider.js';
23
+ export { IpfsEntityFileStorage } from './src/data-providers/ipfs-data-provider.js';
22
24
  export { Controller, BackendMethodOptions, BackendMethod, ProgressListener, } from './src/server-action.js';
23
25
  export { Allowed, Allow, Remult, withRemult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource, UserInfo, } from './src/context.js';
24
26
  export { ExternalHttpProvider } from './src/buildRestDataProvider.js';
@@ -43,4 +45,4 @@ export { SubscriptionListener, SubscriptionClientConnection, SubscriptionClient,
43
45
  * await repo(Customer).insert()
44
46
  * ```
45
47
  */
46
- export declare function repo<entityType>(entity: ClassType<entityType>): import("./src/remult3/remult3.js").Repository<entityType>;
48
+ export declare function repo<entityType>(entity: ClassType<entityType>, dataProvider?: DataProvider): import("./src/remult3/remult3.js").Repository<entityType>;
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.repo = exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = exports.remult = exports.ValueConverters = exports.Validators = exports.UrlBuilder = exports.Filter = exports.CompoundIdField = exports.Sort = exports.EventSource = exports.isBackend = exports.withRemult = exports.Remult = exports.Allow = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonDataProvider = exports.dbNamesOf = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.WebSqlDataProvider = exports.InMemoryDataProvider = exports.RestDataProvider = exports.describeClass = exports.IdEntity = exports.Relations = exports.Fields = exports.Field = exports.getEntityRef = exports.Entity = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = void 0;
3
+ exports.repo = exports.SubscriptionChannel = exports.InMemoryLiveQueryStorage = exports.remult = exports.ValueConverters = exports.Validators = exports.UrlBuilder = exports.Filter = exports.CompoundIdField = exports.Sort = exports.EventSource = exports.isBackend = exports.withRemult = exports.Remult = exports.Allow = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.IpfsEntityFileStorage = exports.JsonDataProvider = exports.dbNamesOf = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.WebSqlDataProvider = exports.InMemoryDataProvider = exports.RestDataProvider = exports.describeClass = exports.IdEntity = exports.Relations = exports.Fields = exports.Field = exports.getEntityRef = exports.Entity = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = void 0;
4
4
  var RepositoryImplementation_js_1 = require("./src/remult3/RepositoryImplementation.js");
5
5
  Object.defineProperty(exports, "EntityBase", { enumerable: true, get: function () { return RepositoryImplementation_js_1.EntityBase; } });
6
6
  Object.defineProperty(exports, "ControllerBase", { enumerable: true, get: function () { return RepositoryImplementation_js_1.ControllerBase; } });
@@ -35,6 +35,8 @@ Object.defineProperty(exports, "CustomSqlFilterBuilder", { enumerable: true, get
35
35
  Object.defineProperty(exports, "dbNamesOf", { enumerable: true, get: function () { return filter_consumer_bridge_to_sql_request_js_1.dbNamesOf; } });
36
36
  var json_data_provider_js_1 = require("./src/data-providers/json-data-provider.js"); //V
37
37
  Object.defineProperty(exports, "JsonDataProvider", { enumerable: true, get: function () { return json_data_provider_js_1.JsonDataProvider; } });
38
+ var ipfs_data_provider_js_1 = require("./src/data-providers/ipfs-data-provider.js");
39
+ Object.defineProperty(exports, "IpfsEntityFileStorage", { enumerable: true, get: function () { return ipfs_data_provider_js_1.IpfsEntityFileStorage; } });
38
40
  //export * from './src/data-api'; //reconsider if to make internal
39
41
  var server_action_js_1 = require("./src/server-action.js");
40
42
  Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return server_action_js_1.Controller; } });
@@ -78,7 +80,7 @@ Object.defineProperty(exports, "SubscriptionChannel", { enumerable: true, get: f
78
80
  * await repo(Customer).insert()
79
81
  * ```
80
82
  */
81
- function repo(entity) {
82
- return remult_proxy_js_2.remult.repo(entity);
83
+ function repo(entity, dataProvider) {
84
+ return remult_proxy_js_2.remult.repo(entity, dataProvider);
83
85
  }
84
86
  exports.repo = repo;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.24.0",
3
+ "version": "0.24.2-exp.0",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "homepage": "https://remult.dev",
6
6
  "repository": {
@@ -0,0 +1,5 @@
1
+ import type { JsonEntityStorage } from './json-data-provider.js';
2
+ export declare class IpfsEntityFileStorage implements JsonEntityStorage {
3
+ getItem(entityDbName: string): Promise<string>;
4
+ setItem(entityDbName: string, json: string): Promise<void>;
5
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IpfsEntityFileStorage = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var IpfsEntityFileStorage = /** @class */ (function () {
6
+ function IpfsEntityFileStorage() {
7
+ }
8
+ IpfsEntityFileStorage.prototype.getItem = function (entityDbName) {
9
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
10
+ var _a, opfsFile, readable;
11
+ return tslib_1.__generator(this, function (_b) {
12
+ switch (_b.label) {
13
+ case 0:
14
+ if (!!this.opfsRoot) return [3 /*break*/, 2];
15
+ _a = this;
16
+ return [4 /*yield*/, navigator.storage.getDirectory()];
17
+ case 1:
18
+ _a.opfsRoot = _b.sent();
19
+ _b.label = 2;
20
+ case 2: return [4 /*yield*/, this.opfsRoot.getFileHandle(entityDbName + '.json', {
21
+ create: true,
22
+ })];
23
+ case 3:
24
+ opfsFile = _b.sent();
25
+ return [4 /*yield*/, opfsFile.getFile()];
26
+ case 4:
27
+ readable = _b.sent();
28
+ return [4 /*yield*/, readable.text()];
29
+ case 5: return [2 /*return*/, _b.sent()];
30
+ }
31
+ });
32
+ });
33
+ };
34
+ IpfsEntityFileStorage.prototype.setItem = function (entityDbName, json) {
35
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
36
+ var opfsFile, writable;
37
+ return tslib_1.__generator(this, function (_a) {
38
+ switch (_a.label) {
39
+ case 0: return [4 /*yield*/, this.opfsRoot.getFileHandle(entityDbName + '.json', {
40
+ create: true,
41
+ })];
42
+ case 1:
43
+ opfsFile = _a.sent();
44
+ return [4 /*yield*/, opfsFile.createWritable()];
45
+ case 2:
46
+ writable = _a.sent();
47
+ return [4 /*yield*/, writable.write(json)];
48
+ case 3:
49
+ _a.sent();
50
+ return [4 /*yield*/, writable.close()];
51
+ case 4:
52
+ _a.sent();
53
+ return [2 /*return*/];
54
+ }
55
+ });
56
+ });
57
+ };
58
+ return IpfsEntityFileStorage;
59
+ }());
60
+ exports.IpfsEntityFileStorage = IpfsEntityFileStorage;
@@ -1,8 +1,8 @@
1
1
  import type { DataProvider, EntityDataProvider } from '../data-interfaces.js';
2
2
  import type { EntityMetadata } from '../remult3/remult3.js';
3
3
  export interface JsonEntityStorage {
4
- getItem(entityDbName: string): string | null;
5
- setItem(entityDbName: string, json: string): any;
4
+ getItem(entityDbName: string): string | null | Promise<string | null>;
5
+ setItem(entityDbName: string, json: string): void | Promise<void>;
6
6
  }
7
7
  export declare class JsonDataProvider implements DataProvider {
8
8
  private storage;
@@ -42,13 +42,18 @@ var JsonEntityDataProvider = /** @class */ (function () {
42
42
  return [4 /*yield*/, this.entity.options.dbName];
43
43
  case 1:
44
44
  dbName = _a.sent();
45
- s = this.helper.getItem(dbName);
45
+ return [4 /*yield*/, this.helper.getItem(dbName)];
46
+ case 2:
47
+ s = _a.sent();
46
48
  if (s)
47
49
  data = JSON.parse(s);
48
50
  dp = new array_entity_data_provider_js_1.ArrayEntityDataProvider(this.entity, data);
49
- return [2 /*return*/, what(dp, function () {
50
- return _this.helper.setItem(dbName, JSON.stringify(data, undefined, 2));
51
- })];
51
+ return [2 /*return*/, what(dp, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
52
+ switch (_a.label) {
53
+ case 0: return [4 /*yield*/, this.helper.setItem(dbName, JSON.stringify(data, undefined, 2))];
54
+ case 1: return [2 /*return*/, _a.sent()];
55
+ }
56
+ }); }); })];
52
57
  }
53
58
  });
54
59
  });
@@ -69,10 +74,16 @@ var JsonEntityDataProvider = /** @class */ (function () {
69
74
  var _this = this;
70
75
  return (this.p = this.p.then(function () {
71
76
  return _this.loadEntityData(function (dp, save) {
72
- return dp.update(id, data).then(function (x) {
73
- save();
74
- return x;
75
- });
77
+ return dp.update(id, data).then(function (x) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
78
+ return tslib_1.__generator(this, function (_a) {
79
+ switch (_a.label) {
80
+ case 0: return [4 /*yield*/, save()];
81
+ case 1:
82
+ _a.sent();
83
+ return [2 /*return*/, x];
84
+ }
85
+ });
86
+ }); });
76
87
  });
77
88
  }));
78
89
  };
@@ -80,10 +91,16 @@ var JsonEntityDataProvider = /** @class */ (function () {
80
91
  var _this = this;
81
92
  return (this.p = this.p.then(function () {
82
93
  return _this.loadEntityData(function (dp, save) {
83
- return dp.delete(id).then(function (x) {
84
- save();
85
- return x;
86
- });
94
+ return dp.delete(id).then(function (x) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
95
+ return tslib_1.__generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0: return [4 /*yield*/, save()];
98
+ case 1:
99
+ _a.sent();
100
+ return [2 /*return*/, x];
101
+ }
102
+ });
103
+ }); });
87
104
  });
88
105
  }));
89
106
  };
@@ -93,10 +110,16 @@ var JsonEntityDataProvider = /** @class */ (function () {
93
110
  return tslib_1.__generator(this, function (_a) {
94
111
  return [2 /*return*/, (this.p = this.p.then(function () {
95
112
  return _this.loadEntityData(function (dp, save) {
96
- return dp.insert(data).then(function (x) {
97
- save();
98
- return x;
99
- });
113
+ return dp.insert(data).then(function (x) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
114
+ return tslib_1.__generator(this, function (_a) {
115
+ switch (_a.label) {
116
+ case 0: return [4 /*yield*/, save()];
117
+ case 1:
118
+ _a.sent();
119
+ return [2 /*return*/, x];
120
+ }
121
+ });
122
+ }); });
100
123
  });
101
124
  }))];
102
125
  });
@@ -588,26 +588,6 @@ export interface ClassDecoratorContextStub<Class extends new (...args: any) => a
588
588
  addInitializer(initializer: (this: Class) => void): void;
589
589
  }
590
590
  export type ClassFieldDecorator<entityType, valueType> = (target: any, context: string | ClassFieldDecoratorContextStub<entityType, valueType | undefined>, c?: any) => void;
591
- /**
592
- * //p2 - doc this
593
- remult.apiClient.httpClient = (
594
- input: RequestInfo | URL,
595
- init?: RequestInit
596
- ) => {
597
- return fetch(input, {
598
- ...init,
599
- headers: {
600
- authorization: 'Bearer ' + sessionStorage.sessionId,
601
- },
602
- cache: 'no-store',
603
- })
604
- }
605
-
606
- &&
607
- remult.apiClient.url='localhost:3007/api
608
-
609
-
610
- */
611
591
  /**
612
592
  * our default is allow null false.
613
593
  * for sql databases we add a db default of 0/''/false
@@ -1,26 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //p1 - V - sql-expression for knex
4
- //p1 - V - postgres case sensitive
5
- //p1 - V - filterToRaw should get a dbnames of - and we should create a dbnames of that supports an alias
6
- //p1 - V - fix sql log to console to make more sense
7
- //p1 - V - change wrap name to wrapIdentifier, case insensitive identifiers
8
- //p1 - v - add schema option to create postgres data provider
9
- /*p1 - V - with remult async for remultexpress
10
- //y1 - lint tests (reference to js)
11
- //p1 - V Operator '>' cannot be applied to types 'Number' and 'number'.ts(2365) - change fields to <entityType,number> (now it's Number)
12
- //p1 - V Field(()=>String) - doesn't play nice with strict mode - it prevents people from extending basic types
13
- //p1 - V withRemult function Add a with remult to Remult! - there is an existing one called Remult.run
14
- //p1 - V - dbname to metadata consider making dbname in the field metadata options - non optional, so it'll be clear that it always have value - something like require the specific key - or move it to the metadata field
15
- //p1 - V - getEntityRefClone What I would like is to make a copy of the item (without getting it from the server again)
16
- //p1 - V find one i had a question about find first's different syntax from find that confused a user
17
- //p1 - https://dexie.org/
18
- rename V - withremultpromise to that withRemultAsync
19
- expose live query storage in remult
20
-
21
- request optional - and depends on that run `getUser` & `initRequest`
22
- */
3
+ /*y1 - investigated sqlite in web, the chrome recommendation seemed hardly used -
4
+ - https://developer.chrome.com/blog/sqlite-wasm-in-the-browser-backed-by-the-origin-private-file-system/
5
+ - https://www.npmjs.com/package/@sqlite.org/sqlite-wasm
6
+ All I could find is correspondance around evolu :) the guy I met in prague last year
7
+ Indexed db was also annoying with it's upgrade process etc...
8
+ I'm OPFS & json for now.
23
9
  //y2 - from the crm-demo(https://crm-demo.up.railway.app/deals), after editing a deal: - _updateEntityBasedOnApi
10
+
24
11
  //y2 - Backend methods are transactions, it's not intuitive and maybe should be optional / opt in
25
12
  //y2 - how to run a transaction as a user
26
13
  //p1 - enum column
@@ -1,25 +0,0 @@
1
- /// <reference types="node" />
2
- import type { GenericResponse } from './server/index';
3
- import type { Remult } from './src/context';
4
- import type { SubscriptionServer } from './src/live-query/SubscriptionServer';
5
- export declare class SseSubscriptionServer implements SubscriptionServer {
6
- private canUserConnectToChannel?;
7
- constructor(canUserConnectToChannel?: (channel: string, remult: Remult) => boolean);
8
- publishMessage<T>(channel: string, message: any): Promise<void>;
9
- }
10
- export interface ResponseRequiredForSSE {
11
- write(data: string): void;
12
- writeHead(status: number, headers: any): void;
13
- flush?(): void;
14
- }
15
- export declare class clientConnection {
16
- response: GenericResponse & ResponseRequiredForSSE;
17
- channels: Record<string, boolean>;
18
- timeOutRef: NodeJS.Timeout;
19
- close(): void;
20
- closed: boolean;
21
- write(eventData: string, eventType?: string): void;
22
- connectionId: any;
23
- constructor(response: GenericResponse & ResponseRequiredForSSE);
24
- sendLiveMessage(): void;
25
- }
package/esm/ably.d.ts DELETED
@@ -1,13 +0,0 @@
1
- import type * as Ably from '../../node_modules/ably';
2
- import type { SubscriptionClient, SubscriptionClientConnection } from './src/live-query/SubscriptionChannel';
3
- import type { SubscriptionServer } from './src/live-query/SubscriptionServer';
4
- export declare class AblySubscriptionClient implements SubscriptionClient {
5
- private ably;
6
- constructor(ably: Ably.Types.RealtimePromise);
7
- openConnection(onReconnect: VoidFunction): Promise<SubscriptionClientConnection>;
8
- }
9
- export declare class AblySubscriptionServer implements SubscriptionServer {
10
- private ably;
11
- constructor(ably: Ably.Types.RestPromise);
12
- publishMessage<T>(channel: string, message: T): Promise<void>;
13
- }
package/esm/assign.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function assign<T>(item: T, valuesToSet: Partial<T>): T;
@@ -1,3 +0,0 @@
1
- export type ClassType<T> = {
2
- new (...args: any[]): T;
3
- };
package/esm/graphql.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type { ClassType } from './classType';
2
- import { Remult } from './index';
3
- export declare function remultGraphql(options: {
4
- removeComments?: boolean;
5
- entities: ClassType<any>[];
6
- getRemultFromRequest?: (req: any) => Remult;
7
- }): {
8
- resolvers: {
9
- Query: Record<string, unknown>;
10
- Mutation: Record<string, unknown>;
11
- };
12
- rootValue: Record<string, any>;
13
- typeDefs: string;
14
- };
package/esm/index.d.ts DELETED
@@ -1,46 +0,0 @@
1
- import type { ClassType } from './classType';
2
- export type { ClassType } from './classType';
3
- export { MembersOnly, FieldsMetadata, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, FindOptionsBase, QueryResult, QueryOptions, Repository, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, EntityRef, SortSegments, Paginator, LiveQuery, LiveQueryChangeInfo, Subscribable, RefSubscriber, RefSubscriberBase, RelationOptions, ObjectMembersOnly, MembersToInclude, RepositoryRelations, EntityIdFields, ClassFieldDecorator, ClassFieldDecoratorContextStub, //n1 consider removing in ts5
4
- LifecycleEvent, FieldsRefBase, FieldsRefForEntityBase, RepositoryRelationsForEntityBase, ControllerRefForControllerBase, ControllerRefBase, ControllerRef, EntityRefForEntityBase, IdMetadata, FindFirstOptionsBase, } from './src/remult3/remult3';
5
- export { EntityBase, ControllerBase, FieldType, getFields, ValueListFieldType, getValueList, ValueListFieldOptions, ValueListInfo, CaptionTransformer, } from './src/remult3/RepositoryImplementation';
6
- export { Entity } from './src/remult3/entity';
7
- export { getEntityRef } from './src/remult3/getEntityRef';
8
- export { Field, Fields, StringFieldOptions, Relations, } from './src/remult3/Fields';
9
- export { IdEntity } from './src/remult3/IdEntity';
10
- export { describeClass } from './src/remult3/DecoratorReplacer';
11
- export { EntityOptions } from './src/entity';
12
- export { DataProvider, EntityDataProvider, EntityDataProviderFindOptions, ErrorInfo, RestDataProviderHttpProvider, } from './src/data-interfaces';
13
- export { SqlCommand, SqlCommandWithParameters, SqlImplementation, SqlResult, } from './src/sql-command';
14
- export { FieldMetadata, FieldOptions, FieldValidator, ValueConverter, ValueListItem, // reconsider, maybe it should go to remult angular as the abstraction ?
15
- ValueOrExpression, } from './src/column-interfaces';
16
- export { RestDataProvider } from './src/data-providers/rest-data-provider';
17
- export { InMemoryDataProvider } from './src/data-providers/in-memory-database';
18
- export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider';
19
- export { SqlDatabase } from './src/data-providers/sql-database';
20
- export { CustomSqlFilterObject, CustomSqlFilterBuilder, dbNamesOf, CustomSqlFilterBuilderFunction, EntityDbNames, } from './src/filter/filter-consumer-bridge-to-sql-request';
21
- export { JsonDataProvider, JsonEntityStorage, } from './src/data-providers/json-data-provider';
22
- export { Controller, BackendMethodOptions, BackendMethod, ProgressListener, } from './src/server-action';
23
- export { Allowed, Allow, Remult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource, UserInfo, } from './src/context';
24
- export { ExternalHttpProvider } from './src/buildRestDataProvider';
25
- export { SortSegment, Sort } from './src/sort';
26
- export { CompoundIdField } from './src/CompoundIdField';
27
- export { Filter, FilterConsumer, customFilterInfo, } from './src/filter/filter-interfaces';
28
- export { UrlBuilder } from './urlBuilder';
29
- export { Validators } from './src/validators';
30
- export { ValueConverters } from './src/valueConverters';
31
- export { remult } from './src/remult-proxy';
32
- export { SubscriptionServer, LiveQueryStorage, StoredQuery, InMemoryLiveQueryStorage, } from './src/live-query/SubscriptionServer';
33
- export { SubscriptionListener, SubscriptionClientConnection, SubscriptionClient, SubscriptionChannel, LiveQueryChange, Unsubscribe, } from './src/live-query/SubscriptionChannel';
34
- /**
35
- * A convenient shortcut function to quickly obtain a repository for a specific entity type in Remult.
36
- *
37
- * @param entity The entity class type for which you want to get a repository.
38
- * @returns A repository instance for the specified entity type.
39
- *
40
- * Example usage:
41
- * ```ts
42
- * await repo(Task).find()
43
- * await repo(Customer).insert()
44
- * ```
45
- */
46
- export declare function repo<entityType>(entity: ClassType<entityType>): import("./src/remult3/remult3").Repository<entityType>;
@@ -1,9 +0,0 @@
1
- export declare class InputTypes {
2
- static number: string;
3
- static date: string;
4
- static checkbox: string;
5
- static password: string;
6
- static email: string;
7
- static tel: string;
8
- static time: string;
9
- }
@@ -1,7 +0,0 @@
1
- export { getRelationInfo } from './src/remult3/relationInfoMember';
2
- export { decorateColumnSettings, controllerRefImpl, getControllerRef, } from './src/remult3/RepositoryImplementation';
3
- export { getEntitySettings } from './src/remult3/getEntityRef';
4
- export { __updateEntityBasedOnWhere } from './src/filter/filter-interfaces';
5
- export { actionInfo } from './src/server-action-info';
6
- export { RelationInfo } from './src/remult3/remult3';
7
- export { ClassType } from './classType';
@@ -1,23 +0,0 @@
1
- import type { DataProvider, Storage } from '../src/data-interfaces';
2
- import type { LiveQueryStorage, StoredQuery } from '../src/live-query/SubscriptionServer';
3
- import type { Repository } from '../src/remult3/remult3';
4
- import { EntityBase } from '../src/remult3/RepositoryImplementation';
5
- export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, Storage {
6
- repo: Promise<Repository<LiveQueryStorageEntity>>;
7
- dataProvider: Promise<DataProvider>;
8
- constructor(dataProvider: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>));
9
- ensureSchema(): Promise<void>;
10
- add({ id, entityKey, data }: StoredQuery): Promise<void>;
11
- remove(queryId: string): Promise<void>;
12
- forEach(entityKey: string, callback: (args: {
13
- query: StoredQuery;
14
- setData(data: any): Promise<void>;
15
- }) => Promise<void>): Promise<void>;
16
- keepAliveAndReturnUnknownQueryIds(queryIds: string[]): Promise<string[]>;
17
- }
18
- export declare class LiveQueryStorageEntity extends EntityBase {
19
- id: string;
20
- entityKey: string;
21
- data: any;
22
- lastUsedIso: string;
23
- }
package/esm/myLog.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function writeToLog(what: any): Promise<void>;
@@ -1,2 +0,0 @@
1
- export * from './postgres-data-provider';
2
- export * from './schema-builder';
@@ -1,36 +0,0 @@
1
- import type { ClientBase, PoolConfig, QueryResult } from 'pg';
2
- import { Remult } from '../src/context';
3
- import { SqlDatabase } from '../src/data-providers/sql-database';
4
- import type { EntityMetadata } from '../src/remult3/remult3';
5
- import type { SqlCommand, SqlImplementation } from '../src/sql-command';
6
- export interface PostgresPool extends PostgresCommandSource {
7
- connect(): Promise<PostgresClient>;
8
- }
9
- export interface PostgresClient extends PostgresCommandSource {
10
- release(): void;
11
- }
12
- export declare class PostgresDataProvider implements SqlImplementation {
13
- private pool;
14
- supportsJsonColumnType: boolean;
15
- static getDb(remult?: Remult): ClientBase;
16
- entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
17
- getLimitSqlSyntax(limit: number, offset: number): string;
18
- createCommand(): SqlCommand;
19
- constructor(pool: PostgresPool);
20
- ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
21
- transaction(action: (dataProvider: SqlImplementation) => Promise<void>): Promise<void>;
22
- }
23
- export interface PostgresCommandSource {
24
- query(queryText: string, values?: any[]): Promise<QueryResult>;
25
- }
26
- export declare function createPostgresConnection(options?: {
27
- connectionString?: string;
28
- sslInDev?: boolean;
29
- configuration?: 'heroku' | PoolConfig;
30
- }): Promise<SqlDatabase>;
31
- export declare function createPostgresDataProvider(options?: {
32
- connectionString?: string;
33
- sslInDev?: boolean;
34
- configuration?: 'heroku' | PoolConfig;
35
- }): Promise<SqlDatabase>;
36
- export declare function preparePostgresQueueStorage(sql: SqlDatabase): Promise<import("../server/expressBridge").EntityQueueStorage>;
@@ -1,20 +0,0 @@
1
- import type { FieldMetadata } from '../src/column-interfaces';
2
- import type { Remult } from '../src/context';
3
- import type { SqlDatabase } from '../src/data-providers/sql-database';
4
- import type { EntityMetadata } from '../src/remult3/remult3';
5
- export declare function postgresColumnSyntax(x: FieldMetadata, dbName: string): string;
6
- export declare function verifyStructureOfAllEntities(db: SqlDatabase, remult: Remult): Promise<void>;
7
- export declare class PostgresSchemaBuilder {
8
- private pool;
9
- private removeQuotes;
10
- private whereTableAndSchema;
11
- private schemaAndName;
12
- private schemaOnly;
13
- verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
14
- ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
15
- createIfNotExist(entity: EntityMetadata): Promise<void>;
16
- addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: (e: T) => FieldMetadata): Promise<void>;
17
- verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
18
- specifiedSchema: string;
19
- constructor(pool: SqlDatabase, schema?: string);
20
- }