add nodemon

This commit is contained in:
Simon Larsen
2022-05-23 12:45:32 +01:00
parent 175e937f62
commit e6e1407a87
47 changed files with 219 additions and 86 deletions

View File

@@ -1,19 +1,35 @@
import React, { FunctionComponent } from 'react';
import React, { FunctionComponent, useState } from 'react';
import { Link } from 'react-router-dom';
import BasicModelForm from 'CommonUI/src/Components/Forms/BasicModelForm';
import User from 'Common/Models/User';
import FormValues from 'CommonUI/src/Components/Forms/Types/FormValues';
import Footer from '../Footer';
import Container from 'CommonUI/src/Container';
import IdentityAPI from 'CommonUI/src/Utils/API/IdentityAPI';
import Route from 'Common/Types/API/Route';
const RegisterPage: FunctionComponent = () => {
const [isLaoding, setIsLoading] = useState<boolean>(false);
const user: User = new User();
const submitForm = async (values: FormValues<User>) => {
setIsLoading(true);
await IdentityAPI.post(new Route("/"))
setIsLoading(false);
}
return (
<Container title="Register">
<BasicModelForm<User>
model={user}
id="login-form"
isLoading={isLaoding}
id="register-form"
showAsColumns={2}
fields={[
{
@@ -65,9 +81,7 @@ const RegisterPage: FunctionComponent = () => {
required: true,
},
]}
onSubmit={(values: FormValues<User>) => {
console.log(values);
}}
onSubmit={submitForm}
submitButtonText={'Sign Up'}
title={'Create your OneUptime account'}
footer={

5
Alert/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true",
"test": "jest"

View File

@@ -618,7 +618,17 @@ export default class BaseModel extends BaseEntity {
return baseModel as T;
}
public static fromJSON<T extends BaseModel>(json: JSONObject): T {
public static fromJSON<T extends BaseModel>(json: JSONObject | JSONArray): T | Array<T> {
if (Array.isArray(json)) {
let arr: Array<T> = [];
for (const item of json) {
arr.push(this._fromJSON<T>(item))
}
return arr;
}
return this._fromJSON<T>(json);
}

View File

@@ -1,4 +1,4 @@
import ErrorResponse from '../../../Types/API/ErrorResponse';
import ErrorResponse from '../../../Types/API/HTTPErrorResponse';
describe('ErrorResponse', () => {
test('should return a valid error response object', () => {
const errorResponseObject: ErrorResponse = new ErrorResponse(500, {

View File

@@ -1,4 +1,4 @@
import Response from '../../../Types/API/Response';
import Response from '../../../Types/API/HTTPResponse';
describe('Response()', () => {
test('should return a valid response object', () => {
let responseObject: Response;

View File

@@ -1,3 +0,0 @@
import HTTPResponse from './Response';
export default class HTTPErrorResponse extends HTTPResponse {}

View File

@@ -0,0 +1,5 @@
import BaseModel from '../../Models/BaseModel';
import { JSONObjectOrArray } from '../JSON';
import HTTPResponse from './HTTPResponse';
export default class HTTPErrorResponse<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>> extends HTTPResponse<T> {}

View File

@@ -0,0 +1,44 @@
import BaseModel from "../../Models/BaseModel";
import { JSONObjectOrArray } from "../JSON";
export default class HTTPResponse<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>> {
private _statusCode: number = -1;
public get statusCode(): number {
return this._statusCode;
}
public set statusCode(v: number) {
this._statusCode = v;
}
private _jsonData!: JSONObjectOrArray;
public get jsonData(): JSONObjectOrArray {
return this._jsonData;
}
public set jsonData(v: JSONObjectOrArray) {
this._jsonData = v;
}
private _data! : T;
public get data() : T {
return this._data;
}
public set data(v : T) {
this._data = v;
}
public constructor(statusCode: number, data: JSONObjectOrArray) {
this.statusCode = statusCode;
this.jsonData = data;
let obj!: T;
if (obj instanceof BaseModel) {
this.data = BaseModel.fromJSON(data) as T;
} else {
this.data = data as T;
}
}
}

View File

@@ -1,24 +0,0 @@
import { JSONObjectOrArray } from '../JSON';
export default class HTTPResponse {
private _statusCode: number = -1;
public get statusCode(): number {
return this._statusCode;
}
public set statusCode(v: number) {
this._statusCode = v;
}
private _data: JSONObjectOrArray = {};
public get data(): JSONObjectOrArray {
return this._data;
}
public set data(v: JSONObjectOrArray) {
this._data = v;
}
public constructor(statusCode: number, data: JSONObjectOrArray) {
this.statusCode = statusCode;
this.data = data;
}
}

View File

@@ -2,15 +2,17 @@ import axios, { AxiosError } from 'axios';
import URL from '../Types/API/URL';
import { JSONObjectOrArray } from '../Types/JSON';
import Headers from '../Types/API/Headers';
import HTTPResponse from '../Types/API/Response';
import HTTPErrorResponse from '../Types/API/ErrorResponse';
import HTTPResponse from '../Types/API/HTTPResponse';
import HTTPErrorResponse from '../Types/API/HTTPErrorResponse';
import HTTPMethod from '../Types/API/HTTPMethod';
import APIException from '../Types/Exception/ApiException';
import Protocol from '../Types/API/Protocol';
import Hostname from '../Types/API/Hostname';
import Route from '../Types/API/Route';
import BaseModel from '../Models/BaseModel';
export default class API {
private _protocol: Protocol = Protocol.HTTPS;
public get protocol(): Protocol {
return this._protocol;
@@ -19,7 +21,7 @@ export default class API {
this._protocol = v;
}
private _hostname: Hostname = new Hostname('localhost');
private _hostname!: Hostname;
public get hostname(): Hostname {
return this._hostname;
}
@@ -32,57 +34,57 @@ export default class API {
this.hostname = hostname;
}
public async get(
public async get<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
path: Route,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
return await API.get(
): Promise<HTTPResponse<T>> {
return await API.get<T>(
new URL(this.protocol, this.hostname, path),
data,
headers
);
}
public async delete(
public async delete<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
path: Route,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
return await API.delete(
): Promise<HTTPResponse<T>> {
return await API.delete<T>(
new URL(this.protocol, this.hostname, path),
data,
headers
);
}
public async put(
public async put<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
path: Route,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
return await API.put(
): Promise<HTTPResponse<T>> {
return await API.put<T>(
new URL(this.protocol, this.hostname, path),
data,
headers
);
}
public async post(
public async post<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
path: Route,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
return await API.post(
): Promise<HTTPResponse<T>> {
return await API.post<T>(
new URL(this.protocol, this.hostname, path),
data,
headers
);
}
protected static handleError(
error: HTTPErrorResponse | APIException
): HTTPErrorResponse | APIException {
protected static handleError<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
error: HTTPErrorResponse<T> | APIException
): HTTPErrorResponse<T> | APIException {
return error;
}
@@ -109,47 +111,48 @@ export default class API {
return defaultHeaders;
}
public static async get(
public static async get<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
url: URL,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
return await this.fetch(HTTPMethod.GET, url, data, headers);
): Promise<HTTPResponse<T>> {
return await this.fetch<T>(HTTPMethod.GET, url, data, headers);
}
public static async delete(
public static async delete<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
url: URL,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
): Promise<HTTPResponse<T>> {
return await this.fetch(HTTPMethod.DELETE, url, data, headers);
}
public static async put(
public static async put<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
url: URL,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
): Promise<HTTPResponse<T>> {
return await this.fetch(HTTPMethod.PUT, url, data, headers);
}
public static async post(
public static async post<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
url: URL,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
): Promise<HTTPResponse<T>> {
return await this.fetch(HTTPMethod.POST, url, data, headers);
}
private static async fetch(
private static async fetch<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(
method: HTTPMethod,
url: URL,
data?: JSONObjectOrArray,
headers?: Headers
): Promise<HTTPResponse> {
): Promise<HTTPResponse<T>> {
const apiHeaders: Headers = this.getHeaders(headers);
try {
const result: {
data: JSONObjectOrArray;
status: number;
@@ -160,14 +163,15 @@ export default class API {
data,
});
const response: HTTPResponse = new HTTPResponse(
const response: HTTPResponse<T> = new HTTPResponse<T>(
result.status,
result.data
);
return response;
} catch (e) {
const error: Error | AxiosError = e as Error | AxiosError;
let errorResponse: HTTPErrorResponse | APIException;
let errorResponse: HTTPErrorResponse<T> | APIException;
if (axios.isAxiosError(error)) {
// Do whatever you want with native error
errorResponse = this.getErrorResponse(error);
@@ -175,16 +179,16 @@ export default class API {
errorResponse = new APIException(error.message);
}
this.handleError(errorResponse);
this.handleError<T>(errorResponse);
throw errorResponse;
}
}
private static getErrorResponse(error: AxiosError): HTTPErrorResponse {
private static getErrorResponse<T extends JSONObjectOrArray | BaseModel | Array<BaseModel>>(error: AxiosError): HTTPErrorResponse<T> {
if (error.response) {
return new HTTPErrorResponse(
return new HTTPErrorResponse<T>(
error.response.status,
error.response.data
error.response.data as JSONObjectOrArray
);
}

View File

@@ -9,7 +9,8 @@ export interface ComponentProps {
disabled?: boolean;
id: string;
shortcutKey?: ShortcutKey;
type?: ButtonType
type?: ButtonType;
isLoading?: boolean;
}
const Button: FunctionComponent<ComponentProps> = (props: ComponentProps): ReactElement => {

View File

@@ -22,6 +22,7 @@ export interface ComponentProps<T extends Object> {
description?: string;
showAsColumns?: number;
footer: ReactElement;
isLoading: boolean;
}
const BasicForm = <T extends Object>(
@@ -132,6 +133,7 @@ const BasicForm = <T extends Object>(
}
type={ButtonTypes.Submit}
id={`${props.id}-submit-button`}
isLoading={props.isLoading}
/>
{props.footer}
</Form>

View File

@@ -16,6 +16,7 @@ export interface ComponentProps<T extends BaseModel> {
description?: string;
showAsColumns?: number;
footer: ReactElement;
isLoading: boolean;
}
const BasicModelForm = <TBaseModel extends BaseModel>(
@@ -53,6 +54,7 @@ const BasicModelForm = <TBaseModel extends BaseModel>(
return (
<BasicForm<TBaseModel>
isLoading={props.isLoading}
fields={fields}
id={props.id}
onSubmit={props.onSubmit}

View File

@@ -1,10 +1,10 @@
import { IDENTITY_HOSTNAME, API_PROTOCOL } from '../../Config';
import BaseAPI from './BaseAPI';
class BackendAPI extends BaseAPI {
class IdentityAPI extends BaseAPI {
public constructor() {
super(API_PROTOCOL, IDENTITY_HOSTNAME);
}
}
export default new BackendAPI();
export default new IdentityAPI();

View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -74,7 +74,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"test": "nyc --reporter=lcov --reporter=text mocha --exit test/index.ts",
"enterprise-test": "IS_TESTING=true nyc --reporter=lcov --reporter=text mocha --exit test/enterprise.js",
"audit": "npm audit --audit-level=low",

View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true"
},

5
HelmChart/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -7,7 +7,7 @@
"preinstall": "npx npm-force-resolutions || echo 'No package-lock.json file. Skipping force resolutions'",
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"test": "mocha --exit test/index.ts",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true --ignores='ejs'"

View File

@@ -5,7 +5,7 @@
"preinstall": "npx npm-force-resolutions || echo 'No package-lock.json file. Skipping force resolutions'",
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"test": "jest",
"lighthouse-test": "jest --forceExit lighthouse-tests/test/index.test.js --env=node",
"lighthouse": "start-server-and-test http://localhost:1444",

View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -7,7 +7,7 @@
"preinstall": "npx npm-force-resolutions || echo 'No package-lock.json file. Skipping force resolutions'",
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"test": "jest --forceExit --runInBand test",
"dep-check": "depcheck ./ --skip-missing=true --ignores='ejs'"

View File

@@ -1,3 +1,6 @@
import app from 'CommonServer/Utils/StartServer';
import AuthenticationAPI from './API/AuthenticationAPI';
app.use('/v2', AuthenticationAPI);
export default app;

5
Identity/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true",
"test": "jest"

5
Integration/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true",
"test": "jest"

5
Licensing/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -24,7 +24,7 @@
"preinstall": "npx npm-force-resolutions || echo 'No package-lock.json file. Skipping force resolutions'",
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"test": "mocha --exit test/index.ts",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true --ignores='ejs'"

View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

5
Mail/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"test": "echo 'no tests'"
},
"author": "",

5
Probe/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

5
ProbeAPI/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true",
"test": "jest"

5
Realtime/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"audit": "npm audit --audit-level=low",
"dep-check": "depcheck ./ --skip-missing=true"
},

View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "ts-node Index.ts",
"compile": "tsc",
"dev": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts'",
"dev": "nodemon",
"test": "echo \"Error: no test specified\" && exit 1",
"audit": "npm audit --audit-level=low"
},

5
Zapier/nodemon.json Normal file
View File

@@ -0,0 +1,5 @@
{
"watch": [".","../Common", "../CommonServer"],
"ext": "ts,json,tsx,env",
"exec": "node --inspect=0.0.0.0:9229 --require ts-node/register Index.ts"
}