@travetto/compiler
Advanced tools
Comparing version 0.0.43 to 0.0.44
@@ -21,3 +21,3 @@ { | ||
"scripts": {}, | ||
"version": "0.0.43" | ||
"version": "0.0.44" | ||
} |
travetto: Compiler | ||
=== | ||
Basis for a more thorough compilation process, including source maps. The compiler also provides the ability for handling | ||
a piple of AST transformations. The framework uses AST transformations to support it's own needs, with the reality that | ||
external modules, or even project code might want to provide it's own transformations. In addition to the loading of transformations | ||
the Compiler module also provides a set of utilities to enhance the transformation process. | ||
The framework, while using [`typescript`](http://typescriptlang.org), has need of some extended functionality. The additional functionality is | ||
* Supports on-the-fly compilation, nothing needs to be compiled ahead of time | ||
* Enhanced AST transformations, and transformer registration | ||
* All AST transformations are single-file based, and runs without access to the `TypeChecker` | ||
* Intelligent caching of source files to minimize recompilation | ||
* Support for watching sources files: | ||
* Detecting changes to files | ||
* Detecting changes to specific classes | ||
* Detecting changes to specific methods within classes | ||
* Allows for hot-reloading of classes during development | ||
* Utilizes `es2015` ```Proxy```s to allow for swapping out implementation at runtime | ||
Transformations are defined by `transformation.*.ts` as the filename. The schema for a transformation is | ||
Additionally, there is support for common AST transformation patterns to facilitate all the transformers used throughout the framework. Functionality includes: | ||
* ```getDecoratorIdent(d: ts.Decorator): ts.Identifier``` | ||
Gets the name of the decorator function | ||
* ```findAnyDecorator(node: ts.Node, patterns: { [key: string]: Set<string> }, state: State): ts.Decorator | undefined ``` | ||
Attempts to find any matching decorators as defined in patterns | ||
* ```addImport(file: ts.SourceFile, imports: Import[])``` | ||
Will add an import to the existing source file | ||
* ```fromLiteral(val: any)``` | ||
Converts a literal value to the corresponding AST nodes | ||
* ```extendObjectLiteral(addTo: object, lit?: ts.ObjectLiteralExpression)``` | ||
Extends an AST Node via a literal value, generally used to emulate ```Object.assign``` in the AST | ||
* ```getPrimaryArgument<T = ts.Node>(node: ts.CallExpression | ts.Decorator | undefined): T | undefined``` | ||
Retrieves the first argument of CallExpression or Decorator | ||
* ```getObjectValue(node: ts.ObjectLiteralExpression | undefined, key: string)``` | ||
Extracts the literal value from an AST node if possible | ||
* ```importingVisitor``` | ||
Provides a transformer visitor that collects imports, and adds them to the source file as needed | ||
* ```importIfExternal<T extends State>(typeNode: ts.TypeNode, state: State)``` | ||
Will import a reference if the type is not defined within the file | ||
* ```buildImportAliasMap(pathToType)``` | ||
Will generate an import lookup to be used for simple type resolution | ||
Transformations are defined by `support/transformation.<name>.ts` as the filename. The schema for a transformer is | ||
```typescript | ||
@@ -16,6 +45,8 @@ export class CustomerTransformer { | ||
transformer: (context: ts.TransformationContext) => { | ||
return (file: ts.SourceFile) => file | ||
return (file: ts.SourceFile) => { | ||
... modify source file ... | ||
return file; | ||
} | ||
} | ||
} | ||
``` | ||
``` |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
28632
51