powershell/utils/components.ts (151 lines of code) (raw):
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { DeepPartial } from '@azure-tools/codegen';
import { Dictionary } from '@azure-tools/linq';
import { Schema } from '@autorest/codemodel';
import { Extensions } from './extensions';
//import { Schema } from './schema';
import { uid } from './uid';
export interface IOperationBase {
}
export interface IParameter extends Extensions {
name: string;
schema: Schema;
description: string;
allowEmptyValue: boolean;
deprecated: boolean;
required: boolean;
details: LanguageDetails<ParameterDetails>;
}
export class IParameter extends Extensions {
constructor(public name: string, public schema: Schema, initializer?: DeepPartial<IParameter>) {
super();
this.description = '';
this.deprecated = false;
this.required = false;
this.details = {
default: {
uid: `parameter:${uid()}`,
description: this.description,
name,
}
};
this.allowEmptyValue = false;
this.apply(initializer);
}
}
export interface IOperation<TParameterType extends IParameter> extends IOperationBase {
operationId: string;
description: string;
summary?: string;
deprecated: boolean;
parameters: Array<TParameterType>;
}
export interface Components<TOperation extends IOperation<TParameter>, TParameter extends IParameter> extends Extensions {
operations: Dictionary<TOperation>;
parameters: Dictionary<TParameter>;
}
export class Components<TOperation extends IOperation<TParameter>, TParameter extends IParameter> extends Extensions implements Components<TOperation, TParameter> {
/**
* Dictionary of Operations in this model.
*
* This is intended to invert the original PathItems in the OAI model, and focus on operations, not endpoints.
*/
public operations = new Dictionary<TOperation>();
constructor(initializer?: DeepPartial<Components<TOperation, TParameter>>) {
super();
this.apply(initializer);
}
}
export interface ParameterDetails extends ImplementationDetails {
}
export interface ResponseDetails extends ImplementationDetails {
isErrorResponse: boolean;
}
/** LanguageDetails contains a map of languages to details for a given node in the code-model */
export interface LanguageDetails<T extends ImplementationDetails> extends Dictionary<T> {
default: T;
}
export interface ImplementationDetails extends Dictionary<any> {
/** a unique id for correlation between cloned objects */
uid: string;
/** name used in actual implementation */
name: string;
/** description text */
description: string;
/** message used to go along with deprecation */
deprecationMessage?: string;
/** external docs description */
externalDocs?: ExternalDocumentation;
}
export enum ImplementationLocation {
Method = 'Method',
Client = 'Client',
}
export class Example extends Extensions implements Example {
extensions = new Dictionary<any>();
constructor(initializer?: DeepPartial<Example>) {
super();
this.apply(initializer);
}
}
export class ExternalDocumentation extends Extensions implements ExternalDocumentation {
extensions = new Dictionary<any>();
constructor(public url: string, initializer?: DeepPartial<ExternalDocumentation>) {
super();
this.apply(initializer);
}
}
export class Link extends Extensions implements Link {
extensions = new Dictionary<any>();
parameters = new Dictionary<string>();
constructor(initializer?: DeepPartial<Link>) {
super();
this.apply(initializer);
}
}
export class Server extends Extensions implements Server {
extensions = new Dictionary<any>();
variables = new Dictionary<ServerVariable>();
constructor(public url: string, initializer?: DeepPartial<Server>) {
super();
this.apply(initializer);
}
}
export class ServerVariable extends Extensions implements ServerVariable {
extensions = new Dictionary<any>();
enum = new Array<string>();
constructor(defaultValue: string, initializer?: DeepPartial<ServerVariable>) {
super();
this.default = defaultValue;
this.apply(initializer);
}
}
export class Tag extends Extensions implements Tag {
extensions = new Dictionary<any>();
constructor(public name: string, initializer?: DeepPartial<Tag>) {
super();
this.apply(initializer);
}
}
/**
* @description common ways of serializing simple parameters
* @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#style-values
*/
export interface SecurityRequirement extends Dictionary<string> {
}
export interface Example extends Extensions {
summary?: string;
description?: string;
value?: any;
externalValue?: string; // uriref
}
export interface ExternalDocumentation extends Extensions {
description?: string;
url: string; // uriref
}
export interface Link extends Extensions {
operationRef?: string; // uriref
operationId?: string;
parameters: Dictionary<string>;
requestBody?: any;
description?: string;
server?: Server;
}
export interface Server extends Extensions {
url: string;
description?: string;
variables: Dictionary<ServerVariable>;
}
export interface ServerVariable extends Extensions {
enum: Array<string>;
default: string;
description?: string;
}
export interface Tag extends Extensions {
name: string;
description?: string;
externalDocs?: ExternalDocumentation;
}