@quatrain/core 1.0.0-beta23 → 1.0.0-beta24

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/lib/Core.d.ts CHANGED
@@ -1,21 +1,16 @@
1
1
  import { AbstractAuthAdapter } from './authentication';
2
2
  import { AbstractAdapter } from './backends/AbstractAdapter';
3
- import { AbstractStorageAdapter } from './storages';
4
3
  import { User } from './components/User';
5
4
  import { DataObjectClass } from './components/types/DataObjectClass';
6
5
  export type BackendRegistry<T extends AbstractAdapter> = {
7
6
  [x: string]: T;
8
7
  };
9
- export type StorageBackendRegistry<T extends AbstractStorageAdapter> = {
10
- [x: string]: T;
11
- };
12
8
  export interface AuthAdapter extends AbstractAuthAdapter {
13
9
  }
14
10
  export declare class Core {
15
11
  static storage: any;
16
12
  static storagePrefix: string;
17
13
  static defaultBackend: string;
18
- static defaultStorage: string;
19
14
  static userClass: typeof User;
20
15
  static classRegistry: {
21
16
  [key: string]: any;
@@ -24,7 +19,6 @@ export declare class Core {
24
19
  static auth: AuthAdapter | AbstractAuthAdapter;
25
20
  static timestamp: () => string;
26
21
  protected static _backends: BackendRegistry<any>;
27
- protected static _storages: StorageBackendRegistry<any>;
28
22
  static definition(key: string): {
29
23
  manifest: {
30
24
  type: StringConstructor;
@@ -35,8 +29,6 @@ export declare class Core {
35
29
  static getConfig(key: string): Promise<any>;
36
30
  static addBackend(backend: AbstractAdapter, alias: string, setDefault?: boolean): void;
37
31
  static getBackend<T extends AbstractAdapter>(alias?: string): T;
38
- static addStorage(backend: AbstractStorageAdapter, alias: string, setDefault?: boolean): void;
39
- static getStorage<T extends AbstractStorageAdapter>(alias?: string): T;
40
32
  static addClass(name: string, obj: any): void;
41
33
  static getClass(name: string): any;
42
34
  /**
package/lib/Core.js CHANGED
@@ -51,20 +51,6 @@ class Core {
51
51
  throw new Error(`Unknown backend alias: '${alias}'`);
52
52
  }
53
53
  }
54
- static addStorage(backend, alias, setDefault = false) {
55
- Core._storages[alias] = backend;
56
- if (setDefault) {
57
- Core.defaultStorage = alias;
58
- }
59
- }
60
- static getStorage(alias = this.defaultStorage) {
61
- if (this._storages[alias]) {
62
- return this._storages[alias];
63
- }
64
- else {
65
- throw new Error(`Unknown storage alias: '${alias}'`);
66
- }
67
- }
68
54
  static addClass(name, obj) {
69
55
  Core.classRegistry[name] = obj;
70
56
  }
@@ -93,11 +79,9 @@ exports.Core = Core;
93
79
  Core.storage = require('node-persist');
94
80
  Core.storagePrefix = 'core';
95
81
  Core.defaultBackend = '@default';
96
- Core.defaultStorage = '@default';
97
82
  Core.userClass = User_1.User;
98
83
  Core.classRegistry = {};
99
84
  Core.logger = console;
100
85
  // How timestamp are formatted
101
86
  Core.timestamp = () => new Date().toISOString();
102
87
  Core._backends = {};
103
- Core._storages = {};
@@ -8,6 +8,7 @@ import { BaseObjectCore } from '../components/BaseObjectCore';
8
8
  export declare const AS_OBJECTURIS = "objectUris";
9
9
  export declare const AS_DATAOBJECTS = "dataObjects";
10
10
  export declare const AS_INSTANCES = "classInstances";
11
+ export type OperatorKeys = 'equals' | 'notEquals' | 'greater' | 'greaterOrEquals' | 'lower' | 'lowerOrEquals' | 'contains' | 'notContains' | 'containsAll' | 'containsAny';
11
12
  export type QueryMetaType = {
12
13
  count: number;
13
14
  offset: number;
@@ -42,7 +43,7 @@ export declare class Query<T extends typeof BaseObjectCore> {
42
43
  * This may be need in some NoSQL backend to query subcollections
43
44
  */
44
45
  set parent(parent: T | undefined);
45
- where(param: Filter | string | any, value?: any, operator?: any): this;
46
+ where(param: Filter | string | any, value?: any, operator?: OperatorKeys): this;
46
47
  sortBy(param: Sorting | string, order?: any): this;
47
48
  setLimits(limits: Limits): this;
48
49
  offset(offset?: number): this;
@@ -7,7 +7,7 @@ export interface BackendInterface {
7
7
  create(dataObject: DataObjectClass<any>, desiredUid: string | undefined): Promise<DataObjectClass<any>>;
8
8
  read(param: string | DataObjectClass<any>): Promise<DataObjectClass<any>>;
9
9
  update(dataObject: DataObjectClass<any>): Promise<DataObjectClass<any>>;
10
- delete(dataObject: DataObjectClass<any>): Promise<DataObjectClass<any>>;
10
+ delete(dataObject: DataObjectClass<any>, hardDelete?: boolean): Promise<DataObjectClass<any>>;
11
11
  query(query: Query<any>): Promise<QueryResultType<DataObjectClass<any>>>;
12
12
  find(dataObject: DataObjectClass<any>, filters: Filters | Filter[] | undefined, pagination: SortAndLimit | undefined, parent: any): Promise<QueryResultType<DataObjectClass<any>>>;
13
13
  }
@@ -20,6 +20,6 @@ export default class BaseRepository<T extends BaseObject> {
20
20
  * delete object in its backend
21
21
  * @param uid string
22
22
  */
23
- delete(uid: string): Promise<DataObjectClass<any>>;
23
+ delete(uid: string, hardDelete?: boolean): Promise<DataObjectClass<any>>;
24
24
  query(query: Query<any>): Promise<QueryResultType<T>>;
25
25
  }
@@ -49,7 +49,10 @@ class BaseRepository {
49
49
  getDataObjectFromUid(uid) {
50
50
  return __awaiter(this, void 0, void 0, function* () {
51
51
  const collection = this._model.COLLECTION || this._model.name.toLowerCase();
52
- const path = `${collection}/${uid}`;
52
+ let path = `${collection}/${uid}`;
53
+ if (uid.split('/').length > 2) {
54
+ path = uid;
55
+ }
53
56
  const dataObject = DataObject_1.DataObject.factory({
54
57
  properties: this._model.PROPS_DEFINITION,
55
58
  uri: path,
@@ -103,7 +106,7 @@ class BaseRepository {
103
106
  throw e;
104
107
  }
105
108
  if (e instanceof ResourcesErrors_1.NotFoundError) {
106
- throw new ResourcesErrors_1.NotFoundError('[Repository] ' + e.message);
109
+ return null;
107
110
  }
108
111
  throw e;
109
112
  }
@@ -111,7 +114,7 @@ class BaseRepository {
111
114
  }
112
115
  update(obj) {
113
116
  return __awaiter(this, void 0, void 0, function* () {
114
- const dataObject = obj.dataObject;
117
+ const dataObject = obj.dataObject || obj;
115
118
  const savedObj = yield this.backendAdapter.update(dataObject);
116
119
  return this._model.fromDataObject(savedObj);
117
120
  });
@@ -120,10 +123,10 @@ class BaseRepository {
120
123
  * delete object in its backend
121
124
  * @param uid string
122
125
  */
123
- delete(uid) {
126
+ delete(uid, hardDelete = false) {
124
127
  return __awaiter(this, void 0, void 0, function* () {
125
128
  const dataObject = yield this.getDataObjectFromUid(uid);
126
- return yield this.backendAdapter.delete(dataObject);
129
+ return yield this.backendAdapter.delete(dataObject, hardDelete);
127
130
  });
128
131
  }
129
132
  query(query) {
@@ -85,6 +85,7 @@ export declare class DataObject implements DataObjectClass<any> {
85
85
  get uri(): ObjectUri;
86
86
  get class(): any;
87
87
  get parentProp(): string | undefined;
88
+ set parentProp(str: string | undefined);
88
89
  has(key: string): boolean;
89
90
  /**
90
91
  * Returns property matching key or throw
@@ -211,6 +211,9 @@ class DataObject {
211
211
  get parentProp() {
212
212
  return this._parentProp;
213
213
  }
214
+ set parentProp(str) {
215
+ this._parentProp = str;
216
+ }
214
217
  has(key) {
215
218
  return Reflect.has(this._properties, key);
216
219
  }
@@ -139,7 +139,7 @@ class ObjectUri {
139
139
  */
140
140
  toReference() {
141
141
  return {
142
- ref: this._path,
142
+ ref: this.path,
143
143
  uri: this._literal,
144
144
  label: this._label,
145
145
  };
@@ -147,7 +147,7 @@ class ObjectUri {
147
147
  toJSON() {
148
148
  return {
149
149
  backend: this._backend,
150
- ref: this._path,
150
+ ref: this.path,
151
151
  label: this._label || '',
152
152
  };
153
153
  }
package/lib/index.d.ts CHANGED
@@ -30,15 +30,6 @@ import { AuthAction, AuthParameters, AuthParametersKeys } from './Auth';
30
30
  import { AuthInterface, AbstractAuthAdapter, AuthenticationError } from './authentication';
31
31
  import { AbstractAdapter, MockAdapter, BackendError, Query, QueryMetaType, QueryResultType, Filter, Filters, Limits, Sorting, SortAndLimit } from './backends';
32
32
  import { BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError } from './common/ResourcesErrors';
33
- import { StorageParameters, StorageParametersKeys } from './Storage';
34
- import { AbstractStorageAdapter } from './storages/AbstractStorageAdapter';
35
- import { FileType } from './storages/types/FileType';
36
- import { BlobType } from './storages/types/BlobType';
37
- import { BlobMediaType } from './storages/types/BlobMediaType';
38
- import { StorageAdapterInterface } from './storages/StorageAdapterInterface';
39
- import { FileResponseLink } from './storages/types/FileResponseLink';
40
- import { FileResponseUrl } from './storages/types/FileResponseUrl';
41
- import { DownloadFileMeta } from './storages/types/DownloadFileMetaType';
42
33
  import { DatabaseTriggerType } from './wrappers/cloud/types/DatabaseTriggerType';
43
34
  import { AbstractCloudWrapper } from './wrappers/cloud/AbstractCloudWrapper';
44
- export { statuses, utils, Core, Property, BaseProperty, BasePropertyType, BooleanProperty, BooleanPropertyType, DateTimeProperty, DateTimePropertyType, EnumProperty, EnumPropertyType, HashProperty, HashPropertyType, ObjectProperty, ObjectPropertyType, StringProperty, StringPropertyType, AbstractAdapter, RepositoryClass, MockAdapter, ObjectUri, DataObjectClass, DataObject, AbstractObject, BaseObject, BaseObjectCore, BaseObjectProperties, AuthAction, AuthParameters, AuthParametersKeys, AuthInterface, AbstractAuthAdapter, AuthenticationError, BackendParameters, BackendParametersKeys, BackendRecordType, BackendAction, BaseRepository, BackendError, Query, QueryMetaType, QueryResultType, Filter, Filters, Limits, Sorting, SortAndLimit, Middleware, InjectMetaMiddleware, InjectKeywordsMiddleware, User, UserType, Proxy, UserRepository, Entity, EntityType, EntityRepository, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError, StorageParameters, StorageParametersKeys, FileType, BlobType, BlobMediaType, StorageAdapterInterface, AbstractStorageAdapter, FileResponseLink, FileResponseUrl, DownloadFileMeta, DatabaseTriggerType, AbstractCloudWrapper, };
35
+ export { statuses, utils, Core, Property, BaseProperty, BasePropertyType, BooleanProperty, BooleanPropertyType, DateTimeProperty, DateTimePropertyType, EnumProperty, EnumPropertyType, HashProperty, HashPropertyType, ObjectProperty, ObjectPropertyType, StringProperty, StringPropertyType, AbstractAdapter, RepositoryClass, MockAdapter, ObjectUri, DataObjectClass, DataObject, AbstractObject, BaseObject, BaseObjectCore, BaseObjectProperties, AuthAction, AuthParameters, AuthParametersKeys, AuthInterface, AbstractAuthAdapter, AuthenticationError, BackendParameters, BackendParametersKeys, BackendRecordType, BackendAction, BaseRepository, BackendError, Query, QueryMetaType, QueryResultType, Filter, Filters, Limits, Sorting, SortAndLimit, Middleware, InjectMetaMiddleware, InjectKeywordsMiddleware, User, UserType, Proxy, UserRepository, Entity, EntityType, EntityRepository, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError, DatabaseTriggerType, AbstractCloudWrapper, };
package/lib/index.js CHANGED
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.AbstractCloudWrapper = exports.AbstractStorageAdapter = exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.EntityRepository = exports.Entity = exports.UserRepository = exports.User = exports.InjectKeywordsMiddleware = exports.InjectMetaMiddleware = exports.SortAndLimit = exports.Sorting = exports.Limits = exports.Filters = exports.Filter = exports.Query = exports.BackendError = exports.BaseRepository = exports.BackendAction = exports.AuthenticationError = exports.AbstractAuthAdapter = exports.AuthAction = exports.BaseObjectProperties = exports.BaseObjectCore = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.MockAdapter = exports.AbstractAdapter = exports.StringProperty = exports.ObjectProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.utils = exports.statuses = void 0;
29
+ exports.AbstractCloudWrapper = exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.EntityRepository = exports.Entity = exports.UserRepository = exports.User = exports.InjectKeywordsMiddleware = exports.InjectMetaMiddleware = exports.SortAndLimit = exports.Sorting = exports.Limits = exports.Filters = exports.Filter = exports.Query = exports.BackendError = exports.BaseRepository = exports.BackendAction = exports.AuthenticationError = exports.AbstractAuthAdapter = exports.AuthAction = exports.BaseObjectProperties = exports.BaseObjectCore = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.MockAdapter = exports.AbstractAdapter = exports.StringProperty = exports.ObjectProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.utils = exports.statuses = void 0;
30
30
  const Core_1 = require("./Core");
31
31
  Object.defineProperty(exports, "Core", { enumerable: true, get: function () { return Core_1.Core; } });
32
32
  const statuses = __importStar(require("./common/statuses"));
@@ -96,7 +96,5 @@ Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: fun
96
96
  Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return ResourcesErrors_1.ForbiddenError; } });
97
97
  Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return ResourcesErrors_1.NotFoundError; } });
98
98
  Object.defineProperty(exports, "GoneError", { enumerable: true, get: function () { return ResourcesErrors_1.GoneError; } });
99
- const AbstractStorageAdapter_1 = require("./storages/AbstractStorageAdapter");
100
- Object.defineProperty(exports, "AbstractStorageAdapter", { enumerable: true, get: function () { return AbstractStorageAdapter_1.AbstractStorageAdapter; } });
101
99
  const AbstractCloudWrapper_1 = require("./wrappers/cloud/AbstractCloudWrapper");
102
100
  Object.defineProperty(exports, "AbstractCloudWrapper", { enumerable: true, get: function () { return AbstractCloudWrapper_1.AbstractCloudWrapper; } });
@@ -31,6 +31,9 @@ class ArrayProperty extends BaseProperty_1.BaseProperty {
31
31
  return this._maxLength;
32
32
  }
33
33
  set(value, setChanged = true) {
34
+ if (value === null) {
35
+ value = [];
36
+ }
34
37
  if (!Array.isArray(value)) {
35
38
  throw new Error(`value ${JSON.stringify(value)} is not an array`);
36
39
  }
@@ -1,5 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractStorageAdapter = void 0;
3
+ exports.AbstractStorageAdapter = exports.DownloadFileMeta = exports.FileResponseUrl = exports.FileResponseLink = exports.BlobMediaType = exports.BlobType = exports.FileType = void 0;
4
+ const FileType_1 = require("./types/FileType");
5
+ Object.defineProperty(exports, "FileType", { enumerable: true, get: function () { return FileType_1.FileType; } });
6
+ const BlobType_1 = require("./types/BlobType");
7
+ Object.defineProperty(exports, "BlobType", { enumerable: true, get: function () { return BlobType_1.BlobType; } });
8
+ const BlobMediaType_1 = require("./types/BlobMediaType");
9
+ Object.defineProperty(exports, "BlobMediaType", { enumerable: true, get: function () { return BlobMediaType_1.BlobMediaType; } });
10
+ const FileResponseLink_1 = require("./types/FileResponseLink");
11
+ Object.defineProperty(exports, "FileResponseLink", { enumerable: true, get: function () { return FileResponseLink_1.FileResponseLink; } });
12
+ const FileResponseUrl_1 = require("./types/FileResponseUrl");
13
+ Object.defineProperty(exports, "FileResponseUrl", { enumerable: true, get: function () { return FileResponseUrl_1.FileResponseUrl; } });
14
+ const DownloadFileMetaType_1 = require("./types/DownloadFileMetaType");
15
+ Object.defineProperty(exports, "DownloadFileMeta", { enumerable: true, get: function () { return DownloadFileMetaType_1.DownloadFileMeta; } });
4
16
  const AbstractStorageAdapter_1 = require("./AbstractStorageAdapter");
5
17
  Object.defineProperty(exports, "AbstractStorageAdapter", { enumerable: true, get: function () { return AbstractStorageAdapter_1.AbstractStorageAdapter; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quatrain/core",
3
- "version": "1.0.0-beta23",
3
+ "version": "1.0.0-beta24",
4
4
  "description": "Core objects for business apps",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",