@webda/core 1.2.1 → 1.6.0-beta.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/lib/application.d.ts +3 -0
- package/lib/application.js +26 -22
- package/lib/application.js.map +1 -1
- package/lib/application.spec.js +185 -2
- package/lib/application.spec.js.map +1 -1
- package/lib/core.d.ts +62 -6
- package/lib/core.js +127 -86
- package/lib/core.js.map +1 -1
- package/lib/core.spec.js +151 -6
- package/lib/core.spec.js.map +1 -1
- package/lib/index.d.ts +4 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/models/aclmodel.d.ts +42 -3
- package/lib/models/aclmodel.js +58 -3
- package/lib/models/aclmodel.js.map +1 -1
- package/lib/models/aclmodel.spec.js +46 -0
- package/lib/models/aclmodel.spec.js.map +1 -1
- package/lib/models/coremodel.d.ts +58 -10
- package/lib/models/coremodel.js +39 -32
- package/lib/models/coremodel.js.map +1 -1
- package/lib/models/coremodel.spec.js +68 -6
- package/lib/models/coremodel.spec.js.map +1 -1
- package/lib/models/ident.d.ts +8 -2
- package/lib/models/ident.js.map +1 -1
- package/lib/models/ident.spec.js +16 -0
- package/lib/models/ident.spec.js.map +1 -1
- package/lib/models/ownermodel.d.ts +1 -1
- package/lib/models/ownermodel.js.map +1 -1
- package/lib/models/ownermodel.spec.js +22 -19
- package/lib/models/ownermodel.spec.js.map +1 -1
- package/lib/models/user.d.ts +2 -0
- package/lib/models/user.js +4 -2
- package/lib/models/user.js.map +1 -1
- package/lib/models/user.spec.js +9 -2
- package/lib/models/user.spec.js.map +1 -1
- package/lib/queues/filequeue.d.ts +63 -0
- package/lib/queues/filequeue.js +161 -0
- package/lib/queues/filequeue.js.map +1 -0
- package/lib/queues/filequeue.spec.d.ts +1 -0
- package/lib/queues/filequeue.spec.js +90 -0
- package/lib/queues/filequeue.spec.js.map +1 -0
- package/lib/queues/memoryqueue.d.ts +18 -4
- package/lib/queues/memoryqueue.js +20 -13
- package/lib/queues/memoryqueue.js.map +1 -1
- package/lib/queues/memoryqueue.spec.js +142 -39
- package/lib/queues/memoryqueue.spec.js.map +1 -1
- package/lib/queues/pubsubservice.d.ts +27 -0
- package/lib/queues/pubsubservice.js +21 -0
- package/lib/queues/pubsubservice.js.map +1 -0
- package/lib/queues/queue.spec.js +16 -7
- package/lib/queues/queue.spec.js.map +1 -1
- package/lib/queues/queueservice.d.ts +108 -13
- package/lib/queues/queueservice.js +100 -36
- package/lib/queues/queueservice.js.map +1 -1
- package/lib/router.js +4 -6
- package/lib/router.js.map +1 -1
- package/lib/router.spec.js +27 -2
- package/lib/router.spec.js.map +1 -1
- package/lib/services/asyncevents.d.ts +110 -5
- package/lib/services/asyncevents.js +134 -39
- package/lib/services/asyncevents.js.map +1 -1
- package/lib/services/asyncevents.spec.js +58 -4
- package/lib/services/asyncevents.spec.js.map +1 -1
- package/lib/services/authentication.d.ts +57 -5
- package/lib/services/authentication.js +93 -84
- package/lib/services/authentication.js.map +1 -1
- package/lib/services/authentication.spec.js +118 -82
- package/lib/services/authentication.spec.js.map +1 -1
- package/lib/services/binary.d.ts +175 -48
- package/lib/services/binary.js +205 -170
- package/lib/services/binary.js.map +1 -1
- package/lib/services/binary.spec.d.ts +22 -3
- package/lib/services/binary.spec.js +327 -22
- package/lib/services/binary.spec.js.map +1 -1
- package/lib/services/configuration.d.ts +94 -13
- package/lib/services/configuration.js +98 -28
- package/lib/services/configuration.js.map +1 -1
- package/lib/services/configuration.spec.js +40 -1
- package/lib/services/configuration.spec.js.map +1 -1
- package/lib/services/cron.d.ts +4 -4
- package/lib/services/cron.js +37 -53
- package/lib/services/cron.js.map +1 -1
- package/lib/services/cron.spec.d.ts +1 -0
- package/lib/services/cron.spec.js +76 -0
- package/lib/services/cron.spec.js.map +1 -0
- package/lib/services/debugmailer.spec.js +18 -4
- package/lib/services/debugmailer.spec.js.map +1 -1
- package/lib/services/echo.js +22 -13
- package/lib/services/echo.js.map +1 -1
- package/lib/services/echo.spec.d.ts +1 -0
- package/lib/services/echo.spec.js +52 -0
- package/lib/services/echo.spec.js.map +1 -0
- package/lib/services/filebinary.d.ts +16 -9
- package/lib/services/filebinary.js +58 -73
- package/lib/services/filebinary.js.map +1 -1
- package/lib/services/filebinary.spec.d.ts +8 -1
- package/lib/services/filebinary.spec.js +133 -7
- package/lib/services/filebinary.spec.js.map +1 -1
- package/lib/services/fileconfiguration.d.ts +9 -3
- package/lib/services/fileconfiguration.js +13 -6
- package/lib/services/fileconfiguration.js.map +1 -1
- package/lib/services/fileconfiguration.spec.js +100 -5
- package/lib/services/fileconfiguration.spec.js.map +1 -1
- package/lib/services/kubernetesconfiguration.d.ts +8 -2
- package/lib/services/kubernetesconfiguration.js +16 -5
- package/lib/services/kubernetesconfiguration.js.map +1 -1
- package/lib/services/kubernetesconfiguration.spec.js +53 -16
- package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
- package/lib/services/mailer.d.ts +11 -2
- package/lib/services/mailer.js +28 -34
- package/lib/services/mailer.js.map +1 -1
- package/lib/services/mailer.spec.js +69 -23
- package/lib/services/mailer.spec.js.map +1 -1
- package/lib/services/oauth.d.ts +5 -2
- package/lib/services/oauth.js +22 -8
- package/lib/services/oauth.js.map +1 -1
- package/lib/services/oauth.spec.js +33 -3
- package/lib/services/oauth.spec.js.map +1 -1
- package/lib/services/resource.spec.js +39 -2
- package/lib/services/resource.spec.js.map +1 -1
- package/lib/services/service.d.ts +16 -0
- package/lib/services/service.js +47 -6
- package/lib/services/service.js.map +1 -1
- package/lib/services/service.spec.d.ts +1 -0
- package/lib/services/service.spec.js +119 -0
- package/lib/services/service.spec.js.map +1 -0
- package/lib/stores/aggregator.d.ts +43 -0
- package/lib/stores/aggregator.js +106 -0
- package/lib/stores/aggregator.js.map +1 -0
- package/lib/stores/file.d.ts +49 -11
- package/lib/stores/file.js +84 -81
- package/lib/stores/file.js.map +1 -1
- package/lib/stores/file.spec.d.ts +6 -1
- package/lib/stores/file.spec.js +134 -9
- package/lib/stores/file.spec.js.map +1 -1
- package/lib/stores/mapper.d.ts +151 -0
- package/lib/stores/mapper.js +294 -0
- package/lib/stores/mapper.js.map +1 -0
- package/lib/stores/mapper.spec.d.ts +1 -0
- package/lib/stores/mapper.spec.js +55 -0
- package/lib/stores/mapper.spec.js.map +1 -0
- package/lib/stores/memory.d.ts +52 -7
- package/lib/stores/memory.js +71 -33
- package/lib/stores/memory.js.map +1 -1
- package/lib/stores/memory.spec.d.ts +6 -1
- package/lib/stores/memory.spec.js +65 -4
- package/lib/stores/memory.spec.js.map +1 -1
- package/lib/stores/store.d.ts +263 -126
- package/lib/stores/store.js +285 -493
- package/lib/stores/store.js.map +1 -1
- package/lib/stores/store.spec.d.ts +20 -0
- package/lib/stores/store.spec.js +242 -18
- package/lib/stores/store.spec.js.map +1 -1
- package/lib/test.d.ts +1 -7
- package/lib/test.js +3 -12
- package/lib/test.js.map +1 -1
- package/lib/utils/abstractdeployer.spec.d.ts +1 -0
- package/lib/utils/abstractdeployer.spec.js +23 -0
- package/lib/utils/abstractdeployer.spec.js.map +1 -0
- package/lib/utils/context.d.ts +25 -2
- package/lib/utils/context.js +33 -12
- package/lib/utils/context.js.map +1 -1
- package/lib/utils/context.spec.js +81 -11
- package/lib/utils/context.spec.js.map +1 -1
- package/lib/utils/cookie.d.ts +12 -0
- package/lib/utils/cookie.js +13 -1
- package/lib/utils/cookie.js.map +1 -1
- package/lib/utils/cookie.spec.js +42 -11
- package/lib/utils/cookie.spec.js.map +1 -1
- package/lib/utils/logger.d.ts +23 -4
- package/lib/utils/logger.js +29 -6
- package/lib/utils/logger.js.map +1 -1
- package/lib/utils/logger.spec.js +8 -0
- package/lib/utils/logger.spec.js.map +1 -1
- package/lib/utils/serializers.d.ts +5 -5
- package/lib/utils/serializers.js +10 -10
- package/lib/utils/serializers.js.map +1 -1
- package/lib/utils/serializers.spec.js +41 -16
- package/lib/utils/serializers.spec.js.map +1 -1
- package/lib/utils/waiter.d.ts +59 -1
- package/lib/utils/waiter.js +86 -3
- package/lib/utils/waiter.js.map +1 -1
- package/lib/utils/waiter.spec.js +48 -4
- package/lib/utils/waiter.spec.js.map +1 -1
- package/package.json +16 -11
- package/test/badapp/package.json +4 -0
- package/test/badapp/webda.config.json +1 -0
- package/test/cachedapp/webda.config.json +7 -0
- package/test/config-file-no-reload.json +70 -0
- package/test/config-file-reload.json +7 -1
- package/test/config-kube-reload.json +7 -1
- package/test/config.json +45 -21
- package/test/config.old-default.json +0 -16
- package/test/config.old.json +0 -16
- package/test/deployments/invalid.json +1 -0
- package/test/moddas/fakeservice.js +5 -0
- package/test/models/ident.js +10 -14
- package/test/models/task.js +2 -4
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const mocha_1 = require("@testdeck/mocha");
|
|
19
|
+
const test_1 = require("../test");
|
|
20
|
+
const assert = require("assert");
|
|
21
|
+
const __1 = require("..");
|
|
22
|
+
const sinon = require("sinon");
|
|
23
|
+
class FakeService extends __1.Service {
|
|
24
|
+
}
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, __1.Inject)("Authentication2", true)
|
|
27
|
+
], FakeService.prototype, "serv", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, __1.Inject)("bean", "Authentication", true)
|
|
30
|
+
], FakeService.prototype, "serv2", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, __1.Inject)("params:bean", undefined, true)
|
|
33
|
+
], FakeService.prototype, "serv3", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, __1.Inject)("params:bean", undefined, false)
|
|
36
|
+
], FakeService.prototype, "serv4", void 0);
|
|
37
|
+
class FakeService2 extends __1.Service {
|
|
38
|
+
}
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, __1.Inject)("Authentication2")
|
|
41
|
+
], FakeService2.prototype, "serv", void 0);
|
|
42
|
+
let ServiceTest = class ServiceTest extends test_1.WebdaTest {
|
|
43
|
+
injector() {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
let service = new FakeService(this.webda, "plop");
|
|
46
|
+
assert.throws(() => service.resolve(), /Injector did not found bean 'undefined'\(parameter:bean\) for 'plop'/);
|
|
47
|
+
service = new FakeService(this.webda, "plop", { bean: "Authentication" });
|
|
48
|
+
service.resolve();
|
|
49
|
+
assert.strictEqual(service.serv, undefined);
|
|
50
|
+
assert.throws(() => new FakeService2(this.webda, "kf").resolve(), /Injector did not found bean 'Authentication2' for 'kf'/);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
clean() {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
let service = new FakeService(this.webda, "plop");
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
const origin = global.it;
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
global.it = undefined;
|
|
60
|
+
assert.rejects(() => service.__clean(), /Only for test purpose/);
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
global.it = origin;
|
|
63
|
+
yield service.__clean();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
toPublicJSON() {
|
|
67
|
+
let service = new FakeService(this.webda, "plop", {});
|
|
68
|
+
let stub = sinon.stub(this.webda, "toPublicJSON").callsFake(() => "plop");
|
|
69
|
+
try {
|
|
70
|
+
assert.strictEqual(service.toPublicJSON({ l: "p" }), "plop");
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
stub.restore();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
toStringMethod() {
|
|
77
|
+
let service = new FakeService(this.webda, "plop", { type: "FakeService" });
|
|
78
|
+
assert.strictEqual(service.toString(), "FakeService[plop]");
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Ensure a message is displayed if listener is long
|
|
82
|
+
* Ensure error in listener are catched
|
|
83
|
+
*/
|
|
84
|
+
longListener() {
|
|
85
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
let service = new FakeService(this.webda, "plop", {});
|
|
87
|
+
let logs = [];
|
|
88
|
+
service.log = (...args) => {
|
|
89
|
+
logs.push(args);
|
|
90
|
+
};
|
|
91
|
+
service.on("test", () => __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
yield new Promise(resolve => setTimeout(resolve, 140));
|
|
93
|
+
throw new Error("My error");
|
|
94
|
+
}));
|
|
95
|
+
yield service.emitSync("test", undefined);
|
|
96
|
+
assert.strictEqual(logs.length, 2);
|
|
97
|
+
assert.deepStrictEqual(logs.map(l => `${l[0]}_${l[1]}`), ["ERROR_Listener error", "INFO_Long listener"]);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
__decorate([
|
|
102
|
+
mocha_1.test
|
|
103
|
+
], ServiceTest.prototype, "injector", null);
|
|
104
|
+
__decorate([
|
|
105
|
+
mocha_1.test
|
|
106
|
+
], ServiceTest.prototype, "clean", null);
|
|
107
|
+
__decorate([
|
|
108
|
+
mocha_1.test
|
|
109
|
+
], ServiceTest.prototype, "toPublicJSON", null);
|
|
110
|
+
__decorate([
|
|
111
|
+
mocha_1.test
|
|
112
|
+
], ServiceTest.prototype, "toStringMethod", null);
|
|
113
|
+
__decorate([
|
|
114
|
+
mocha_1.test
|
|
115
|
+
], ServiceTest.prototype, "longListener", null);
|
|
116
|
+
ServiceTest = __decorate([
|
|
117
|
+
mocha_1.suite
|
|
118
|
+
], ServiceTest);
|
|
119
|
+
//# sourceMappingURL=service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.spec.js","sourceRoot":"","sources":["../../src/services/service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ModdaDefinition } from "../core";
|
|
2
|
+
import { CoreModel } from "../models/coremodel";
|
|
3
|
+
import MapperService, { MapperParameters, MapUpdates } from "./mapper";
|
|
4
|
+
export declare class AggregatorParameters extends MapperParameters {
|
|
5
|
+
/**
|
|
6
|
+
* @default index
|
|
7
|
+
*/
|
|
8
|
+
key: string;
|
|
9
|
+
constructor(params: any);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Service that aggregate several CoreModel into one
|
|
13
|
+
* Similar to a Mapper except that the target is constant
|
|
14
|
+
*/
|
|
15
|
+
export default class AggregatorService<T extends AggregatorParameters = AggregatorParameters> extends MapperService<T> {
|
|
16
|
+
/**
|
|
17
|
+
* Create index if not existing
|
|
18
|
+
*
|
|
19
|
+
* @inheritdoc
|
|
20
|
+
*/
|
|
21
|
+
init(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* @override
|
|
24
|
+
*/
|
|
25
|
+
loadParameters(params: any): AggregatorParameters;
|
|
26
|
+
/**
|
|
27
|
+
* Make sure the aggregate document exist
|
|
28
|
+
*/
|
|
29
|
+
createAggregate(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Create an aggregation
|
|
32
|
+
*
|
|
33
|
+
* @param object
|
|
34
|
+
* @param updates
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
handleMap(object: CoreModel, updates: MapUpdates): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* @override
|
|
40
|
+
*/
|
|
41
|
+
static getModda(): ModdaDefinition;
|
|
42
|
+
}
|
|
43
|
+
export { AggregatorService };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AggregatorService = exports.AggregatorParameters = void 0;
|
|
13
|
+
const mapper_1 = require("./mapper");
|
|
14
|
+
class AggregatorParameters extends mapper_1.MapperParameters {
|
|
15
|
+
constructor(params) {
|
|
16
|
+
var _a;
|
|
17
|
+
super(params);
|
|
18
|
+
(_a = this.key) !== null && _a !== void 0 ? _a : (this.key = "index");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.AggregatorParameters = AggregatorParameters;
|
|
22
|
+
/**
|
|
23
|
+
* Service that aggregate several CoreModel into one
|
|
24
|
+
* Similar to a Mapper except that the target is constant
|
|
25
|
+
*/
|
|
26
|
+
class AggregatorService extends mapper_1.default {
|
|
27
|
+
/**
|
|
28
|
+
* Create index if not existing
|
|
29
|
+
*
|
|
30
|
+
* @inheritdoc
|
|
31
|
+
*/
|
|
32
|
+
init() {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
yield this.createAggregate();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @override
|
|
39
|
+
*/
|
|
40
|
+
loadParameters(params) {
|
|
41
|
+
return new AggregatorParameters(params);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Make sure the aggregate document exist
|
|
45
|
+
*/
|
|
46
|
+
createAggregate() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
if (!(yield this.targetStore.exists(this.parameters.key))) {
|
|
49
|
+
yield this.targetStore.save({
|
|
50
|
+
uuid: this.parameters.key
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create an aggregation
|
|
57
|
+
*
|
|
58
|
+
* @param object
|
|
59
|
+
* @param updates
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
handleMap(object, updates) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
let mapUpdates = {};
|
|
65
|
+
if (typeof updates === "object") {
|
|
66
|
+
let toUpdate = false;
|
|
67
|
+
for (let i in updates) {
|
|
68
|
+
if (this.parameters.fields.indexOf(i) >= 0) {
|
|
69
|
+
toUpdate = true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!toUpdate) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (updates === "deleted") {
|
|
77
|
+
yield this.targetStore.removeAttribute(this.parameters.key, object.getUuid());
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
else if (updates === "created") {
|
|
81
|
+
updates = object;
|
|
82
|
+
}
|
|
83
|
+
// Create mapper
|
|
84
|
+
let mapper = {};
|
|
85
|
+
this.parameters.fields.forEach(id => {
|
|
86
|
+
mapper[id] = updates[id];
|
|
87
|
+
});
|
|
88
|
+
mapUpdates[object.getUuid()] = mapper;
|
|
89
|
+
mapUpdates._lastUpdate = new Date();
|
|
90
|
+
yield this.targetStore._patch(mapUpdates, this.parameters.key);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @override
|
|
95
|
+
*/
|
|
96
|
+
static getModda() {
|
|
97
|
+
return {
|
|
98
|
+
uuid: "Webda/Aggregator",
|
|
99
|
+
label: "Aggregator",
|
|
100
|
+
description: "Deduplicate content to an aggregate"
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.default = AggregatorService;
|
|
105
|
+
exports.AggregatorService = AggregatorService;
|
|
106
|
+
//# sourceMappingURL=aggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../src/stores/aggregator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,qCAAuE;AAEvE,MAAa,oBAAqB,SAAQ,yBAAgB;IAMxD,YAAY,MAAW;;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,MAAA,IAAI,CAAC,GAAG,oCAAR,IAAI,CAAC,GAAG,GAAK,OAAO,EAAC;IACvB,CAAC;CACF;AAVD,oDAUC;AAED;;;GAGG;AACH,MAAqB,iBAAyE,SAAQ,gBAAgB;IACpH;;;;OAIG;IACG,IAAI;;YACR,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/B,CAAC;KAAA;IAED;;OAEG;IACH,cAAc,CAAC,MAAW;QACxB,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACG,eAAe;;YACnB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAC1B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG;iBAC1B,CAAC,CAAC;aACJ;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACG,SAAS,CAAC,MAAiB,EAAE,OAAmB;;YACpD,IAAI,UAAU,GAAQ,EAAE,CAAC;YACzB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;oBACrB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;wBAC1C,QAAQ,GAAG,IAAI,CAAC;qBACjB;iBACF;gBACD,IAAI,CAAC,QAAQ,EAAE;oBACb,OAAO;iBACR;aACF;iBAAM,IAAI,OAAO,KAAK,SAAS,EAAE;gBAChC,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9E,OAAO;aACR;iBAAM,IAAI,OAAO,KAAK,SAAS,EAAE;gBAChC,OAAO,GAAG,MAAM,CAAC;aAClB;YACD,gBAAgB;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBAClC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;YACtC,UAAU,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjE,CAAC;KAAA;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ;QACb,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,qCAAqC;SACnD,CAAC;IACJ,CAAC;CACF;AAzED,oCAyEC;AAEQ,8CAAiB"}
|
package/lib/stores/file.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ declare class FileStoreParameters extends StoreParameters {
|
|
|
7
7
|
*/
|
|
8
8
|
folder: string;
|
|
9
9
|
/**
|
|
10
|
-
* Parameter sent to JSON.
|
|
10
|
+
* Parameter sent to JSON.stringify when storing the json
|
|
11
11
|
*/
|
|
12
12
|
beautify?: string | number;
|
|
13
13
|
}
|
|
@@ -32,23 +32,61 @@ declare class FileStore<T extends CoreModel, K extends FileStoreParameters = Fil
|
|
|
32
32
|
/**
|
|
33
33
|
* Create the storage folder if does not exist
|
|
34
34
|
*/
|
|
35
|
-
computeParameters():
|
|
35
|
+
computeParameters(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get the file path of an object
|
|
38
|
+
* @param uid of the object
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
36
41
|
file(uid: any): string;
|
|
42
|
+
/**
|
|
43
|
+
* @override
|
|
44
|
+
*/
|
|
37
45
|
exists(uid: any): Promise<boolean>;
|
|
38
46
|
_find(request: any, offset: any, limit: any): Promise<any>;
|
|
39
|
-
|
|
47
|
+
/**
|
|
48
|
+
* @override
|
|
49
|
+
*/
|
|
50
|
+
_save(object: T): Promise<T>;
|
|
40
51
|
/**
|
|
41
52
|
* @inheritdoc
|
|
42
53
|
*/
|
|
43
54
|
_upsertItemToCollection(uid: string, prop: string, item: any, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<void>;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
/**
|
|
56
|
+
* @inheritdoc
|
|
57
|
+
*/
|
|
58
|
+
_removeAttribute(uuid: string, attribute: string, writeCondition?: any, writeConditionField?: string): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* @inheritdoc
|
|
61
|
+
*/
|
|
62
|
+
_deleteItemFromCollection(uid: string, prop: string, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<T>;
|
|
63
|
+
/**
|
|
64
|
+
* @inheritdoc
|
|
65
|
+
*/
|
|
66
|
+
_delete(uid: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* @inheritdoc
|
|
69
|
+
*/
|
|
70
|
+
_patch(object: any, uid: string, writeCondition?: any, writeConditionField?: string): Promise<any>;
|
|
71
|
+
/**
|
|
72
|
+
* @override
|
|
73
|
+
*/
|
|
74
|
+
_update(object: any, uid: string, writeCondition?: any, writeConditionField?: string): Promise<any>;
|
|
75
|
+
/**
|
|
76
|
+
* @override
|
|
77
|
+
*/
|
|
78
|
+
getAll(uids?: string[]): Promise<any>;
|
|
79
|
+
/**
|
|
80
|
+
* @override
|
|
81
|
+
*/
|
|
82
|
+
_get(uid: string, raiseIfNotFound?: boolean): Promise<T>;
|
|
83
|
+
/**
|
|
84
|
+
* @override
|
|
85
|
+
*/
|
|
86
|
+
_incrementAttribute(uid: string, prop: string, value: number, updateDate: Date): Promise<any>;
|
|
87
|
+
/**
|
|
88
|
+
* @override
|
|
89
|
+
*/
|
|
52
90
|
__clean(): Promise<void>;
|
|
53
91
|
/**
|
|
54
92
|
*
|
package/lib/stores/file.js
CHANGED
|
@@ -12,8 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.FileStore = void 0;
|
|
13
13
|
const fs = require("fs");
|
|
14
14
|
const path = require("path");
|
|
15
|
-
const
|
|
16
|
-
const coremodel_1 = require("../models/coremodel");
|
|
15
|
+
const serializers_1 = require("../utils/serializers");
|
|
17
16
|
const store_1 = require("./store");
|
|
18
17
|
class FileStoreParameters extends store_1.StoreParameters {
|
|
19
18
|
}
|
|
@@ -40,23 +39,25 @@ class FileStore extends store_1.Store {
|
|
|
40
39
|
* Create the storage folder if does not exist
|
|
41
40
|
*/
|
|
42
41
|
computeParameters() {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
_super.computeParameters.call(this);
|
|
48
|
-
if (!fs.existsSync(this.parameters.folder)) {
|
|
49
|
-
fs.mkdirSync(this.parameters.folder);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
42
|
+
super.computeParameters();
|
|
43
|
+
if (!fs.existsSync(this.parameters.folder)) {
|
|
44
|
+
fs.mkdirSync(this.parameters.folder);
|
|
45
|
+
}
|
|
52
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the file path of an object
|
|
49
|
+
* @param uid of the object
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
53
52
|
file(uid) {
|
|
54
53
|
return `${this.parameters.folder}/${uid}${FileStore.EXTENSION}`;
|
|
55
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* @override
|
|
57
|
+
*/
|
|
56
58
|
exists(uid) {
|
|
57
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
|
|
59
|
-
return Promise.resolve(fs.existsSync(this.file(uid)));
|
|
60
|
+
return fs.existsSync(this.file(uid));
|
|
60
61
|
});
|
|
61
62
|
}
|
|
62
63
|
_find(request, offset, limit) {
|
|
@@ -67,81 +68,89 @@ class FileStore extends store_1.Store {
|
|
|
67
68
|
return Promise.all(files.map(f => this._get(f)));
|
|
68
69
|
});
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* @override
|
|
73
|
+
*/
|
|
70
74
|
_save(object) {
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
fs.writeFileSync(this.file(object.getUuid()), JSON.stringify(object.toStoredJSON(), undefined, this.parameters.beautify));
|
|
77
|
+
return object;
|
|
78
|
+
});
|
|
73
79
|
}
|
|
74
80
|
/**
|
|
75
81
|
* @inheritdoc
|
|
76
82
|
*/
|
|
77
83
|
_upsertItemToCollection(uid, prop, item, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
78
84
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
|
|
85
|
+
try {
|
|
86
|
+
// Need to keep sync to avoid conflicts
|
|
87
|
+
return yield this.simulateUpsertItemToCollection(this.initModel(serializers_1.JSONUtils.loadFile(this.file(uid))), prop, item, updateDate, index, itemWriteCondition, itemWriteConditionField);
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
throw new store_1.StoreNotFoundError(uid, this.getName());
|
|
91
|
+
}
|
|
80
92
|
});
|
|
81
93
|
}
|
|
82
|
-
|
|
94
|
+
/**
|
|
95
|
+
* @inheritdoc
|
|
96
|
+
*/
|
|
97
|
+
_removeAttribute(uuid, attribute, writeCondition, writeConditionField) {
|
|
83
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
-
let res = yield this._get(uuid);
|
|
99
|
+
let res = yield this._get(uuid, true);
|
|
100
|
+
this.checkUpdateCondition(res, writeConditionField, writeCondition);
|
|
85
101
|
delete res[attribute];
|
|
86
102
|
yield this._save(res);
|
|
87
103
|
});
|
|
88
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* @inheritdoc
|
|
107
|
+
*/
|
|
89
108
|
_deleteItemFromCollection(uid, prop, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
90
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
let res = yield this._get(uid);
|
|
92
|
-
|
|
93
|
-
throw Error("NotFound");
|
|
94
|
-
}
|
|
95
|
-
if (itemWriteCondition && res[prop][index][itemWriteConditionField] != itemWriteCondition) {
|
|
96
|
-
throw Error("UpdateCondition not met");
|
|
97
|
-
}
|
|
110
|
+
let res = yield this._get(uid, true);
|
|
111
|
+
this.checkCollectionUpdateCondition(res, prop, itemWriteConditionField, itemWriteCondition, index);
|
|
98
112
|
res[prop].splice(index, 1);
|
|
99
113
|
res[this._lastUpdateField] = updateDate;
|
|
100
114
|
return this._save(res);
|
|
101
115
|
});
|
|
102
116
|
}
|
|
103
|
-
|
|
117
|
+
/**
|
|
118
|
+
* @inheritdoc
|
|
119
|
+
*/
|
|
120
|
+
_delete(uid) {
|
|
104
121
|
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
-
|
|
106
|
-
if (
|
|
107
|
-
|
|
122
|
+
const filePath = this.file(uid);
|
|
123
|
+
if (fs.existsSync(filePath)) {
|
|
124
|
+
fs.unlinkSync(filePath);
|
|
108
125
|
}
|
|
109
|
-
if (res) {
|
|
110
|
-
fs.unlinkSync(this.file(uid));
|
|
111
|
-
}
|
|
112
|
-
return Promise.resolve();
|
|
113
126
|
});
|
|
114
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* @inheritdoc
|
|
130
|
+
*/
|
|
115
131
|
_patch(object, uid, writeCondition, writeConditionField) {
|
|
116
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
let stored = yield this._get(uid
|
|
118
|
-
|
|
119
|
-
return Promise.reject(Error("NotFound"));
|
|
120
|
-
}
|
|
121
|
-
if (writeCondition && stored[writeConditionField] != writeCondition) {
|
|
122
|
-
return Promise.reject(Error("UpdateCondition not met"));
|
|
123
|
-
}
|
|
133
|
+
let stored = yield this._get(uid, true);
|
|
134
|
+
this.checkUpdateCondition(stored, writeConditionField, writeCondition);
|
|
124
135
|
for (var prop in object) {
|
|
125
136
|
stored[prop] = object[prop];
|
|
126
137
|
}
|
|
127
138
|
return this._save(stored);
|
|
128
139
|
});
|
|
129
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* @override
|
|
143
|
+
*/
|
|
130
144
|
_update(object, uid, writeCondition, writeConditionField) {
|
|
131
145
|
return __awaiter(this, void 0, void 0, function* () {
|
|
132
|
-
let stored = yield this._get(uid
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
if (writeCondition && stored[writeConditionField] != writeCondition) {
|
|
137
|
-
console.log(stored[this._lastUpdateField], writeCondition, this._lastUpdateField, object[writeCondition]);
|
|
138
|
-
throw new core_1.WebdaError("STORE_UPDATE_CONDITION_NOT_MET", "UpdateCondition not met");
|
|
139
|
-
}
|
|
140
|
-
let coreModel = new coremodel_1.CoreModel();
|
|
141
|
-
coreModel.load(object, true);
|
|
142
|
-
return this._save(coreModel);
|
|
146
|
+
let stored = yield this._get(uid, true);
|
|
147
|
+
this.checkUpdateCondition(stored, writeConditionField, writeCondition);
|
|
148
|
+
return this._save(this.initModel(object));
|
|
143
149
|
});
|
|
144
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* @override
|
|
153
|
+
*/
|
|
145
154
|
getAll(uids) {
|
|
146
155
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
156
|
if (!uids) {
|
|
@@ -153,27 +162,36 @@ class FileStore extends store_1.Store {
|
|
|
153
162
|
}
|
|
154
163
|
let result = [];
|
|
155
164
|
for (let i in uids) {
|
|
156
|
-
|
|
165
|
+
let model = this._get(uids[i]);
|
|
166
|
+
result.push(model);
|
|
157
167
|
}
|
|
158
|
-
return Promise.all(result);
|
|
168
|
+
return (yield Promise.all(result)).filter(f => f !== undefined);
|
|
159
169
|
});
|
|
160
170
|
}
|
|
161
|
-
|
|
171
|
+
/**
|
|
172
|
+
* @override
|
|
173
|
+
*/
|
|
174
|
+
_get(uid, raiseIfNotFound = false) {
|
|
162
175
|
return __awaiter(this, void 0, void 0, function* () {
|
|
163
176
|
let res = yield this.exists(uid);
|
|
164
177
|
if (res) {
|
|
165
|
-
let data = fs.readFileSync(this.file(uid));
|
|
166
|
-
|
|
178
|
+
let data = JSON.parse(fs.readFileSync(this.file(uid)).toString());
|
|
179
|
+
if (data.__type !== this._model.name && this.parameters.strict) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
return this.initModel(data);
|
|
183
|
+
}
|
|
184
|
+
else if (raiseIfNotFound) {
|
|
185
|
+
throw new store_1.StoreNotFoundError(uid, this.getName());
|
|
167
186
|
}
|
|
168
187
|
});
|
|
169
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* @override
|
|
191
|
+
*/
|
|
170
192
|
_incrementAttribute(uid, prop, value, updateDate) {
|
|
171
193
|
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
-
let
|
|
173
|
-
if (!found) {
|
|
174
|
-
throw Error("NotFound");
|
|
175
|
-
}
|
|
176
|
-
let stored = yield this._get(uid);
|
|
194
|
+
let stored = yield this._get(uid, true);
|
|
177
195
|
if (stored[prop] === undefined) {
|
|
178
196
|
stored[prop] = 0;
|
|
179
197
|
}
|
|
@@ -182,28 +200,13 @@ class FileStore extends store_1.Store {
|
|
|
182
200
|
return this._save(stored);
|
|
183
201
|
});
|
|
184
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* @override
|
|
205
|
+
*/
|
|
185
206
|
__clean() {
|
|
186
207
|
return __awaiter(this, void 0, void 0, function* () {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
var files = fs.readdirSync(this.parameters.folder);
|
|
191
|
-
var promises = [];
|
|
192
|
-
for (var file in files) {
|
|
193
|
-
let filename = this.parameters.folder + "/" + files[file];
|
|
194
|
-
promises.push(new Promise((resolve, reject) => {
|
|
195
|
-
fs.unlink(filename, err => {
|
|
196
|
-
if (err) {
|
|
197
|
-
reject(err);
|
|
198
|
-
}
|
|
199
|
-
resolve();
|
|
200
|
-
});
|
|
201
|
-
}));
|
|
202
|
-
}
|
|
203
|
-
yield Promise.all(promises);
|
|
204
|
-
if (this.parameters.index) {
|
|
205
|
-
yield this.createIndex();
|
|
206
|
-
}
|
|
208
|
+
// This is only during test
|
|
209
|
+
require("fs-extra").emptyDirSync(this.parameters.folder);
|
|
207
210
|
});
|
|
208
211
|
}
|
|
209
212
|
/**
|
package/lib/stores/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/stores/file.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;AACb,yBAAyB;AACzB,6BAA6B;
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/stores/file.ts"],"names":[],"mappings":"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"}
|