move types to shared, add first stuff

This commit is contained in:
2023-05-04 20:40:10 +02:00
parent 1ed359f602
commit df097ab4f6
23 changed files with 1118 additions and 214 deletions

View File

@@ -1,12 +1,12 @@
{
"name": "app",
"version": "1.0.0",
"version": "1.2.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "app",
"version": "1.0.0",
"version": "1.2.0",
"license": "ISC",
"dependencies": {
"axios": "^1.3.4",
@@ -25,6 +25,7 @@
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-n": "^15.2.5",
"eslint-plugin-promise": "^6.0.1",
"resolve-tspaths": "^0.8.8",
"rimraf": "^3.0.2",
"tsc-watch": "^5.0.3",
"typescript": "^4.7.4"
@@ -460,6 +461,15 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -719,6 +729,15 @@
"node": ">= 0.8"
}
},
"node_modules/commander": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz",
"integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==",
"dev": true,
"engines": {
"node": ">=14"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2882,6 +2901,23 @@
"node": ">=4"
}
},
"node_modules/resolve-tspaths": {
"version": "0.8.13",
"resolved": "https://registry.npmjs.org/resolve-tspaths/-/resolve-tspaths-0.8.13.tgz",
"integrity": "sha512-eHlHinC2qt3jQLFiZyUE4HXZOTlT1abHO2fb+OI9Ybsn8wdhKiAtIFVy1+QVTaIQNphCLvm42EkqJt/+ZAA8Sw==",
"dev": true,
"dependencies": {
"ansi-colors": "4.1.3",
"commander": "10.0.0",
"fast-glob": "3.2.12"
},
"bin": {
"resolve-tspaths": "dist/main.js"
},
"peerDependencies": {
"typescript": ">=3.0.3"
}
},
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -3765,6 +3801,12 @@
"uri-js": "^4.2.2"
}
},
"ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -3973,6 +4015,12 @@
"delayed-stream": "~1.0.0"
}
},
"commander": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz",
"integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -5564,6 +5612,17 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"resolve-tspaths": {
"version": "0.8.13",
"resolved": "https://registry.npmjs.org/resolve-tspaths/-/resolve-tspaths-0.8.13.tgz",
"integrity": "sha512-eHlHinC2qt3jQLFiZyUE4HXZOTlT1abHO2fb+OI9Ybsn8wdhKiAtIFVy1+QVTaIQNphCLvm42EkqJt/+ZAA8Sw==",
"dev": true,
"requires": {
"ansi-colors": "4.1.3",
"commander": "10.0.0",
"fast-glob": "3.2.12"
}
},
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",

View File

@@ -7,7 +7,8 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"predev": "npm install && rimraf dist/*",
"start": "node --inspect=0.0.0.0:9229 --es-module-specifier-resolution=node dist/app.js",
"prestart": "resolve-tspaths --out \"/opt/backend/dist/backend/src\"",
"start": "node --inspect=0.0.0.0:9229 dist/backend/src/app.js",
"dev": "tsc-watch --onSuccess \"npm run start\" --onFailure \"echo WHOOPS! Server compilation failed\""
},
"keywords": [],
@@ -32,6 +33,7 @@
"eslint-plugin-promise": "^6.0.1",
"rimraf": "^3.0.2",
"tsc-watch": "^5.0.3",
"resolve-tspaths": "^0.8.8",
"typescript": "^4.7.4"
}
}

View File

@@ -1,19 +1,6 @@
import fs from 'fs';
import { WxConfig } from '@shared/types/config.types';
export interface WxConfig {
regions: WxRegion[];
}
export interface WxRegion {
identifier: string;
fixes: WxFix[];
}
export interface WxFix {
name: string;
lat: number;
lon: number;
}
export function getConfig(): WxConfig {
const data = JSON.parse(fs.readFileSync('/opt/wx-config.json').toString());

View File

@@ -1,4 +1,5 @@
import configService, { WxConfig, WxRegion } from './config.service';
import configService from './config.service';
import { WxConfig, WxRegion } from '@shared/types/config.types';
export function getRegions(): WxConfig['regions'] {
return configService.getConfig().regions;

View File

@@ -1,7 +1,9 @@
import axios from 'axios';
import { WxFix } from './config.service';
import regionsService from './regions.service';
import { WxFix } from '@shared/types/config.types';
import { WxFixData, WxData } from '@shared/types/wx.types';
const cachedData: { [key: string]: WxData } = {};
const qnhLevelMapping = {
@@ -33,34 +35,6 @@ for (const qnh of Object.keys(qnhLevelMapping)) {
}
}
interface WxLevelData {
'T(K)': string;
windspeed: string;
windhdg: string;
}
export interface WxFixData {
coords: {
lat: string;
long: string;
};
levels: {
[key: string]: WxLevelData;
}
}
export interface WxData {
info: {
date: string;
datestring: string;
legal: string;
};
data: {
[key: string]: WxFixData;
}
}
export async function getDataAtFix(fix: WxFix, index: number): Promise<WxFixData> {
const response = await axios.get(`https://api.open-meteo.com/v1/forecast?latitude=${fix.lat}&longitude=${fix.lon}&windspeed_unit=kn&forecast_days=1&hourly=${requestedData.join(',')}`);
const hourlyData = response.data.hourly;

View File

@@ -2,6 +2,7 @@
"compileOnSave": false,
"compilerOptions": {
"outDir": "dist",
"baseUrl": "./src",
"module": "ES2022",
"target": "ES2022",
"lib": [
@@ -15,6 +16,9 @@
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true,
"moduleResolution": "Node",
"paths": {
"@shared/*": ["../../shared/src/*"]
}
},
"watchOptions": {
"watchFile": "fixedpollinginterval"