Modificación de las características del esquema con un asistente de front-end
La interfaz Options
del archivo blueprint.ts
genera automáticamente un asistente de selección de esquemas en CodeCatalyst. El asistente de front-end es compatible con las modificaciones y características de las Options
de un esquema mediante comentarios y etiquetas de estilo JSDOCOptions
. El asistente se configura automáticamente según el tipo descrito de la mejor manera posible. No todos los tipos son compatibles. Entre otros tipos compatibles se incluyen el selector de región y el selector de entorno.
A continuación presentamos un ejemplo de un asistente que utiliza comentarios y etiquetas JSDOC con las Options
del esquema:
export interface Options { /** * What do you want to call your new blueprint? * @validationRegex /^[a-zA-Z0-9_]+$/ * @validationMessage Must contain only upper and lowercase letters, numbers and underscores */ blueprintName: string; /** * Add a description for your new blueprint. */ description?: string; /** * Tags for your Blueprint: * @collapsed true */ tags?: string[]; }
El nombre de visualización de cada opción de la interfaz Options
aparece de forma predeterminada en camelCase
. El texto sin formato del comentario de estilo JSDOC aparece como texto encima de la opción en el asistente.
Temas
Etiquetas compatibles
Las siguientes etiquetas JSDOC son compatibles con las Options
de un esquema personalizado en el asistente de front-end.
@inlinePolicy ./path/to/policy/file.json
Requiere: la opción debe ser de tipo
Role
.Uso: le permite comunicar las políticas integradas que necesita un rol. Se espera que la ruta
policy.json
esté bajo el código fuente. Use esta etiqueta cuando necesite una política personalizada para un rol.Dependencias:
blueprint-cli 0.1.12
y posterioresEjemplo:
@inlinePolicy ./deployment-policy.json
environment: EnvironmentDefinition{ awsAccountConnection: AccountConnection{ /** * @inlinePolicy ./path/to/deployment-policy.json */ cdkRole: Role[]; }; };
@trustPolicy ./path/to/policy/file.json
Requiere: la opción debe ser de tipo
Role
.Uso: le permite comunicar las políticas de confianza que necesita un rol. Se espera que la ruta
policy.json
esté bajo el código fuente. Use esta etiqueta cuando necesite una política personalizada para un rol.Dependencias:
blueprint-cli 0.1.12
y posterioresEjemplo:
@trustPolicy ./trust-policy.json
environment: EnvironmentDefinition{ awsAccountConnection: AccountConnection{ /** * @trustPolicy ./path/to/trust-policy.json */ cdkRole: Role[]; }; };
Expresión regular @validationRegex
Requiere: la opción debe ser una cadena.
Uso: realiza la validación de entrada de la opción mediante la expresión regular dada y muestra
@validationMessage
.Ejemplo:
@validationRegex /^[a-zA-Z0-9_]+$/
Recomendación: debe usarse con
@validationMessage
. El mensaje de validación está vacío de forma predeterminada.
Cadena @validationMessage
Requiere:
@validationRegex
u otros errores para revisar el uso.Uso: muestra un mensaje de validación en caso de error de
@validation*
.Ejemplo:
@validationMessage Must contain only upper and lowercase letters, numbers, and underscores
.Recomendación: debe usarse con
@validationMessage
. El mensaje de validación está vacío de forma predeterminada.
Booleano @collapsed (opcional)
Requiere: N/A
Uso: booleano que permite hacer que una subopción se pueda contraer. Si la anotación contraída está presente, su valor predeterminado es true. Si se establece el valor en
@collapsed false
, se crea una sección contraíble que inicialmente está abierta.Ejemplo:
@collapsed true
Cadena de caracteres @displayName
Requiere: N/A
Uso: cambia el nombre de visualización de la opción. Admite formatos distintos de camelCase para el nombre de visualización.
Ejemplo:
@displayName Blueprint Name
Cadena de caracteres @displayName
Requiere: N/A
Uso: cambia el nombre de visualización de la opción. Admite formatos distintos de camelCase
para el nombre de visualización. Ejemplo:
@displayName Blueprint Name
Número @defaultEntropy
Requiere: la opción debe ser una cadena.
Uso: agrega a la opción una cadena alfanumérica aleatoria de una longitud específica.
Ejemplo:
@defaultEntropy 5
Cadena @placeholder (opcional)
Requiere: N/A
Uso: cambia el marcador de posición del campo de texto predeterminado.
Ejemplo:
@placeholder type project name here
Número @textArea (opcional)
Requiere: N/A
Uso: convierte la entrada de cadena en un componente de área de texto para secciones de texto más grandes. Al añadir un número se define el número de filas. El valor predeterminado es de cinco filas.
Ejemplo:
@textArea 10
Booleano @hidden (opcional)
Requiere: N/A
Uso: oculta el archivo al usuario a menos que se produzca un error en la comprobación de validación. El valor predeterminado es true.
Ejemplo:
@hidden
Booleano @button (opcional)
Requiere: N/A
Uso: la anotación debe estar en una propiedad booleana. Agrega un botón que se sintetizará como true cuando se seleccione. No es un conmutador.
Ejemplo:
buttonExample: boolean;
/** * @button */ buttonExample: boolean;
Booleano @showName (opcional)
Requiere: N/A
Uso: solo se puede usar en un tipo de conexión de cuenta. Muestra la entrada de nombre oculta. El valor predeterminado es
default_environment
.Ejemplo:
@showName true
/** * @showName true */ accountConnection: AccountConnection<{ ... }>;
Booleano @showEnvironmentType (opcional)
Requiere: N/A
Uso: solo se puede usar en un tipo de conexión de cuenta. Muestra el menú desplegable de tipos de entornos ocultos. Todas las conexiones se establecen de forma predeterminada en
production
. Las opciones son Non-production o Production.Ejemplo:
@showEnvironmentType true
/** * @showEnvironmentType true */ accountConnection: AccountConnection<{ ... }>;
Booleano @forceDefault (opcional)
Requiere: N/A
Uso: utiliza el valor predeterminado proporcionado por el autor del esquema en lugar del valor que utilizaba anteriormente el usuario.
Ejemplo:
forceDeafultExample: any;
/** * @forceDefault */ forceDeafultExample: any;
blueprintName @requires
Requiere: anota la interfaz
Options
.Uso: advierte al usuario que agregue el
blueprintName
especificado al proyecto como requisito para el esquema actual.Ejemplo:
@requires '@amazon-codecatalyst/blueprints.blueprint-builder'
/* * @requires '@amazon-codecatalyst/blueprints.blueprint-builder' */ export interface Options extends ParentOptions { ...
Expresión regular @filter
Requiere: anota la interfaz
Selector
oMultiSelect
.Uso: filtra el menú desplegable del asistente según las opciones que coincidan con la expresión regular especificada.
Ejemplo:
@filter /blueprintPackageName/
/** * @filter /myPackageName/ */ blueprintInstantiation?: Selector<BlueprintInstantiation>; ...
Tipos de TypeScript compatibles
Los siguientes tipos de TypeScript son compatibles con las Options
de un esquema personalizado en el asistente de front-end.
Número
Requiere: la opción debe ser de tipo
number
.Uso: genera un campo de entrada numérico.
Ejemplo:
age: number
{ age: number ... }
Cadena
Requiere: la opción debe ser de tipo
string
.Uso: genera un campo de entrada de cadena.
Ejemplo:
name: string
{ age: string ... }
Lista de cadenas
Requiere: la opción debe ser una matriz de tipo
string
.Uso: genera una entrada de lista de cadenas.
Ejemplo:
isProduction: boolean
{ isProduction: boolean ... }
Casillla de verificación
Requiere: la opción debe ser un
boolean
.Uso: genera una casilla de verificación.
Ejemplo:
isProduction: boolean
{ isProduction: boolean ... }
Botón de opción
Requiere: la opción de ser una unión de tres cadenas o menos.
Uso: genera un botón de opción seleccionado.
nota
Cuando hay cuatro o más elementos, este tipo se representa como un menú desplegable.
Ejemplo:
color: 'red' | 'blue' | 'green'
{ color: 'red' | 'blue' | 'green' ... }
Lista desplegable
Requiere: la opción de ser una unión de cuatro cadenas o más.
Uso: genera un menú desplegable.
Ejemplo:
runtimes: 'nodejs' | 'python' | 'java' | 'dotnetcore' | 'ruby'
{ runtimes: 'nodejs' | 'python' | 'java' | 'dotnetcore' | 'ruby' ... }
Sección ampliable
Requiere: la opción debe ser un objeto.
Uso: genera una sección ampliable. Las opciones del objeto se anidarán dentro de la sección ampliable del asistente.
Ejemplo:
{ expandableSectionTitle: { nestedString: string; nestedNumber: number; } }
Tupla
Requiere: la opción debe ser de tipo
Tuple
.Uso: genera una entrada de par clave-valor.
Ejemplo:
tuple: Tuple[string, string]>
{ tuple: Tuple[string, string]>; ... }
Lista de tuplas
Requiere: la opción debe ser una matriz de tipo
Tuple
.Uso: genera una entrada de lista de tuplas.
Ejemplo:
tupleList: Tuple[string, string]>[]
{ tupleList: Tuple[string, string]>[]; ... }
Selector
Requiere: la opción debe ser de tipo
Selector
.Uso: genera un menú desplegable con los repositorios de código fuente o los esquemas aplicados a un proyecto.
Ejemplo:
sourceRepo: Selector<SourceRepository>
{ sourceRepo: Selector<SourceRepository>; sourceRepoOrAdd: Selector<SourceRepository | string>; blueprintInstantiation: Selector<BlueprintInstantiation>; ... }
Selección múltiple
Requiere: la opción debe ser de tipo
Selector
.Uso: genera una entrada de selección múltiple.
Ejemplo:
multiselect: MultiSelect['A' | 'B' | 'C' | 'D' | 'E']>
{ multiselect: MultiSelect['A' | 'B' | 'C' | 'D' | 'E']>; ... }
Comunicación con el usuario durante la síntesis
En calidad de autor de un esquema, puede comunicarse con los usuarios más allá de los mensajes de validación. Por ejemplo, un miembro del espacio podría ver una combinación de opciones que genere un esquema que no esté claro. Los esquemas personalizados permiten comunicar los mensajes de error a los usuarios mediante la invocación de la síntesis. El esquema de base implementa una función throwSynthesisError(...)
que espera un mensaje de error claro. Puede invocar el mensaje mediante lo siguiente:
//blueprint.ts this.throwSynthesisError({ name: BlueprintSynthesisErrorTypes.BlueprintSynthesisError, message: 'hello from the blueprint! This is a custom error communicated to the user.' })