@powercalc/power-router 1.0.37 → 1.0.41
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/dist/app.d.ts +1 -0
- package/dist/app.js +27 -0
- package/dist/app.js.map +1 -0
- package/dist/converter.d.ts +8 -0
- package/dist/converter.js +60 -0
- package/dist/converter.js.map +1 -0
- package/dist/genTypes.d.ts +4 -0
- package/dist/genTypes.js +54 -0
- package/dist/genTypes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/load.d.ts +7 -0
- package/dist/load.js +32 -0
- package/dist/load.js.map +1 -0
- package/dist/router/controllers/LoadAndParse.d.ts +10 -0
- package/dist/router/controllers/LoadAndParse.js +58 -0
- package/dist/router/controllers/LoadAndParse.js.map +1 -0
- package/dist/router/controllers/Router.d.ts +7 -0
- package/dist/router/controllers/Router.js +106 -0
- package/dist/router/controllers/Router.js.map +1 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.js +6 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/interfaces/config.d.ts +5 -0
- package/dist/router/interfaces/config.js +3 -0
- package/dist/router/interfaces/config.js.map +1 -0
- package/dist/router/interfaces/entsoe.d.ts +50 -0
- package/dist/router/interfaces/entsoe.js +3 -0
- package/dist/router/interfaces/entsoe.js.map +1 -0
- package/dist/router/interfaces/queryoptions.d.ts +15 -0
- package/dist/router/interfaces/queryoptions.js +16 -0
- package/dist/router/interfaces/queryoptions.js.map +1 -0
- package/dist/router/interfaces/types.d.ts +12 -0
- package/dist/router/interfaces/types.js +3 -0
- package/dist/router/interfaces/types.js.map +1 -0
- package/dist/router/services/CommonTimestamps.d.ts +15 -0
- package/dist/router/services/CommonTimestamps.js +174 -0
- package/dist/router/services/CommonTimestamps.js.map +1 -0
- package/dist/router/services/Eurostat.d.ts +10 -0
- package/dist/router/services/Eurostat.js +73 -0
- package/dist/router/services/Eurostat.js.map +1 -0
- package/dist/router/services/LoadService.d.ts +27 -0
- package/dist/router/services/LoadService.js +83 -0
- package/dist/router/services/LoadService.js.map +1 -0
- package/dist/router/services/Loader.d.ts +38 -0
- package/dist/router/services/Loader.js +122 -0
- package/dist/router/services/Loader.js.map +1 -0
- package/dist/router/services/ParseEdifact.d.ts +28 -0
- package/dist/router/services/ParseEdifact.js +160 -0
- package/dist/router/services/ParseEdifact.js.map +1 -0
- package/dist/router/services/ParseInstalled.d.ts +9 -0
- package/dist/router/services/ParseInstalled.js +46 -0
- package/dist/router/services/ParseInstalled.js.map +1 -0
- package/dist/router/services/batch/maxHydrofill.d.ts +10 -0
- package/dist/router/services/batch/maxHydrofill.js +66 -0
- package/dist/router/services/batch/maxHydrofill.js.map +1 -0
- package/package.json +3 -3
- /package/dist/{countries.json → router/config/countries.json} +0 -0
- /package/dist/{countrydata.json → router/config/countrydata.json} +0 -0
- /package/dist/{types.json → router/config/types.json} +0 -0
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
require("reflect-metadata");
|
|
7
|
+
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = '0';
|
|
8
|
+
const express_1 = __importDefault(require("express"));
|
|
9
|
+
const cors_1 = __importDefault(require("cors"));
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const process_1 = require("process");
|
|
12
|
+
const Router_1 = require("./router/controllers/Router");
|
|
13
|
+
const app = (0, express_1.default)();
|
|
14
|
+
const port = 30000;
|
|
15
|
+
const config = {
|
|
16
|
+
securityToken: '1c608639-afff-4d73-bfe1-a960fe7ea8da',
|
|
17
|
+
cacheDir: (0, path_1.join)((0, process_1.cwd)(), 'data'),
|
|
18
|
+
entsoeDomain: "https://web-api.tp.entsoe.eu"
|
|
19
|
+
};
|
|
20
|
+
app.use((0, cors_1.default)());
|
|
21
|
+
app.use('/entsoe', Router_1.PowerRouter.init(config));
|
|
22
|
+
app.use('/public', express_1.default.static('public'));
|
|
23
|
+
// app.use('/config', express.static('dist/config', { maxAge: 100000 }));
|
|
24
|
+
app.listen(port, () => {
|
|
25
|
+
console.log(`Server listening on port ${port}`);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":";;;;;AAAA,4BAA0B;AAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,GAAG,GAAG,CAAC;AAElD,sDAA2C;AAC3C,gDAAuB;AACvB,+BAA4B;AAC5B,qCAA8B;AAE9B,wDAA0D;AAE1D,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;AACtB,MAAM,IAAI,GAAG,KAAK,CAAC;AACnB,MAAM,MAAM,GAAW;IACrB,aAAa,EAAE,sCAAsC;IACrD,QAAQ,EAAE,IAAA,WAAI,EAAC,IAAA,aAAG,GAAE,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,8BAA8B;CAC7C,CAAA;AACD,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,GAAW,CAAC,CAAC;AACzB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,oBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7C,yEAAyE;AAEzE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class Convert {
|
|
2
|
+
static start(): Promise<void>;
|
|
3
|
+
static getCountries(): Promise<any>;
|
|
4
|
+
static getGeneration(countryCode: string): Promise<any>;
|
|
5
|
+
static getLoad(countryCode: string): Promise<any>;
|
|
6
|
+
static getPrice(countryCode: string): Promise<any>;
|
|
7
|
+
static getHydrofill(countryCode: string): Promise<any>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Convert = void 0;
|
|
4
|
+
const genTypes_1 = require("./genTypes");
|
|
5
|
+
const maxHydrofill_1 = require("./router/services/batch/maxHydrofill");
|
|
6
|
+
const promises_1 = require("node:fs/promises");
|
|
7
|
+
class Convert {
|
|
8
|
+
static async start() {
|
|
9
|
+
const countries = await this.getCountries();
|
|
10
|
+
console.log(countries);
|
|
11
|
+
for (const country of countries) {
|
|
12
|
+
const types = await genTypes_1.GenTypes.getTypes(country.code);
|
|
13
|
+
country.types = types;
|
|
14
|
+
console.log(country.name, types.join(', '));
|
|
15
|
+
const h = await maxHydrofill_1.Hydrofill.getMaxHydrofill(country.code);
|
|
16
|
+
if (h.max) {
|
|
17
|
+
const GW = Math.round(h.max / 1000) + ' GW';
|
|
18
|
+
console.log(country.name, GW);
|
|
19
|
+
country.hydrofill = {
|
|
20
|
+
min: h.min,
|
|
21
|
+
max: h.max
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const gen = await this.getGeneration(country.code);
|
|
25
|
+
const load = await this.getLoad(country.code);
|
|
26
|
+
const price = await this.getPrice(country.code);
|
|
27
|
+
const hydrofill = await this.getHydrofill(country.code);
|
|
28
|
+
}
|
|
29
|
+
console.log(countries);
|
|
30
|
+
(0, promises_1.writeFile)('data/countrydata.json', JSON.stringify(countries, null, 2), 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
static async getCountries() {
|
|
33
|
+
const url = 'https://powercalculator.eu/entsoe/datalists/countries';
|
|
34
|
+
const response = await fetch(url);
|
|
35
|
+
return await response.json();
|
|
36
|
+
}
|
|
37
|
+
static async getGeneration(countryCode) {
|
|
38
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/generation?year=2021&month=9`;
|
|
39
|
+
const response = await fetch(url);
|
|
40
|
+
return await response.json();
|
|
41
|
+
}
|
|
42
|
+
static async getLoad(countryCode) {
|
|
43
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/load?year=2021&month=9`;
|
|
44
|
+
const response = await fetch(url);
|
|
45
|
+
return await response.json();
|
|
46
|
+
}
|
|
47
|
+
static async getPrice(countryCode) {
|
|
48
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/prices?year=2021&month=9`;
|
|
49
|
+
const response = await fetch(url);
|
|
50
|
+
return await response.json();
|
|
51
|
+
}
|
|
52
|
+
static async getHydrofill(countryCode) {
|
|
53
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/hydrofill?year=2021`;
|
|
54
|
+
const response = await fetch(url);
|
|
55
|
+
return await response.json();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.Convert = Convert;
|
|
59
|
+
Convert.start();
|
|
60
|
+
//# sourceMappingURL=converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
|
package/dist/genTypes.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenTypes = void 0;
|
|
4
|
+
const node_zlib_1 = require("node:zlib");
|
|
5
|
+
const load_1 = require("./load");
|
|
6
|
+
const promises_1 = require("node:fs/promises");
|
|
7
|
+
class GenTypes {
|
|
8
|
+
static async getTypes(country) {
|
|
9
|
+
let types = [];
|
|
10
|
+
const minYear = 2015;
|
|
11
|
+
const maxYear = 2023;
|
|
12
|
+
let min;
|
|
13
|
+
let max;
|
|
14
|
+
for (let year = minYear; year <= maxYear; year++) {
|
|
15
|
+
for (let month = 1; month <= 12; month++) {
|
|
16
|
+
const gen = await load_1.Load.getGeneration(country, year, month);
|
|
17
|
+
const price = await load_1.Load.getPrice(country, year, month);
|
|
18
|
+
const load = await load_1.Load.getLoad(country, year, month);
|
|
19
|
+
const all = this.makeGen(gen, load, price);
|
|
20
|
+
const gzipfilename = `data/gzip/${country}-${year}-${month}.json.gzip`;
|
|
21
|
+
const filename = `data/generation/${country}-${year}-${month}.json`;
|
|
22
|
+
const buf = Buffer.from(JSON.stringify(all), 'utf-8');
|
|
23
|
+
(0, node_zlib_1.gzip)(buf, async (_, result) => {
|
|
24
|
+
var _a;
|
|
25
|
+
await (0, promises_1.writeFile)(gzipfilename, result, 'utf-8');
|
|
26
|
+
// console.log(gen.dataset.map((item:any) => item.label))
|
|
27
|
+
types = types.concat(((_a = gen.dataset) === null || _a === void 0 ? void 0 : _a.map((item) => item.psrType)) || []);
|
|
28
|
+
});
|
|
29
|
+
await (0, promises_1.writeFile)(filename, JSON.stringify(all, null, 2), 'utf-8');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return [...new Set(types)].sort();
|
|
33
|
+
}
|
|
34
|
+
static makeGen(gen, load, price) {
|
|
35
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
36
|
+
const all = {};
|
|
37
|
+
if ((_a = gen.dataset) === null || _a === void 0 ? void 0 : _a[0]) {
|
|
38
|
+
all.time = (_d = (_c = (_b = gen.dataset) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.map((item) => item.x);
|
|
39
|
+
gen.dataset.forEach((dataset) => {
|
|
40
|
+
all[dataset.psrType] = dataset.data.map((item) => item.y);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if ((_f = (_e = load === null || load === void 0 ? void 0 : load.dataset) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.data) {
|
|
44
|
+
all.A05 = load.dataset[0].data.map((item) => item.y);
|
|
45
|
+
}
|
|
46
|
+
if ((_g = price === null || price === void 0 ? void 0 : price.dataset) === null || _g === void 0 ? void 0 : _g[0]) {
|
|
47
|
+
all.price = price.dataset[0].data.map((item) => item.y);
|
|
48
|
+
}
|
|
49
|
+
console.log((_h = all.time) === null || _h === void 0 ? void 0 : _h.length, (_j = all.A05) === null || _j === void 0 ? void 0 : _j.length, (_k = all.price) === null || _k === void 0 ? void 0 : _k.length);
|
|
50
|
+
return all;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.GenTypes = GenTypes;
|
|
54
|
+
//# sourceMappingURL=genTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genTypes.js","sourceRoot":"","sources":["../src/genTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PowerRouter = void 0;
|
|
4
|
+
var Router_1 = require("./router/controllers/Router");
|
|
5
|
+
Object.defineProperty(exports, "PowerRouter", { enumerable: true, get: function () { return Router_1.PowerRouter; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,sDAA0D;AAAjD,qGAAA,WAAW,OAAA"}
|
package/dist/load.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class Load {
|
|
2
|
+
static getCountries(): Promise<any>;
|
|
3
|
+
static getGeneration(countryCode: string, year: number, month: number): Promise<any>;
|
|
4
|
+
static getLoad(countryCode: string, year: number, month: number): Promise<any>;
|
|
5
|
+
static getPrice(countryCode: string, year: number, month: number): Promise<any>;
|
|
6
|
+
static getHydrofill(countryCode: string, year: number): Promise<any>;
|
|
7
|
+
}
|
package/dist/load.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Load = void 0;
|
|
4
|
+
class Load {
|
|
5
|
+
static async getCountries() {
|
|
6
|
+
const url = 'https://powercalculator.eu/entsoe/datalists/countries';
|
|
7
|
+
const response = await fetch(url);
|
|
8
|
+
return await response.json();
|
|
9
|
+
}
|
|
10
|
+
static async getGeneration(countryCode, year, month) {
|
|
11
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/generation?year=${year}&month=${month}`;
|
|
12
|
+
const response = await fetch(url);
|
|
13
|
+
return await response.json();
|
|
14
|
+
}
|
|
15
|
+
static async getLoad(countryCode, year, month) {
|
|
16
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/load?year=${year}&month=${month}`;
|
|
17
|
+
const response = await fetch(url);
|
|
18
|
+
return await response.json();
|
|
19
|
+
}
|
|
20
|
+
static async getPrice(countryCode, year, month) {
|
|
21
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/prices?year=${year}&month=${month}`;
|
|
22
|
+
const response = await fetch(url);
|
|
23
|
+
return await response.json();
|
|
24
|
+
}
|
|
25
|
+
static async getHydrofill(countryCode, year) {
|
|
26
|
+
const url = `https://powercalculator.eu/entsoe/${countryCode}/hydrofill?year=${year}`;
|
|
27
|
+
const response = await fetch(url);
|
|
28
|
+
return await response.json();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.Load = Load;
|
|
32
|
+
//# sourceMappingURL=load.js.map
|
package/dist/load.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../src/load.ts"],"names":[],"mappings":";;;AAAA,MAAa,IAAI;IAGb,MAAM,CAAC,KAAK,CAAC,YAAY;QACrB,MAAM,GAAG,GAAG,uDAAuD,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,IAAY,EAAE,KAAa;QACvE,MAAM,GAAG,GAAG,qCAAqC,WAAW,oBAAoB,IAAI,UAAU,KAAK,EAAE,CAAC;QACtG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,IAAY,EAAE,KAAa;QACjE,MAAM,GAAG,GAAG,qCAAqC,WAAW,cAAc,IAAI,UAAU,KAAK,EAAE,CAAC;QAChG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,IAAY,EAAE,KAAa;QAClE,MAAM,GAAG,GAAG,qCAAqC,WAAW,gBAAgB,IAAI,UAAU,KAAK,EAAE,CAAC;QAClG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,IAAY;QACvD,MAAM,GAAG,GAAG,qCAAqC,WAAW,mBAAmB,IAAI,EAAE,CAAA;QACrF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,CAAC;CAEJ;AAjCD,oBAiCC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Request } from 'express';
|
|
2
|
+
import { LoadService } from '../services/LoadService';
|
|
3
|
+
import { Config } from '../interfaces/config';
|
|
4
|
+
export declare class LoadAndParse {
|
|
5
|
+
country: string;
|
|
6
|
+
private countries;
|
|
7
|
+
loadService: LoadService;
|
|
8
|
+
constructor(config: Config);
|
|
9
|
+
get(req: Request, chartType: string): Promise<any>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoadAndParse = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const LoadService_1 = require("../services/LoadService");
|
|
7
|
+
const queryoptions_1 = require("../interfaces/queryoptions");
|
|
8
|
+
class LoadAndParse {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.country = '';
|
|
11
|
+
const countriesFile = (0, path_1.join)(__dirname, '../config/countries.json'); // Set the path to your config file
|
|
12
|
+
this.countries = JSON.parse((0, fs_1.readFileSync)(countriesFile, 'utf8')); // Read the config file from disk
|
|
13
|
+
this.loadService = new LoadService_1.LoadService(config);
|
|
14
|
+
}
|
|
15
|
+
async get(req, chartType) {
|
|
16
|
+
var _a;
|
|
17
|
+
const country = req.params.country;
|
|
18
|
+
if (this.country !== country) {
|
|
19
|
+
console.log(`=========== ${country} =============`);
|
|
20
|
+
this.country = country;
|
|
21
|
+
}
|
|
22
|
+
const queryOptions = {};
|
|
23
|
+
const year = parseInt(req.params.year);
|
|
24
|
+
const month = parseInt(req.params.month);
|
|
25
|
+
if (req.query.posneg === queryoptions_1.PosNeg.POS || req.query.posneg === queryoptions_1.PosNeg.NEG) {
|
|
26
|
+
queryOptions.posneg = req.query.posneg;
|
|
27
|
+
}
|
|
28
|
+
if (typeof (req.query.format) === 'string' && Object.values(queryoptions_1.Format).includes(req.query.format)) {
|
|
29
|
+
queryOptions.format = req.query.format;
|
|
30
|
+
}
|
|
31
|
+
let reload = false;
|
|
32
|
+
if (typeof (req.headers.reload) === 'string') {
|
|
33
|
+
reload = true;
|
|
34
|
+
queryOptions.reload = true;
|
|
35
|
+
}
|
|
36
|
+
const countryCode = (_a = this.countries.find(item => item.name === country)) === null || _a === void 0 ? void 0 : _a.code;
|
|
37
|
+
if (!countryCode) {
|
|
38
|
+
throw new Error('Unknown country ' + country);
|
|
39
|
+
}
|
|
40
|
+
if (chartType === 'installed') {
|
|
41
|
+
return await this.loadService.getInstalled(countryCode, reload);
|
|
42
|
+
}
|
|
43
|
+
if (chartType === 'power') {
|
|
44
|
+
return await this.loadService.getPower(countryCode, year, month, queryOptions);
|
|
45
|
+
}
|
|
46
|
+
if (chartType === 'hydrofill') {
|
|
47
|
+
return await this.loadService.getHydrofill(countryCode, reload);
|
|
48
|
+
}
|
|
49
|
+
if (chartType === 'fossil') {
|
|
50
|
+
return await this.loadService.getFossil(countryCode);
|
|
51
|
+
}
|
|
52
|
+
if (chartType === 'countrydata') {
|
|
53
|
+
return await this.loadService.getCountrydata(countryCode, reload);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.LoadAndParse = LoadAndParse;
|
|
58
|
+
//# sourceMappingURL=LoadAndParse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadAndParse.js","sourceRoot":"","sources":["../../../src/router/controllers/LoadAndParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Router, Request, Response } from 'express';
|
|
2
|
+
import { Config } from '../interfaces/config';
|
|
3
|
+
export declare class PowerRouter {
|
|
4
|
+
static init(config: Config): Router;
|
|
5
|
+
static load(config: Config, req: Request, res: Response, type: string): Promise<void>;
|
|
6
|
+
static calcCacheTime(req: Request): number;
|
|
7
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PowerRouter = void 0;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const promises_1 = require("fs/promises");
|
|
7
|
+
const zlib_1 = require("zlib");
|
|
8
|
+
const node_buffer_1 = require("node:buffer");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const LoadAndParse_1 = require("./LoadAndParse");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
class PowerRouter {
|
|
13
|
+
static init(config) {
|
|
14
|
+
console.log('init', config);
|
|
15
|
+
const router = (0, express_1.Router)();
|
|
16
|
+
router.get(`/:country/:year/:month`, async (req, res) => {
|
|
17
|
+
await this.load(config, req, res, 'power');
|
|
18
|
+
});
|
|
19
|
+
router.get(`/:country/fossil`, async (req, res) => {
|
|
20
|
+
await this.load(config, req, res, 'fossil');
|
|
21
|
+
});
|
|
22
|
+
router.get(`/:country/installed`, async (req, res) => {
|
|
23
|
+
await this.load(config, req, res, 'installed');
|
|
24
|
+
});
|
|
25
|
+
router.get(`/:country/hydrofill`, async (req, res) => {
|
|
26
|
+
await this.load(config, req, res, 'hydrofill');
|
|
27
|
+
});
|
|
28
|
+
router.get(`/:country/countrydata`, async (req, res) => {
|
|
29
|
+
await this.load(config, req, res, 'countrydata');
|
|
30
|
+
});
|
|
31
|
+
router.get('/types', async (req, res) => {
|
|
32
|
+
const filePath = (0, path_1.join)(__dirname, '..', 'config', 'types.json');
|
|
33
|
+
res.set({ 'Cache-Control': 'max-age=86400' });
|
|
34
|
+
res.sendFile(filePath);
|
|
35
|
+
});
|
|
36
|
+
router.get('/countries', async (req, res) => {
|
|
37
|
+
const filePath = (0, path_1.join)(__dirname, '..', 'config', 'countrydata.json');
|
|
38
|
+
res.set({ 'Cache-Control': 'max-age=86400' });
|
|
39
|
+
res.sendFile(filePath);
|
|
40
|
+
});
|
|
41
|
+
return router;
|
|
42
|
+
}
|
|
43
|
+
static async load(config, req, res, type) {
|
|
44
|
+
const entsoeLoader = new LoadAndParse_1.LoadAndParse(config);
|
|
45
|
+
const cacheTime = this.calcCacheTime(req);
|
|
46
|
+
const successHeaders = {
|
|
47
|
+
'Cache-Control': `public, max-age=${cacheTime}`,
|
|
48
|
+
'Content-Encoding': 'gzip',
|
|
49
|
+
'Content-Type': 'application/json'
|
|
50
|
+
};
|
|
51
|
+
try {
|
|
52
|
+
let cacheData;
|
|
53
|
+
const cacheKey = req.url;
|
|
54
|
+
const cacheFilePath = `${config.cacheDir}/${(0, crypto_1.createHash)('md5').update(cacheKey).digest('hex')}.json.gz`;
|
|
55
|
+
if (!(req.headers['reload'] === 'full')) {
|
|
56
|
+
// check if there is a cache file for this request
|
|
57
|
+
try {
|
|
58
|
+
const stats = await (0, promises_1.stat)(cacheFilePath);
|
|
59
|
+
const modtime = stats.mtime.getTime();
|
|
60
|
+
// Check if the If-Modified-Since header matches the last modified date
|
|
61
|
+
const ifModifiedSince = req.headers['if-modified-since'];
|
|
62
|
+
if (ifModifiedSince && (modtime - new Date(ifModifiedSince).getTime()) < 5000) {
|
|
63
|
+
res.status(304).end();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
res.setHeader('Last-Modified', (new Date(modtime)).toUTCString());
|
|
67
|
+
res.set(successHeaders);
|
|
68
|
+
console.log('cached');
|
|
69
|
+
(0, fs_1.createReadStream)(cacheFilePath)
|
|
70
|
+
.pipe(res);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
// no cache file found, continue with request
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// if no cache hit, load data and store in cache
|
|
78
|
+
if (!cacheData) {
|
|
79
|
+
// LOAD THE DATA FROM SOURCE
|
|
80
|
+
const body = await entsoeLoader.get(req, type);
|
|
81
|
+
const buf = node_buffer_1.Buffer.from(JSON.stringify(body), 'utf-8');
|
|
82
|
+
const cacheDataBuffer = (0, zlib_1.gzipSync)(buf);
|
|
83
|
+
await (0, promises_1.writeFile)(cacheFilePath, cacheDataBuffer, 'utf-8');
|
|
84
|
+
res.setHeader('Last-Modified', (new Date()).toUTCString());
|
|
85
|
+
res.set(successHeaders);
|
|
86
|
+
res.send(cacheDataBuffer);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
console.log(e);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
static calcCacheTime(req) {
|
|
94
|
+
const reqMonth = `${req.params.year} ${req.params.month}`;
|
|
95
|
+
const now = new Date();
|
|
96
|
+
const nowMonth = `${now.getFullYear()} ${now.getMonth() + 1}`;
|
|
97
|
+
if (reqMonth === nowMonth) {
|
|
98
|
+
return 5 * 60;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return 3600 * 7;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.PowerRouter = PowerRouter;
|
|
106
|
+
//# sourceMappingURL=Router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../../../src/router/controllers/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PowerRouter = void 0;
|
|
4
|
+
var Router_1 = require("./controllers/Router");
|
|
5
|
+
Object.defineProperty(exports, "PowerRouter", { enumerable: true, get: function () { return Router_1.PowerRouter; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;AAAA,+CAAmD;AAA1C,qGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/router/interfaces/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface Entsoe {
|
|
2
|
+
GL_MarketDocument?: EntsoeDocument;
|
|
3
|
+
Publication_MarketDocument?: EntsoeDocument;
|
|
4
|
+
Acknowledgement_MarketDocument?: ErrorDocument;
|
|
5
|
+
}
|
|
6
|
+
export interface EntsoeDocument {
|
|
7
|
+
TimeSeries: TimeSeries[];
|
|
8
|
+
'period.timeInterval'?: TimeInterval[];
|
|
9
|
+
'time_Period.timeInterval'?: TimeInterval[];
|
|
10
|
+
type?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface TimeSeries {
|
|
13
|
+
Period: EntsoePeriod[];
|
|
14
|
+
MktPSRType?: MktPSRType[];
|
|
15
|
+
'outBiddingZone_Domain.mRID': string;
|
|
16
|
+
}
|
|
17
|
+
export interface EntsoePeriod {
|
|
18
|
+
Point: EntsoePoint[];
|
|
19
|
+
resolution: string;
|
|
20
|
+
timeInterval: TimeInterval[];
|
|
21
|
+
}
|
|
22
|
+
interface TimeInterval {
|
|
23
|
+
start: string[];
|
|
24
|
+
end: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface MktPSRType {
|
|
27
|
+
psrType?: string[];
|
|
28
|
+
PowerSystemResources?: PowerSystemResource[];
|
|
29
|
+
}
|
|
30
|
+
export interface EntsoePoint {
|
|
31
|
+
position: string[];
|
|
32
|
+
quantity?: string[];
|
|
33
|
+
'price.amount'?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface PowerSystemResource {
|
|
36
|
+
mRID: mRID[];
|
|
37
|
+
name: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface mRID {
|
|
40
|
+
_: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ErrorDocument {
|
|
43
|
+
mRID: string;
|
|
44
|
+
Reason: Reason[];
|
|
45
|
+
}
|
|
46
|
+
interface Reason {
|
|
47
|
+
code: string[];
|
|
48
|
+
text: string[];
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entsoe.js","sourceRoot":"","sources":["../../../src/router/interfaces/entsoe.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface QueryOptions {
|
|
2
|
+
reload?: boolean;
|
|
3
|
+
format?: Format;
|
|
4
|
+
posneg?: PosNeg;
|
|
5
|
+
}
|
|
6
|
+
export declare enum Format {
|
|
7
|
+
EDIFACT = "edifact",
|
|
8
|
+
EDIJSON = "edijson",
|
|
9
|
+
SOURCES = "sources",
|
|
10
|
+
KEYVALUE = "keyvalue"
|
|
11
|
+
}
|
|
12
|
+
export declare enum PosNeg {
|
|
13
|
+
POS = "pos",
|
|
14
|
+
NEG = "neg"
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PosNeg = exports.Format = void 0;
|
|
4
|
+
var Format;
|
|
5
|
+
(function (Format) {
|
|
6
|
+
Format["EDIFACT"] = "edifact";
|
|
7
|
+
Format["EDIJSON"] = "edijson";
|
|
8
|
+
Format["SOURCES"] = "sources";
|
|
9
|
+
Format["KEYVALUE"] = "keyvalue";
|
|
10
|
+
})(Format = exports.Format || (exports.Format = {}));
|
|
11
|
+
var PosNeg;
|
|
12
|
+
(function (PosNeg) {
|
|
13
|
+
PosNeg["POS"] = "pos";
|
|
14
|
+
PosNeg["NEG"] = "neg";
|
|
15
|
+
})(PosNeg = exports.PosNeg || (exports.PosNeg = {}));
|
|
16
|
+
//# sourceMappingURL=queryoptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryoptions.js","sourceRoot":"","sources":["../../../src/router/interfaces/queryoptions.ts"],"names":[],"mappings":";;;AAMA,IAAY,MAKX;AALD,WAAY,MAAM;IACd,6BAAmB,CAAA;IACnB,6BAAmB,CAAA;IACnB,6BAAmB,CAAA;IACnB,+BAAqB,CAAA;AACzB,CAAC,EALW,MAAM,GAAN,cAAM,KAAN,cAAM,QAKjB;AACD,IAAY,MAGX;AAHD,WAAY,MAAM;IACd,qBAAW,CAAA;IACX,qBAAW,CAAA;AACf,CAAC,EAHW,MAAM,GAAN,cAAM,KAAN,cAAM,QAGjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/router/interfaces/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AllInResulotions, DataPoint, DataPointResolutions } from "./ParseEdifact";
|
|
2
|
+
export interface Result {
|
|
3
|
+
[key: string]: (number | null)[];
|
|
4
|
+
}
|
|
5
|
+
export declare class CommonTimestamps {
|
|
6
|
+
static transform(all: AllInResulotions, startMonth: string, endMonth: string): Result;
|
|
7
|
+
static makeCommonTimeBase(all: DataPointResolutions, newTimes: number[], best: string): (number | null)[] | undefined;
|
|
8
|
+
static shouldMerge(all: DataPointResolutions): boolean;
|
|
9
|
+
static interpolate(all: DataPointResolutions, newTimes: number[]): (number | null)[] | undefined;
|
|
10
|
+
private static findTime;
|
|
11
|
+
static makeNumbers(all: DataPoint[], newTimes: number[]): (number | null)[];
|
|
12
|
+
static makeTimeArray(startIsoString: string, endIsoString: string, resolution: string): number[];
|
|
13
|
+
static best(all: any): string;
|
|
14
|
+
static bestResolution(all: any): string;
|
|
15
|
+
}
|