@quatrain/core 1.0.0-beta2 → 1.0.0-beta4

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 (59) hide show
  1. package/lib/Auth.d.ts +25 -0
  2. package/lib/Auth.js +9 -0
  3. package/lib/Backend.d.ts +4 -1
  4. package/lib/Core.d.ts +4 -2
  5. package/lib/Core.js +1 -1
  6. package/lib/authentication/AbstractAuthAdapter.d.ts +21 -0
  7. package/lib/authentication/AbstractAuthAdapter.js +28 -0
  8. package/lib/authentication/AuthenticationError.d.ts +2 -0
  9. package/lib/authentication/AuthenticationError.js +6 -0
  10. package/lib/authentication/index.d.ts +4 -0
  11. package/lib/authentication/index.js +7 -0
  12. package/lib/authentication/middlewares/AbstractAuthMiddleware.d.ts +0 -0
  13. package/lib/authentication/middlewares/AbstractAuthMiddleware.js +1 -0
  14. package/lib/authentication/middlewares/Middleware.d.ts +5 -0
  15. package/lib/authentication/types/AuthInterface.d.ts +9 -0
  16. package/lib/backends/AbstractAdapter.d.ts +7 -1
  17. package/lib/backends/AbstractAdapter.js +23 -2
  18. package/lib/backends/Filters.d.ts +2 -1
  19. package/lib/backends/Query.d.ts +8 -4
  20. package/lib/backends/Query.js +12 -3
  21. package/lib/backends/index.d.ts +2 -1
  22. package/lib/backends/index.js +26 -1
  23. package/lib/backends/middlewares/InjectMetaMiddleware.d.ts +3 -3
  24. package/lib/backends/types/BackendCollectionHierarchy.d.ts +3 -0
  25. package/lib/backends/types/BackendCollectionHierarchy.js +6 -0
  26. package/lib/backends/types/BackendInterface.d.ts +1 -1
  27. package/lib/components/AbstractObject.d.ts +2 -1
  28. package/lib/components/BaseObjectCore.d.ts +10 -1
  29. package/lib/components/BaseObjectCore.js +11 -2
  30. package/lib/components/BaseRepository.d.ts +1 -0
  31. package/lib/components/BaseRepository.js +21 -3
  32. package/lib/components/DataObject.js +1 -0
  33. package/lib/components/Entity.d.ts +3 -3
  34. package/lib/components/Entity.js +6 -6
  35. package/lib/components/EntityRepository.d.ts +2 -2
  36. package/lib/components/EntityRepository.js +1 -1
  37. package/lib/components/ObjectUri.js +1 -2
  38. package/lib/components/User.d.ts +3 -3
  39. package/lib/components/User.js +16 -9
  40. package/lib/components/UserRepository.d.ts +3 -3
  41. package/lib/components/UserRepository.js +2 -2
  42. package/lib/components/index.d.ts +2 -2
  43. package/lib/components/index.js +4 -2
  44. package/lib/index.d.ts +4 -2
  45. package/lib/index.js +10 -1
  46. package/package.json +2 -2
  47. package/README.md +0 -124
  48. package/lib/backends/BackendInterface.d.ts +0 -13
  49. package/lib/backends/middlewares/InjectMetaMiddleware copy.d.ts +0 -12
  50. package/lib/backends/middlewares/InjectMetaMiddleware copy.js +0 -30
  51. package/lib/components/BaseObjectProperties.d.ts +0 -13
  52. package/lib/components/BaseObjectProperties.js +0 -87
  53. package/lib/components/EntityProperties.d.ts +0 -1
  54. package/lib/components/EntityProperties.js +0 -54
  55. package/lib/components/UserProperties.d.ts +0 -1
  56. package/lib/components/UserProperties.js +0 -103
  57. package/lib/components/types/UserClass.d.ts +0 -3
  58. /package/lib/{backends/BackendInterface.js → authentication/middlewares/Middleware.js} +0 -0
  59. /package/lib/{components/types/UserClass.js → authentication/types/AuthInterface.js} +0 -0
package/lib/Auth.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import Middleware from './authentication/middlewares/Middleware';
2
+ export declare enum AuthAction {
3
+ SIGNIN = "signin",
4
+ SIGNUP = "signup",
5
+ SIGNOUT = "signout"
6
+ }
7
+ /**
8
+ * Authentication Parameters acceptable keys
9
+ */
10
+ export type AuthParametersKeys = 'host' | 'alias' | 'mapping' | 'middlewares' | 'config' | 'fixtures' | 'debug';
11
+ /**
12
+ * Backend parameters interface
13
+ */
14
+ export interface AuthParameters {
15
+ host?: string;
16
+ alias?: string;
17
+ mapping?: {
18
+ [x: string]: any;
19
+ };
20
+ middlewares?: Middleware[];
21
+ config?: any;
22
+ fixtures?: any;
23
+ softDelete?: boolean;
24
+ debug?: boolean;
25
+ }
package/lib/Auth.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthAction = void 0;
4
+ var AuthAction;
5
+ (function (AuthAction) {
6
+ AuthAction["SIGNIN"] = "signin";
7
+ AuthAction["SIGNUP"] = "signup";
8
+ AuthAction["SIGNOUT"] = "signout";
9
+ })(AuthAction || (exports.AuthAction = AuthAction = {}));
package/lib/Backend.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import Middleware from "./backends/middlewares/Middleware";
1
+ import Middleware from './backends/middlewares/Middleware';
2
2
  export declare enum BackendAction {
3
3
  CREATE = "create",
4
4
  READ = "read",
@@ -23,6 +23,9 @@ export type BackendParametersKeys = 'host' | 'alias' | 'mapping' | 'middlewares'
23
23
  export interface BackendParameters {
24
24
  host?: string;
25
25
  alias?: string;
26
+ hierarchy?: {
27
+ [collection: string]: any;
28
+ };
26
29
  mapping?: {
27
30
  [x: string]: any;
28
31
  };
package/lib/Core.d.ts CHANGED
@@ -1,16 +1,18 @@
1
+ import { AbstractAuthAdapter } from './authentication';
1
2
  import { AbstractAdapter } from './backends/AbstractAdapter';
2
- import { UserCore } from './components/User';
3
+ import { User } from './components/User';
3
4
  import { DataObjectClass } from './components/types/DataObjectClass';
4
5
  export type BackendRegistry<T extends AbstractAdapter> = {
5
6
  [x: string]: T;
6
7
  };
7
8
  export declare class Core {
8
9
  static defaultBackend: string;
9
- static userClass: typeof UserCore;
10
+ static userClass: typeof User;
10
11
  static classRegistry: {
11
12
  [key: string]: any;
12
13
  };
13
14
  static logger: Console;
15
+ static auth: AbstractAuthAdapter;
14
16
  static timestamp: () => string;
15
17
  protected static _backends: BackendRegistry<any>;
16
18
  static definition(key: string): {
package/lib/Core.js CHANGED
@@ -52,7 +52,7 @@ class Core {
52
52
  }
53
53
  exports.Core = Core;
54
54
  Core.defaultBackend = '@default';
55
- Core.userClass = User_1.UserCore;
55
+ Core.userClass = User_1.User;
56
56
  Core.classRegistry = {};
57
57
  Core.logger = console;
58
58
  // How timestamp are formatted
@@ -0,0 +1,21 @@
1
+ import { AuthParameters, AuthParametersKeys } from '../Auth';
2
+ import { User } from '../components/User';
3
+ import Middleware from './middlewares/Middleware';
4
+ import { AuthInterface } from './types/AuthInterface';
5
+ export declare abstract class AbstractAuthAdapter implements AuthInterface {
6
+ protected _alias: string;
7
+ protected _params: AuthParameters;
8
+ protected _middlewares: any[];
9
+ constructor(params?: AuthParameters);
10
+ setParam(key: AuthParametersKeys, value: any): void;
11
+ getParam(key: AuthParametersKeys): any;
12
+ addMiddleware(middleware: Middleware): void;
13
+ set alias(alias: string);
14
+ get alias(): string;
15
+ abstract register(user: User): Promise<any>;
16
+ abstract signup(login: string, password: string): Promise<any>;
17
+ abstract signout(user: User): Promise<any>;
18
+ abstract update(user: User, updatable: any): Promise<any>;
19
+ abstract delete(user: User): Promise<any>;
20
+ abstract getAuthToken(token: string): any;
21
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractAuthAdapter = void 0;
4
+ class AbstractAuthAdapter {
5
+ constructor(params = {}) {
6
+ this._alias = '';
7
+ this._params = {};
8
+ this._middlewares = [];
9
+ this._alias = params.alias || '';
10
+ this._middlewares = params.middlewares || [];
11
+ }
12
+ setParam(key, value) {
13
+ this._params[key] = value;
14
+ }
15
+ getParam(key) {
16
+ return this._params[key];
17
+ }
18
+ addMiddleware(middleware) {
19
+ this._middlewares.push(middleware);
20
+ }
21
+ set alias(alias) {
22
+ this._alias = alias;
23
+ }
24
+ get alias() {
25
+ return this._alias;
26
+ }
27
+ }
28
+ exports.AbstractAuthAdapter = AbstractAuthAdapter;
@@ -0,0 +1,2 @@
1
+ export declare class AuthenticationError extends Error {
2
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthenticationError = void 0;
4
+ class AuthenticationError extends Error {
5
+ }
6
+ exports.AuthenticationError = AuthenticationError;
@@ -0,0 +1,4 @@
1
+ import { AbstractAuthAdapter } from './AbstractAuthAdapter';
2
+ import { AuthInterface } from './types/AuthInterface';
3
+ import { AuthenticationError } from './AuthenticationError';
4
+ export { AuthInterface, AbstractAuthAdapter, AuthenticationError };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthenticationError = exports.AbstractAuthAdapter = void 0;
4
+ const AbstractAuthAdapter_1 = require("./AbstractAuthAdapter");
5
+ Object.defineProperty(exports, "AbstractAuthAdapter", { enumerable: true, get: function () { return AbstractAuthAdapter_1.AbstractAuthAdapter; } });
6
+ const AuthenticationError_1 = require("./AuthenticationError");
7
+ Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return AuthenticationError_1.AuthenticationError; } });
@@ -0,0 +1,5 @@
1
+ import { AuthAction } from '../../Auth';
2
+ import { User } from '../../components/User';
3
+ export default interface Middleware {
4
+ execute: (user: User, action: AuthAction) => void;
5
+ }
@@ -0,0 +1,9 @@
1
+ import { User } from '../../components/User';
2
+ export interface AuthInterface {
3
+ register(user: User): Promise<any>;
4
+ signup(login: string, password: string): Promise<any>;
5
+ signout(user: User): Promise<any>;
6
+ update(user: User, updatable: any): Promise<any>;
7
+ delete(user: User): Promise<any>;
8
+ getAuthToken(token: string): any;
9
+ }
@@ -14,6 +14,12 @@ export declare abstract class AbstractAdapter implements BackendInterface {
14
14
  setParam(key: BackendParametersKeys, value: any): void;
15
15
  getParam(key: BackendParametersKeys): any;
16
16
  addMiddleware(middleware: Middleware): void;
17
+ /**
18
+ * Returns true if a given middleware is attached
19
+ * @param className
20
+ * @returns boolean
21
+ */
22
+ hasMiddleware(className: string): boolean;
17
23
  set alias(alias: string);
18
24
  get alias(): string;
19
25
  getCollection(dao: DataObjectClass<any>): string | undefined;
@@ -28,7 +34,7 @@ export declare abstract class AbstractAdapter implements BackendInterface {
28
34
  * @returns Array
29
35
  */
30
36
  query(query: Query<any>): Promise<QueryResultType<DataObjectClass<any>>>;
31
- abstract find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined): Promise<QueryResultType<any>>;
37
+ abstract find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined, parent: any): Promise<QueryResultType<any>>;
32
38
  log(message: string): void;
33
39
  executeMiddlewares(dataObject: DataObjectClass<any>, action: BackendAction): Promise<DataObjectClass<any>>;
34
40
  }
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AbstractAdapter = void 0;
13
+ const BackendError_1 = require("./BackendError");
13
14
  class AbstractAdapter {
14
15
  constructor(params = {}) {
15
16
  this._alias = '';
@@ -25,8 +26,25 @@ class AbstractAdapter {
25
26
  return this._params[key];
26
27
  }
27
28
  addMiddleware(middleware) {
29
+ if (this.hasMiddleware(middleware.constructor.name)) {
30
+ throw new BackendError_1.BackendError(`Middleware '${middleware.constructor.name}' is already attached`);
31
+ }
28
32
  this._middlewares.push(middleware);
29
33
  }
34
+ /**
35
+ * Returns true if a given middleware is attached
36
+ * @param className
37
+ * @returns boolean
38
+ */
39
+ hasMiddleware(className) {
40
+ let has = false;
41
+ this._middlewares.forEach((middleware) => {
42
+ if (middleware.constructor.name === className) {
43
+ has = true;
44
+ }
45
+ });
46
+ return has;
47
+ }
30
48
  set alias(alias) {
31
49
  this._alias = alias;
32
50
  }
@@ -34,7 +52,7 @@ class AbstractAdapter {
34
52
  return this._alias;
35
53
  }
36
54
  getCollection(dao) {
37
- return dao.uri.collection; //|| dao.uri.class.name.toLowerCase() //class.COLLECTION
55
+ return dao.uri.collection;
38
56
  }
39
57
  /**
40
58
  * Process Query instance and return result
@@ -43,7 +61,10 @@ class AbstractAdapter {
43
61
  */
44
62
  query(query) {
45
63
  return __awaiter(this, void 0, void 0, function* () {
46
- return yield this.find(yield query.obj.daoFactory(), query.filters, query.sortAndLimit);
64
+ const dao = yield query.obj.daoFactory();
65
+ if (query.parent) {
66
+ }
67
+ return yield this.find(dao, query.filters, query.sortAndLimit, query.parent);
47
68
  });
48
69
  }
49
70
  log(message) {
@@ -2,9 +2,10 @@ import { Filter } from './Filter';
2
2
  export interface FiltersType {
3
3
  or?: Filter[];
4
4
  and?: Filter[];
5
+ base?: string;
5
6
  }
6
7
  export declare class Filters implements FiltersType {
7
8
  or?: Filter[];
8
9
  and?: Filter[];
9
- constructor(or: Filter[] | undefined, and: Filter[] | undefined);
10
+ constructor(or?: Filter[], and?: Filter[]);
10
11
  }
@@ -28,15 +28,19 @@ export declare enum returnAs {
28
28
  }
29
29
  export declare class Query<T extends typeof BaseObjectCore> {
30
30
  protected _obj: T;
31
- protected _params: any;
31
+ protected _parent: T | undefined;
32
32
  filters: Filter[];
33
33
  sortings: Sorting[];
34
34
  limits: Limits;
35
35
  meta: any;
36
- constructor(obj: T, params?: {
37
- [x: string]: any;
38
- });
36
+ constructor(obj: T, parent?: T | undefined);
39
37
  get obj(): T;
38
+ get parent(): T | undefined;
39
+ /**
40
+ * Declare query parent record
41
+ * This may be need in some NoSQL backend to query subcollections
42
+ */
43
+ set parent(parent: T);
40
44
  where(param: Filter | string, value?: any, operator?: any): this;
41
45
  sortBy(param: Sorting | string, order?: any): this;
42
46
  setLimits(limits: Limits): this;
@@ -26,9 +26,9 @@ var returnAs;
26
26
  returnAs["AS_IS"] = "asIs";
27
27
  })(returnAs || (exports.returnAs = returnAs = {}));
28
28
  class Query {
29
- constructor(obj, params = {}) {
29
+ constructor(obj, parent = undefined) {
30
30
  this._obj = obj;
31
- this._params = params; // just in case
31
+ this._parent = parent;
32
32
  this.filters = [];
33
33
  this.sortings = [];
34
34
  this.limits = new Limits_1.Limits();
@@ -37,8 +37,17 @@ class Query {
37
37
  get obj() {
38
38
  return this._obj;
39
39
  }
40
+ get parent() {
41
+ return this._parent;
42
+ }
43
+ /**
44
+ * Declare query parent record
45
+ * This may be need in some NoSQL backend to query subcollections
46
+ */
47
+ set parent(parent) {
48
+ this._parent = parent;
49
+ }
40
50
  where(param, value = null, operator = 'equals') {
41
- console.log(`received value`, value);
42
51
  if (typeof param == 'object') {
43
52
  this.filters.push(param);
44
53
  }
@@ -2,10 +2,11 @@ import { AbstractAdapter } from './AbstractAdapter';
2
2
  import { MockAdapter } from './MockAdapter';
3
3
  import { BackendError } from './BackendError';
4
4
  import { BackendInterface } from './types/BackendInterface';
5
+ import * as BackendCollectionHierarchy from './types/BackendCollectionHierarchy';
5
6
  import { Query, QueryResultType, QueryMetaType } from './Query';
6
7
  import { Filter } from './Filter';
7
8
  import { Filters } from './Filters';
8
9
  import { Sorting } from './Sorting';
9
10
  import { Limits } from './Limits';
10
11
  import { SortAndLimit } from './SortAndLimit';
11
- export { BackendInterface, AbstractAdapter, BackendError, MockAdapter, Query, QueryResultType, QueryMetaType, Filter, Filters, Sorting, Limits, SortAndLimit, };
12
+ export { BackendInterface, AbstractAdapter, BackendError, MockAdapter, Query, QueryResultType, QueryMetaType, Filter, Filters, Sorting, Limits, SortAndLimit, BackendCollectionHierarchy, };
@@ -1,12 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SortAndLimit = exports.Limits = exports.Sorting = exports.Filters = exports.Filter = exports.Query = exports.MockAdapter = exports.BackendError = exports.AbstractAdapter = void 0;
26
+ exports.BackendCollectionHierarchy = exports.SortAndLimit = exports.Limits = exports.Sorting = exports.Filters = exports.Filter = exports.Query = exports.MockAdapter = exports.BackendError = exports.AbstractAdapter = void 0;
4
27
  const AbstractAdapter_1 = require("./AbstractAdapter");
5
28
  Object.defineProperty(exports, "AbstractAdapter", { enumerable: true, get: function () { return AbstractAdapter_1.AbstractAdapter; } });
6
29
  const MockAdapter_1 = require("./MockAdapter");
7
30
  Object.defineProperty(exports, "MockAdapter", { enumerable: true, get: function () { return MockAdapter_1.MockAdapter; } });
8
31
  const BackendError_1 = require("./BackendError");
9
32
  Object.defineProperty(exports, "BackendError", { enumerable: true, get: function () { return BackendError_1.BackendError; } });
33
+ const BackendCollectionHierarchy = __importStar(require("./types/BackendCollectionHierarchy"));
34
+ exports.BackendCollectionHierarchy = BackendCollectionHierarchy;
10
35
  const Query_1 = require("./Query");
11
36
  Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return Query_1.Query; } });
12
37
  const Filter_1 = require("./Filter");
@@ -1,12 +1,12 @@
1
1
  import { DataObjectClass } from '../../components';
2
2
  import { BackendAction } from '../../Backend';
3
- import { UserCore } from '../../components/User';
3
+ import { User } from '../../components/User';
4
4
  import Middleware from './Middleware';
5
5
  export interface InjectMetaMiddlewareParams {
6
- user: UserCore;
6
+ user: User;
7
7
  }
8
8
  export declare class InjectMetaMiddleware implements Middleware {
9
- protected _user: UserCore;
9
+ protected _user: User;
10
10
  constructor(params: InjectMetaMiddlewareParams);
11
11
  execute(dataObject: DataObjectClass<any>, action: BackendAction): void;
12
12
  }
@@ -0,0 +1,3 @@
1
+ export declare const STANDARD = 1;
2
+ export declare const SUBCOLLECTION = 2;
3
+ export declare const SUBCOLLECTION_GROUP = 3;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUBCOLLECTION_GROUP = exports.SUBCOLLECTION = exports.STANDARD = void 0;
4
+ exports.STANDARD = 1;
5
+ exports.SUBCOLLECTION = 2;
6
+ exports.SUBCOLLECTION_GROUP = 3;
@@ -9,5 +9,5 @@ export interface BackendInterface {
9
9
  update(dataObject: DataObjectClass<any>): Promise<DataObjectClass<any>>;
10
10
  delete(dataObject: DataObjectClass<any>): Promise<DataObjectClass<any>>;
11
11
  query(query: Query<any>): Promise<QueryResultType<DataObjectClass<any>>>;
12
- find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined): Promise<QueryResultType<DataObjectClass<any>>>;
12
+ find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined, parent: any): Promise<QueryResultType<DataObjectClass<any>>>;
13
13
  }
@@ -1,8 +1,9 @@
1
1
  import { DataObjectClass } from './types/DataObjectClass';
2
- import { DataObjectProperties } from '../properties/';
2
+ import { DataObjectProperties } from '../properties';
3
3
  export declare abstract class AbstractObject {
4
4
  static PROPS_DEFINITION: DataObjectProperties;
5
5
  static COLLECTION: string | undefined;
6
+ static PARENT_PROP: string | undefined;
6
7
  static LABEL_KEY: string;
7
8
  protected _dataObject: DataObjectClass<any>;
8
9
  constructor(dao: DataObjectClass<any>);
@@ -59,6 +59,15 @@ export declare class BaseObjectCore extends AbstractObject implements BaseObject
59
59
  */
60
60
  protected toProxy<T extends BaseObject>(): Proxy<Proxy<T>>;
61
61
  asReference(): any;
62
- query(): Query<any>;
62
+ /**
63
+ * Create a query based on given class where parent is current instance
64
+ * @param obj
65
+ * @returns Query
66
+ */
67
+ query(obj: any): Query<any>;
68
+ /**
69
+ * Create a query based on current class
70
+ * @returns Query
71
+ */
63
72
  static query(): Query<typeof BaseObjectCore>;
64
73
  }
@@ -146,9 +146,18 @@ class BaseObjectCore extends AbstractObject_1.AbstractObject {
146
146
  asReference() {
147
147
  return this._dataObject.toReference();
148
148
  }
149
- query() {
150
- return new Query_1.Query(this.constructor.prototype);
149
+ /**
150
+ * Create a query based on given class where parent is current instance
151
+ * @param obj
152
+ * @returns Query
153
+ */
154
+ query(obj) {
155
+ return new Query_1.Query(obj, this);
151
156
  }
157
+ /**
158
+ * Create a query based on current class
159
+ * @returns Query
160
+ */
152
161
  static query() {
153
162
  return new Query_1.Query(this);
154
163
  }
@@ -12,6 +12,7 @@ export default class BaseRepository<T extends BaseObject> {
12
12
  backendAdapter: BackendInterface;
13
13
  constructor(model: typeof BaseObjectCore, backendAdapter?: BackendInterface);
14
14
  protected getDataObjectFromUid(uid: string): Promise<DataObjectClass<any>>;
15
+ protected getDataObjectFromPath(path: string): Promise<DataObjectClass<any>>;
15
16
  create<B extends BaseObjectCore>(obj: B, uid?: string): Promise<any>;
16
17
  read(key: string): Promise<any>;
17
18
  update(obj: BaseObjectCore): Promise<any>;
@@ -58,17 +58,35 @@ class BaseRepository {
58
58
  return dataObject;
59
59
  });
60
60
  }
61
+ getDataObjectFromPath(path) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const dataObject = DataObject_1.DataObject.factory({
64
+ properties: this._model.PROPS_DEFINITION,
65
+ uri: path,
66
+ });
67
+ dataObject.uid = path.substring(path.lastIndexOf('/') + 1);
68
+ return dataObject;
69
+ });
70
+ }
61
71
  create(obj, uid) {
62
72
  return __awaiter(this, void 0, void 0, function* () {
63
73
  const savedObj = yield this.backendAdapter.create(obj.dataObject, uid);
64
- return this._model.fromDataObject(savedObj); //as Persisted<T>
74
+ return this._model.fromDataObject(savedObj);
65
75
  });
66
76
  }
67
77
  read(key) {
68
78
  return __awaiter(this, void 0, void 0, function* () {
69
- const uid = key.indexOf('/') !== -1 ? key.substring(key.lastIndexOf('/') + 1) : key;
70
79
  try {
71
- const dataObject = yield this.getDataObjectFromUid(uid);
80
+ let dataObject;
81
+ if (key.split('/').length <= 2) {
82
+ const uid = key.indexOf('/') !== -1
83
+ ? key.substring(key.lastIndexOf('/') + 1)
84
+ : key;
85
+ dataObject = yield this.getDataObjectFromUid(uid);
86
+ }
87
+ else {
88
+ dataObject = yield this.getDataObjectFromPath(key);
89
+ }
72
90
  const response = yield this.backendAdapter.read(dataObject);
73
91
  const obj = this._model.fromDataObject(response);
74
92
  // TODO should be moved to the backend middleware
@@ -242,6 +242,7 @@ class DataObject {
242
242
  break;
243
243
  case 'ObjectProperty':
244
244
  const value = prop.val();
245
+ console.log(value, typeof value);
245
246
  Reflect.set(data, key, value
246
247
  ? objectsAsReferences && !(value instanceof ObjectUri_1.ObjectUri)
247
248
  ? value.asReference()
@@ -3,10 +3,10 @@ import { BaseObject } from './BaseObject';
3
3
  import { User } from './User';
4
4
  import { EntityClass } from './types/EntityClass';
5
5
  export declare const EntityProperties: any;
6
- export interface Entity extends BaseObject {
7
- users: User;
6
+ export interface EntityType extends BaseObject {
7
+ users?: User[];
8
8
  }
9
- export declare class EntityCore extends BaseObjectCore implements EntityClass {
9
+ export declare class Entity extends BaseObjectCore implements EntityClass {
10
10
  static COLLECTION: string;
11
11
  static PROPS_DEFINITION: any[];
12
12
  }
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.EntityCore = exports.EntityProperties = void 0;
26
+ exports.Entity = exports.EntityProperties = void 0;
27
27
  const BaseObjectCore_1 = require("./BaseObjectCore");
28
28
  const BaseObject_1 = require("./BaseObject");
29
29
  const User_1 = require("./User");
@@ -47,11 +47,11 @@ exports.EntityProperties = [
47
47
  parentKey: 'entity',
48
48
  },
49
49
  ];
50
- class EntityCore extends BaseObjectCore_1.BaseObjectCore {
50
+ class Entity extends BaseObjectCore_1.BaseObjectCore {
51
51
  }
52
- exports.EntityCore = EntityCore;
53
- EntityCore.COLLECTION = 'entities';
54
- EntityCore.PROPS_DEFINITION = [
52
+ exports.Entity = Entity;
53
+ Entity.COLLECTION = 'entities';
54
+ Entity.PROPS_DEFINITION = [
55
55
  ...BaseObject_1.BaseObjectProperties,
56
56
  {
57
57
  // surcharge property minLength and htmlType
@@ -65,7 +65,7 @@ EntityCore.PROPS_DEFINITION = [
65
65
  name: 'users',
66
66
  mandatory: true,
67
67
  type: CollectionProperty_1.CollectionProperty.TYPE,
68
- instanceOf: User_1.UserCore,
68
+ instanceOf: User_1.User,
69
69
  parentKey: 'entity',
70
70
  },
71
71
  ];
@@ -1,6 +1,6 @@
1
1
  import { BackendInterface } from '../backends/types/BackendInterface';
2
2
  import BaseRepository from './BaseRepository';
3
- import { Entity } from './Entity';
4
- export default class EntityRepository extends BaseRepository<Entity> {
3
+ import { EntityType } from './Entity';
4
+ export default class EntityRepository extends BaseRepository<EntityType> {
5
5
  constructor(backendAdapter?: BackendInterface);
6
6
  }
@@ -8,7 +8,7 @@ const BaseRepository_1 = __importDefault(require("./BaseRepository"));
8
8
  const Entity_1 = require("./Entity");
9
9
  class EntityRepository extends BaseRepository_1.default {
10
10
  constructor(backendAdapter = Core_1.Core.getBackend()) {
11
- super(Entity_1.EntityCore, backendAdapter);
11
+ super(Entity_1.Entity, backendAdapter);
12
12
  }
13
13
  }
14
14
  exports.default = EntityRepository;
@@ -52,10 +52,9 @@ class ObjectUri {
52
52
  }
53
53
  }
54
54
  set class(objClass) {
55
- var _a;
56
55
  this._objClass = objClass;
57
56
  if (objClass) {
58
- this._collection = objClass.COLLECTION || ((_a = objClass.name) === null || _a === void 0 ? void 0 : _a.toLowerCase());
57
+ this._collection = objClass.COLLECTION || objClass.name && objClass.name.toLowerCase();
59
58
  }
60
59
  else {
61
60
  this._collection = undefined;
@@ -1,6 +1,6 @@
1
1
  import { BaseObjectCore } from './BaseObjectCore';
2
2
  import { BaseObject } from './BaseObject';
3
- export interface User extends BaseObject {
3
+ export interface UserType extends BaseObject {
4
4
  name: string;
5
5
  firstname: string;
6
6
  lastname: string;
@@ -10,8 +10,8 @@ export interface User extends BaseObject {
10
10
  email: string;
11
11
  }
12
12
  export declare const UserProperties: any;
13
- export declare class UserCore extends BaseObjectCore {
13
+ export declare class User extends BaseObjectCore {
14
14
  static PROPS_DEFINITION: any;
15
15
  static COLLECTION: string;
16
- static factory(src?: any): Promise<UserCore>;
16
+ static factory(src?: any): Promise<User>;
17
17
  }