remult 0.17.0-exp.1 → 0.17.0-exp.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as express from 'express';
2
2
  import { createRemultServer } from './server/expressBridge';
3
3
  import { streamUrl } from './src/live-query/LiveQuery';
4
- import { LiveQueryManager } from './src/live-query/LiveQueryManager';
4
+ import { LiveQueryPublisher } from './src/live-query/LiveQueryManager';
5
5
  import { remult } from './src/remult-proxy';
6
6
  export function remultExpress(options) {
7
7
  let app = express.Router();
@@ -18,7 +18,7 @@ export function remultExpress(options) {
18
18
  const server = createRemultServer(options);
19
19
  server.registerRouter(app);
20
20
  let httpServerEvents = new ServerEventsController(options.messageChannels);
21
- server.liveQueryManager = new LiveQueryManager(httpServerEvents);
21
+ server.liveQueryManager = new LiveQueryPublisher(httpServerEvents);
22
22
  const streamPath = options.rootPath + '/' + streamUrl;
23
23
  app.get(streamPath, (req, res) => {
24
24
  httpServerEvents.openHttpServerStream(req, res);
@@ -5,7 +5,7 @@ import { AllowedForInstance, Remult, UserInfo } from '../src/context';
5
5
  import { ClassType } from '../classType';
6
6
  import { Repository } from '../src/remult3';
7
7
  import { IdEntity } from '../src/id-entity';
8
- import { LiveQueryManager } from '../src/live-query/LiveQueryManager';
8
+ import { LiveQueryPublisher } from '../src/live-query/LiveQueryManager';
9
9
  export interface RemultServerOptions<RequestType extends GenericRequest> {
10
10
  /** Sets a database connection for Remult.
11
11
  *
@@ -64,7 +64,7 @@ export declare class RemultServerImplementation implements RemultServer {
64
64
  options: RemultServerOptions<GenericRequest>;
65
65
  dataProvider: DataProvider | Promise<DataProvider>;
66
66
  constructor(queue: inProcessQueueHandler, options: RemultServerOptions<GenericRequest>, dataProvider: DataProvider | Promise<DataProvider>);
67
- liveQueryManager: LiveQueryManager;
67
+ liveQueryManager: LiveQueryPublisher;
68
68
  withRemult<T>(req: GenericRequest, res: GenericResponse, next: VoidFunction): void;
69
69
  routeImpl: RouteImplementation;
70
70
  handle(req: GenericRequest, gRes?: GenericResponse): Promise<ServerHandleResponse>;
@@ -2,7 +2,6 @@ import { AsyncLocalStorage } from 'async_hooks';
2
2
  import { RemultAsyncLocalStorage } from './expressBridge';
3
3
  let init = false;
4
4
  export function initAsyncHooks() {
5
- return;
6
5
  if (init)
7
6
  return;
8
7
  init = true;
@@ -3,8 +3,8 @@ import { streamUrl } from "./LiveQuery";
3
3
  export class EventSourceLiveQueryProvider {
4
4
  constructor(wrapMessage) {
5
5
  this.wrapMessage = wrapMessage;
6
- if (!wrapMessage)
7
- wrapMessage = x => x();
6
+ if (!this.wrapMessage)
7
+ this.wrapMessage = x => x();
8
8
  }
9
9
  openStreamAndReturnCloseFunction(clientId, onMessage) {
10
10
  const source = new EventSource(remult.apiClient.url + '/' + streamUrl + "?id=" + clientId, {
@@ -23,7 +23,6 @@ export declare class LiveQueryClient {
23
23
  subscribe<entityType>(repo: Repository<entityType>, options: FindOptions<entityType>, onResult: (reducer: (prevState: entityType[]) => entityType[]) => void): () => void;
24
24
  closeListener: Promise<VoidFunction>;
25
25
  private openIfNoOpened;
26
- private openListener;
27
26
  }
28
27
  export declare type listener = (message: any) => void;
29
28
  export interface SubscribeToQueryArgs<entityType = any> {
@@ -1,13 +1,14 @@
1
- import { getEntityRef, remult as defaultRemult, Sort } from '../../index';
1
+ import { remult as defaultRemult, Sort } from '../../index';
2
2
  import { v4 as uuid } from 'uuid';
3
3
  import { RestEntityDataProvider } from '../data-providers/rest-data-provider';
4
4
  import { buildRestDataProvider } from '../context';
5
+ import { getId } from '../remult3/getId';
5
6
  export const streamUrl = 'stream1';
6
7
  class LiveQueryOnFrontEnd {
7
8
  constructor(repo, query) {
8
9
  this.repo = repo;
9
10
  this.query = query;
10
- this.items = [];
11
+ this.defaultQueryState = [];
11
12
  this.listeners = [];
12
13
  }
13
14
  async setAllItems(result) {
@@ -19,6 +20,7 @@ class LiveQueryOnFrontEnd {
19
20
  });
20
21
  }
21
22
  forListeners(what) {
23
+ // what(x => this.defaultQueryState = x(this.defaultQueryState));
22
24
  for (const l of this.listeners) {
23
25
  what(l);
24
26
  }
@@ -41,7 +43,7 @@ class LiveQueryOnFrontEnd {
41
43
  listener(items => {
42
44
  if (!items)
43
45
  items = [];
44
- return sort(items.map(x => this.repo.getEntityRef(x).getId() === message.data.oldId ? item : x));
46
+ return sort(items.map(x => getId(this.repo.metadata, x) === message.data.oldId ? item : x));
45
47
  });
46
48
  });
47
49
  break;
@@ -61,7 +63,7 @@ class LiveQueryOnFrontEnd {
61
63
  this.forListeners(listener => listener(items => {
62
64
  if (!items)
63
65
  items = [];
64
- return this.items.filter(x => getEntityRef(x).getId() !== message.data.id);
66
+ return items.filter(x => getId(this.repo.metadata, x) !== message.data.id);
65
67
  }));
66
68
  break;
67
69
  }
@@ -130,7 +132,7 @@ export class LiveQueryClient {
130
132
  subscribe(repo, options, onResult) {
131
133
  let alive = true;
132
134
  let onUnsubscribe = () => { };
133
- this.runPromise(this.openListener().then(() => repo.buildEntityDataProviderFindOptions(options)
135
+ this.runPromise(this.openIfNoOpened().then(() => repo.buildEntityDataProviderFindOptions(options)
134
136
  .then(opts => {
135
137
  if (!alive)
136
138
  return;
@@ -152,7 +154,7 @@ export class LiveQueryClient {
152
154
  this.runPromise(this.provider.get(url.url).then(thenResult));
153
155
  }
154
156
  else {
155
- onResult(x => q.items);
157
+ onResult(x => [...q.defaultQueryState]);
156
158
  }
157
159
  q.listeners.push(onResult);
158
160
  onUnsubscribe = () => {
@@ -173,23 +175,18 @@ export class LiveQueryClient {
173
175
  this.provider = buildRestDataProvider(defaultRemult.apiClient.httpClient);
174
176
  }
175
177
  if (!this.closeListener)
176
- return this.openListener();
177
- return this.closeListener;
178
- }
179
- openListener() {
180
- if (this.closeListener)
181
- return this.closeListener;
182
- return this.runPromise(this.closeListener = this.lqp.openStreamAndReturnCloseFunction(this.clientId, message => {
183
- for (const q of this.queries.values()) {
184
- if (q.id === message.event) {
185
- this.runPromise(q.handle(message.data));
178
+ return this.runPromise(this.closeListener = this.lqp.openStreamAndReturnCloseFunction(this.clientId, message => {
179
+ for (const q of this.queries.values()) {
180
+ if (q.id === message.event) {
181
+ this.runPromise(q.handle(message.data));
182
+ }
186
183
  }
187
- }
188
- const channel = this.channels.get(message.event);
189
- if (channel) {
190
- channel.handle(message.data);
191
- }
192
- }));
184
+ const channel = this.channels.get(message.event);
185
+ if (channel) {
186
+ channel.handle(message.data);
187
+ }
188
+ }));
189
+ return this.closeListener;
193
190
  }
194
191
  }
195
192
  export class AMessageChannel {
@@ -2,12 +2,11 @@ import { Remult } from '../..';
2
2
  import { Repository, EntityRef, FindOptions } from '../remult3';
3
3
  import { LiveQueryProvider } from '../data-api';
4
4
  import { liveQueryMessage } from './LiveQuery';
5
- export declare class LiveQueryManager implements LiveQueryProvider {
5
+ export declare class LiveQueryPublisher implements LiveQueryProvider {
6
6
  private dispatcher;
7
7
  constructor(dispatcher: ServerEventDispatcher);
8
8
  subscribe(repo: Repository<any>, clientId: string, findOptions: FindOptions<any>, remult: Remult, ids: any[]): string;
9
9
  clients: clientInfo[];
10
- sendMessage(key: string, message: liveQueryMessage): void;
11
10
  hasListeners(ref: EntityRef<any>): boolean;
12
11
  runPromise(p: Promise<any>): void;
13
12
  saved(ref: EntityRef<any>): void;
@@ -1,5 +1,5 @@
1
1
  import { v4 as uuid } from 'uuid';
2
- export class LiveQueryManager {
2
+ export class LiveQueryPublisher {
3
3
  constructor(dispatcher) {
4
4
  this.dispatcher = dispatcher;
5
5
  this.clients = [];
@@ -19,15 +19,6 @@ export class LiveQueryManager {
19
19
  });
20
20
  return id;
21
21
  }
22
- sendMessage(key, message) {
23
- for (const c of this.clients) {
24
- for (const q of c.queries) {
25
- if (q.repo.metadata.key === key) {
26
- this.dispatcher.sendQueryMessage({ clientId: c.clientId, queryId: q.id, message });
27
- }
28
- }
29
- }
30
- }
31
22
  hasListeners(ref) {
32
23
  for (const c of this.clients) {
33
24
  for (const q of c.queries) {
@@ -87,11 +78,22 @@ export class LiveQueryManager {
87
78
  }
88
79
  }
89
80
  deleted(ref) {
90
- if (!this.hasListeners(ref))
91
- return;
92
- this.sendMessage(ref.metadata.key, {
93
- type: "remove",
94
- data: { id: ref.getId() }
95
- });
81
+ const id = ref.getOriginalId();
82
+ for (const c of this.clients) {
83
+ for (const q of c.queries) {
84
+ if (q.repo.metadata.key === ref.metadata.key) {
85
+ if (q.ids.includes(id)) {
86
+ this.dispatcher.sendQueryMessage({
87
+ clientId: c.clientId, queryId: q.id, message: {
88
+ type: "remove",
89
+ data: {
90
+ id: id
91
+ }
92
+ }
93
+ });
94
+ }
95
+ }
96
+ }
97
+ }
96
98
  }
97
99
  }
@@ -7,6 +7,7 @@ import { ValueConverters } from "../valueConverters";
7
7
  import { filterHelper } from "../filter/filter-interfaces";
8
8
  import { assign } from "../../assign";
9
9
  import { remult as defaultRemult } from "../remult-proxy";
10
+ import { getId } from "./getId";
10
11
  //import { remult } from "../remult-proxy";
11
12
  let classValidatorValidate = undefined;
12
13
  // import("class-validator".toString())
@@ -166,8 +167,10 @@ export class RepositoryImplementation {
166
167
  instance[field.key] = entity[field.key];
167
168
  }
168
169
  let row = new rowHelperImplementation(this._info, instance, this, this.edp, this.remult, false);
169
- if (id)
170
+ if (id) {
170
171
  row.id = id;
172
+ row.originalId = id;
173
+ }
171
174
  else
172
175
  row.id = row.getId();
173
176
  ref = row;
@@ -719,10 +722,7 @@ export class rowHelperImplementation extends rowHelperBase {
719
722
  get apiDeleteAllowed() { return this.remult.isAllowedForInstance(this.instance, this.metadata.options.allowApiDelete); }
720
723
  get apiInsertAllowed() { return this.remult.isAllowedForInstance(this.instance, this.metadata.options.allowApiInsert); }
721
724
  getId() {
722
- if (this.info.idMetadata.field instanceof CompoundIdField)
723
- return this.info.idMetadata.field.getId(this.instance);
724
- else
725
- return this.instance[this.info.idMetadata.field.key];
725
+ return getId(this.info, this.instance);
726
726
  }
727
727
  saveMoreOriginalData() {
728
728
  this.originalId = this.getId();
@@ -874,11 +874,7 @@ export class rowHelperImplementation extends rowHelperBase {
874
874
  this.instance[col.key] = data[col.key];
875
875
  }
876
876
  await this.calcServerExpression();
877
- if (this.repository.metadata.idMetadata.field instanceof CompoundIdField) {
878
- this.id = this.repository.metadata.idMetadata.field.getId(this.instance);
879
- }
880
- else
881
- this.id = data[this.repository.metadata.idMetadata.field.key];
877
+ this.id = getId(this.info, this.instance);
882
878
  }
883
879
  getOriginalId() {
884
880
  return this.originalId;
@@ -0,0 +1,2 @@
1
+ import type { EntityMetadata } from "./remult3";
2
+ export declare function getId<entityType>(meta: EntityMetadata<entityType>, instance: entityType): any;
@@ -0,0 +1,7 @@
1
+ import { CompoundIdField } from '../column';
2
+ export function getId(meta, instance) {
3
+ if (meta.idMetadata.field instanceof CompoundIdField)
4
+ return meta.idMetadata.field.getId(instance);
5
+ else
6
+ return instance[meta.idMetadata.field.key];
7
+ }
@@ -1,5 +1,6 @@
1
1
  import './frontend-database-tests-setup.spec';
2
2
  import { Remult } from "../context";
3
+ import { DataApi } from "../data-api";
3
4
  import { DataProvider, EntityDataProvider } from "../data-interfaces";
4
5
  import { InMemoryDataProvider } from "../data-providers/in-memory-database";
5
6
  import { EntityMetadata } from "../remult3";
@@ -32,3 +33,4 @@ export declare class MockRestDataProvider implements DataProvider {
32
33
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
33
34
  supportsCustomFilter: boolean;
34
35
  }
36
+ export declare function createMockHttpDataProvider(dataApi: DataApi<any>): import("c:/Repos/radweb/projects/core/src/data-interfaces").RestDataProviderHttpProvider;
@@ -158,65 +158,68 @@ export class MockRestDataProvider {
158
158
  }
159
159
  getEntityDataProvider(metadata) {
160
160
  let dataApi = new DataApi(this.remult.repo(metadata.entityType), this.remult);
161
- return new RestEntityDataProvider(() => "", () => new HttpProviderBridgeToRestDataProviderHttpProvider({
162
- delete: async (url) => {
163
- let urlSplit = url.split('/');
164
- let r = new TestDataApiResponse();
165
- let result;
166
- r.deleted = () => { };
167
- try {
168
- testConfiguration.restDbRunningOnServer = true;
169
- await dataApi.delete(r, urlSplit[urlSplit.length - 1]);
170
- }
171
- finally {
172
- testConfiguration.restDbRunningOnServer = false;
173
- }
174
- return result;
175
- },
176
- get: async (url) => {
177
- let r = new TestDataApiResponse();
178
- let result;
179
- r.success = data => { result = data; };
180
- try {
181
- testConfiguration.restDbRunningOnServer = true;
182
- await dataApi.httpGet(r, urlToReq(url));
183
- }
184
- finally {
185
- testConfiguration.restDbRunningOnServer = false;
186
- }
187
- return result;
188
- },
189
- post: async (url, data) => {
190
- let r = new TestDataApiResponse();
191
- let result;
192
- r.created = data => { result = data; };
193
- r.success = data => { result = data; };
194
- try {
195
- testConfiguration.restDbRunningOnServer = true;
196
- await dataApi.httpPost(r, urlToReq(url), data);
197
- }
198
- finally {
199
- testConfiguration.restDbRunningOnServer = false;
200
- }
201
- return result;
202
- },
203
- put: async (url, data) => {
204
- let urlSplit = url.split('/');
205
- let r = new TestDataApiResponse();
206
- let result;
207
- r.success = data => { result = data; };
208
- try {
209
- testConfiguration.restDbRunningOnServer = true;
210
- await dataApi.put(r, urlSplit[urlSplit.length - 1], data);
211
- }
212
- finally {
213
- testConfiguration.restDbRunningOnServer = false;
214
- }
215
- return result;
216
- }
217
- }), metadata);
161
+ return new RestEntityDataProvider(() => "", () => createMockHttpDataProvider(dataApi), metadata);
218
162
  }
219
163
  transaction(action) {
220
164
  throw new Error('Method not implemented.');
221
165
  }
222
166
  }
167
+ export function createMockHttpDataProvider(dataApi) {
168
+ return new HttpProviderBridgeToRestDataProviderHttpProvider({
169
+ delete: async (url) => {
170
+ let urlSplit = url.split('/');
171
+ let r = new TestDataApiResponse();
172
+ let result;
173
+ r.deleted = () => { };
174
+ try {
175
+ testConfiguration.restDbRunningOnServer = true;
176
+ await dataApi.delete(r, urlSplit[urlSplit.length - 1]);
177
+ }
178
+ finally {
179
+ testConfiguration.restDbRunningOnServer = false;
180
+ }
181
+ return result;
182
+ },
183
+ get: async (url) => {
184
+ let r = new TestDataApiResponse();
185
+ let result;
186
+ r.success = data => { result = data; };
187
+ try {
188
+ testConfiguration.restDbRunningOnServer = true;
189
+ await dataApi.httpGet(r, urlToReq(url));
190
+ }
191
+ finally {
192
+ testConfiguration.restDbRunningOnServer = false;
193
+ }
194
+ return result;
195
+ },
196
+ post: async (url, data) => {
197
+ let r = new TestDataApiResponse();
198
+ let result;
199
+ r.created = data => { result = data; };
200
+ r.success = data => { result = data; };
201
+ try {
202
+ testConfiguration.restDbRunningOnServer = true;
203
+ await dataApi.httpPost(r, urlToReq(url), data);
204
+ }
205
+ finally {
206
+ testConfiguration.restDbRunningOnServer = false;
207
+ }
208
+ return result;
209
+ },
210
+ put: async (url, data) => {
211
+ let urlSplit = url.split('/');
212
+ let r = new TestDataApiResponse();
213
+ let result;
214
+ r.success = data => { result = data; };
215
+ try {
216
+ testConfiguration.restDbRunningOnServer = true;
217
+ await dataApi.put(r, urlSplit[urlSplit.length - 1], data);
218
+ }
219
+ finally {
220
+ testConfiguration.restDbRunningOnServer = false;
221
+ }
222
+ return result;
223
+ }
224
+ });
225
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.17.0-exp.1",
3
+ "version": "0.17.0-exp.2",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
package/remult-express.js CHANGED
@@ -22,7 +22,7 @@ function remultExpress(options) {
22
22
  var server = expressBridge_1.createRemultServer(options);
23
23
  server.registerRouter(app);
24
24
  var httpServerEvents = new ServerEventsController(options.messageChannels);
25
- server.liveQueryManager = new LiveQueryManager_1.LiveQueryManager(httpServerEvents);
25
+ server.liveQueryManager = new LiveQueryManager_1.LiveQueryPublisher(httpServerEvents);
26
26
  var streamPath = options.rootPath + '/' + LiveQuery_1.streamUrl;
27
27
  app.get(streamPath, function (req, res) {
28
28
  httpServerEvents.openHttpServerStream(req, res);
@@ -5,7 +5,7 @@ import { AllowedForInstance, Remult, UserInfo } from '../src/context';
5
5
  import { ClassType } from '../classType';
6
6
  import { Repository } from '../src/remult3';
7
7
  import { IdEntity } from '../src/id-entity';
8
- import { LiveQueryManager } from '../src/live-query/LiveQueryManager';
8
+ import { LiveQueryPublisher } from '../src/live-query/LiveQueryManager';
9
9
  export interface RemultServerOptions<RequestType extends GenericRequest> {
10
10
  /** Sets a database connection for Remult.
11
11
  *
@@ -64,7 +64,7 @@ export declare class RemultServerImplementation implements RemultServer {
64
64
  options: RemultServerOptions<GenericRequest>;
65
65
  dataProvider: DataProvider | Promise<DataProvider>;
66
66
  constructor(queue: inProcessQueueHandler, options: RemultServerOptions<GenericRequest>, dataProvider: DataProvider | Promise<DataProvider>);
67
- liveQueryManager: LiveQueryManager;
67
+ liveQueryManager: LiveQueryPublisher;
68
68
  withRemult<T>(req: GenericRequest, res: GenericResponse, next: VoidFunction): void;
69
69
  routeImpl: RouteImplementation;
70
70
  handle(req: GenericRequest, gRes?: GenericResponse): Promise<ServerHandleResponse>;
@@ -5,7 +5,6 @@ var async_hooks_1 = require("async_hooks");
5
5
  var expressBridge_1 = require("./expressBridge");
6
6
  var init = false;
7
7
  function initAsyncHooks() {
8
- return;
9
8
  if (init)
10
9
  return;
11
10
  init = true;
@@ -6,8 +6,8 @@ var LiveQuery_1 = require("./LiveQuery");
6
6
  var EventSourceLiveQueryProvider = /** @class */ (function () {
7
7
  function EventSourceLiveQueryProvider(wrapMessage) {
8
8
  this.wrapMessage = wrapMessage;
9
- if (!wrapMessage)
10
- wrapMessage = function (x) { return x(); };
9
+ if (!this.wrapMessage)
10
+ this.wrapMessage = function (x) { return x(); };
11
11
  }
12
12
  EventSourceLiveQueryProvider.prototype.openStreamAndReturnCloseFunction = function (clientId, onMessage) {
13
13
  var _this = this;
@@ -23,7 +23,6 @@ export declare class LiveQueryClient {
23
23
  subscribe<entityType>(repo: Repository<entityType>, options: FindOptions<entityType>, onResult: (reducer: (prevState: entityType[]) => entityType[]) => void): () => void;
24
24
  closeListener: Promise<VoidFunction>;
25
25
  private openIfNoOpened;
26
- private openListener;
27
26
  }
28
27
  export declare type listener = (message: any) => void;
29
28
  export interface SubscribeToQueryArgs<entityType = any> {
@@ -6,12 +6,13 @@ var index_1 = require("../../index");
6
6
  var uuid_1 = require("uuid");
7
7
  var rest_data_provider_1 = require("../data-providers/rest-data-provider");
8
8
  var context_1 = require("../context");
9
+ var getId_1 = require("../remult3/getId");
9
10
  exports.streamUrl = 'stream1';
10
11
  var LiveQueryOnFrontEnd = /** @class */ (function () {
11
12
  function LiveQueryOnFrontEnd(repo, query) {
12
13
  this.repo = repo;
13
14
  this.query = query;
14
- this.items = [];
15
+ this.defaultQueryState = [];
15
16
  this.listeners = [];
16
17
  }
17
18
  LiveQueryOnFrontEnd.prototype.setAllItems = function (result) {
@@ -36,6 +37,7 @@ var LiveQueryOnFrontEnd = /** @class */ (function () {
36
37
  LiveQueryOnFrontEnd.prototype.forListeners = function (what) {
37
38
  var e_1, _a;
38
39
  try {
40
+ // what(x => this.defaultQueryState = x(this.defaultQueryState));
39
41
  for (var _b = tslib_1.__values(this.listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
40
42
  var l = _c.value;
41
43
  what(l);
@@ -81,7 +83,7 @@ var LiveQueryOnFrontEnd = /** @class */ (function () {
81
83
  listener(function (items) {
82
84
  if (!items)
83
85
  items = [];
84
- return sort(items.map(function (x) { return _this.repo.getEntityRef(x).getId() === message.data.oldId ? item_1 : x; }));
86
+ return sort(items.map(function (x) { return getId_1.getId(_this.repo.metadata, x) === message.data.oldId ? item_1 : x; }));
85
87
  });
86
88
  });
87
89
  return [3 /*break*/, 7];
@@ -102,7 +104,7 @@ var LiveQueryOnFrontEnd = /** @class */ (function () {
102
104
  return listener(function (items) {
103
105
  if (!items)
104
106
  items = [];
105
- return _this.items.filter(function (x) { return index_1.getEntityRef(x).getId() !== message.data.id; });
107
+ return items.filter(function (x) { return getId_1.getId(_this.repo.metadata, x) !== message.data.id; });
106
108
  });
107
109
  });
108
110
  return [3 /*break*/, 7];
@@ -197,7 +199,7 @@ var LiveQueryClient = /** @class */ (function () {
197
199
  var _this = this;
198
200
  var alive = true;
199
201
  var onUnsubscribe = function () { };
200
- this.runPromise(this.openListener().then(function () { return repo.buildEntityDataProviderFindOptions(options)
202
+ this.runPromise(this.openIfNoOpened().then(function () { return repo.buildEntityDataProviderFindOptions(options)
201
203
  .then(function (opts) {
202
204
  if (!alive)
203
205
  return;
@@ -219,7 +221,7 @@ var LiveQueryClient = /** @class */ (function () {
219
221
  _this.runPromise(_this.provider.get(url.url).then(thenResult));
220
222
  }
221
223
  else {
222
- onResult(function (x) { return q.items; });
224
+ onResult(function (x) { return tslib_1.__spread(q.defaultQueryState); });
223
225
  }
224
226
  q.listeners.push(onResult);
225
227
  onUnsubscribe = function () {
@@ -236,39 +238,34 @@ var LiveQueryClient = /** @class */ (function () {
236
238
  };
237
239
  };
238
240
  LiveQueryClient.prototype.openIfNoOpened = function () {
241
+ var _this = this;
239
242
  if (!this.provider) {
240
243
  this.provider = context_1.buildRestDataProvider(index_1.remult.apiClient.httpClient);
241
244
  }
242
245
  if (!this.closeListener)
243
- return this.openListener();
244
- return this.closeListener;
245
- };
246
- LiveQueryClient.prototype.openListener = function () {
247
- var _this = this;
248
- if (this.closeListener)
249
- return this.closeListener;
250
- return this.runPromise(this.closeListener = this.lqp.openStreamAndReturnCloseFunction(this.clientId, function (message) {
251
- var e_3, _a;
252
- try {
253
- for (var _b = tslib_1.__values(_this.queries.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
254
- var q = _c.value;
255
- if (q.id === message.event) {
256
- _this.runPromise(q.handle(message.data));
246
+ return this.runPromise(this.closeListener = this.lqp.openStreamAndReturnCloseFunction(this.clientId, function (message) {
247
+ var e_3, _a;
248
+ try {
249
+ for (var _b = tslib_1.__values(_this.queries.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
250
+ var q = _c.value;
251
+ if (q.id === message.event) {
252
+ _this.runPromise(q.handle(message.data));
253
+ }
257
254
  }
258
255
  }
259
- }
260
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
261
- finally {
262
- try {
263
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
256
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
257
+ finally {
258
+ try {
259
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
260
+ }
261
+ finally { if (e_3) throw e_3.error; }
264
262
  }
265
- finally { if (e_3) throw e_3.error; }
266
- }
267
- var channel = _this.channels.get(message.event);
268
- if (channel) {
269
- channel.handle(message.data);
270
- }
271
- }));
263
+ var channel = _this.channels.get(message.event);
264
+ if (channel) {
265
+ channel.handle(message.data);
266
+ }
267
+ }));
268
+ return this.closeListener;
272
269
  };
273
270
  return LiveQueryClient;
274
271
  }());
@@ -2,12 +2,11 @@ import { Remult } from '../..';
2
2
  import { Repository, EntityRef, FindOptions } from '../remult3';
3
3
  import { LiveQueryProvider } from '../data-api';
4
4
  import { liveQueryMessage } from './LiveQuery';
5
- export declare class LiveQueryManager implements LiveQueryProvider {
5
+ export declare class LiveQueryPublisher implements LiveQueryProvider {
6
6
  private dispatcher;
7
7
  constructor(dispatcher: ServerEventDispatcher);
8
8
  subscribe(repo: Repository<any>, clientId: string, findOptions: FindOptions<any>, remult: Remult, ids: any[]): string;
9
9
  clients: clientInfo[];
10
- sendMessage(key: string, message: liveQueryMessage): void;
11
10
  hasListeners(ref: EntityRef<any>): boolean;
12
11
  runPromise(p: Promise<any>): void;
13
12
  saved(ref: EntityRef<any>): void;
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LiveQueryManager = void 0;
3
+ exports.LiveQueryPublisher = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var uuid_1 = require("uuid");
6
- var LiveQueryManager = /** @class */ (function () {
7
- function LiveQueryManager(dispatcher) {
6
+ var LiveQueryPublisher = /** @class */ (function () {
7
+ function LiveQueryPublisher(dispatcher) {
8
8
  this.dispatcher = dispatcher;
9
9
  this.clients = [];
10
10
  }
11
- LiveQueryManager.prototype.subscribe = function (repo, clientId, findOptions, remult, ids) {
11
+ LiveQueryPublisher.prototype.subscribe = function (repo, clientId, findOptions, remult, ids) {
12
12
  var client = this.clients.find(function (c) { return c.clientId === clientId; });
13
13
  if (!client) {
14
14
  this.clients.push(client = { clientId: clientId, queries: [] });
@@ -23,7 +23,7 @@ var LiveQueryManager = /** @class */ (function () {
23
23
  });
24
24
  return id;
25
25
  };
26
- LiveQueryManager.prototype.sendMessage = function (key, message) {
26
+ LiveQueryPublisher.prototype.hasListeners = function (ref) {
27
27
  var e_1, _a, e_2, _b;
28
28
  try {
29
29
  for (var _c = tslib_1.__values(this.clients), _d = _c.next(); !_d.done; _d = _c.next()) {
@@ -31,9 +31,8 @@ var LiveQueryManager = /** @class */ (function () {
31
31
  try {
32
32
  for (var _e = (e_2 = void 0, tslib_1.__values(c.queries)), _f = _e.next(); !_f.done; _f = _e.next()) {
33
33
  var q = _f.value;
34
- if (q.repo.metadata.key === key) {
35
- this.dispatcher.sendQueryMessage({ clientId: c.clientId, queryId: q.id, message: message });
36
- }
34
+ if (q.repo.metadata.key === ref.metadata.key)
35
+ return true;
37
36
  }
38
37
  }
39
38
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
@@ -52,51 +51,22 @@ var LiveQueryManager = /** @class */ (function () {
52
51
  }
53
52
  finally { if (e_1) throw e_1.error; }
54
53
  }
55
- };
56
- LiveQueryManager.prototype.hasListeners = function (ref) {
57
- var e_3, _a, e_4, _b;
58
- try {
59
- for (var _c = tslib_1.__values(this.clients), _d = _c.next(); !_d.done; _d = _c.next()) {
60
- var c = _d.value;
61
- try {
62
- for (var _e = (e_4 = void 0, tslib_1.__values(c.queries)), _f = _e.next(); !_f.done; _f = _e.next()) {
63
- var q = _f.value;
64
- if (q.repo.metadata.key === ref.metadata.key)
65
- return true;
66
- }
67
- }
68
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
69
- finally {
70
- try {
71
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
72
- }
73
- finally { if (e_4) throw e_4.error; }
74
- }
75
- }
76
- }
77
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
78
- finally {
79
- try {
80
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
81
- }
82
- finally { if (e_3) throw e_3.error; }
83
- }
84
54
  return false;
85
55
  };
86
- LiveQueryManager.prototype.runPromise = function (p) {
56
+ LiveQueryPublisher.prototype.runPromise = function (p) {
87
57
  };
88
58
  //TODO - reconsider usage of zone
89
- LiveQueryManager.prototype.saved = function (ref) {
90
- var e_5, _a;
59
+ LiveQueryPublisher.prototype.saved = function (ref) {
60
+ var e_3, _a;
91
61
  var _this = this;
92
62
  var isNew = ref.isNew();
93
63
  var origId = isNew ? ref.getId() : ref.getOriginalId();
94
64
  var _loop_1 = function (c) {
95
- var e_6, _a;
65
+ var e_4, _a;
96
66
  var _loop_2 = function (q) {
97
67
  if (q.repo.metadata.key === ref.metadata.key) {
98
68
  this_1.runPromise(q.repo.find(q.findOptions).then(function (currentItems) {
99
- var e_7, _a, e_8, _b;
69
+ var e_5, _a, e_6, _b;
100
70
  var currentIds = currentItems.map(function (x) { return q.repo.getEntityRef(x).getId(); });
101
71
  var sendMessage = function (message) {
102
72
  console.log({ message: message.type });
@@ -104,7 +74,7 @@ var LiveQueryManager = /** @class */ (function () {
104
74
  };
105
75
  console.log({ ids: q.ids, currentIds: currentIds });
106
76
  try {
107
- for (var _c = (e_7 = void 0, tslib_1.__values(q.ids.filter(function (y) { return !currentIds.includes(y); }))), _d = _c.next(); !_d.done; _d = _c.next()) {
77
+ for (var _c = (e_5 = void 0, tslib_1.__values(q.ids.filter(function (y) { return !currentIds.includes(y); }))), _d = _c.next(); !_d.done; _d = _c.next()) {
108
78
  var id = _d.value;
109
79
  if (id != origId || !currentIds.includes(ref.getId()))
110
80
  sendMessage({
@@ -115,15 +85,15 @@ var LiveQueryManager = /** @class */ (function () {
115
85
  });
116
86
  }
117
87
  }
118
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
88
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
119
89
  finally {
120
90
  try {
121
91
  if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
122
92
  }
123
- finally { if (e_7) throw e_7.error; }
93
+ finally { if (e_5) throw e_5.error; }
124
94
  }
125
95
  try {
126
- for (var currentItems_1 = (e_8 = void 0, tslib_1.__values(currentItems)), currentItems_1_1 = currentItems_1.next(); !currentItems_1_1.done; currentItems_1_1 = currentItems_1.next()) {
96
+ for (var currentItems_1 = (e_6 = void 0, tslib_1.__values(currentItems)), currentItems_1_1 = currentItems_1.next(); !currentItems_1_1.done; currentItems_1_1 = currentItems_1.next()) {
127
97
  var item = currentItems_1_1.value;
128
98
  var itemRef = q.repo.getEntityRef(item);
129
99
  if (itemRef.getId() == ref.getId() && q.ids.includes(origId)) {
@@ -143,29 +113,29 @@ var LiveQueryManager = /** @class */ (function () {
143
113
  }
144
114
  }
145
115
  }
146
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
116
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
147
117
  finally {
148
118
  try {
149
119
  if (currentItems_1_1 && !currentItems_1_1.done && (_b = currentItems_1.return)) _b.call(currentItems_1);
150
120
  }
151
- finally { if (e_8) throw e_8.error; }
121
+ finally { if (e_6) throw e_6.error; }
152
122
  }
153
123
  q.ids = currentIds;
154
124
  }));
155
125
  }
156
126
  };
157
127
  try {
158
- for (var _b = (e_6 = void 0, tslib_1.__values(c.queries)), _c = _b.next(); !_c.done; _c = _b.next()) {
128
+ for (var _b = (e_4 = void 0, tslib_1.__values(c.queries)), _c = _b.next(); !_c.done; _c = _b.next()) {
159
129
  var q = _c.value;
160
130
  _loop_2(q);
161
131
  }
162
132
  }
163
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
133
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
164
134
  finally {
165
135
  try {
166
136
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
167
137
  }
168
- finally { if (e_6) throw e_6.error; }
138
+ finally { if (e_4) throw e_4.error; }
169
139
  }
170
140
  };
171
141
  var this_1 = this;
@@ -175,22 +145,54 @@ var LiveQueryManager = /** @class */ (function () {
175
145
  _loop_1(c);
176
146
  }
177
147
  }
178
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
148
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
179
149
  finally {
180
150
  try {
181
151
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
182
152
  }
183
- finally { if (e_5) throw e_5.error; }
153
+ finally { if (e_3) throw e_3.error; }
184
154
  }
185
155
  };
186
- LiveQueryManager.prototype.deleted = function (ref) {
187
- if (!this.hasListeners(ref))
188
- return;
189
- this.sendMessage(ref.metadata.key, {
190
- type: "remove",
191
- data: { id: ref.getId() }
192
- });
156
+ LiveQueryPublisher.prototype.deleted = function (ref) {
157
+ var e_7, _a, e_8, _b;
158
+ var id = ref.getOriginalId();
159
+ try {
160
+ for (var _c = tslib_1.__values(this.clients), _d = _c.next(); !_d.done; _d = _c.next()) {
161
+ var c = _d.value;
162
+ try {
163
+ for (var _e = (e_8 = void 0, tslib_1.__values(c.queries)), _f = _e.next(); !_f.done; _f = _e.next()) {
164
+ var q = _f.value;
165
+ if (q.repo.metadata.key === ref.metadata.key) {
166
+ if (q.ids.includes(id)) {
167
+ this.dispatcher.sendQueryMessage({
168
+ clientId: c.clientId, queryId: q.id, message: {
169
+ type: "remove",
170
+ data: {
171
+ id: id
172
+ }
173
+ }
174
+ });
175
+ }
176
+ }
177
+ }
178
+ }
179
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
180
+ finally {
181
+ try {
182
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
183
+ }
184
+ finally { if (e_8) throw e_8.error; }
185
+ }
186
+ }
187
+ }
188
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
189
+ finally {
190
+ try {
191
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
192
+ }
193
+ finally { if (e_7) throw e_7.error; }
194
+ }
193
195
  };
194
- return LiveQueryManager;
196
+ return LiveQueryPublisher;
195
197
  }());
196
- exports.LiveQueryManager = LiveQueryManager;
198
+ exports.LiveQueryPublisher = LiveQueryPublisher;
@@ -11,6 +11,7 @@ var valueConverters_1 = require("../valueConverters");
11
11
  var filter_interfaces_2 = require("../filter/filter-interfaces");
12
12
  var assign_1 = require("../../assign");
13
13
  var remult_proxy_1 = require("../remult-proxy");
14
+ var getId_1 = require("./getId");
14
15
  //import { remult } from "../remult-proxy";
15
16
  var classValidatorValidate = undefined;
16
17
  // import("class-validator".toString())
@@ -282,8 +283,10 @@ var RepositoryImplementation = /** @class */ (function () {
282
283
  finally { if (e_5) throw e_5.error; }
283
284
  }
284
285
  var row_1 = new rowHelperImplementation(this._info, instance, this, this.edp, this.remult, false);
285
- if (id)
286
+ if (id) {
286
287
  row_1.id = id;
288
+ row_1.originalId = id;
289
+ }
287
290
  else
288
291
  row_1.id = row_1.getId();
289
292
  ref = row_1;
@@ -1218,10 +1221,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1218
1221
  configurable: true
1219
1222
  });
1220
1223
  rowHelperImplementation.prototype.getId = function () {
1221
- if (this.info.idMetadata.field instanceof column_1.CompoundIdField)
1222
- return this.info.idMetadata.field.getId(this.instance);
1223
- else
1224
- return this.instance[this.info.idMetadata.field.key];
1224
+ return getId_1.getId(this.info, this.instance);
1225
1225
  };
1226
1226
  rowHelperImplementation.prototype.saveMoreOriginalData = function () {
1227
1227
  this.originalId = this.getId();
@@ -1551,11 +1551,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1551
1551
  case 12: return [4 /*yield*/, this.calcServerExpression()];
1552
1552
  case 13:
1553
1553
  _d.sent();
1554
- if (this.repository.metadata.idMetadata.field instanceof column_1.CompoundIdField) {
1555
- this.id = this.repository.metadata.idMetadata.field.getId(this.instance);
1556
- }
1557
- else
1558
- this.id = data[this.repository.metadata.idMetadata.field.key];
1554
+ this.id = getId_1.getId(this.info, this.instance);
1559
1555
  return [2 /*return*/];
1560
1556
  }
1561
1557
  });
@@ -0,0 +1,2 @@
1
+ import type { EntityMetadata } from "./remult3";
2
+ export declare function getId<entityType>(meta: EntityMetadata<entityType>, instance: entityType): any;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getId = void 0;
4
+ var column_1 = require("../column");
5
+ function getId(meta, instance) {
6
+ if (meta.idMetadata.field instanceof column_1.CompoundIdField)
7
+ return meta.idMetadata.field.getId(instance);
8
+ else
9
+ return instance[meta.idMetadata.field.key];
10
+ }
11
+ exports.getId = getId;
@@ -1,5 +1,6 @@
1
1
  import './frontend-database-tests-setup.spec';
2
2
  import { Remult } from "../context";
3
+ import { DataApi } from "../data-api";
3
4
  import { DataProvider, EntityDataProvider } from "../data-interfaces";
4
5
  import { InMemoryDataProvider } from "../data-providers/in-memory-database";
5
6
  import { EntityMetadata } from "../remult3";
@@ -32,3 +33,4 @@ export declare class MockRestDataProvider implements DataProvider {
32
33
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
33
34
  supportsCustomFilter: boolean;
34
35
  }
36
+ export declare function createMockHttpDataProvider(dataApi: DataApi<any>): import("c:/Repos/radweb/projects/core/src/data-interfaces").RestDataProviderHttpProvider;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockRestDataProvider = exports.testAllDataProviders = exports.testRestDb = exports.testInMemoryDb = exports.testSql = exports.ActionTestConfig = exports.testAsIfOnBackend = exports.fitForEach = exports.itForEach = void 0;
3
+ exports.createMockHttpDataProvider = exports.MockRestDataProvider = exports.testAllDataProviders = exports.testRestDb = exports.testInMemoryDb = exports.testSql = exports.ActionTestConfig = exports.testAsIfOnBackend = exports.fitForEach = exports.itForEach = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  require("./frontend-database-tests-setup.spec");
6
6
  var context_1 = require("../context");
@@ -270,101 +270,8 @@ var MockRestDataProvider = /** @class */ (function () {
270
270
  this.supportsCustomFilter = true;
271
271
  }
272
272
  MockRestDataProvider.prototype.getEntityDataProvider = function (metadata) {
273
- var _this = this;
274
273
  var dataApi = new data_api_1.DataApi(this.remult.repo(metadata.entityType), this.remult);
275
- return new rest_data_provider_1.RestEntityDataProvider(function () { return ""; }, function () { return new context_1.HttpProviderBridgeToRestDataProviderHttpProvider({
276
- delete: function (url) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
277
- var urlSplit, r, result;
278
- return tslib_1.__generator(this, function (_a) {
279
- switch (_a.label) {
280
- case 0:
281
- urlSplit = url.split('/');
282
- r = new TestDataApiResponse_1.TestDataApiResponse();
283
- r.deleted = function () { };
284
- _a.label = 1;
285
- case 1:
286
- _a.trys.push([1, , 3, 4]);
287
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
288
- return [4 /*yield*/, dataApi.delete(r, urlSplit[urlSplit.length - 1])];
289
- case 2:
290
- _a.sent();
291
- return [3 /*break*/, 4];
292
- case 3:
293
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
294
- return [7 /*endfinally*/];
295
- case 4: return [2 /*return*/, result];
296
- }
297
- });
298
- }); },
299
- get: function (url) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
300
- var r, result;
301
- return tslib_1.__generator(this, function (_a) {
302
- switch (_a.label) {
303
- case 0:
304
- r = new TestDataApiResponse_1.TestDataApiResponse();
305
- r.success = function (data) { result = data; };
306
- _a.label = 1;
307
- case 1:
308
- _a.trys.push([1, , 3, 4]);
309
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
310
- return [4 /*yield*/, dataApi.httpGet(r, urlToReq(url))];
311
- case 2:
312
- _a.sent();
313
- return [3 /*break*/, 4];
314
- case 3:
315
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
316
- return [7 /*endfinally*/];
317
- case 4: return [2 /*return*/, result];
318
- }
319
- });
320
- }); },
321
- post: function (url, data) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
322
- var r, result;
323
- return tslib_1.__generator(this, function (_a) {
324
- switch (_a.label) {
325
- case 0:
326
- r = new TestDataApiResponse_1.TestDataApiResponse();
327
- r.created = function (data) { result = data; };
328
- r.success = function (data) { result = data; };
329
- _a.label = 1;
330
- case 1:
331
- _a.trys.push([1, , 3, 4]);
332
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
333
- return [4 /*yield*/, dataApi.httpPost(r, urlToReq(url), data)];
334
- case 2:
335
- _a.sent();
336
- return [3 /*break*/, 4];
337
- case 3:
338
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
339
- return [7 /*endfinally*/];
340
- case 4: return [2 /*return*/, result];
341
- }
342
- });
343
- }); },
344
- put: function (url, data) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
345
- var urlSplit, r, result;
346
- return tslib_1.__generator(this, function (_a) {
347
- switch (_a.label) {
348
- case 0:
349
- urlSplit = url.split('/');
350
- r = new TestDataApiResponse_1.TestDataApiResponse();
351
- r.success = function (data) { result = data; };
352
- _a.label = 1;
353
- case 1:
354
- _a.trys.push([1, , 3, 4]);
355
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
356
- return [4 /*yield*/, dataApi.put(r, urlSplit[urlSplit.length - 1], data)];
357
- case 2:
358
- _a.sent();
359
- return [3 /*break*/, 4];
360
- case 3:
361
- entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
362
- return [7 /*endfinally*/];
363
- case 4: return [2 /*return*/, result];
364
- }
365
- });
366
- }); }
367
- }); }, metadata);
274
+ return new rest_data_provider_1.RestEntityDataProvider(function () { return ""; }, function () { return createMockHttpDataProvider(dataApi); }, metadata);
368
275
  };
369
276
  MockRestDataProvider.prototype.transaction = function (action) {
370
277
  throw new Error('Method not implemented.');
@@ -372,3 +279,100 @@ var MockRestDataProvider = /** @class */ (function () {
372
279
  return MockRestDataProvider;
373
280
  }());
374
281
  exports.MockRestDataProvider = MockRestDataProvider;
282
+ function createMockHttpDataProvider(dataApi) {
283
+ var _this = this;
284
+ return new context_1.HttpProviderBridgeToRestDataProviderHttpProvider({
285
+ delete: function (url) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
286
+ var urlSplit, r, result;
287
+ return tslib_1.__generator(this, function (_a) {
288
+ switch (_a.label) {
289
+ case 0:
290
+ urlSplit = url.split('/');
291
+ r = new TestDataApiResponse_1.TestDataApiResponse();
292
+ r.deleted = function () { };
293
+ _a.label = 1;
294
+ case 1:
295
+ _a.trys.push([1, , 3, 4]);
296
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
297
+ return [4 /*yield*/, dataApi.delete(r, urlSplit[urlSplit.length - 1])];
298
+ case 2:
299
+ _a.sent();
300
+ return [3 /*break*/, 4];
301
+ case 3:
302
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
303
+ return [7 /*endfinally*/];
304
+ case 4: return [2 /*return*/, result];
305
+ }
306
+ });
307
+ }); },
308
+ get: function (url) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
309
+ var r, result;
310
+ return tslib_1.__generator(this, function (_a) {
311
+ switch (_a.label) {
312
+ case 0:
313
+ r = new TestDataApiResponse_1.TestDataApiResponse();
314
+ r.success = function (data) { result = data; };
315
+ _a.label = 1;
316
+ case 1:
317
+ _a.trys.push([1, , 3, 4]);
318
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
319
+ return [4 /*yield*/, dataApi.httpGet(r, urlToReq(url))];
320
+ case 2:
321
+ _a.sent();
322
+ return [3 /*break*/, 4];
323
+ case 3:
324
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
325
+ return [7 /*endfinally*/];
326
+ case 4: return [2 /*return*/, result];
327
+ }
328
+ });
329
+ }); },
330
+ post: function (url, data) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
331
+ var r, result;
332
+ return tslib_1.__generator(this, function (_a) {
333
+ switch (_a.label) {
334
+ case 0:
335
+ r = new TestDataApiResponse_1.TestDataApiResponse();
336
+ r.created = function (data) { result = data; };
337
+ r.success = function (data) { result = data; };
338
+ _a.label = 1;
339
+ case 1:
340
+ _a.trys.push([1, , 3, 4]);
341
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
342
+ return [4 /*yield*/, dataApi.httpPost(r, urlToReq(url), data)];
343
+ case 2:
344
+ _a.sent();
345
+ return [3 /*break*/, 4];
346
+ case 3:
347
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
348
+ return [7 /*endfinally*/];
349
+ case 4: return [2 /*return*/, result];
350
+ }
351
+ });
352
+ }); },
353
+ put: function (url, data) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
354
+ var urlSplit, r, result;
355
+ return tslib_1.__generator(this, function (_a) {
356
+ switch (_a.label) {
357
+ case 0:
358
+ urlSplit = url.split('/');
359
+ r = new TestDataApiResponse_1.TestDataApiResponse();
360
+ r.success = function (data) { result = data; };
361
+ _a.label = 1;
362
+ case 1:
363
+ _a.trys.push([1, , 3, 4]);
364
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = true;
365
+ return [4 /*yield*/, dataApi.put(r, urlSplit[urlSplit.length - 1], data)];
366
+ case 2:
367
+ _a.sent();
368
+ return [3 /*break*/, 4];
369
+ case 3:
370
+ entityWithValidations_1.testConfiguration.restDbRunningOnServer = false;
371
+ return [7 /*endfinally*/];
372
+ case 4: return [2 /*return*/, result];
373
+ }
374
+ });
375
+ }); }
376
+ });
377
+ }
378
+ exports.createMockHttpDataProvider = createMockHttpDataProvider;