@webiny/api 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.a9593f74dd
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/Benchmark.d.ts +3 -4
- package/Benchmark.js +41 -35
- package/Benchmark.js.map +1 -1
- package/Context.d.ts +1 -1
- package/Context.js +15 -11
- package/Context.js.map +1 -1
- package/ServiceDiscovery.d.ts +7 -0
- package/ServiceDiscovery.js +68 -0
- package/ServiceDiscovery.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +14 -1
- package/index.js.map +1 -1
- package/package.json +13 -12
- package/plugins/BenchmarkPlugin.js +4 -5
- package/plugins/BenchmarkPlugin.js.map +1 -1
- package/plugins/ContextPlugin.js +4 -5
- package/plugins/ContextPlugin.js.map +1 -1
- package/types.d.ts +10 -4
- package/types.js +2 -6
- package/types.js.map +1 -1
package/Benchmark.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Benchmark as BenchmarkInterface, BenchmarkEnableOnCallable, BenchmarkMeasurement, BenchmarkOutputCallable, BenchmarkRuns } from "./types";
|
|
1
|
+
import { Benchmark as BenchmarkInterface, BenchmarkEnableOnCallable, BenchmarkMeasurement, BenchmarkMeasureOptions, BenchmarkOutputCallable, BenchmarkRuns } from "./types";
|
|
2
2
|
export declare class Benchmark implements BenchmarkInterface {
|
|
3
3
|
readonly measurements: BenchmarkMeasurement[];
|
|
4
4
|
private outputDone;
|
|
@@ -9,7 +9,6 @@ export declare class Benchmark implements BenchmarkInterface {
|
|
|
9
9
|
private readonly onOutputCallables;
|
|
10
10
|
private state;
|
|
11
11
|
get elapsed(): number;
|
|
12
|
-
constructor();
|
|
13
12
|
enableOn(cb: BenchmarkEnableOnCallable): void;
|
|
14
13
|
onOutput(cb: BenchmarkOutputCallable): void;
|
|
15
14
|
enable(): void;
|
|
@@ -17,10 +16,10 @@ export declare class Benchmark implements BenchmarkInterface {
|
|
|
17
16
|
/**
|
|
18
17
|
* When running the output, we need to reverse the callables array, so that the last one added is the first one executed.
|
|
19
18
|
*
|
|
20
|
-
* The
|
|
19
|
+
* The last one is our built-in console.log output.
|
|
21
20
|
*/
|
|
22
21
|
output(): Promise<void>;
|
|
23
|
-
measure<T = any>(
|
|
22
|
+
measure<T = any>(options: BenchmarkMeasureOptions | string, cb: () => Promise<T>): Promise<T>;
|
|
24
23
|
private getIsAlreadyRunning;
|
|
25
24
|
private startRunning;
|
|
26
25
|
private endRunning;
|
package/Benchmark.js
CHANGED
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.Benchmark = void 0;
|
|
8
|
-
var
|
|
9
|
-
var _types = require("./types");
|
|
10
|
-
var BenchmarkState;
|
|
11
|
-
(function (BenchmarkState) {
|
|
7
|
+
var BenchmarkState = /*#__PURE__*/function (BenchmarkState) {
|
|
12
8
|
BenchmarkState["DISABLED"] = "disabled";
|
|
13
9
|
BenchmarkState["ENABLED"] = "enabled";
|
|
14
10
|
BenchmarkState["UNDETERMINED"] = "undetermined";
|
|
15
|
-
|
|
11
|
+
return BenchmarkState;
|
|
12
|
+
}(BenchmarkState || {});
|
|
13
|
+
const createDefaultOutputCallable = () => {
|
|
14
|
+
return async ({
|
|
15
|
+
benchmark
|
|
16
|
+
}) => {
|
|
17
|
+
console.log(`Benchmark total time elapsed: ${benchmark.elapsed}ms`);
|
|
18
|
+
console.log("Benchmark measurements:");
|
|
19
|
+
console.log(benchmark.measurements);
|
|
20
|
+
};
|
|
21
|
+
};
|
|
16
22
|
class Benchmark {
|
|
23
|
+
measurements = [];
|
|
24
|
+
outputDone = false;
|
|
25
|
+
isAlreadyRunning = false;
|
|
26
|
+
totalElapsed = 0;
|
|
27
|
+
runs = {};
|
|
28
|
+
enableOnCallables = [];
|
|
29
|
+
onOutputCallables = [];
|
|
30
|
+
state = BenchmarkState.UNDETERMINED;
|
|
17
31
|
get elapsed() {
|
|
18
32
|
return this.totalElapsed;
|
|
19
33
|
}
|
|
20
|
-
constructor() {
|
|
21
|
-
(0, _defineProperty2.default)(this, "measurements", []);
|
|
22
|
-
(0, _defineProperty2.default)(this, "outputDone", false);
|
|
23
|
-
(0, _defineProperty2.default)(this, "isAlreadyRunning", false);
|
|
24
|
-
(0, _defineProperty2.default)(this, "totalElapsed", 0);
|
|
25
|
-
(0, _defineProperty2.default)(this, "runs", {});
|
|
26
|
-
(0, _defineProperty2.default)(this, "enableOnCallables", []);
|
|
27
|
-
(0, _defineProperty2.default)(this, "onOutputCallables", []);
|
|
28
|
-
(0, _defineProperty2.default)(this, "state", BenchmarkState.UNDETERMINED);
|
|
29
|
-
/**
|
|
30
|
-
* The default output is to the console.
|
|
31
|
-
* This one is executed after all other user defined outputs.
|
|
32
|
-
*/
|
|
33
|
-
this.onOutputCallables.push(async () => {
|
|
34
|
-
console.log(`Benchmark total time elapsed: ${this.elapsed}ms`);
|
|
35
|
-
console.log("Benchmark measurements:");
|
|
36
|
-
console.log(this.measurements);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
34
|
enableOn(cb) {
|
|
40
35
|
this.enableOnCallables.push(cb);
|
|
41
36
|
}
|
|
@@ -52,7 +47,7 @@ class Benchmark {
|
|
|
52
47
|
/**
|
|
53
48
|
* When running the output, we need to reverse the callables array, so that the last one added is the first one executed.
|
|
54
49
|
*
|
|
55
|
-
* The
|
|
50
|
+
* The last one is our built-in console.log output.
|
|
56
51
|
*/
|
|
57
52
|
async output() {
|
|
58
53
|
/**
|
|
@@ -61,21 +56,25 @@ class Benchmark {
|
|
|
61
56
|
if (this.outputDone || this.measurements.length === 0) {
|
|
62
57
|
return;
|
|
63
58
|
}
|
|
64
|
-
const callables = this.onOutputCallables.reverse();
|
|
59
|
+
const callables = [...this.onOutputCallables].reverse();
|
|
60
|
+
callables.push(createDefaultOutputCallable());
|
|
65
61
|
for (const cb of callables) {
|
|
66
|
-
const result = await cb(
|
|
67
|
-
|
|
62
|
+
const result = await cb({
|
|
63
|
+
benchmark: this,
|
|
64
|
+
stop: () => "stop"
|
|
65
|
+
});
|
|
66
|
+
if (result === "stop") {
|
|
68
67
|
return;
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
70
|
this.outputDone = true;
|
|
72
71
|
}
|
|
73
|
-
async measure(
|
|
72
|
+
async measure(options, cb) {
|
|
74
73
|
const enabled = await this.getIsEnabled();
|
|
75
74
|
if (!enabled) {
|
|
76
75
|
return cb();
|
|
77
76
|
}
|
|
78
|
-
const measurement = this.startMeasurement(
|
|
77
|
+
const measurement = this.startMeasurement(options);
|
|
79
78
|
const isAlreadyRunning = this.getIsAlreadyRunning();
|
|
80
79
|
this.startRunning();
|
|
81
80
|
try {
|
|
@@ -83,7 +82,7 @@ class Benchmark {
|
|
|
83
82
|
} finally {
|
|
84
83
|
const measurementEnded = this.stopMeasurement(measurement);
|
|
85
84
|
this.measurements.push(measurementEnded);
|
|
86
|
-
this.addRun(measurementEnded
|
|
85
|
+
this.addRun(measurementEnded);
|
|
87
86
|
/**
|
|
88
87
|
* Only add to total time if this run is not a child of another run.
|
|
89
88
|
* And then end running.
|
|
@@ -122,7 +121,8 @@ class Benchmark {
|
|
|
122
121
|
addElapsed(measurement) {
|
|
123
122
|
this.totalElapsed = this.totalElapsed + measurement.elapsed;
|
|
124
123
|
}
|
|
125
|
-
addRun(
|
|
124
|
+
addRun(measurement) {
|
|
125
|
+
const name = `${measurement.category}#${measurement.name}`;
|
|
126
126
|
if (!this.runs[name]) {
|
|
127
127
|
this.runs[name] = 0;
|
|
128
128
|
}
|
|
@@ -131,9 +131,12 @@ class Benchmark {
|
|
|
131
131
|
setState(state) {
|
|
132
132
|
this.state = state;
|
|
133
133
|
}
|
|
134
|
-
startMeasurement(
|
|
134
|
+
startMeasurement(options) {
|
|
135
|
+
const name = typeof options === "string" ? options : options.name;
|
|
136
|
+
const category = typeof options === "string" ? "webiny" : options.category;
|
|
135
137
|
return {
|
|
136
138
|
name,
|
|
139
|
+
category,
|
|
137
140
|
start: new Date(),
|
|
138
141
|
memoryStart: process.memoryUsage().heapUsed
|
|
139
142
|
};
|
|
@@ -144,6 +147,7 @@ class Benchmark {
|
|
|
144
147
|
const elapsed = end.getTime() - measurement.start.getTime();
|
|
145
148
|
return {
|
|
146
149
|
name: measurement.name,
|
|
150
|
+
category: measurement.category,
|
|
147
151
|
start: measurement.start,
|
|
148
152
|
end,
|
|
149
153
|
elapsed,
|
|
@@ -151,4 +155,6 @@ class Benchmark {
|
|
|
151
155
|
};
|
|
152
156
|
}
|
|
153
157
|
}
|
|
154
|
-
exports.Benchmark = Benchmark;
|
|
158
|
+
exports.Benchmark = Benchmark;
|
|
159
|
+
|
|
160
|
+
//# sourceMappingURL=Benchmark.js.map
|
package/Benchmark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BenchmarkState","Benchmark","elapsed","totalElapsed","constructor","UNDETERMINED","onOutputCallables","push","console","log","measurements","enableOn","cb","enableOnCallables","onOutput","enable","setState","ENABLED","disable","DISABLED","output","outputDone","length","callables","reverse","result","BenchmarkOutputCallableResponse","BREAK","measure","name","enabled","getIsEnabled","measurement","startMeasurement","isAlreadyRunning","getIsAlreadyRunning","startRunning","measurementEnded","stopMeasurement","addRun","addElapsed","endRunning","state","runs","start","Date","memoryStart","process","memoryUsage","heapUsed","end","memoryEnd","getTime","memory"],"sources":["Benchmark.ts"],"sourcesContent":["import {\n Benchmark as BenchmarkInterface,\n BenchmarkEnableOnCallable,\n BenchmarkMeasurement,\n BenchmarkOutputCallable,\n BenchmarkOutputCallableResponse,\n BenchmarkRuns\n} from \"~/types\";\n\nenum BenchmarkState {\n DISABLED = \"disabled\",\n ENABLED = \"enabled\",\n UNDETERMINED = \"undetermined\"\n}\n\ninterface BenchmarkMeasurementStart extends Pick<BenchmarkMeasurement, \"name\" | \"start\"> {\n memoryStart: number;\n}\n\nexport class Benchmark implements BenchmarkInterface {\n public readonly measurements: BenchmarkMeasurement[] = [];\n\n private outputDone = false;\n private isAlreadyRunning = false;\n private totalElapsed = 0;\n public readonly runs: BenchmarkRuns = {};\n private readonly enableOnCallables: BenchmarkEnableOnCallable[] = [];\n private readonly onOutputCallables: BenchmarkOutputCallable[] = [];\n private state: BenchmarkState = BenchmarkState.UNDETERMINED;\n\n public get elapsed(): number {\n return this.totalElapsed;\n }\n\n public constructor() {\n /**\n * The default output is to the console.\n * This one is executed after all other user defined outputs.\n */\n this.onOutputCallables.push(async () => {\n console.log(`Benchmark total time elapsed: ${this.elapsed}ms`);\n console.log(\"Benchmark measurements:\");\n console.log(this.measurements);\n });\n }\n\n public enableOn(cb: BenchmarkEnableOnCallable): void {\n this.enableOnCallables.push(cb);\n }\n\n public onOutput(cb: BenchmarkOutputCallable): void {\n this.onOutputCallables.push(cb);\n }\n\n public enable(): void {\n this.setState(BenchmarkState.ENABLED);\n }\n\n public disable(): void {\n this.setState(BenchmarkState.DISABLED);\n }\n\n /**\n * When running the output, we need to reverse the callables array, so that the last one added is the first one executed.\n *\n * The first one is our built-in console.log output, which we want to be the last one executed - and we need to stop output if user wants to end it.\n */\n public async output(): Promise<void> {\n /**\n * No point in outputting more than once or if no measurements were made.\n */\n if (this.outputDone || this.measurements.length === 0) {\n return;\n }\n const callables = this.onOutputCallables.reverse();\n for (const cb of callables) {\n const result = await cb(this);\n if (result === BenchmarkOutputCallableResponse.BREAK) {\n return;\n }\n }\n this.outputDone = true;\n }\n\n public async measure<T = any>(name: string, cb: () => Promise<T>): Promise<T> {\n const enabled = await this.getIsEnabled();\n if (!enabled) {\n return cb();\n }\n const measurement = this.startMeasurement(name);\n const isAlreadyRunning = this.getIsAlreadyRunning();\n this.startRunning();\n try {\n return await cb();\n } finally {\n const measurementEnded = this.stopMeasurement(measurement);\n this.measurements.push(measurementEnded);\n this.addRun(measurementEnded.name);\n /**\n * Only add to total time if this run is not a child of another run.\n * And then end running.\n */\n if (!isAlreadyRunning) {\n this.addElapsed(measurementEnded);\n this.endRunning();\n }\n }\n }\n\n private getIsAlreadyRunning(): boolean {\n return this.isAlreadyRunning;\n }\n private startRunning(): void {\n this.isAlreadyRunning = true;\n }\n private endRunning(): void {\n this.isAlreadyRunning = false;\n }\n\n private async getIsEnabled(): Promise<boolean> {\n if (this.state === BenchmarkState.ENABLED) {\n return true;\n } else if (this.state === BenchmarkState.DISABLED) {\n return false;\n }\n\n for (const cb of this.enableOnCallables) {\n const result = await cb();\n if (result) {\n this.enable();\n return true;\n }\n }\n this.disable();\n return false;\n }\n\n private addElapsed(measurement: Pick<BenchmarkMeasurement, \"elapsed\">): void {\n this.totalElapsed = this.totalElapsed + measurement.elapsed;\n }\n\n private addRun(name: string): void {\n if (!this.runs[name]) {\n this.runs[name] = 0;\n }\n this.runs[name]++;\n }\n\n private setState(state: BenchmarkState): void {\n this.state = state;\n }\n\n private startMeasurement(name: string): BenchmarkMeasurementStart {\n return {\n name,\n start: new Date(),\n memoryStart: process.memoryUsage().heapUsed\n };\n }\n\n private stopMeasurement(measurement: BenchmarkMeasurementStart): BenchmarkMeasurement {\n const end = new Date();\n const memoryEnd = process.memoryUsage().heapUsed;\n const elapsed = end.getTime() - measurement.start.getTime();\n return {\n name: measurement.name,\n start: measurement.start,\n end,\n elapsed,\n memory: memoryEnd - measurement.memoryStart\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BenchmarkState","createDefaultOutputCallable","benchmark","console","log","elapsed","measurements","Benchmark","outputDone","isAlreadyRunning","totalElapsed","runs","enableOnCallables","onOutputCallables","state","UNDETERMINED","enableOn","cb","push","onOutput","enable","setState","ENABLED","disable","DISABLED","output","length","callables","reverse","result","stop","measure","options","enabled","getIsEnabled","measurement","startMeasurement","getIsAlreadyRunning","startRunning","measurementEnded","stopMeasurement","addRun","addElapsed","endRunning","name","category","start","Date","memoryStart","process","memoryUsage","heapUsed","end","memoryEnd","getTime","memory","exports"],"sources":["Benchmark.ts"],"sourcesContent":["import {\n Benchmark as BenchmarkInterface,\n BenchmarkEnableOnCallable,\n BenchmarkMeasurement,\n BenchmarkMeasureOptions,\n BenchmarkOutputCallable,\n BenchmarkRuns\n} from \"~/types\";\n\nenum BenchmarkState {\n DISABLED = \"disabled\",\n ENABLED = \"enabled\",\n UNDETERMINED = \"undetermined\"\n}\n\ninterface BenchmarkMeasurementStart\n extends Pick<BenchmarkMeasurement, \"name\" | \"category\" | \"start\"> {\n memoryStart: number;\n}\n\nconst createDefaultOutputCallable = (): BenchmarkOutputCallable => {\n return async ({ benchmark }) => {\n console.log(`Benchmark total time elapsed: ${benchmark.elapsed}ms`);\n console.log(\"Benchmark measurements:\");\n console.log(benchmark.measurements);\n };\n};\n\nexport class Benchmark implements BenchmarkInterface {\n public readonly measurements: BenchmarkMeasurement[] = [];\n\n private outputDone = false;\n private isAlreadyRunning = false;\n private totalElapsed = 0;\n public readonly runs: BenchmarkRuns = {};\n private readonly enableOnCallables: BenchmarkEnableOnCallable[] = [];\n private readonly onOutputCallables: BenchmarkOutputCallable[] = [];\n private state: BenchmarkState = BenchmarkState.UNDETERMINED;\n\n public get elapsed(): number {\n return this.totalElapsed;\n }\n\n public enableOn(cb: BenchmarkEnableOnCallable): void {\n this.enableOnCallables.push(cb);\n }\n\n public onOutput(cb: BenchmarkOutputCallable): void {\n this.onOutputCallables.push(cb);\n }\n\n public enable(): void {\n this.setState(BenchmarkState.ENABLED);\n }\n\n public disable(): void {\n this.setState(BenchmarkState.DISABLED);\n }\n\n /**\n * When running the output, we need to reverse the callables array, so that the last one added is the first one executed.\n *\n * The last one is our built-in console.log output.\n */\n public async output(): Promise<void> {\n /**\n * No point in outputting more than once or if no measurements were made.\n */\n if (this.outputDone || this.measurements.length === 0) {\n return;\n }\n const callables = [...this.onOutputCallables].reverse();\n callables.push(createDefaultOutputCallable());\n for (const cb of callables) {\n const result = await cb({\n benchmark: this,\n stop: () => \"stop\"\n });\n if (result === \"stop\") {\n return;\n }\n }\n this.outputDone = true;\n }\n\n public async measure<T = any>(\n options: BenchmarkMeasureOptions | string,\n cb: () => Promise<T>\n ): Promise<T> {\n const enabled = await this.getIsEnabled();\n if (!enabled) {\n return cb();\n }\n const measurement = this.startMeasurement(options);\n const isAlreadyRunning = this.getIsAlreadyRunning();\n this.startRunning();\n try {\n return await cb();\n } finally {\n const measurementEnded = this.stopMeasurement(measurement);\n this.measurements.push(measurementEnded);\n this.addRun(measurementEnded);\n /**\n * Only add to total time if this run is not a child of another run.\n * And then end running.\n */\n if (!isAlreadyRunning) {\n this.addElapsed(measurementEnded);\n this.endRunning();\n }\n }\n }\n\n private getIsAlreadyRunning(): boolean {\n return this.isAlreadyRunning;\n }\n private startRunning(): void {\n this.isAlreadyRunning = true;\n }\n private endRunning(): void {\n this.isAlreadyRunning = false;\n }\n\n private async getIsEnabled(): Promise<boolean> {\n if (this.state === BenchmarkState.ENABLED) {\n return true;\n } else if (this.state === BenchmarkState.DISABLED) {\n return false;\n }\n\n for (const cb of this.enableOnCallables) {\n const result = await cb();\n if (result) {\n this.enable();\n return true;\n }\n }\n this.disable();\n return false;\n }\n\n private addElapsed(measurement: Pick<BenchmarkMeasurement, \"elapsed\">): void {\n this.totalElapsed = this.totalElapsed + measurement.elapsed;\n }\n\n private addRun(measurement: Pick<BenchmarkMeasurement, \"name\" | \"category\">): void {\n const name = `${measurement.category}#${measurement.name}`;\n if (!this.runs[name]) {\n this.runs[name] = 0;\n }\n this.runs[name]++;\n }\n\n private setState(state: BenchmarkState): void {\n this.state = state;\n }\n\n private startMeasurement(options: BenchmarkMeasureOptions | string): BenchmarkMeasurementStart {\n const name = typeof options === \"string\" ? options : options.name;\n const category = typeof options === \"string\" ? \"webiny\" : options.category;\n return {\n name,\n category,\n start: new Date(),\n memoryStart: process.memoryUsage().heapUsed\n };\n }\n\n private stopMeasurement(measurement: BenchmarkMeasurementStart): BenchmarkMeasurement {\n const end = new Date();\n const memoryEnd = process.memoryUsage().heapUsed;\n const elapsed = end.getTime() - measurement.start.getTime();\n return {\n name: measurement.name,\n category: measurement.category,\n start: measurement.start,\n end,\n elapsed,\n memory: memoryEnd - measurement.memoryStart\n };\n }\n}\n"],"mappings":";;;;;;IASKA,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA,EAAdA,cAAc;AAWnB,MAAMC,2BAA2B,GAAGA,CAAA,KAA+B;EAC/D,OAAO,OAAO;IAAEC;EAAU,CAAC,KAAK;IAC5BC,OAAO,CAACC,GAAG,CAAE,iCAAgCF,SAAS,CAACG,OAAQ,IAAG,CAAC;IACnEF,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;IACtCD,OAAO,CAACC,GAAG,CAACF,SAAS,CAACI,YAAY,CAAC;EACvC,CAAC;AACL,CAAC;AAEM,MAAMC,SAAS,CAA+B;EACjCD,YAAY,GAA2B,EAAE;EAEjDE,UAAU,GAAG,KAAK;EAClBC,gBAAgB,GAAG,KAAK;EACxBC,YAAY,GAAG,CAAC;EACRC,IAAI,GAAkB,CAAC,CAAC;EACvBC,iBAAiB,GAAgC,EAAE;EACnDC,iBAAiB,GAA8B,EAAE;EAC1DC,KAAK,GAAmBd,cAAc,CAACe,YAAY;EAE3D,IAAWV,OAAOA,CAAA,EAAW;IACzB,OAAO,IAAI,CAACK,YAAY;EAC5B;EAEOM,QAAQA,CAACC,EAA6B,EAAQ;IACjD,IAAI,CAACL,iBAAiB,CAACM,IAAI,CAACD,EAAE,CAAC;EACnC;EAEOE,QAAQA,CAACF,EAA2B,EAAQ;IAC/C,IAAI,CAACJ,iBAAiB,CAACK,IAAI,CAACD,EAAE,CAAC;EACnC;EAEOG,MAAMA,CAAA,EAAS;IAClB,IAAI,CAACC,QAAQ,CAACrB,cAAc,CAACsB,OAAO,CAAC;EACzC;EAEOC,OAAOA,CAAA,EAAS;IACnB,IAAI,CAACF,QAAQ,CAACrB,cAAc,CAACwB,QAAQ,CAAC;EAC1C;;EAEA;AACJ;AACA;AACA;AACA;EACI,MAAaC,MAAMA,CAAA,EAAkB;IACjC;AACR;AACA;IACQ,IAAI,IAAI,CAACjB,UAAU,IAAI,IAAI,CAACF,YAAY,CAACoB,MAAM,KAAK,CAAC,EAAE;MACnD;IACJ;IACA,MAAMC,SAAS,GAAG,CAAC,GAAG,IAAI,CAACd,iBAAiB,CAAC,CAACe,OAAO,CAAC,CAAC;IACvDD,SAAS,CAACT,IAAI,CAACjB,2BAA2B,CAAC,CAAC,CAAC;IAC7C,KAAK,MAAMgB,EAAE,IAAIU,SAAS,EAAE;MACxB,MAAME,MAAM,GAAG,MAAMZ,EAAE,CAAC;QACpBf,SAAS,EAAE,IAAI;QACf4B,IAAI,EAAEA,CAAA,KAAM;MAChB,CAAC,CAAC;MACF,IAAID,MAAM,KAAK,MAAM,EAAE;QACnB;MACJ;IACJ;IACA,IAAI,CAACrB,UAAU,GAAG,IAAI;EAC1B;EAEA,MAAauB,OAAOA,CAChBC,OAAyC,EACzCf,EAAoB,EACV;IACV,MAAMgB,OAAO,GAAG,MAAM,IAAI,CAACC,YAAY,CAAC,CAAC;IACzC,IAAI,CAACD,OAAO,EAAE;MACV,OAAOhB,EAAE,CAAC,CAAC;IACf;IACA,MAAMkB,WAAW,GAAG,IAAI,CAACC,gBAAgB,CAACJ,OAAO,CAAC;IAClD,MAAMvB,gBAAgB,GAAG,IAAI,CAAC4B,mBAAmB,CAAC,CAAC;IACnD,IAAI,CAACC,YAAY,CAAC,CAAC;IACnB,IAAI;MACA,OAAO,MAAMrB,EAAE,CAAC,CAAC;IACrB,CAAC,SAAS;MACN,MAAMsB,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACL,WAAW,CAAC;MAC1D,IAAI,CAAC7B,YAAY,CAACY,IAAI,CAACqB,gBAAgB,CAAC;MACxC,IAAI,CAACE,MAAM,CAACF,gBAAgB,CAAC;MAC7B;AACZ;AACA;AACA;MACY,IAAI,CAAC9B,gBAAgB,EAAE;QACnB,IAAI,CAACiC,UAAU,CAACH,gBAAgB,CAAC;QACjC,IAAI,CAACI,UAAU,CAAC,CAAC;MACrB;IACJ;EACJ;EAEQN,mBAAmBA,CAAA,EAAY;IACnC,OAAO,IAAI,CAAC5B,gBAAgB;EAChC;EACQ6B,YAAYA,CAAA,EAAS;IACzB,IAAI,CAAC7B,gBAAgB,GAAG,IAAI;EAChC;EACQkC,UAAUA,CAAA,EAAS;IACvB,IAAI,CAAClC,gBAAgB,GAAG,KAAK;EACjC;EAEA,MAAcyB,YAAYA,CAAA,EAAqB;IAC3C,IAAI,IAAI,CAACpB,KAAK,KAAKd,cAAc,CAACsB,OAAO,EAAE;MACvC,OAAO,IAAI;IACf,CAAC,MAAM,IAAI,IAAI,CAACR,KAAK,KAAKd,cAAc,CAACwB,QAAQ,EAAE;MAC/C,OAAO,KAAK;IAChB;IAEA,KAAK,MAAMP,EAAE,IAAI,IAAI,CAACL,iBAAiB,EAAE;MACrC,MAAMiB,MAAM,GAAG,MAAMZ,EAAE,CAAC,CAAC;MACzB,IAAIY,MAAM,EAAE;QACR,IAAI,CAACT,MAAM,CAAC,CAAC;QACb,OAAO,IAAI;MACf;IACJ;IACA,IAAI,CAACG,OAAO,CAAC,CAAC;IACd,OAAO,KAAK;EAChB;EAEQmB,UAAUA,CAACP,WAAkD,EAAQ;IACzE,IAAI,CAACzB,YAAY,GAAG,IAAI,CAACA,YAAY,GAAGyB,WAAW,CAAC9B,OAAO;EAC/D;EAEQoC,MAAMA,CAACN,WAA4D,EAAQ;IAC/E,MAAMS,IAAI,GAAI,GAAET,WAAW,CAACU,QAAS,IAAGV,WAAW,CAACS,IAAK,EAAC;IAC1D,IAAI,CAAC,IAAI,CAACjC,IAAI,CAACiC,IAAI,CAAC,EAAE;MAClB,IAAI,CAACjC,IAAI,CAACiC,IAAI,CAAC,GAAG,CAAC;IACvB;IACA,IAAI,CAACjC,IAAI,CAACiC,IAAI,CAAC,EAAE;EACrB;EAEQvB,QAAQA,CAACP,KAAqB,EAAQ;IAC1C,IAAI,CAACA,KAAK,GAAGA,KAAK;EACtB;EAEQsB,gBAAgBA,CAACJ,OAAyC,EAA6B;IAC3F,MAAMY,IAAI,GAAG,OAAOZ,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGA,OAAO,CAACY,IAAI;IACjE,MAAMC,QAAQ,GAAG,OAAOb,OAAO,KAAK,QAAQ,GAAG,QAAQ,GAAGA,OAAO,CAACa,QAAQ;IAC1E,OAAO;MACHD,IAAI;MACJC,QAAQ;MACRC,KAAK,EAAE,IAAIC,IAAI,CAAC,CAAC;MACjBC,WAAW,EAAEC,OAAO,CAACC,WAAW,CAAC,CAAC,CAACC;IACvC,CAAC;EACL;EAEQX,eAAeA,CAACL,WAAsC,EAAwB;IAClF,MAAMiB,GAAG,GAAG,IAAIL,IAAI,CAAC,CAAC;IACtB,MAAMM,SAAS,GAAGJ,OAAO,CAACC,WAAW,CAAC,CAAC,CAACC,QAAQ;IAChD,MAAM9C,OAAO,GAAG+C,GAAG,CAACE,OAAO,CAAC,CAAC,GAAGnB,WAAW,CAACW,KAAK,CAACQ,OAAO,CAAC,CAAC;IAC3D,OAAO;MACHV,IAAI,EAAET,WAAW,CAACS,IAAI;MACtBC,QAAQ,EAAEV,WAAW,CAACU,QAAQ;MAC9BC,KAAK,EAAEX,WAAW,CAACW,KAAK;MACxBM,GAAG;MACH/C,OAAO;MACPkD,MAAM,EAAEF,SAAS,GAAGlB,WAAW,CAACa;IACpC,CAAC;EACL;AACJ;AAACQ,OAAA,CAAAjD,SAAA,GAAAA,SAAA"}
|
package/Context.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { PluginsContainer } from "@webiny/plugins";
|
|
|
3
3
|
import { PluginCollection } from "@webiny/plugins/types";
|
|
4
4
|
import { Benchmark } from "./Benchmark";
|
|
5
5
|
export interface ContextParams {
|
|
6
|
-
plugins?: PluginCollection;
|
|
6
|
+
plugins?: PluginCollection | PluginsContainer;
|
|
7
7
|
WEBINY_VERSION: string;
|
|
8
8
|
}
|
|
9
9
|
export declare class Context implements ContextInterface {
|
package/Context.js
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.Context = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
7
|
var _plugins = require("@webiny/plugins");
|
|
10
8
|
var _Benchmark = require("./Benchmark");
|
|
11
9
|
var _BenchmarkPlugin = require("./plugins/BenchmarkPlugin");
|
|
10
|
+
const getPluginsContainer = plugins => {
|
|
11
|
+
if (!plugins) {
|
|
12
|
+
return new _plugins.PluginsContainer();
|
|
13
|
+
}
|
|
14
|
+
if (plugins instanceof _plugins.PluginsContainer) {
|
|
15
|
+
return plugins;
|
|
16
|
+
}
|
|
17
|
+
return new _plugins.PluginsContainer(plugins);
|
|
18
|
+
};
|
|
12
19
|
class Context {
|
|
20
|
+
waiters = [];
|
|
13
21
|
constructor(params) {
|
|
14
|
-
(0, _defineProperty2.default)(this, "_result", void 0);
|
|
15
|
-
(0, _defineProperty2.default)(this, "args", void 0);
|
|
16
|
-
(0, _defineProperty2.default)(this, "plugins", void 0);
|
|
17
|
-
(0, _defineProperty2.default)(this, "WEBINY_VERSION", void 0);
|
|
18
|
-
(0, _defineProperty2.default)(this, "benchmark", void 0);
|
|
19
|
-
(0, _defineProperty2.default)(this, "waiters", []);
|
|
20
22
|
const {
|
|
21
23
|
plugins,
|
|
22
24
|
WEBINY_VERSION
|
|
23
25
|
} = params;
|
|
24
|
-
this.plugins =
|
|
26
|
+
this.plugins = getPluginsContainer(plugins);
|
|
25
27
|
this.WEBINY_VERSION = WEBINY_VERSION;
|
|
26
28
|
/**
|
|
27
29
|
* At the moment let's have benchmark as part of the context.
|
|
@@ -123,9 +125,11 @@ class Context {
|
|
|
123
125
|
* TODO @ts-refactor
|
|
124
126
|
* Problem with possible subtype initialization
|
|
125
127
|
*/
|
|
126
|
-
// @ts-
|
|
128
|
+
// @ts-expect-error
|
|
127
129
|
cb
|
|
128
130
|
});
|
|
129
131
|
}
|
|
130
132
|
}
|
|
131
|
-
exports.Context = Context;
|
|
133
|
+
exports.Context = Context;
|
|
134
|
+
|
|
135
|
+
//# sourceMappingURL=Context.js.map
|
package/Context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_plugins","require","_Benchmark","_BenchmarkPlugin","getPluginsContainer","plugins","PluginsContainer","Context","waiters","constructor","params","WEBINY_VERSION","benchmark","Benchmark","register","BenchmarkPlugin","getResult","_result","hasResult","setResult","value","waitFor","obj","cb","initialTargets","Array","isArray","targets","key","target","Object","defineProperty","set","newTargetKey","waiter","includes","filter","t","length","get","configurable","push","exports"],"sources":["Context.ts"],"sourcesContent":["import { Context as ContextInterface } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport { Benchmark } from \"~/Benchmark\";\nimport { BenchmarkPlugin } from \"~/plugins/BenchmarkPlugin\";\n\ninterface Waiter {\n targets: string[];\n cb: (context: ContextInterface) => void;\n}\n\nexport interface ContextParams {\n plugins?: PluginCollection | PluginsContainer;\n WEBINY_VERSION: string;\n}\n\nconst getPluginsContainer = (plugins?: PluginCollection | PluginsContainer): PluginsContainer => {\n if (!plugins) {\n return new PluginsContainer();\n }\n if (plugins instanceof PluginsContainer) {\n return plugins;\n }\n return new PluginsContainer(plugins);\n};\n\nexport class Context implements ContextInterface {\n public _result: any;\n public args: any;\n public readonly plugins: PluginsContainer;\n public readonly WEBINY_VERSION: string;\n public readonly benchmark: Benchmark;\n\n private readonly waiters: Waiter[] = [];\n\n public constructor(params: ContextParams) {\n const { plugins, WEBINY_VERSION } = params;\n this.plugins = getPluginsContainer(plugins);\n this.WEBINY_VERSION = WEBINY_VERSION;\n /**\n * At the moment let's have benchmark as part of the context.\n * Also, register the plugin to have benchmark accessible via plugins container.\n */\n this.benchmark = new Benchmark();\n this.plugins.register(new BenchmarkPlugin(this.benchmark));\n }\n\n public getResult(): any {\n return this._result;\n }\n\n public hasResult(): boolean {\n return !!this._result;\n }\n\n public setResult(value: any): void {\n this._result = value;\n }\n\n public waitFor<T extends ContextInterface = ContextInterface>(\n obj: string | string[],\n cb: (context: T) => void\n ): void {\n const initialTargets = Array.isArray(obj) ? obj : [obj];\n const targets: string[] = [];\n /**\n * We go only through the first level properties\n */\n for (const key in initialTargets) {\n const target = initialTargets[key] as keyof this;\n /**\n * If property already exists, there is no need to wait for it, so we just continue the loop.\n * Also, if target is not a string, skip this property as it will fail to convert properly during the runtime.\n */\n if (this[target]) {\n continue;\n } else if (typeof target !== \"string\") {\n continue;\n }\n /**\n * Since there is no property, we must define it with its setter and getter.\n * We could not know when it got defined otherwise.\n */\n Object.defineProperty(this, target, {\n /**\n * Setter sets the given value to this object.\n * We cannot set it on exact property name it is defined because it would go into loop of setting itself.\n * And that is why we add __ around the property name.\n */\n set: (value: any) => {\n const newTargetKey = `__${target}__` as keyof this;\n this[newTargetKey] = value;\n /**\n * WWhen the property is set, we will go through all the waiters and, if any of them include currently set property, act on it.\n */\n for (const waiter of this.waiters) {\n if (waiter.targets.includes(target) === false) {\n continue;\n }\n /**\n * Remove currently set property so we know if there are any more to be waited for.\n */\n waiter.targets = waiter.targets.filter(t => t !== target);\n /**\n * If there are more to be waited, eg. user added [cms, pageBuilder] as waited properties, we just continue the loop.\n */\n if (waiter.targets.length > 0) {\n continue;\n }\n /**\n * And if there is nothing more to be waited for, we execute the callable.\n * Note that this callable is not async.\n */\n waiter.cb(this);\n }\n },\n /**\n * As we have set property with __ around it, we must get it as well.\n */\n get: (): any => {\n const newTargetKey = `__${target}__` as keyof this;\n return this[newTargetKey];\n },\n configurable: false\n });\n /**\n * We add the target to be awaited.\n */\n targets.push(target as string);\n }\n /**\n * If there are no targets to be awaited, just fire the callable.\n */\n if (targets.length === 0) {\n cb(this as unknown as T);\n return;\n }\n /**\n * Otherwise add the waiter for the target properties.\n */\n this.waiters.push({\n targets,\n /**\n * TODO @ts-refactor\n * Problem with possible subtype initialization\n */\n // @ts-expect-error\n cb\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb";
|
|
2
|
+
declare type Manifest = Record<string, any>;
|
|
3
|
+
export declare class ServiceDiscovery {
|
|
4
|
+
static setDocumentClient(client: DynamoDBDocument): void;
|
|
5
|
+
static load(): Promise<Manifest | undefined>;
|
|
6
|
+
}
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ServiceDiscovery = void 0;
|
|
7
|
+
var _clientDynamodb = require("@webiny/aws-sdk/client-dynamodb");
|
|
8
|
+
class ServiceManifestLoader {
|
|
9
|
+
manifest = undefined;
|
|
10
|
+
async load() {
|
|
11
|
+
if (this.manifest) {
|
|
12
|
+
return this.manifest;
|
|
13
|
+
}
|
|
14
|
+
const manifests = await this.loadManifests();
|
|
15
|
+
if (!manifests) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Service manifests are already merged by unique names in the database, so we only need to construct
|
|
21
|
+
* a final object containing all manifests by name.
|
|
22
|
+
*/
|
|
23
|
+
this.manifest = manifests.reduce((acc, manifest) => {
|
|
24
|
+
return {
|
|
25
|
+
...acc,
|
|
26
|
+
[manifest.name]: manifest.manifest
|
|
27
|
+
};
|
|
28
|
+
}, {});
|
|
29
|
+
return this.manifest;
|
|
30
|
+
}
|
|
31
|
+
setDocumentClient(client) {
|
|
32
|
+
this.client = client;
|
|
33
|
+
}
|
|
34
|
+
async loadManifests() {
|
|
35
|
+
const client = this.client || (0, _clientDynamodb.getDocumentClient)();
|
|
36
|
+
const {
|
|
37
|
+
Items
|
|
38
|
+
} = await client.send(new _clientDynamodb.QueryCommand({
|
|
39
|
+
TableName: String(process.env.DB_TABLE),
|
|
40
|
+
IndexName: "GSI1",
|
|
41
|
+
KeyConditionExpression: "GSI1_PK = :GSI1_PK AND GSI1_SK > :GSI1_SK",
|
|
42
|
+
ExpressionAttributeValues: {
|
|
43
|
+
":GSI1_PK": {
|
|
44
|
+
S: `SERVICE_MANIFESTS`
|
|
45
|
+
},
|
|
46
|
+
":GSI1_SK": {
|
|
47
|
+
S: " "
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
if (!Array.isArray(Items)) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return Items.map(item => (0, _clientDynamodb.unmarshall)(item).data);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const serviceManifestLoader = new ServiceManifestLoader();
|
|
58
|
+
class ServiceDiscovery {
|
|
59
|
+
static setDocumentClient(client) {
|
|
60
|
+
serviceManifestLoader.setDocumentClient(client);
|
|
61
|
+
}
|
|
62
|
+
static async load() {
|
|
63
|
+
return serviceManifestLoader.load();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.ServiceDiscovery = ServiceDiscovery;
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=ServiceDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_clientDynamodb","require","ServiceManifestLoader","manifest","undefined","load","manifests","loadManifests","reduce","acc","name","setDocumentClient","client","getDocumentClient","Items","send","QueryCommand","TableName","String","process","env","DB_TABLE","IndexName","KeyConditionExpression","ExpressionAttributeValues","S","Array","isArray","map","item","unmarshall","data","serviceManifestLoader","ServiceDiscovery","exports"],"sources":["ServiceDiscovery.ts"],"sourcesContent":["import {\n getDocumentClient,\n DynamoDBDocument,\n QueryCommand,\n unmarshall\n} from \"@webiny/aws-sdk/client-dynamodb\";\n\ninterface ServiceManifest {\n name: string;\n manifest: Manifest;\n}\n\ntype Manifest = Record<string, any>;\n\nclass ServiceManifestLoader {\n private client: DynamoDBDocument | undefined;\n private manifest: Manifest | undefined = undefined;\n\n async load() {\n if (this.manifest) {\n return this.manifest;\n }\n\n const manifests = await this.loadManifests();\n\n if (!manifests) {\n return undefined;\n }\n\n /**\n * Service manifests are already merged by unique names in the database, so we only need to construct\n * a final object containing all manifests by name.\n */\n this.manifest = manifests.reduce((acc, manifest) => {\n return { ...acc, [manifest.name]: manifest.manifest };\n }, {});\n\n return this.manifest;\n }\n\n setDocumentClient(client: DynamoDBDocument) {\n this.client = client;\n }\n\n private async loadManifests(): Promise<ServiceManifest[] | undefined> {\n const client = this.client || getDocumentClient();\n const { Items } = await client.send(\n new QueryCommand({\n TableName: String(process.env.DB_TABLE),\n IndexName: \"GSI1\",\n KeyConditionExpression: \"GSI1_PK = :GSI1_PK AND GSI1_SK > :GSI1_SK\",\n ExpressionAttributeValues: {\n \":GSI1_PK\": { S: `SERVICE_MANIFESTS` },\n \":GSI1_SK\": { S: \" \" }\n }\n })\n );\n\n if (!Array.isArray(Items)) {\n return undefined;\n }\n\n return Items.map(item => unmarshall(item).data);\n }\n}\n\nconst serviceManifestLoader = new ServiceManifestLoader();\n\nexport class ServiceDiscovery {\n static setDocumentClient(client: DynamoDBDocument): void {\n serviceManifestLoader.setDocumentClient(client);\n }\n\n static async load() {\n return serviceManifestLoader.load();\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAcA,MAAMC,qBAAqB,CAAC;EAEhBC,QAAQ,GAAyBC,SAAS;EAElD,MAAMC,IAAIA,CAAA,EAAG;IACT,IAAI,IAAI,CAACF,QAAQ,EAAE;MACf,OAAO,IAAI,CAACA,QAAQ;IACxB;IAEA,MAAMG,SAAS,GAAG,MAAM,IAAI,CAACC,aAAa,CAAC,CAAC;IAE5C,IAAI,CAACD,SAAS,EAAE;MACZ,OAAOF,SAAS;IACpB;;IAEA;AACR;AACA;AACA;IACQ,IAAI,CAACD,QAAQ,GAAGG,SAAS,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEN,QAAQ,KAAK;MAChD,OAAO;QAAE,GAAGM,GAAG;QAAE,CAACN,QAAQ,CAACO,IAAI,GAAGP,QAAQ,CAACA;MAAS,CAAC;IACzD,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,OAAO,IAAI,CAACA,QAAQ;EACxB;EAEAQ,iBAAiBA,CAACC,MAAwB,EAAE;IACxC,IAAI,CAACA,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAcL,aAAaA,CAAA,EAA2C;IAClE,MAAMK,MAAM,GAAG,IAAI,CAACA,MAAM,IAAI,IAAAC,iCAAiB,EAAC,CAAC;IACjD,MAAM;MAAEC;IAAM,CAAC,GAAG,MAAMF,MAAM,CAACG,IAAI,CAC/B,IAAIC,4BAAY,CAAC;MACbC,SAAS,EAAEC,MAAM,CAACC,OAAO,CAACC,GAAG,CAACC,QAAQ,CAAC;MACvCC,SAAS,EAAE,MAAM;MACjBC,sBAAsB,EAAE,2CAA2C;MACnEC,yBAAyB,EAAE;QACvB,UAAU,EAAE;UAAEC,CAAC,EAAG;QAAmB,CAAC;QACtC,UAAU,EAAE;UAAEA,CAAC,EAAE;QAAI;MACzB;IACJ,CAAC,CACL,CAAC;IAED,IAAI,CAACC,KAAK,CAACC,OAAO,CAACb,KAAK,CAAC,EAAE;MACvB,OAAOV,SAAS;IACpB;IAEA,OAAOU,KAAK,CAACc,GAAG,CAACC,IAAI,IAAI,IAAAC,0BAAU,EAACD,IAAI,CAAC,CAACE,IAAI,CAAC;EACnD;AACJ;AAEA,MAAMC,qBAAqB,GAAG,IAAI9B,qBAAqB,CAAC,CAAC;AAElD,MAAM+B,gBAAgB,CAAC;EAC1B,OAAOtB,iBAAiBA,CAACC,MAAwB,EAAQ;IACrDoB,qBAAqB,CAACrB,iBAAiB,CAACC,MAAM,CAAC;EACnD;EAEA,aAAaP,IAAIA,CAAA,EAAG;IAChB,OAAO2B,qBAAqB,CAAC3B,IAAI,CAAC,CAAC;EACvC;AACJ;AAAC6B,OAAA,CAAAD,gBAAA,GAAAA,gBAAA"}
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -14,6 +14,17 @@ Object.keys(_Context).forEach(function (key) {
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
+
var _ServiceDiscovery = require("./ServiceDiscovery");
|
|
18
|
+
Object.keys(_ServiceDiscovery).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _ServiceDiscovery[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _ServiceDiscovery[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
17
28
|
var _ContextPlugin = require("./plugins/ContextPlugin");
|
|
18
29
|
Object.keys(_ContextPlugin).forEach(function (key) {
|
|
19
30
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -24,4 +35,6 @@ Object.keys(_ContextPlugin).forEach(function (key) {
|
|
|
24
35
|
return _ContextPlugin[key];
|
|
25
36
|
}
|
|
26
37
|
});
|
|
27
|
-
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"~/Context\";\nexport * from \"~/plugins/ContextPlugin\";\n"],"mappings":";;;;;AAAA;
|
|
1
|
+
{"version":3,"names":["_Context","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_ServiceDiscovery","_ContextPlugin"],"sources":["index.ts"],"sourcesContent":["export * from \"~/Context\";\nexport * from \"~/ServiceDiscovery\";\nexport * from \"~/plugins/ContextPlugin\";\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,cAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,cAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,cAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAN,GAAA;IAAA;EAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.a9593f74dd",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,18 +12,19 @@
|
|
|
12
12
|
],
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@babel/runtime": "7.
|
|
16
|
-
"@webiny/
|
|
15
|
+
"@babel/runtime": "7.22.6",
|
|
16
|
+
"@webiny/aws-sdk": "0.0.0-unstable.a9593f74dd",
|
|
17
|
+
"@webiny/plugins": "0.0.0-unstable.a9593f74dd"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
19
|
-
"@babel/cli": "
|
|
20
|
-
"@babel/core": "
|
|
21
|
-
"@babel/preset-env": "
|
|
22
|
-
"@babel/preset-typescript": "
|
|
23
|
-
"@webiny/cli": "
|
|
24
|
-
"@webiny/project-utils": "
|
|
25
|
-
"rimraf": "
|
|
26
|
-
"ttypescript": "
|
|
20
|
+
"@babel/cli": "7.22.6",
|
|
21
|
+
"@babel/core": "7.22.8",
|
|
22
|
+
"@babel/preset-env": "7.22.7",
|
|
23
|
+
"@babel/preset-typescript": "7.22.5",
|
|
24
|
+
"@webiny/cli": "0.0.0-unstable.a9593f74dd",
|
|
25
|
+
"@webiny/project-utils": "0.0.0-unstable.a9593f74dd",
|
|
26
|
+
"rimraf": "3.0.2",
|
|
27
|
+
"ttypescript": "1.5.15",
|
|
27
28
|
"typescript": "4.7.4"
|
|
28
29
|
},
|
|
29
30
|
"publishConfig": {
|
|
@@ -34,5 +35,5 @@
|
|
|
34
35
|
"build": "yarn webiny run build",
|
|
35
36
|
"watch": "yarn webiny run watch"
|
|
36
37
|
},
|
|
37
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "a9593f74ddf9ce93263eadb0ddc0807ed343f5ee"
|
|
38
39
|
}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.BenchmarkPlugin = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
7
|
var _plugins = require("@webiny/plugins");
|
|
10
8
|
/**
|
|
11
9
|
* This plugin should be initialized only once per context, hence the name of the plugin.
|
|
12
10
|
*/
|
|
13
11
|
class BenchmarkPlugin extends _plugins.Plugin {
|
|
12
|
+
static type = "context.benchmark";
|
|
13
|
+
name = "context.benchmark";
|
|
14
14
|
constructor(benchmark) {
|
|
15
15
|
super();
|
|
16
|
-
(0, _defineProperty2.default)(this, "name", "context.benchmark");
|
|
17
|
-
(0, _defineProperty2.default)(this, "benchmark", void 0);
|
|
18
16
|
this.benchmark = benchmark;
|
|
19
17
|
}
|
|
20
18
|
enable() {
|
|
@@ -28,4 +26,5 @@ class BenchmarkPlugin extends _plugins.Plugin {
|
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
exports.BenchmarkPlugin = BenchmarkPlugin;
|
|
31
|
-
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=BenchmarkPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BenchmarkPlugin","Plugin","constructor","benchmark","enable","disable","measure","
|
|
1
|
+
{"version":3,"names":["_plugins","require","BenchmarkPlugin","Plugin","type","name","constructor","benchmark","enable","disable","measure","cb","exports"],"sources":["BenchmarkPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { Benchmark } from \"~/types\";\n\n/**\n * This plugin should be initialized only once per context, hence the name of the plugin.\n */\nexport class BenchmarkPlugin extends Plugin {\n public static override readonly type: string = \"context.benchmark\";\n public override name = \"context.benchmark\";\n public readonly benchmark: Benchmark;\n\n public constructor(benchmark: Benchmark) {\n super();\n this.benchmark = benchmark;\n }\n\n public enable(): void {\n this.benchmark.enable();\n }\n\n public disable(): void {\n this.benchmark.disable();\n }\n\n public async measure<T = any>(name: string, cb: () => Promise<T>): Promise<T> {\n return this.benchmark.measure<T>(name, cb);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACO,MAAMC,eAAe,SAASC,eAAM,CAAC;EACxC,OAAgCC,IAAI,GAAW,mBAAmB;EAClDC,IAAI,GAAG,mBAAmB;EAGnCC,WAAWA,CAACC,SAAoB,EAAE;IACrC,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC9B;EAEOC,MAAMA,CAAA,EAAS;IAClB,IAAI,CAACD,SAAS,CAACC,MAAM,CAAC,CAAC;EAC3B;EAEOC,OAAOA,CAAA,EAAS;IACnB,IAAI,CAACF,SAAS,CAACE,OAAO,CAAC,CAAC;EAC5B;EAEA,MAAaC,OAAOA,CAAUL,IAAY,EAAEM,EAAoB,EAAc;IAC1E,OAAO,IAAI,CAACJ,SAAS,CAACG,OAAO,CAAIL,IAAI,EAAEM,EAAE,CAAC;EAC9C;AACJ;AAACC,OAAA,CAAAV,eAAA,GAAAA,eAAA"}
|
package/plugins/ContextPlugin.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.createContextPlugin = exports.ContextPlugin = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
7
|
var _plugins = require("@webiny/plugins");
|
|
10
8
|
class ContextPlugin extends _plugins.Plugin {
|
|
9
|
+
static type = "context";
|
|
11
10
|
constructor(callable) {
|
|
12
11
|
super();
|
|
13
|
-
(0, _defineProperty2.default)(this, "_callable", void 0);
|
|
14
12
|
this._callable = callable;
|
|
15
13
|
}
|
|
16
14
|
async apply(context) {
|
|
@@ -21,8 +19,9 @@ class ContextPlugin extends _plugins.Plugin {
|
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
21
|
exports.ContextPlugin = ContextPlugin;
|
|
24
|
-
(0, _defineProperty2.default)(ContextPlugin, "type", "context");
|
|
25
22
|
const createContextPlugin = callable => {
|
|
26
23
|
return new ContextPlugin(callable);
|
|
27
24
|
};
|
|
28
|
-
exports.createContextPlugin = createContextPlugin;
|
|
25
|
+
exports.createContextPlugin = createContextPlugin;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=ContextPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ContextPlugin","Plugin","constructor","callable","_callable","apply","context","Error","createContextPlugin"],"sources":["ContextPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { Context } from \"~/types\";\n\nexport interface ContextPluginCallable<T extends Context = Context> {\n (context: T): void | Promise<void>;\n}\n\nexport class ContextPlugin<T extends Context = Context> extends Plugin {\n public static override readonly type: string = \"context\";\n private readonly _callable: ContextPluginCallable<T>;\n\n constructor(callable: ContextPluginCallable<T>) {\n super();\n this._callable = callable;\n }\n\n public async apply(context: T): Promise<void> {\n if (typeof this._callable !== \"function\") {\n throw Error(\n `Missing callable in ContextPlugin! Either pass a callable to plugin constructor or extend the plugin and override the \"apply\" method.`\n );\n }\n\n return this._callable(context);\n }\n}\n\nexport const createContextPlugin = <T extends Context = Context>(\n callable: ContextPluginCallable<T>\n): ContextPlugin<T> => {\n return new ContextPlugin<T>(callable);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_plugins","require","ContextPlugin","Plugin","type","constructor","callable","_callable","apply","context","Error","exports","createContextPlugin"],"sources":["ContextPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { Context } from \"~/types\";\n\nexport interface ContextPluginCallable<T extends Context = Context> {\n (context: T): void | Promise<void>;\n}\n\nexport class ContextPlugin<T extends Context = Context> extends Plugin {\n public static override readonly type: string = \"context\";\n private readonly _callable: ContextPluginCallable<T>;\n\n constructor(callable: ContextPluginCallable<T>) {\n super();\n this._callable = callable;\n }\n\n public async apply(context: T): Promise<void> {\n if (typeof this._callable !== \"function\") {\n throw Error(\n `Missing callable in ContextPlugin! Either pass a callable to plugin constructor or extend the plugin and override the \"apply\" method.`\n );\n }\n\n return this._callable(context);\n }\n}\n\nexport const createContextPlugin = <T extends Context = Context>(\n callable: ContextPluginCallable<T>\n): ContextPlugin<T> => {\n return new ContextPlugin<T>(callable);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAOO,MAAMC,aAAa,SAAsCC,eAAM,CAAC;EACnE,OAAgCC,IAAI,GAAW,SAAS;EAGxDC,WAAWA,CAACC,QAAkC,EAAE;IAC5C,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,SAAS,GAAGD,QAAQ;EAC7B;EAEA,MAAaE,KAAKA,CAACC,OAAU,EAAiB;IAC1C,IAAI,OAAO,IAAI,CAACF,SAAS,KAAK,UAAU,EAAE;MACtC,MAAMG,KAAK,CACN,uIACL,CAAC;IACL;IAEA,OAAO,IAAI,CAACH,SAAS,CAACE,OAAO,CAAC;EAClC;AACJ;AAACE,OAAA,CAAAT,aAAA,GAAAA,aAAA;AAEM,MAAMU,mBAAmB,GAC5BN,QAAkC,IACf;EACnB,OAAO,IAAIJ,aAAa,CAAII,QAAQ,CAAC;AACzC,CAAC;AAACK,OAAA,CAAAC,mBAAA,GAAAA,mBAAA"}
|
package/types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export interface BenchmarkRuns {
|
|
|
4
4
|
}
|
|
5
5
|
export interface BenchmarkMeasurement {
|
|
6
6
|
name: string;
|
|
7
|
+
category: string;
|
|
7
8
|
start: Date;
|
|
8
9
|
end: Date;
|
|
9
10
|
elapsed: number;
|
|
@@ -12,11 +13,16 @@ export interface BenchmarkMeasurement {
|
|
|
12
13
|
export interface BenchmarkEnableOnCallable {
|
|
13
14
|
(): Promise<boolean>;
|
|
14
15
|
}
|
|
15
|
-
export
|
|
16
|
-
|
|
16
|
+
export interface BenchmarkOutputCallableParams {
|
|
17
|
+
benchmark: Benchmark;
|
|
18
|
+
stop: () => "stop";
|
|
17
19
|
}
|
|
18
20
|
export interface BenchmarkOutputCallable {
|
|
19
|
-
(
|
|
21
|
+
(params: BenchmarkOutputCallableParams): Promise<"stop" | undefined | null | void>;
|
|
22
|
+
}
|
|
23
|
+
export interface BenchmarkMeasureOptions {
|
|
24
|
+
name: string;
|
|
25
|
+
category: string;
|
|
20
26
|
}
|
|
21
27
|
export interface Benchmark {
|
|
22
28
|
elapsed: number;
|
|
@@ -25,7 +31,7 @@ export interface Benchmark {
|
|
|
25
31
|
output: () => Promise<void>;
|
|
26
32
|
onOutput: (cb: BenchmarkOutputCallable) => void;
|
|
27
33
|
enableOn: (cb: BenchmarkEnableOnCallable) => void;
|
|
28
|
-
measure: <T = any>(
|
|
34
|
+
measure: <T = any>(options: BenchmarkMeasureOptions | string, cb: () => Promise<T>) => Promise<T>;
|
|
29
35
|
enable: () => void;
|
|
30
36
|
disable: () => void;
|
|
31
37
|
}
|
package/types.js
CHANGED
|
@@ -3,9 +3,5 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports.BenchmarkOutputCallableResponse = BenchmarkOutputCallableResponse;
|
|
9
|
-
(function (BenchmarkOutputCallableResponse) {
|
|
10
|
-
BenchmarkOutputCallableResponse["BREAK"] = "break";
|
|
11
|
-
})(BenchmarkOutputCallableResponse || (exports.BenchmarkOutputCallableResponse = BenchmarkOutputCallableResponse = {}));
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { PluginsContainer } from \"@webiny/plugins\";\n\nexport interface BenchmarkRuns {\n [key: string]: number;\n}\n\nexport interface BenchmarkMeasurement {\n name: string;\n category: string;\n start: Date;\n end: Date;\n elapsed: number;\n memory: number;\n}\n\nexport interface BenchmarkEnableOnCallable {\n (): Promise<boolean>;\n}\n\nexport interface BenchmarkOutputCallableParams {\n benchmark: Benchmark;\n stop: () => \"stop\";\n}\nexport interface BenchmarkOutputCallable {\n (params: BenchmarkOutputCallableParams): Promise<\"stop\" | undefined | null | void>;\n}\nexport interface BenchmarkMeasureOptions {\n name: string;\n category: string;\n}\nexport interface Benchmark {\n elapsed: number;\n runs: BenchmarkRuns;\n measurements: BenchmarkMeasurement[];\n output: () => Promise<void>;\n onOutput: (cb: BenchmarkOutputCallable) => void;\n enableOn: (cb: BenchmarkEnableOnCallable) => void;\n measure: <T = any>(\n options: BenchmarkMeasureOptions | string,\n cb: () => Promise<T>\n ) => Promise<T>;\n enable: () => void;\n disable: () => void;\n}\n\n/**\n * The main context which is constructed on every request.\n * All other contexts should extend or augment this one.\n */\nexport interface Context {\n plugins: PluginsContainer;\n args: any;\n readonly WEBINY_VERSION: string;\n /**\n * Not to be used outside of Webiny internal code.\n * @internal\n */\n hasResult: () => boolean;\n /**\n * Not to be used outside of Webiny internal code.\n * @internal\n *\n * @private\n */\n _result?: any;\n /**\n * Not to be used outside of Webiny internal code.\n * @internal\n */\n setResult: (value: any) => void;\n /**\n * Not to be used outside of Webiny internal code.\n * @internal\n */\n getResult: () => void;\n /**\n * Wait for property to be defined on the object and then execute the callable.\n * In case of multiple objects defined, wait for all of them.\n */\n waitFor: <T extends Context = Context>(\n obj: string[] | string,\n cb: (context: T) => void\n ) => void;\n\n benchmark: Benchmark;\n}\n"],"mappings":""}
|