jeroentvb/wind-scrape

View on GitHub
src/partials/utils/type-check.ts

Summary

Maintainability
B
4 hrs
Test Coverage
import { WindfinderErrors, WindguruErrors, WindReportErrors, WindyErrors } from '../../constants';

export default class TypeCheck {

   static windfinder(spotname: unknown) {
      if (!spotname) {
         throw new Error(WindfinderErrors.NO_SPOT_NAME);
      }

      if (typeof spotname !== 'string') {
         throw new TypeError(WindfinderErrors.INCORRECT_SPOT_TYPE);
      }
   }

   static windguru(spot: unknown, model?: unknown) {
      if (!spot) {
         throw new Error(WindguruErrors.NO_SPOT_NUMBER);
      }

      if (typeof spot !== 'number' && typeof spot !== 'string') {
         throw new TypeError(WindguruErrors.INCORRECT_SPOT_TYPE);
      }

      if (model && (typeof model !== 'string' && typeof model !== 'number')) {
         throw new TypeError(WindguruErrors.INCORRECT_MODEL_TYPE);
      }
   }

   static customWindguru(coordinates: any, credentials: any, model?: unknown) {
      if (!coordinates || !credentials) {
         throw new TypeError(WindguruErrors.NO_COORDINATES_OR_CREDENTIALS);
      }

      if (!coordinates.lat || !coordinates.lon) {
         throw new TypeError(WindguruErrors.NO_COORDINATES_SPECIFIED);
      }

      if (
         (typeof coordinates.lat !== 'string' && typeof coordinates.lat !== 'number') ||
      (typeof coordinates.lon !== 'string' && typeof coordinates.lon !== 'number')
      ) {
         throw new TypeError(WindguruErrors.COORDINATES_INCORRECT_TYPE);
      }

      if (!credentials.username || !credentials.password) {
         throw new TypeError(WindguruErrors.NO_CREDENTIALS_SPECIFIED);
      }

      if (
         typeof credentials.username !== 'string' ||
      typeof credentials.password !== 'string'
      ) {
         throw new TypeError(WindguruErrors.CREDENTIALS_INCORRECT_TYPE);
      }

      if (model && (typeof model !== 'string'&& typeof model !== 'number')) {
         throw new TypeError(WindguruErrors.INCORRECT_MODEL_TYPE);
      }
   }

   static windy(lat: unknown, lon: unknown) {
      if (!lat || !lon) {
         throw new Error(WindyErrors.NO_COORDINATES);
      }

      if (
         (typeof lat !== 'string' && typeof lat !== 'number') ||
      (typeof lon !== 'string' && typeof lon !== 'number')
      ) {
         throw new TypeError(WindyErrors.INCORRECT_COORDINATES_TYPE);
      }
   }

   static windReport(spotname: unknown) {
      if (!spotname) {
         throw new Error(WindReportErrors.NO_SPOT);
      }

      if (typeof spotname !== 'string') {
         throw new TypeError(WindReportErrors.INCORRECT_SPOT_TYPE);
      }
   }

}