forked from loafle/openapi-generator-original
* [TypeScript][Aurelia] Create Aurelia code generator #5987 * Implement authentication methods for Aurelia #5987 * Support form data in Aurelia #5987 * Generate an index.ts file for Aurelia #5987 * Add return type to Aurelia model imports #5987 * Add Aurelia client options test #5987
This commit is contained in:
parent
e298964489
commit
21619c5320
@ -0,0 +1,131 @@
|
|||||||
|
package io.swagger.codegen.languages;
|
||||||
|
|
||||||
|
import io.swagger.codegen.*;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
public class TypeScriptAureliaClientCodegen extends AbstractTypeScriptClientCodegen {
|
||||||
|
|
||||||
|
public static final String NPM_NAME = "npmName";
|
||||||
|
public static final String NPM_VERSION = "npmVersion";
|
||||||
|
|
||||||
|
protected String npmName = null;
|
||||||
|
protected String npmVersion = "1.0.0";
|
||||||
|
|
||||||
|
public TypeScriptAureliaClientCodegen() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
apiTemplateFiles.put("api.mustache", ".ts");
|
||||||
|
|
||||||
|
// clear import mapping (from default generator) as TS does not use it
|
||||||
|
// at the moment
|
||||||
|
importMapping.clear();
|
||||||
|
|
||||||
|
outputFolder = "generated-code/typescript-aurelia";
|
||||||
|
embeddedTemplateDir = templateDir = "typescript-aurelia";
|
||||||
|
this.cliOptions.add(new CliOption(NPM_NAME, "The name under which you want to publish generated npm package"));
|
||||||
|
this.cliOptions.add(new CliOption(NPM_VERSION, "The version of your npm package"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processOpts() {
|
||||||
|
super.processOpts();
|
||||||
|
|
||||||
|
if (additionalProperties.containsKey(NPM_NAME)) {
|
||||||
|
this.setNpmName(additionalProperties.get(NPM_NAME).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (additionalProperties.containsKey(NPM_VERSION)) {
|
||||||
|
this.setNpmVersion(additionalProperties.get(NPM_VERSION).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set supporting files
|
||||||
|
supportingFiles.add(new SupportingFile("models.mustache", "", "models.ts"));
|
||||||
|
supportingFiles.add(new SupportingFile("index.ts.mustache", "", "index.ts"));
|
||||||
|
supportingFiles.add(new SupportingFile("Api.ts.mustache", "", "Api.ts"));
|
||||||
|
supportingFiles.add(new SupportingFile("AuthStorage.ts.mustache", "", "AuthStorage.ts"));
|
||||||
|
supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh"));
|
||||||
|
supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
|
||||||
|
supportingFiles.add(new SupportingFile("package.json.mustache", "", "package.json"));
|
||||||
|
supportingFiles.add(new SupportingFile("tsconfig.json.mustache", "", "tsconfig.json"));
|
||||||
|
supportingFiles.add(new SupportingFile("tslint.json.mustache", "", "tslint.json"));
|
||||||
|
supportingFiles.add(new SupportingFile("gitignore", "", ".gitignore"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "typescript-aurelia";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHelp() {
|
||||||
|
return "Generates a TypeScript client library for the Aurelia framework (beta).";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNpmName() {
|
||||||
|
return npmName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNpmName(String npmName) {
|
||||||
|
this.npmName = npmName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNpmVersion() {
|
||||||
|
return npmVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNpmVersion(String npmVersion) {
|
||||||
|
this.npmVersion = npmVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
|
||||||
|
objs = super.postProcessOperations(objs);
|
||||||
|
|
||||||
|
HashSet<String> modelImports = new HashSet<>();
|
||||||
|
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
|
||||||
|
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
|
||||||
|
for (CodegenOperation op : operationList) {
|
||||||
|
// Aurelia uses "asGet", "asPost", ... methods; change the method format
|
||||||
|
op.httpMethod = initialCaps(op.httpMethod.toLowerCase());
|
||||||
|
|
||||||
|
// Collect models to be imported
|
||||||
|
for (CodegenParameter param : op.allParams) {
|
||||||
|
if (!param.isPrimitiveType) {
|
||||||
|
modelImports.add(param.dataType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (op.returnBaseType != null && !op.returnTypeIsPrimitive) {
|
||||||
|
modelImports.add(op.returnBaseType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
objs.put("modelImports", modelImports);
|
||||||
|
|
||||||
|
return objs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> postProcessModels(Map<String, Object> objs) {
|
||||||
|
// process enum in models
|
||||||
|
List<Object> models = (List<Object>) postProcessModelsEnum(objs).get("models");
|
||||||
|
for (Object _mo : models) {
|
||||||
|
Map<String, Object> mo = (Map<String, Object>) _mo;
|
||||||
|
CodegenModel cm = (CodegenModel) mo.get("model");
|
||||||
|
cm.imports = new TreeSet(cm.imports);
|
||||||
|
for (CodegenProperty var : cm.vars) {
|
||||||
|
// name enum with model name, e.g. StatuEnum => PetStatusEnum
|
||||||
|
if (Boolean.TRUE.equals(var.isEnum)) {
|
||||||
|
var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + var.enumName);
|
||||||
|
var.enumName = cm.classname + var.enumName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return objs;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -69,6 +69,7 @@ io.swagger.codegen.languages.SwiftCodegen
|
|||||||
io.swagger.codegen.languages.TizenClientCodegen
|
io.swagger.codegen.languages.TizenClientCodegen
|
||||||
io.swagger.codegen.languages.TypeScriptAngular2ClientCodegen
|
io.swagger.codegen.languages.TypeScriptAngular2ClientCodegen
|
||||||
io.swagger.codegen.languages.TypeScriptAngularClientCodegen
|
io.swagger.codegen.languages.TypeScriptAngularClientCodegen
|
||||||
|
io.swagger.codegen.languages.TypeScriptAureliaClientCodegen
|
||||||
io.swagger.codegen.languages.TypeScriptFetchClientCodegen
|
io.swagger.codegen.languages.TypeScriptFetchClientCodegen
|
||||||
io.swagger.codegen.languages.TypeScriptJqueryClientCodegen
|
io.swagger.codegen.languages.TypeScriptJqueryClientCodegen
|
||||||
io.swagger.codegen.languages.TypeScriptNodeClientCodegen
|
io.swagger.codegen.languages.TypeScriptNodeClientCodegen
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
{{>licenseInfo}}
|
||||||
|
import { HttpClient } from 'aurelia-http-client';
|
||||||
|
import { AuthStorage } from './AuthStorage';
|
||||||
|
|
||||||
|
const BASE_PATH = '{{{basePath}}}'.replace(/\/+$/, '');
|
||||||
|
|
||||||
|
export class Api {
|
||||||
|
basePath: string;
|
||||||
|
httpClient: HttpClient;
|
||||||
|
authStorage: AuthStorage;
|
||||||
|
|
||||||
|
constructor(httpClient: HttpClient, authStorage: AuthStorage, basePath: string = BASE_PATH) {
|
||||||
|
this.basePath = basePath;
|
||||||
|
this.httpClient = httpClient;
|
||||||
|
this.authStorage = authStorage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encodes a query string.
|
||||||
|
*
|
||||||
|
* @param params The params to encode.
|
||||||
|
* @return An encoded query string.
|
||||||
|
*/
|
||||||
|
protected queryString(params: { [key: string]: any }): string {
|
||||||
|
const queries = [];
|
||||||
|
for (let key in params) {
|
||||||
|
const value = this.toString(params[key]);
|
||||||
|
if (value != null) {
|
||||||
|
queries.push(`${key}=${encodeURIComponent(value)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return queries.join('&');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a value to string.
|
||||||
|
*
|
||||||
|
* @param value The value to convert.
|
||||||
|
*/
|
||||||
|
protected toString(value: any): string | null {
|
||||||
|
if (value === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
switch (typeof value) {
|
||||||
|
case 'undefined': return null;
|
||||||
|
case 'boolean': return value ? 'true' : 'false';
|
||||||
|
case 'string': return value;
|
||||||
|
default: return '' + value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that a given parameter is set.
|
||||||
|
*
|
||||||
|
* @param context A name for the callee's context.
|
||||||
|
* @param params The parameters being set.
|
||||||
|
* @param paramName The required parameter to check.
|
||||||
|
*/
|
||||||
|
protected ensureParamIsSet<T>(context: string, params: T, paramName: keyof T): void {
|
||||||
|
if (null === params[paramName]) {
|
||||||
|
throw new Error(`Missing required parameter ${paramName} when calling ${context}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
{{>licenseInfo}}
|
||||||
|
/**
|
||||||
|
* Class to storage authentication data
|
||||||
|
*/
|
||||||
|
export class AuthStorage {
|
||||||
|
private storage: Map<string, string>;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.storage = new Map();
|
||||||
|
}
|
||||||
|
{{#authMethods}}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {{name}} auth method value.
|
||||||
|
*
|
||||||
|
* @param value The new value to set for {{name}}.
|
||||||
|
*/
|
||||||
|
set{{name}}(value: string): this {
|
||||||
|
this.storage.set('{{name}}', value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the {{name}} auth method value.
|
||||||
|
*/
|
||||||
|
remove{{name}}(): this {
|
||||||
|
this.storage.delete('{{name}}');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the {{name}} auth method value.
|
||||||
|
*/
|
||||||
|
get{{name}}(): null | string {
|
||||||
|
return this.storage.get('{{name}}') || null;
|
||||||
|
}
|
||||||
|
{{/authMethods}}
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
# TypeScript-Aurelia
|
||||||
|
|
||||||
|
This generator creates TypeScript/JavaScript client that is injectable by [Aurelia](http://aurelia.io/).
|
||||||
|
The generated Node module can be used in the following environments:
|
||||||
|
|
||||||
|
Environment
|
||||||
|
* Node.js
|
||||||
|
* Webpack
|
||||||
|
* Browserify
|
||||||
|
|
||||||
|
Language level
|
||||||
|
* ES5 - you must have a Promises/A+ library installed
|
||||||
|
* ES6
|
||||||
|
|
||||||
|
Module system
|
||||||
|
* CommonJS
|
||||||
|
* ES6 module system
|
||||||
|
|
||||||
|
It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html))
|
||||||
|
|
||||||
|
### Installation ###
|
||||||
|
|
||||||
|
`swagger-codegen` does not generate JavaScript directly. The generated Node module comes with `package.json` that bundles `typescript` and `typings` so it can self-compile during `prepublish` stage. The should be run automatically during `npm install` or `npm publish`.
|
||||||
|
|
||||||
|
CAVEAT: Due to [privilege implications](https://docs.npmjs.com/misc/scripts#user), `npm` would skip all scripts if the user is `root`. You would need to manually run it with `npm run prepublish` or run `npm install --unsafe-perm`.
|
||||||
|
|
||||||
|
#### NPM ####
|
||||||
|
You may publish the module to NPM. In this case, you would be able to install the module as any other NPM module. It maybe useful to use [scoped packages](https://docs.npmjs.com/misc/scope).
|
||||||
|
|
||||||
|
You can also use `npm link` to link the module. However, this would not modify `package.json` of the installing project, as such you would need to relink every time you deploy that project.
|
||||||
|
|
||||||
|
You can also directly install the module using `npm install file_path`. If you do `npm install file_path --save`, NPM will save relative path to `package.json`. In this case, `npm install` and `npm shrinkwrap` may misbehave. You would need to manually edit `package.json` and replace it with absolute path.
|
||||||
|
|
||||||
|
Regardless of which method you deployed your NPM module, the ES6 module syntaxes are as follows:
|
||||||
|
```
|
||||||
|
import * as localName from 'npmName';
|
||||||
|
import {operationId} from 'npmName';
|
||||||
|
```
|
||||||
|
The CommonJS syntax is as follows:
|
||||||
|
```
|
||||||
|
import localName = require('npmName');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Direct copy/symlink ####
|
||||||
|
You may also simply copy or symlink the generated module into a directory under your project. The syntax of this is as follows:
|
||||||
|
|
||||||
|
With ES6 module syntax, the following syntaxes are supported:
|
||||||
|
```
|
||||||
|
import * as localName from './symlinkDir';
|
||||||
|
import {operationId} from './symlinkDir';
|
||||||
|
```
|
||||||
|
The CommonJS syntax is as follows:
|
||||||
|
```
|
||||||
|
import localName = require('./symlinkDir')';
|
||||||
|
```
|
@ -0,0 +1,107 @@
|
|||||||
|
{{>licenseInfo}}
|
||||||
|
import { autoinject } from 'aurelia-framework';
|
||||||
|
import { HttpClient } from 'aurelia-http-client';
|
||||||
|
import { Api } from './Api';
|
||||||
|
import { AuthStorage } from './AuthStorage';
|
||||||
|
import {
|
||||||
|
{{#modelImports}} {{this}},
|
||||||
|
{{/modelImports}}
|
||||||
|
} from './models';
|
||||||
|
|
||||||
|
{{#operations}}
|
||||||
|
{{#operation}}
|
||||||
|
/**
|
||||||
|
* {{operationId}} - parameters interface
|
||||||
|
*/
|
||||||
|
export interface I{{operationIdCamelCase}}Params {
|
||||||
|
{{#allParams}} {{paramName}}{{^required}}?{{/required}}: {{{dataType}}};
|
||||||
|
{{/allParams}}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/operation}}
|
||||||
|
/**
|
||||||
|
* {{classname}} - API class{{#description}}
|
||||||
|
* {{&description}}{{/description}}
|
||||||
|
*/
|
||||||
|
@autoinject()
|
||||||
|
export class {{classname}} extends Api {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {{classname}} class.
|
||||||
|
*
|
||||||
|
* @param httpClient The Aurelia HTTP client to be injected.
|
||||||
|
*/
|
||||||
|
constructor(httpClient: HttpClient, authStorage: AuthStorage) {
|
||||||
|
super(httpClient, authStorage);
|
||||||
|
}
|
||||||
|
|
||||||
|
{{#operation}}
|
||||||
|
/**{{#summary}}
|
||||||
|
* {{summary}}
|
||||||
|
*{{/summary}}{{#notes}}
|
||||||
|
* {{notes}}{{/notes}}{{#allParams}}
|
||||||
|
* @param params.{{paramName}} {{description}}{{/allParams}}
|
||||||
|
*/
|
||||||
|
async {{nickname}}({{#hasParams}}params: I{{operationIdCamelCase}}Params{{/hasParams}}): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}any{{/returnType}}> {
|
||||||
|
// Verify required parameters are set
|
||||||
|
{{#allParams}}
|
||||||
|
{{#required}}
|
||||||
|
this.ensureParamIsSet('{{nickname}}', params, '{{paramName}}');
|
||||||
|
{{/required}}
|
||||||
|
{{/allParams}}
|
||||||
|
|
||||||
|
// Create URL to call
|
||||||
|
const url = `${this.basePath}{{{path}}}`{{#pathParams}}
|
||||||
|
.replace(`{${'{{baseName}}'}}`, `${params['{{paramName}}']}`){{/pathParams}};
|
||||||
|
|
||||||
|
const response = await this.httpClient.createRequest(url)
|
||||||
|
// Set HTTP method
|
||||||
|
.as{{httpMethod}}()
|
||||||
|
{{#hasQueryParams}}
|
||||||
|
// Set query parameters
|
||||||
|
.withParams({ {{#queryParams}}
|
||||||
|
'{{baseName}}': params['{{paramName}}'],{{/queryParams}}
|
||||||
|
})
|
||||||
|
{{/hasQueryParams}}
|
||||||
|
{{#hasFormParams}}
|
||||||
|
// Encode form parameters
|
||||||
|
.withHeader('content-type', 'application/x-www-form-urlencoded')
|
||||||
|
.withContent(this.queryString({ {{#formParams}}
|
||||||
|
'{{baseName}}': params['{{paramName}}'],{{/formParams}}
|
||||||
|
}))
|
||||||
|
{{/hasFormParams}}
|
||||||
|
{{#hasBodyParam}}
|
||||||
|
{{#bodyParam}}
|
||||||
|
// Encode body parameter
|
||||||
|
.withHeader('content-type', 'application/json')
|
||||||
|
.withContent(JSON.stringify(params['{{paramName}}'] || {}))
|
||||||
|
{{/bodyParam}}
|
||||||
|
{{/hasBodyParam}}
|
||||||
|
{{#headerParams}}
|
||||||
|
.withHeader('{{baseName}}', params['{{paramName}}']){{/headerParams}}
|
||||||
|
{{#authMethods}}
|
||||||
|
// Authentication '{{name}}' required
|
||||||
|
{{#isApiKey}}
|
||||||
|
{{#isKeyInHeader}}
|
||||||
|
.withHeader('{{keyParamName}}', this.authStorage.get{{name}}())
|
||||||
|
{{/isKeyInHeader}}
|
||||||
|
{{#isKeyInQuery}}
|
||||||
|
.withParams({ {{keyParamName}}: this.authStorage.get{{name}}() })
|
||||||
|
{{/isKeyInQuery}}
|
||||||
|
{{/isApiKey}}
|
||||||
|
{{/authMethods}}
|
||||||
|
// Send the request
|
||||||
|
.send();
|
||||||
|
|
||||||
|
if (response.statusCode < 200 || response.statusCode >= 300) {
|
||||||
|
throw new Error(response.content);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the content
|
||||||
|
return response.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/operation}}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/operations}}
|
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||||
|
#
|
||||||
|
# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update"
|
||||||
|
|
||||||
|
git_user_id=$1
|
||||||
|
git_repo_id=$2
|
||||||
|
release_note=$3
|
||||||
|
|
||||||
|
if [ "$git_user_id" = "" ]; then
|
||||||
|
git_user_id="{{{gitUserId}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_repo_id" = "" ]; then
|
||||||
|
git_repo_id="{{{gitRepoId}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release_note" = "" ]; then
|
||||||
|
release_note="{{{releaseNote}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the local directory as a Git repository
|
||||||
|
git init
|
||||||
|
|
||||||
|
# Adds the files in the local repository and stages them for commit.
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commits the tracked changes and prepares them to be pushed to a remote repository.
|
||||||
|
git commit -m "$release_note"
|
||||||
|
|
||||||
|
# Sets the new remote
|
||||||
|
git_remote=`git remote`
|
||||||
|
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||||
|
|
||||||
|
if [ "$GIT_TOKEN" = "" ]; then
|
||||||
|
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git crediential in your environment."
|
||||||
|
git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git
|
||||||
|
else
|
||||||
|
git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# Pushes (Forces) the changes in the local repository up to the remote repository
|
||||||
|
echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git"
|
||||||
|
git push origin master 2>&1 | grep -v 'To https'
|
||||||
|
|
@ -0,0 +1,3 @@
|
|||||||
|
wwwroot/*.js
|
||||||
|
node_modules
|
||||||
|
typings
|
@ -0,0 +1,16 @@
|
|||||||
|
{{>licenseInfo}}
|
||||||
|
export { Api } from './Api';
|
||||||
|
export { AuthStorage } from './AuthStorage';
|
||||||
|
{{#apiInfo}}
|
||||||
|
{{#apis}}
|
||||||
|
{{#operations}}
|
||||||
|
export { {{classname}} } from './{{classname}}';
|
||||||
|
{{/operations}}
|
||||||
|
{{/apis}}
|
||||||
|
{{/apiInfo}}
|
||||||
|
export {
|
||||||
|
{{#models}}
|
||||||
|
{{#model}} {{classname}},
|
||||||
|
{{/model}}
|
||||||
|
{{/models}}
|
||||||
|
} from './models';
|
@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* {{{appName}}}
|
||||||
|
* {{{appDescription}}}
|
||||||
|
*
|
||||||
|
* {{#version}}OpenAPI spec version: {{{version}}}{{/version}}
|
||||||
|
* {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}}
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by the swagger code generator program.
|
||||||
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
@ -0,0 +1,39 @@
|
|||||||
|
{{>licenseInfo}}
|
||||||
|
{{#models}}
|
||||||
|
{{#model}}
|
||||||
|
{{#description}}
|
||||||
|
/**
|
||||||
|
* {{{description}}}
|
||||||
|
*/
|
||||||
|
{{/description}}
|
||||||
|
{{^isEnum}}
|
||||||
|
export interface {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{
|
||||||
|
{{/isEnum}}
|
||||||
|
{{#isEnum}}
|
||||||
|
export type {{{classname}}} = {{#allowableValues}}{{#values}}'{{{.}}}'{{^-last}} | {{/-last}}{{/values}}{{/allowableValues}};
|
||||||
|
{{/isEnum}}
|
||||||
|
{{#vars}}
|
||||||
|
{{#description}}
|
||||||
|
/**
|
||||||
|
* {{{description}}}
|
||||||
|
*/
|
||||||
|
{{/description}}
|
||||||
|
{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}};
|
||||||
|
{{/vars}}
|
||||||
|
{{^isEnum}}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/isEnum}}
|
||||||
|
{{#hasEnums}}
|
||||||
|
{{#vars}}
|
||||||
|
{{#isEnum}}
|
||||||
|
/**
|
||||||
|
* Enum for the {{name}} property.
|
||||||
|
*/
|
||||||
|
export type {{{enumName}}} = {{#allowableValues}}{{#values}}'{{{.}}}'{{^-last}} | {{/-last}}{{/values}}{{/allowableValues}};
|
||||||
|
|
||||||
|
{{/isEnum}}
|
||||||
|
{{/vars}}
|
||||||
|
{{/hasEnums}}
|
||||||
|
{{/model}}
|
||||||
|
{{/models}}
|
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "{{#npmName}}{{{npmName}}}{{/npmName}}{{^npmName}}typescript-fetch-api{{/npmName}}",
|
||||||
|
"version": "{{#npmVersion}}{{{npmVersion}}}{{/npmVersion}}{{^npmVersion}}0.0.0{{/npmVersion}}",
|
||||||
|
"license": "Unlicense",
|
||||||
|
"main": "./dist/api.js",
|
||||||
|
"browser": "./dist/api.js",
|
||||||
|
"typings": "./dist/api.d.ts",
|
||||||
|
"dependencies": {
|
||||||
|
{{^supportsES6}}"core-js": "^2.4.0",
|
||||||
|
{{/supportsES6}}"isomorphic-fetch": "^2.2.1"
|
||||||
|
},
|
||||||
|
"scripts" : {
|
||||||
|
"prepublish" : "typings install && tsc",
|
||||||
|
"test": "tslint api.ts"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"tslint": "^3.15.1",
|
||||||
|
"typescript": "^1.8.10",
|
||||||
|
"typings": "^1.0.4"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"target": "{{#supportsES6}}es6{{/supportsES6}}{{^supportsES6}}es5{{/supportsES6}}",
|
||||||
|
"module": "commonjs",
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"rootDir": "."
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"dist",
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"jsRules": {
|
||||||
|
"class-name": true,
|
||||||
|
"comment-format": [
|
||||||
|
true,
|
||||||
|
"check-space"
|
||||||
|
],
|
||||||
|
"indent": [
|
||||||
|
true,
|
||||||
|
"spaces"
|
||||||
|
],
|
||||||
|
"no-duplicate-variable": true,
|
||||||
|
"no-eval": true,
|
||||||
|
"no-trailing-whitespace": true,
|
||||||
|
"no-unsafe-finally": true,
|
||||||
|
"one-line": [
|
||||||
|
true,
|
||||||
|
"check-open-brace",
|
||||||
|
"check-whitespace"
|
||||||
|
],
|
||||||
|
"quotemark": [
|
||||||
|
true,
|
||||||
|
"double"
|
||||||
|
],
|
||||||
|
"semicolon": [
|
||||||
|
true,
|
||||||
|
"always"
|
||||||
|
],
|
||||||
|
"triple-equals": [
|
||||||
|
true,
|
||||||
|
"allow-null-check"
|
||||||
|
],
|
||||||
|
"variable-name": [
|
||||||
|
true,
|
||||||
|
"ban-keywords"
|
||||||
|
],
|
||||||
|
"whitespace": [
|
||||||
|
true,
|
||||||
|
"check-branch",
|
||||||
|
"check-decl",
|
||||||
|
"check-operator",
|
||||||
|
"check-separator",
|
||||||
|
"check-type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"class-name": true,
|
||||||
|
"comment-format": [
|
||||||
|
true,
|
||||||
|
"check-space"
|
||||||
|
],
|
||||||
|
"indent": [
|
||||||
|
true,
|
||||||
|
"spaces"
|
||||||
|
],
|
||||||
|
"no-eval": true,
|
||||||
|
"no-internal-module": true,
|
||||||
|
"no-trailing-whitespace": true,
|
||||||
|
"no-unsafe-finally": true,
|
||||||
|
"no-var-keyword": true,
|
||||||
|
"one-line": [
|
||||||
|
true,
|
||||||
|
"check-open-brace",
|
||||||
|
"check-whitespace"
|
||||||
|
],
|
||||||
|
"quotemark": [
|
||||||
|
true,
|
||||||
|
"double"
|
||||||
|
],
|
||||||
|
"semicolon": [
|
||||||
|
true,
|
||||||
|
"always"
|
||||||
|
],
|
||||||
|
"triple-equals": [
|
||||||
|
true,
|
||||||
|
"allow-null-check"
|
||||||
|
],
|
||||||
|
"typedef-whitespace": [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
"call-signature": "nospace",
|
||||||
|
"index-signature": "nospace",
|
||||||
|
"parameter": "nospace",
|
||||||
|
"property-declaration": "nospace",
|
||||||
|
"variable-declaration": "nospace"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"variable-name": [
|
||||||
|
true,
|
||||||
|
"ban-keywords"
|
||||||
|
],
|
||||||
|
"whitespace": [
|
||||||
|
true,
|
||||||
|
"check-branch",
|
||||||
|
"check-decl",
|
||||||
|
"check-operator",
|
||||||
|
"check-separator",
|
||||||
|
"check-type"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package io.swagger.codegen.options;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import io.swagger.codegen.CodegenConstants;
|
||||||
|
import io.swagger.codegen.languages.TypeScriptAureliaClientCodegen;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TypeScriptAureliaClientOptionsProvider implements OptionsProvider {
|
||||||
|
public static final String SORT_PARAMS_VALUE = "false";
|
||||||
|
public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true";
|
||||||
|
public static final Boolean SUPPORTS_ES6_VALUE = false;
|
||||||
|
public static final String MODEL_PROPERTY_NAMING_VALUE = "camelCase";
|
||||||
|
private static final String NMP_NAME = "npmName";
|
||||||
|
private static final String NMP_VERSION = "1.0.0";
|
||||||
|
public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false";
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLanguage() {
|
||||||
|
return "typescript-aurelia";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> createOptions() {
|
||||||
|
ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
|
||||||
|
return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE)
|
||||||
|
.put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE)
|
||||||
|
.put(CodegenConstants.MODEL_PROPERTY_NAMING, MODEL_PROPERTY_NAMING_VALUE)
|
||||||
|
.put(CodegenConstants.SUPPORTS_ES6, String.valueOf(SUPPORTS_ES6_VALUE))
|
||||||
|
.put(TypeScriptAureliaClientCodegen.NPM_NAME, NMP_NAME)
|
||||||
|
.put(TypeScriptAureliaClientCodegen.NPM_VERSION, NMP_VERSION)
|
||||||
|
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isServer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package io.swagger.codegen.typescript.aurelia;
|
||||||
|
|
||||||
|
import io.swagger.codegen.AbstractOptionsTest;
|
||||||
|
import io.swagger.codegen.CodegenConfig;
|
||||||
|
import io.swagger.codegen.languages.TypeScriptAureliaClientCodegen;
|
||||||
|
import io.swagger.codegen.options.TypeScriptAureliaClientOptionsProvider;
|
||||||
|
import mockit.Expectations;
|
||||||
|
import mockit.Tested;
|
||||||
|
|
||||||
|
public class TypeScriptAureliaClientOptionsTest extends AbstractOptionsTest {
|
||||||
|
|
||||||
|
@Tested
|
||||||
|
private TypeScriptAureliaClientCodegen clientCodegen;
|
||||||
|
|
||||||
|
public TypeScriptAureliaClientOptionsTest() {
|
||||||
|
super(new TypeScriptAureliaClientOptionsProvider());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CodegenConfig getCodegenConfig() {
|
||||||
|
return clientCodegen;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
@Override
|
||||||
|
protected void setExpectations() {
|
||||||
|
new Expectations(clientCodegen) {{
|
||||||
|
clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(TypeScriptAureliaClientOptionsProvider.SORT_PARAMS_VALUE));
|
||||||
|
times = 1;
|
||||||
|
clientCodegen.setModelPropertyNaming(TypeScriptAureliaClientOptionsProvider.MODEL_PROPERTY_NAMING_VALUE);
|
||||||
|
times = 1;
|
||||||
|
clientCodegen.setSupportsES6(TypeScriptAureliaClientOptionsProvider.SUPPORTS_ES6_VALUE);
|
||||||
|
times = 1;
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user