@hahnpro/hpc-api 2024.4.0-1 → 2025.2.0
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/CHANGELOG.md +1 -1
- package/README.md +502 -6
- package/package.json +7 -4
- package/src/index.js +27 -20
- package/src/index.js.map +1 -0
- package/src/lib/Queue.js +21 -10
- package/src/lib/Queue.js.map +1 -0
- package/src/lib/api-base.js +15 -3
- package/src/lib/api-base.js.map +1 -0
- package/src/lib/api.js +53 -42
- package/src/lib/api.js.map +1 -0
- package/src/lib/asset.interface.js +6 -1
- package/src/lib/asset.interface.js.map +1 -0
- package/src/lib/asset.service.js +45 -20
- package/src/lib/asset.service.js.map +1 -0
- package/src/lib/assettypes.service.js +26 -12
- package/src/lib/assettypes.service.js.map +1 -0
- package/src/lib/content.interface.js +15 -3
- package/src/lib/content.interface.js.map +1 -0
- package/src/lib/content.service.js +62 -32
- package/src/lib/content.service.js.map +1 -0
- package/src/lib/data.interface.js +13 -1
- package/src/lib/data.interface.js.map +1 -0
- package/src/lib/data.service.js +45 -24
- package/src/lib/data.service.js.map +1 -0
- package/src/lib/endpoint.interface.js +6 -1
- package/src/lib/endpoint.interface.js.map +1 -0
- package/src/lib/endpoint.service.js +16 -4
- package/src/lib/endpoint.service.js.map +1 -0
- package/src/lib/events.interface.js +6 -1
- package/src/lib/events.interface.js.map +1 -0
- package/src/lib/events.service.js +16 -4
- package/src/lib/events.service.js.map +1 -0
- package/src/lib/flow-deployment.interface.js +6 -1
- package/src/lib/flow-deployment.interface.js.map +1 -0
- package/src/lib/flow-deployment.service.js +58 -25
- package/src/lib/flow-deployment.service.js.map +1 -0
- package/src/lib/flow-function.interface.js +6 -1
- package/src/lib/flow-function.interface.js.map +1 -0
- package/src/lib/flow-function.service.js +20 -6
- package/src/lib/flow-function.service.js.map +1 -0
- package/src/lib/flow-module.interface.js +6 -1
- package/src/lib/flow-module.interface.js.map +1 -0
- package/src/lib/flow-module.service.js +20 -6
- package/src/lib/flow-module.service.js.map +1 -0
- package/src/lib/flow.interface.js +6 -1
- package/src/lib/flow.interface.js.map +1 -0
- package/src/lib/flow.service.js +27 -13
- package/src/lib/flow.service.js.map +1 -0
- package/src/lib/http.service.js +101 -66
- package/src/lib/http.service.js.map +1 -0
- package/src/lib/label.interface.js +6 -1
- package/src/lib/label.interface.js.map +1 -0
- package/src/lib/label.service.js +17 -5
- package/src/lib/label.service.js.map +1 -0
- package/src/lib/mock/api-base.mock.js +17 -6
- package/src/lib/mock/api-base.mock.js.map +1 -0
- package/src/lib/mock/api.mock.js +204 -193
- package/src/lib/mock/api.mock.js.map +1 -0
- package/src/lib/mock/asset.mock.service.js +55 -38
- package/src/lib/mock/asset.mock.service.js.map +1 -0
- package/src/lib/mock/assetTypes.mock.service.js +45 -27
- package/src/lib/mock/assetTypes.mock.service.js.map +1 -0
- package/src/lib/mock/content.mock.service.js +45 -37
- package/src/lib/mock/content.mock.service.js.map +1 -0
- package/src/lib/mock/data.mock.service.js +49 -40
- package/src/lib/mock/data.mock.service.js.map +1 -0
- package/src/lib/mock/endpoint.mock.service.js +17 -5
- package/src/lib/mock/endpoint.mock.service.js.map +1 -0
- package/src/lib/mock/events.mock.service.js +16 -4
- package/src/lib/mock/events.mock.service.js.map +1 -0
- package/src/lib/mock/flow-deployment.mock.service.js +81 -36
- package/src/lib/mock/flow-deployment.mock.service.js.map +1 -0
- package/src/lib/mock/flow-functions.mock.service.js +33 -20
- package/src/lib/mock/flow-functions.mock.service.js.map +1 -0
- package/src/lib/mock/flow-modules.mock.service.js +18 -6
- package/src/lib/mock/flow-modules.mock.service.js.map +1 -0
- package/src/lib/mock/flow.mock.service.js +44 -29
- package/src/lib/mock/flow.mock.service.js.map +1 -0
- package/src/lib/mock/index.js +18 -11
- package/src/lib/mock/index.js.map +1 -0
- package/src/lib/mock/label.mock.service.js +17 -5
- package/src/lib/mock/label.mock.service.js.map +1 -0
- package/src/lib/mock/notification.mock.service.js +16 -4
- package/src/lib/mock/notification.mock.service.js.map +1 -0
- package/src/lib/mock/secret.mock.service.js +24 -12
- package/src/lib/mock/secret.mock.service.js.map +1 -0
- package/src/lib/mock/task.mock.service.js +24 -12
- package/src/lib/mock/task.mock.service.js.map +1 -0
- package/src/lib/mock/timeseries.mock.service.js +88 -43
- package/src/lib/mock/timeseries.mock.service.js.map +1 -0
- package/src/lib/mock/trash.mock.service.js +28 -14
- package/src/lib/mock/trash.mock.service.js.map +1 -0
- package/src/lib/mock/user.mock.service.js +17 -6
- package/src/lib/mock/user.mock.service.js.map +1 -0
- package/src/lib/mock/vault.mock.service.js +17 -5
- package/src/lib/mock/vault.mock.service.js.map +1 -0
- package/src/lib/notification.interface.js +6 -1
- package/src/lib/notification.interface.js.map +1 -0
- package/src/lib/notification.service.js +16 -4
- package/src/lib/notification.service.js.map +1 -0
- package/src/lib/proxy.service.js +19 -7
- package/src/lib/proxy.service.js.map +1 -0
- package/src/lib/resource.interface.js +6 -1
- package/src/lib/resource.interface.js.map +1 -0
- package/src/lib/schema.interface.js +6 -1
- package/src/lib/schema.interface.js.map +1 -0
- package/src/lib/secret.interface.js +6 -1
- package/src/lib/secret.interface.js.map +1 -0
- package/src/lib/secret.service.js +23 -11
- package/src/lib/secret.service.js.map +1 -0
- package/src/lib/storage.interface.js +6 -1
- package/src/lib/storage.interface.js.map +1 -0
- package/src/lib/task.interface.js +6 -1
- package/src/lib/task.interface.js.map +1 -0
- package/src/lib/task.service.js +23 -11
- package/src/lib/task.service.js.map +1 -0
- package/src/lib/timeseries.interface.js +6 -1
- package/src/lib/timeseries.interface.js.map +1 -0
- package/src/lib/timeseries.service.js +97 -66
- package/src/lib/timeseries.service.js.map +1 -0
- package/src/lib/token-set.js +15 -3
- package/src/lib/token-set.js.map +1 -0
- package/src/lib/trash.service.js +23 -5
- package/src/lib/trash.service.js.map +1 -0
- package/src/lib/user-settings.interface.js +6 -1
- package/src/lib/user-settings.interface.js.map +1 -0
- package/src/lib/user.service.js +18 -7
- package/src/lib/user.service.js.map +1 -0
- package/src/lib/vault.interface.js +6 -1
- package/src/lib/vault.interface.js.map +1 -0
- package/src/lib/vault.service.js +23 -6
- package/src/lib/vault.service.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/asset.mock.service.ts"],"sourcesContent":["import FormData from 'form-data';\nimport { mix } from 'ts-mixer';\n\nimport { Asset, AssetRevision, Attachment, EventCause, EventLevelOverride } from '../asset.interface';\nimport { AssetService } from '../asset.service';\nimport { Paginated, RequestParameter } from '../data.interface';\nimport { APIBaseMock } from './api-base.mock';\nimport { MockAPI } from './api.mock';\nimport { DataMockService } from './data.mock.service';\nimport { TrashMockService } from './trash.mock.service';\n\ninterface BaseService extends DataMockService<Asset>, TrashMockService<Asset> {}\n@mix(DataMockService, TrashMockService)\nclass BaseService extends APIBaseMock<Asset> {}\n\nexport class AssetMockService extends BaseService implements AssetService {\n constructor(\n private api: MockAPI,\n assets: Asset[],\n private revisions: AssetRevision[],\n ) {\n super(assets);\n }\n\n private getAssets(params: RequestParameter, deleted = false) {\n const data = this.data.filter((asset) => !!asset.deletedAt === deleted);\n const page: Paginated<Asset[]> = {\n docs: data,\n limit: params && params.limit ? params.limit : Number.MAX_SAFE_INTEGER,\n total: data.length,\n };\n return page;\n }\n\n addOne(dto: Asset): Promise<Asset> {\n this.revisions.push({ ...dto, originalId: dto.id });\n return super.addOne(dto);\n }\n\n deleteOne(assetId: string, force = false): Promise<Asset> {\n const asset = this.data.find((v) => v.id === assetId);\n if (!asset?.deletedAt && !force) {\n // put asset in paper bin by setting deletedAt prop\n asset.deletedAt = new Date().toISOString();\n return Promise.resolve(asset);\n }\n this.revisions\n .filter((revision) => revision.originalId === assetId)\n .forEach((revision) => {\n const index = this.revisions.indexOf(revision);\n this.revisions.splice(index, 1);\n });\n return super.deleteOne(assetId);\n }\n\n getMany(params?: RequestParameter): Promise<Paginated<Asset[]>> {\n const page = this.getAssets(params, false);\n return Promise.resolve(page);\n }\n\n async updateOne(assetId: string, dto: Asset): Promise<Asset> {\n await super.deleteOne(assetId);\n const asset = await this.addOne(dto);\n return Promise.resolve(asset);\n }\n\n async addAttachment(id: string, form: FormData): Promise<Asset> {\n const asset = this.data.find((v) => v.id === id);\n const content = await this.api.contents.upload(form);\n asset.attachments.push(content.id);\n return Promise.resolve(asset);\n }\n\n public async getAttachments(assetId: string): Promise<Paginated<Attachment[]>> {\n const contents = await this.api.contents.getMany();\n const docs = contents.docs.filter((c) => c.assets?.includes?.(assetId));\n return { docs, total: docs.length, limit: 0 };\n }\n\n public getChildren(assetId: string, params: RequestParameter = {}): Promise<Paginated<Asset[]>> {\n return this.getManyFiltered({ parent: assetId }, params);\n }\n\n public getEventLevelOverride(ids: string[], causes: string[]): Promise<EventLevelOverride> {\n const eventCausesAssets = this.data.filter((v) => v.name.startsWith('hpc-event-causes-'));\n return Promise.resolve(\n ids.reduce(\n (acc, id) => ({\n ...acc,\n [id]: eventCausesAssets.find((v) => v.name.includes(id))?.data ?? {},\n }),\n {},\n ),\n );\n }\n\n public updateEventCausesAsset(id: string, dto: EventCause): Promise<Asset> {\n // simplified id and data\n const asset = this.data.find((v) => v.id === id);\n const eventCausesAsset = this.data.find((v) => v.name === 'hpc-event-causes-' + asset.id);\n if (eventCausesAsset) {\n eventCausesAsset.data[dto.cause] = dto.level;\n return Promise.resolve(eventCausesAsset);\n }\n return this.addOne({\n name: 'hpc-event-causes-' + asset.id,\n type: undefined,\n readPermissions: [],\n readWritePermissions: [],\n data: {\n [dto.cause]: dto.level,\n },\n });\n }\n\n public getRevisions(assetId: string): Promise<Paginated<AssetRevision[]>> {\n const revisions = this.revisions.filter((revision) => revision.originalId === assetId);\n const page: Paginated<AssetRevision[]> = {\n docs: revisions,\n limit: Number.MAX_SAFE_INTEGER,\n total: revisions.length,\n };\n return Promise.resolve(page);\n }\n\n public rollback(assetId: string, revisionId: string): Promise<Asset> {\n const asset = this.revisions.find((revision) => revision.id === revisionId);\n return Promise.resolve(asset);\n }\n\n public deleteRevision(assetId: string, revisionId: string): Promise<any> {\n const index = this.revisions.findIndex((revision) => revision.id === revisionId);\n this.revisions.splice(index, 1);\n return Promise.resolve(revisionId);\n }\n}\n"],"names":["AssetMockService","BaseService","APIBaseMock","constructor","api","assets","revisions","getAssets","params","deleted","data","filter","asset","deletedAt","page","docs","limit","Number","MAX_SAFE_INTEGER","total","length","addOne","dto","push","originalId","id","deleteOne","assetId","force","find","v","Date","toISOString","Promise","resolve","revision","forEach","index","indexOf","splice","getMany","updateOne","addAttachment","form","content","contents","upload","attachments","getAttachments","c","includes","getChildren","getManyFiltered","parent","getEventLevelOverride","ids","causes","eventCausesAssets","name","startsWith","reduce","acc","updateEventCausesAsset","eventCausesAsset","cause","level","type","undefined","readPermissions","readWritePermissions","getRevisions","rollback","revisionId","deleteRevision","findIndex"],"mappings":"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"}
|
|
@@ -1,46 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "AssetTypesMockService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return AssetTypesMockService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ts_decorate = require("@swc/helpers/_/_ts_decorate");
|
|
12
|
+
const _crypto = require("crypto");
|
|
13
|
+
const _tsmixer = require("ts-mixer");
|
|
14
|
+
const _apibasemock = require("./api-base.mock");
|
|
15
|
+
const _datamockservice = require("./data.mock.service");
|
|
16
|
+
const _trashmockservice = require("./trash.mock.service");
|
|
17
|
+
let BaseService = class BaseService extends _apibasemock.APIBaseMock {
|
|
8
18
|
};
|
|
9
|
-
BaseService =
|
|
10
|
-
mix(DataMockService, TrashMockService)
|
|
19
|
+
BaseService = _ts_decorate._([
|
|
20
|
+
(0, _tsmixer.mix)(_datamockservice.DataMockService, _trashmockservice.TrashMockService)
|
|
11
21
|
], BaseService);
|
|
12
|
-
|
|
13
|
-
constructor(assetTypes, revisions)
|
|
22
|
+
let AssetTypesMockService = class AssetTypesMockService extends BaseService {
|
|
23
|
+
constructor(assetTypes, revisions){
|
|
14
24
|
const defaultTyp = {
|
|
15
25
|
name: 'defaultType',
|
|
16
26
|
readPermissions: [],
|
|
17
27
|
readWritePermissions: [],
|
|
18
|
-
typeSchema: {
|
|
19
|
-
|
|
28
|
+
typeSchema: {
|
|
29
|
+
type: 'object'
|
|
30
|
+
},
|
|
31
|
+
uiSchema: {}
|
|
20
32
|
};
|
|
21
|
-
const types = assetTypes.map((type)
|
|
22
|
-
|
|
23
|
-
|
|
33
|
+
const types = assetTypes.map((type)=>typeof type === 'string' ? {
|
|
34
|
+
id: type,
|
|
35
|
+
...defaultTyp
|
|
36
|
+
} : type);
|
|
37
|
+
super(types), this.revisions = revisions;
|
|
24
38
|
}
|
|
25
39
|
getMany(params) {
|
|
26
40
|
const page = this.getItems(params, false);
|
|
27
41
|
return Promise.resolve(page);
|
|
28
42
|
}
|
|
29
43
|
addOne(dto) {
|
|
30
|
-
const id = randomUUID();
|
|
31
|
-
this.revisions.push({
|
|
44
|
+
const id = (0, _crypto.randomUUID)();
|
|
45
|
+
this.revisions.push({
|
|
46
|
+
...dto,
|
|
47
|
+
id,
|
|
48
|
+
originalId: dto.id
|
|
49
|
+
});
|
|
32
50
|
return super.addOne(dto);
|
|
33
51
|
}
|
|
34
52
|
deleteOne(id, force = false) {
|
|
35
|
-
const assettype = this.data.find((v)
|
|
53
|
+
const assettype = this.data.find((v)=>v.id === id);
|
|
36
54
|
if (!assettype?.deletedAt && !force) {
|
|
37
55
|
// put asset in paper bin by setting deletedAt prop
|
|
38
56
|
assettype.deletedAt = new Date().toISOString();
|
|
39
57
|
return Promise.resolve(assettype);
|
|
40
58
|
}
|
|
41
|
-
this.revisions
|
|
42
|
-
.filter((revision) => revision.originalId === id)
|
|
43
|
-
.forEach((revision) => {
|
|
59
|
+
this.revisions.filter((revision)=>revision.originalId === id).forEach((revision)=>{
|
|
44
60
|
const index = this.revisions.indexOf(revision);
|
|
45
61
|
this.revisions.splice(index, 1);
|
|
46
62
|
});
|
|
@@ -52,21 +68,23 @@ export class AssetTypesMockService extends BaseService {
|
|
|
52
68
|
return Promise.resolve(assetType);
|
|
53
69
|
}
|
|
54
70
|
getRevisions(id) {
|
|
55
|
-
const revisions = this.revisions.filter((revision)
|
|
71
|
+
const revisions = this.revisions.filter((revision)=>revision.originalId === id);
|
|
56
72
|
const page = {
|
|
57
73
|
docs: revisions,
|
|
58
74
|
limit: Number.MAX_SAFE_INTEGER,
|
|
59
|
-
total: revisions.length
|
|
75
|
+
total: revisions.length
|
|
60
76
|
};
|
|
61
77
|
return Promise.resolve(page);
|
|
62
78
|
}
|
|
63
79
|
rollback(id, revisionId) {
|
|
64
|
-
const assetType = this.revisions.find((revision)
|
|
80
|
+
const assetType = this.revisions.find((revision)=>revision.id === revisionId);
|
|
65
81
|
return Promise.resolve(assetType);
|
|
66
82
|
}
|
|
67
83
|
deleteRevision(assetId, revisionId) {
|
|
68
|
-
const index = this.revisions.findIndex((revision)
|
|
84
|
+
const index = this.revisions.findIndex((revision)=>revision.id === revisionId);
|
|
69
85
|
this.revisions.splice(index, 1);
|
|
70
86
|
return Promise.resolve(revisionId);
|
|
71
87
|
}
|
|
72
|
-
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=assetTypes.mock.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/assetTypes.mock.service.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\n\nimport { mix } from 'ts-mixer';\n\nimport { AssetType, AssetTypeRevision } from '../asset.interface';\nimport { AssetTypesService } from '../assettypes.service';\nimport { Paginated, RequestParameter } from '../data.interface';\nimport { APIBaseMock } from './api-base.mock';\nimport { DataMockService } from './data.mock.service';\nimport { TrashMockService } from './trash.mock.service';\n\ninterface BaseService extends DataMockService<AssetType>, TrashMockService<AssetType> {}\n@mix(DataMockService, TrashMockService)\nclass BaseService extends APIBaseMock<AssetType> {}\n\nexport class AssetTypesMockService extends BaseService implements AssetTypesService {\n constructor(\n assetTypes: Array<AssetType | string>,\n private revisions: AssetTypeRevision[],\n ) {\n const defaultTyp: AssetType = {\n name: 'defaultType',\n readPermissions: [],\n readWritePermissions: [],\n typeSchema: { type: 'object' },\n uiSchema: {},\n };\n const types = assetTypes.map((type) => (typeof type === 'string' ? { id: type, ...defaultTyp } : type));\n super(types);\n }\n\n getMany(params?: RequestParameter): Promise<Paginated<AssetType[]>> {\n const page = this.getItems(params, false);\n return Promise.resolve(page);\n }\n\n addOne(dto: AssetType): Promise<AssetType> {\n const id = randomUUID();\n this.revisions.push({ ...dto, id, originalId: dto.id });\n return super.addOne(dto);\n }\n\n deleteOne(id: string, force = false): Promise<any> {\n const assettype = this.data.find((v) => v.id === id);\n if (!assettype?.deletedAt && !force) {\n // put asset in paper bin by setting deletedAt prop\n assettype.deletedAt = new Date().toISOString();\n return Promise.resolve(assettype);\n }\n this.revisions\n .filter((revision) => revision.originalId === id)\n .forEach((revision) => {\n const index = this.revisions.indexOf(revision);\n this.revisions.splice(index, 1);\n });\n return super.deleteOne(id);\n }\n\n async updateOne(id: string, dto: AssetType): Promise<AssetType> {\n await super.deleteOne(id);\n const assetType = await this.addOne(dto);\n return Promise.resolve(assetType);\n }\n\n public getRevisions(id: string): Promise<Paginated<AssetTypeRevision[]>> {\n const revisions = this.revisions.filter((revision) => revision.originalId === id);\n const page: Paginated<AssetTypeRevision[]> = {\n docs: revisions,\n limit: Number.MAX_SAFE_INTEGER,\n total: revisions.length,\n };\n return Promise.resolve(page);\n }\n\n public rollback(id: string, revisionId: string): Promise<AssetType> {\n const assetType = this.revisions.find((revision) => revision.id === revisionId);\n return Promise.resolve(assetType);\n }\n\n public deleteRevision(assetId: string, revisionId: string): Promise<any> {\n const index = this.revisions.findIndex((revision) => revision.id === revisionId);\n this.revisions.splice(index, 1);\n return Promise.resolve(revisionId);\n }\n}\n"],"names":["AssetTypesMockService","BaseService","APIBaseMock","constructor","assetTypes","revisions","defaultTyp","name","readPermissions","readWritePermissions","typeSchema","type","uiSchema","types","map","id","getMany","params","page","getItems","Promise","resolve","addOne","dto","randomUUID","push","originalId","deleteOne","force","assettype","data","find","v","deletedAt","Date","toISOString","filter","revision","forEach","index","indexOf","splice","updateOne","assetType","getRevisions","docs","limit","Number","MAX_SAFE_INTEGER","total","length","rollback","revisionId","deleteRevision","assetId","findIndex"],"mappings":";;;;+BAeaA;;;eAAAA;;;;wBAfc;yBAEP;6BAKQ;iCACI;kCACC;AAGjC,IAAA,AACMC,cADN,MACMA,oBAAoBC,wBAAW;AAAa;;;;AAE3C,IAAA,AAAMF,wBAAN,MAAMA,8BAA8BC;IACzCE,YACEC,UAAqC,EACrC,AAAQC,SAA8B,CACtC;QACA,MAAMC,aAAwB;YAC5BC,MAAM;YACNC,iBAAiB,EAAE;YACnBC,sBAAsB,EAAE;YACxBC,YAAY;gBAAEC,MAAM;YAAS;YAC7BC,UAAU,CAAC;QACb;QACA,MAAMC,QAAQT,WAAWU,GAAG,CAAC,CAACH,OAAU,OAAOA,SAAS,WAAW;gBAAEI,IAAIJ;gBAAM,GAAGL,UAAU;YAAC,IAAIK;QACjG,KAAK,CAACE,aAVER,YAAAA;IAWV;IAEAW,QAAQC,MAAyB,EAAmC;QAClE,MAAMC,OAAO,IAAI,CAACC,QAAQ,CAACF,QAAQ;QACnC,OAAOG,QAAQC,OAAO,CAACH;IACzB;IAEAI,OAAOC,GAAc,EAAsB;QACzC,MAAMR,KAAKS,IAAAA,kBAAU;QACrB,IAAI,CAACnB,SAAS,CAACoB,IAAI,CAAC;YAAE,GAAGF,GAAG;YAAER;YAAIW,YAAYH,IAAIR,EAAE;QAAC;QACrD,OAAO,KAAK,CAACO,OAAOC;IACtB;IAEAI,UAAUZ,EAAU,EAAEa,QAAQ,KAAK,EAAgB;QACjD,MAAMC,YAAY,IAAI,CAACC,IAAI,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEjB,EAAE,KAAKA;QACjD,IAAI,CAACc,WAAWI,aAAa,CAACL,OAAO;YACnC,mDAAmD;YACnDC,UAAUI,SAAS,GAAG,IAAIC,OAAOC,WAAW;YAC5C,OAAOf,QAAQC,OAAO,CAACQ;QACzB;QACA,IAAI,CAACxB,SAAS,CACX+B,MAAM,CAAC,CAACC,WAAaA,SAASX,UAAU,KAAKX,IAC7CuB,OAAO,CAAC,CAACD;YACR,MAAME,QAAQ,IAAI,CAAClC,SAAS,CAACmC,OAAO,CAACH;YACrC,IAAI,CAAChC,SAAS,CAACoC,MAAM,CAACF,OAAO;QAC/B;QACF,OAAO,KAAK,CAACZ,UAAUZ;IACzB;IAEA,MAAM2B,UAAU3B,EAAU,EAAEQ,GAAc,EAAsB;QAC9D,MAAM,KAAK,CAACI,UAAUZ;QACtB,MAAM4B,YAAY,MAAM,IAAI,CAACrB,MAAM,CAACC;QACpC,OAAOH,QAAQC,OAAO,CAACsB;IACzB;IAEOC,aAAa7B,EAAU,EAA2C;QACvE,MAAMV,YAAY,IAAI,CAACA,SAAS,CAAC+B,MAAM,CAAC,CAACC,WAAaA,SAASX,UAAU,KAAKX;QAC9E,MAAMG,OAAuC;YAC3C2B,MAAMxC;YACNyC,OAAOC,OAAOC,gBAAgB;YAC9BC,OAAO5C,UAAU6C,MAAM;QACzB;QACA,OAAO9B,QAAQC,OAAO,CAACH;IACzB;IAEOiC,SAASpC,EAAU,EAAEqC,UAAkB,EAAsB;QAClE,MAAMT,YAAY,IAAI,CAACtC,SAAS,CAAC0B,IAAI,CAAC,CAACM,WAAaA,SAAStB,EAAE,KAAKqC;QACpE,OAAOhC,QAAQC,OAAO,CAACsB;IACzB;IAEOU,eAAeC,OAAe,EAAEF,UAAkB,EAAgB;QACvE,MAAMb,QAAQ,IAAI,CAAClC,SAAS,CAACkD,SAAS,CAAC,CAAClB,WAAaA,SAAStB,EAAE,KAAKqC;QACrE,IAAI,CAAC/C,SAAS,CAACoC,MAAM,CAACF,OAAO;QAC7B,OAAOnB,QAAQC,OAAO,CAAC+B;IACzB;AACF"}
|
|
@@ -1,69 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ContentMockService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ContentMockService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ts_decorate = require("@swc/helpers/_/_ts_decorate");
|
|
12
|
+
const _stream = require("stream");
|
|
13
|
+
const _tsmixer = require("ts-mixer");
|
|
14
|
+
const _contentinterface = require("../content.interface");
|
|
15
|
+
const _apibasemock = require("./api-base.mock");
|
|
16
|
+
const _datamockservice = require("./data.mock.service");
|
|
17
|
+
const _trashmockservice = require("./trash.mock.service");
|
|
18
|
+
let BaseService = class BaseService extends _apibasemock.APIBaseMock {
|
|
9
19
|
};
|
|
10
|
-
BaseService =
|
|
11
|
-
mix(DataMockService, TrashMockService)
|
|
20
|
+
BaseService = _ts_decorate._([
|
|
21
|
+
(0, _tsmixer.mix)(_datamockservice.DataMockService, _trashmockservice.TrashMockService)
|
|
12
22
|
], BaseService);
|
|
13
|
-
|
|
14
|
-
constructor(contents, contentData)
|
|
15
|
-
super(contents);
|
|
16
|
-
|
|
17
|
-
for (let i = 0; i < contents.length; i++) {
|
|
23
|
+
let ContentMockService = class ContentMockService extends BaseService {
|
|
24
|
+
constructor(contents, contentData){
|
|
25
|
+
super(contents), this.contentData = new Map();
|
|
26
|
+
for(let i = 0; i < contents.length; i++){
|
|
18
27
|
this.contentData.set(contents[i].id, contentData[i]);
|
|
19
28
|
}
|
|
20
29
|
}
|
|
21
30
|
download(id, second) {
|
|
22
31
|
let returnType;
|
|
23
32
|
if (typeof second === 'boolean' || second == null) {
|
|
24
|
-
returnType = second ? ReturnType.ARRAYBUFFER : ReturnType.BLOB;
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
33
|
+
returnType = second ? _contentinterface.ReturnType.ARRAYBUFFER : _contentinterface.ReturnType.BLOB;
|
|
34
|
+
} else {
|
|
27
35
|
returnType = second;
|
|
28
36
|
}
|
|
29
37
|
const content = this.contentData.get(id);
|
|
30
|
-
switch
|
|
31
|
-
case ReturnType.TEXT:
|
|
38
|
+
switch(returnType){
|
|
39
|
+
case _contentinterface.ReturnType.TEXT:
|
|
32
40
|
if (typeof content === 'string') {
|
|
33
41
|
return Promise.resolve(content);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
42
|
+
} else {
|
|
36
43
|
return Promise.resolve(JSON.stringify(content));
|
|
37
44
|
}
|
|
38
|
-
case ReturnType.JSON:
|
|
45
|
+
case _contentinterface.ReturnType.JSON:
|
|
39
46
|
if (typeof content !== 'string') {
|
|
40
47
|
return Promise.resolve(content);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
48
|
+
} else {
|
|
43
49
|
return Promise.resolve(JSON.parse(content));
|
|
44
50
|
}
|
|
45
|
-
case ReturnType.NODEBUFFER:
|
|
51
|
+
case _contentinterface.ReturnType.NODEBUFFER:
|
|
46
52
|
return Promise.resolve(Buffer.from(this.contentData.get(id)));
|
|
47
|
-
case ReturnType.BLOB:
|
|
53
|
+
case _contentinterface.ReturnType.BLOB:
|
|
48
54
|
if (global.Blob) {
|
|
49
|
-
return Promise.resolve(new Blob([
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
return Promise.resolve(new Blob([
|
|
56
|
+
Buffer.from(this.contentData.get(id)).buffer
|
|
57
|
+
]));
|
|
58
|
+
} else {
|
|
52
59
|
if (typeof content === 'string') {
|
|
53
60
|
return Promise.resolve(content);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
61
|
+
} else {
|
|
56
62
|
return Promise.resolve(JSON.stringify(content));
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
|
-
case ReturnType.ARRAYBUFFER:
|
|
65
|
+
case _contentinterface.ReturnType.ARRAYBUFFER:
|
|
60
66
|
return Promise.resolve(Buffer.from(this.contentData.get(id)).buffer);
|
|
61
|
-
case ReturnType.NODESTREAM:
|
|
62
|
-
return Promise.resolve(Readable.from(this.contentData.get(id)));
|
|
67
|
+
case _contentinterface.ReturnType.NODESTREAM:
|
|
68
|
+
return Promise.resolve(_stream.Readable.from(this.contentData.get(id)));
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
deleteOne(contentId, force = false) {
|
|
66
|
-
const content = this.data.find((v)
|
|
72
|
+
const content = this.data.find((v)=>v.id === contentId);
|
|
67
73
|
if (!content?.deletedAt && !force) {
|
|
68
74
|
// put content in paper bin by setting deletedAt prop
|
|
69
75
|
content.deletedAt = new Date().toISOString();
|
|
@@ -78,4 +84,6 @@ export class ContentMockService extends BaseService {
|
|
|
78
84
|
upload(form) {
|
|
79
85
|
return Promise.resolve(undefined);
|
|
80
86
|
}
|
|
81
|
-
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=content.mock.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/content.mock.service.ts"],"sourcesContent":["import { Readable } from 'stream';\n\nimport FormData from 'form-data';\nimport { mix } from 'ts-mixer';\n\nimport { Content, ReturnType } from '../content.interface';\nimport { ContentService } from '../content.service';\nimport { Paginated, RequestParameter } from '../data.interface';\nimport { APIBaseMock } from './api-base.mock';\nimport { DataMockService } from './data.mock.service';\nimport { TrashMockService } from './trash.mock.service';\n\ninterface BaseService extends DataMockService<Content>, TrashMockService<Content> {}\n@mix(DataMockService, TrashMockService)\nclass BaseService extends APIBaseMock<Content> {}\n\nexport class ContentMockService extends BaseService implements ContentService {\n private contentData: Map<string, any> = new Map();\n\n constructor(contents: Content[], contentData: any[]) {\n super(contents);\n for (let i = 0; i < contents.length; i++) {\n this.contentData.set(contents[i].id, contentData[i]);\n }\n }\n\n download(id: string, raw?: boolean): Promise<Blob | ArrayBuffer>;\n\n download(id: string, returnType: ReturnType.TEXT): Promise<string>;\n download(id: string, returnType: ReturnType.JSON): Promise<Record<string, unknown>>;\n download(id: string, returnType: ReturnType.NODEBUFFER): Promise<Buffer>;\n download(id: string, returnType: ReturnType.BLOB): Promise<Blob>;\n download(id: string, returnType: ReturnType.ARRAYBUFFER): Promise<ArrayBuffer>;\n download(id: string, returnType: ReturnType.NODESTREAM): Promise<Readable>;\n\n download(id: string, second: any): Promise<string | Record<string, unknown> | Buffer | Blob | ArrayBuffer | Readable> {\n let returnType: ReturnType;\n if (typeof second === 'boolean' || second == null) {\n returnType = second ? ReturnType.ARRAYBUFFER : ReturnType.BLOB;\n } else {\n returnType = second;\n }\n const content = this.contentData.get(id);\n switch (returnType) {\n case ReturnType.TEXT:\n if (typeof content === 'string') {\n return Promise.resolve(content);\n } else {\n return Promise.resolve(JSON.stringify(content));\n }\n case ReturnType.JSON:\n if (typeof content !== 'string') {\n return Promise.resolve(content);\n } else {\n return Promise.resolve(JSON.parse(content));\n }\n case ReturnType.NODEBUFFER:\n return Promise.resolve(Buffer.from(this.contentData.get(id)));\n case ReturnType.BLOB:\n if (global.Blob) {\n return Promise.resolve(new Blob([Buffer.from(this.contentData.get(id)).buffer]));\n } else {\n if (typeof content === 'string') {\n return Promise.resolve(content);\n } else {\n return Promise.resolve(JSON.stringify(content));\n }\n }\n case ReturnType.ARRAYBUFFER:\n return Promise.resolve(Buffer.from(this.contentData.get(id)).buffer);\n case ReturnType.NODESTREAM:\n return Promise.resolve(Readable.from(this.contentData.get(id)));\n }\n }\n\n deleteOne(contentId: string, force = false): Promise<Content> {\n const content = this.data.find((v) => v.id === contentId);\n if (!content?.deletedAt && !force) {\n // put content in paper bin by setting deletedAt prop\n content.deletedAt = new Date().toISOString();\n return Promise.resolve(content);\n }\n return super.deleteOne(contentId);\n }\n\n getMany(params?: RequestParameter): Promise<Paginated<Content[]>> {\n const page = this.getItems(params, false);\n return Promise.resolve(page);\n }\n\n upload(form: FormData): Promise<Content> {\n return Promise.resolve(undefined);\n }\n}\n"],"names":["ContentMockService","BaseService","APIBaseMock","constructor","contents","contentData","Map","i","length","set","id","download","second","returnType","ReturnType","ARRAYBUFFER","BLOB","content","get","TEXT","Promise","resolve","JSON","stringify","parse","NODEBUFFER","Buffer","from","global","Blob","buffer","NODESTREAM","Readable","deleteOne","contentId","force","data","find","v","deletedAt","Date","toISOString","getMany","params","page","getItems","upload","form","undefined"],"mappings":"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"}
|
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "DataMockService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return DataMockService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _datainterface = require("../data.interface");
|
|
12
|
+
const _dataservice = require("../data.service");
|
|
13
|
+
let DataMockService = class DataMockService extends _dataservice.DataService {
|
|
14
|
+
constructor(){
|
|
15
|
+
super(null, null), this.data = [];
|
|
7
16
|
}
|
|
8
17
|
async addMany(dto) {
|
|
9
|
-
const map = dto.map((v)
|
|
18
|
+
const map = dto.map((v)=>this.addOne(v));
|
|
10
19
|
return Promise.all(map);
|
|
11
20
|
}
|
|
12
21
|
addOne(dto) {
|
|
@@ -14,7 +23,7 @@ export class DataMockService extends DataService {
|
|
|
14
23
|
return Promise.resolve(dto);
|
|
15
24
|
}
|
|
16
25
|
deleteOne(id) {
|
|
17
|
-
const index = this.data.findIndex((v)
|
|
26
|
+
const index = this.data.findIndex((v)=>v.id === id);
|
|
18
27
|
const obj = this.data[index];
|
|
19
28
|
this.data.splice(index, 1);
|
|
20
29
|
return Promise.resolve(obj);
|
|
@@ -27,48 +36,42 @@ export class DataMockService extends DataService {
|
|
|
27
36
|
const page = {
|
|
28
37
|
docs: data,
|
|
29
38
|
limit: params?.limit ?? Number.MAX_SAFE_INTEGER,
|
|
30
|
-
total: data.length
|
|
39
|
+
total: data.length
|
|
31
40
|
};
|
|
32
41
|
return Promise.resolve(page);
|
|
33
42
|
}
|
|
34
43
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
async getManyFiltered(filter, params = {}) {
|
|
44
|
+
* Filters the elements by the passed properties. The object with these properties has to be of the form:
|
|
45
|
+
* {
|
|
46
|
+
* propertyName: string | string[] | { from: Date, to: Date },
|
|
47
|
+
* ...
|
|
48
|
+
* }.
|
|
49
|
+
* @param filter The Object with the properties to filter by.
|
|
50
|
+
* @param params Other request parameters.
|
|
51
|
+
*/ async getManyFiltered(filter, params = {}) {
|
|
44
52
|
const paginated = await this.getMany(params);
|
|
45
|
-
const newData = paginated.docs.filter((doc)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(Array.isArray(filterValue) && filterValue.includes(docValue)) ||
|
|
58
|
-
(Array.isArray(docValue) && docValue.includes(filterValue)) ||
|
|
59
|
-
docValue === filterValue // string
|
|
60
|
-
);
|
|
61
|
-
}));
|
|
53
|
+
const newData = paginated.docs.filter((doc)=>Object.entries(filter).every(([filterKey, filterValue])=>{
|
|
54
|
+
const docValue = doc[filterKey];
|
|
55
|
+
if (!docValue) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return typeof docValue === 'object' && (filterValue === docValue.name || filterValue === docValue.id) || // data object
|
|
59
|
+
typeof filterValue === 'object' && (0, _datainterface.instanceOfTimePeriod)(filterValue) && new Date(docValue) >= filterValue.from && new Date(docValue) <= filterValue.to || // TimePeriod
|
|
60
|
+
docValue instanceof Date && filterValue === docValue.toISOString() || // Date
|
|
61
|
+
Array.isArray(filterValue) && Array.isArray(docValue) && filterValue.some((fv)=>docValue.includes(fv)) || // string[]
|
|
62
|
+
Array.isArray(filterValue) && filterValue.includes(docValue) || Array.isArray(docValue) && docValue.includes(filterValue) || docValue === filterValue // string
|
|
63
|
+
;
|
|
64
|
+
}));
|
|
62
65
|
const page = {
|
|
63
66
|
docs: newData,
|
|
64
67
|
limit: paginated.limit ?? Number.MAX_SAFE_INTEGER,
|
|
65
|
-
total: newData.length
|
|
68
|
+
total: newData.length
|
|
66
69
|
};
|
|
67
70
|
return Promise.resolve(page);
|
|
68
71
|
}
|
|
69
72
|
getOne(id, options = {}) {
|
|
70
73
|
const idKey = options.idKey || 'id';
|
|
71
|
-
const t = this.data.find((v)
|
|
74
|
+
const t = this.data.find((v)=>v[idKey] === id);
|
|
72
75
|
return Promise.resolve(t);
|
|
73
76
|
}
|
|
74
77
|
async updateOne(id, dto) {
|
|
@@ -79,10 +82,14 @@ export class DataMockService extends DataService {
|
|
|
79
82
|
sortData(data, sort) {
|
|
80
83
|
const descending = sort.startsWith('-');
|
|
81
84
|
const sortString = descending ? sort.substring(1) : sort;
|
|
82
|
-
const compareFn = (a, b)
|
|
85
|
+
const compareFn = (a, b)=>{
|
|
83
86
|
let aValue = a[sortString];
|
|
84
87
|
let bValue = b[sortString];
|
|
85
|
-
if ([
|
|
88
|
+
if ([
|
|
89
|
+
'updatedAt',
|
|
90
|
+
'createdAt',
|
|
91
|
+
'deletedAt'
|
|
92
|
+
].includes(sortString)) {
|
|
86
93
|
aValue = new Date(a[sortString]).valueOf();
|
|
87
94
|
bValue = new Date(b[sortString]).valueOf();
|
|
88
95
|
}
|
|
@@ -90,4 +97,6 @@ export class DataMockService extends DataService {
|
|
|
90
97
|
};
|
|
91
98
|
data.sort(compareFn);
|
|
92
99
|
}
|
|
93
|
-
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=data.mock.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/data.mock.service.ts"],"sourcesContent":["import { Filter, instanceOfTimePeriod, Paginated, RequestParameter } from '../data.interface';\nimport { DataService } from '../data.service';\nimport { APIBaseMock } from './api-base.mock';\n\nexport class DataMockService<T> extends DataService<T> implements APIBaseMock<T> {\n data: T[] = [];\n\n constructor() {\n super(null, null);\n }\n\n async addMany(dto: any[]): Promise<T[]> {\n const map = dto.map((v) => this.addOne(v));\n return Promise.all(map);\n }\n\n addOne(dto: any): Promise<T> {\n this.data.push(dto as T);\n return Promise.resolve(dto as T);\n }\n\n deleteOne(id: string): Promise<any> {\n const index = this.data.findIndex((v: any) => v.id === id);\n const obj = this.data[index];\n this.data.splice(index, 1);\n return Promise.resolve(obj);\n }\n\n getMany(params?: RequestParameter): Promise<Paginated<T[]>> {\n const data = this.data;\n if (params?.sort) {\n this.sortData(data, params.sort);\n }\n const page: Paginated<T[]> = {\n docs: data,\n limit: params?.limit ?? Number.MAX_SAFE_INTEGER,\n total: data.length,\n };\n return Promise.resolve(page);\n }\n\n /**\n * Filters the elements by the passed properties. The object with these properties has to be of the form:\n * {\n * propertyName: string | string[] | { from: Date, to: Date },\n * ...\n * }.\n * @param filter The Object with the properties to filter by.\n * @param params Other request parameters.\n */\n async getManyFiltered(filter: Filter, params: RequestParameter = {}): Promise<Paginated<T[]>> {\n const paginated = await this.getMany(params);\n const newData = paginated.docs.filter((doc: any) =>\n Object.entries(filter).every(([filterKey, filterValue]): boolean => {\n const docValue = doc[filterKey];\n\n if (!docValue) {\n return false;\n }\n\n return (\n (typeof docValue === 'object' && (filterValue === docValue.name || filterValue === docValue.id)) || // data object\n (typeof filterValue === 'object' &&\n instanceOfTimePeriod(filterValue) &&\n new Date(docValue) >= filterValue.from &&\n new Date(docValue) <= filterValue.to) || // TimePeriod\n (docValue instanceof Date && filterValue === docValue.toISOString()) || // Date\n (Array.isArray(filterValue) && Array.isArray(docValue) && filterValue.some((fv) => docValue.includes(fv))) || // string[]\n (Array.isArray(filterValue) && filterValue.includes(docValue)) ||\n (Array.isArray(docValue) && docValue.includes(filterValue)) ||\n docValue === filterValue // string\n );\n }),\n );\n const page: Paginated<T[]> = {\n docs: newData,\n limit: paginated.limit ?? Number.MAX_SAFE_INTEGER,\n total: newData.length,\n };\n return Promise.resolve(page);\n }\n\n getOne(id: string, options: Record<string, any> & { idKey?: string } = {}): Promise<T> {\n const idKey = options.idKey || 'id';\n const t = this.data.find((v: any) => v[idKey] === id);\n return Promise.resolve(t);\n }\n\n async updateOne(id: string, dto: any): Promise<T> {\n await this.deleteOne(id);\n const t = await this.addOne(dto);\n return Promise.resolve(t);\n }\n\n private sortData(data: T[], sort: string) {\n const descending = sort.startsWith('-');\n const sortString = descending ? sort.substring(1) : sort;\n const compareFn = (a: any, b: any) => {\n let aValue = a[sortString];\n let bValue = b[sortString];\n if (['updatedAt', 'createdAt', 'deletedAt'].includes(sortString)) {\n aValue = new Date(a[sortString]).valueOf();\n bValue = new Date(b[sortString]).valueOf();\n }\n return descending ? bValue - aValue : aValue - bValue;\n };\n data.sort(compareFn);\n }\n}\n"],"names":["DataMockService","DataService","constructor","data","addMany","dto","map","v","addOne","Promise","all","push","resolve","deleteOne","id","index","findIndex","obj","splice","getMany","params","sort","sortData","page","docs","limit","Number","MAX_SAFE_INTEGER","total","length","getManyFiltered","filter","paginated","newData","doc","Object","entries","every","filterKey","filterValue","docValue","name","instanceOfTimePeriod","Date","from","to","toISOString","Array","isArray","some","fv","includes","getOne","options","idKey","t","find","updateOne","descending","startsWith","sortString","substring","compareFn","a","b","aValue","bValue","valueOf"],"mappings":"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"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EndpointMockService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EndpointMockService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _datamockservice = require("./data.mock.service");
|
|
12
|
+
let EndpointMockService = class EndpointMockService extends _datamockservice.DataMockService {
|
|
13
|
+
constructor(endpoints){
|
|
4
14
|
super();
|
|
5
15
|
this.data = endpoints;
|
|
6
16
|
}
|
|
@@ -14,7 +24,9 @@ export class EndpointMockService extends DataMockService {
|
|
|
14
24
|
group: 'test',
|
|
15
25
|
data: 'OK',
|
|
16
26
|
createdAt: new Date().toISOString(),
|
|
17
|
-
updatedAt: new Date().toISOString()
|
|
27
|
+
updatedAt: new Date().toISOString()
|
|
18
28
|
});
|
|
19
29
|
}
|
|
20
|
-
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=endpoint.mock.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/endpoint.mock.service.ts"],"sourcesContent":["import { Endpoint, NotificationPayload } from '../endpoint.interface';\nimport { EndpointService } from '../endpoint.service';\nimport { DataMockService } from './data.mock.service';\n\nexport class EndpointMockService extends DataMockService<Endpoint> implements EndpointService {\n constructor(endpoints: Endpoint[]) {\n super();\n this.data = endpoints;\n }\n\n sendNotification(endpointId: string, payload: NotificationPayload) {\n return Promise.resolve();\n }\n\n readLastLogByGroup(endpointId: string, group: string) {\n return Promise.resolve({\n id: 'endpointlog1',\n endpoint: '',\n group: 'test',\n data: 'OK',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n });\n }\n}\n"],"names":["EndpointMockService","DataMockService","constructor","endpoints","data","sendNotification","endpointId","payload","Promise","resolve","readLastLogByGroup","group","id","endpoint","createdAt","Date","toISOString","updatedAt"],"mappings":";;;;+BAIaA;;;eAAAA;;;iCAFmB;AAEzB,IAAA,AAAMA,sBAAN,MAAMA,4BAA4BC,gCAAe;IACtDC,YAAYC,SAAqB,CAAE;QACjC,KAAK;QACL,IAAI,CAACC,IAAI,GAAGD;IACd;IAEAE,iBAAiBC,UAAkB,EAAEC,OAA4B,EAAE;QACjE,OAAOC,QAAQC,OAAO;IACxB;IAEAC,mBAAmBJ,UAAkB,EAAEK,KAAa,EAAE;QACpD,OAAOH,QAAQC,OAAO,CAAC;YACrBG,IAAI;YACJC,UAAU;YACVF,OAAO;YACPP,MAAM;YACNU,WAAW,IAAIC,OAAOC,WAAW;YACjCC,WAAW,IAAIF,OAAOC,WAAW;QACnC;IACF;AACF"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EventsMockService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EventsMockService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _datamockservice = require("./data.mock.service");
|
|
12
|
+
let EventsMockService = class EventsMockService extends _datamockservice.DataMockService {
|
|
13
|
+
constructor(events){
|
|
4
14
|
super();
|
|
5
15
|
this.data = events;
|
|
6
16
|
}
|
|
7
17
|
getLastEventByAssetAndGroup(assetId, group) {
|
|
8
18
|
return Promise.resolve(this.data[this.data.length - 1]);
|
|
9
19
|
}
|
|
10
|
-
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=events.mock.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../lib/hpc-api/src/lib/mock/events.mock.service.ts"],"sourcesContent":["import { Event } from '../events.interface';\nimport { EventsService } from '../events.service';\nimport { DataMockService } from './data.mock.service';\n\nexport class EventsMockService extends DataMockService<Event> implements EventsService {\n constructor(events: Event[]) {\n super();\n this.data = events;\n }\n\n getLastEventByAssetAndGroup(assetId: string, group: string): Promise<Event> {\n return Promise.resolve(this.data[this.data.length - 1]);\n }\n}\n"],"names":["EventsMockService","DataMockService","constructor","events","data","getLastEventByAssetAndGroup","assetId","group","Promise","resolve","length"],"mappings":";;;;+BAIaA;;;eAAAA;;;iCAFmB;AAEzB,IAAA,AAAMA,oBAAN,MAAMA,0BAA0BC,gCAAe;IACpDC,YAAYC,MAAe,CAAE;QAC3B,KAAK;QACL,IAAI,CAACC,IAAI,GAAGD;IACd;IAEAE,4BAA4BC,OAAe,EAAEC,KAAa,EAAkB;QAC1E,OAAOC,QAAQC,OAAO,CAAC,IAAI,CAACL,IAAI,CAAC,IAAI,CAACA,IAAI,CAACM,MAAM,GAAG,EAAE;IACxD;AACF"}
|