remult 0.15.3 → 0.16.0-exp.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.
package/esm/index.d.ts CHANGED
@@ -8,7 +8,8 @@ export { RestDataProvider } from './src/data-providers/rest-data-provider';
8
8
  export { InMemoryDataProvider } from './src/data-providers/in-memory-database';
9
9
  export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider';
10
10
  export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider';
11
- export { SqlDatabase } from './src/data-providers/sql-database';
11
+ export { SqlDatabase, } from './src/data-providers/sql-database';
12
+ export { CustomSqlFilterObject, CustomSqlFilterBuilder } from './src/filter/filter-consumer-bridge-to-sql-request';
12
13
  export { JsonDataProvider, JsonEntityStorage } from './src/data-providers/json-data-provider';
13
14
  export { Controller, BackendMethodOptions, BackendMethod, ProgressListener } from './src/server-action';
14
15
  export { Allowed, Allow, Remult, isBackend, AllowedForInstance, EventDispatcher, EventSource, HttpProvider, Unobserve, UserInfo } from './src/context';
@@ -20,3 +21,4 @@ export { FilterConsumerBridgeToSqlRequest } from './src/filter/filter-consumer-b
20
21
  export { UrlBuilder } from './urlBuilder';
21
22
  export { Validators } from './src/validators';
22
23
  export { ValueConverters } from './src/valueConverters';
24
+ export { remult } from './src/remult-proxy';
package/esm/index.js CHANGED
@@ -6,7 +6,8 @@ export { RestDataProvider } from './src/data-providers/rest-data-provider'; //V
6
6
  export { InMemoryDataProvider } from './src/data-providers/in-memory-database'; //V
7
7
  export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider'; //V
8
8
  export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider'; //V
9
- export { SqlDatabase } from './src/data-providers/sql-database'; //V
9
+ export { SqlDatabase, } from './src/data-providers/sql-database'; //V
10
+ export { CustomSqlFilterBuilder } from './src/filter/filter-consumer-bridge-to-sql-request';
10
11
  export { JsonDataProvider } from './src/data-providers/json-data-provider'; //V
11
12
  //export * from './src/data-api'; //reconsider if to make internal
12
13
  export { Controller, BackendMethod, ProgressListener } from './src/server-action';
@@ -19,3 +20,4 @@ export { FilterConsumerBridgeToSqlRequest } from './src/filter/filter-consumer-b
19
20
  export { UrlBuilder } from './urlBuilder';
20
21
  export { Validators } from './src/validators';
21
22
  export { ValueConverters } from './src/valueConverters';
23
+ export { remult } from './src/remult-proxy';
@@ -4,6 +4,8 @@ import { DataApi, serializeError } from '../src/data-api';
4
4
  import { allEntities, Remult } from '../src/context';
5
5
  import { Entity, Fields, getEntityKey } from '../src/remult3';
6
6
  import { IdEntity } from '../src/id-entity';
7
+ import { AsyncLocalStorage } from 'async_hooks';
8
+ import { remult } from '../src/remult-proxy';
7
9
  ;
8
10
  export function createRemultServer(options) {
9
11
  if (!options) {
@@ -32,7 +34,12 @@ export function createRemultServer(options) {
32
34
  if (options.initApi) {
33
35
  dataProvider = dataProvider.then(async (dp) => {
34
36
  var remult = new Remult(dp);
35
- await options.initApi(remult);
37
+ await new Promise((res) => {
38
+ remultObjectStorage.run(remult, async () => {
39
+ await options.initApi(remult);
40
+ res({});
41
+ });
42
+ });
36
43
  return dp;
37
44
  });
38
45
  }
@@ -53,6 +60,8 @@ export function createRemultServer(options) {
53
60
  return bridge;
54
61
  }
55
62
  ;
63
+ const remultObjectStorage = new AsyncLocalStorage();
64
+ let remultObjectStorageWasSetup = false;
56
65
  class RemultServerImplementation {
57
66
  constructor(queue, options, dataProvider) {
58
67
  this.queue = queue;
@@ -62,6 +71,16 @@ class RemultServerImplementation {
62
71
  this.hasQueue = false;
63
72
  /* internal */
64
73
  this.backendMethodsOpenApi = [];
74
+ if (!remultObjectStorageWasSetup) {
75
+ remultObjectStorageWasSetup = true;
76
+ remult.remultFactory = () => {
77
+ const r = remultObjectStorage.getStore();
78
+ if (r)
79
+ return r;
80
+ else
81
+ throw "remult object was requested outside of a valid context, try running it within initApi or a remult request cycle";
82
+ };
83
+ }
65
84
  }
66
85
  handle(req, gRes) {
67
86
  if (!this.routeImpl) {
@@ -134,22 +153,24 @@ class RemultServerImplementation {
134
153
  let myRes = new ExpressResponseBridgeToDataApiResponse(res, req);
135
154
  let remult = new Remult();
136
155
  remult.setDataProvider(await this.dataProvider);
137
- if (req) {
138
- let user;
139
- if (this.options.getUser)
140
- user = await this.options.getUser(req);
141
- else {
142
- user = req['user'];
143
- if (!user)
144
- user = req['auth'];
156
+ remultObjectStorage.run(remult, async () => {
157
+ if (req) {
158
+ let user;
159
+ if (this.options.getUser)
160
+ user = await this.options.getUser(req);
161
+ else {
162
+ user = req['user'];
163
+ if (!user)
164
+ user = req['auth'];
165
+ }
166
+ if (user)
167
+ remult.setUser(user);
145
168
  }
146
- if (user)
147
- remult.setUser(user);
148
- }
149
- if (this.options.initRequest) {
150
- await this.options.initRequest(remult, req);
151
- }
152
- what(remult, myReq, myRes, req);
169
+ if (this.options.initRequest) {
170
+ await this.options.initRequest(remult, req);
171
+ }
172
+ what(remult, myReq, myRes, req);
173
+ });
153
174
  };
154
175
  }
155
176
  ;
@@ -4,7 +4,7 @@ import { remultFresh } from '../../remult-fresh';
4
4
  import { HttpProviderBridgeToRestDataProviderHttpProvider, Remult } from '../context';
5
5
  import { InMemoryDataProvider } from '../data-providers/in-memory-database';
6
6
  import { Entity, Fields } from '../remult3';
7
- import { Action, BackendMethod } from '../server-action';
7
+ import { BackendMethod } from '../server-action';
8
8
  import { Categories } from '../tests/remult-3-entities';
9
9
  Remult.apiBaseUrl = 'http://localhost:3003/api';
10
10
  let path = Remult.apiBaseUrl + '/tasks';
@@ -158,7 +158,7 @@ Task = __decorate([
158
158
  export { Task };
159
159
  async function create3Tasks() {
160
160
  const remult = new Remult(axios);
161
- Action.provider = new HttpProviderBridgeToRestDataProviderHttpProvider(axios);
161
+ Remult.defaultHttpProvider = new HttpProviderBridgeToRestDataProviderHttpProvider(axios);
162
162
  const taskRepo = remult.repo(Task);
163
163
  for (const task of await taskRepo.find()) {
164
164
  await taskRepo.delete(task);
@@ -41,8 +41,6 @@ export declare class Remult {
41
41
  get user(): UserInfo;
42
42
  /** Set's the current user info */
43
43
  setUser(info: UserInfo | undefined): Promise<void>;
44
- private _user;
45
- private _userChangeEvent;
46
44
  /** Checks if a user was authenticated */
47
45
  authenticated(): boolean;
48
46
  /** checks if the user has any of the roles specified in the parameters
@@ -59,7 +57,8 @@ export declare class Remult {
59
57
  isAllowedForInstance(instance: any, allowed?: AllowedForInstance<any>): boolean;
60
58
  /** returns a dispatcher object that fires once a user has changed*/
61
59
  get userChange(): EventDispatcher;
62
- private repCache;
60
+ static defaultHttpProvider: RestDataProviderHttpProvider;
61
+ static setDefaultHttpProvider(provider: HttpProvider | typeof fetch): void;
63
62
  /** Creates a new instance of the `remult` object.
64
63
  *
65
64
  * Can receive either an HttpProvider or a DataProvider as a parameter - which will be used to fetch data from.
@@ -81,6 +80,9 @@ export declare class Remult {
81
80
  clearAllCache(): any;
82
81
  /** A helper callback that is called whenever an entity is created. */
83
82
  static entityRefInit?: (ref: EntityRef<any>, row: any) => void;
83
+ readonly state: RemultState;
84
+ }
85
+ export interface RemultState {
84
86
  }
85
87
  export declare const allEntities: ClassType<any>[];
86
88
  export interface ControllerOptions {
@@ -1,4 +1,4 @@
1
- import { Action, actionInfo } from './server-action';
1
+ import { actionInfo } from './server-action';
2
2
  import { RestDataProvider, RestDataProviderHttpProviderUsingFetch } from './data-providers/rest-data-provider';
3
3
  import { RepositoryImplementation } from "./remult3/RepositoryImplementation";
4
4
  export class HttpProviderBridgeToRestDataProviderHttpProvider {
@@ -97,30 +97,20 @@ export class Remult {
97
97
  * If no provider is specified, `fetch` will be used as an http provider
98
98
  */
99
99
  constructor(provider) {
100
+ /* @internal */
100
101
  this._userChangeEvent = new EventSource();
102
+ /* @internal */
101
103
  this.repCache = new Map();
104
+ this.state = {};
102
105
  if (provider && provider.getEntityDataProvider) {
103
106
  this._dataSource = provider;
104
107
  return;
105
108
  }
106
- let dataProvider;
107
- if (!dataProvider) {
108
- let http = provider;
109
- if (http && http.get && http.put && http.post && http.delete) {
110
- dataProvider = new HttpProviderBridgeToRestDataProviderHttpProvider(http);
111
- }
112
- }
113
- if (!dataProvider) {
114
- if (typeof provider === "function") {
115
- dataProvider = new RestDataProviderHttpProviderUsingFetch(provider);
116
- }
109
+ let httpDataProvider = buildRestDataProvider(provider);
110
+ if (!httpDataProvider) {
111
+ httpDataProvider = new UseDefaultRestDataProviderHttpProvider();
117
112
  }
118
- if (!dataProvider) {
119
- dataProvider = new RestDataProviderHttpProviderUsingFetch();
120
- }
121
- this._dataSource = new RestDataProvider(Remult.apiBaseUrl, dataProvider);
122
- if (!Action.provider)
123
- Action.provider = dataProvider;
113
+ this._dataSource = new RestDataProvider(null, httpDataProvider);
124
114
  }
125
115
  /**Return's a `Repository` of the specific entity type
126
116
  * @example
@@ -224,6 +214,12 @@ export class Remult {
224
214
  get userChange() {
225
215
  return this._userChangeEvent.dispatcher;
226
216
  }
217
+ static setDefaultHttpProvider(provider) {
218
+ const r = buildRestDataProvider(provider);
219
+ if (!r)
220
+ throw provider + " doesn't patch http provider or fetch interface";
221
+ Remult.defaultHttpProvider = r;
222
+ }
227
223
  /** sets the current data provider */
228
224
  setDataProvider(dataProvider) {
229
225
  this._dataSource = dataProvider;
@@ -232,6 +228,7 @@ export class Remult {
232
228
  this.repCache.clear();
233
229
  }
234
230
  }
231
+ Remult.defaultHttpProvider = new RestDataProviderHttpProviderUsingFetch();
235
232
  /** The api Base Url to be used in all remult calls. by default it's set to `/api`.
236
233
  *
237
234
  * Set this property in case you want to determine a non relative api url
@@ -239,6 +236,20 @@ export class Remult {
239
236
  Remult.apiBaseUrl = '/api';
240
237
  /** A helper callback that can be used to debug and trace all find operations. Useful in debugging scenarios */
241
238
  Remult.onFind = (metadata, options) => { };
239
+ class UseDefaultRestDataProviderHttpProvider {
240
+ post(url, data) {
241
+ return Remult.defaultHttpProvider.post(url, data);
242
+ }
243
+ delete(url) {
244
+ return Remult.defaultHttpProvider.delete(url);
245
+ }
246
+ put(url, data) {
247
+ return Remult.defaultHttpProvider.put(url, data);
248
+ }
249
+ get(url) {
250
+ return Remult.defaultHttpProvider.get(url);
251
+ }
252
+ }
242
253
  export const allEntities = [];
243
254
  export const classHelpers = new Map();
244
255
  export class ClassHelper {
@@ -251,6 +262,21 @@ export class MethodHelper {
251
262
  this.classes = new Map();
252
263
  }
253
264
  }
265
+ function buildRestDataProvider(provider) {
266
+ let httpDataProvider;
267
+ if (!httpDataProvider) {
268
+ let http = provider;
269
+ if (http && http.get && http.put && http.post && http.delete) {
270
+ httpDataProvider = new HttpProviderBridgeToRestDataProviderHttpProvider(http);
271
+ }
272
+ }
273
+ if (!httpDataProvider) {
274
+ if (typeof provider === "function") {
275
+ httpDataProvider = new RestDataProviderHttpProviderUsingFetch(provider);
276
+ }
277
+ }
278
+ return httpDataProvider;
279
+ }
254
280
  export function setControllerSettings(target, options) {
255
281
  let r = target;
256
282
  while (true) {
@@ -1,6 +1,7 @@
1
1
  import { Sort } from './sort';
2
2
  import { Filter } from './filter/filter-interfaces';
3
3
  import { EntityMetadata, OmitEB } from './remult3';
4
+ import { HttpProvider } from './context';
4
5
  export interface DataProvider {
5
6
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
6
7
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
@@ -19,7 +20,7 @@ export interface EntityDataProviderFindOptions {
19
20
  page?: number;
20
21
  orderBy?: Sort;
21
22
  }
22
- export interface RestDataProviderHttpProvider {
23
+ export interface RestDataProviderHttpProvider extends HttpProvider {
23
24
  post(url: string, data: any): Promise<any>;
24
25
  delete(url: string): Promise<void>;
25
26
  put(url: string, data: any): Promise<any>;
@@ -5,7 +5,7 @@ import { EntityMetadata } from '../remult3';
5
5
  export declare class RestDataProvider implements DataProvider {
6
6
  private url;
7
7
  private http;
8
- constructor(url: string, http: RestDataProviderHttpProvider);
8
+ constructor(url: string | null, http: RestDataProviderHttpProvider);
9
9
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
10
10
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
11
11
  supportsCustomFilter: boolean;
@@ -1,6 +1,6 @@
1
1
  import { UrlBuilder } from '../../urlBuilder';
2
2
  import { customUrlToken } from '../filter/filter-interfaces';
3
- import { retry } from '../context';
3
+ import { Remult, retry } from '../context';
4
4
  export class RestDataProvider {
5
5
  constructor(url, http) {
6
6
  this.url = url;
@@ -8,7 +8,10 @@ export class RestDataProvider {
8
8
  this.supportsCustomFilter = true;
9
9
  }
10
10
  getEntityDataProvider(entity) {
11
- return new RestEntityDataProvider(this.url + '/' + entity.key, this.http, entity);
11
+ let url = this.url;
12
+ if (url === undefined || url === null)
13
+ url = Remult.apiBaseUrl;
14
+ return new RestEntityDataProvider(url + '/' + entity.key, this.http, entity);
12
15
  }
13
16
  async transaction(action) {
14
17
  throw new Error("Method not implemented.");
@@ -0,0 +1 @@
1
+ export declare const remult: RemultProxy;
@@ -0,0 +1,51 @@
1
+ import { Remult } from "./context";
2
+ let defaultRemult = new Remult();
3
+ /*@internal*/
4
+ export class RemultProxy {
5
+ constructor() {
6
+ /*@internal*/
7
+ this.remultFactory = () => defaultRemult;
8
+ this.repo = (...args) => this.remultFactory().repo(...args);
9
+ }
10
+ get state() {
11
+ return this.instance.state;
12
+ }
13
+ get _user() {
14
+ return this.instance._user;
15
+ }
16
+ ;
17
+ get _userChangeEvent() { return this.instance._userChangeEvent; }
18
+ ;
19
+ get _dataSource() { return this.instance._dataSource; }
20
+ ;
21
+ get repCache() { return this.instance.repCache; }
22
+ ;
23
+ setUser(info) {
24
+ return this.instance.setUser(info);
25
+ }
26
+ authenticated() {
27
+ return this.instance.authenticated();
28
+ }
29
+ isAllowed(roles) {
30
+ return this.instance.isAllowed(roles);
31
+ }
32
+ isAllowedForInstance(instance, allowed) {
33
+ return this.instance.isAllowedForInstance(instance, allowed);
34
+ }
35
+ get userChange() {
36
+ return this.instance.userChange;
37
+ }
38
+ setDataProvider(dataProvider) {
39
+ return this.instance.setDataProvider(dataProvider);
40
+ }
41
+ clearAllCache() {
42
+ return this.instance.clearAllCache();
43
+ }
44
+ get instance() {
45
+ return this.remultFactory();
46
+ }
47
+ get user() {
48
+ return this.remultFactory().user;
49
+ }
50
+ }
51
+ export const remult = new RemultProxy();
@@ -1,7 +1,7 @@
1
1
  import 'reflect-metadata';
2
2
  import { Remult, AllowedForInstance } from './context';
3
3
  import { DataApiRequest, DataApiResponse } from './data-api';
4
- import { DataProvider, RestDataProviderHttpProvider } from './data-interfaces';
4
+ import { DataProvider } from './data-interfaces';
5
5
  interface inArgs {
6
6
  args: any[];
7
7
  }
@@ -14,7 +14,6 @@ export declare abstract class Action<inParam, outParam> {
14
14
  private allowed;
15
15
  constructor(actionUrl: string, queue: boolean, allowed: AllowedForInstance<any>);
16
16
  static apiUrlForJobStatus: string;
17
- static provider: RestDataProviderHttpProvider;
18
17
  run(pIn: inParam): Promise<outParam>;
19
18
  protected abstract execute(info: inParam, req: Remult, res: DataApiResponse): Promise<outParam>;
20
19
  __register(reg: (url: string, queue: boolean, allowed: AllowedForInstance<any>, what: ((data: any, req: Remult, res: DataApiResponse) => void)) => void): void;
@@ -9,7 +9,7 @@ export class Action {
9
9
  this.allowed = allowed;
10
10
  }
11
11
  async run(pIn) {
12
- let r = await Action.provider.post(Remult.apiBaseUrl + '/' + this.actionUrl, pIn);
12
+ let r = await Remult.defaultHttpProvider.post(Remult.apiBaseUrl + '/' + this.actionUrl, pIn);
13
13
  let p = r;
14
14
  if (p && p.queuedJobId) {
15
15
  let progress = actionInfo.startBusyWithProgress();
@@ -21,7 +21,7 @@ export class Action {
21
21
  await new Promise(res => setTimeout(() => {
22
22
  res(undefined);
23
23
  }, 200));
24
- runningJob = await Action.provider.post(Remult.apiBaseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId });
24
+ runningJob = await Remult.defaultHttpProvider.post(Remult.apiBaseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId });
25
25
  if (runningJob.progress) {
26
26
  progress.progress(runningJob.progress);
27
27
  }
@@ -5,7 +5,7 @@ import { InMemoryDataProvider } from "../data-providers/in-memory-database";
5
5
  import { RestEntityDataProvider } from "../data-providers/rest-data-provider";
6
6
  import { SqlDatabase } from "../data-providers/sql-database";
7
7
  import { WebSqlDataProvider } from "../data-providers/web-sql-data-provider";
8
- import { Action, actionInfo, serverActionField } from "../server-action";
8
+ import { actionInfo, serverActionField } from "../server-action";
9
9
  import { testConfiguration } from '../shared-tests/entityWithValidations';
10
10
  import { TestDataApiResponse } from './TestDataApiResponse';
11
11
  jasmine.DEFAULT_TIMEOUT_INTERVAL = 999999;
@@ -48,7 +48,7 @@ export async function testAsIfOnBackend(what) {
48
48
  export const ActionTestConfig = {
49
49
  db: new InMemoryDataProvider()
50
50
  };
51
- Action.provider = {
51
+ Remult.defaultHttpProvider = {
52
52
  delete: undefined,
53
53
  get: undefined,
54
54
  post: async (urlreq, data) => {
package/index.d.ts CHANGED
@@ -8,7 +8,8 @@ export { RestDataProvider } from './src/data-providers/rest-data-provider';
8
8
  export { InMemoryDataProvider } from './src/data-providers/in-memory-database';
9
9
  export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider';
10
10
  export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider';
11
- export { SqlDatabase } from './src/data-providers/sql-database';
11
+ export { SqlDatabase, } from './src/data-providers/sql-database';
12
+ export { CustomSqlFilterObject, CustomSqlFilterBuilder } from './src/filter/filter-consumer-bridge-to-sql-request';
12
13
  export { JsonDataProvider, JsonEntityStorage } from './src/data-providers/json-data-provider';
13
14
  export { Controller, BackendMethodOptions, BackendMethod, ProgressListener } from './src/server-action';
14
15
  export { Allowed, Allow, Remult, isBackend, AllowedForInstance, EventDispatcher, EventSource, HttpProvider, Unobserve, UserInfo } from './src/context';
@@ -20,3 +21,4 @@ export { FilterConsumerBridgeToSqlRequest } from './src/filter/filter-consumer-b
20
21
  export { UrlBuilder } from './urlBuilder';
21
22
  export { Validators } from './src/validators';
22
23
  export { ValueConverters } from './src/valueConverters';
24
+ export { remult } from './src/remult-proxy';
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValueConverters = exports.Validators = exports.UrlBuilder = exports.FilterConsumerBridgeToSqlRequest = exports.Filter = exports.CompoundIdField = exports.OneToMany = exports.Sort = exports.IdEntity = exports.EventSource = exports.isBackend = exports.Remult = exports.Allow = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonDataProvider = exports.SqlDatabase = exports.WebSqlDataProvider = exports.ArrayEntityDataProvider = exports.InMemoryDataProvider = exports.RestDataProvider = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getEntityRef = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.BuildEntity = exports.Entity = exports.Fields = exports.Field = void 0;
3
+ exports.remult = exports.ValueConverters = exports.Validators = exports.UrlBuilder = exports.FilterConsumerBridgeToSqlRequest = exports.Filter = exports.CompoundIdField = exports.OneToMany = exports.Sort = exports.IdEntity = exports.EventSource = exports.isBackend = exports.Remult = exports.Allow = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonDataProvider = exports.CustomSqlFilterBuilder = exports.SqlDatabase = exports.WebSqlDataProvider = exports.ArrayEntityDataProvider = exports.InMemoryDataProvider = exports.RestDataProvider = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getEntityRef = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.BuildEntity = exports.Entity = exports.Fields = exports.Field = void 0;
4
4
  /*
5
5
  * Public API Surface of remult
6
6
  */
@@ -28,6 +28,8 @@ var web_sql_data_provider_1 = require("./src/data-providers/web-sql-data-provide
28
28
  Object.defineProperty(exports, "WebSqlDataProvider", { enumerable: true, get: function () { return web_sql_data_provider_1.WebSqlDataProvider; } });
29
29
  var sql_database_1 = require("./src/data-providers/sql-database"); //V
30
30
  Object.defineProperty(exports, "SqlDatabase", { enumerable: true, get: function () { return sql_database_1.SqlDatabase; } });
31
+ var filter_consumer_bridge_to_sql_request_1 = require("./src/filter/filter-consumer-bridge-to-sql-request");
32
+ Object.defineProperty(exports, "CustomSqlFilterBuilder", { enumerable: true, get: function () { return filter_consumer_bridge_to_sql_request_1.CustomSqlFilterBuilder; } });
31
33
  var json_data_provider_1 = require("./src/data-providers/json-data-provider"); //V
32
34
  Object.defineProperty(exports, "JsonDataProvider", { enumerable: true, get: function () { return json_data_provider_1.JsonDataProvider; } });
33
35
  //export * from './src/data-api'; //reconsider if to make internal
@@ -49,11 +51,13 @@ Object.defineProperty(exports, "OneToMany", { enumerable: true, get: function ()
49
51
  Object.defineProperty(exports, "CompoundIdField", { enumerable: true, get: function () { return column_1.CompoundIdField; } });
50
52
  var filter_interfaces_1 = require("./src/filter/filter-interfaces");
51
53
  Object.defineProperty(exports, "Filter", { enumerable: true, get: function () { return filter_interfaces_1.Filter; } });
52
- var filter_consumer_bridge_to_sql_request_1 = require("./src/filter/filter-consumer-bridge-to-sql-request");
53
- Object.defineProperty(exports, "FilterConsumerBridgeToSqlRequest", { enumerable: true, get: function () { return filter_consumer_bridge_to_sql_request_1.FilterConsumerBridgeToSqlRequest; } });
54
+ var filter_consumer_bridge_to_sql_request_2 = require("./src/filter/filter-consumer-bridge-to-sql-request");
55
+ Object.defineProperty(exports, "FilterConsumerBridgeToSqlRequest", { enumerable: true, get: function () { return filter_consumer_bridge_to_sql_request_2.FilterConsumerBridgeToSqlRequest; } });
54
56
  var urlBuilder_1 = require("./urlBuilder");
55
57
  Object.defineProperty(exports, "UrlBuilder", { enumerable: true, get: function () { return urlBuilder_1.UrlBuilder; } });
56
58
  var validators_1 = require("./src/validators");
57
59
  Object.defineProperty(exports, "Validators", { enumerable: true, get: function () { return validators_1.Validators; } });
58
60
  var valueConverters_1 = require("./src/valueConverters");
59
61
  Object.defineProperty(exports, "ValueConverters", { enumerable: true, get: function () { return valueConverters_1.ValueConverters; } });
62
+ var remult_proxy_1 = require("./src/remult-proxy");
63
+ Object.defineProperty(exports, "remult", { enumerable: true, get: function () { return remult_proxy_1.remult; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.15.3",
3
+ "version": "0.16.0-exp.1",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -60,6 +60,14 @@
60
60
  "./graphql": {
61
61
  "require": "./graphql.js",
62
62
  "import": "./esm/graphql.js"
63
+ },
64
+ "./src/remult3": {
65
+ "require": "./src/remult3/index.js",
66
+ "import": "./esm/src/remult3/index.js"
67
+ },
68
+ "./src/server-action": {
69
+ "require": "./src/server-action.js",
70
+ "import": "./esm/src/server-action.js"
63
71
  }
64
72
  }
65
73
  }
@@ -7,6 +7,8 @@ var data_api_1 = require("../src/data-api");
7
7
  var context_1 = require("../src/context");
8
8
  var remult3_1 = require("../src/remult3");
9
9
  var id_entity_1 = require("../src/id-entity");
10
+ var async_hooks_1 = require("async_hooks");
11
+ var remult_proxy_1 = require("../src/remult-proxy");
10
12
  ;
11
13
  function createRemultServer(options) {
12
14
  var _this = this;
@@ -42,11 +44,24 @@ function createRemultServer(options) {
42
44
  if (options.initApi) {
43
45
  dataProvider = dataProvider.then(function (dp) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
44
46
  var remult;
47
+ var _this = this;
45
48
  return tslib_1.__generator(this, function (_a) {
46
49
  switch (_a.label) {
47
50
  case 0:
48
51
  remult = new context_1.Remult(dp);
49
- return [4 /*yield*/, options.initApi(remult)];
52
+ return [4 /*yield*/, new Promise(function (res) {
53
+ remultObjectStorage.run(remult, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
54
+ return tslib_1.__generator(this, function (_a) {
55
+ switch (_a.label) {
56
+ case 0: return [4 /*yield*/, options.initApi(remult)];
57
+ case 1:
58
+ _a.sent();
59
+ res({});
60
+ return [2 /*return*/];
61
+ }
62
+ });
63
+ }); });
64
+ })];
50
65
  case 1:
51
66
  _a.sent();
52
67
  return [2 /*return*/, dp];
@@ -72,6 +87,8 @@ function createRemultServer(options) {
72
87
  }
73
88
  exports.createRemultServer = createRemultServer;
74
89
  ;
90
+ var remultObjectStorage = new async_hooks_1.AsyncLocalStorage();
91
+ var remultObjectStorageWasSetup = false;
75
92
  var RemultServerImplementation = /** @class */ (function () {
76
93
  function RemultServerImplementation(queue, options, dataProvider) {
77
94
  this.queue = queue;
@@ -81,6 +98,16 @@ var RemultServerImplementation = /** @class */ (function () {
81
98
  this.hasQueue = false;
82
99
  /* internal */
83
100
  this.backendMethodsOpenApi = [];
101
+ if (!remultObjectStorageWasSetup) {
102
+ remultObjectStorageWasSetup = true;
103
+ remult_proxy_1.remult.remultFactory = function () {
104
+ var r = remultObjectStorage.getStore();
105
+ if (r)
106
+ return r;
107
+ else
108
+ throw "remult object was requested outside of a valid context, try running it within initApi or a remult request cycle";
109
+ };
110
+ }
84
111
  }
85
112
  RemultServerImplementation.prototype.handle = function (req, gRes) {
86
113
  if (!this.routeImpl) {
@@ -195,7 +222,8 @@ var RemultServerImplementation = /** @class */ (function () {
195
222
  RemultServerImplementation.prototype.process = function (what) {
196
223
  var _this = this;
197
224
  return function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
198
- var myReq, myRes, remult, _a, _b, user;
225
+ var myReq, myRes, remult, _a, _b;
226
+ var _this = this;
199
227
  return tslib_1.__generator(this, function (_c) {
200
228
  switch (_c.label) {
201
229
  case 0:
@@ -206,30 +234,39 @@ var RemultServerImplementation = /** @class */ (function () {
206
234
  return [4 /*yield*/, this.dataProvider];
207
235
  case 1:
208
236
  _b.apply(_a, [_c.sent()]);
209
- if (!req) return [3 /*break*/, 5];
210
- user = void 0;
211
- if (!this.options.getUser) return [3 /*break*/, 3];
212
- return [4 /*yield*/, this.options.getUser(req)];
213
- case 2:
214
- user = _c.sent();
215
- return [3 /*break*/, 4];
216
- case 3:
217
- user = req['user'];
218
- if (!user)
219
- user = req['auth'];
220
- _c.label = 4;
221
- case 4:
222
- if (user)
223
- remult.setUser(user);
224
- _c.label = 5;
225
- case 5:
226
- if (!this.options.initRequest) return [3 /*break*/, 7];
227
- return [4 /*yield*/, this.options.initRequest(remult, req)];
228
- case 6:
229
- _c.sent();
230
- _c.label = 7;
231
- case 7:
232
- what(remult, myReq, myRes, req);
237
+ remultObjectStorage.run(remult, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
238
+ var user;
239
+ return tslib_1.__generator(this, function (_a) {
240
+ switch (_a.label) {
241
+ case 0:
242
+ if (!req) return [3 /*break*/, 4];
243
+ user = void 0;
244
+ if (!this.options.getUser) return [3 /*break*/, 2];
245
+ return [4 /*yield*/, this.options.getUser(req)];
246
+ case 1:
247
+ user = _a.sent();
248
+ return [3 /*break*/, 3];
249
+ case 2:
250
+ user = req['user'];
251
+ if (!user)
252
+ user = req['auth'];
253
+ _a.label = 3;
254
+ case 3:
255
+ if (user)
256
+ remult.setUser(user);
257
+ _a.label = 4;
258
+ case 4:
259
+ if (!this.options.initRequest) return [3 /*break*/, 6];
260
+ return [4 /*yield*/, this.options.initRequest(remult, req)];
261
+ case 5:
262
+ _a.sent();
263
+ _a.label = 6;
264
+ case 6:
265
+ what(remult, myReq, myRes, req);
266
+ return [2 /*return*/];
267
+ }
268
+ });
269
+ }); });
233
270
  return [2 /*return*/];
234
271
  }
235
272
  });
@@ -292,7 +292,7 @@ function create3Tasks() {
292
292
  switch (_f.label) {
293
293
  case 0:
294
294
  remult = new context_1.Remult(axios_1.default);
295
- server_action_1.Action.provider = new context_1.HttpProviderBridgeToRestDataProviderHttpProvider(axios_1.default);
295
+ context_1.Remult.defaultHttpProvider = new context_1.HttpProviderBridgeToRestDataProviderHttpProvider(axios_1.default);
296
296
  taskRepo = remult.repo(Task);
297
297
  _f.label = 1;
298
298
  case 1:
package/src/context.d.ts CHANGED
@@ -41,8 +41,6 @@ export declare class Remult {
41
41
  get user(): UserInfo;
42
42
  /** Set's the current user info */
43
43
  setUser(info: UserInfo | undefined): Promise<void>;
44
- private _user;
45
- private _userChangeEvent;
46
44
  /** Checks if a user was authenticated */
47
45
  authenticated(): boolean;
48
46
  /** checks if the user has any of the roles specified in the parameters
@@ -59,7 +57,8 @@ export declare class Remult {
59
57
  isAllowedForInstance(instance: any, allowed?: AllowedForInstance<any>): boolean;
60
58
  /** returns a dispatcher object that fires once a user has changed*/
61
59
  get userChange(): EventDispatcher;
62
- private repCache;
60
+ static defaultHttpProvider: RestDataProviderHttpProvider;
61
+ static setDefaultHttpProvider(provider: HttpProvider | typeof fetch): void;
63
62
  /** Creates a new instance of the `remult` object.
64
63
  *
65
64
  * Can receive either an HttpProvider or a DataProvider as a parameter - which will be used to fetch data from.
@@ -81,6 +80,9 @@ export declare class Remult {
81
80
  clearAllCache(): any;
82
81
  /** A helper callback that is called whenever an entity is created. */
83
82
  static entityRefInit?: (ref: EntityRef<any>, row: any) => void;
83
+ readonly state: RemultState;
84
+ }
85
+ export interface RemultState {
84
86
  }
85
87
  export declare const allEntities: ClassType<any>[];
86
88
  export interface ControllerOptions {
package/src/context.js CHANGED
@@ -148,30 +148,20 @@ var Remult = /** @class */ (function () {
148
148
  * If no provider is specified, `fetch` will be used as an http provider
149
149
  */
150
150
  function Remult(provider) {
151
+ /* @internal */
151
152
  this._userChangeEvent = new EventSource();
153
+ /* @internal */
152
154
  this.repCache = new Map();
155
+ this.state = {};
153
156
  if (provider && provider.getEntityDataProvider) {
154
157
  this._dataSource = provider;
155
158
  return;
156
159
  }
157
- var dataProvider;
158
- if (!dataProvider) {
159
- var http = provider;
160
- if (http && http.get && http.put && http.post && http.delete) {
161
- dataProvider = new HttpProviderBridgeToRestDataProviderHttpProvider(http);
162
- }
163
- }
164
- if (!dataProvider) {
165
- if (typeof provider === "function") {
166
- dataProvider = new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch(provider);
167
- }
168
- }
169
- if (!dataProvider) {
170
- dataProvider = new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch();
160
+ var httpDataProvider = buildRestDataProvider(provider);
161
+ if (!httpDataProvider) {
162
+ httpDataProvider = new UseDefaultRestDataProviderHttpProvider();
171
163
  }
172
- this._dataSource = new rest_data_provider_1.RestDataProvider(Remult.apiBaseUrl, dataProvider);
173
- if (!server_action_1.Action.provider)
174
- server_action_1.Action.provider = dataProvider;
164
+ this._dataSource = new rest_data_provider_1.RestDataProvider(null, httpDataProvider);
175
165
  }
176
166
  /**Return's a `Repository` of the specific entity type
177
167
  * @example
@@ -316,6 +306,12 @@ var Remult = /** @class */ (function () {
316
306
  enumerable: false,
317
307
  configurable: true
318
308
  });
309
+ Remult.setDefaultHttpProvider = function (provider) {
310
+ var r = buildRestDataProvider(provider);
311
+ if (!r)
312
+ throw provider + " doesn't patch http provider or fetch interface";
313
+ Remult.defaultHttpProvider = r;
314
+ };
319
315
  /** sets the current data provider */
320
316
  Remult.prototype.setDataProvider = function (dataProvider) {
321
317
  this._dataSource = dataProvider;
@@ -323,6 +319,7 @@ var Remult = /** @class */ (function () {
323
319
  Remult.prototype.clearAllCache = function () {
324
320
  this.repCache.clear();
325
321
  };
322
+ Remult.defaultHttpProvider = new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch();
326
323
  /** The api Base Url to be used in all remult calls. by default it's set to `/api`.
327
324
  *
328
325
  * Set this property in case you want to determine a non relative api url
@@ -333,6 +330,23 @@ var Remult = /** @class */ (function () {
333
330
  return Remult;
334
331
  }());
335
332
  exports.Remult = Remult;
333
+ var UseDefaultRestDataProviderHttpProvider = /** @class */ (function () {
334
+ function UseDefaultRestDataProviderHttpProvider() {
335
+ }
336
+ UseDefaultRestDataProviderHttpProvider.prototype.post = function (url, data) {
337
+ return Remult.defaultHttpProvider.post(url, data);
338
+ };
339
+ UseDefaultRestDataProviderHttpProvider.prototype.delete = function (url) {
340
+ return Remult.defaultHttpProvider.delete(url);
341
+ };
342
+ UseDefaultRestDataProviderHttpProvider.prototype.put = function (url, data) {
343
+ return Remult.defaultHttpProvider.put(url, data);
344
+ };
345
+ UseDefaultRestDataProviderHttpProvider.prototype.get = function (url) {
346
+ return Remult.defaultHttpProvider.get(url);
347
+ };
348
+ return UseDefaultRestDataProviderHttpProvider;
349
+ }());
336
350
  exports.allEntities = [];
337
351
  exports.classHelpers = new Map();
338
352
  var ClassHelper = /** @class */ (function () {
@@ -349,6 +363,21 @@ var MethodHelper = /** @class */ (function () {
349
363
  return MethodHelper;
350
364
  }());
351
365
  exports.MethodHelper = MethodHelper;
366
+ function buildRestDataProvider(provider) {
367
+ var httpDataProvider;
368
+ if (!httpDataProvider) {
369
+ var http = provider;
370
+ if (http && http.get && http.put && http.post && http.delete) {
371
+ httpDataProvider = new HttpProviderBridgeToRestDataProviderHttpProvider(http);
372
+ }
373
+ }
374
+ if (!httpDataProvider) {
375
+ if (typeof provider === "function") {
376
+ httpDataProvider = new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch(provider);
377
+ }
378
+ }
379
+ return httpDataProvider;
380
+ }
352
381
  function setControllerSettings(target, options) {
353
382
  var e_3, _a;
354
383
  var r = target;
@@ -1,6 +1,7 @@
1
1
  import { Sort } from './sort';
2
2
  import { Filter } from './filter/filter-interfaces';
3
3
  import { EntityMetadata, OmitEB } from './remult3';
4
+ import { HttpProvider } from './context';
4
5
  export interface DataProvider {
5
6
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
6
7
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
@@ -19,7 +20,7 @@ export interface EntityDataProviderFindOptions {
19
20
  page?: number;
20
21
  orderBy?: Sort;
21
22
  }
22
- export interface RestDataProviderHttpProvider {
23
+ export interface RestDataProviderHttpProvider extends HttpProvider {
23
24
  post(url: string, data: any): Promise<any>;
24
25
  delete(url: string): Promise<void>;
25
26
  put(url: string, data: any): Promise<any>;
@@ -5,7 +5,7 @@ import { EntityMetadata } from '../remult3';
5
5
  export declare class RestDataProvider implements DataProvider {
6
6
  private url;
7
7
  private http;
8
- constructor(url: string, http: RestDataProviderHttpProvider);
8
+ constructor(url: string | null, http: RestDataProviderHttpProvider);
9
9
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
10
10
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
11
11
  supportsCustomFilter: boolean;
@@ -12,7 +12,10 @@ var RestDataProvider = /** @class */ (function () {
12
12
  this.supportsCustomFilter = true;
13
13
  }
14
14
  RestDataProvider.prototype.getEntityDataProvider = function (entity) {
15
- return new RestEntityDataProvider(this.url + '/' + entity.key, this.http, entity);
15
+ var url = this.url;
16
+ if (url === undefined || url === null)
17
+ url = context_1.Remult.apiBaseUrl;
18
+ return new RestEntityDataProvider(url + '/' + entity.key, this.http, entity);
16
19
  };
17
20
  RestDataProvider.prototype.transaction = function (action) {
18
21
  return tslib_1.__awaiter(this, void 0, void 0, function () {
@@ -0,0 +1 @@
1
+ export declare const remult: RemultProxy;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remult = exports.RemultProxy = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var context_1 = require("./context");
6
+ var defaultRemult = new context_1.Remult();
7
+ /*@internal*/
8
+ var RemultProxy = /** @class */ (function () {
9
+ function RemultProxy() {
10
+ var _this = this;
11
+ /*@internal*/
12
+ this.remultFactory = function () { return defaultRemult; };
13
+ this.repo = function () {
14
+ var _a;
15
+ var args = [];
16
+ for (var _i = 0; _i < arguments.length; _i++) {
17
+ args[_i] = arguments[_i];
18
+ }
19
+ return (_a = _this.remultFactory()).repo.apply(_a, tslib_1.__spread(args));
20
+ };
21
+ }
22
+ Object.defineProperty(RemultProxy.prototype, "state", {
23
+ get: function () {
24
+ return this.instance.state;
25
+ },
26
+ enumerable: false,
27
+ configurable: true
28
+ });
29
+ Object.defineProperty(RemultProxy.prototype, "_user", {
30
+ get: function () {
31
+ return this.instance._user;
32
+ },
33
+ enumerable: false,
34
+ configurable: true
35
+ });
36
+ ;
37
+ Object.defineProperty(RemultProxy.prototype, "_userChangeEvent", {
38
+ get: function () { return this.instance._userChangeEvent; },
39
+ enumerable: false,
40
+ configurable: true
41
+ });
42
+ ;
43
+ Object.defineProperty(RemultProxy.prototype, "_dataSource", {
44
+ get: function () { return this.instance._dataSource; },
45
+ enumerable: false,
46
+ configurable: true
47
+ });
48
+ ;
49
+ Object.defineProperty(RemultProxy.prototype, "repCache", {
50
+ get: function () { return this.instance.repCache; },
51
+ enumerable: false,
52
+ configurable: true
53
+ });
54
+ ;
55
+ RemultProxy.prototype.setUser = function (info) {
56
+ return this.instance.setUser(info);
57
+ };
58
+ RemultProxy.prototype.authenticated = function () {
59
+ return this.instance.authenticated();
60
+ };
61
+ RemultProxy.prototype.isAllowed = function (roles) {
62
+ return this.instance.isAllowed(roles);
63
+ };
64
+ RemultProxy.prototype.isAllowedForInstance = function (instance, allowed) {
65
+ return this.instance.isAllowedForInstance(instance, allowed);
66
+ };
67
+ Object.defineProperty(RemultProxy.prototype, "userChange", {
68
+ get: function () {
69
+ return this.instance.userChange;
70
+ },
71
+ enumerable: false,
72
+ configurable: true
73
+ });
74
+ RemultProxy.prototype.setDataProvider = function (dataProvider) {
75
+ return this.instance.setDataProvider(dataProvider);
76
+ };
77
+ RemultProxy.prototype.clearAllCache = function () {
78
+ return this.instance.clearAllCache();
79
+ };
80
+ Object.defineProperty(RemultProxy.prototype, "instance", {
81
+ get: function () {
82
+ return this.remultFactory();
83
+ },
84
+ enumerable: false,
85
+ configurable: true
86
+ });
87
+ Object.defineProperty(RemultProxy.prototype, "user", {
88
+ get: function () {
89
+ return this.remultFactory().user;
90
+ },
91
+ enumerable: false,
92
+ configurable: true
93
+ });
94
+ return RemultProxy;
95
+ }());
96
+ exports.RemultProxy = RemultProxy;
97
+ exports.remult = new RemultProxy();
@@ -1,7 +1,7 @@
1
1
  import 'reflect-metadata';
2
2
  import { Remult, AllowedForInstance } from './context';
3
3
  import { DataApiRequest, DataApiResponse } from './data-api';
4
- import { DataProvider, RestDataProviderHttpProvider } from './data-interfaces';
4
+ import { DataProvider } from './data-interfaces';
5
5
  interface inArgs {
6
6
  args: any[];
7
7
  }
@@ -14,7 +14,6 @@ export declare abstract class Action<inParam, outParam> {
14
14
  private allowed;
15
15
  constructor(actionUrl: string, queue: boolean, allowed: AllowedForInstance<any>);
16
16
  static apiUrlForJobStatus: string;
17
- static provider: RestDataProviderHttpProvider;
18
17
  run(pIn: inParam): Promise<outParam>;
19
18
  protected abstract execute(info: inParam, req: Remult, res: DataApiResponse): Promise<outParam>;
20
19
  __register(reg: (url: string, queue: boolean, allowed: AllowedForInstance<any>, what: ((data: any, req: Remult, res: DataApiResponse) => void)) => void): void;
@@ -18,7 +18,7 @@ var Action = /** @class */ (function () {
18
18
  var _this = this;
19
19
  return tslib_1.__generator(this, function (_a) {
20
20
  switch (_a.label) {
21
- case 0: return [4 /*yield*/, Action.provider.post(context_1.Remult.apiBaseUrl + '/' + this.actionUrl, pIn)];
21
+ case 0: return [4 /*yield*/, context_1.Remult.defaultHttpProvider.post(context_1.Remult.apiBaseUrl + '/' + this.actionUrl, pIn)];
22
22
  case 1:
23
23
  r = _a.sent();
24
24
  p = r;
@@ -39,7 +39,7 @@ var Action = /** @class */ (function () {
39
39
  case 1:
40
40
  _a.sent();
41
41
  _a.label = 2;
42
- case 2: return [4 /*yield*/, Action.provider.post(context_1.Remult.apiBaseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId })];
42
+ case 2: return [4 /*yield*/, context_1.Remult.defaultHttpProvider.post(context_1.Remult.apiBaseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId })];
43
43
  case 3:
44
44
  runningJob_1 = _a.sent();
45
45
  if (runningJob_1.progress) {
@@ -65,7 +65,7 @@ exports.testAsIfOnBackend = testAsIfOnBackend;
65
65
  exports.ActionTestConfig = {
66
66
  db: new in_memory_database_1.InMemoryDataProvider()
67
67
  };
68
- server_action_1.Action.provider = {
68
+ context_1.Remult.defaultHttpProvider = {
69
69
  delete: undefined,
70
70
  get: undefined,
71
71
  post: function (urlreq, data) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {