remult 0.26.10 → 0.26.11-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/esm/internals.js +1 -0
  2. package/esm/postgres/postgres-data-provider.js +2 -2
  3. package/esm/remult-fresh.js +1 -1
  4. package/esm/remult-sqlite-core.js +5 -4
  5. package/esm/server/core.js +1 -1
  6. package/esm/server/index.js +1 -1
  7. package/esm/src/buildRestDataProvider.js +3 -2
  8. package/esm/src/data-providers/array-entity-data-provider.js +2 -2
  9. package/esm/src/data-providers/sql-database.js +1 -1
  10. package/esm/src/live-query/LiveQueryClient.js +9 -2
  11. package/esm/src/live-query/SseSubscriptionClient.js +7 -3
  12. package/esm/src/live-query/SubscriptionChannel.js +2 -0
  13. package/esm/src/remult3/RepositoryImplementation.js +13 -5
  14. package/esm/src/remult3/remult3.js +9 -8
  15. package/internals.d.ts +1 -0
  16. package/internals.js +3 -1
  17. package/package.json +1 -1
  18. package/postgres/postgres-data-provider.d.ts +1 -1
  19. package/postgres/postgres-data-provider.js +2 -2
  20. package/remult-express.d.ts +1 -1
  21. package/remult-fastify.d.ts +1 -1
  22. package/remult-fresh.d.ts +1 -1
  23. package/remult-fresh.js +2 -2
  24. package/remult-sqlite-core.d.ts +1 -1
  25. package/remult-sqlite-core.js +5 -4
  26. package/server/core.d.ts +1 -1
  27. package/server/core.js +2 -2
  28. package/server/index.d.ts +2 -2
  29. package/server/index.js +2 -2
  30. package/src/buildRestDataProvider.js +3 -2
  31. package/src/data-providers/array-entity-data-provider.js +2 -2
  32. package/src/data-providers/sql-database.js +0 -1
  33. package/src/live-query/LiveQueryClient.js +10 -2
  34. package/src/live-query/SseSubscriptionClient.js +7 -3
  35. package/src/live-query/SubscriptionChannel.js +4 -1
  36. package/src/remult3/RepositoryImplementation.js +55 -30
  37. package/src/remult3/remult3.d.ts +3 -0
  38. package/src/remult3/remult3.js +10 -7
  39. /package/esm/server/{expressBridge.js → remult-api-server.js} +0 -0
  40. /package/server/{expressBridge.d.ts → remult-api-server.d.ts} +0 -0
  41. /package/server/{expressBridge.js → remult-api-server.js} +0 -0
package/esm/internals.js CHANGED
@@ -4,3 +4,4 @@ export { decorateColumnSettings, controllerRefImpl, getControllerRef, } from './
4
4
  export { getEntitySettings } from './src/remult3/getEntityRef.js';
5
5
  export { __updateEntityBasedOnWhere } from './src/filter/filter-interfaces.js';
6
6
  export const actionInfo = remultStatic.actionInfo;
7
+ export { flags } from './src/remult3/remult3.js';
@@ -163,11 +163,11 @@ export async function createPostgresDataProvider(options) {
163
163
  export async function preparePostgresQueueStorage(sql) {
164
164
  let c = new Remult();
165
165
  c.dataProvider = sql;
166
- let JobsInQueueEntity = (await import('../server/expressBridge.js'))
166
+ let JobsInQueueEntity = (await import('../server/remult-api-server.js'))
167
167
  .JobsInQueueEntity;
168
168
  let e = c.repo(JobsInQueueEntity);
169
169
  await sql.ensureSchema([e.metadata]);
170
- return new (await import('../server/expressBridge.js')).EntityQueueStorage(c.repo(JobsInQueueEntity));
170
+ return new (await import('../server/remult-api-server.js')).EntityQueueStorage(c.repo(JobsInQueueEntity));
171
171
  }
172
172
  export class PostgresSchemaWrapper {
173
173
  pool;
@@ -1,4 +1,4 @@
1
- import { createRemultServerCore } from './server/expressBridge.js';
1
+ import { createRemultServerCore } from './server/remult-api-server.js';
2
2
  export function remultFresh(options, response) {
3
3
  const server = createRemultServerCore(options, {
4
4
  buildGenericRequestInfo: (r) => r,
@@ -22,7 +22,7 @@ export class SqliteCoreDataProvider {
22
22
  builder.addSql(await self.getCreateTableSql(entity));
23
23
  },
24
24
  addColumn: async (entity, field) => {
25
- let e = await dbNamesOf(entity);
25
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
26
26
  let sql = `alter table ${e.$entityName} add column ${self.addColumnSqlSyntax(field, e.$dbNameOf(field))}`;
27
27
  builder.addSql(sql);
28
28
  },
@@ -46,7 +46,7 @@ export class SqliteCoreDataProvider {
46
46
  }
47
47
  }
48
48
  async dropTable(entity) {
49
- let e = await dbNamesOf(entity);
49
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
50
50
  let sql = 'drop table if exists ' + e.$entityName;
51
51
  if (SqlDatabase.LogToConsole)
52
52
  console.info(sql);
@@ -78,7 +78,7 @@ export class SqliteCoreDataProvider {
78
78
  supportsJsonColumnType;
79
79
  async getCreateTableSql(entity) {
80
80
  let result = '';
81
- let e = await dbNamesOf(entity);
81
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
82
82
  for (const x of entity.fields) {
83
83
  if (!shouldNotCreateField(x, e) || isAutoIncrement(x)) {
84
84
  if (result.length != 0)
@@ -101,6 +101,7 @@ export class SqliteCoreDataProvider {
101
101
  return sql;
102
102
  }
103
103
  wrapIdentifier(name) {
104
- return name;
104
+ //return name
105
+ return '`' + name + '`';
105
106
  }
106
107
  }
@@ -1,4 +1,4 @@
1
- export { createRemultServerCore, } from './expressBridge.js';
1
+ export { createRemultServerCore, } from './remult-api-server.js';
2
2
  export { JsonEntityFileStorage, JsonFileDataProvider, } from './JsonEntityFileStorage.js';
3
3
  export { SseSubscriptionServer } from '../SseSubscriptionServer.js';
4
4
  export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage.js';
@@ -1,4 +1,4 @@
1
- import { createRemultServerCore } from './expressBridge.js';
1
+ import { createRemultServerCore } from './remult-api-server.js';
2
2
  import { initAsyncHooks } from './initAsyncHooks.js';
3
3
  export { SseSubscriptionServer } from '../SseSubscriptionServer.js';
4
4
  export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage.js';
@@ -1,4 +1,5 @@
1
1
  import { RestDataProviderHttpProviderUsingFetch } from './data-providers/rest-data-provider.js';
2
+ import { flags } from './remult3/remult3.js';
2
3
  export function buildRestDataProvider(provider) {
3
4
  if (!provider)
4
5
  return new RestDataProviderHttpProviderUsingFetch();
@@ -51,11 +52,11 @@ export async function retry(what) {
51
52
  err.message?.includes('http proxy error') ||
52
53
  err.message?.startsWith('Gateway Timeout') ||
53
54
  err.status == 500) &&
54
- i++ < 50) {
55
+ i++ < flags.error500RetryCount) {
55
56
  await new Promise((res, req) => {
56
57
  setTimeout(() => {
57
58
  res({});
58
- }, 250);
59
+ }, 500);
59
60
  });
60
61
  continue;
61
62
  }
@@ -134,7 +134,7 @@ export class ArrayEntityDataProvider {
134
134
  return Promise.resolve(this.translateFromJson(this.rows()[i], names));
135
135
  }
136
136
  }
137
- throw new Error("couldn't find id to update: " + id);
137
+ throw new Error(`ArrayEntityDataProvider: Couldn't find row with id "${id}" in entity "${this.entity.key}" to update`);
138
138
  }
139
139
  async delete(id) {
140
140
  const names = await this.init();
@@ -145,7 +145,7 @@ export class ArrayEntityDataProvider {
145
145
  return Promise.resolve();
146
146
  }
147
147
  }
148
- throw new Error("couldn't find id to delete: " + id);
148
+ throw new Error(`ArrayEntityDataProvider: Couldn't find row with id "${id}" in entity "${this.entity.key}" to delete`);
149
149
  }
150
150
  async insert(data) {
151
151
  const names = await this.init();
@@ -100,7 +100,7 @@ export class SqlDatabase {
100
100
  },
101
101
  };
102
102
  }
103
- static async filterToRaw(repo, condition, sqlCommand, dbNames, wrapIdentifier = (x) => x) {
103
+ static async filterToRaw(repo, condition, sqlCommand, dbNames, wrapIdentifier) {
104
104
  if (!sqlCommand) {
105
105
  sqlCommand = new myDummySQLCommand();
106
106
  }
@@ -67,7 +67,7 @@ export class LiveQueryClient {
67
67
  onUnsubscribe = () => { };
68
68
  };
69
69
  }
70
- closeIfNoListeners() {
70
+ _actuallyClose() {
71
71
  if (this.client)
72
72
  if (this.queries.size === 0 && this.channels.size === 0) {
73
73
  this.runPromise(this.client.then((x) => x.close()));
@@ -76,6 +76,12 @@ export class LiveQueryClient {
76
76
  this.interval = undefined;
77
77
  }
78
78
  }
79
+ keepAliveMs = 1000;
80
+ closeIfNoListeners() {
81
+ setTimeout(() => {
82
+ this._actuallyClose();
83
+ }, this.keepAliveMs);
84
+ }
79
85
  subscribe(repo, options, listener) {
80
86
  let alive = true;
81
87
  let onUnsubscribe = () => {
@@ -162,7 +168,8 @@ export class LiveQueryClient {
162
168
  this.interval = setInterval(async () => {
163
169
  const ids = [];
164
170
  for (const q of this.queries.values()) {
165
- ids.push(q.queryChannel);
171
+ if (q.gotAnyResult)
172
+ ids.push(q.queryChannel);
166
173
  }
167
174
  if (ids.length > 0) {
168
175
  let p = this.apiProvider();
@@ -1,6 +1,7 @@
1
1
  import { buildRestDataProvider } from '../buildRestDataProvider.js';
2
2
  import { remult } from '../remult-proxy.js';
3
3
  import { remultStatic } from '../remult-static.js';
4
+ import { flags } from '../remult3/remult3.js';
4
5
  import { streamUrl } from './SubscriptionChannel.js';
5
6
  export class SseSubscriptionClient {
6
7
  openConnection(onReconnect) {
@@ -34,6 +35,7 @@ export class SseSubscriptionClient {
34
35
  };
35
36
  const createConnectionPromise = () => new Promise((res) => {
36
37
  createConnection();
38
+ let retryCount = 0;
37
39
  function createConnection() {
38
40
  if (source)
39
41
  source.close();
@@ -47,9 +49,11 @@ export class SseSubscriptionClient {
47
49
  source.onerror = (e) => {
48
50
  console.error('Live Query Event Source Error', e);
49
51
  source.close();
50
- setTimeout(() => {
51
- createConnection();
52
- }, 500);
52
+ if (retryCount++ < flags.error500RetryCount) {
53
+ setTimeout(() => {
54
+ createConnection();
55
+ }, 500);
56
+ }
53
57
  };
54
58
  source.addEventListener('connectionId', async (e) => {
55
59
  //@ts-ignore
@@ -10,10 +10,12 @@ export class LiveQuerySubscriber {
10
10
  sendDefaultState(onResult) {
11
11
  onResult(this.createReducerType(() => [...this.defaultQueryState], this.allItemsMessage(this.defaultQueryState)));
12
12
  }
13
+ gotAnyResult = false;
13
14
  queryChannel;
14
15
  subscribeCode;
15
16
  unsubscribe = () => { };
16
17
  async setAllItems(result) {
18
+ this.gotAnyResult = true;
17
19
  const items = await getRepositoryInternals(this.repo)._fromJsonArray(result, this.query.options);
18
20
  this.forListeners((listener) => {
19
21
  listener(() => {
@@ -226,7 +226,7 @@ export class RepositoryImplementation {
226
226
  refs.push(ref);
227
227
  raw.push(await ref.buildDtoForInsert());
228
228
  }
229
- return Promise.all((await this._edp.insertMany(raw)).map((item, i) => refs[i].processInsertResponseDto(item)));
229
+ return promiseAll(await this._edp.insertMany(raw), (item, i) => refs[i].processInsertResponseDto(item));
230
230
  }
231
231
  else {
232
232
  let r = [];
@@ -354,7 +354,7 @@ export class RepositoryImplementation {
354
354
  }
355
355
  async save(entity) {
356
356
  if (Array.isArray(entity)) {
357
- return Promise.all(entity.map((x) => this.save(x)));
357
+ return promiseAll(entity, (x) => this.save(x));
358
358
  }
359
359
  else {
360
360
  let ref = getEntityRef(entity, false);
@@ -476,7 +476,7 @@ export class RepositoryImplementation {
476
476
  repo._addToCache(r);
477
477
  }
478
478
  }
479
- let result = await Promise.all(rawRows.map(async (r) => await this._mapRawDataToResult(r, loadFields)));
479
+ let result = await promiseAll(rawRows, async (r) => await this._mapRawDataToResult(r, loadFields));
480
480
  for (const col of this.metadata.fields) {
481
481
  let rel = getRelationFieldInfo(col);
482
482
  let incl = col.options
@@ -972,7 +972,7 @@ class rowHelperBase {
972
972
  }
973
973
  lookups = new Map();
974
974
  async waitLoad() {
975
- await Promise.all([...this.lookups.values()].map((x) => x.waitLoad()));
975
+ await promiseAll([...this.lookups.values()], (x) => x.waitLoad());
976
976
  }
977
977
  errors;
978
978
  __assertValidity() {
@@ -1144,7 +1144,7 @@ class rowHelperBase {
1144
1144
  }
1145
1145
  }
1146
1146
  }
1147
- await Promise.all([...this.fields].map((x) => x.load()));
1147
+ await promiseAll([...this.fields].filter((f) => !getRelationFieldInfo(f.metadata)), (x) => x.load());
1148
1148
  }
1149
1149
  }
1150
1150
  export class rowHelperImplementation extends rowHelperBase {
@@ -2398,3 +2398,11 @@ export function getRepository(entity) {
2398
2398
  }
2399
2399
  return entity;
2400
2400
  }
2401
+ async function promiseAll(array, mapToPromise) {
2402
+ const result = [];
2403
+ for (let index = 0; index < array.length; index++) {
2404
+ const element = array[index];
2405
+ result.push(await mapToPromise(element, index));
2406
+ }
2407
+ return result;
2408
+ }
@@ -1,8 +1,12 @@
1
- export {};
1
+ export const flags = {
2
+ error500RetryCount: 4,
3
+ };
2
4
  //y2 - soft-delete-discussion https://discord.com/channels/975754286384418847/1230386433093533698/1230386433093533698
3
- //y1 - In the esm version of our tutorial - the imports are automatically .ts and not .js in react and not in vue
4
- //y1 - consider id to also support keyof (id:['company','index']) - had problem with | (keyof Partial<entityType>)[] & `entity`
5
- //y2 - readonly key: keyof MembersOnly<entityType> & string
5
+ //y1 - live query with count #436
6
+ //y1 - live query errort that appears in tests but I can't understand why - `open connection error `
7
+ //y1 TODO - In the esm version of our tutorial - the imports are automatically .ts and not .js in react and not in vue
8
+ //y1 TODO - consider id to also support keyof (id:['company','index']) - had problem with | (keyof Partial<entityType>)[] & `entity`
9
+ //y1 TODO - readonly key: keyof MembersOnly<entityType> & string
6
10
  //y1 - talk about insert / update / delete with relations
7
11
  /*
8
12
  repo(Order).insert({},{
@@ -22,14 +26,12 @@ export {};
22
26
  //p1 - wait a second to close stream
23
27
  //p1 - prepare the createEntity discussion
24
28
  //p1 - return error on connection error
25
- //p1 - reconsider key typing to be keyof & string
26
29
  //p1 - article on displayValue including it's definition for entities that is used in relations
30
+ //p1 - article auth.js with express - played with it, requires type="module" and a few more configurations - https://github.com/noam-honig/express-auth
27
31
  //p2 -fix remult admin not to load the html into memory until used
28
- //y2 - JY suggestion of having generate as part of the ensure schema - not sure
29
32
  //y2 - currently for string fields we default for 255 in knex (which is their default) why not just use text (varchar max) - and only use exact length when one is provided?
30
33
  //p2 - create foreign key constraints in user code - https://codesandbox.io/p/devbox/fk-validator-tdshcs
31
34
  //p2 - admin url1 - pocketbase use /_ for the admin //{allowed?:Allowed,url?:string} also checkout the admin* as it should probably be something else and didn't work in hono
32
- //p1 - article auth.js with express - played with it, requires type="module" and a few more configurations - https://github.com/noam-honig/express-auth
33
35
  //y2 - fix validators cache
34
36
  //y2 - should we validate relations
35
37
  //y1 - dependency of live query tables live query refresh of view on table update
@@ -79,7 +81,6 @@ export {};
79
81
  //p1 - when a tasks table exists in a different schema - we get many errors
80
82
  //p1 - live query with include
81
83
  //p1 - adjust angular tutorial starter kit for latest angular (as is in tutorial)
82
- //p2 - when subscribe is forbidden - the query still runs after the renew process
83
84
  //p2 - 'update tasks set where id = $1
84
85
  //p2 - type metadata.key - to keyof entity - based on cwis input
85
86
  //y2 - remove __dirname from tutorials
package/internals.d.ts CHANGED
@@ -12,3 +12,4 @@ export declare const actionInfo: {
12
12
  };
13
13
  };
14
14
  export { ClassType } from './classType.js';
15
+ export { flags } from './src/remult3/remult3.js';
package/internals.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.actionInfo = exports.__updateEntityBasedOnWhere = exports.getEntitySettings = exports.getControllerRef = exports.controllerRefImpl = exports.decorateColumnSettings = exports.getRelationFieldInfo = exports.getRelationInfo = void 0;
3
+ exports.flags = exports.actionInfo = exports.__updateEntityBasedOnWhere = exports.getEntitySettings = exports.getControllerRef = exports.controllerRefImpl = exports.decorateColumnSettings = exports.getRelationFieldInfo = exports.getRelationInfo = void 0;
4
4
  var remult_static_js_1 = require("./src/remult-static.js");
5
5
  var relationInfoMember_js_1 = require("./src/remult3/relationInfoMember.js");
6
6
  Object.defineProperty(exports, "getRelationInfo", { enumerable: true, get: function () { return relationInfoMember_js_1.getRelationInfo; } });
@@ -14,3 +14,5 @@ Object.defineProperty(exports, "getEntitySettings", { enumerable: true, get: fun
14
14
  var filter_interfaces_js_1 = require("./src/filter/filter-interfaces.js");
15
15
  Object.defineProperty(exports, "__updateEntityBasedOnWhere", { enumerable: true, get: function () { return filter_interfaces_js_1.__updateEntityBasedOnWhere; } });
16
16
  exports.actionInfo = remult_static_js_1.remultStatic.actionInfo;
17
+ var remult3_js_1 = require("./src/remult3/remult3.js");
18
+ Object.defineProperty(exports, "flags", { enumerable: true, get: function () { return remult3_js_1.flags; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.26.10",
3
+ "version": "0.26.11-next.1",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "homepage": "https://remult.dev",
6
6
  "repository": {
@@ -45,7 +45,7 @@ export declare function createPostgresDataProvider(options?: {
45
45
  schema?: string;
46
46
  orderByNullsFirst?: boolean;
47
47
  }): Promise<SqlDatabase>;
48
- export declare function preparePostgresQueueStorage(sql: SqlDatabase): Promise<import("../server/expressBridge.js").EntityQueueStorage>;
48
+ export declare function preparePostgresQueueStorage(sql: SqlDatabase): Promise<import("../server/remult-api-server.js").EntityQueueStorage>;
49
49
  export declare class PostgresSchemaWrapper implements PostgresPool {
50
50
  private pool;
51
51
  private schema;
@@ -248,7 +248,7 @@ function preparePostgresQueueStorage(sql) {
248
248
  case 0:
249
249
  c = new context_js_1.Remult();
250
250
  c.dataProvider = sql;
251
- return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/expressBridge.js')); })];
251
+ return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/remult-api-server.js')); })];
252
252
  case 1:
253
253
  JobsInQueueEntity = (_a.sent())
254
254
  .JobsInQueueEntity;
@@ -256,7 +256,7 @@ function preparePostgresQueueStorage(sql) {
256
256
  return [4 /*yield*/, sql.ensureSchema([e.metadata])];
257
257
  case 2:
258
258
  _a.sent();
259
- return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/expressBridge.js')); })];
259
+ return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/remult-api-server.js')); })];
260
260
  case 3: return [2 /*return*/, new (_a.sent()).EntityQueueStorage(c.repo(JobsInQueueEntity))];
261
261
  }
262
262
  });
@@ -1,5 +1,5 @@
1
1
  import * as express from 'express';
2
- import type { RemultServer, RemultServerCore, RemultServerOptions } from './server/expressBridge.js';
2
+ import type { RemultServer, RemultServerCore, RemultServerOptions } from './server/remult-api-server.js';
3
3
  export declare function remultExpress(options?: RemultServerOptions<express.Request> & {
4
4
  bodyParser?: boolean;
5
5
  bodySizeLimit?: string;
@@ -1,5 +1,5 @@
1
1
  import type { FastifyPluginCallback, FastifyRequest } from 'fastify';
2
- import type { RemultServerCore, RemultServerOptions, RemultServer } from './server/expressBridge.js';
2
+ import type { RemultServerCore, RemultServerOptions, RemultServer } from './server/remult-api-server.js';
3
3
  export declare function remultFastify(options: RemultServerOptions<FastifyRequest>): RemultFastifyServer;
4
4
  export type RemultFastifyServer = FastifyPluginCallback & RemultServerCore<FastifyRequest> & {
5
5
  withRemult: RemultServer<FastifyRequest>['withRemultAsync'];
package/remult-fresh.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { RemultServerCore, RemultServerOptions } from './server/expressBridge.js';
1
+ import type { RemultServerCore, RemultServerOptions } from './server/remult-api-server.js';
2
2
  export declare function remultFresh(options: RemultServerOptions<FreshRequest>, response: FreshResponse): RemultFresh;
3
3
  export interface RemultFresh extends RemultServerCore<FreshRequest> {
4
4
  handle(req: FreshRequest, ctx: FreshContext): Promise<any>;
package/remult-fresh.js CHANGED
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.remultFresh = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var expressBridge_js_1 = require("./server/expressBridge.js");
5
+ var remult_api_server_js_1 = require("./server/remult-api-server.js");
6
6
  function remultFresh(options, response) {
7
7
  var _this = this;
8
- var server = (0, expressBridge_js_1.createRemultServerCore)(options, {
8
+ var server = (0, remult_api_server_js_1.createRemultServerCore)(options, {
9
9
  buildGenericRequestInfo: function (r) { return r; },
10
10
  getRequestBody: function (req) { return req.json(); },
11
11
  });
@@ -18,5 +18,5 @@ export declare class SqliteCoreDataProvider implements SqlImplementation, CanBui
18
18
  createTableIfNotExist(entity: EntityMetadata<any>): Promise<void>;
19
19
  supportsJsonColumnType?: boolean;
20
20
  private getCreateTableSql;
21
- wrapIdentifier?(name: string): string;
21
+ wrapIdentifier(name: string): string;
22
22
  }
@@ -36,7 +36,7 @@ var SqliteCoreDataProvider = /** @class */ (function () {
36
36
  var e, sql;
37
37
  return tslib_1.__generator(this, function (_a) {
38
38
  switch (_a.label) {
39
- case 0: return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity)];
39
+ case 0: return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity, this.wrapIdentifier)];
40
40
  case 1:
41
41
  e = _a.sent();
42
42
  sql = "alter table ".concat(e.$entityName, " add column ").concat(self.addColumnSqlSyntax(field, e.$dbNameOf(field)));
@@ -117,7 +117,7 @@ var SqliteCoreDataProvider = /** @class */ (function () {
117
117
  var e, sql;
118
118
  return tslib_1.__generator(this, function (_a) {
119
119
  switch (_a.label) {
120
- case 0: return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity)];
120
+ case 0: return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity, this.wrapIdentifier)];
121
121
  case 1:
122
122
  e = _a.sent();
123
123
  sql = 'drop table if exists ' + e.$entityName;
@@ -174,7 +174,7 @@ var SqliteCoreDataProvider = /** @class */ (function () {
174
174
  switch (_d.label) {
175
175
  case 0:
176
176
  result = '';
177
- return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity)];
177
+ return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity, this.wrapIdentifier)];
178
178
  case 1:
179
179
  e = _d.sent();
180
180
  try {
@@ -212,7 +212,8 @@ var SqliteCoreDataProvider = /** @class */ (function () {
212
212
  });
213
213
  };
214
214
  SqliteCoreDataProvider.prototype.wrapIdentifier = function (name) {
215
- return name;
215
+ //return name
216
+ return '`' + name + '`';
216
217
  };
217
218
  return SqliteCoreDataProvider;
218
219
  }());
package/server/core.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, GenericResponse, GenericRouter, createRemultServerCore, RemultServerOptions, SpecificRoute, RemultServer, } from './expressBridge.js';
1
+ export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, GenericResponse, GenericRouter, createRemultServerCore, RemultServerOptions, SpecificRoute, RemultServer, } from './remult-api-server.js';
2
2
  export { JsonEntityFileStorage, JsonFileDataProvider, } from './JsonEntityFileStorage.js';
3
3
  export { SseSubscriptionServer } from '../SseSubscriptionServer.js';
4
4
  export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage.js';
package/server/core.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataProviderLiveQueryStorage = exports.SseSubscriptionServer = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = exports.createRemultServerCore = void 0;
4
- var expressBridge_js_1 = require("./expressBridge.js");
5
- Object.defineProperty(exports, "createRemultServerCore", { enumerable: true, get: function () { return expressBridge_js_1.createRemultServerCore; } });
4
+ var remult_api_server_js_1 = require("./remult-api-server.js");
5
+ Object.defineProperty(exports, "createRemultServerCore", { enumerable: true, get: function () { return remult_api_server_js_1.createRemultServerCore; } });
6
6
  var JsonEntityFileStorage_js_1 = require("./JsonEntityFileStorage.js");
7
7
  Object.defineProperty(exports, "JsonEntityFileStorage", { enumerable: true, get: function () { return JsonEntityFileStorage_js_1.JsonEntityFileStorage; } });
8
8
  Object.defineProperty(exports, "JsonFileDataProvider", { enumerable: true, get: function () { return JsonEntityFileStorage_js_1.JsonFileDataProvider; } });
package/server/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { RemultServer, RemultServerOptions, ServerCoreOptions } from './expressBridge.js';
1
+ import type { RemultServer, RemultServerOptions, ServerCoreOptions } from './remult-api-server.js';
2
2
  export { SseSubscriptionServer } from '../SseSubscriptionServer.js';
3
3
  export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage.js';
4
4
  export { JsonEntityFileStorage, JsonFileDataProvider, } from './JsonEntityFileStorage.js';
5
- export { GenericRequestHandler, GenericRequestInfo, GenericResponse, GenericRouter, InitRequestOptions, QueueStorage, RemultServer, RemultServerCore, RemultServerOptions, SpecificRoute, queuedJobInfo, } from './expressBridge.js';
5
+ export { GenericRequestHandler, GenericRequestInfo, GenericResponse, GenericRouter, InitRequestOptions, QueueStorage, RemultServer, RemultServerCore, RemultServerOptions, SpecificRoute, queuedJobInfo, } from './remult-api-server.js';
6
6
  export declare function createRemultServer<RequestType>(options: RemultServerOptions<RequestType>, serverCoreOptions?: ServerCoreOptions<RequestType>): RemultServer<RequestType>;
package/server/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRemultServer = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = exports.DataProviderLiveQueryStorage = exports.SseSubscriptionServer = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var expressBridge_js_1 = require("./expressBridge.js");
5
+ var remult_api_server_js_1 = require("./remult-api-server.js");
6
6
  var initAsyncHooks_js_1 = require("./initAsyncHooks.js");
7
7
  var SseSubscriptionServer_js_1 = require("../SseSubscriptionServer.js");
8
8
  Object.defineProperty(exports, "SseSubscriptionServer", { enumerable: true, get: function () { return SseSubscriptionServer_js_1.SseSubscriptionServer; } });
@@ -14,7 +14,7 @@ Object.defineProperty(exports, "JsonFileDataProvider", { enumerable: true, get:
14
14
  function createRemultServer(options, serverCoreOptions) {
15
15
  var _this = this;
16
16
  (0, initAsyncHooks_js_1.initAsyncHooks)();
17
- return (0, expressBridge_js_1.createRemultServerCore)(options, serverCoreOptions || {
17
+ return (0, remult_api_server_js_1.createRemultServerCore)(options, serverCoreOptions || {
18
18
  buildGenericRequestInfo: function (req) { return req; },
19
19
  getRequestBody: function (req) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
20
20
  return [2 /*return*/, req.body];
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processHttpException = exports.toPromise = exports.retry = exports.HttpProviderBridgeToRestDataProviderHttpProvider = exports.isExternalHttpProvider = exports.buildRestDataProvider = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var rest_data_provider_js_1 = require("./data-providers/rest-data-provider.js");
6
+ var remult3_js_1 = require("./remult3/remult3.js");
6
7
  function buildRestDataProvider(provider) {
7
8
  if (!provider)
8
9
  return new rest_data_provider_js_1.RestDataProviderHttpProviderUsingFetch();
@@ -85,11 +86,11 @@ function retry(what) {
85
86
  ((_c = err_1.message) === null || _c === void 0 ? void 0 : _c.includes('http proxy error')) ||
86
87
  ((_d = err_1.message) === null || _d === void 0 ? void 0 : _d.startsWith('Gateway Timeout')) ||
87
88
  err_1.status == 500) &&
88
- i++ < 50)) return [3 /*break*/, 6];
89
+ i++ < remult3_js_1.flags.error500RetryCount)) return [3 /*break*/, 6];
89
90
  return [4 /*yield*/, new Promise(function (res, req) {
90
91
  setTimeout(function () {
91
92
  res({});
92
- }, 250);
93
+ }, 500);
93
94
  })];
94
95
  case 5:
95
96
  _e.sent();
@@ -229,7 +229,7 @@ var ArrayEntityDataProvider = /** @class */ (function () {
229
229
  return [2 /*return*/, Promise.resolve(this.translateFromJson(this.rows()[i], names))];
230
230
  }
231
231
  }
232
- throw new Error("couldn't find id to update: " + id);
232
+ throw new Error("ArrayEntityDataProvider: Couldn't find row with id \"".concat(id, "\" in entity \"").concat(this.entity.key, "\" to update"));
233
233
  }
234
234
  });
235
235
  });
@@ -249,7 +249,7 @@ var ArrayEntityDataProvider = /** @class */ (function () {
249
249
  return [2 /*return*/, Promise.resolve()];
250
250
  }
251
251
  }
252
- throw new Error("couldn't find id to delete: " + id);
252
+ throw new Error("ArrayEntityDataProvider: Couldn't find row with id \"".concat(id, "\" in entity \"").concat(this.entity.key, "\" to delete"));
253
253
  }
254
254
  });
255
255
  });
@@ -167,7 +167,6 @@ var SqlDatabase = /** @class */ (function () {
167
167
  _a;
168
168
  };
169
169
  SqlDatabase.filterToRaw = function (repo, condition, sqlCommand, dbNames, wrapIdentifier) {
170
- if (wrapIdentifier === void 0) { wrapIdentifier = function (x) { return x; }; }
171
170
  return tslib_1.__awaiter(this, void 0, void 0, function () {
172
171
  var r, b, _a, _b, _c;
173
172
  return tslib_1.__generator(this, function (_d) {
@@ -14,6 +14,7 @@ var LiveQueryClient = /** @class */ (function () {
14
14
  this.getUserId = getUserId;
15
15
  this.queries = new Map();
16
16
  this.channels = new Map();
17
+ this.keepAliveMs = 1000;
17
18
  }
18
19
  LiveQueryClient.prototype.wrapMessageHandling = function (handleMessage) {
19
20
  var x = this.apiProvider().wrapMessageHandling;
@@ -87,7 +88,7 @@ var LiveQueryClient = /** @class */ (function () {
87
88
  });
88
89
  });
89
90
  };
90
- LiveQueryClient.prototype.closeIfNoListeners = function () {
91
+ LiveQueryClient.prototype._actuallyClose = function () {
91
92
  if (this.client)
92
93
  if (this.queries.size === 0 && this.channels.size === 0) {
93
94
  this.runPromise(this.client.then(function (x) { return x.close(); }));
@@ -96,6 +97,12 @@ var LiveQueryClient = /** @class */ (function () {
96
97
  this.interval = undefined;
97
98
  }
98
99
  };
100
+ LiveQueryClient.prototype.closeIfNoListeners = function () {
101
+ var _this = this;
102
+ setTimeout(function () {
103
+ _this._actuallyClose();
104
+ }, this.keepAliveMs);
105
+ };
99
106
  LiveQueryClient.prototype.subscribe = function (repo, options, listener) {
100
107
  var _this = this;
101
108
  var alive = true;
@@ -189,7 +196,8 @@ var LiveQueryClient = /** @class */ (function () {
189
196
  try {
190
197
  for (_a = tslib_1.__values(this.queries.values()), _b = _a.next(); !_b.done; _b = _a.next()) {
191
198
  q = _b.value;
192
- ids.push(q.queryChannel);
199
+ if (q.gotAnyResult)
200
+ ids.push(q.queryChannel);
193
201
  }
194
202
  }
195
203
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -5,6 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var buildRestDataProvider_js_1 = require("../buildRestDataProvider.js");
6
6
  var remult_proxy_js_1 = require("../remult-proxy.js");
7
7
  var remult_static_js_1 = require("../remult-static.js");
8
+ var remult3_js_1 = require("../remult3/remult3.js");
8
9
  var SubscriptionChannel_js_1 = require("./SubscriptionChannel.js");
9
10
  var SseSubscriptionClient = /** @class */ (function () {
10
11
  function SseSubscriptionClient() {
@@ -54,6 +55,7 @@ var SseSubscriptionClient = /** @class */ (function () {
54
55
  var createConnectionPromise = function () {
55
56
  return new Promise(function (res) {
56
57
  createConnection();
58
+ var retryCount = 0;
57
59
  function createConnection() {
58
60
  var _this = this;
59
61
  if (source)
@@ -68,9 +70,11 @@ var SseSubscriptionClient = /** @class */ (function () {
68
70
  source.onerror = function (e) {
69
71
  console.error('Live Query Event Source Error', e);
70
72
  source.close();
71
- setTimeout(function () {
72
- createConnection();
73
- }, 500);
73
+ if (retryCount++ < remult3_js_1.flags.error500RetryCount) {
74
+ setTimeout(function () {
75
+ createConnection();
76
+ }, 500);
77
+ }
74
78
  };
75
79
  source.addEventListener('connectionId', function (e) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
76
80
  var _a, _b, channel, e_1_1;
@@ -12,6 +12,7 @@ var LiveQuerySubscriber = /** @class */ (function () {
12
12
  function LiveQuerySubscriber(repo, query, userId) {
13
13
  this.repo = repo;
14
14
  this.query = query;
15
+ this.gotAnyResult = false;
15
16
  this.unsubscribe = function () { };
16
17
  this.defaultQueryState = [];
17
18
  this.listeners = [];
@@ -28,7 +29,9 @@ var LiveQuerySubscriber = /** @class */ (function () {
28
29
  var items;
29
30
  return tslib_1.__generator(this, function (_a) {
30
31
  switch (_a.label) {
31
- case 0: return [4 /*yield*/, (0, repository_internals_js_1.getRepositoryInternals)(this.repo)._fromJsonArray(result, this.query.options)];
32
+ case 0:
33
+ this.gotAnyResult = true;
34
+ return [4 /*yield*/, (0, repository_internals_js_1.getRepositoryInternals)(this.repo)._fromJsonArray(result, this.query.options)];
32
35
  case 1:
33
36
  items = _a.sent();
34
37
  this.forListeners(function (listener) {
@@ -280,20 +280,20 @@ var RepositoryImplementation = /** @class */ (function () {
280
280
  };
281
281
  RepositoryImplementation.prototype.insert = function (entity) {
282
282
  return tslib_1.__awaiter(this, void 0, void 0, function () {
283
- var refs_1, raw, entity_1, entity_1_1, item, ref, _a, _b, e_4_1, _c, _d, r, entity_2, entity_2_1, item, _e, _f, e_5_1, ref;
284
- var e_4, _g, e_5, _h;
285
- return tslib_1.__generator(this, function (_j) {
286
- switch (_j.label) {
283
+ var refs_1, raw, entity_1, entity_1_1, item, ref, _a, _b, e_4_1, _c, r, entity_2, entity_2_1, item, _d, _e, e_5_1, ref;
284
+ var e_4, _f, e_5, _g;
285
+ return tslib_1.__generator(this, function (_h) {
286
+ switch (_h.label) {
287
287
  case 0:
288
288
  if (!Array.isArray(entity)) return [3 /*break*/, 23];
289
289
  if (!this._dataProvider.isProxy) return [3 /*break*/, 13];
290
290
  refs_1 = [];
291
291
  raw = [];
292
- _j.label = 1;
292
+ _h.label = 1;
293
293
  case 1:
294
- _j.trys.push([1, 9, 10, 11]);
294
+ _h.trys.push([1, 9, 10, 11]);
295
295
  entity_1 = tslib_1.__values(entity), entity_1_1 = entity_1.next();
296
- _j.label = 2;
296
+ _h.label = 2;
297
297
  case 2:
298
298
  if (!!entity_1_1.done) return [3 /*break*/, 8];
299
299
  item = entity_1_1.value;
@@ -304,59 +304,59 @@ var RepositoryImplementation = /** @class */ (function () {
304
304
  return [3 /*break*/, 5];
305
305
  case 3: return [4 /*yield*/, this.getEntityRef(this.create(item))];
306
306
  case 4:
307
- ref = (_j.sent());
308
- _j.label = 5;
307
+ ref = (_h.sent());
308
+ _h.label = 5;
309
309
  case 5:
310
310
  refs_1.push(ref);
311
311
  _b = (_a = raw).push;
312
312
  return [4 /*yield*/, ref.buildDtoForInsert()];
313
313
  case 6:
314
- _b.apply(_a, [_j.sent()]);
315
- _j.label = 7;
314
+ _b.apply(_a, [_h.sent()]);
315
+ _h.label = 7;
316
316
  case 7:
317
317
  entity_1_1 = entity_1.next();
318
318
  return [3 /*break*/, 2];
319
319
  case 8: return [3 /*break*/, 11];
320
320
  case 9:
321
- e_4_1 = _j.sent();
321
+ e_4_1 = _h.sent();
322
322
  e_4 = { error: e_4_1 };
323
323
  return [3 /*break*/, 11];
324
324
  case 10:
325
325
  try {
326
- if (entity_1_1 && !entity_1_1.done && (_g = entity_1.return)) _g.call(entity_1);
326
+ if (entity_1_1 && !entity_1_1.done && (_f = entity_1.return)) _f.call(entity_1);
327
327
  }
328
328
  finally { if (e_4) throw e_4.error; }
329
329
  return [7 /*endfinally*/];
330
330
  case 11:
331
- _d = (_c = Promise).all;
331
+ _c = promiseAll;
332
332
  return [4 /*yield*/, this._edp.insertMany(raw)];
333
- case 12: return [2 /*return*/, _d.apply(_c, [(_j.sent()).map(function (item, i) { return refs_1[i].processInsertResponseDto(item); })])];
333
+ case 12: return [2 /*return*/, _c.apply(void 0, [_h.sent(), function (item, i) { return refs_1[i].processInsertResponseDto(item); }])];
334
334
  case 13:
335
335
  r = [];
336
- _j.label = 14;
336
+ _h.label = 14;
337
337
  case 14:
338
- _j.trys.push([14, 19, 20, 21]);
338
+ _h.trys.push([14, 19, 20, 21]);
339
339
  entity_2 = tslib_1.__values(entity), entity_2_1 = entity_2.next();
340
- _j.label = 15;
340
+ _h.label = 15;
341
341
  case 15:
342
342
  if (!!entity_2_1.done) return [3 /*break*/, 18];
343
343
  item = entity_2_1.value;
344
- _f = (_e = r).push;
344
+ _e = (_d = r).push;
345
345
  return [4 /*yield*/, this.insert(item)];
346
346
  case 16:
347
- _f.apply(_e, [_j.sent()]);
348
- _j.label = 17;
347
+ _e.apply(_d, [_h.sent()]);
348
+ _h.label = 17;
349
349
  case 17:
350
350
  entity_2_1 = entity_2.next();
351
351
  return [3 /*break*/, 15];
352
352
  case 18: return [3 /*break*/, 21];
353
353
  case 19:
354
- e_5_1 = _j.sent();
354
+ e_5_1 = _h.sent();
355
355
  e_5 = { error: e_5_1 };
356
356
  return [3 /*break*/, 21];
357
357
  case 20:
358
358
  try {
359
- if (entity_2_1 && !entity_2_1.done && (_h = entity_2.return)) _h.call(entity_2);
359
+ if (entity_2_1 && !entity_2_1.done && (_g = entity_2.return)) _g.call(entity_2);
360
360
  }
361
361
  finally { if (e_5) throw e_5.error; }
362
362
  return [7 /*endfinally*/];
@@ -368,9 +368,9 @@ var RepositoryImplementation = /** @class */ (function () {
368
368
  if (!ref.isNew())
369
369
  throw 'Item is not new';
370
370
  return [4 /*yield*/, ref.save()];
371
- case 24: return [2 /*return*/, _j.sent()];
371
+ case 24: return [2 /*return*/, _h.sent()];
372
372
  case 25: return [4 /*yield*/, this.getEntityRef(this.create(entity)).save()];
373
- case 26: return [2 /*return*/, _j.sent()];
373
+ case 26: return [2 /*return*/, _h.sent()];
374
374
  case 27: return [2 /*return*/];
375
375
  }
376
376
  });
@@ -589,7 +589,7 @@ var RepositoryImplementation = /** @class */ (function () {
589
589
  switch (_a.label) {
590
590
  case 0:
591
591
  if (!Array.isArray(entity)) return [3 /*break*/, 1];
592
- return [2 /*return*/, Promise.all(entity.map(function (x) { return _this.save(x); }))];
592
+ return [2 /*return*/, promiseAll(entity, function (x) { return _this.save(x); })];
593
593
  case 1:
594
594
  ref = (0, getEntityRef_js_1.getEntityRef)(entity, false);
595
595
  if (!ref) return [3 /*break*/, 3];
@@ -836,12 +836,12 @@ var RepositoryImplementation = /** @class */ (function () {
836
836
  }
837
837
  finally { if (e_10) throw e_10.error; }
838
838
  return [7 /*endfinally*/];
839
- case 8: return [4 /*yield*/, Promise.all(rawRows.map(function (r) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
839
+ case 8: return [4 /*yield*/, promiseAll(rawRows, function (r) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
840
840
  switch (_a.label) {
841
841
  case 0: return [4 /*yield*/, this._mapRawDataToResult(r, loadFields)];
842
842
  case 1: return [2 /*return*/, _a.sent()];
843
843
  }
844
- }); }); }))];
844
+ }); }); })];
845
845
  case 9:
846
846
  result = _j.sent();
847
847
  _loop_1 = function (col) {
@@ -1613,7 +1613,7 @@ var rowHelperBase = /** @class */ (function () {
1613
1613
  return tslib_1.__awaiter(this, void 0, void 0, function () {
1614
1614
  return tslib_1.__generator(this, function (_a) {
1615
1615
  switch (_a.label) {
1616
- case 0: return [4 /*yield*/, Promise.all(tslib_1.__spreadArray([], tslib_1.__read(this.lookups.values()), false).map(function (x) { return x.waitLoad(); }))];
1616
+ case 0: return [4 /*yield*/, promiseAll(tslib_1.__spreadArray([], tslib_1.__read(this.lookups.values()), false), function (x) { return x.waitLoad(); })];
1617
1617
  case 1:
1618
1618
  _a.sent();
1619
1619
  return [2 /*return*/];
@@ -1886,7 +1886,7 @@ var rowHelperBase = /** @class */ (function () {
1886
1886
  }
1887
1887
  finally { if (e_29) throw e_29.error; }
1888
1888
  }
1889
- return [4 /*yield*/, Promise.all(tslib_1.__spreadArray([], tslib_1.__read(this.fields), false).map(function (x) { return x.load(); }))];
1889
+ return [4 /*yield*/, promiseAll(tslib_1.__spreadArray([], tslib_1.__read(this.fields), false).filter(function (f) { return !(0, relationInfoMember_js_1.getRelationFieldInfo)(f.metadata); }), function (x) { return x.load(); })];
1890
1890
  case 1:
1891
1891
  _d.sent();
1892
1892
  return [2 /*return*/];
@@ -3853,3 +3853,28 @@ function getRepository(entity) {
3853
3853
  return entity;
3854
3854
  }
3855
3855
  exports.getRepository = getRepository;
3856
+ function promiseAll(array, mapToPromise) {
3857
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
3858
+ var result, index, element, _a, _b;
3859
+ return tslib_1.__generator(this, function (_c) {
3860
+ switch (_c.label) {
3861
+ case 0:
3862
+ result = [];
3863
+ index = 0;
3864
+ _c.label = 1;
3865
+ case 1:
3866
+ if (!(index < array.length)) return [3 /*break*/, 4];
3867
+ element = array[index];
3868
+ _b = (_a = result).push;
3869
+ return [4 /*yield*/, mapToPromise(element, index)];
3870
+ case 2:
3871
+ _b.apply(_a, [_c.sent()]);
3872
+ _c.label = 3;
3873
+ case 3:
3874
+ index++;
3875
+ return [3 /*break*/, 1];
3876
+ case 4: return [2 /*return*/, result];
3877
+ }
3878
+ });
3879
+ });
3880
+ }
@@ -676,3 +676,6 @@ export interface ClassDecoratorContextStub<Class extends new (...args: any) => a
676
676
  addInitializer(initializer: (this: Class) => void): void;
677
677
  }
678
678
  export type ClassFieldDecorator<entityType, valueType> = (target: any, context: string | ClassFieldDecoratorContextStub<entityType, valueType | undefined>, c?: any) => void;
679
+ export declare const flags: {
680
+ error500RetryCount: number;
681
+ };
@@ -1,9 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flags = void 0;
4
+ exports.flags = {
5
+ error500RetryCount: 4,
6
+ };
3
7
  //y2 - soft-delete-discussion https://discord.com/channels/975754286384418847/1230386433093533698/1230386433093533698
4
- //y1 - In the esm version of our tutorial - the imports are automatically .ts and not .js in react and not in vue
5
- //y1 - consider id to also support keyof (id:['company','index']) - had problem with | (keyof Partial<entityType>)[] & `entity`
6
- //y2 - readonly key: keyof MembersOnly<entityType> & string
8
+ //y1 - live query with count #436
9
+ //y1 - live query errort that appears in tests but I can't understand why - `open connection error `
10
+ //y1 TODO - In the esm version of our tutorial - the imports are automatically .ts and not .js in react and not in vue
11
+ //y1 TODO - consider id to also support keyof (id:['company','index']) - had problem with | (keyof Partial<entityType>)[] & `entity`
12
+ //y1 TODO - readonly key: keyof MembersOnly<entityType> & string
7
13
  //y1 - talk about insert / update / delete with relations
8
14
  /*
9
15
  repo(Order).insert({},{
@@ -23,14 +29,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
29
  //p1 - wait a second to close stream
24
30
  //p1 - prepare the createEntity discussion
25
31
  //p1 - return error on connection error
26
- //p1 - reconsider key typing to be keyof & string
27
32
  //p1 - article on displayValue including it's definition for entities that is used in relations
33
+ //p1 - article auth.js with express - played with it, requires type="module" and a few more configurations - https://github.com/noam-honig/express-auth
28
34
  //p2 -fix remult admin not to load the html into memory until used
29
- //y2 - JY suggestion of having generate as part of the ensure schema - not sure
30
35
  //y2 - currently for string fields we default for 255 in knex (which is their default) why not just use text (varchar max) - and only use exact length when one is provided?
31
36
  //p2 - create foreign key constraints in user code - https://codesandbox.io/p/devbox/fk-validator-tdshcs
32
37
  //p2 - admin url1 - pocketbase use /_ for the admin //{allowed?:Allowed,url?:string} also checkout the admin* as it should probably be something else and didn't work in hono
33
- //p1 - article auth.js with express - played with it, requires type="module" and a few more configurations - https://github.com/noam-honig/express-auth
34
38
  //y2 - fix validators cache
35
39
  //y2 - should we validate relations
36
40
  //y1 - dependency of live query tables live query refresh of view on table update
@@ -80,7 +84,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
80
84
  //p1 - when a tasks table exists in a different schema - we get many errors
81
85
  //p1 - live query with include
82
86
  //p1 - adjust angular tutorial starter kit for latest angular (as is in tutorial)
83
- //p2 - when subscribe is forbidden - the query still runs after the renew process
84
87
  //p2 - 'update tasks set where id = $1
85
88
  //p2 - type metadata.key - to keyof entity - based on cwis input
86
89
  //y2 - remove __dirname from tutorials