remult 0.18.1-exp.34 → 0.18.1-exp.35

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 (39) hide show
  1. package/esm/live-query/data-provider-live-query-storage.d.ts +3 -4
  2. package/esm/live-query/data-provider-live-query-storage.js +2 -3
  3. package/esm/postgres/postgres-data-provider.d.ts +1 -1
  4. package/esm/postgres/postgres-data-provider.js +3 -3
  5. package/esm/postgres/schema-builder.d.ts +1 -1
  6. package/esm/postgres/schema-builder.js +1 -9
  7. package/esm/remult-knex/index.d.ts +2 -2
  8. package/esm/remult-knex/index.js +4 -11
  9. package/esm/server/expressBridge.js +15 -3
  10. package/esm/server/index.d.ts +1 -0
  11. package/esm/server/index.js +1 -0
  12. package/esm/src/data-interfaces.d.ts +3 -4
  13. package/esm/src/data-providers/sql-database.d.ts +1 -1
  14. package/esm/src/data-providers/sql-database.js +2 -2
  15. package/esm/src/shared-tests/db-tests-setup.d.ts +12 -5
  16. package/esm/src/shared-tests/db-tests-setup.js +13 -4
  17. package/esm/src/shared-tests/db-tests.db-tests.js +4 -2
  18. package/esm/src/sql-command.d.ts +1 -1
  19. package/esm/src/tests/frontend-database-tests-setup.spec.js +2 -2
  20. package/live-query/data-provider-live-query-storage.d.ts +3 -4
  21. package/live-query/data-provider-live-query-storage.js +2 -2
  22. package/package.json +1 -1
  23. package/postgres/postgres-data-provider.d.ts +1 -1
  24. package/postgres/postgres-data-provider.js +3 -3
  25. package/postgres/schema-builder.d.ts +1 -1
  26. package/postgres/schema-builder.js +24 -34
  27. package/remult-knex/index.d.ts +2 -2
  28. package/remult-knex/index.js +27 -37
  29. package/server/expressBridge.js +21 -8
  30. package/server/index.d.ts +1 -0
  31. package/server/index.js +3 -1
  32. package/src/data-interfaces.d.ts +3 -4
  33. package/src/data-providers/sql-database.d.ts +1 -1
  34. package/src/data-providers/sql-database.js +2 -2
  35. package/src/shared-tests/db-tests-setup.d.ts +12 -5
  36. package/src/shared-tests/db-tests-setup.js +15 -5
  37. package/src/shared-tests/db-tests.db-tests.js +3 -1
  38. package/src/sql-command.d.ts +1 -1
  39. package/src/tests/frontend-database-tests-setup.spec.js +1 -1
@@ -1,12 +1,11 @@
1
- import { Remult } from "../src/context";
2
- import { CanEnsureSchema, DataProvider } from "../src/data-interfaces";
1
+ import { Storage, DataProvider } from "../src/data-interfaces";
3
2
  import { LiveQueryStorage, StoredQuery } from "../src/live-query/SubscriptionServer";
4
3
  import { EntityBase, Repository } from "../src/remult3";
5
- export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, CanEnsureSchema {
4
+ export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, Storage {
6
5
  repo: Promise<Repository<LiveQueryStorageEntity>>;
7
6
  dataProvider: Promise<DataProvider>;
8
7
  constructor(dataProvider: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>));
9
- ensureSchema(remult: Remult): Promise<void>;
8
+ ensureSchema(): Promise<void>;
10
9
  add({ id, entityKey, data }: StoredQuery): Promise<void>;
11
10
  remove(queryId: string): Promise<void>;
12
11
  forEach(entityKey: string, callback: (args: {
@@ -7,12 +7,11 @@ export class DataProviderLiveQueryStorage {
7
7
  this.dataProvider = initDataProvider(dataProvider);
8
8
  this.repo = this.dataProvider.then(dp => new Remult(dp).repo(LiveQueryStorageEntity));
9
9
  }
10
- async ensureSchema(remult) {
11
- await (await this.dataProvider).ensureSchema([(await this.repo).metadata], "Live query storage");
10
+ async ensureSchema() {
11
+ await (await this.dataProvider).ensureSchema([(await this.repo).metadata]);
12
12
  }
13
13
  async add({ id, entityKey, data }) {
14
14
  await this.repo.then(async (repo) => {
15
- //TODO - talk to yoni about how this fails with non entity ref - since repo save here makes a wrong decision, since an item returns
16
15
  const q = await repo.findId(id, { createIfNotFound: true });
17
16
  await q.assign({ entityKey, data }).save();
18
17
  });
@@ -16,7 +16,7 @@ export declare class PostgresDataProvider implements SqlImplementation {
16
16
  getLimitSqlSyntax(limit: number, offset: number): string;
17
17
  createCommand(): SqlCommand;
18
18
  constructor(pool: PostgresPool);
19
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
19
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
20
20
  transaction(action: (dataProvider: SqlImplementation) => Promise<void>): Promise<void>;
21
21
  }
22
22
  export interface PostgresCommandSource {
@@ -22,10 +22,10 @@ export class PostgresDataProvider {
22
22
  createCommand() {
23
23
  return new PostgresBridgeToSQLCommand(this.pool);
24
24
  }
25
- async ensureSchema(entities, caption) {
25
+ async ensureSchema(entities) {
26
26
  var db = new SqlDatabase(this);
27
27
  var sb = new PostgresSchemaBuilder(db);
28
- await sb.ensureSchema(entities, caption);
28
+ await sb.ensureSchema(entities);
29
29
  }
30
30
  async transaction(action) {
31
31
  let client = await this.pool.connect();
@@ -104,6 +104,6 @@ export async function preparePostgresQueueStorage(sql) {
104
104
  c.dataProvider = (sql);
105
105
  let JobsInQueueEntity = (await import('../server/expressBridge')).JobsInQueueEntity;
106
106
  let e = c.repo(JobsInQueueEntity);
107
- await sql.ensureSchema([e.metadata], "Queue storage");
107
+ await sql.ensureSchema([e.metadata]);
108
108
  return new (await import('../server/expressBridge')).EntityQueueStorage(c.repo(JobsInQueueEntity));
109
109
  }
@@ -7,7 +7,7 @@ export declare function verifyStructureOfAllEntities(db: SqlDatabase, remult: Re
7
7
  export declare class PostgresSchemaBuilder {
8
8
  private pool;
9
9
  verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
10
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
10
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
11
11
  createIfNotExist(entity: EntityMetadata): Promise<void>;
12
12
  addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: ((e: T) => FieldMetadata)): Promise<void>;
13
13
  verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
@@ -59,13 +59,7 @@ export class PostgresSchemaBuilder {
59
59
  }
60
60
  await this.ensureSchema(entities);
61
61
  }
62
- async ensureSchema(entities, caption) {
63
- //TODO - discuss this console log
64
- let desc = "Ensure postgres schema";
65
- if (caption)
66
- desc += " - " + caption;
67
- if (PostgresSchemaBuilder.logToConsole)
68
- console.time(desc);
62
+ async ensureSchema(entities) {
69
63
  for (const entity of entities) {
70
64
  let e = await dbNamesOf(entity);
71
65
  try {
@@ -80,8 +74,6 @@ export class PostgresSchemaBuilder {
80
74
  console.error("failed verify structure of " + e.$entityName + " ", err);
81
75
  }
82
76
  }
83
- if (PostgresSchemaBuilder.logToConsole)
84
- console.timeEnd(desc);
85
77
  }
86
78
  async createIfNotExist(entity) {
87
79
  var c = this.pool.createCommand();
@@ -12,13 +12,13 @@ export declare class KnexDataProvider implements DataProvider {
12
12
  static rawFilter(build: CustomKnexFilterBuilderFunction): EntityFilter<any>;
13
13
  static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<(knex: any) => void>;
14
14
  supportsRawFilter?: boolean;
15
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
15
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
16
16
  }
17
17
  export declare type CustomKnexFilterBuilderFunction = () => Promise<(builder: Knex.QueryBuilder) => void>;
18
18
  export declare class KnexSchemaBuilder {
19
19
  private knex;
20
20
  verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
21
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
21
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
22
22
  createIfNotExist(entity: EntityMetadata): Promise<void>;
23
23
  addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: ((e: T) => FieldMetadata)): Promise<void>;
24
24
  verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
@@ -45,9 +45,9 @@ export class KnexDataProvider {
45
45
  let r = await b.resolveWhere();
46
46
  return knex => r.forEach(y => y(knex));
47
47
  }
48
- async ensureSchema(entities, caption) {
48
+ async ensureSchema(entities) {
49
49
  var sb = new KnexSchemaBuilder(this.knex);
50
- await sb.ensureSchema(entities, caption);
50
+ await sb.ensureSchema(entities);
51
51
  }
52
52
  }
53
53
  class KnexEntityDataProvider {
@@ -286,12 +286,7 @@ export class KnexSchemaBuilder {
286
286
  const entities = allEntities.map(x => remult.repo(x).metadata);
287
287
  this.ensureSchema(entities);
288
288
  }
289
- async ensureSchema(entities, caption) {
290
- let desc = "ensure knex schema";
291
- if (caption)
292
- desc += " - " + caption;
293
- if (KnexSchemaBuilder.logToConsole)
294
- console.time(desc);
289
+ async ensureSchema(entities) {
295
290
  for (const entity of entities) {
296
291
  let e = await dbNamesOf(entity);
297
292
  try {
@@ -303,11 +298,9 @@ export class KnexSchemaBuilder {
303
298
  }
304
299
  }
305
300
  catch (err) {
306
- console.error("failed verify structure of " + e.$entityName + " ", err);
301
+ console.error("failed ensure schema of " + e.$entityName + " ", err);
307
302
  }
308
303
  }
309
- if (KnexSchemaBuilder.logToConsole)
310
- console.timeEnd(desc);
311
304
  }
312
305
  async createIfNotExist(entity) {
313
306
  const e = await dbNamesOf(entity);
@@ -35,14 +35,26 @@ export function createRemultServerCore(options) {
35
35
  await new Promise((res) => {
36
36
  RemultAsyncLocalStorage.instance.run(remult, async () => {
37
37
  if (options.ensureSchema) {
38
+ let started = false;
39
+ const startConsoleLog = () => {
40
+ if (started)
41
+ return;
42
+ started = true;
43
+ console.time("Ensure Schema");
44
+ };
38
45
  if (dp.ensureSchema) {
46
+ startConsoleLog();
39
47
  const entitiesMetadata = options.entities.map(e => remult.repo(e).metadata);
40
48
  await dp.ensureSchema(entitiesMetadata);
41
- for (const item of [options.liveQueryStorage, options.queueStorage]) {
42
- if (item?.ensureSchema)
43
- await item.ensureSchema(remult);
49
+ }
50
+ for (const item of [options.liveQueryStorage, options.queueStorage]) {
51
+ if (item?.ensureSchema) {
52
+ startConsoleLog();
53
+ await item.ensureSchema();
44
54
  }
45
55
  }
56
+ if (started)
57
+ console.timeEnd("Ensure Schema");
46
58
  }
47
59
  if (options.initApi)
48
60
  await options.initApi(remult);
@@ -1,4 +1,5 @@
1
1
  import { GenericRequest, RemultServer, RemultServerOptions } from './expressBridge';
2
2
  export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer, InitRequestOptions } from './expressBridge';
3
3
  export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
4
+ export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
4
5
  export declare function createRemultServer<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
@@ -1,6 +1,7 @@
1
1
  import { createRemultServerCore, } from './expressBridge';
2
2
  import { initAsyncHooks } from './initAsyncHooks';
3
3
  export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
4
+ export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
4
5
  export function createRemultServer(options) {
5
6
  initAsyncHooks();
6
7
  return createRemultServerCore(options);
@@ -1,15 +1,14 @@
1
1
  import { Sort } from './sort';
2
2
  import { Filter } from './filter/filter-interfaces';
3
3
  import { EntityMetadata, OmitEB } from './remult3';
4
- import type { Remult } from './context';
5
4
  export interface DataProvider {
6
5
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
7
6
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
8
7
  supportsRawFilter?: boolean;
9
- ensureSchema?(entities: EntityMetadata[], caption?: string): Promise<void>;
8
+ ensureSchema?(entities: EntityMetadata[]): Promise<void>;
10
9
  }
11
- export interface CanEnsureSchema {
12
- ensureSchema(remult: Remult): Promise<void>;
10
+ export interface Storage {
11
+ ensureSchema(): Promise<void>;
13
12
  }
14
13
  export interface EntityDataProvider {
15
14
  count(where: Filter): Promise<number>;
@@ -8,7 +8,7 @@ export declare class SqlDatabase implements DataProvider {
8
8
  static getDb(remult?: Remult): SqlDatabase;
9
9
  createCommand(): SqlCommand;
10
10
  execute(sql: string): Promise<SqlResult>;
11
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
11
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
12
12
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
13
13
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
14
14
  static rawFilter(build: CustomSqlFilterBuilderFunction): EntityFilter<any>;
@@ -26,9 +26,9 @@ export class SqlDatabase {
26
26
  _getSourceSql() {
27
27
  return this.sql;
28
28
  }
29
- async ensureSchema(entities, caption) {
29
+ async ensureSchema(entities) {
30
30
  if (this.sql.ensureSchema)
31
- await this.sql.ensureSchema(entities, caption);
31
+ await this.sql.ensureSchema(entities);
32
32
  }
33
33
  getEntityDataProvider(entity) {
34
34
  return new ActualSQLServerDataProvider(entity, this, async (dbName) => {
@@ -5,15 +5,22 @@ import { Repository } from "../remult3";
5
5
  import { CategoriesForTesting } from "../tests/remult-3-entities";
6
6
  import { Status } from "../tests/testModel/models";
7
7
  export declare function itWithFocus(key: string, what: () => Promise<void>, focus?: boolean): void;
8
- export declare function testAll(key: string, what: dbTestWhatSignature, focus?: boolean): void;
9
- export declare function addDatabaseToTest(tester: dbTestMethodSignature): dbTestMethodSignature;
8
+ export declare function testAll(key: string, what: dbTestWhatSignature, focus?: boolean, options?: {
9
+ exclude?: string[];
10
+ }): void;
11
+ export declare function addDatabaseToTest(tester: dbTestMethodSignature, key?: string): dbTestMethodSignature;
10
12
  export declare function testInMemory(key: string, what: dbTestWhatSignature, focus?: boolean): void;
11
- export declare type dbTestWhatSignature = (db: {
13
+ export declare const TestDbs: {
14
+ restDataProvider: string;
15
+ };
16
+ export declare type dbTestWhatSignature = ((db: {
12
17
  db: DataProvider;
13
18
  remult: Remult;
14
19
  createEntity<entityType>(entity: ClassType<entityType>): Promise<Repository<entityType>>;
15
- }) => Promise<void>;
16
- export declare type dbTestMethodSignature = (key: string, what: dbTestWhatSignature, focus: boolean) => void;
20
+ }) => Promise<void>);
21
+ export declare type dbTestMethodSignature = ((key: string, what: dbTestWhatSignature, focus: boolean) => void) & {
22
+ key?: string;
23
+ };
17
24
  export declare function testAllDbs<T extends CategoriesForTesting>(key: string, doTest: (helper: {
18
25
  remult: Remult;
19
26
  createData: (doInsert?: (insert: (id: number, name: string, description?: string, status?: Status) => Promise<void>) => Promise<void>, entity?: {
@@ -8,17 +8,23 @@ export function itWithFocus(key, what, focus = false) {
8
8
  else
9
9
  it(key, what);
10
10
  }
11
- export function testAll(key, what, focus = false) {
11
+ export function testAll(key, what, focus = false, options) {
12
+ function runTest(m) {
13
+ return !options?.exclude?.includes(m.key);
14
+ }
12
15
  for (const test of databasesTesters) {
13
- test(key, what, focus);
16
+ if (runTest(test))
17
+ test(key, what, focus);
14
18
  }
15
19
  loadedTests.push(x => {
16
- x(key, what, focus);
20
+ if (runTest(x))
21
+ x(key, what, focus);
17
22
  });
18
23
  }
19
24
  const databasesTesters = [];
20
25
  const loadedTests = [];
21
- export function addDatabaseToTest(tester) {
26
+ export function addDatabaseToTest(tester, key) {
27
+ tester.key = key;
22
28
  for (const test of loadedTests) {
23
29
  test(tester);
24
30
  }
@@ -32,6 +38,9 @@ export function testInMemory(key, what, focus = false) {
32
38
  await what({ db, remult, createEntity: async (x) => remult.repo(x) });
33
39
  }, focus);
34
40
  }
41
+ export const TestDbs = {
42
+ restDataProvider: "restDataProvider"
43
+ };
35
44
  databasesTesters.push(testInMemory);
36
45
  export async function testAllDbs(key, doTest, focus = false) {
37
46
  testAll(key, async ({ remult, createEntity }) => {
@@ -7,7 +7,7 @@ import { h } from "../tests/h";
7
7
  import { Categories as newCategories } from "../tests/remult-3-entities";
8
8
  import { tasks } from "../tests/tasks";
9
9
  import { TestDataApiResponse } from "../tests/TestDataApiResponse";
10
- import { testAll, testAllDbs } from "./db-tests-setup";
10
+ import { testAll, testAllDbs, TestDbs } from "./db-tests-setup";
11
11
  import { entityWithValidations, testConfiguration } from "./entityWithValidations";
12
12
  import { Remult } from "../context";
13
13
  import { dWithPrefilter } from "../tests/dWithPrefilter";
@@ -772,11 +772,13 @@ testAll("test date", async ({ createEntity }) => {
772
772
  testAll("test live query storage", async ({ db, remult }) => {
773
773
  var x = new DataProviderLiveQueryStorage(db);
774
774
  if (db.ensureSchema)
775
- await x.ensureSchema(remult);
775
+ await x.ensureSchema();
776
776
  const id = uuid();
777
777
  await x.add({ id, entityKey: 'x', data: "noam" });
778
778
  await x.forEach("x", async (args) => {
779
779
  expect(args.query.data).toBe("noam");
780
780
  });
781
781
  expect((await x.keepAliveAndReturnUnknownQueryIds([id]))).toEqual([]);
782
+ }, false, {
783
+ exclude: [TestDbs.restDataProvider]
782
784
  });
@@ -4,7 +4,7 @@ export interface SqlImplementation {
4
4
  createCommand(): SqlCommand;
5
5
  transaction(action: (sql: SqlImplementation) => Promise<void>): Promise<void>;
6
6
  entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
7
- ensureSchema?(entities: EntityMetadata[], caption?: string): Promise<void>;
7
+ ensureSchema?(entities: EntityMetadata[]): Promise<void>;
8
8
  }
9
9
  export interface SqlCommand extends SqlCommandWithParameters {
10
10
  execute(sql: string): Promise<SqlResult>;
@@ -1,4 +1,4 @@
1
- import { addDatabaseToTest, itWithFocus } from "../shared-tests/db-tests-setup";
1
+ import { addDatabaseToTest, itWithFocus, TestDbs } from "../shared-tests/db-tests-setup";
2
2
  import { InMemoryDataProvider, remult } from "../..";
3
3
  import { Remult } from "../context";
4
4
  import { SqlDatabase } from "../data-providers/sql-database";
@@ -33,5 +33,5 @@ export function testRest(key, what, focus = false) {
33
33
  await what({ db, remult, createEntity: async (x) => remult.repo(x) });
34
34
  }, focus);
35
35
  }
36
- addDatabaseToTest(testRest);
36
+ addDatabaseToTest(testRest, TestDbs.restDataProvider);
37
37
  import '../shared-tests/';
@@ -1,12 +1,11 @@
1
- import { Remult } from "../src/context";
2
- import { CanEnsureSchema, DataProvider } from "../src/data-interfaces";
1
+ import { Storage, DataProvider } from "../src/data-interfaces";
3
2
  import { LiveQueryStorage, StoredQuery } from "../src/live-query/SubscriptionServer";
4
3
  import { EntityBase, Repository } from "../src/remult3";
5
- export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, CanEnsureSchema {
4
+ export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, Storage {
6
5
  repo: Promise<Repository<LiveQueryStorageEntity>>;
7
6
  dataProvider: Promise<DataProvider>;
8
7
  constructor(dataProvider: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>));
9
- ensureSchema(remult: Remult): Promise<void>;
8
+ ensureSchema(): Promise<void>;
10
9
  add({ id, entityKey, data }: StoredQuery): Promise<void>;
11
10
  remove(queryId: string): Promise<void>;
12
11
  forEach(entityKey: string, callback: (args: {
@@ -12,7 +12,7 @@ var DataProviderLiveQueryStorage = /** @class */ (function () {
12
12
  return new context_1.Remult(dp).repo(LiveQueryStorageEntity);
13
13
  });
14
14
  }
15
- DataProviderLiveQueryStorage.prototype.ensureSchema = function (remult) {
15
+ DataProviderLiveQueryStorage.prototype.ensureSchema = function () {
16
16
  return tslib_1.__awaiter(this, void 0, void 0, function () {
17
17
  var _a, _b;
18
18
  return tslib_1.__generator(this, function (_c) {
@@ -21,7 +21,7 @@ var DataProviderLiveQueryStorage = /** @class */ (function () {
21
21
  case 1:
22
22
  _b = (_a = (_c.sent())).ensureSchema;
23
23
  return [4 /*yield*/, this.repo];
24
- case 2: return [4 /*yield*/, _b.apply(_a, [[(_c.sent()).metadata], "Live query storage"])];
24
+ case 2: return [4 /*yield*/, _b.apply(_a, [[(_c.sent()).metadata]])];
25
25
  case 3:
26
26
  _c.sent();
27
27
  return [2 /*return*/];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.18.1-exp.34",
3
+ "version": "0.18.1-exp.35",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -16,7 +16,7 @@ export declare class PostgresDataProvider implements SqlImplementation {
16
16
  getLimitSqlSyntax(limit: number, offset: number): string;
17
17
  createCommand(): SqlCommand;
18
18
  constructor(pool: PostgresPool);
19
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
19
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
20
20
  transaction(action: (dataProvider: SqlImplementation) => Promise<void>): Promise<void>;
21
21
  }
22
22
  export interface PostgresCommandSource {
@@ -31,7 +31,7 @@ var PostgresDataProvider = /** @class */ (function () {
31
31
  PostgresDataProvider.prototype.createCommand = function () {
32
32
  return new PostgresBridgeToSQLCommand(this.pool);
33
33
  };
34
- PostgresDataProvider.prototype.ensureSchema = function (entities, caption) {
34
+ PostgresDataProvider.prototype.ensureSchema = function (entities) {
35
35
  return tslib_1.__awaiter(this, void 0, void 0, function () {
36
36
  var db, sb;
37
37
  return tslib_1.__generator(this, function (_a) {
@@ -39,7 +39,7 @@ var PostgresDataProvider = /** @class */ (function () {
39
39
  case 0:
40
40
  db = new sql_database_1.SqlDatabase(this);
41
41
  sb = new schema_builder_1.PostgresSchemaBuilder(db);
42
- return [4 /*yield*/, sb.ensureSchema(entities, caption)];
42
+ return [4 /*yield*/, sb.ensureSchema(entities)];
43
43
  case 1:
44
44
  _a.sent();
45
45
  return [2 /*return*/];
@@ -162,7 +162,7 @@ function preparePostgresQueueStorage(sql) {
162
162
  case 1:
163
163
  JobsInQueueEntity = (_a.sent()).JobsInQueueEntity;
164
164
  e = c.repo(JobsInQueueEntity);
165
- return [4 /*yield*/, sql.ensureSchema([e.metadata], "Queue storage")];
165
+ return [4 /*yield*/, sql.ensureSchema([e.metadata])];
166
166
  case 2:
167
167
  _a.sent();
168
168
  return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/expressBridge')); })];
@@ -7,7 +7,7 @@ export declare function verifyStructureOfAllEntities(db: SqlDatabase, remult: Re
7
7
  export declare class PostgresSchemaBuilder {
8
8
  private pool;
9
9
  verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
10
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
10
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
11
11
  createIfNotExist(entity: EntityMetadata): Promise<void>;
12
12
  addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: ((e: T) => FieldMetadata)): Promise<void>;
13
13
  verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
@@ -107,64 +107,54 @@ var PostgresSchemaBuilder = /** @class */ (function () {
107
107
  });
108
108
  });
109
109
  };
110
- PostgresSchemaBuilder.prototype.ensureSchema = function (entities, caption) {
110
+ PostgresSchemaBuilder.prototype.ensureSchema = function (entities) {
111
111
  return tslib_1.__awaiter(this, void 0, void 0, function () {
112
- var desc, entities_1, entities_1_1, entity, e, err_1, e_2_1;
112
+ var entities_1, entities_1_1, entity, e, err_1, e_2_1;
113
113
  var e_2, _a;
114
114
  return tslib_1.__generator(this, function (_b) {
115
115
  switch (_b.label) {
116
116
  case 0:
117
- desc = "Ensure postgres schema";
118
- if (caption)
119
- desc += " - " + caption;
120
- if (PostgresSchemaBuilder.logToConsole)
121
- console.time(desc);
117
+ _b.trys.push([0, 10, 11, 12]);
118
+ entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
122
119
  _b.label = 1;
123
120
  case 1:
124
- _b.trys.push([1, 11, 12, 13]);
125
- entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
126
- _b.label = 2;
127
- case 2:
128
- if (!!entities_1_1.done) return [3 /*break*/, 10];
121
+ if (!!entities_1_1.done) return [3 /*break*/, 9];
129
122
  entity = entities_1_1.value;
130
123
  return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
131
- case 3:
124
+ case 2:
132
125
  e = _b.sent();
133
- _b.label = 4;
134
- case 4:
135
- _b.trys.push([4, 8, , 9]);
136
- if (!!entity.options.sqlExpression) return [3 /*break*/, 7];
137
- if (!(e.$entityName.toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 7];
126
+ _b.label = 3;
127
+ case 3:
128
+ _b.trys.push([3, 7, , 8]);
129
+ if (!!entity.options.sqlExpression) return [3 /*break*/, 6];
130
+ if (!(e.$entityName.toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 6];
138
131
  return [4 /*yield*/, this.createIfNotExist(entity)];
139
- case 5:
132
+ case 4:
140
133
  _b.sent();
141
134
  return [4 /*yield*/, this.verifyAllColumns(entity)];
142
- case 6:
135
+ case 5:
143
136
  _b.sent();
144
- _b.label = 7;
145
- case 7: return [3 /*break*/, 9];
146
- case 8:
137
+ _b.label = 6;
138
+ case 6: return [3 /*break*/, 8];
139
+ case 7:
147
140
  err_1 = _b.sent();
148
141
  console.error("failed verify structure of " + e.$entityName + " ", err_1);
149
- return [3 /*break*/, 9];
150
- case 9:
142
+ return [3 /*break*/, 8];
143
+ case 8:
151
144
  entities_1_1 = entities_1.next();
152
- return [3 /*break*/, 2];
153
- case 10: return [3 /*break*/, 13];
154
- case 11:
145
+ return [3 /*break*/, 1];
146
+ case 9: return [3 /*break*/, 12];
147
+ case 10:
155
148
  e_2_1 = _b.sent();
156
149
  e_2 = { error: e_2_1 };
157
- return [3 /*break*/, 13];
158
- case 12:
150
+ return [3 /*break*/, 12];
151
+ case 11:
159
152
  try {
160
153
  if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
161
154
  }
162
155
  finally { if (e_2) throw e_2.error; }
163
156
  return [7 /*endfinally*/];
164
- case 13:
165
- if (PostgresSchemaBuilder.logToConsole)
166
- console.timeEnd(desc);
167
- return [2 /*return*/];
157
+ case 12: return [2 /*return*/];
168
158
  }
169
159
  });
170
160
  });
@@ -12,13 +12,13 @@ export declare class KnexDataProvider implements DataProvider {
12
12
  static rawFilter(build: CustomKnexFilterBuilderFunction): EntityFilter<any>;
13
13
  static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<(knex: any) => void>;
14
14
  supportsRawFilter?: boolean;
15
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
15
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
16
16
  }
17
17
  export declare type CustomKnexFilterBuilderFunction = () => Promise<(builder: Knex.QueryBuilder) => void>;
18
18
  export declare class KnexSchemaBuilder {
19
19
  private knex;
20
20
  verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
21
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
21
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
22
22
  createIfNotExist(entity: EntityMetadata): Promise<void>;
23
23
  addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: ((e: T) => FieldMetadata)): Promise<void>;
24
24
  verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
@@ -84,14 +84,14 @@ var KnexDataProvider = /** @class */ (function () {
84
84
  });
85
85
  });
86
86
  };
87
- KnexDataProvider.prototype.ensureSchema = function (entities, caption) {
87
+ KnexDataProvider.prototype.ensureSchema = function (entities) {
88
88
  return tslib_1.__awaiter(this, void 0, void 0, function () {
89
89
  var sb;
90
90
  return tslib_1.__generator(this, function (_a) {
91
91
  switch (_a.label) {
92
92
  case 0:
93
93
  sb = new KnexSchemaBuilder(this.knex);
94
- return [4 /*yield*/, sb.ensureSchema(entities, caption)];
94
+ return [4 /*yield*/, sb.ensureSchema(entities)];
95
95
  case 1:
96
96
  _a.sent();
97
97
  return [2 /*return*/];
@@ -582,64 +582,54 @@ var KnexSchemaBuilder = /** @class */ (function () {
582
582
  });
583
583
  });
584
584
  };
585
- KnexSchemaBuilder.prototype.ensureSchema = function (entities, caption) {
585
+ KnexSchemaBuilder.prototype.ensureSchema = function (entities) {
586
586
  return tslib_1.__awaiter(this, void 0, void 0, function () {
587
- var desc, entities_1, entities_1_1, entity, e, err_2, e_6_1;
587
+ var entities_1, entities_1_1, entity, e, err_2, e_6_1;
588
588
  var e_6, _a;
589
589
  return tslib_1.__generator(this, function (_b) {
590
590
  switch (_b.label) {
591
591
  case 0:
592
- desc = "ensure knex schema";
593
- if (caption)
594
- desc += " - " + caption;
595
- if (KnexSchemaBuilder.logToConsole)
596
- console.time(desc);
592
+ _b.trys.push([0, 10, 11, 12]);
593
+ entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
597
594
  _b.label = 1;
598
595
  case 1:
599
- _b.trys.push([1, 11, 12, 13]);
600
- entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
601
- _b.label = 2;
602
- case 2:
603
- if (!!entities_1_1.done) return [3 /*break*/, 10];
596
+ if (!!entities_1_1.done) return [3 /*break*/, 9];
604
597
  entity = entities_1_1.value;
605
598
  return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
606
- case 3:
599
+ case 2:
607
600
  e = _b.sent();
608
- _b.label = 4;
609
- case 4:
610
- _b.trys.push([4, 8, , 9]);
611
- if (!!entity.options.sqlExpression) return [3 /*break*/, 7];
612
- if (!(e.$entityName.toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 7];
601
+ _b.label = 3;
602
+ case 3:
603
+ _b.trys.push([3, 7, , 8]);
604
+ if (!!entity.options.sqlExpression) return [3 /*break*/, 6];
605
+ if (!(e.$entityName.toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 6];
613
606
  return [4 /*yield*/, this.createIfNotExist(entity)];
614
- case 5:
607
+ case 4:
615
608
  _b.sent();
616
609
  return [4 /*yield*/, this.verifyAllColumns(entity)];
617
- case 6:
610
+ case 5:
618
611
  _b.sent();
619
- _b.label = 7;
620
- case 7: return [3 /*break*/, 9];
621
- case 8:
612
+ _b.label = 6;
613
+ case 6: return [3 /*break*/, 8];
614
+ case 7:
622
615
  err_2 = _b.sent();
623
- console.error("failed verify structure of " + e.$entityName + " ", err_2);
624
- return [3 /*break*/, 9];
625
- case 9:
616
+ console.error("failed ensure schema of " + e.$entityName + " ", err_2);
617
+ return [3 /*break*/, 8];
618
+ case 8:
626
619
  entities_1_1 = entities_1.next();
627
- return [3 /*break*/, 2];
628
- case 10: return [3 /*break*/, 13];
629
- case 11:
620
+ return [3 /*break*/, 1];
621
+ case 9: return [3 /*break*/, 12];
622
+ case 10:
630
623
  e_6_1 = _b.sent();
631
624
  e_6 = { error: e_6_1 };
632
- return [3 /*break*/, 13];
633
- case 12:
625
+ return [3 /*break*/, 12];
626
+ case 11:
634
627
  try {
635
628
  if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
636
629
  }
637
630
  finally { if (e_6) throw e_6.error; }
638
631
  return [7 /*endfinally*/];
639
- case 13:
640
- if (KnexSchemaBuilder.logToConsole)
641
- console.timeEnd(desc);
642
- return [2 /*return*/];
632
+ case 12: return [2 /*return*/];
643
633
  }
644
634
  });
645
635
  });
@@ -43,13 +43,21 @@ function createRemultServerCore(options) {
43
43
  remult = new context_1.Remult(dp);
44
44
  return [4 /*yield*/, new Promise(function (res) {
45
45
  RemultAsyncLocalStorage.instance.run(remult, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
46
- var entitiesMetadata, _a, _b, item, e_1_1;
46
+ var started_1, startConsoleLog, entitiesMetadata, _a, _b, item, e_1_1;
47
47
  var e_1, _c;
48
48
  return tslib_1.__generator(this, function (_d) {
49
49
  switch (_d.label) {
50
50
  case 0:
51
- if (!options.ensureSchema) return [3 /*break*/, 9];
52
- if (!dp.ensureSchema) return [3 /*break*/, 9];
51
+ if (!options.ensureSchema) return [3 /*break*/, 10];
52
+ started_1 = false;
53
+ startConsoleLog = function () {
54
+ if (started_1)
55
+ return;
56
+ started_1 = true;
57
+ console.time("Ensure Schema");
58
+ };
59
+ if (!dp.ensureSchema) return [3 /*break*/, 2];
60
+ startConsoleLog();
53
61
  entitiesMetadata = options.entities.map(function (e) { return remult.repo(e).metadata; });
54
62
  return [4 /*yield*/, dp.ensureSchema(entitiesMetadata)];
55
63
  case 1:
@@ -63,7 +71,8 @@ function createRemultServerCore(options) {
63
71
  if (!!_b.done) return [3 /*break*/, 6];
64
72
  item = _b.value;
65
73
  if (!(item === null || item === void 0 ? void 0 : item.ensureSchema)) return [3 /*break*/, 5];
66
- return [4 /*yield*/, item.ensureSchema(remult)];
74
+ startConsoleLog();
75
+ return [4 /*yield*/, item.ensureSchema()];
67
76
  case 4:
68
77
  _d.sent();
69
78
  _d.label = 5;
@@ -82,12 +91,16 @@ function createRemultServerCore(options) {
82
91
  finally { if (e_1) throw e_1.error; }
83
92
  return [7 /*endfinally*/];
84
93
  case 9:
85
- if (!options.initApi) return [3 /*break*/, 11];
86
- return [4 /*yield*/, options.initApi(remult)];
94
+ if (started_1)
95
+ console.timeEnd("Ensure Schema");
96
+ _d.label = 10;
87
97
  case 10:
88
- _d.sent();
89
- _d.label = 11;
98
+ if (!options.initApi) return [3 /*break*/, 12];
99
+ return [4 /*yield*/, options.initApi(remult)];
90
100
  case 11:
101
+ _d.sent();
102
+ _d.label = 12;
103
+ case 12:
91
104
  res({});
92
105
  return [2 /*return*/];
93
106
  }
package/server/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { GenericRequest, RemultServer, RemultServerOptions } from './expressBridge';
2
2
  export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer, InitRequestOptions } from './expressBridge';
3
3
  export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
4
+ export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
4
5
  export declare function createRemultServer<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
package/server/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRemultServer = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = void 0;
3
+ exports.createRemultServer = exports.DataProviderLiveQueryStorage = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = void 0;
4
4
  var expressBridge_1 = require("./expressBridge");
5
5
  var initAsyncHooks_1 = require("./initAsyncHooks");
6
6
  var JsonEntityFileStorage_1 = require("./JsonEntityFileStorage");
7
7
  Object.defineProperty(exports, "JsonEntityFileStorage", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonEntityFileStorage; } });
8
8
  Object.defineProperty(exports, "JsonFileDataProvider", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonFileDataProvider; } });
9
+ var data_provider_live_query_storage_1 = require("../live-query/data-provider-live-query-storage");
10
+ Object.defineProperty(exports, "DataProviderLiveQueryStorage", { enumerable: true, get: function () { return data_provider_live_query_storage_1.DataProviderLiveQueryStorage; } });
9
11
  function createRemultServer(options) {
10
12
  initAsyncHooks_1.initAsyncHooks();
11
13
  return expressBridge_1.createRemultServerCore(options);
@@ -1,15 +1,14 @@
1
1
  import { Sort } from './sort';
2
2
  import { Filter } from './filter/filter-interfaces';
3
3
  import { EntityMetadata, OmitEB } from './remult3';
4
- import type { Remult } from './context';
5
4
  export interface DataProvider {
6
5
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
7
6
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
8
7
  supportsRawFilter?: boolean;
9
- ensureSchema?(entities: EntityMetadata[], caption?: string): Promise<void>;
8
+ ensureSchema?(entities: EntityMetadata[]): Promise<void>;
10
9
  }
11
- export interface CanEnsureSchema {
12
- ensureSchema(remult: Remult): Promise<void>;
10
+ export interface Storage {
11
+ ensureSchema(): Promise<void>;
13
12
  }
14
13
  export interface EntityDataProvider {
15
14
  count(where: Filter): Promise<number>;
@@ -8,7 +8,7 @@ export declare class SqlDatabase implements DataProvider {
8
8
  static getDb(remult?: Remult): SqlDatabase;
9
9
  createCommand(): SqlCommand;
10
10
  execute(sql: string): Promise<SqlResult>;
11
- ensureSchema(entities: EntityMetadata<any>[], caption?: string): Promise<void>;
11
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
12
12
  getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
13
13
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
14
14
  static rawFilter(build: CustomSqlFilterBuilderFunction): EntityFilter<any>;
@@ -37,13 +37,13 @@ var SqlDatabase = /** @class */ (function () {
37
37
  SqlDatabase.prototype._getSourceSql = function () {
38
38
  return this.sql;
39
39
  };
40
- SqlDatabase.prototype.ensureSchema = function (entities, caption) {
40
+ SqlDatabase.prototype.ensureSchema = function (entities) {
41
41
  return tslib_1.__awaiter(this, void 0, void 0, function () {
42
42
  return tslib_1.__generator(this, function (_a) {
43
43
  switch (_a.label) {
44
44
  case 0:
45
45
  if (!this.sql.ensureSchema) return [3 /*break*/, 2];
46
- return [4 /*yield*/, this.sql.ensureSchema(entities, caption)];
46
+ return [4 /*yield*/, this.sql.ensureSchema(entities)];
47
47
  case 1:
48
48
  _a.sent();
49
49
  _a.label = 2;
@@ -5,15 +5,22 @@ import { Repository } from "../remult3";
5
5
  import { CategoriesForTesting } from "../tests/remult-3-entities";
6
6
  import { Status } from "../tests/testModel/models";
7
7
  export declare function itWithFocus(key: string, what: () => Promise<void>, focus?: boolean): void;
8
- export declare function testAll(key: string, what: dbTestWhatSignature, focus?: boolean): void;
9
- export declare function addDatabaseToTest(tester: dbTestMethodSignature): dbTestMethodSignature;
8
+ export declare function testAll(key: string, what: dbTestWhatSignature, focus?: boolean, options?: {
9
+ exclude?: string[];
10
+ }): void;
11
+ export declare function addDatabaseToTest(tester: dbTestMethodSignature, key?: string): dbTestMethodSignature;
10
12
  export declare function testInMemory(key: string, what: dbTestWhatSignature, focus?: boolean): void;
11
- export declare type dbTestWhatSignature = (db: {
13
+ export declare const TestDbs: {
14
+ restDataProvider: string;
15
+ };
16
+ export declare type dbTestWhatSignature = ((db: {
12
17
  db: DataProvider;
13
18
  remult: Remult;
14
19
  createEntity<entityType>(entity: ClassType<entityType>): Promise<Repository<entityType>>;
15
- }) => Promise<void>;
16
- export declare type dbTestMethodSignature = (key: string, what: dbTestWhatSignature, focus: boolean) => void;
20
+ }) => Promise<void>);
21
+ export declare type dbTestMethodSignature = ((key: string, what: dbTestWhatSignature, focus: boolean) => void) & {
22
+ key?: string;
23
+ };
17
24
  export declare function testAllDbs<T extends CategoriesForTesting>(key: string, doTest: (helper: {
18
25
  remult: Remult;
19
26
  createData: (doInsert?: (insert: (id: number, name: string, description?: string, status?: Status) => Promise<void>) => Promise<void>, entity?: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testAllDbs = exports.testInMemory = exports.addDatabaseToTest = exports.testAll = exports.itWithFocus = void 0;
3
+ exports.testAllDbs = exports.TestDbs = exports.testInMemory = exports.addDatabaseToTest = exports.testAll = exports.itWithFocus = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var context_1 = require("../context");
6
6
  var in_memory_database_1 = require("../data-providers/in-memory-database");
@@ -14,13 +14,18 @@ function itWithFocus(key, what, focus) {
14
14
  it(key, what);
15
15
  }
16
16
  exports.itWithFocus = itWithFocus;
17
- function testAll(key, what, focus) {
17
+ function testAll(key, what, focus, options) {
18
18
  var e_1, _a;
19
19
  if (focus === void 0) { focus = false; }
20
+ function runTest(m) {
21
+ var _a;
22
+ return !((_a = options === null || options === void 0 ? void 0 : options.exclude) === null || _a === void 0 ? void 0 : _a.includes(m.key));
23
+ }
20
24
  try {
21
25
  for (var databasesTesters_1 = tslib_1.__values(databasesTesters), databasesTesters_1_1 = databasesTesters_1.next(); !databasesTesters_1_1.done; databasesTesters_1_1 = databasesTesters_1.next()) {
22
26
  var test_1 = databasesTesters_1_1.value;
23
- test_1(key, what, focus);
27
+ if (runTest(test_1))
28
+ test_1(key, what, focus);
24
29
  }
25
30
  }
26
31
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -31,14 +36,16 @@ function testAll(key, what, focus) {
31
36
  finally { if (e_1) throw e_1.error; }
32
37
  }
33
38
  loadedTests.push(function (x) {
34
- x(key, what, focus);
39
+ if (runTest(x))
40
+ x(key, what, focus);
35
41
  });
36
42
  }
37
43
  exports.testAll = testAll;
38
44
  var databasesTesters = [];
39
45
  var loadedTests = [];
40
- function addDatabaseToTest(tester) {
46
+ function addDatabaseToTest(tester, key) {
41
47
  var e_2, _a;
48
+ tester.key = key;
42
49
  try {
43
50
  for (var loadedTests_1 = tslib_1.__values(loadedTests), loadedTests_1_1 = loadedTests_1.next(); !loadedTests_1_1.done; loadedTests_1_1 = loadedTests_1.next()) {
44
51
  var test_2 = loadedTests_1_1.value;
@@ -78,6 +85,9 @@ function testInMemory(key, what, focus) {
78
85
  }); }, focus);
79
86
  }
80
87
  exports.testInMemory = testInMemory;
88
+ exports.TestDbs = {
89
+ restDataProvider: "restDataProvider"
90
+ };
81
91
  databasesTesters.push(testInMemory);
82
92
  function testAllDbs(key, doTest, focus) {
83
93
  if (focus === void 0) { focus = false; }
@@ -1731,7 +1731,7 @@ db_tests_setup_1.testAll("test live query storage", function (_a) {
1731
1731
  case 0:
1732
1732
  x = new data_provider_live_query_storage_1.DataProviderLiveQueryStorage(db);
1733
1733
  if (!db.ensureSchema) return [3 /*break*/, 2];
1734
- return [4 /*yield*/, x.ensureSchema(remult)];
1734
+ return [4 /*yield*/, x.ensureSchema()];
1735
1735
  case 1:
1736
1736
  _c.sent();
1737
1737
  _c.label = 2;
@@ -1756,4 +1756,6 @@ db_tests_setup_1.testAll("test live query storage", function (_a) {
1756
1756
  }
1757
1757
  });
1758
1758
  });
1759
+ }, false, {
1760
+ exclude: [db_tests_setup_1.TestDbs.restDataProvider]
1759
1761
  });
@@ -4,7 +4,7 @@ export interface SqlImplementation {
4
4
  createCommand(): SqlCommand;
5
5
  transaction(action: (sql: SqlImplementation) => Promise<void>): Promise<void>;
6
6
  entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
7
- ensureSchema?(entities: EntityMetadata[], caption?: string): Promise<void>;
7
+ ensureSchema?(entities: EntityMetadata[]): Promise<void>;
8
8
  }
9
9
  export interface SqlCommand extends SqlCommandWithParameters {
10
10
  execute(sql: string): Promise<SqlResult>;
@@ -96,5 +96,5 @@ function testRest(key, what, focus) {
96
96
  }); }, focus);
97
97
  }
98
98
  exports.testRest = testRest;
99
- db_tests_setup_1.addDatabaseToTest(testRest);
99
+ db_tests_setup_1.addDatabaseToTest(testRest, db_tests_setup_1.TestDbs.restDataProvider);
100
100
  require("../shared-tests/");