This repository has been archived by the owner on Dec 5, 2022. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add types definition file * Add example in typescript * Add readme to typescript example * Fix typos. Define type for attributes
- Loading branch information
1 parent
8fbc5aa
commit a12404d
Showing
5 changed files
with
137 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Basis-typescript | ||
|
||
This example shows how to use Tailor with Typescript | ||
|
||
## Run | ||
|
||
Basically there 2 ways to use node with typescript. | ||
In both cases types will be checked and from external point of view they should behave identically. | ||
|
||
### With ts-node | ||
|
||
Install ts-node and just run this file: | ||
|
||
```bash | ||
ts-node ./index.ts | ||
``` | ||
|
||
### Transpile to javascript | ||
|
||
Install TypeScript compiler and execute following; | ||
|
||
```bash | ||
tsc ./index.ts | ||
# Now we have index.js and can run it with node.js | ||
node ./index.js | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import * as http from 'http'; | ||
|
||
import Tailor = require('../../index'); | ||
|
||
const tailor = new Tailor({ | ||
templatesPath: __dirname + '/templates' | ||
}) | ||
|
||
// Root Server | ||
http | ||
.createServer((req, res) => { | ||
tailor.requestHandler(req, res) | ||
}) | ||
.listen(8080, function() { | ||
console.log('Tailor server listening on port 8080'); | ||
}); | ||
|
||
// Fragment server - Any http server that can serve fragments | ||
http | ||
.createServer((req, res) => { | ||
res.writeHead(200, { | ||
'Content-Type': 'text/html' | ||
}); | ||
res.end('<div>Fragment 1</div>'); | ||
}) | ||
.listen(8081, function() { | ||
console.log('Fragment Server listening on port 8081'); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!-- Tailor needs an index.html --> | ||
<h1>Basic</h1> | ||
<fragment src="http://localhost:8081"></fragment> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"compilerOptions": { | ||
"module": "commonjs", | ||
"lib": [ | ||
"es6" | ||
], | ||
"noImplicitAny": true, | ||
"noImplicitThis": true, | ||
"strictNullChecks": false, | ||
"strictFunctionTypes": true, | ||
"baseUrl": "../", | ||
"typeRoots": [ | ||
"../../" | ||
], | ||
"types": [], | ||
"noEmit": true, | ||
"forceConsistentCasingInFileNames": true | ||
}, | ||
"files": [ | ||
"./index.ts", | ||
"./../../index.d.ts" | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/// <reference types="node" /> | ||
|
||
import { EventEmitter } from "events"; | ||
import { Stream } from "stream"; | ||
import { Url } from "url"; | ||
import { IncomingMessage, ServerResponse } from "http"; | ||
|
||
export = Tailor; | ||
|
||
declare class Tailor extends EventEmitter { | ||
/** | ||
* Creates new instance of Tailor | ||
* @param options Parameters to pass to Tailor | ||
* @param options.amdLoaderUrl URL to AMD loader. Default is RequireJS from cdnjs. | ||
* @param options.fetchContext Function that should fetch the template, call parseTemplate and return a promise of the result. Useful to implement your own way to retrieve and cache the templates. Default implementation: serve templates from local path | ||
* @param options.fetchTemplate Function that should fetch the template, call parseTemplate and return a promise of the result | ||
* @param options.filterRequestHeaders Function that filters the request headers that are passed to fragment request | ||
* @param options.filterResponseHeaders Function that maps the given response headers from the primary fragment request to the final response | ||
* @param options.fragmentTag Name of fragment tag | ||
* @param options.handleTags Array of custom tags. | ||
* @param options.handleTag Receives a tag or closing tag and serializes it to a string or returns as stream | ||
* @param options.maxAssetLinks Number of allowed link headers of CSS and JS for per fragment | ||
* @param options.pipeAttributes Function that returns the minimal set of fragment attributes available on the frontend | ||
* @param options.pipeInstanceName Name of pipe instance that available in the browser window object to consume frontend hooks | ||
* @param options.requestFragment Function that returns a promise of request to a fragment server | ||
* @param options.templatesPath Path to local templates | ||
*/ | ||
constructor(options?: { | ||
amdLoaderUrl?: string | ||
, fetchContext?: (req: IncomingMessage) => Promise<object> | ||
, fetchTemplate?: (templatesPath: string, baseTemplateFn: (path: string) => string) => Promise<any> | ||
, filterRequestHeaders?: (attributes: Attributes, req: IncomingMessage) => object | ||
, filterResponseHeaders?: (attributes: Attributes, res: ServerResponse) => object | ||
, fragmentTag?: string | ||
, handledTags?: string[] | ||
, handleTag?: (request: IncomingMessage, tag: object, options: object, context: object) => Stream | string | ||
, maxAssetLinks?: number | ||
, pipeAttributes?: (attributes: Attributes) => object | ||
, pipeInstanceName?: string | ||
, requestFragment?: (filterHeaders: (attributes: Attributes, req: IncomingMessage) => object, url: Url, attributes: Attributes, req: IncomingMessage) => Promise<ServerResponse> | ||
, templatesPath?: string | ||
}) | ||
|
||
requestHandler(request: IncomingMessage, response: ServerResponse): void; | ||
} | ||
|
||
interface Attributes { | ||
id: string, | ||
src: string | ||
async?: boolean | ||
fallbackUrl?: string, | ||
primary?: boolean | ||
public?: boolean | ||
[key: string]: any | ||
} | ||
|
||
|