- Notifications
You must be signed in to change notification settings - Fork0
TypeScript extension for Yellicode, an extensible code generator
License
yellicode/typescript-extension
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Generate TypeScript code using powerful TypeScript code generation templates! ThisYellicode extension lets you generate TypeScript classes, interfaces, enumerations and their members from different kinds of models, using a fully typed code writer.
License: MIT
Yellicode lets you build your own code generation templates with TypeScript. It consists of a Node.js CLI and extensible APIs, making it easy for developers to create, share and re-use code generators for their favorite programming languages and frameworks.
Check outour website for more.
In order to run a code generation template, you must have the CLI installed (@yellicode/cli) globally and have a validcodegenconfig.json file in your working directory. Please refer to theinstallation instructions and thequick start for more.
Open a terminal/command prompt in your working directory and install this package as a dev dependency:
npm install @yellicode/typescript --save-dev
The main class for generating TypeScript code is theTypeScriptWriter
. TheTypeScriptWriter
can work with 2 different model kinds as input:
- A TypeScript code definition.
- AYellicode model.
MostTypeScriptWriter
functions have 2 overloads which can be used for each different kind of input. For example, thewriteClassBlock
function has thefollowing overloads:
public writeClassBlock(cls: ClassDefinition, contents: (writer: TypeScriptWriter) => void): void
public writeClassBlock(cls: elements.Type, contents: (writer: TypeScriptWriter) => void, options?: opts.ClassOptions): void
The first overload accepts aClassDefinition
, which has the following structure (comments left out for brevity):
exportinterfaceClassDefinitionextendsTypeDefinition{isAbstract?:boolean;implements?:string[];extends?:string[];properties?:PropertyDefinition[];}
When using this overload, you should build the definition in your code generation template. You can do this manually, but typically you wouldconfigure a JSON file as model (see theYellicode quick start for a how-to) and transform that JSON structure to a TypeScript definition.
The second overload accepts aclass instance from a Yellicode model and accepts an optionalClassOptions
object to control code generation (internally, the Yellicode class is transformed to aClassDefinition
).
Note: a ZIP archive with working examples is alsoavailable for download here.
This sample creates a simple TypeScript definition of aTask class, which is then provided to theTypeScriptWriter
. You would typically create this definition from another structure (your own JSON model, using the 'model' parameter).
import{TextWriter}from'@yellicode/core';import{Generator}from'@yellicode/templating';import{TypeScriptWriter,ClassDefinition}from'@yellicode/typescript';Generator.generate({outputFile:'./custom-sample.ts'},(output:TextWriter)=>{constclassDefinition:ClassDefinition={name:'Task',export:true,description:['Represents an activity to be done.']};classDefinition.properties=[{name:'TaskDescription',typeName:'string',accessModifier:'public',description:['Gets or sets a description of the task.']},{name:'IsFinished',typeName:'boolean',accessModifier:'public',description:['Indicates if the task is finished.']}];constts=newTypeScriptWriter(output);ts.writeClassBlock(classDefinition,()=>{classDefinition.properties.forEach(p=>{ts.writeProperty(p);ts.writeLine();})});});
The generated TypeScript code will look as follows:
/*** Represents an activity to be done.*/exportclassTask{/*** Gets or sets a description of the task.*/publicTaskDescription:string;/*** Indicates if the task is finished.*/publicIsFinished:boolean;}
For navigating a Yellicode model in template code, you should also have the@yellicode/elements package installed in your working directory:
npm install @yellicode/elements --save-dev
This template generates a TypeScript code file with all classes in the model and, for each class, write property for each class attribute.
import{TextWriter}from'@yellicode/core';import{Generator}from'@yellicode/templating';import{TypeScriptWriter}from'@yellicode/typescript';import*aselementsfrom'@yellicode/elements';Generator.generateFromModel({outputFile:'./model-based-sample.ts'},(output:TextWriter,model:elements.Model)=>{constts=newTypeScriptWriter(output);model.getAllClasses().forEach(cls=>{ts.writeClassBlock(cls,()=>{cls.ownedAttributes.forEach(att=>{ts.writeProperty(att);ts.writeLine();});},{export:true});ts.writeLine();});});
For all TypeScriptWriter functions and options, check out theAPI documentation.
About
TypeScript extension for Yellicode, an extensible code generator
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.