Add base model layout from V2 for frontend
This commit is contained in:
parent
634b80ed42
commit
53207abcb3
8 changed files with 51 additions and 0 deletions
|
@ -97,6 +97,7 @@
|
||||||
"style-loader": "^1.2.1",
|
"style-loader": "^1.2.1",
|
||||||
"svg-url-loader": "^6.0.0",
|
"svg-url-loader": "^6.0.0",
|
||||||
"terser-webpack-plugin": "^3.0.6",
|
"terser-webpack-plugin": "^3.0.6",
|
||||||
|
"ts-essentials": "^9.1.2",
|
||||||
"twin.macro": "^2.0.7",
|
"twin.macro": "^2.0.7",
|
||||||
"typescript": "^4.2.4",
|
"typescript": "^4.2.4",
|
||||||
"webpack": "^4.43.0",
|
"webpack": "^4.43.0",
|
||||||
|
|
32
resources/scripts/api/definitions/index.d.ts
vendored
Normal file
32
resources/scripts/api/definitions/index.d.ts
vendored
Normal 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;
|
2
resources/scripts/api/definitions/user/index.ts
Normal file
2
resources/scripts/api/definitions/user/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export * from './models.d';
|
||||||
|
export { default as Transformers, MetaTransformers } from './transformers';
|
2
resources/scripts/api/definitions/user/models.d.ts
vendored
Normal file
2
resources/scripts/api/definitions/user/models.d.ts
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
// empty export
|
||||||
|
export type _T = string;
|
5
resources/scripts/api/definitions/user/transformers.ts
Normal file
5
resources/scripts/api/definitions/user/transformers.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
export default class Transformers {
|
||||||
|
}
|
||||||
|
|
||||||
|
export class MetaTransformers {
|
||||||
|
}
|
|
@ -22,6 +22,9 @@
|
||||||
"@/*": [
|
"@/*": [
|
||||||
"./resources/scripts/*"
|
"./resources/scripts/*"
|
||||||
],
|
],
|
||||||
|
"@definitions/*": [
|
||||||
|
"./resources/scripts/api/definitions/*"
|
||||||
|
],
|
||||||
"@feature/*": [
|
"@feature/*": [
|
||||||
"./resources/scripts/components/server/features/*"
|
"./resources/scripts/components/server/features/*"
|
||||||
]
|
]
|
||||||
|
|
|
@ -60,6 +60,7 @@ module.exports = {
|
||||||
extensions: ['.ts', '.tsx', '.js', '.json'],
|
extensions: ['.ts', '.tsx', '.js', '.json'],
|
||||||
alias: {
|
alias: {
|
||||||
'@': path.join(__dirname, '/resources/scripts'),
|
'@': path.join(__dirname, '/resources/scripts'),
|
||||||
|
'@definitions': path.join(__dirname, '/resources/scripts/api/definitions'),
|
||||||
'@feature': path.join(__dirname, '/resources/scripts/components/server/features'),
|
'@feature': path.join(__dirname, '/resources/scripts/components/server/features'),
|
||||||
},
|
},
|
||||||
symlinks: false,
|
symlinks: false,
|
||||||
|
|
|
@ -7481,6 +7481,11 @@ tryer@^1.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
|
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
|
||||||
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
|
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:
|
ts-toolbelt@^8.0.7:
|
||||||
version "8.0.7"
|
version "8.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-8.0.7.tgz#4dad2928831a811ee17dbdab6eb1919fc0a295bf"
|
resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-8.0.7.tgz#4dad2928831a811ee17dbdab6eb1919fc0a295bf"
|
||||||
|
|
Loading…
Reference in a new issue