Add base model layout from V2 for frontend

This commit is contained in:
DaneEveritt 2022-05-07 16:52:58 -04:00
parent 634b80ed42
commit 53207abcb3
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
8 changed files with 51 additions and 0 deletions

View file

@ -97,6 +97,7 @@
"style-loader": "^1.2.1",
"svg-url-loader": "^6.0.0",
"terser-webpack-plugin": "^3.0.6",
"ts-essentials": "^9.1.2",
"twin.macro": "^2.0.7",
"typescript": "^4.2.4",
"webpack": "^4.43.0",

View file

@ -0,0 +1,32 @@
import { MarkRequired } from 'ts-essentials';
export type UUID = string;
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface Model {}
interface ModelWithRelationships extends Model {
relationships: Record<string, unknown>;
}
/**
* Allows a model to have optional relationships that are marked as being
* present in a given pathway. This allows different API calls to specify the
* "completeness" of a response object without having to make every API return
* the same information, or every piece of logic do explicit null checking.
*
* Example:
* >> const user: WithLoaded<User, 'servers'> = {};
* >> // "user.servers" is no longer potentially undefined.
*/
type WithLoaded<M extends ModelWithRelationships, R extends keyof M['relationships']> = M & {
relationships: MarkRequired<M['relationships'], R>;
}
/**
* Helper type that allows you to infer the type of an object by giving
* it the specific API request function with a return type. For example:
*
* type Egg = InferModel<typeof getEgg>;
*/
export type InferModel<T extends (...args: any) => any> = ReturnType<T> extends Promise<infer U> ? U : T;

View file

@ -0,0 +1,2 @@
export * from './models.d';
export { default as Transformers, MetaTransformers } from './transformers';

View file

@ -0,0 +1,2 @@
// empty export
export type _T = string;

View file

@ -0,0 +1,5 @@
export default class Transformers {
}
export class MetaTransformers {
}

View file

@ -22,6 +22,9 @@
"@/*": [
"./resources/scripts/*"
],
"@definitions/*": [
"./resources/scripts/api/definitions/*"
],
"@feature/*": [
"./resources/scripts/components/server/features/*"
]

View file

@ -60,6 +60,7 @@ module.exports = {
extensions: ['.ts', '.tsx', '.js', '.json'],
alias: {
'@': path.join(__dirname, '/resources/scripts'),
'@definitions': path.join(__dirname, '/resources/scripts/api/definitions'),
'@feature': path.join(__dirname, '/resources/scripts/components/server/features'),
},
symlinks: false,

View file

@ -7481,6 +7481,11 @@ tryer@^1.0.1:
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
ts-essentials@^9.1.2:
version "9.1.2"
resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-9.1.2.tgz#46db6944b73b4cd603f3d959ef1123c16ba56f59"
integrity sha512-EaSmXsAhEiirrTY1Oaa7TSpei9dzuCuFPmjKRJRPamERYtfaGS8/KpOSbjergLz/Y76/aZlV9i/krgzsuWEBbg==
ts-toolbelt@^8.0.7:
version "8.0.7"
resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-8.0.7.tgz#4dad2928831a811ee17dbdab6eb1919fc0a295bf"