removed dev stuff
This commit is contained in:
parent
cca246c751
commit
3eb1057054
39 changed files with 0 additions and 3150 deletions
32
README.MD
32
README.MD
|
|
@ -1,32 +0,0 @@
|
||||||
# Modules ft_transcendence
|
|
||||||
|
|
||||||
| Type de module | Titre du module | Technologie | Description |
|
|
||||||
|----------------|-----------------------------|--------------------------------------|-----------------------------------------------------------------------------|
|
|
||||||
| Mandatory | Base Website | Technologies imposées | Créer un site web avec TypeScript, SPA, backend PHP (optionnel), Docker, sécurité (HTTPS, validation, hash, etc.) |
|
|
||||||
| Major | Backend Framework | Fastify (Node.js) | Créer un backend avec Fastify/Node.js |
|
|
||||||
| Major | Blockchain Score | Avalanche + Solidity | Enregistrer les scores de tournoi sur Avalanche via des smart contracts |
|
|
||||||
| Major | Standard User Management | Technos libres (features imposées) | Auth, profil, avatar, amis, stats, historique... |
|
|
||||||
| Major | Remote Auth | Google Sign-in | Authentification via Google |
|
|
||||||
| Major | Remote Players | Technos libres | Permettre à deux joueurs de jouer à distance |
|
|
||||||
| Major | Multiplayer Game | Technos libres | Mode de jeu à plus de 2 joueurs |
|
|
||||||
| Major | Add Another Game | Technos libres | Ajouter un second jeu avec matchmaking et historique |
|
|
||||||
| Major | Live Chat | Technos libres | MP, block, invite à jouer, profils depuis le chat |
|
|
||||||
| Major | AI Opponent | Technos libres (A* interdit) | IA qui simule un joueur humain (refresh 1s, entrées clavier simulées) |
|
|
||||||
| Major | WAF & Vault | WAF + ModSecurity + Vault | Sécuriser via WAF, ModSecurity, Vault pour les secrets |
|
|
||||||
| Major | 2FA + JWT | 2FA + JWT | Authentification double facteur avec tokens JWT sécurisés |
|
|
||||||
| Major | ELK Stack Logging | Elasticsearch + Logstash + Kibana | Stack ELK pour logs, analyse et visualisation |
|
|
||||||
| Major | Microservices Backend | Technos libres | Refactor backend en microservices |
|
|
||||||
| Major | Advanced 3D | Babylon.js | Pong en 3D avec Babylon.js |
|
|
||||||
| Major | Server-Side Pong | Technos libres | Pong serveur + API |
|
|
||||||
| Major | CLI vs Web Pong | Technos libres | Jouer depuis le CLI contre un joueur Web via API |
|
|
||||||
| Minor | Frontend Toolkit | Tailwind CSS (avec TypeScript) | Utiliser Tailwind CSS avec TypeScript pour le frontend |
|
|
||||||
| Minor | Database | SQLite | Ajouter un backend utilisant SQLite comme base de données |
|
|
||||||
| Minor | Game Customization | Technos libres | Options de jeu : powerups, maps, etc. |
|
|
||||||
| Minor | Stats Dashboards | Technos libres | Dashboards utilisateurs + parties |
|
|
||||||
| Minor | GDPR & Anonymization | Technos libres | Suppression de compte, anonymisation, gestion des données personnelles |
|
|
||||||
| Minor | Monitoring | Prometheus + Grafana | Supervision avec Prometheus et visualisation avec Grafana |
|
|
||||||
| Minor | Support All Devices | Technos libres | Responsive + support tactile, clavier, souris |
|
|
||||||
| Minor | Browser Compatibility | Technos libres | Support d’un navigateur supplémentaire |
|
|
||||||
| Minor | Multilingual | Technos libres | Site multilingue avec au moins 3 langues |
|
|
||||||
| Minor | Visual Impairment | Technos libres | Accessibilité visuelle : contrastes, navigation clavier, etc. |
|
|
||||||
| Minor | SSR | Technos libres | Server Side Rendering pour perf + SEO |
|
|
||||||
65
flake.nix
65
flake.nix
|
|
@ -1,65 +0,0 @@
|
||||||
{
|
|
||||||
description = "Flake utils demo";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs";
|
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {
|
|
||||||
self,
|
|
||||||
nixpkgs,
|
|
||||||
flake-utils,
|
|
||||||
}:
|
|
||||||
flake-utils.lib.eachDefaultSystem (
|
|
||||||
system: let
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
tmux-setup = pkgs.writeShellScriptBin "tmux-setup" ''
|
|
||||||
#!/usr/bin/env sh
|
|
||||||
SESSION="transcendance"
|
|
||||||
DIR=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
|
||||||
if ! tmux has-session -t $SESSION 2>/dev/null; then
|
|
||||||
tmux new-session -d -s $SESSION -c "$DIR" -n dev
|
|
||||||
tmux send-keys -t $SESSION:0 'vim' C-m
|
|
||||||
tmux split-window -h -p 30 -t $SESSION:0 -c "$DIR"
|
|
||||||
tmux send-keys -t $SESSION:0.1 'exec zsh' C-m
|
|
||||||
tmux split-window -v -p 30 -t $SESSION:0.1 -c "$DIR"
|
|
||||||
tmux send-keys -t $SESSION:0.2 'watch -n0.5 npx --prefix=./src/ eslint .' C-m
|
|
||||||
tmux new-window -t $SESSION:1 -n git -c "$DIR"
|
|
||||||
tmux send-keys -t $SESSION:1 'lazygit' C-m
|
|
||||||
tmux new-window -t $SESSION:2 -n docker -c "$DIR"
|
|
||||||
tmux send-keys -t $SESSION:2 'lazydocker' C-m
|
|
||||||
fi
|
|
||||||
tmux select-window -t $SESSION:0
|
|
||||||
tmux select-pane -t $SESSION:0.0
|
|
||||||
tmux attach -t $SESSION
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
devShell = pkgs.mkShellNoCC {
|
|
||||||
packages = with pkgs; [
|
|
||||||
act
|
|
||||||
clang
|
|
||||||
gnumake
|
|
||||||
lazydocker
|
|
||||||
nodejs_22
|
|
||||||
pnpm
|
|
||||||
podman
|
|
||||||
podman-compose
|
|
||||||
sqlite-interactive
|
|
||||||
tmux-setup
|
|
||||||
typescript
|
|
||||||
act
|
|
||||||
openssl
|
|
||||||
nginx
|
|
||||||
|
|
||||||
openjdk # for openapi-generator... its a jar file
|
|
||||||
];
|
|
||||||
shellHook = ''
|
|
||||||
export PODMAN_COMPOSE_WARNING_LOGS="false";
|
|
||||||
export DATABASE_DIR="$(realpath .)/db"
|
|
||||||
mkdir -p $DATABASE_DIR
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,99 +0,0 @@
|
||||||
|
|
||||||
types {
|
|
||||||
text/html html htm shtml;
|
|
||||||
text/css css;
|
|
||||||
text/xml xml;
|
|
||||||
image/gif gif;
|
|
||||||
image/jpeg jpeg jpg;
|
|
||||||
application/javascript js;
|
|
||||||
application/atom+xml atom;
|
|
||||||
application/rss+xml rss;
|
|
||||||
|
|
||||||
text/mathml mml;
|
|
||||||
text/plain txt;
|
|
||||||
text/vnd.sun.j2me.app-descriptor jad;
|
|
||||||
text/vnd.wap.wml wml;
|
|
||||||
text/x-component htc;
|
|
||||||
|
|
||||||
image/avif avif;
|
|
||||||
image/png png;
|
|
||||||
image/svg+xml svg svgz;
|
|
||||||
image/tiff tif tiff;
|
|
||||||
image/vnd.wap.wbmp wbmp;
|
|
||||||
image/webp webp;
|
|
||||||
image/x-icon ico;
|
|
||||||
image/x-jng jng;
|
|
||||||
image/x-ms-bmp bmp;
|
|
||||||
|
|
||||||
font/woff woff;
|
|
||||||
font/woff2 woff2;
|
|
||||||
|
|
||||||
application/java-archive jar war ear;
|
|
||||||
application/json json;
|
|
||||||
application/mac-binhex40 hqx;
|
|
||||||
application/msword doc;
|
|
||||||
application/pdf pdf;
|
|
||||||
application/postscript ps eps ai;
|
|
||||||
application/rtf rtf;
|
|
||||||
application/vnd.apple.mpegurl m3u8;
|
|
||||||
application/vnd.google-earth.kml+xml kml;
|
|
||||||
application/vnd.google-earth.kmz kmz;
|
|
||||||
application/vnd.ms-excel xls;
|
|
||||||
application/vnd.ms-fontobject eot;
|
|
||||||
application/vnd.ms-powerpoint ppt;
|
|
||||||
application/vnd.oasis.opendocument.graphics odg;
|
|
||||||
application/vnd.oasis.opendocument.presentation odp;
|
|
||||||
application/vnd.oasis.opendocument.spreadsheet ods;
|
|
||||||
application/vnd.oasis.opendocument.text odt;
|
|
||||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
|
||||||
pptx;
|
|
||||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
|
||||||
xlsx;
|
|
||||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
|
||||||
docx;
|
|
||||||
application/vnd.wap.wmlc wmlc;
|
|
||||||
application/wasm wasm;
|
|
||||||
application/x-7z-compressed 7z;
|
|
||||||
application/x-cocoa cco;
|
|
||||||
application/x-java-archive-diff jardiff;
|
|
||||||
application/x-java-jnlp-file jnlp;
|
|
||||||
application/x-makeself run;
|
|
||||||
application/x-perl pl pm;
|
|
||||||
application/x-pilot prc pdb;
|
|
||||||
application/x-rar-compressed rar;
|
|
||||||
application/x-redhat-package-manager rpm;
|
|
||||||
application/x-sea sea;
|
|
||||||
application/x-shockwave-flash swf;
|
|
||||||
application/x-stuffit sit;
|
|
||||||
application/x-tcl tcl tk;
|
|
||||||
application/x-x509-ca-cert der pem crt;
|
|
||||||
application/x-xpinstall xpi;
|
|
||||||
application/xhtml+xml xhtml;
|
|
||||||
application/xspf+xml xspf;
|
|
||||||
application/zip zip;
|
|
||||||
|
|
||||||
application/octet-stream bin exe dll;
|
|
||||||
application/octet-stream deb;
|
|
||||||
application/octet-stream dmg;
|
|
||||||
application/octet-stream iso img;
|
|
||||||
application/octet-stream msi msp msm;
|
|
||||||
|
|
||||||
audio/midi mid midi kar;
|
|
||||||
audio/mpeg mp3;
|
|
||||||
audio/ogg ogg;
|
|
||||||
audio/x-m4a m4a;
|
|
||||||
audio/x-realaudio ra;
|
|
||||||
|
|
||||||
video/3gpp 3gpp 3gp;
|
|
||||||
video/mp2t ts;
|
|
||||||
video/mp4 mp4;
|
|
||||||
video/mpeg mpeg mpg;
|
|
||||||
video/quicktime mov;
|
|
||||||
video/webm webm;
|
|
||||||
video/x-flv flv;
|
|
||||||
video/x-m4v m4v;
|
|
||||||
video/x-mng mng;
|
|
||||||
video/x-ms-asf asx asf;
|
|
||||||
video/x-ms-wmv wmv;
|
|
||||||
video/x-msvideo avi;
|
|
||||||
}
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
||||||
worker_processes 1;
|
|
||||||
pid /dev/null;
|
|
||||||
daemon off;
|
|
||||||
error_log /dev/null debug;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
include mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
|
|
||||||
sendfile on;
|
|
||||||
keepalive_timeout 65;
|
|
||||||
|
|
||||||
map $http_upgrade $connection_upgrade {
|
|
||||||
default upgrade;
|
|
||||||
'' close;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
access_log /dev/stderr;
|
|
||||||
listen 8000 ssl;
|
|
||||||
server_name localhost;
|
|
||||||
ssl_certificate nginx-selfsigned.crt;
|
|
||||||
ssl_certificate_key nginx-selfsigned.key;
|
|
||||||
ssl_protocols TLSv1.3;
|
|
||||||
error_page 497 https://$http_host$request_uri;
|
|
||||||
location /api {
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
proxy_pass https://localhost:8888;
|
|
||||||
}
|
|
||||||
location /api/chat/socket.io/ {
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "Upgrade";
|
|
||||||
proxy_read_timeout 3600s;
|
|
||||||
proxy_pass https://localhost:8888;
|
|
||||||
}
|
|
||||||
location /api/pong/socket.io/ {
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "Upgrade";
|
|
||||||
proxy_read_timeout 3600s;
|
|
||||||
proxy_pass https://localhost:8888;
|
|
||||||
}
|
|
||||||
location /api/ttt/socket.io/ {
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "Upgrade";
|
|
||||||
proxy_read_timeout 3600s;
|
|
||||||
proxy_pass https://localhost:8888;
|
|
||||||
}
|
|
||||||
location /assets {
|
|
||||||
proxy_pass http://localhost:5173;
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
}
|
|
||||||
location /app {
|
|
||||||
proxy_pass http://localhost:5173/;
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
}
|
|
||||||
location / {
|
|
||||||
proxy_ssl_verify off;
|
|
||||||
proxy_pass http://localhost:5173/;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
import {Map, Record, RecordOf} from 'immutable';
|
|
||||||
|
|
||||||
import {
|
|
||||||
{{#models}}
|
|
||||||
{{#model}}
|
|
||||||
{{#isEntity}}
|
|
||||||
{{classname}}RecordEntity,
|
|
||||||
{{/isEntity}}
|
|
||||||
{{/model}}
|
|
||||||
{{/models}}
|
|
||||||
} from "./models/index{{importFileExtension}}"
|
|
||||||
|
|
||||||
export const ApiEntitiesRecordProps = {
|
|
||||||
recType: "ApiEntitiesRecord" as "ApiEntitiesRecord",
|
|
||||||
{{#models}}
|
|
||||||
{{#model}}
|
|
||||||
{{#isEntity}}
|
|
||||||
{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}: ({{classname}}RecordEntity(), Map<string, {{classname}}RecordEntity>()),
|
|
||||||
{{/isEntity}}
|
|
||||||
{{/model}}
|
|
||||||
{{/models}}
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ApiEntitiesRecordPropsType = typeof ApiEntitiesRecordProps;
|
|
||||||
export const ApiEntitiesRecord = Record(ApiEntitiesRecordProps, ApiEntitiesRecordProps.recType);
|
|
||||||
export type ApiEntitiesRecord = RecordOf<ApiEntitiesRecordPropsType>;
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
import {ApiEntitiesRecord} from "./ApiEntitiesRecord{{importFileExtension}}";
|
|
||||||
import {ReducerBuilder} from "redux-ts-simple";
|
|
||||||
import {normalizedEntities} from "./runtimeSagasAndRecords{{importFileExtension}}";
|
|
||||||
|
|
||||||
export const ApiEntitiesReducer = new ReducerBuilder(ApiEntitiesRecord())
|
|
||||||
.on(normalizedEntities, (state, action): ApiEntitiesRecord => {
|
|
||||||
const {entities} = action.payload;
|
|
||||||
return state.withMutations(mutableState => {
|
|
||||||
for (const entityKey in entities) {
|
|
||||||
const entityMap = entities[entityKey];
|
|
||||||
const currentEntityMap = mutableState.get(entityKey as any);
|
|
||||||
if (currentEntityMap) {
|
|
||||||
let mergedEntityMap = currentEntityMap.mergeDeep(entityMap);
|
|
||||||
if (!mergedEntityMap.equals(currentEntityMap)) {
|
|
||||||
mutableState.set(entityKey as any, mergedEntityMap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.build();
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
export let getApiEntitiesState: (state: any) => any = (state: any) => state.app.apiEntities;
|
|
||||||
|
|
||||||
export function setApiEntitiesStateGetter(getter: (state: any) => any) { // Use this to customize the location where you have placed your ApiEntitiesRecord in your project.
|
|
||||||
getApiEntitiesState = getter;
|
|
||||||
}
|
|
||||||
|
|
@ -1,127 +0,0 @@
|
||||||
# {{npmName}}@{{npmVersion}}
|
|
||||||
|
|
||||||
A TypeScript SDK client for the {{host}} API.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
First, install the SDK from npm.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install {{npmName}} --save
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, try it out.
|
|
||||||
|
|
||||||
{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}}
|
|
||||||
```ts
|
|
||||||
{{>api_example}}
|
|
||||||
```
|
|
||||||
{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}}
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
### API Endpoints
|
|
||||||
|
|
||||||
All URIs are relative to *{{basePath}}*
|
|
||||||
|
|
||||||
| Class | Method | HTTP request | Description
|
|
||||||
| ----- | ------ | ------------ | -------------
|
|
||||||
{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}/{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{summary}}
|
|
||||||
{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}
|
|
||||||
|
|
||||||
### Models
|
|
||||||
|
|
||||||
{{#models}}{{#model}}- [{{{classname}}}]({{modelDocPath}}/{{{classname}}}.md){{/model}}
|
|
||||||
{{/models}}
|
|
||||||
|
|
||||||
### Authorization
|
|
||||||
|
|
||||||
{{^authMethods}}Endpoints do not require authorization.{{/authMethods}}
|
|
||||||
{{#hasAuthMethods}}Authentication schemes defined for the API:{{/hasAuthMethods}}
|
|
||||||
{{#authMethods}}
|
|
||||||
<a id="{{name}}{{#isOAuth}}-{{flow}}{{/isOAuth}}"></a>
|
|
||||||
#### {{name}}{{#isOAuth}} {{flow}}{{/isOAuth}}
|
|
||||||
|
|
||||||
{{#isApiKey}}
|
|
||||||
|
|
||||||
- **Type**: API key
|
|
||||||
- **API key parameter name**: `{{keyParamName}}`
|
|
||||||
- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}}
|
|
||||||
{{/isApiKey}}
|
|
||||||
{{#isBasicBasic}}
|
|
||||||
|
|
||||||
- **Type**: HTTP basic authentication
|
|
||||||
{{/isBasicBasic}}
|
|
||||||
{{#isBasicBearer}}
|
|
||||||
|
|
||||||
- **Type**: HTTP Bearer Token authentication{{#bearerFormat}} ({{{.}}}){{/bearerFormat}}
|
|
||||||
{{/isBasicBearer}}
|
|
||||||
{{#isHttpSignature}}
|
|
||||||
|
|
||||||
- **Type**: HTTP signature authentication
|
|
||||||
{{/isHttpSignature}}
|
|
||||||
{{#isOAuth}}
|
|
||||||
|
|
||||||
- **Type**: OAuth
|
|
||||||
- **Flow**: {{flow}}
|
|
||||||
- **Authorization URL**: {{authorizationUrl}}
|
|
||||||
- **Scopes**: {{^scopes}}N/A{{/scopes}}
|
|
||||||
{{#scopes}} - `{{scope}}`: {{description}}
|
|
||||||
{{/scopes}}
|
|
||||||
{{/isOAuth}}
|
|
||||||
{{/authMethods}}
|
|
||||||
|
|
||||||
## About
|
|
||||||
|
|
||||||
This TypeScript SDK client supports the [Fetch API](https://fetch.spec.whatwg.org/)
|
|
||||||
and is automatically generated by the
|
|
||||||
[OpenAPI Generator](https://openapi-generator.tech) project:
|
|
||||||
|
|
||||||
- API version: `{{appVersion}}`
|
|
||||||
- Package version: `{{npmVersion}}`
|
|
||||||
{{^hideGenerationTimestamp}}
|
|
||||||
- Build date: `{{generatedDate}}`
|
|
||||||
{{/hideGenerationTimestamp}}
|
|
||||||
- Generator version: `{{generatorVersion}}`
|
|
||||||
- Build package: `{{generatorClass}}`
|
|
||||||
|
|
||||||
The generated npm module supports the following:
|
|
||||||
|
|
||||||
- Environments
|
|
||||||
* Node.js
|
|
||||||
* Webpack
|
|
||||||
* Browserify
|
|
||||||
- Language levels
|
|
||||||
* ES5 - you must have a Promises/A+ library installed
|
|
||||||
* ES6
|
|
||||||
- Module systems
|
|
||||||
* CommonJS
|
|
||||||
* ES6 module system
|
|
||||||
|
|
||||||
{{#infoUrl}}
|
|
||||||
For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}})
|
|
||||||
{{/infoUrl}}
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
### Building
|
|
||||||
|
|
||||||
To build the TypeScript source code, you need to have Node.js and npm installed.
|
|
||||||
After cloning the repository, navigate to the project directory and run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Publishing
|
|
||||||
|
|
||||||
Once you've built the package, you can publish it to npm:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm publish
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[{{licenseInfo}}]({{{licenseUrl}}})
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
import {all, fork} from "redux-saga/effects";
|
|
||||||
|
|
||||||
import {
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis}}
|
|
||||||
{{#lambda.camelcase}}{{classFilename}}{{/lambda.camelcase}}AllSagas,
|
|
||||||
{{/apis}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
} from "./index{{importFileExtension}}";
|
|
||||||
|
|
||||||
export function *allApiSagas() {
|
|
||||||
yield all([
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis}}
|
|
||||||
fork({{#lambda.camelcase}}{{classFilename}}{{/lambda.camelcase}}AllSagas),
|
|
||||||
{{/apis}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
# {{classname}}{{#description}}
|
|
||||||
|
|
||||||
{{.}}{{/description}}
|
|
||||||
|
|
||||||
All URIs are relative to *{{basePath}}*
|
|
||||||
|
|
||||||
| Method | HTTP request | Description |
|
|
||||||
|------------- | ------------- | -------------|
|
|
||||||
{{#operations}}{{#operation}}| [**{{operationId}}**]({{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{commonPath}}{{path}} | {{summary}} |
|
|
||||||
{{/operation}}{{/operations}}
|
|
||||||
|
|
||||||
{{#operations}}
|
|
||||||
{{#operation}}
|
|
||||||
|
|
||||||
## {{operationId}}
|
|
||||||
|
|
||||||
> {{#returnType}}{{.}} {{/returnType}}{{operationId}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}})
|
|
||||||
|
|
||||||
{{summary}}{{#notes}}
|
|
||||||
|
|
||||||
{{.}}{{/notes}}
|
|
||||||
|
|
||||||
### Example
|
|
||||||
|
|
||||||
```ts
|
|
||||||
{{>api_example}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Parameters
|
|
||||||
|
|
||||||
{{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}}
|
|
||||||
| Name | Type | Description | Notes |
|
|
||||||
|------------- | ------------- | ------------- | -------------|{{/-last}}{{/allParams}}
|
|
||||||
{{#allParams}}| **{{paramName}}** | {{#isEnum}}{{#allowableValues}}{{#values}}`{{{.}}}`{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}{{/isEnum}}{{^isEnum}}{{#isModel}}[{{baseType}}]({{baseType}}.md){{/isModel}}{{^isModel}}`{{{dataType}}}`{{/isModel}}{{/isEnum}} | {{description}} |{{^required}} [Optional]{{/required}}{{^isContainer}}{{#defaultValue}} [Defaults to `{{.}}`]{{/defaultValue}}{{/isContainer}}{{#allowableValues}} [Enum: {{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}]{{/allowableValues}} |
|
|
||||||
{{/allParams}}
|
|
||||||
|
|
||||||
### Return type
|
|
||||||
|
|
||||||
{{#returnType}}{{#returnTypeIsPrimitive}}**{{{returnType}}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}[**{{returnType}}**]({{returnBaseType}}.md){{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}`void` (Empty response body){{/returnType}}
|
|
||||||
|
|
||||||
### Authorization
|
|
||||||
|
|
||||||
{{^authMethods}}No authorization required{{/authMethods}}{{#authMethods}}[{{{name}}}{{#isOAuth}} {{flow}}{{/isOAuth}}](../README.md#{{{name}}}{{#isOAuth}}-{{flow}}{{/isOAuth}}){{^-last}}, {{/-last}}{{/authMethods}}
|
|
||||||
|
|
||||||
### HTTP request headers
|
|
||||||
|
|
||||||
- **Content-Type**: {{#consumes}}`{{{mediaType}}}`{{^-last}}, {{/-last}}{{/consumes}}{{^consumes}}Not defined{{/consumes}}
|
|
||||||
- **Accept**: {{#produces}}`{{{mediaType}}}`{{^-last}}, {{/-last}}{{/produces}}{{^produces}}Not defined{{/produces}}
|
|
||||||
|
|
||||||
{{#responses.0}}
|
|
||||||
|
|
||||||
### HTTP response details
|
|
||||||
| Status code | Description | Response headers |
|
|
||||||
|-------------|-------------|------------------|
|
|
||||||
{{#responses}}
|
|
||||||
| **{{code}}** | {{message}} | {{#headers}} * {{baseName}} - {{description}} <br> {{/headers}}{{^headers.0}} - {{/headers.0}} |
|
|
||||||
{{/responses}}
|
|
||||||
{{/responses.0}}
|
|
||||||
|
|
||||||
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
||||||
|
|
||||||
{{/operation}}
|
|
||||||
{{/operations}}
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
import {
|
|
||||||
Configuration,
|
|
||||||
{{classname}},
|
|
||||||
} from '{{npmName}}';
|
|
||||||
import type { {{operationIdCamelCase}}Request } from '{{npmName}}';
|
|
||||||
|
|
||||||
async function example() {
|
|
||||||
console.log("🚀 Testing {{npmName}} SDK...");
|
|
||||||
{{#hasAuthMethods}}
|
|
||||||
const config = new Configuration({ {{#authMethods}}{{#isBasicBasic}}
|
|
||||||
// To configure HTTP basic authorization: {{{name}}}
|
|
||||||
username: "YOUR USERNAME",
|
|
||||||
password: "YOUR PASSWORD",{{/isBasicBasic}}{{#isBasicBearer}}
|
|
||||||
// Configure HTTP bearer authorization: {{{name}}}
|
|
||||||
accessToken: "YOUR BEARER TOKEN",{{/isBasicBearer}}{{#isOAuth}}
|
|
||||||
// To configure OAuth2 access token for authorization: {{{name}}} {{{flow}}}
|
|
||||||
accessToken: "YOUR ACCESS TOKEN",{{/isOAuth}}{{#isApiKey}}
|
|
||||||
// To configure API key authorization: {{{name}}}
|
|
||||||
apiKey: "YOUR API KEY",{{/isApiKey}}{{#isHttpSignature}}
|
|
||||||
// To configure HTTP signature authorization: {{{name}}}
|
|
||||||
headers: { "YOUR HEADER NAME": "YOUR SIGNATURE" },{{/isHttpSignature}}{{/authMethods}}
|
|
||||||
});
|
|
||||||
{{/hasAuthMethods}}
|
|
||||||
const api = new {{classname}}({{#hasAuthMethods}}config{{/hasAuthMethods}});
|
|
||||||
|
|
||||||
{{#hasParams}}
|
|
||||||
const body = {
|
|
||||||
{{#allParams}}
|
|
||||||
// {{{dataType}}}{{#description}} | {{{description}}}{{/description}}{{^required}} (optional){{/required}}
|
|
||||||
{{paramName}}: {{{example}}}{{^example}}...{{/example}},
|
|
||||||
{{/allParams}}
|
|
||||||
} satisfies {{operationIdCamelCase}}Request;
|
|
||||||
|
|
||||||
{{/hasParams}}
|
|
||||||
try {
|
|
||||||
const data = await api.{{{operationId}}}({{#hasParams}}body{{/hasParams}});
|
|
||||||
console.log(data);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run the test
|
|
||||||
example().catch(console.error);
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{#useSagaAndRecords}}
|
|
||||||
export * from './SagaApiManager{{importFileExtension}}'
|
|
||||||
export * from './allSagas{{importFileExtension}}'
|
|
||||||
{{/useSagaAndRecords}}
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis}}
|
|
||||||
{{#operations}}
|
|
||||||
export * from './{{ classFilename }}{{importFileExtension}}';
|
|
||||||
{{#useSagaAndRecords}}
|
|
||||||
export * from './{{{ classFilename }}}Sagas{{importFileExtension}}';
|
|
||||||
{{/useSagaAndRecords}}
|
|
||||||
{{/operations}}
|
|
||||||
{{/apis}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
|
|
@ -1,557 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{>licenseInfo}}
|
|
||||||
|
|
||||||
|
|
||||||
import * as runtime from '../runtime{{importFileExtension}}';
|
|
||||||
{{#imports.0}}
|
|
||||||
import type {
|
|
||||||
{{#imports}}
|
|
||||||
{{className}},
|
|
||||||
{{/imports}}
|
|
||||||
} from '../models/index{{importFileExtension}}';
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
import {
|
|
||||||
{{#imports}}
|
|
||||||
{{className}}FromJSON,
|
|
||||||
{{className}}ToJSON,
|
|
||||||
{{/imports}}
|
|
||||||
} from '../models/index{{importFileExtension}}';
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{/imports.0}}
|
|
||||||
|
|
||||||
{{#operations}}
|
|
||||||
{{#operation}}
|
|
||||||
{{#allParams.0}}
|
|
||||||
export interface {{#prefixParameterInterfaces}}{{classname}}{{/prefixParameterInterfaces}}{{operationIdCamelCase}}Request {
|
|
||||||
{{#allParams}}
|
|
||||||
{{paramName}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{#hasReadOnly}}Omit<{{{dataType}}}, {{#readOnlyVars}}'{{baseName}}'{{^-last}}|{{/-last}}{{/readOnlyVars}}>{{/hasReadOnly}}{{^hasReadOnly}}{{{dataType}}}{{/hasReadOnly}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}};
|
|
||||||
{{/allParams}}
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/allParams.0}}
|
|
||||||
{{/operation}}
|
|
||||||
{{/operations}}
|
|
||||||
{{#withInterfaces}}
|
|
||||||
{{#operations}}
|
|
||||||
/**
|
|
||||||
* {{classname}} - interface
|
|
||||||
* {{#lambda.indented_1}}{{{unescapedDescription}}}{{/lambda.indented_1}}
|
|
||||||
* @export
|
|
||||||
* @interface {{classname}}Interface
|
|
||||||
*/
|
|
||||||
export interface {{classname}}Interface {
|
|
||||||
{{#operation}}
|
|
||||||
/**
|
|
||||||
* {{¬es}}
|
|
||||||
{{#summary}}
|
|
||||||
* @summary {{&summary}}
|
|
||||||
{{/summary}}
|
|
||||||
{{#allParams}}
|
|
||||||
* @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}}
|
|
||||||
{{/allParams}}
|
|
||||||
* @param {*} [options] Override http request option.
|
|
||||||
{{#isDeprecated}}
|
|
||||||
* @deprecated
|
|
||||||
{{/isDeprecated}}
|
|
||||||
* @throws {RequiredError}
|
|
||||||
* @memberof {{classname}}Interface
|
|
||||||
*/
|
|
||||||
{{nickname}}Raw({{#allParams.0}}requestParameters: {{#prefixParameterInterfaces}}{{classname}}{{/prefixParameterInterfaces}}{{operationIdCamelCase}}Request, {{/allParams.0}}initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<{{#responses}}{{#dataType}}{{{dataType}}}{{/dataType}}{{^dataType}}void{{/dataType}}{{^-last}} | {{/-last}}{{/responses}}{{^responses}}{{{returnType}}}{{^returnType}}void{{/returnType}}{{/responses}}>>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
{{#notes}}
|
|
||||||
* {{¬es}}
|
|
||||||
{{/notes}}
|
|
||||||
{{#summary}}
|
|
||||||
* {{&summary}}
|
|
||||||
{{/summary}}
|
|
||||||
{{#isDeprecated}}
|
|
||||||
* @deprecated
|
|
||||||
{{/isDeprecated}}
|
|
||||||
*/
|
|
||||||
{{^useSingleRequestParameter}}
|
|
||||||
{{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}, {{/allParams}}initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{{#responses}}{{#dataType}}{{{dataType}}}{{/dataType}}{{^dataType}}void{{/dataType}}{{^-last}} | {{/-last}}{{/responses}}{{^responses}}{{{returnType}}}{{#returnType}}{{#isResponseOptional}} | null | undefined {{/isResponseOptional}}{{/returnType}}{{^returnType}}void{{/returnType}}{{/responses}}>;
|
|
||||||
{{/useSingleRequestParameter}}
|
|
||||||
{{#useSingleRequestParameter}}
|
|
||||||
{{nickname}}({{#allParams.0}}requestParameters: {{#prefixParameterInterfaces}}{{classname}}{{/prefixParameterInterfaces}}{{operationIdCamelCase}}Request, {{/allParams.0}}initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{{#responses}}{{#dataType}}{{{dataType}}}{{/dataType}}{{^dataType}}void{{/dataType}}{{^-last}} | {{/-last}}{{/responses}}{{^responses}}{{{returnType}}}{{#returnType}}{{#isResponseOptional}} | null | undefined {{/isResponseOptional}}{{/returnType}}{{^returnType}}void{{/returnType}}{{/responses}}>;
|
|
||||||
{{/useSingleRequestParameter}}
|
|
||||||
|
|
||||||
{{/operation}}
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/operations}}
|
|
||||||
{{/withInterfaces}}
|
|
||||||
{{#operations}}
|
|
||||||
/**
|
|
||||||
* {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}}
|
|
||||||
*/
|
|
||||||
{{#withInterfaces}}
|
|
||||||
export class {{classname}} extends runtime.BaseAPI implements {{classname}}Interface {
|
|
||||||
{{/withInterfaces}}
|
|
||||||
{{^withInterfaces}}
|
|
||||||
export class {{classname}} extends runtime.BaseAPI {
|
|
||||||
{{/withInterfaces}}
|
|
||||||
|
|
||||||
{{#operation}}
|
|
||||||
/**
|
|
||||||
{{#notes}}
|
|
||||||
* {{¬es}}
|
|
||||||
{{/notes}}
|
|
||||||
{{#summary}}
|
|
||||||
* {{&summary}}
|
|
||||||
{{/summary}}
|
|
||||||
{{#isDeprecated}}
|
|
||||||
* @deprecated
|
|
||||||
{{/isDeprecated}}
|
|
||||||
*/
|
|
||||||
async {{nickname}}Raw({{#allParams.0}}requestParameters: {{#prefixParameterInterfaces}}{{classname}}{{/prefixParameterInterfaces}}{{operationIdCamelCase}}Request, {{/allParams.0}}initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<{{#responses}}{{#dataType}}{{{dataType}}}{{/dataType}}{{^dataType}}void{{/dataType}}{{^-last}} | {{/-last}}{{/responses}}{{^responses}}{{{returnType}}}{{^returnType}}void{{/returnType}}{{/responses}}>> {
|
|
||||||
{{#allParams}}
|
|
||||||
{{#required}}
|
|
||||||
if (requestParameters['{{paramName}}'] == null) {
|
|
||||||
throw new runtime.RequiredError(
|
|
||||||
'{{paramName}}',
|
|
||||||
'Required parameter "{{paramName}}" was null or undefined when calling {{nickname}}().'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/required}}
|
|
||||||
{{/allParams}}
|
|
||||||
const queryParameters: any = {};
|
|
||||||
|
|
||||||
{{#queryParams}}
|
|
||||||
{{#isArray}}
|
|
||||||
if (requestParameters['{{paramName}}'] != null) {
|
|
||||||
{{#isCollectionFormatMulti}}
|
|
||||||
queryParameters['{{baseName}}'] = requestParameters['{{paramName}}'];
|
|
||||||
{{/isCollectionFormatMulti}}
|
|
||||||
{{^isCollectionFormatMulti}}
|
|
||||||
queryParameters['{{baseName}}'] = {{#uniqueItems}}Array.from({{/uniqueItems}}requestParameters['{{paramName}}']{{#uniqueItems}}){{/uniqueItems}}!.join(runtime.COLLECTION_FORMATS["{{collectionFormat}}"]);
|
|
||||||
{{/isCollectionFormatMulti}}
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
if (requestParameters['{{paramName}}'] != null) {
|
|
||||||
{{#isExplode}}
|
|
||||||
{{#isContainer}}
|
|
||||||
for (let key of Object.keys(requestParameters['{{paramName}}'])) {
|
|
||||||
queryParameters[key] = requestParameters['{{paramName}}'][key];
|
|
||||||
}
|
|
||||||
{{/isContainer}}
|
|
||||||
{{^isContainer}}
|
|
||||||
queryParameters['{{baseName}}'] = requestParameters['{{paramName}}'];
|
|
||||||
{{/isContainer}}
|
|
||||||
{{/isExplode}}
|
|
||||||
{{^isExplode}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
queryParameters['{{baseName}}'] = (requestParameters['{{paramName}}'] as any).toISOString();
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{^isDateTimeType}}
|
|
||||||
{{#isDateType}}
|
|
||||||
queryParameters['{{baseName}}'] = (requestParameters['{{paramName}}'] as any).toISOString().substring(0,10);
|
|
||||||
{{/isDateType}}
|
|
||||||
{{^isDateType}}
|
|
||||||
queryParameters['{{baseName}}'] = requestParameters['{{paramName}}'];
|
|
||||||
{{/isDateType}}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{/isExplode}}
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isArray}}
|
|
||||||
{{/queryParams}}
|
|
||||||
const headerParameters: runtime.HTTPHeaders = {};
|
|
||||||
|
|
||||||
{{#bodyParam}}
|
|
||||||
{{^consumes}}
|
|
||||||
headerParameters['Content-Type'] = 'application/json';
|
|
||||||
|
|
||||||
{{/consumes}}
|
|
||||||
{{#consumes.0}}
|
|
||||||
headerParameters['Content-Type'] = '{{{mediaType}}}';
|
|
||||||
|
|
||||||
{{/consumes.0}}
|
|
||||||
{{/bodyParam}}
|
|
||||||
{{#headerParams}}
|
|
||||||
{{#isArray}}
|
|
||||||
if (requestParameters['{{paramName}}'] != null) {
|
|
||||||
headerParameters['{{baseName}}'] = {{#uniqueItems}}Array.from({{/uniqueItems}}requestParameters['{{paramName}}']{{#uniqueItems}}){{/uniqueItems}}!.join(runtime.COLLECTION_FORMATS["{{collectionFormat}}"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
if (requestParameters['{{paramName}}'] != null) {
|
|
||||||
headerParameters['{{baseName}}'] = String(requestParameters['{{paramName}}']);
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isArray}}
|
|
||||||
{{/headerParams}}
|
|
||||||
{{#authMethods}}
|
|
||||||
{{#isBasic}}
|
|
||||||
{{#isBasicBasic}}
|
|
||||||
if (this.configuration && (this.configuration.username !== undefined || this.configuration.password !== undefined)) {
|
|
||||||
headerParameters["Authorization"] = "Basic " + btoa(this.configuration.username + ":" + this.configuration.password);
|
|
||||||
}
|
|
||||||
{{/isBasicBasic}}
|
|
||||||
{{#isBasicBearer}}
|
|
||||||
if (this.configuration && this.configuration.accessToken) {
|
|
||||||
const token = this.configuration.accessToken;
|
|
||||||
const tokenString = await token("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]);
|
|
||||||
|
|
||||||
if (tokenString) {
|
|
||||||
headerParameters["Authorization"] = `Bearer ${tokenString}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isBasicBearer}}
|
|
||||||
{{/isBasic}}
|
|
||||||
{{#isApiKey}}
|
|
||||||
{{#isKeyInHeader}}
|
|
||||||
if (this.configuration && this.configuration.apiKey) {
|
|
||||||
headerParameters["{{keyParamName}}"] = await this.configuration.apiKey("{{keyParamName}}"); // {{name}} authentication
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isKeyInHeader}}
|
|
||||||
{{#isKeyInQuery}}
|
|
||||||
if (this.configuration && this.configuration.apiKey) {
|
|
||||||
queryParameters["{{keyParamName}}"] = await this.configuration.apiKey("{{keyParamName}}"); // {{name}} authentication
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isKeyInQuery}}
|
|
||||||
{{/isApiKey}}
|
|
||||||
{{#isOAuth}}
|
|
||||||
if (this.configuration && this.configuration.accessToken) {
|
|
||||||
// oauth required
|
|
||||||
headerParameters["Authorization"] = await this.configuration.accessToken("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isOAuth}}
|
|
||||||
{{/authMethods}}
|
|
||||||
{{#hasFormParams}}
|
|
||||||
const consumes: runtime.Consume[] = [
|
|
||||||
{{#consumes}}
|
|
||||||
{ contentType: '{{{mediaType}}}' },
|
|
||||||
{{/consumes}}
|
|
||||||
];
|
|
||||||
// @ts-ignore: canConsumeForm may be unused
|
|
||||||
const canConsumeForm = runtime.canConsumeForm(consumes);
|
|
||||||
|
|
||||||
let formParams: { append(param: string, value: any): any };
|
|
||||||
let useForm = false;
|
|
||||||
{{#formParams}}
|
|
||||||
{{#isFile}}
|
|
||||||
// use FormData to transmit files using content-type "multipart/form-data"
|
|
||||||
useForm = canConsumeForm;
|
|
||||||
{{/isFile}}
|
|
||||||
{{/formParams}}
|
|
||||||
if (useForm) {
|
|
||||||
formParams = new FormData();
|
|
||||||
} else {
|
|
||||||
formParams = new URLSearchParams();
|
|
||||||
}
|
|
||||||
|
|
||||||
{{#formParams}}
|
|
||||||
{{#isArray}}
|
|
||||||
if (requestParameters['{{paramName}}'] != null) {
|
|
||||||
{{#isCollectionFormatMulti}}
|
|
||||||
requestParameters['{{paramName}}'].forEach((element) => {
|
|
||||||
formParams.append('{{baseName}}{{#useSquareBracketsInArrayNames}}[]{{/useSquareBracketsInArrayNames}}', element as any);
|
|
||||||
})
|
|
||||||
{{/isCollectionFormatMulti}}
|
|
||||||
{{^isCollectionFormatMulti}}
|
|
||||||
formParams.append('{{baseName}}{{#useSquareBracketsInArrayNames}}[]{{/useSquareBracketsInArrayNames}}', {{#uniqueItems}}Array.from({{/uniqueItems}}requestParameters['{{paramName}}']{{#uniqueItems}}){{/uniqueItems}}!.join(runtime.COLLECTION_FORMATS["{{collectionFormat}}"]));
|
|
||||||
{{/isCollectionFormatMulti}}
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
if (requestParameters['{{paramName}}'] != null) {
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
formParams.append('{{baseName}}', (requestParameters['{{paramName}}'] as any).toISOString());
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{^isDateTimeType}}
|
|
||||||
{{#isPrimitiveType}}
|
|
||||||
formParams.append('{{baseName}}', requestParameters['{{paramName}}'] as any);
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{^isPrimitiveType}}
|
|
||||||
{{#isEnumRef}}
|
|
||||||
formParams.append('{{baseName}}', requestParameters['{{paramName}}'] as any);
|
|
||||||
{{/isEnumRef}}
|
|
||||||
{{^isEnumRef}}
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
formParams.append('{{baseName}}', new Blob([JSON.stringify({{{dataType}}}ToJSON(requestParameters['{{paramName}}']))], { type: "application/json", }));
|
|
||||||
{{/withoutRuntimeChecks}}{{#withoutRuntimeChecks}}
|
|
||||||
formParams.append('{{baseName}}', new Blob([JSON.stringify(requestParameters['{{paramName}}'])], { type: "application/json", }));
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{/isEnumRef}}
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
}
|
|
||||||
|
|
||||||
{{/isArray}}
|
|
||||||
{{/formParams}}
|
|
||||||
{{/hasFormParams}}
|
|
||||||
|
|
||||||
let urlPath = `{{{path}}}`;
|
|
||||||
{{#pathParams}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
if (requestParameters['{{paramName}}'] instanceof Date) {
|
|
||||||
urlPath = urlPath.replace(`{${"{{baseName}}"}}`, encodeURIComponent(requestParameters['{{paramName}}'].toISOString()));
|
|
||||||
} else {
|
|
||||||
urlPath = urlPath.replace(`{${"{{baseName}}"}}`, encodeURIComponent(String(requestParameters['{{paramName}}'])));
|
|
||||||
}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{^isDateTimeType}}
|
|
||||||
{{#isDateType}}
|
|
||||||
if (requestParameters['{{paramName}}'] instanceof Date) {
|
|
||||||
urlPath = urlPath.replace(`{${"{{baseName}}"}}`, encodeURIComponent(requestParameters['{{paramName}}'].toISOString().substring(0,10)));
|
|
||||||
} else {
|
|
||||||
urlPath = urlPath.replace(`{${"{{baseName}}"}}`, encodeURIComponent(String(requestParameters['{{paramName}}'])));
|
|
||||||
}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{^isDateType}}
|
|
||||||
urlPath = urlPath.replace(`{${"{{baseName}}"}}`, encodeURIComponent(String(requestParameters['{{paramName}}'])));
|
|
||||||
{{/isDateType}}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{/pathParams}}
|
|
||||||
|
|
||||||
const response = await this.request({
|
|
||||||
path: urlPath,
|
|
||||||
method: '{{httpMethod}}',
|
|
||||||
headers: headerParameters,
|
|
||||||
query: queryParameters,
|
|
||||||
{{#hasBodyParam}}
|
|
||||||
{{#bodyParam}}
|
|
||||||
{{#isContainer}}
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
body: requestParameters['{{paramName}}']{{#isArray}}{{#items}}{{^isPrimitiveType}}!.map({{datatype}}ToJSON){{/isPrimitiveType}}{{/items}}{{/isArray}},
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{#withoutRuntimeChecks}}
|
|
||||||
body: requestParameters['{{paramName}}'],
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{/isContainer}}
|
|
||||||
{{^isContainer}}
|
|
||||||
{{^isPrimitiveType}}
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
body: {{dataType}}ToJSON(requestParameters['{{paramName}}']),
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{#withoutRuntimeChecks}}
|
|
||||||
body: requestParameters['{{paramName}}'],
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{#isPrimitiveType}}
|
|
||||||
body: requestParameters['{{paramName}}'] as any,
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{/isContainer}}
|
|
||||||
{{/bodyParam}}
|
|
||||||
{{/hasBodyParam}}
|
|
||||||
{{#hasFormParams}}
|
|
||||||
body: formParams,
|
|
||||||
{{/hasFormParams}}
|
|
||||||
}, initOverrides);
|
|
||||||
|
|
||||||
// CHANGED: Handle all status codes defined in the OpenAPI spec, not just 2xx responses
|
|
||||||
// This allows typed access to error responses (4xx, 5xx) and other status codes.
|
|
||||||
// The code routes responses based on the actual HTTP status code and returns
|
|
||||||
// appropriately typed ApiResponse wrappers for each status code.
|
|
||||||
{{#responses}}
|
|
||||||
if (response.status === {{code}}) {
|
|
||||||
{{#dataType}}
|
|
||||||
{{#isBinary}}
|
|
||||||
// Binary response for status {{code}}
|
|
||||||
return new runtime.BlobApiResponse(response);
|
|
||||||
{{/isBinary}}
|
|
||||||
{{^isBinary}}
|
|
||||||
{{#isFile}}
|
|
||||||
// File response for status {{code}}
|
|
||||||
return new runtime.BlobApiResponse(response);
|
|
||||||
{{/isFile}}
|
|
||||||
{{^isFile}}
|
|
||||||
{{#primitiveType}}
|
|
||||||
{{#isMap}}
|
|
||||||
// Map of primitives response for status {{code}}
|
|
||||||
return new runtime.JSONApiResponse<any>(response);
|
|
||||||
{{/isMap}}
|
|
||||||
{{^isMap}}
|
|
||||||
{{#isArray}}
|
|
||||||
// Array of primitives response for status {{code}}
|
|
||||||
return new runtime.JSONApiResponse<any>(response);
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{#simpleType}}
|
|
||||||
// Simple primitive type response for status {{code}} - check content-type
|
|
||||||
if (this.isJsonMime(response.headers.get('content-type'))) {
|
|
||||||
return new runtime.JSONApiResponse<{{dataType}}>(response);
|
|
||||||
} else {
|
|
||||||
return new runtime.TextApiResponse(response) as any;
|
|
||||||
}
|
|
||||||
{{/simpleType}}
|
|
||||||
{{^simpleType}}
|
|
||||||
// Primitive but not simple (e.g., object with additionalProperties) for status {{code}}
|
|
||||||
return new runtime.JSONApiResponse<any>(response);
|
|
||||||
{{/simpleType}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isMap}}
|
|
||||||
{{/primitiveType}}
|
|
||||||
{{^primitiveType}}
|
|
||||||
{{#isArray}}
|
|
||||||
// Array of objects response for status {{code}}
|
|
||||||
return new runtime.JSONApiResponse(response{{^withoutRuntimeChecks}}, (jsonValue) => {{#uniqueItems}}new Set({{/uniqueItems}}jsonValue.map({{baseType}}FromJSON){{/withoutRuntimeChecks}}){{#uniqueItems}}){{/uniqueItems}};
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{#isMap}}
|
|
||||||
// Map of objects response for status {{code}}
|
|
||||||
return new runtime.JSONApiResponse(response{{^withoutRuntimeChecks}}, (jsonValue) => runtime.mapValues(jsonValue, {{baseType}}FromJSON){{/withoutRuntimeChecks}});
|
|
||||||
{{/isMap}}
|
|
||||||
{{^isMap}}
|
|
||||||
// Object response for status {{code}}
|
|
||||||
return new runtime.JSONApiResponse(response{{^withoutRuntimeChecks}}, (jsonValue) => {{baseType}}FromJSON(jsonValue){{/withoutRuntimeChecks}});
|
|
||||||
{{/isMap}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/primitiveType}}
|
|
||||||
{{/isFile}}
|
|
||||||
{{/isBinary}}
|
|
||||||
{{/dataType}}
|
|
||||||
{{^dataType}}
|
|
||||||
// No body response for status {{code}}
|
|
||||||
return new runtime.VoidApiResponse(response);
|
|
||||||
{{/dataType}}
|
|
||||||
}
|
|
||||||
{{/responses}}
|
|
||||||
// CHANGED: Throw error if status code is not handled by any of the defined responses
|
|
||||||
// This ensures all code paths return a value and provides clear error messages for unexpected status codes
|
|
||||||
// Only throw if responses were defined but none matched the actual status code
|
|
||||||
throw new runtime.ResponseError(response, `Unexpected status code: ${response.status}. Expected one of: {{#responses}}{{code}}{{^-last}}, {{/-last}}{{/responses}}`);
|
|
||||||
{{^responses}}
|
|
||||||
// FALLBACK: No responses defined in OpenAPI spec - use default behavior for backward compatibility
|
|
||||||
// This maintains backward compatibility with specs that don't explicitly define all responses
|
|
||||||
{{#returnType}}
|
|
||||||
{{#isResponseFile}}
|
|
||||||
return new runtime.BlobApiResponse(response);
|
|
||||||
{{/isResponseFile}}
|
|
||||||
{{^isResponseFile}}
|
|
||||||
{{#returnTypeIsPrimitive}}
|
|
||||||
{{#isMap}}
|
|
||||||
return new runtime.JSONApiResponse<any>(response);
|
|
||||||
{{/isMap}}
|
|
||||||
{{#isArray}}
|
|
||||||
return new runtime.JSONApiResponse<any>(response);
|
|
||||||
{{/isArray}}
|
|
||||||
{{#returnSimpleType}}
|
|
||||||
if (this.isJsonMime(response.headers.get('content-type'))) {
|
|
||||||
return new runtime.JSONApiResponse<{{returnType}}>(response);
|
|
||||||
} else {
|
|
||||||
return new runtime.TextApiResponse(response) as any;
|
|
||||||
}
|
|
||||||
{{/returnSimpleType}}
|
|
||||||
{{/returnTypeIsPrimitive}}
|
|
||||||
{{^returnTypeIsPrimitive}}
|
|
||||||
{{#isArray}}
|
|
||||||
return new runtime.JSONApiResponse(response{{^withoutRuntimeChecks}}, (jsonValue) => {{#uniqueItems}}new Set({{/uniqueItems}}jsonValue.map({{returnBaseType}}FromJSON){{/withoutRuntimeChecks}}){{#uniqueItems}}){{/uniqueItems}};
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{#isMap}}
|
|
||||||
return new runtime.JSONApiResponse(response{{^withoutRuntimeChecks}}, (jsonValue) => runtime.mapValues(jsonValue, {{returnBaseType}}FromJSON){{/withoutRuntimeChecks}});
|
|
||||||
{{/isMap}}
|
|
||||||
{{^isMap}}
|
|
||||||
return new runtime.JSONApiResponse(response{{^withoutRuntimeChecks}}, (jsonValue) => {{returnBaseType}}FromJSON(jsonValue){{/withoutRuntimeChecks}});
|
|
||||||
{{/isMap}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/returnTypeIsPrimitive}}
|
|
||||||
{{/isResponseFile}}
|
|
||||||
{{/returnType}}
|
|
||||||
{{^returnType}}
|
|
||||||
return new runtime.VoidApiResponse(response);
|
|
||||||
{{/returnType}}
|
|
||||||
{{/responses}}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
{{#notes}}
|
|
||||||
* {{¬es}}
|
|
||||||
{{/notes}}
|
|
||||||
{{#summary}}
|
|
||||||
* {{&summary}}
|
|
||||||
{{/summary}}
|
|
||||||
{{#isDeprecated}}
|
|
||||||
* @deprecated
|
|
||||||
{{/isDeprecated}}
|
|
||||||
*/
|
|
||||||
{{^useSingleRequestParameter}}
|
|
||||||
async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}, {{/allParams}}initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{{#responses}}{{#dataType}}{{{dataType}}}{{/dataType}}{{^dataType}}void{{/dataType}}{{^-last}} | {{/-last}}{{/responses}}{{^responses}}{{{returnType}}}{{#returnType}}{{#isResponseOptional}} | null | undefined {{/isResponseOptional}}{{/returnType}}{{^returnType}}void{{/returnType}}{{/responses}}> {
|
|
||||||
{{#returnType}}
|
|
||||||
const response = await this.{{nickname}}Raw({{#allParams.0}}{ {{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}} }, {{/allParams.0}}initOverrides);
|
|
||||||
return await response.value();
|
|
||||||
{{/returnType}}
|
|
||||||
{{^returnType}}
|
|
||||||
await this.{{nickname}}Raw({{#allParams.0}}{ {{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}} }, {{/allParams.0}}initOverrides);
|
|
||||||
{{/returnType}}
|
|
||||||
}
|
|
||||||
{{/useSingleRequestParameter}}
|
|
||||||
{{#useSingleRequestParameter}}
|
|
||||||
async {{nickname}}({{#allParams.0}}requestParameters: {{#prefixParameterInterfaces}}{{classname}}{{/prefixParameterInterfaces}}{{operationIdCamelCase}}Request{{^hasRequiredParams}} = {}{{/hasRequiredParams}}, {{/allParams.0}}initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{{#responses}}{{#dataType}}{{{dataType}}}{{/dataType}}{{^dataType}}void{{/dataType}}{{^-last}} | {{/-last}}{{/responses}}{{^responses}}{{{returnType}}}{{#returnType}}{{#isResponseOptional}} | null | undefined {{/isResponseOptional}}{{/returnType}}{{^returnType}}void{{/returnType}}{{/responses}}> {
|
|
||||||
{{#returnType}}
|
|
||||||
const response = await this.{{nickname}}Raw({{#allParams.0}}requestParameters, {{/allParams.0}}initOverrides);
|
|
||||||
{{#isResponseOptional}}
|
|
||||||
// CHANGED: Handle all status codes for optional responses
|
|
||||||
switch (response.raw.status) {
|
|
||||||
{{#responses}}
|
|
||||||
{{#is2xx}}
|
|
||||||
case {{code}}:
|
|
||||||
return {{#dataType}}await response.value(){{/dataType}}{{^dataType}}null{{/dataType}};
|
|
||||||
{{/is2xx}}
|
|
||||||
{{/responses}}
|
|
||||||
default:
|
|
||||||
// For non-2xx responses, throw error to maintain backward compatibility
|
|
||||||
throw new runtime.ResponseError(response.raw, `Unexpected status code: ${response.raw.status}`);
|
|
||||||
}
|
|
||||||
{{/isResponseOptional}}
|
|
||||||
{{^isResponseOptional}}
|
|
||||||
return await response.value();
|
|
||||||
{{/isResponseOptional}}
|
|
||||||
{{/returnType}}
|
|
||||||
{{^returnType}}
|
|
||||||
await this.{{nickname}}Raw({{#allParams.0}}requestParameters, {{/allParams.0}}initOverrides);
|
|
||||||
{{/returnType}}
|
|
||||||
}
|
|
||||||
{{/useSingleRequestParameter}}
|
|
||||||
|
|
||||||
{{/operation}}
|
|
||||||
}
|
|
||||||
{{/operations}}
|
|
||||||
{{#hasEnums}}
|
|
||||||
|
|
||||||
{{#operations}}
|
|
||||||
{{#operation}}
|
|
||||||
{{#allParams}}
|
|
||||||
{{#isEnum}}
|
|
||||||
{{#stringEnums}}
|
|
||||||
/**
|
|
||||||
* @export
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
export enum {{operationIdCamelCase}}{{enumName}} {
|
|
||||||
{{#allowableValues}}
|
|
||||||
{{#enumVars}}
|
|
||||||
{{{name}}} = {{{value}}}{{^-last}},{{/-last}}
|
|
||||||
{{/enumVars}}
|
|
||||||
{{/allowableValues}}
|
|
||||||
}
|
|
||||||
{{/stringEnums}}
|
|
||||||
{{^stringEnums}}
|
|
||||||
/**
|
|
||||||
* @export
|
|
||||||
*/
|
|
||||||
export const {{operationIdCamelCase}}{{enumName}} = {
|
|
||||||
{{#allowableValues}}
|
|
||||||
{{#enumVars}}
|
|
||||||
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
|
|
||||||
{{/enumVars}}
|
|
||||||
{{/allowableValues}}
|
|
||||||
} as const;
|
|
||||||
export type {{operationIdCamelCase}}{{enumName}} = typeof {{operationIdCamelCase}}{{enumName}}[keyof typeof {{operationIdCamelCase}}{{enumName}}];
|
|
||||||
{{/stringEnums}}
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/allParams}}
|
|
||||||
{{/operation}}
|
|
||||||
{{/operations}}
|
|
||||||
{{/hasEnums}}
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
wwwroot/*.js
|
|
||||||
node_modules
|
|
||||||
typings
|
|
||||||
dist
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
export * from './runtime{{importFileExtension}}';
|
|
||||||
{{#useSagaAndRecords}}
|
|
||||||
export * from './runtimeSagasAndRecords{{importFileExtension}}';
|
|
||||||
export * from './ApiEntitiesRecord{{importFileExtension}}';
|
|
||||||
export * from './ApiEntitiesReducer{{importFileExtension}}';
|
|
||||||
export * from './ApiEntitiesSelectors{{importFileExtension}}';
|
|
||||||
{{/useSagaAndRecords}}
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis.0}}
|
|
||||||
export * from './apis/index{{importFileExtension}}';
|
|
||||||
{{/apis.0}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
{{#models.0}}
|
|
||||||
export * from './models/index{{importFileExtension}}';
|
|
||||||
{{/models.0}}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
/**
|
|
||||||
* {{{appName}}}
|
|
||||||
* {{{appDescription}}}
|
|
||||||
*
|
|
||||||
* {{#version}}The version of the OpenAPI document: {{{.}}}{{/version}}
|
|
||||||
* {{#infoEmail}}Contact: {{{.}}}{{/infoEmail}}
|
|
||||||
*
|
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
||||||
* https://openapi-generator.tech
|
|
||||||
* Do not edit the class manually.
|
|
||||||
*/
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
{{>modelEnumInterfaces}}
|
|
||||||
|
|
||||||
export function instanceOf{{classname}}(value: any): boolean {
|
|
||||||
for (const key in {{classname}}) {
|
|
||||||
if (Object.prototype.hasOwnProperty.call({{classname}}, key)) {
|
|
||||||
if ({{classname}}[key as keyof typeof {{classname}}] === value) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}FromJSON(json: any): {{classname}} {
|
|
||||||
return {{classname}}FromJSONTyped(json, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boolean): {{classname}} {
|
|
||||||
return json as {{classname}};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}ToJSON(value?: {{classname}} | null): any {
|
|
||||||
return value as any;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}ToJSONTyped(value: any, ignoreDiscriminator: boolean): {{classname}} {
|
|
||||||
return value as {{classname}};
|
|
||||||
}
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
{{#stringEnums}}
|
|
||||||
/**
|
|
||||||
* {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}}
|
|
||||||
* @export
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
export enum {{classname}} {
|
|
||||||
{{#allowableValues}}
|
|
||||||
{{#enumVars}}
|
|
||||||
{{#enumDescription}}
|
|
||||||
/**
|
|
||||||
* {{enumDescription}}
|
|
||||||
*/
|
|
||||||
{{/enumDescription}}
|
|
||||||
{{{name}}} = {{{value}}}{{^-last}},{{/-last}}
|
|
||||||
{{/enumVars}}
|
|
||||||
{{/allowableValues}}
|
|
||||||
}
|
|
||||||
{{/stringEnums}}{{^stringEnums}}
|
|
||||||
/**
|
|
||||||
* {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}}
|
|
||||||
* @export
|
|
||||||
*/
|
|
||||||
export const {{classname}} = {
|
|
||||||
{{#allowableValues}}
|
|
||||||
{{#enumVars}}
|
|
||||||
{{#enumDescription}}
|
|
||||||
/**
|
|
||||||
* {{enumDescription}}
|
|
||||||
*/
|
|
||||||
{{/enumDescription}}
|
|
||||||
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
|
|
||||||
{{/enumVars}}
|
|
||||||
{{/allowableValues}}
|
|
||||||
} as const;
|
|
||||||
export type {{classname}} = typeof {{classname}}[keyof typeof {{classname}}];
|
|
||||||
{{/stringEnums}}
|
|
||||||
|
|
@ -1,261 +0,0 @@
|
||||||
import { mapValues } from '../runtime{{importFileExtension}}';
|
|
||||||
{{#hasImports}}
|
|
||||||
{{#tsImports}}
|
|
||||||
import type { {{{classname}}} } from './{{filename}}{{importFileExtension}}';
|
|
||||||
import {
|
|
||||||
{{classname}}FromJSON,
|
|
||||||
{{classname}}FromJSONTyped,
|
|
||||||
{{classname}}ToJSON,
|
|
||||||
{{classname}}ToJSONTyped,
|
|
||||||
} from './{{filename}}{{importFileExtension}}';
|
|
||||||
{{/tsImports}}
|
|
||||||
|
|
||||||
{{/hasImports}}
|
|
||||||
{{#discriminator}}
|
|
||||||
{{#discriminator.mappedModels}}
|
|
||||||
import { type {{modelName}}, {{modelName}}FromJSONTyped, {{modelName}}ToJSON, {{modelName}}ToJSONTyped } from './{{modelName}}{{importFileExtension}}';
|
|
||||||
{{/discriminator.mappedModels}}
|
|
||||||
{{/discriminator}}
|
|
||||||
{{>modelGenericInterfaces}}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a given object implements the {{classname}} interface.
|
|
||||||
*/
|
|
||||||
export function instanceOf{{classname}}(value: object): value is {{classname}} {
|
|
||||||
{{#vars}}
|
|
||||||
{{#required}}
|
|
||||||
if (!('{{name}}' in value) || value['{{name}}'] === undefined) return false;
|
|
||||||
{{/required}}
|
|
||||||
{{/vars}}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}FromJSON(json: any): {{classname}} {
|
|
||||||
return {{classname}}FromJSONTyped(json, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boolean): {{classname}} {
|
|
||||||
{{#hasVars}}
|
|
||||||
if (json == null) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{#discriminator}}
|
|
||||||
if (!ignoreDiscriminator) {
|
|
||||||
{{#discriminator.mappedModels}}
|
|
||||||
if (json['{{discriminator.propertyBaseName}}'] === '{{mappingName}}') {
|
|
||||||
return {{modelName}}FromJSONTyped(json, ignoreDiscriminator);
|
|
||||||
}
|
|
||||||
{{/discriminator.mappedModels}}
|
|
||||||
{{#hasSelfReferencingDiscriminatorMapping}}
|
|
||||||
if (json['{{discriminator.propertyBaseName}}'] === '{{selfReferencingDiscriminatorMapping.mappingName}}') {
|
|
||||||
return {{selfReferencingDiscriminatorMapping.modelName}}FromJSONTyped(json, true);
|
|
||||||
}
|
|
||||||
{{/hasSelfReferencingDiscriminatorMapping}}
|
|
||||||
|
|
||||||
}
|
|
||||||
{{/discriminator}}
|
|
||||||
return {
|
|
||||||
{{#parent}}...{{{.}}}FromJSONTyped(json, true),{{/parent}}
|
|
||||||
{{#additionalPropertiesType}}
|
|
||||||
...json,
|
|
||||||
{{/additionalPropertiesType}}
|
|
||||||
{{#vars}}
|
|
||||||
{{#isPrimitiveType}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#uniqueItems}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}{{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Set(json['{{baseName}}']),
|
|
||||||
{{/uniqueItems}}
|
|
||||||
{{^uniqueItems}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}{{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}json['{{baseName}}'],
|
|
||||||
{{/uniqueItems}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{#isDateType}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Date(json['{{baseName}}'])),
|
|
||||||
{{/isDateType}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Date(json['{{baseName}}'])),
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{^isDateType}}
|
|
||||||
{{^isDateTimeType}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}json['{{baseName}}'],
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{^isPrimitiveType}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#uniqueItems}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}new Set((json['{{baseName}}'] as Array<any>).map({{#items}}{{datatype}}{{/items}}FromJSON))),
|
|
||||||
{{/uniqueItems}}
|
|
||||||
{{^uniqueItems}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}(json['{{baseName}}'] as Array<any>).map({{#items}}{{datatype}}{{/items}}FromJSON)),
|
|
||||||
{{/uniqueItems}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{#isMap}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json['{{baseName}}'] == null ? null : {{/isNullable}}{{/required}}mapValues(json['{{baseName}}'], {{#items}}{{datatype}}{{/items}}FromJSON)),
|
|
||||||
{{/isMap}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^isMap}}
|
|
||||||
{{^isFreeFormObject}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}{{datatype}}FromJSON(json['{{baseName}}']),
|
|
||||||
{{/isFreeFormObject}}
|
|
||||||
{{#isFreeFormObject}}
|
|
||||||
'{{name}}': {{^required}}json['{{baseName}}'] == null ? undefined : {{/required}}json['{{baseName}}'],
|
|
||||||
{{/isFreeFormObject}}
|
|
||||||
{{/isMap}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{/vars}}
|
|
||||||
};
|
|
||||||
{{/hasVars}}
|
|
||||||
{{^hasVars}}
|
|
||||||
return json;
|
|
||||||
{{/hasVars}}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}ToJSON(json: any): {{classname}} {
|
|
||||||
return {{classname}}ToJSONTyped(json, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}ToJSONTyped(value?: {{#hasReadOnly}}Omit<{{classname}}, {{#readOnlyVars}}'{{baseName}}'{{^-last}}|{{/-last}}{{/readOnlyVars}}>{{/hasReadOnly}}{{^hasReadOnly}}{{classname}}{{/hasReadOnly}} | null, ignoreDiscriminator: boolean = false): any {
|
|
||||||
{{#hasVars}}
|
|
||||||
if (value == null) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{#discriminator}}
|
|
||||||
|
|
||||||
if (!ignoreDiscriminator) {
|
|
||||||
switch (value['{{discriminator.propertyName}}']) {
|
|
||||||
{{#discriminator.mappedModels}}
|
|
||||||
case '{{mappingName}}':
|
|
||||||
return {{modelName}}ToJSONTyped(value as {{modelName}}, ignoreDiscriminator);
|
|
||||||
{{/discriminator.mappedModels}}
|
|
||||||
default:
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/discriminator}}
|
|
||||||
|
|
||||||
return {
|
|
||||||
{{#parent}}...{{{.}}}ToJSONTyped(value, true),{{/parent}}
|
|
||||||
{{#additionalPropertiesType}}
|
|
||||||
...value,
|
|
||||||
{{/additionalPropertiesType}}
|
|
||||||
{{#vars}}
|
|
||||||
{{^isReadOnly}}
|
|
||||||
{{#isPrimitiveType}}
|
|
||||||
{{#isDateType}}
|
|
||||||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{#isNullable}}{{#required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{/isNullable}}value['{{name}}'].toISOString().substring(0,10),
|
|
||||||
{{/isDateType}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{#isNullable}}{{#required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{/isNullable}}value['{{name}}'].toISOString(),
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{#isArray}}
|
|
||||||
'{{baseName}}': {{#uniqueItems}}{{^required}}value['{{name}}'] == null ? undefined : {{/required}}{{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}Array.from(value['{{name}}'] as Set<any>){{/uniqueItems}}{{^uniqueItems}}value['{{name}}']{{/uniqueItems}},
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isDateType}}
|
|
||||||
{{^isDateTimeType}}
|
|
||||||
{{^isArray}}
|
|
||||||
'{{baseName}}': value['{{name}}'],
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{^isPrimitiveType}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#uniqueItems}}
|
|
||||||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}Array.from(value['{{name}}'] as Set<any>).map({{#items}}{{datatype}}{{/items}}ToJSON)),
|
|
||||||
{{/uniqueItems}}
|
|
||||||
{{^uniqueItems}}
|
|
||||||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}(value['{{name}}'] as Array<any>).map({{#items}}{{datatype}}{{/items}}ToJSON)),
|
|
||||||
{{/uniqueItems}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{#isMap}}
|
|
||||||
'{{baseName}}': {{^required}}value['{{name}}'] == null ? undefined : {{/required}}({{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}mapValues(value['{{name}}'], {{#items}}{{datatype}}{{/items}}ToJSON)),
|
|
||||||
{{/isMap}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^isMap}}
|
|
||||||
{{^isFreeFormObject}}
|
|
||||||
'{{baseName}}': {{datatype}}ToJSON(value['{{name}}']),
|
|
||||||
{{/isFreeFormObject}}
|
|
||||||
{{#isFreeFormObject}}
|
|
||||||
'{{baseName}}': value['{{name}}'],
|
|
||||||
{{/isFreeFormObject}}
|
|
||||||
{{/isMap}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isPrimitiveType}}
|
|
||||||
{{/isReadOnly}}
|
|
||||||
{{/vars}}
|
|
||||||
};
|
|
||||||
{{/hasVars}}
|
|
||||||
{{^hasVars}}
|
|
||||||
return value;
|
|
||||||
{{/hasVars}}
|
|
||||||
}
|
|
||||||
{{#validationAttributes}}
|
|
||||||
|
|
||||||
export const {{classname}}PropertyValidationAttributesMap: {
|
|
||||||
[property: string]: {
|
|
||||||
maxLength?: number,
|
|
||||||
minLength?: number,
|
|
||||||
pattern?: string,
|
|
||||||
maximum?: number,
|
|
||||||
exclusiveMaximum?: boolean,
|
|
||||||
minimum?: number,
|
|
||||||
exclusiveMinimum?: boolean,
|
|
||||||
multipleOf?: number,
|
|
||||||
maxItems?: number,
|
|
||||||
minItems?: number,
|
|
||||||
uniqueItems?: boolean
|
|
||||||
}
|
|
||||||
} = {
|
|
||||||
{{#vars}}
|
|
||||||
{{#hasValidation}}
|
|
||||||
{{name}}: {
|
|
||||||
{{#maxLength}}
|
|
||||||
maxLength: {{maxLength}},
|
|
||||||
{{/maxLength}}
|
|
||||||
{{#minLength}}
|
|
||||||
minLength: {{minLength}},
|
|
||||||
{{/minLength}}
|
|
||||||
{{#pattern}}
|
|
||||||
pattern: '{{pattern}}',
|
|
||||||
{{/pattern}}
|
|
||||||
{{#maximum}}
|
|
||||||
maximum: {{maximum}},
|
|
||||||
exclusiveMaximum: {{exclusiveMaximum}},
|
|
||||||
{{/maximum}}
|
|
||||||
{{#minimum}}
|
|
||||||
minimum: {{minimum}},
|
|
||||||
exclusiveMinimum: {{exclusiveMinimum}},
|
|
||||||
{{/minimum}}
|
|
||||||
{{#multipleOf}}
|
|
||||||
multipleOf: {{multipleOf}},
|
|
||||||
{{/multipleOf}}
|
|
||||||
{{#maxItems}}
|
|
||||||
maxItems: {{maxItems}},
|
|
||||||
{{/maxItems}}
|
|
||||||
{{#minItems}}
|
|
||||||
minItems: {{minItems}},
|
|
||||||
{{/minItems}}
|
|
||||||
{{#isArray}}
|
|
||||||
uniqueItems: {{uniqueItems}},
|
|
||||||
{{/isArray}}
|
|
||||||
},
|
|
||||||
{{/hasValidation}}
|
|
||||||
{{/vars}}
|
|
||||||
}
|
|
||||||
{{#isAdditionalPropertiesTrue}}
|
|
||||||
|
|
||||||
export const {{classname}}AdditionalPropertiesValidationAttributes: { maxProperties?: number, minProperties?: number } = {
|
|
||||||
{{#maxProperties}}
|
|
||||||
maxProperties: {{maxProperties}},
|
|
||||||
{{/maxProperties}}
|
|
||||||
{{#minProperties}}
|
|
||||||
minProperties: {{minProperties}},
|
|
||||||
{{/minProperties}}
|
|
||||||
}
|
|
||||||
{{/isAdditionalPropertiesTrue}}
|
|
||||||
{{/validationAttributes}}
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
/**
|
|
||||||
* {{#lambda.indented_star_1}}{{{unedDescription}}}{{/lambda.indented_star_1}}
|
|
||||||
* @export
|
|
||||||
* @interface {{classname}}
|
|
||||||
*/
|
|
||||||
export interface {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{
|
|
||||||
{{#additionalPropertiesType}}
|
|
||||||
[key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}};
|
|
||||||
{{/additionalPropertiesType}}
|
|
||||||
{{#vars}}
|
|
||||||
/**
|
|
||||||
* {{#lambda.indented_star_4}}{{{unedDescription}}}{{/lambda.indented_star_4}}
|
|
||||||
* @type {{=<% %>=}}{<%&datatype%>}<%={{ }}=%>
|
|
||||||
* @memberof {{classname}}
|
|
||||||
{{#deprecated}}
|
|
||||||
* @deprecated
|
|
||||||
{{/deprecated}}
|
|
||||||
*/
|
|
||||||
{{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}};
|
|
||||||
{{/vars}}
|
|
||||||
}{{#hasEnums}}
|
|
||||||
|
|
||||||
{{#vars}}
|
|
||||||
{{#isEnum}}
|
|
||||||
{{#stringEnums}}
|
|
||||||
/**
|
|
||||||
* @export
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
export enum {{classname}}{{enumName}} {
|
|
||||||
{{#allowableValues}}
|
|
||||||
{{#enumVars}}
|
|
||||||
{{{name}}} = {{{value}}}{{^-last}},{{/-last}}
|
|
||||||
{{/enumVars}}
|
|
||||||
{{/allowableValues}}
|
|
||||||
}
|
|
||||||
{{/stringEnums}}{{^stringEnums}}
|
|
||||||
/**
|
|
||||||
* @export
|
|
||||||
*/
|
|
||||||
export const {{classname}}{{enumName}} = {
|
|
||||||
{{#allowableValues}}
|
|
||||||
{{#enumVars}}
|
|
||||||
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
|
|
||||||
{{/enumVars}}
|
|
||||||
{{/allowableValues}}
|
|
||||||
} as const;
|
|
||||||
export type {{classname}}{{enumName}} = typeof {{classname}}{{enumName}}[keyof typeof {{classname}}{{enumName}}];
|
|
||||||
{{/stringEnums}}
|
|
||||||
{{/isEnum}}{{/vars}}{{/hasEnums}}
|
|
||||||
|
|
@ -1,255 +0,0 @@
|
||||||
{{#hasImports}}
|
|
||||||
{{#oneOfArrays}}
|
|
||||||
import type { {{{.}}} } from './{{.}}{{importFileExtension}}';
|
|
||||||
import {
|
|
||||||
instanceOf{{{.}}},
|
|
||||||
{{{.}}}FromJSON,
|
|
||||||
{{{.}}}FromJSONTyped,
|
|
||||||
{{{.}}}ToJSON,
|
|
||||||
} from './{{.}}{{importFileExtension}}';
|
|
||||||
{{/oneOfArrays}}
|
|
||||||
{{#oneOfModels}}
|
|
||||||
import type { {{{.}}} } from './{{.}}{{importFileExtension}}';
|
|
||||||
import {
|
|
||||||
instanceOf{{{.}}},
|
|
||||||
{{{.}}}FromJSON,
|
|
||||||
{{{.}}}FromJSONTyped,
|
|
||||||
{{{.}}}ToJSON,
|
|
||||||
} from './{{.}}{{importFileExtension}}';
|
|
||||||
{{/oneOfModels}}
|
|
||||||
|
|
||||||
{{/hasImports}}
|
|
||||||
{{>modelOneOfInterfaces}}
|
|
||||||
|
|
||||||
|
|
||||||
export function {{classname}}FromJSON(json: any): {{classname}} {
|
|
||||||
return {{classname}}FromJSONTyped(json, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boolean): {{classname}} {
|
|
||||||
if (json == null) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{#discriminator}}
|
|
||||||
switch (json['{{discriminator.propertyBaseName}}']) {
|
|
||||||
{{#discriminator.mappedModels}}
|
|
||||||
case '{{mappingName}}':
|
|
||||||
return Object.assign({}, {{modelName}}FromJSONTyped(json, true), { {{discriminator.propertyName}}: '{{mappingName}}' } as const);
|
|
||||||
{{/discriminator.mappedModels}}
|
|
||||||
default:
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{/discriminator}}
|
|
||||||
{{^discriminator}}
|
|
||||||
{{#oneOfModels}}
|
|
||||||
{{#-first}}
|
|
||||||
if (typeof json !== 'object') {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{/-first}}
|
|
||||||
if (instanceOf{{{.}}}(json)) {
|
|
||||||
return {{{.}}}FromJSONTyped(json, true);
|
|
||||||
}
|
|
||||||
{{/oneOfModels}}
|
|
||||||
{{#oneOfArrays}}
|
|
||||||
{{#-first}}
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
if (json.every(item => typeof item === 'object')) {
|
|
||||||
{{/-first}}
|
|
||||||
if (json.every(item => instanceOf{{{.}}}(item))) {
|
|
||||||
return json.map(value => {{{.}}}FromJSONTyped(value, true));
|
|
||||||
}
|
|
||||||
{{#-last}}
|
|
||||||
}
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{/-last}}
|
|
||||||
{{/oneOfArrays}}
|
|
||||||
{{#oneOfPrimitives}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items}}
|
|
||||||
{{#isDateType}}
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
if (json.every(item => !(isNaN(new Date(json).getTime()))) {
|
|
||||||
return json.map(value => new Date(json);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
if (json.every(item => !(isNaN(new Date(json).getTime()))) {
|
|
||||||
return json.map(value => new Date(json);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{#isNumeric}}
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
if (json.every(item => typeof item === 'number'{{#isEnum}} && ({{#allowableValues}}{{#values}}item === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}})) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isNumeric}}
|
|
||||||
{{#isBoolean}}
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
if (json.every(item => typeof item === 'boolean'{{#isEnum}} && ({{#allowableValues}}{{#values}}item === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}})) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isBoolean}}
|
|
||||||
{{#isString}}
|
|
||||||
if (Array.isArray(json)) {
|
|
||||||
if (json.every(item => typeof item === 'string'{{#isEnum}} && ({{#allowableValues}}{{#values}}item === '{{.}}'{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}})) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isString}}
|
|
||||||
{{/items}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{#isDateType}}
|
|
||||||
if (!(isNaN(new Date(json).getTime()))) {
|
|
||||||
return {{^required}}json == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json == null ? null : {{/isNullable}}{{/required}}new Date(json));
|
|
||||||
}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{^isDateType}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
if (!(isNaN(new Date(json).getTime()))) {
|
|
||||||
return {{^required}}json == null ? undefined : {{/required}}({{#required}}{{#isNullable}}json == null ? null : {{/isNullable}}{{/required}}new Date(json));
|
|
||||||
}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{#isNumeric}}
|
|
||||||
if (typeof json === 'number'{{#isEnum}} && ({{#allowableValues}}{{#values}}json === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}}) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{/isNumeric}}
|
|
||||||
{{#isBoolean}}
|
|
||||||
if (typeof json === 'boolean'{{#isEnum}} && ({{#allowableValues}}{{#values}}json === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}}) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{/isBoolean}}
|
|
||||||
{{#isString}}
|
|
||||||
if (typeof json === 'string'{{#isEnum}} && ({{#allowableValues}}{{#values}}json === '{{.}}'{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}}) {
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
{{/isString}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/oneOfPrimitives}}
|
|
||||||
return {} as any;
|
|
||||||
{{/discriminator}}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}ToJSON(json: any): any {
|
|
||||||
return {{classname}}ToJSONTyped(json, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function {{classname}}ToJSONTyped(value?: {{classname}} | null, ignoreDiscriminator: boolean = false): any {
|
|
||||||
if (value == null) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{#discriminator}}
|
|
||||||
switch (value['{{discriminator.propertyName}}']) {
|
|
||||||
{{#discriminator.mappedModels}}
|
|
||||||
case '{{mappingName}}':
|
|
||||||
return Object.assign({}, {{modelName}}ToJSON(value), { {{discriminator.propertyName}}: '{{mappingName}}' } as const);
|
|
||||||
{{/discriminator.mappedModels}}
|
|
||||||
default:
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{/discriminator}}
|
|
||||||
{{^discriminator}}
|
|
||||||
{{#oneOfModels}}
|
|
||||||
{{#-first}}
|
|
||||||
if (typeof value !== 'object') {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{/-first}}
|
|
||||||
if (instanceOf{{{.}}}(value)) {
|
|
||||||
return {{{.}}}ToJSON(value as {{{.}}});
|
|
||||||
}
|
|
||||||
{{/oneOfModels}}
|
|
||||||
{{#oneOfArrays}}
|
|
||||||
{{#-first}}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
if (value.every(item => typeof item === 'object')) {
|
|
||||||
{{/-first}}
|
|
||||||
if (value.every(item => instanceOf{{{.}}}(item))) {
|
|
||||||
return value.map(value => {{{.}}}ToJSON(value as {{{.}}}));
|
|
||||||
}
|
|
||||||
{{#-last}}
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{/-last}}
|
|
||||||
{{/oneOfArrays}}
|
|
||||||
{{#oneOfPrimitives}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items}}
|
|
||||||
{{#isDateType}}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
if (value.every(item => item instanceof Date) {
|
|
||||||
return value.map(value => value.toISOString().substring(0,10)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
if (value.every(item => item instanceof Date) {
|
|
||||||
return value.map(value => value.toISOString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{#isNumeric}}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
if (value.every(item => typeof item === 'number'{{#isEnum}} && ({{#allowableValues}}{{#values}}item === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}})) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isNumeric}}
|
|
||||||
{{#isBoolean}}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
if (value.every(item => typeof item === 'boolean'{{#isEnum}} && ({{#allowableValues}}{{#values}}item === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}})) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isBoolean}}
|
|
||||||
{{#isString}}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
if (value.every(item => typeof item === 'string'{{#isEnum}} && ({{#allowableValues}}{{#values}}item === '{{.}}'{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}})) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{{/isString}}
|
|
||||||
{{/items}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{#isDateType}}
|
|
||||||
if (value instanceof Date) {
|
|
||||||
return ((value{{#isNullable}} as any{{/isNullable}}){{^required}}{{#isNullable}}?{{/isNullable}}{{/required}}.toISOString().substring(0,10));
|
|
||||||
}
|
|
||||||
{{/isDateType}}
|
|
||||||
{{#isDateTimeType}}
|
|
||||||
if (value instanceof Date) {
|
|
||||||
return {{^required}}{{#isNullable}}value === null ? null : {{/isNullable}}{{^isNullable}}value == null ? undefined : {{/isNullable}}{{/required}}((value{{#isNullable}} as any{{/isNullable}}){{^required}}{{#isNullable}}?{{/isNullable}}{{/required}}.toISOString());
|
|
||||||
}
|
|
||||||
{{/isDateTimeType}}
|
|
||||||
{{#isNumeric}}
|
|
||||||
if (typeof value === 'number'{{#isEnum}} && ({{#allowableValues}}{{#values}}value === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}}) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{/isNumeric}}
|
|
||||||
{{#isBoolean}}
|
|
||||||
if (typeof value === 'boolean'{{#isEnum}} && ({{#allowableValues}}{{#values}}value === {{.}}{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}}) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{/isBoolean}}
|
|
||||||
{{#isString}}
|
|
||||||
if (typeof value === 'string'{{#isEnum}} && ({{#allowableValues}}{{#values}}value === '{{.}}'{{^-last}} || {{/-last}}{{/values}}{{/allowableValues}}){{/isEnum}}) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
{{/isString}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/oneOfPrimitives}}
|
|
||||||
return {};
|
|
||||||
{{/discriminator}}
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
/**
|
|
||||||
* @type {{classname}}
|
|
||||||
* {{#lambda.indented_star_1}}{{{unescapedDescription}}}{{/lambda.indented_star_1}}
|
|
||||||
* @export
|
|
||||||
*/
|
|
||||||
export type {{classname}} = {{#discriminator}}{{#mappedModels}}{ {{discriminator.propertyName}}: '{{mappingName}}' } & {{modelName}}{{^-last}} | {{/-last}}{{/mappedModels}}{{/discriminator}}{{^discriminator}}{{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}}{{/discriminator}};
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
{{#models}}{{#model}}
|
|
||||||
# {{classname}}
|
|
||||||
|
|
||||||
{{#description}}{{&description}}
|
|
||||||
{{/description}}
|
|
||||||
|
|
||||||
## Properties
|
|
||||||
|
|
||||||
Name | Type
|
|
||||||
------------ | -------------
|
|
||||||
{{#vars}}`{{name}}` | {{#isPrimitiveType}}{{dataType}}{{/isPrimitiveType}}{{^isPrimitiveType}}[{{dataType}}]({{complexType}}.md){{/isPrimitiveType}}
|
|
||||||
{{/vars}}
|
|
||||||
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
## Example
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import type { {{classname}} } from '{{npmName}}'
|
|
||||||
|
|
||||||
// TODO: Update the object below with actual values
|
|
||||||
const example = {
|
|
||||||
{{#vars}}
|
|
||||||
"{{name}}": {{{example}}},
|
|
||||||
{{/vars}}
|
|
||||||
} satisfies {{classname}}
|
|
||||||
|
|
||||||
console.log(example)
|
|
||||||
|
|
||||||
// Convert the instance to a JSON string
|
|
||||||
const exampleJSON: string = JSON.stringify(example)
|
|
||||||
console.log(exampleJSON)
|
|
||||||
|
|
||||||
// Parse the JSON string back to an object
|
|
||||||
const exampleParsed = JSON.parse(exampleJSON) as {{classname}}
|
|
||||||
console.log(exampleParsed)
|
|
||||||
```
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
|
|
||||||
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
||||||
|
|
||||||
{{/model}}{{/models}}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{#models}}
|
|
||||||
{{#model}}
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
export * from './{{{ classFilename }}}{{importFileExtension}}';
|
|
||||||
{{#useSagaAndRecords}}
|
|
||||||
{{^isEnum}}
|
|
||||||
export * from './{{{ classFilename }}}Record{{importFileExtension}}';
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/useSagaAndRecords}}
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{#withoutRuntimeChecks}}
|
|
||||||
{{#isEnum}}
|
|
||||||
{{>modelEnumInterfaces}}
|
|
||||||
|
|
||||||
{{/isEnum}}
|
|
||||||
{{^isEnum}}
|
|
||||||
{{#oneOf}}
|
|
||||||
{{#-first}}
|
|
||||||
{{>modelOneOfInterfaces}}
|
|
||||||
|
|
||||||
{{/-first}}
|
|
||||||
{{/oneOf}}
|
|
||||||
{{^oneOf}}
|
|
||||||
{{>modelGenericInterfaces}}
|
|
||||||
|
|
||||||
{{/oneOf}}
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
{{/model}}
|
|
||||||
{{/models}}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{>licenseInfo}}
|
|
||||||
|
|
||||||
{{#models}}
|
|
||||||
{{#model}}
|
|
||||||
{{#isEnum}}
|
|
||||||
{{>modelEnum}}
|
|
||||||
|
|
||||||
{{/isEnum}}
|
|
||||||
{{^isEnum}}
|
|
||||||
{{#oneOf}}
|
|
||||||
{{#-first}}
|
|
||||||
{{>modelOneOf}}
|
|
||||||
|
|
||||||
{{/-first}}
|
|
||||||
{{/oneOf}}
|
|
||||||
{{^oneOf}}
|
|
||||||
{{>modelGeneric}}
|
|
||||||
|
|
||||||
{{/oneOf}}
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/model}}
|
|
||||||
{{/models}}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
README.md
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
"name": "{{npmName}}",
|
|
||||||
"version": "{{npmVersion}}",
|
|
||||||
"description": "OpenAPI client for {{npmName}}",
|
|
||||||
"author": "OpenAPI-Generator",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://{{gitHost}}/{{gitUserId}}/{{gitRepoId}}.git"
|
|
||||||
},
|
|
||||||
{{#licenseName}}
|
|
||||||
"license": "{{licenseName}}",
|
|
||||||
{{/licenseName}}
|
|
||||||
{{#packageAsSourceOnlyLibrary}}
|
|
||||||
"main": "./index.ts",
|
|
||||||
{{/packageAsSourceOnlyLibrary}}
|
|
||||||
{{^packageAsSourceOnlyLibrary}}
|
|
||||||
"main": "./dist/index.js",
|
|
||||||
"types": "./dist/index.d.ts",
|
|
||||||
{{#supportsES6}}
|
|
||||||
"module": "./dist/esm/index.js",
|
|
||||||
"sideEffects": false,
|
|
||||||
{{/supportsES6}}
|
|
||||||
"scripts": {
|
|
||||||
"build": "tsc{{#supportsES6}} && tsc -p tsconfig.esm.json{{/supportsES6}}"{{^sagasAndRecords}},
|
|
||||||
"prepare": "npm run build"{{/sagasAndRecords}}
|
|
||||||
},
|
|
||||||
{{/packageAsSourceOnlyLibrary}}
|
|
||||||
"devDependencies": {
|
|
||||||
{{#sagasAndRecords}}
|
|
||||||
"immutable": "^4.0.0-rc.12",
|
|
||||||
"normalizr": "^3.6.1",
|
|
||||||
"redux-saga": "^1.1.3",
|
|
||||||
"redux-ts-simple": "^3.2.0",
|
|
||||||
"reselect": "^4.0.0",
|
|
||||||
{{/sagasAndRecords}}
|
|
||||||
"typescript": "^4.0 || ^5.0"
|
|
||||||
}{{#npmRepository}},{{/npmRepository}}
|
|
||||||
{{#npmRepository}}
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "{{npmRepository}}"
|
|
||||||
}
|
|
||||||
{{/npmRepository}}
|
|
||||||
}
|
|
||||||
|
|
@ -1,295 +0,0 @@
|
||||||
import {ApiRecordUtils, knownRecordFactories{{#returnPassthrough}}, appFromJS, NormalizedRecordEntities{{/returnPassthrough}}} from "../runtimeSagasAndRecords{{importFileExtension}}";
|
|
||||||
import {getApiEntitiesState} from "../ApiEntitiesSelectors{{importFileExtension}}"
|
|
||||||
import {List, Record, RecordOf, Map} from 'immutable';
|
|
||||||
import {Schema, schema, NormalizedSchema} from "normalizr";
|
|
||||||
import {select, call} from "redux-saga/effects";
|
|
||||||
|
|
||||||
import {
|
|
||||||
{{classname}},
|
|
||||||
{{#vars}}
|
|
||||||
{{#isEnum}}
|
|
||||||
{{classname}}{{enumName}},
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/vars}}
|
|
||||||
} from './{{classname}}{{importFileExtension}}';
|
|
||||||
|
|
||||||
{{#imports}}
|
|
||||||
import {
|
|
||||||
{{{.}}},
|
|
||||||
} from './{{{.}}}{{importFileExtension}}';
|
|
||||||
{{/imports}}
|
|
||||||
|
|
||||||
{{#modelImports}}
|
|
||||||
import {
|
|
||||||
{{{.}}}Record,
|
|
||||||
{{#lambda.camelcase}}{{.}}{{/lambda.camelcase}}RecordUtils
|
|
||||||
} from './{{{.}}}Record{{importFileExtension}}';
|
|
||||||
{{/modelImports}}
|
|
||||||
|
|
||||||
export const {{classname}}RecordProps = {
|
|
||||||
recType: "{{classname}}ApiRecord" as "{{classname}}ApiRecord",
|
|
||||||
{{#vars}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isModel}}
|
|
||||||
{{#keepAsJSObject}}
|
|
||||||
{{name}}: {{#required}}new {{{dataType}}}(){{/required}}{{^required}}null as {{{dataType}}} | null{{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: ({{{items.dataType}}}Record(), {{#required}}{{{defaultValue}}}{{/required}}{{^required}}null as {{{dataTypeAlternate}}} | null{{/required}}),
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{^items.isModel}}
|
|
||||||
{{name}}: {{#required}}{{{defaultValue}}}{{/required}}{{^required}}null as {{{dataTypeAlternate}}} | null{{/required}},
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{#isModel}}
|
|
||||||
{{#keepAsJSObject}}
|
|
||||||
{{name}}: {{#required}}{} as any as {{{dataType}}}{{/required}}{{^required}}null as {{{dataType}}} | null{{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: {{#required}}{{{defaultValue}}}{{/required}}{{^required}}({{{defaultValue}}}, null as {{{dataTypeAlternate}}} | null){{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/isModel}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^isModel}}
|
|
||||||
{{name}}: {{#required}}{{{defaultValue}}}{{/required}}{{^required}}null as {{{dataTypeAlternate}}} | null{{/required}},
|
|
||||||
{{/isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/vars}}
|
|
||||||
};
|
|
||||||
|
|
||||||
export type {{classname}}RecordPropsType = typeof {{classname}}RecordProps;
|
|
||||||
export const {{classname}}Record = Record({{classname}}RecordProps, {{classname}}RecordProps.recType);
|
|
||||||
export type {{classname}}Record = RecordOf<{{classname}}RecordPropsType>;
|
|
||||||
|
|
||||||
knownRecordFactories.set({{classname}}RecordProps.recType, {{classname}}Record);
|
|
||||||
|
|
||||||
{{#isEntity}}
|
|
||||||
export const {{classname}}RecordEntityProps = {
|
|
||||||
...{{classname}}RecordProps,
|
|
||||||
recType: "{{classname}}ApiRecordEntity" as "{{classname}}ApiRecordEntity",
|
|
||||||
{{#vars}}
|
|
||||||
{{#isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: {{#required}}"-1"{{/required}}{{^required}}null as string | null{{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/isEntity}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: {{#required}}List<string>(){{/required}}{{^required}}null as List<string> | null{{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/items.isEntity}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/vars}}
|
|
||||||
};
|
|
||||||
|
|
||||||
export type {{classname}}RecordEntityPropsType = typeof {{classname}}RecordEntityProps;
|
|
||||||
export const {{classname}}RecordEntity = Record({{classname}}RecordEntityProps, {{classname}}RecordEntityProps.recType);
|
|
||||||
export type {{classname}}RecordEntity = RecordOf<{{classname}}RecordEntityPropsType>;
|
|
||||||
|
|
||||||
knownRecordFactories.set({{classname}}RecordEntityProps.recType, {{classname}}RecordEntity);
|
|
||||||
{{/isEntity}}
|
|
||||||
|
|
||||||
class {{classname}}RecordUtils extends ApiRecordUtils<{{classname}}, {{classname}}Record> {
|
|
||||||
public normalize(apiObject: {{classname}}, asEntity?: boolean): {{classname}} {
|
|
||||||
(apiObject as any).recType = {{#isEntity}}asEntity ? {{classname}}RecordEntityProps.recType : {{/isEntity}}{{classname}}RecordProps.recType;
|
|
||||||
{{#vars}}
|
|
||||||
{{#isUniqueId}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isArray}}
|
|
||||||
{{^required}}if (apiObject['{{name}}']) { {{/required}}(apiObject as any)['{{name}}'] = apiObject['{{name}}'].map(item => item.map(item2 => item2?.toString()));{{^required}} } {{/required}}
|
|
||||||
{{/items.isArray}}
|
|
||||||
{{^items.isArray}}
|
|
||||||
{{^required}}if (apiObject['{{name}}']) { {{/required}}(apiObject as any)['{{name}}'] = apiObject['{{name}}'].map(item => item?.toString());{{^required}} } {{/required}}
|
|
||||||
{{/items.isArray}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^required}}if (apiObject['{{name}}']) { {{/required}}(apiObject as any)['{{name}}'] = apiObject['{{name}}'].toString();{{^required}} } {{/required}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isUniqueId}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{#isModel}}
|
|
||||||
{{^required}}if (apiObject['{{name}}']) { {{/required}}{{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.normalize(apiObject['{{name}}']);{{^required}} } {{/required}}
|
|
||||||
{{/isModel}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isModel}}
|
|
||||||
{{^required}}if (apiObject['{{name}}']) { {{/required}}{{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.normalizeArray(apiObject['{{name}}']);{{^required}} } {{/required}}
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/vars}}
|
|
||||||
return apiObject;
|
|
||||||
}
|
|
||||||
{{#isEntity}}
|
|
||||||
|
|
||||||
public getSchema(): Schema {
|
|
||||||
return new schema.Entity("{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}", {
|
|
||||||
{{#vars}}
|
|
||||||
{{#isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: {{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.getSchema(),
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/isEntity}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: [{{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.getSchema()],
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/items.isEntity}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/vars}}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public *toInlined(entityId?: string | null) {
|
|
||||||
if (!entityId) {return undefined; }
|
|
||||||
// @ts-ignore
|
|
||||||
const entity = yield select(apiEntity{{classname}}Selector, {id: entityId});
|
|
||||||
if (!entity) {return undefined; }
|
|
||||||
|
|
||||||
const {
|
|
||||||
recType,
|
|
||||||
{{#vars}}
|
|
||||||
{{#isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: {{name}}_original,
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/isEntity}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{name}}: {{name}}_original,
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/items.isEntity}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/vars}}
|
|
||||||
...unchangedProperties
|
|
||||||
} = entity;
|
|
||||||
|
|
||||||
const entityProperties = {
|
|
||||||
{{#vars}}
|
|
||||||
{{#isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
// @ts-ignore
|
|
||||||
{{name}}: {{^required}}entity['{{name}}'] ? {{/required}}yield call({{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.toInlined, entity['{{name}}']){{^required}} : null{{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/isEntity}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isEntity}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
// @ts-ignore
|
|
||||||
{{name}}: {{^required}}entity['{{name}}'] ? {{/required}}yield call({{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.toInlinedArray, entity['{{name}}']){{^required}} : null{{/required}},
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/items.isEntity}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/vars}}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {{classname}}Record({
|
|
||||||
...unchangedProperties,
|
|
||||||
...entityProperties
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public *toInlinedArray(entityIds: List<string> | null) {
|
|
||||||
if (!entityIds) {return null; }
|
|
||||||
let entities = List<{{classname}}Record>();
|
|
||||||
for (let entityIndex = 0; entityIndex < entityIds.count(); entityIndex++) {
|
|
||||||
// @ts-ignore
|
|
||||||
const entity = yield call(this.toInlined, entityIds.get(entityIndex));
|
|
||||||
if (entity) {
|
|
||||||
entities.push(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return entities;
|
|
||||||
}
|
|
||||||
{{/isEntity}}
|
|
||||||
|
|
||||||
public toApi(record: {{classname}}Record): {{classname}} {
|
|
||||||
const apiObject = super.toApi(record);
|
|
||||||
{{#vars}}
|
|
||||||
{{#isUniqueId}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isArray}}
|
|
||||||
{{^required}}if (record['{{name}}']) { {{/required}}apiObject['{{name}}'] = {{#isArray}}record['{{name}}'].map(item => item.toArray().map(item2 => (item2 ? parseFloat(item2) : null) as number)).toArray(){{/isArray}};{{^required}} } {{/required}}
|
|
||||||
{{/items.isArray}}
|
|
||||||
{{^items.isArray}}
|
|
||||||
{{^required}}if (record['{{name}}']) { {{/required}}apiObject['{{name}}'] = {{#isArray}}record['{{name}}'].map(item => (item ? parseFloat(item) : null) as number).toArray(){{/isArray}};{{^required}} } {{/required}}
|
|
||||||
{{/items.isArray}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^required}}if (record['{{name}}']) { {{/required}}apiObject['{{name}}'] = {{^isArray}}parseFloat(record['{{name}}']){{/isArray}};{{^required}} } {{/required}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isUniqueId}}
|
|
||||||
{{^keepAsJSObject}}
|
|
||||||
{{#isModel}}
|
|
||||||
{{^required}}if (record['{{name}}']) { {{/required}}apiObject['{{name}}'] = {{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.toApi(record['{{name}}']);{{^required}} } {{/required}}
|
|
||||||
{{/isModel}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isModel}}
|
|
||||||
{{^required}}if (record['{{name}}']) { {{/required}}apiObject['{{name}}'] = {{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.toApiArray(record['{{name}}']);{{^required}} } {{/required}}
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/keepAsJSObject}}
|
|
||||||
{{/vars}}
|
|
||||||
return apiObject;
|
|
||||||
}
|
|
||||||
{{#returnPassthrough}}
|
|
||||||
{{#vars.1}}
|
|
||||||
|
|
||||||
public fromApiPassthrough(apiObject: {{classname}}): {{{dataTypeAlternate}}} {
|
|
||||||
{{#isModel}}
|
|
||||||
if (!apiObject.{{{returnPassthrough}}}) {return {{{defaultValue}}}; }
|
|
||||||
const normalizedApiObject = {{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.normalize(apiObject.{{{returnPassthrough}}});
|
|
||||||
return appFromJS(normalizedApiObject);
|
|
||||||
{{/isModel}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isModel}}
|
|
||||||
if (!apiObject.{{{returnPassthrough}}}) {return {{{defaultValue}}}; }
|
|
||||||
const normalizedApiObject = {{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.normalizeArray(apiObject.{{{returnPassthrough}}});
|
|
||||||
return appFromJS(normalizedApiObject);
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{^items.isModel}}
|
|
||||||
return appFromJS(apiObject.{{{returnPassthrough}}});
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isModel}}
|
|
||||||
{{^isArray}}
|
|
||||||
return apiObject.{{{returnPassthrough}}}!;
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isModel}}
|
|
||||||
}
|
|
||||||
|
|
||||||
public fromApiPassthroughAsEntities(apiObject: {{classname}}): NormalizedRecordEntities {
|
|
||||||
{{#isEntity}}
|
|
||||||
if (!apiObject.{{{returnPassthrough}}}) {return {entities: {}, result: List<string>()}; }
|
|
||||||
return ApiRecordUtils.toNormalizedRecordEntities({{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.normalizeArrayAsEntities([apiObject.{{{returnPassthrough}}}]), true);
|
|
||||||
{{/isEntity}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isEntity}}
|
|
||||||
if (!apiObject.{{{returnPassthrough}}}) {return {entities: {}, result: List<string>()}; }
|
|
||||||
return ApiRecordUtils.toNormalizedRecordEntities({{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.normalizeArrayAsEntities(apiObject.{{{returnPassthrough}}}), true);
|
|
||||||
{{/items.isEntity}}
|
|
||||||
{{^items.isEntity}}
|
|
||||||
console.log("entities revival not supported on this response");
|
|
||||||
return {entities: {}, result: List<string>()};
|
|
||||||
{{/items.isEntity}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isEntity}}
|
|
||||||
{{^isArray}}
|
|
||||||
console.log("entities revival not supported on this response");
|
|
||||||
return {entities: {}, result: List<string>()};
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isEntity}}
|
|
||||||
}
|
|
||||||
{{/vars.1}}
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}RecordUtils = new {{classname}}RecordUtils();
|
|
||||||
|
|
||||||
{{#isEntity}}
|
|
||||||
export const apiEntities{{classname}}Selector = (state: any) => getApiEntitiesState(state).{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}} as Map<string, {{classname}}RecordEntity>;
|
|
||||||
export const apiEntity{{classname}}Selector = (state: any, {id}: {id?: string | null}) => id ? apiEntities{{classname}}Selector(state).get(id) : undefined;
|
|
||||||
{{/isEntity}}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
{{#models}}
|
|
||||||
{{#model}}
|
|
||||||
{{#isEnum}}
|
|
||||||
// This file is not needed and was generated only because of how codegen is built... Enums do not need to be converted to Records and can be used directly.
|
|
||||||
{{/isEnum}}
|
|
||||||
{{^isEnum}}
|
|
||||||
{{^oneOf}}
|
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{>licenseInfo}}
|
|
||||||
|
|
||||||
{{>recordGeneric}}
|
|
||||||
|
|
||||||
{{/oneOf}}
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/model}}
|
|
||||||
{{/models}}
|
|
||||||
|
|
@ -1,426 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{>licenseInfo}}
|
|
||||||
|
|
||||||
|
|
||||||
export const BASE_PATH = "{{{basePath}}}".replace(/\/+$/, "");
|
|
||||||
|
|
||||||
export interface ConfigurationParameters {
|
|
||||||
basePath?: string; // override base path
|
|
||||||
fetchApi?: FetchAPI; // override for fetch implementation
|
|
||||||
middleware?: Middleware[]; // middleware to apply before/after fetch requests
|
|
||||||
queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings
|
|
||||||
username?: string; // parameter for basic security
|
|
||||||
password?: string; // parameter for basic security
|
|
||||||
apiKey?: string | Promise<string> | ((name: string) => string | Promise<string>); // parameter for apiKey security
|
|
||||||
accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string | Promise<string>); // parameter for oauth2 security
|
|
||||||
headers?: HTTPHeaders; //header params we want to use on every request
|
|
||||||
credentials?: RequestCredentials; //value for the credentials param we want to use on each request
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Configuration {
|
|
||||||
constructor(private configuration: ConfigurationParameters = {}) {}
|
|
||||||
|
|
||||||
set config(configuration: Configuration) {
|
|
||||||
this.configuration = configuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
get basePath(): string {
|
|
||||||
return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;
|
|
||||||
}
|
|
||||||
|
|
||||||
get fetchApi(): FetchAPI | undefined {
|
|
||||||
return this.configuration.fetchApi;
|
|
||||||
}
|
|
||||||
|
|
||||||
get middleware(): Middleware[] {
|
|
||||||
return this.configuration.middleware || [];
|
|
||||||
}
|
|
||||||
|
|
||||||
get queryParamsStringify(): (params: HTTPQuery) => string {
|
|
||||||
return this.configuration.queryParamsStringify || querystring;
|
|
||||||
}
|
|
||||||
|
|
||||||
get username(): string | undefined {
|
|
||||||
return this.configuration.username;
|
|
||||||
}
|
|
||||||
|
|
||||||
get password(): string | undefined {
|
|
||||||
return this.configuration.password;
|
|
||||||
}
|
|
||||||
|
|
||||||
get apiKey(): ((name: string) => string | Promise<string>) | undefined {
|
|
||||||
const apiKey = this.configuration.apiKey;
|
|
||||||
if (apiKey) {
|
|
||||||
return typeof apiKey === 'function' ? apiKey : () => apiKey;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
get accessToken(): ((name?: string, scopes?: string[]) => string | Promise<string>) | undefined {
|
|
||||||
const accessToken = this.configuration.accessToken;
|
|
||||||
if (accessToken) {
|
|
||||||
return typeof accessToken === 'function' ? accessToken : async () => accessToken;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
get headers(): HTTPHeaders | undefined {
|
|
||||||
return this.configuration.headers;
|
|
||||||
}
|
|
||||||
|
|
||||||
get credentials(): RequestCredentials | undefined {
|
|
||||||
return this.configuration.credentials;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const DefaultConfig = new Configuration();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the base class for all generated API classes.
|
|
||||||
*/
|
|
||||||
export class BaseAPI {
|
|
||||||
|
|
||||||
private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i');
|
|
||||||
private middleware: Middleware[];
|
|
||||||
|
|
||||||
constructor(protected configuration = DefaultConfig) {
|
|
||||||
this.middleware = configuration.middleware;
|
|
||||||
}
|
|
||||||
|
|
||||||
withMiddleware<T extends BaseAPI>(this: T, ...middlewares: Middleware[]) {
|
|
||||||
const next = this.clone<T>();
|
|
||||||
next.middleware = next.middleware.concat(...middlewares);
|
|
||||||
return next;
|
|
||||||
}
|
|
||||||
|
|
||||||
withPreMiddleware<T extends BaseAPI>(this: T, ...preMiddlewares: Array<Middleware['pre']>) {
|
|
||||||
const middlewares = preMiddlewares.map((pre) => ({ pre }));
|
|
||||||
return this.withMiddleware<T>(...middlewares);
|
|
||||||
}
|
|
||||||
|
|
||||||
withPostMiddleware<T extends BaseAPI>(this: T, ...postMiddlewares: Array<Middleware['post']>) {
|
|
||||||
const middlewares = postMiddlewares.map((post) => ({ post }));
|
|
||||||
return this.withMiddleware<T>(...middlewares);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the given MIME is a JSON MIME.
|
|
||||||
* JSON MIME examples:
|
|
||||||
* application/json
|
|
||||||
* application/json; charset=UTF8
|
|
||||||
* APPLICATION/JSON
|
|
||||||
* application/vnd.company+json
|
|
||||||
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
|
||||||
* @return True if the given MIME is JSON, false otherwise.
|
|
||||||
*/
|
|
||||||
protected isJsonMime(mime: string | null | undefined): boolean {
|
|
||||||
if (!mime) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return BaseAPI.jsonRegex.test(mime);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async request(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction): Promise<Response> {
|
|
||||||
const { url, init } = await this.createFetchParams(context, initOverrides);
|
|
||||||
const response = await this.fetchApi(url, init);
|
|
||||||
// CHANGED: Removed status code check to allow handling of all HTTP status codes (not just 200-299)
|
|
||||||
// Previously, this method would throw ResponseError for any status code outside 200-299.
|
|
||||||
// Now, all responses are returned regardless of status code, allowing the API methods
|
|
||||||
// to handle and return typed responses for all status codes defined in the OpenAPI spec.
|
|
||||||
// This enables typed access to error responses (4xx, 5xx) and other status codes.
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async createFetchParams(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) {
|
|
||||||
let url = this.configuration.basePath + context.path;
|
|
||||||
if (context.query !== undefined && Object.keys(context.query).length !== 0) {
|
|
||||||
// only add the querystring to the URL if there are query parameters.
|
|
||||||
// this is done to avoid urls ending with a "?" character which buggy webservers
|
|
||||||
// do not handle correctly sometimes.
|
|
||||||
url += '?' + this.configuration.queryParamsStringify(context.query);
|
|
||||||
}
|
|
||||||
|
|
||||||
const headers = Object.assign({}, this.configuration.headers, context.headers);
|
|
||||||
Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {});
|
|
||||||
|
|
||||||
const initOverrideFn =
|
|
||||||
typeof initOverrides === "function"
|
|
||||||
? initOverrides
|
|
||||||
: async () => initOverrides;
|
|
||||||
|
|
||||||
const initParams = {
|
|
||||||
method: context.method,
|
|
||||||
headers,
|
|
||||||
body: context.body,
|
|
||||||
credentials: this.configuration.credentials,
|
|
||||||
};
|
|
||||||
|
|
||||||
const overriddenInit: RequestInit = {
|
|
||||||
...initParams,
|
|
||||||
...(await initOverrideFn({
|
|
||||||
init: initParams,
|
|
||||||
context,
|
|
||||||
}))
|
|
||||||
};
|
|
||||||
|
|
||||||
let body: any;
|
|
||||||
if (isFormData(overriddenInit.body)
|
|
||||||
|| (overriddenInit.body instanceof URLSearchParams)
|
|
||||||
|| isBlob(overriddenInit.body)) {
|
|
||||||
body = overriddenInit.body;
|
|
||||||
} else if (this.isJsonMime(headers['Content-Type'])) {
|
|
||||||
body = JSON.stringify(overriddenInit.body);
|
|
||||||
} else {
|
|
||||||
body = overriddenInit.body;
|
|
||||||
}
|
|
||||||
|
|
||||||
const init: RequestInit = {
|
|
||||||
...overriddenInit,
|
|
||||||
body
|
|
||||||
};
|
|
||||||
|
|
||||||
return { url, init };
|
|
||||||
}
|
|
||||||
|
|
||||||
private fetchApi = async (url: string, init: RequestInit) => {
|
|
||||||
let fetchParams = { url, init };
|
|
||||||
for (const middleware of this.middleware) {
|
|
||||||
if (middleware.pre) {
|
|
||||||
fetchParams = await middleware.pre({
|
|
||||||
fetch: this.fetchApi,
|
|
||||||
...fetchParams,
|
|
||||||
}) || fetchParams;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let response: Response | undefined = undefined;
|
|
||||||
try {
|
|
||||||
response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);
|
|
||||||
} catch (e) {
|
|
||||||
for (const middleware of this.middleware) {
|
|
||||||
if (middleware.onError) {
|
|
||||||
response = await middleware.onError({
|
|
||||||
fetch: this.fetchApi,
|
|
||||||
url: fetchParams.url,
|
|
||||||
init: fetchParams.init,
|
|
||||||
error: e,
|
|
||||||
response: response ? response.clone() : undefined,
|
|
||||||
}) || response;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (response === undefined) {
|
|
||||||
if (e instanceof Error) {
|
|
||||||
throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response');
|
|
||||||
} else {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (const middleware of this.middleware) {
|
|
||||||
if (middleware.post) {
|
|
||||||
response = await middleware.post({
|
|
||||||
fetch: this.fetchApi,
|
|
||||||
url: fetchParams.url,
|
|
||||||
init: fetchParams.init,
|
|
||||||
response: response.clone(),
|
|
||||||
}) || response;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a shallow clone of `this` by constructing a new instance
|
|
||||||
* and then shallow cloning data members.
|
|
||||||
*/
|
|
||||||
private clone<T extends BaseAPI>(this: T): T {
|
|
||||||
const constructor = this.constructor as any;
|
|
||||||
const next = new constructor(this.configuration);
|
|
||||||
next.middleware = this.middleware.slice();
|
|
||||||
return next;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function isBlob(value: any): value is Blob {
|
|
||||||
return typeof Blob !== 'undefined' && value instanceof Blob;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isFormData(value: any): value is FormData {
|
|
||||||
return typeof FormData !== "undefined" && value instanceof FormData;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class ResponseError extends Error {
|
|
||||||
override name: "ResponseError" = "ResponseError";
|
|
||||||
constructor(public response: Response, msg?: string) {
|
|
||||||
super(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class FetchError extends Error {
|
|
||||||
override name: "FetchError" = "FetchError";
|
|
||||||
constructor(public cause: Error, msg?: string) {
|
|
||||||
super(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class RequiredError extends Error {
|
|
||||||
override name: "RequiredError" = "RequiredError";
|
|
||||||
constructor(public field: string, msg?: string) {
|
|
||||||
super(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const COLLECTION_FORMATS = {
|
|
||||||
csv: ",",
|
|
||||||
ssv: " ",
|
|
||||||
tsv: "\t",
|
|
||||||
pipes: "|",
|
|
||||||
};
|
|
||||||
|
|
||||||
export type FetchAPI = WindowOrWorkerGlobalScope['fetch'];
|
|
||||||
|
|
||||||
export type Json = any;
|
|
||||||
export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
|
|
||||||
export type HTTPHeaders = { [key: string]: string };
|
|
||||||
export type HTTPQuery = { [key: string]: string | number | null | boolean | Array<string | number | null | boolean> | Set<string | number | null | boolean> | HTTPQuery };
|
|
||||||
export type HTTPBody = Json | FormData | URLSearchParams;
|
|
||||||
export type HTTPRequestInit = { headers?: HTTPHeaders; method: HTTPMethod; credentials?: RequestCredentials; body?: HTTPBody };
|
|
||||||
export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original';
|
|
||||||
|
|
||||||
export type InitOverrideFunction = (requestContext: { init: HTTPRequestInit, context: RequestOpts }) => Promise<RequestInit>
|
|
||||||
|
|
||||||
export interface FetchParams {
|
|
||||||
url: string;
|
|
||||||
init: RequestInit;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface RequestOpts {
|
|
||||||
path: string;
|
|
||||||
method: HTTPMethod;
|
|
||||||
headers: HTTPHeaders;
|
|
||||||
query?: HTTPQuery;
|
|
||||||
body?: HTTPBody;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function querystring(params: HTTPQuery, prefix: string = ''): string {
|
|
||||||
return Object.keys(params)
|
|
||||||
.map(key => querystringSingleKey(key, params[key], prefix))
|
|
||||||
.filter(part => part.length > 0)
|
|
||||||
.join('&');
|
|
||||||
}
|
|
||||||
|
|
||||||
function querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array<string | number | null | boolean> | Set<string | number | null | boolean> | HTTPQuery, keyPrefix: string = ''): string {
|
|
||||||
const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);
|
|
||||||
if (value instanceof Array) {
|
|
||||||
const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))
|
|
||||||
.join(`&${encodeURIComponent(fullKey)}=`);
|
|
||||||
return `${encodeURIComponent(fullKey)}=${multiValue}`;
|
|
||||||
}
|
|
||||||
if (value instanceof Set) {
|
|
||||||
const valueAsArray = Array.from(value);
|
|
||||||
return querystringSingleKey(key, valueAsArray, keyPrefix);
|
|
||||||
}
|
|
||||||
if (value instanceof Date) {
|
|
||||||
return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;
|
|
||||||
}
|
|
||||||
if (value instanceof Object) {
|
|
||||||
return querystring(value as HTTPQuery, fullKey);
|
|
||||||
}
|
|
||||||
return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function exists(json: any, key: string) {
|
|
||||||
const value = json[key];
|
|
||||||
return value !== null && value !== undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
{{^withoutRuntimeChecks}}
|
|
||||||
export function mapValues(data: any, fn: (item: any) => any) {
|
|
||||||
const result: { [key: string]: any } = {};
|
|
||||||
for (const key of Object.keys(data)) {
|
|
||||||
result[key] = fn(data[key]);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
{{/withoutRuntimeChecks}}
|
|
||||||
|
|
||||||
export function canConsumeForm(consumes: Consume[]): boolean {
|
|
||||||
for (const consume of consumes) {
|
|
||||||
if ('multipart/form-data' === consume.contentType) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Consume {
|
|
||||||
contentType: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface RequestContext {
|
|
||||||
fetch: FetchAPI;
|
|
||||||
url: string;
|
|
||||||
init: RequestInit;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ResponseContext {
|
|
||||||
fetch: FetchAPI;
|
|
||||||
url: string;
|
|
||||||
init: RequestInit;
|
|
||||||
response: Response;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ErrorContext {
|
|
||||||
fetch: FetchAPI;
|
|
||||||
url: string;
|
|
||||||
init: RequestInit;
|
|
||||||
error: unknown;
|
|
||||||
response?: Response;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Middleware {
|
|
||||||
pre?(context: RequestContext): Promise<FetchParams | void>;
|
|
||||||
post?(context: ResponseContext): Promise<Response | void>;
|
|
||||||
onError?(context: ErrorContext): Promise<Response | void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ApiResponse<T> {
|
|
||||||
raw: Response;
|
|
||||||
value(): Promise<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ResponseTransformer<T> {
|
|
||||||
(json: any): T;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class JSONApiResponse<T> {
|
|
||||||
constructor(public raw: Response, private transformer: ResponseTransformer<T> = (jsonValue: any) => jsonValue) {}
|
|
||||||
|
|
||||||
async value(): Promise<T> {
|
|
||||||
return this.transformer(await this.raw.json());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class VoidApiResponse {
|
|
||||||
constructor(public raw: Response) {}
|
|
||||||
|
|
||||||
async value(): Promise<void> {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class BlobApiResponse {
|
|
||||||
constructor(public raw: Response) {}
|
|
||||||
|
|
||||||
async value(): Promise<Blob> {
|
|
||||||
return await this.raw.blob();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export class TextApiResponse {
|
|
||||||
constructor(public raw: Response) {}
|
|
||||||
|
|
||||||
async value(): Promise<string> {
|
|
||||||
return await this.raw.text();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
|
|
||||||
import {fromJS as originalFromJS, isIndexed, List, Map as ImmMap, RecordOf} from 'immutable';
|
|
||||||
import {normalize, NormalizedSchema, schema, Schema} from "normalizr";
|
|
||||||
import {ActionDefinition, createAction} from "redux-ts-simple";
|
|
||||||
|
|
||||||
export const knownRecordFactories = new Map<string, any>();
|
|
||||||
export const knownIndexedSetByKey: (string | number)[] = [];
|
|
||||||
|
|
||||||
export function appFromJS(any: any): any {
|
|
||||||
return originalFromJS(any, (key, value) => {
|
|
||||||
if (isIndexed(value)) {
|
|
||||||
return knownIndexedSetByKey.indexOf(key) !== -1 ? value.toSet() : value.toList();
|
|
||||||
} // we're reviving an array -> it's a List
|
|
||||||
const MatchingType = knownRecordFactories.get(value.get('recType') as string) as { new(input?: any): any }; // check if we know a Record with this type
|
|
||||||
if (MatchingType) {
|
|
||||||
return new MatchingType(value);
|
|
||||||
}
|
|
||||||
return value.toMap(); // no matching Record type found -> it's a plain old Map
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export type NormalizedRecordEntity = NormalizedSchema<{ [key: string]: Map<string, RecordOf<any>> }, string>;
|
|
||||||
export type NormalizedRecordEntities = NormalizedSchema<{ [key: string]: Map<string, RecordOf<any>> }, List<string>>;
|
|
||||||
|
|
||||||
export abstract class ApiRecordUtils<TAPI, TREC extends RecordOf<any>> {
|
|
||||||
public abstract normalize(apiObject: TAPI, asEntity?: boolean): any;
|
|
||||||
|
|
||||||
public getSchema(): Schema {
|
|
||||||
console.log("Entity mode not supported on this record.");
|
|
||||||
return new schema.Entity("entityNotSupported");
|
|
||||||
}
|
|
||||||
|
|
||||||
public normalizeArray(apiObjectArray: TAPI[], asEntity?: boolean): TAPI[] {
|
|
||||||
apiObjectArray.forEach(apiObject => this.normalize(apiObject, asEntity));
|
|
||||||
return apiObjectArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
public normalizeAsEntities(apiObject: TAPI): NormalizedSchema<any, any> {
|
|
||||||
const normalized = this.normalize(apiObject, true);
|
|
||||||
return normalize(normalized, this.getSchema());
|
|
||||||
}
|
|
||||||
|
|
||||||
public normalizeArrayAsEntities(apiObject: TAPI[]): NormalizedSchema<any, any> {
|
|
||||||
const normalized = this.normalizeArray(apiObject, true);
|
|
||||||
return normalize(normalized, new schema.Array(this.getSchema()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public fromApi(apiObject: TAPI): TREC {
|
|
||||||
return appFromJS(this.normalize(apiObject));
|
|
||||||
}
|
|
||||||
|
|
||||||
public fromApiArray(apiObjectArray: TAPI[]): List<TREC> {
|
|
||||||
this.normalizeArray(apiObjectArray);
|
|
||||||
return appFromJS(apiObjectArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
public fromApiAsEntities(apiObject: TAPI): NormalizedRecordEntity {
|
|
||||||
return ApiRecordUtils.toNormalizedRecordEntities(this.normalizeAsEntities(apiObject), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public fromApiArrayAsEntities(apiObject: TAPI[]): NormalizedRecordEntities {
|
|
||||||
return ApiRecordUtils.toNormalizedRecordEntities(this.normalizeArrayAsEntities(apiObject), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public toApi(record: TREC): TAPI {
|
|
||||||
const apiObject = record.toJS();
|
|
||||||
delete apiObject.recType;
|
|
||||||
return apiObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public toApiArray(records: List<TREC>): TAPI[] {
|
|
||||||
return records.map(record => this.toApi(record)).toArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static toNormalizedRecordEntities(normalizedAsEntities: any, forArray: boolean) {
|
|
||||||
const entities = normalizedAsEntities.entities;
|
|
||||||
for (const entityKey of Object.keys(entities)) {
|
|
||||||
entities[entityKey] = appFromJS(entities[entityKey]);
|
|
||||||
}
|
|
||||||
normalizedAsEntities.result = appFromJS(normalizedAsEntities.result || (forArray ? "" : []));
|
|
||||||
return normalizedAsEntities;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const allApiActionFailures: SagaActionDefinition<any>[] = [];
|
|
||||||
|
|
||||||
export interface BaseEntitySupportPayloadApiAction {
|
|
||||||
toInlined?: boolean;
|
|
||||||
toEntities?: boolean;
|
|
||||||
markErrorsAsHandled?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface BasePayloadApiAction {
|
|
||||||
markErrorsAsHandled?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface SagaActionDefinition<TPayload> extends ActionDefinition<TPayload> {
|
|
||||||
toString: () => string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createSagaAction<TPayload>(type: string, options?: { doNotAutoRegisterFailure?: boolean, namespace?: string }): SagaActionDefinition<TPayload> {
|
|
||||||
const {doNotAutoRegisterFailure, namespace} = options || {} as any;
|
|
||||||
let actionDefinition = createAction<TPayload>(namespace ? `${namespace}-${type}` : type);
|
|
||||||
(actionDefinition as any).toString = () => actionDefinition.type;
|
|
||||||
if (type.endsWith("Failure") && !doNotAutoRegisterFailure) {
|
|
||||||
allApiActionFailures.push(actionDefinition);
|
|
||||||
}
|
|
||||||
return actionDefinition;
|
|
||||||
}
|
|
||||||
|
|
||||||
export let apiCall: <Ctx, Fn extends (this: Ctx, ...args: any[]) => any>(context: Ctx, fn: Fn, ...args: Parameters<Fn>) => Generator<any, any, any>;
|
|
||||||
|
|
||||||
export function setApiCall(apiCallFc: <Ctx, Fn extends (this: Ctx, ...args: any[]) => any>(context: Ctx, fn: Fn, ...args: Parameters<Fn>) => Generator<any, any, any>) {
|
|
||||||
console.log("init apiCall");
|
|
||||||
apiCall = apiCallFc;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const normalizedEntities = createSagaAction<NormalizedRecordEntities>("normalizedEntities");
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
import {
|
|
||||||
Configuration,
|
|
||||||
ConfigurationParameters,
|
|
||||||
} from "../index{{importFileExtension}}";
|
|
||||||
|
|
||||||
import {
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis}}
|
|
||||||
{{classFilename}},
|
|
||||||
{{/apis}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
} from "./index{{importFileExtension}}";
|
|
||||||
|
|
||||||
export class Api {
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis}}
|
|
||||||
public static {{#lambda.camelcase}}{{classFilename}}{{/lambda.camelcase}}: {{classFilename}};
|
|
||||||
{{/apis}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
|
|
||||||
public static init(apiBaseConfig: ConfigurationParameters) {
|
|
||||||
{{#apiInfo}}
|
|
||||||
{{#apis}}
|
|
||||||
Api.{{#lambda.camelcase}}{{classFilename}}{{/lambda.camelcase}} = new {{classFilename}}(new Configuration(apiBaseConfig));
|
|
||||||
{{/apis}}
|
|
||||||
{{/apiInfo}}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,245 +0,0 @@
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{>licenseInfo}}
|
|
||||||
|
|
||||||
|
|
||||||
import {Api} from './index{{importFileExtension}}';
|
|
||||||
import {List} from 'immutable';
|
|
||||||
import {all, fork, put, takeLatest} from "redux-saga/effects";
|
|
||||||
import {apiCall, createSagaAction as originalCreateSagaAction, BaseEntitySupportPayloadApiAction, BasePayloadApiAction, NormalizedRecordEntities, normalizedEntities} from "../runtimeSagasAndRecords{{importFileExtension}}";
|
|
||||||
import {Action} from "redux-ts-simple";
|
|
||||||
|
|
||||||
{{#imports.0}}
|
|
||||||
import {
|
|
||||||
{{#imports}}
|
|
||||||
{{className}},
|
|
||||||
{{className}}Record,
|
|
||||||
{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}RecordUtils,
|
|
||||||
{{/imports}}
|
|
||||||
{{#passthroughImports}}
|
|
||||||
{{.}},
|
|
||||||
{{/passthroughImports}}
|
|
||||||
} from '../models/index{{importFileExtension}}';
|
|
||||||
{{/imports.0}}
|
|
||||||
{{#hasEnums}}
|
|
||||||
{{#operations}}
|
|
||||||
{{#operation}}
|
|
||||||
{{#allParams}}
|
|
||||||
{{#isEnum}}
|
|
||||||
|
|
||||||
import {
|
|
||||||
{{operationIdCamelCase}}{{enumName}},
|
|
||||||
} from './{{classname}}{{importFileExtension}}';
|
|
||||||
{{/isEnum}}
|
|
||||||
{{/allParams}}
|
|
||||||
{{/operation}}
|
|
||||||
{{/operations}}
|
|
||||||
{{/hasEnums}}
|
|
||||||
|
|
||||||
const createSagaAction = <T>(type: string) => originalCreateSagaAction<T>(type, {namespace: "api_{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}"});
|
|
||||||
|
|
||||||
export const {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}SagaMap = new Map<string, () => Generator<any, any, any>>([
|
|
||||||
{{#operations}}
|
|
||||||
{{#operation}}
|
|
||||||
["{{nickname}}", {{nickname}}Saga],
|
|
||||||
{{/operation}}
|
|
||||||
{{/operations}}
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
export function *{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}AllSagas() {
|
|
||||||
yield all([...{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}SagaMap.values()].map(actionSaga => fork(actionSaga)));
|
|
||||||
}
|
|
||||||
|
|
||||||
{{#operations}}
|
|
||||||
{{#operation}}
|
|
||||||
//region {{nickname}}
|
|
||||||
|
|
||||||
{{#returnTypeSupportsEntities}}
|
|
||||||
export interface Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}} extends {{#allParams.0}}Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}Request, {{/allParams.0}}BaseEntitySupportPayloadApiAction {
|
|
||||||
}
|
|
||||||
{{/returnTypeSupportsEntities}}
|
|
||||||
{{^returnTypeSupportsEntities}}
|
|
||||||
export interface Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}} extends {{#allParams.0}}Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}Request, {{/allParams.0}}BasePayloadApiAction {
|
|
||||||
}
|
|
||||||
{{/returnTypeSupportsEntities}}
|
|
||||||
|
|
||||||
{{#allParams.0}}
|
|
||||||
export interface Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}Request {
|
|
||||||
{{#allParams}}
|
|
||||||
{{paramName}}{{^required}}?{{/required}}: {{{dataTypeAlternate}}};
|
|
||||||
{{/allParams}}
|
|
||||||
}
|
|
||||||
{{/allParams.0}}
|
|
||||||
|
|
||||||
export const {{nickname}}Request = createSagaAction<{{#allParams.0}}Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}Request{{/allParams.0}}{{^allParams.0}}void{{/allParams.0}}>("{{nickname}}Request");
|
|
||||||
{{#returnType}}
|
|
||||||
export const {{nickname}}Success = createSagaAction<{{#hasReturnPassthroughVoid}}void{{/hasReturnPassthroughVoid}}{{^hasReturnPassthroughVoid}}{{{returnTypeAlternate}}}{{/hasReturnPassthroughVoid}}>("{{nickname}}Success");
|
|
||||||
{{#returnTypeSupportsEntities}}
|
|
||||||
export const {{nickname}}Success_Entities = createSagaAction<NormalizedRecordEntities>("{{nickname}}Success_Entities");
|
|
||||||
{{/returnTypeSupportsEntities}}
|
|
||||||
{{/returnType}}
|
|
||||||
{{^returnType}}
|
|
||||||
export const {{nickname}}Success = createSagaAction<void>("{{nickname}}Success");
|
|
||||||
{{/returnType}}
|
|
||||||
export const {{nickname}}Failure = createSagaAction<{error: any, requestPayload: Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}}>("{{nickname}}Failure");
|
|
||||||
|
|
||||||
export const {{nickname}} = createSagaAction<Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}>("{{nickname}}");
|
|
||||||
|
|
||||||
export function *{{nickname}}Saga() {
|
|
||||||
yield takeLatest({{nickname}}, {{nickname}}SagaImp);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function *{{nickname}}SagaImp(_action_: Action<Payload{{#lambda.titlecase}}{{#lambda.camelcase}}{{nickname}}{{/lambda.camelcase}}{{/lambda.titlecase}}>){{^returnType}}: any{{/returnType}} {
|
|
||||||
const {markErrorsAsHandled, ..._payloadRest_} = _action_.payload;
|
|
||||||
try {
|
|
||||||
{{#returnTypeSupportsEntities}}
|
|
||||||
const {toEntities, toInlined = !toEntities, ...requestPayload} = _payloadRest_;
|
|
||||||
{{/returnTypeSupportsEntities}}
|
|
||||||
{{#allParams.0}}
|
|
||||||
const {
|
|
||||||
{{#allParams}}
|
|
||||||
{{paramName}},
|
|
||||||
{{/allParams}}
|
|
||||||
} = _payloadRest_;
|
|
||||||
{{/allParams.0}}
|
|
||||||
|
|
||||||
yield put({{nickname}}Request({{#allParams.0}}{{#returnTypeSupportsEntities}}requestPayload{{/returnTypeSupportsEntities}}{{^returnTypeSupportsEntities}}_action_.payload{{/returnTypeSupportsEntities}}{{/allParams.0}}));
|
|
||||||
|
|
||||||
const response{{#returnType}}: Required<{{{returnType}}}>{{/returnType}} = yield apiCall(Api.{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}, Api.{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}['{{nickname}}'],
|
|
||||||
{{#allParams.0}}
|
|
||||||
{{#allParams}}
|
|
||||||
{{#isUniqueId}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isArray}}
|
|
||||||
{{^required}}{{paramName}} ? {{/required}}{{paramName}}.map(p => p.toArray().map(p2 => (p2 ? parseFloat(p2) : null) as number)).toArray(){{^required}} : undefined{{/required}},
|
|
||||||
{{/items.isArray}}
|
|
||||||
{{^items.isArray}}
|
|
||||||
{{^required}}{{paramName}} ? {{/required}}{{paramName}}.map(p => (p ? parseFloat(p) : null) as number ).toArray(){{^required}} : undefined{{/required}},
|
|
||||||
{{/items.isArray}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^required}}{{paramName}} ? {{/required}}parseFloat({{paramName}}){{^required}} : undefined{{/required}},
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isUniqueId}}
|
|
||||||
{{^isUniqueId}}
|
|
||||||
{{#isArray}}
|
|
||||||
{{#items.isModel}}
|
|
||||||
{{^required}}{{paramName}} ? {{/required}}{{#lambda.camelcase}}{{items.dataType}}{{/lambda.camelcase}}RecordUtils.toApiArray({{paramName}}){{^required}} : undefined{{/required}},
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{^items.isModel}}
|
|
||||||
{{^required}}{{paramName}} ? {{/required}}{{paramName}}.toJS(){{^required}} : undefined{{/required}},
|
|
||||||
{{/items.isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{#isModel}}
|
|
||||||
{{^required}}{{paramName}} ? {{/required}}{{#lambda.camelcase}}{{{dataTypeAlternate}}}{{/lambda.camelcase}}Utils.toApi({{paramName}}){{^required}} : undefined{{/required}},
|
|
||||||
{{/isModel}}
|
|
||||||
{{^isArray}}
|
|
||||||
{{^isModel}}
|
|
||||||
{{paramName}},
|
|
||||||
{{/isModel}}
|
|
||||||
{{/isArray}}
|
|
||||||
{{/isUniqueId}}
|
|
||||||
{{/allParams}}
|
|
||||||
{{/allParams.0}}
|
|
||||||
);
|
|
||||||
|
|
||||||
{{#returnType}}
|
|
||||||
{{^hasReturnPassthroughVoid}}
|
|
||||||
let successReturnValue: any = undefined;
|
|
||||||
{{/hasReturnPassthroughVoid}}
|
|
||||||
{{/returnType}}
|
|
||||||
{{#returnTypeSupportsEntities}}
|
|
||||||
if (toEntities) {
|
|
||||||
{{#returnPassthrough}}
|
|
||||||
successReturnValue = {{#lambda.camelcase}}{{{returnType}}}{{/lambda.camelcase}}RecordUtils.fromApiPassthroughAsEntities(response);
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
{{^hasReturnPassthroughVoid}}
|
|
||||||
{{^returnPassthrough}}
|
|
||||||
{{#returnTypeIsArray}}
|
|
||||||
{{#returnTypeAlternate}}
|
|
||||||
successReturnValue = {{#lambda.camelcase}}{{returnBaseTypeAlternate}}{{/lambda.camelcase}}Utils.fromApiArrayAsEntities(response);
|
|
||||||
{{/returnTypeAlternate}}
|
|
||||||
{{/returnTypeIsArray}}
|
|
||||||
{{#returnTypeIsModel}}
|
|
||||||
successReturnValue = {{#lambda.camelcase}}{{returnTypeAlternate}}{{/lambda.camelcase}}Utils.fromApiArrayAsEntities([response]);
|
|
||||||
{{/returnTypeIsModel}}
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
{{/hasReturnPassthroughVoid}}
|
|
||||||
yield put(normalizedEntities(successReturnValue));
|
|
||||||
yield put({{nickname}}Success_Entities(successReturnValue));
|
|
||||||
}
|
|
||||||
if (toInlined) {
|
|
||||||
{{/returnTypeSupportsEntities}}
|
|
||||||
{{#returnType}}
|
|
||||||
{{#returnPassthrough}}
|
|
||||||
successReturnValue = {{#lambda.camelcase}}{{{returnType}}}{{/lambda.camelcase}}RecordUtils.fromApiPassthrough(response);
|
|
||||||
yield put({{nickname}}Success(successReturnValue));
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
{{#hasReturnPassthroughVoid}}
|
|
||||||
yield put({{nickname}}Success());
|
|
||||||
{{/hasReturnPassthroughVoid}}
|
|
||||||
{{^hasReturnPassthroughVoid}}
|
|
||||||
{{^returnPassthrough}}
|
|
||||||
{{#returnTypeIsArray}}
|
|
||||||
{{#returnTypeAlternate}}
|
|
||||||
successReturnValue = {{#lambda.camelcase}}{{returnBaseTypeAlternate}}{{/lambda.camelcase}}Utils.fromApiArray(response);
|
|
||||||
yield put({{nickname}}Success(successReturnValue));
|
|
||||||
{{/returnTypeAlternate}}
|
|
||||||
{{/returnTypeIsArray}}
|
|
||||||
{{#returnTypeIsModel}}
|
|
||||||
successReturnValue = {{#lambda.camelcase}}{{returnTypeAlternate}}{{/lambda.camelcase}}Utils.fromApi(response);
|
|
||||||
yield put({{nickname}}Success(successReturnValue));
|
|
||||||
{{/returnTypeIsModel}}
|
|
||||||
{{^returnTypeIsArray}}
|
|
||||||
{{^returnTypeIsModel}}
|
|
||||||
yield put({{nickname}}Success(response));
|
|
||||||
{{/returnTypeIsModel}}
|
|
||||||
{{/returnTypeIsArray}}
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
{{/hasReturnPassthroughVoid}}
|
|
||||||
{{/returnType}}
|
|
||||||
{{^returnType}}
|
|
||||||
yield put({{nickname}}Success());
|
|
||||||
{{/returnType}}
|
|
||||||
{{#returnTypeSupportsEntities}}
|
|
||||||
}
|
|
||||||
{{/returnTypeSupportsEntities}}
|
|
||||||
|
|
||||||
{{#returnType}}
|
|
||||||
{{#returnPassthrough}}
|
|
||||||
return successReturnValue;
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
{{#hasReturnPassthroughVoid}}
|
|
||||||
return undefined;
|
|
||||||
{{/hasReturnPassthroughVoid}}
|
|
||||||
{{^hasReturnPassthroughVoid}}
|
|
||||||
{{^returnPassthrough}}
|
|
||||||
{{#returnTypeIsArray}}
|
|
||||||
{{#returnTypeAlternate}}
|
|
||||||
return successReturnValue;
|
|
||||||
{{/returnTypeAlternate}}
|
|
||||||
{{/returnTypeIsArray}}
|
|
||||||
{{#returnTypeIsModel}}
|
|
||||||
return successReturnValue;
|
|
||||||
{{/returnTypeIsModel}}
|
|
||||||
{{^returnTypeIsArray}}
|
|
||||||
{{^returnTypeIsModel}}
|
|
||||||
return response;
|
|
||||||
{{/returnTypeIsModel}}
|
|
||||||
{{/returnTypeIsArray}}
|
|
||||||
{{/returnPassthrough}}
|
|
||||||
{{/hasReturnPassthroughVoid}}
|
|
||||||
{{/returnType}}
|
|
||||||
{{^returnType}}
|
|
||||||
return undefined;
|
|
||||||
{{/returnType}}
|
|
||||||
} catch (error: any) {
|
|
||||||
if (markErrorsAsHandled) {error.wasHandled = true; }
|
|
||||||
yield put({{nickname}}Failure({error, requestPayload: _action_.payload}));
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//endregion
|
|
||||||
{{/operation}}
|
|
||||||
{{/operations}}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
export * from './src/index{{importFileExtension}}';
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "./tsconfig.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"module": "esnext",
|
|
||||||
"outDir": "dist/esm"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"declaration": true,
|
|
||||||
"target": "{{#supportsES6}}es6{{/supportsES6}}{{^supportsES6}}es5{{/supportsES6}}",
|
|
||||||
{{#sagasAndRecords}}
|
|
||||||
"strict": true,
|
|
||||||
{{/sagasAndRecords}}
|
|
||||||
"module": "commonjs",
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"outDir": "dist",
|
|
||||||
{{^supportsES6}}
|
|
||||||
"lib": [
|
|
||||||
"es6",
|
|
||||||
"dom"
|
|
||||||
],
|
|
||||||
{{/supportsES6}}
|
|
||||||
"typeRoots": [
|
|
||||||
"node_modules/@types"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"exclude": [
|
|
||||||
"dist",
|
|
||||||
"node_modules"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# Utils Library
|
|
||||||
|
|
||||||
This library is made to be shared by all of the service.
|
|
||||||
It should handle things like database interface, shared stuff like 'make sure this is accessed by an connected user'
|
|
||||||
|
|
||||||
# How it is used
|
|
||||||
|
|
||||||
Painfully.
|
|
||||||
|
|
||||||
# Why no Docker ?
|
|
||||||
|
|
||||||
Docker compose can't make "build-only" docker images, where we just use them.
|
|
||||||
So we have to "build" the library in every Dockerfile for every service.
|
|
||||||
Well not really, dockers caches things for use,
|
|
||||||
meaning that while it seems that everybody builds it, it is only built once
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Nginx Configuration
|
|
||||||
|
|
||||||
You want to have a new microservice ?
|
|
||||||
|
|
||||||
Edit/add a file in `conf/locations/`
|
|
||||||
take example on `conf/locations/icons.conf` on how to make a reverse proxy and on how to serve static files
|
|
||||||
|
|
||||||
# Good Luck Have Fun
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Nginx Configuration
|
|
||||||
|
|
||||||
You want to have a new microservice ?
|
|
||||||
|
|
||||||
Edit/add a file in `conf/locations/`
|
|
||||||
take example on `conf/locations/icons.conf` on how to make a reverse proxy and on how to serve static files
|
|
||||||
|
|
||||||
# Good Luck Have Fun
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue