From 299ad272c4cdbe8ff855c97b150e0c9f9356dc0e Mon Sep 17 00:00:00 2001 From: tomaswyz Date: Mon, 22 Aug 2016 18:36:10 +0800 Subject: [PATCH 1/4] refactor(*): fix the config file change the default config and dir structure --- package.json | 9 +++++---- src/bin/tool.ts | 6 +++++- src/index.ts | 16 +++++++--------- src/test/codeTest.ts | 13 +++++-------- tsconfig.json | 29 ++++++++++++++--------------- 5 files changed, 36 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index 5fdacab..9f9602f 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,12 @@ { "name": "typescriptest", - "version": "1.0.1", + "version": "1.0.2", "description": "some typescript build exp", "main": "dist/index.js", "bin": { "stool": "dist/bin/tool.js" }, - "directories": { - }, + "directories": {}, "dependencies": { "chai": "^3.5.0", "typescript": "^1.8.10", @@ -18,7 +17,9 @@ "mocha": "^3.0.1" }, "scripts": { - "test": "tsc && mocha dist/test" + "start":"ts-node src/bin/tool.ts" + ,"pretest":"tsc typings/index.d.ts src/test/*.ts --outDir dist" + , "test": " mocha dist/test" }, "keywords": [ "typescript", diff --git a/src/bin/tool.ts b/src/bin/tool.ts index f28e620..96e847a 100644 --- a/src/bin/tool.ts +++ b/src/bin/tool.ts @@ -21,4 +21,8 @@ interface Args extends Argv { _: string[] emitter: Emitter } -console.log("some tool") +/* + * + */ +let s = 3 +console.log("some tool"+s) diff --git a/src/index.ts b/src/index.ts index 140e5e4..29841f4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,17 +1,15 @@ import fs = require("fs"); -declare module example { - interface IGreeterService { - greet(name: string):string; - } -} + interface IGreeterService { + greet(name: string):string + } -export default class Greeter implements example.IGreeterService { - greeting: string; +export class Greeter implements IGreeterService { + greeting: string constructor(message: string) { - this.greeting = message; + this.greeting = message } greet(name: string): string { - return this.greeting + " " + name; + return this.greeting + ":" + name } } diff --git a/src/test/codeTest.ts b/src/test/codeTest.ts index 025b63c..bb51ae7 100644 --- a/src/test/codeTest.ts +++ b/src/test/codeTest.ts @@ -1,5 +1,4 @@ - -import Greeter from "../index"; +import * as fst from "../index"; import chai = require('chai'); /** @@ -27,14 +26,12 @@ describe('User Model Unit Tests:', () => { }); describe('Greeter-test', function () { - var subject : Greeter; - + var subject : fst.Greeter; beforeEach(function () { - subject = new Greeter("Hello"); + subject = new fst.Greeter("Hello"); }); - it('should execute', function () { + it('greet string should equals', function () { var ret = subject.greet("wooz"); - - expect(ret).to.equals("Hello wooz"); + expect(ret).to.equals("Hello:wooz"); }) }) diff --git a/tsconfig.json b/tsconfig.json index 89540e4..a907f63 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,24 +1,23 @@ { - "filesGlob" :[ - "src/**/*.ts" - ] , + "filesGlob": [ + "src/**/*.ts" + ], "files": [ - "typings/index.d.ts" - ,"src/index.ts" + "typings/index.d.ts", + "src/index.ts" + , "src/bin/tool.ts" ], - "compileOnSave": false, "compilerOptions": { "outDir": "dist/", "moduleResolution": "node", "noImplicitAny": true, - "target": "es5" - ,"sourceMap": true - ,"module": "commonjs" - ,"newLine": "LF" - } -,"exclude": [ - "node_modules" - ] - + "target": "es6", + "sourceMap": false, + "module": "commonjs", + "newLine": "LF" + }, + "exclude": [ + "node_modules" + ] } From 793abc66fe1d0185297bad71eee3a890e63e8d21 Mon Sep 17 00:00:00 2001 From: tomaswyz Date: Tue, 23 Aug 2016 00:49:59 +0800 Subject: [PATCH 2/4] feat(pkg): add the koa supported add the koa framework supported --- package.json | 18 ++++++++++---- src/bin/restrun.ts | 52 +++++++++++++++++++++++++++++++++++++++++ src/index.ts | 12 +++++++--- src/lib/.oauth2.ts.swp | Bin 0 -> 12288 bytes src/lib/oauth2.ts | 20 ++++++++++++++++ src/lib/reflect.ts | 14 +++++++++++ src/test/codeTest.ts | 8 +++---- tsconfig.json | 5 ++++ typings.json | 13 ++++++++--- 9 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 src/bin/restrun.ts create mode 100644 src/lib/.oauth2.ts.swp create mode 100644 src/lib/oauth2.ts create mode 100644 src/lib/reflect.ts diff --git a/package.json b/package.json index 9f9602f..9ec5fa2 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,23 @@ { "name": "typescriptest", - "version": "1.0.2", + "version": "1.0.3", "description": "some typescript build exp", "main": "dist/index.js", "bin": { - "stool": "dist/bin/tool.js" + "stool": "dist/bin/tool.js", + "restrun": "dist/bin/restrun.js" + }, + "typings": "typings.d.ts", + "typescript": { + "definition": "Somelib.d.ts" }, "directories": {}, "dependencies": { "chai": "^3.5.0", + "cookies": "0.6.1", + "koa": "^2.0.0", + "node-oauth2-server": "^2.4.0", + "ts-router": "^0.2.6", "typescript": "^1.8.10", "typescript-require": "^0.2.9-1", "typings-core": "^1.4.0" @@ -17,9 +26,8 @@ "mocha": "^3.0.1" }, "scripts": { - "start":"ts-node src/bin/tool.ts" - ,"pretest":"tsc typings/index.d.ts src/test/*.ts --outDir dist" - , "test": " mocha dist/test" + "start": "ts-node src/bin/restrun.ts", + "test": "tsc && mocha dist/test" }, "keywords": [ "typescript", diff --git a/src/bin/restrun.ts b/src/bin/restrun.ts new file mode 100644 index 0000000..b7b18c4 --- /dev/null +++ b/src/bin/restrun.ts @@ -0,0 +1,52 @@ + +import * as tsRouter from 'ts-router'; +import * as Koa from 'koa'; +import * as oauthserver from "oauth2-server"; + +const app = new Koa(); +const router = new tsRouter. Router(); + + +class User{ +name :string +password :string + +constructor(name:string,password:string) { + this.name = name + this.password = password +} +} +@tsRouter.Path('/test') +class TestController extends tsRouter.Controller { + @tsRouter.PathParam('v1') private v1:string; + private v2:string; + constructor() { + super(); + this.v1 = this.v1 + this.v1; + } + + @tsRouter.Path('/:v1/:v2') + @tsRouter.GET + @tsRouter.Produce(tsRouter.MediaType.JSON) + async index(@tsRouter.Params params:Object):Promise { + let v1 = this.v1; + let v2 = this.v2; + return tsRouter.Response.status(200).body({v1, v2, params}).build(); + } + + @tsRouter.Before + async before(@tsRouter.PathParam('v2') v2:string) { + this.v2 = v2; + } +} + +router.use(TestController); +let oauth = oauthserver({ + model: {}, + grants: ['password'], + debug: true +}); +app.use(router.routes()); +app.listen(3000); + +console.log('started at http://localhost:3000'); diff --git a/src/index.ts b/src/index.ts index 29841f4..fbaa9bc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,14 +1,20 @@ -import fs = require("fs"); - interface IGreeterService { +import * as fst from "./lib/reflect"; +//import fs = require("fs"); +export interface IGreeterService { greet(name: string):string } export class Greeter implements IGreeterService { + @fst.format("Hello:%s") greeting: string constructor(message: string) { this.greeting = message } - greet(name: string): string { + greet(){ + let formatString = fst.getFormat(this, "greeting"); + return formatString.replace("%s", this.greeting); + } + greetbyname(name: string): string { return this.greeting + ":" + name } } diff --git a/src/lib/.oauth2.ts.swp b/src/lib/.oauth2.ts.swp new file mode 100644 index 0000000000000000000000000000000000000000..e8f4bd03ff149e8ce14fe51766de6614aa588c2a GIT binary patch literal 12288 zcmeI2y>1gh5XUzZNFaspifV8QCt!OMClcsPiYOHYqJWShieP&J`(V-AlADYu`O3FSl6_cF6)U{&H|YI<6F7fL_Qvpa7ry~~z9_^;@EW`TBhUvLtb+yc3Gwg1OOSve7=Rv7;3;T;BJVkH7JNaS z58yrE!3Nj>8(;%$fDNz#Hoykh02^Qf|7#%Dp2{w1TCZlO?Y_2)Ci9U=|Gn#$I--aG z@yQ~qtPZs%l%RDx4yvhvZtm2(V5gob=MIeR)pu#y5dshiFm2%D$FSPxHbsu2z1!I6 zP!$imiG%^Iv{#F75;?W6H~!r3=V@3(FD}spQM2Ef2r^!M2Y%tgRJgFR)>De zMlL|q(EBWqQa@8k7VB1M5*c=@BM=R=-;5)j`hb2bE+sv%4GL8pN9lkR747Uz=f|-w z7rSVoZ~guBIqoW;$&{uz2&!y^p?2<(8R>LZsclUz&oW~@f>UjkH`cYv8!YdlxD^p4 ZWx!2R?&tS``qm^=tNQ7i)jLw_i0_*Y^56gf literal 0 HcmV?d00001 diff --git a/src/lib/oauth2.ts b/src/lib/oauth2.ts new file mode 100644 index 0000000..a1176dc --- /dev/null +++ b/src/lib/oauth2.ts @@ -0,0 +1,20 @@ +import * as oauthserver from "oauth2-server"; +let model = { + // We support generators. + getAccessToken: function() { + return { user: {} } + }, + + // Or, calling a node-style callback. + getClient: function() { + return { grants: ['authorization_code'], redirectUris: ['http://example.com/cb'] }; + }, + saveAuthorizationCode: function() { + return { authorizationCode: 123 }; + }, + + +}; + +let options = { model: model,grants:['password'] }; +let oauth = oauthserver(options); diff --git a/src/lib/reflect.ts b/src/lib/reflect.ts new file mode 100644 index 0000000..e4e596b --- /dev/null +++ b/src/lib/reflect.ts @@ -0,0 +1,14 @@ +import "reflect-metadata"; + +const formatMetadataKey = Symbol("format"); + +export function format(formatString: string) { + return Reflect.metadata(formatMetadataKey, formatString); +} + +export function getFormat(target: any, propertyKey: string) { + return Reflect.getMetadata(formatMetadataKey, target, propertyKey); +} + + + diff --git a/src/test/codeTest.ts b/src/test/codeTest.ts index bb51ae7..aa6eff3 100644 --- a/src/test/codeTest.ts +++ b/src/test/codeTest.ts @@ -1,5 +1,5 @@ import * as fst from "../index"; -import chai = require('chai'); +import * as chai from 'chai'; /** * Globals @@ -26,12 +26,12 @@ describe('User Model Unit Tests:', () => { }); describe('Greeter-test', function () { - var subject : fst.Greeter; + let subject : fst.Greeter; beforeEach(function () { - subject = new fst.Greeter("Hello"); + subject = new fst.Greeter("wooz"); }); it('greet string should equals', function () { - var ret = subject.greet("wooz"); + let ret = subject.greet(); expect(ret).to.equals("Hello:wooz"); }) }) diff --git a/tsconfig.json b/tsconfig.json index a907f63..4a5233c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,9 @@ "typings/index.d.ts", "src/index.ts" , "src/bin/tool.ts" + , "src/bin/restrun.ts" + , "src/lib/oauth2.ts" + , "src/test/codeTest.ts" ], "compileOnSave": false, "compilerOptions": { @@ -16,6 +19,8 @@ "sourceMap": false, "module": "commonjs", "newLine": "LF" + ,"experimentalDecorators": true +,"emitDecoratorMetadata":true }, "exclude": [ "node_modules" diff --git a/typings.json b/typings.json index df367a1..a83fdb9 100644 --- a/typings.json +++ b/typings.json @@ -1,10 +1,17 @@ { "dependencies": { - "chai": "registry:npm/chai#3.5.0+20160723033700" -,"typings-core": "npm:typings-core" + "chai": "registry:npm/chai#3.5.0+20160723033700", + "typings-core": "npm:typings-core" }, "globalDependencies": { + "cookies": "registry:dt/cookies#0.5.1+20160316171810", + "express": "registry:dt/express#4.0.0+20160708185218", + "express-serve-static-core": "registry:dt/express-serve-static-core#4.0.0+20160819131900", + "koa": "registry:dt/koa#2.0.0+20160724024233", + "mime": "registry:dt/mime#0.0.0+20160316155526", "mocha": "registry:dt/mocha#2.2.5+20160720003353", - "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#48c1e3c1d6baefa4f1a126f188c27c4fefd36bff" + "node": "registry:dt/node#6.0.0+20160818175514", + "oauth2-server": "registry:dt/oauth2-server#0.0.0+20160317120654", + "serve-static": "registry:dt/serve-static#0.0.0+20160606155157" } } From 9b0c3319aa15223fb1708dcf897139fe788ea688 Mon Sep 17 00:00:00 2001 From: tomaswyz Date: Fri, 26 Aug 2016 23:57:21 +0800 Subject: [PATCH 3/4] feat(*): add the oauth2 test --- package.json | 2 +- src/bin/restrun.ts | 36 ++++++++++++--- src/lib/.oauth2.ts.swp | Bin 12288 -> 0 bytes src/lib/oauth2.ts | 102 +++++++++++++++++++++++++++++++++-------- 4 files changed, 115 insertions(+), 25 deletions(-) delete mode 100644 src/lib/.oauth2.ts.swp diff --git a/package.json b/package.json index 9ec5fa2..7c0c2c0 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "chai": "^3.5.0", "cookies": "0.6.1", "koa": "^2.0.0", - "node-oauth2-server": "^2.4.0", + "oauth2-server": "^2.4.1", "ts-router": "^0.2.6", "typescript": "^1.8.10", "typescript-require": "^0.2.9-1", diff --git a/src/bin/restrun.ts b/src/bin/restrun.ts index b7b18c4..23a2893 100644 --- a/src/bin/restrun.ts +++ b/src/bin/restrun.ts @@ -1,9 +1,10 @@ import * as tsRouter from 'ts-router'; import * as Koa from 'koa'; -import * as oauthserver from "oauth2-server"; - +import * as mem from '../lib/oauth2'; +let oauthServer = require('oauth2-server'); const app = new Koa(); +const oamodel = new mem.InMemoryCache(); const router = new tsRouter. Router(); @@ -16,7 +17,7 @@ constructor(name:string,password:string) { this.password = password } } -@tsRouter.Path('/test') +@tsRouter.Path('/:version') class TestController extends tsRouter.Controller { @tsRouter.PathParam('v1') private v1:string; private v2:string; @@ -25,6 +26,14 @@ class TestController extends tsRouter.Controller { this.v1 = this.v1 + this.v1; } + @tsRouter.Path('/grant') + @tsRouter.POST + @tsRouter.Consume(tsRouter.MediaType.JSON) + @tsRouter.Produce(tsRouter.MediaType.JSON) + async grant(@tsRouter.Body body:Object):Promise { + return tsRouter.Response.status(200).body({body}).build(); + } + @tsRouter.Path('/:v1/:v2') @tsRouter.GET @tsRouter.Produce(tsRouter.MediaType.JSON) @@ -35,18 +44,33 @@ class TestController extends tsRouter.Controller { } @tsRouter.Before - async before(@tsRouter.PathParam('v2') v2:string) { + + + async before(@tsRouter.PathParam('version') v2:string,@tsRouter.AppContext context:tsRouter.Context) { this.v2 = v2; } + + } router.use(TestController); -let oauth = oauthserver({ - model: {}, +let oauth = oauthServer({ + model: oamodel, grants: ['password'], debug: true }); + + + app.use(router.routes()); + +/* +app.use(oauth.authorise()) +app.use( async (ctx, next) => { + this.body = "hello" + await next(); +}); +*/ app.listen(3000); console.log('started at http://localhost:3000'); diff --git a/src/lib/.oauth2.ts.swp b/src/lib/.oauth2.ts.swp deleted file mode 100644 index e8f4bd03ff149e8ce14fe51766de6614aa588c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2y>1gh5XUzZNFaspifV8QCt!OMClcsPiYOHYqJWShieP&J`(V-AlADYu`O3FSl6_cF6)U{&H|YI<6F7fL_Qvpa7ry~~z9_^;@EW`TBhUvLtb+yc3Gwg1OOSve7=Rv7;3;T;BJVkH7JNaS z58yrE!3Nj>8(;%$fDNz#Hoykh02^Qf|7#%Dp2{w1TCZlO?Y_2)Ci9U=|Gn#$I--aG z@yQ~qtPZs%l%RDx4yvhvZtm2(V5gob=MIeR)pu#y5dshiFm2%D$FSPxHbsu2z1!I6 zP!$imiG%^Iv{#F75;?W6H~!r3=V@3(FD}spQM2Ef2r^!M2Y%tgRJgFR)>De zMlL|q(EBWqQa@8k7VB1M5*c=@BM=R=-;5)j`hb2bE+sv%4GL8pN9lkR747Uz=f|-w z7rSVoZ~guBIqoW;$&{uz2&!y^p?2<(8R>LZsclUz&oW~@f>UjkH`cYv8!YdlxD^p4 ZWx!2R?&tS``qm^=tNQ7i)jLw_i0_*Y^56gf diff --git a/src/lib/oauth2.ts b/src/lib/oauth2.ts index a1176dc..9dc6c20 100644 --- a/src/lib/oauth2.ts +++ b/src/lib/oauth2.ts @@ -1,20 +1,86 @@ -import * as oauthserver from "oauth2-server"; -let model = { - // We support generators. - getAccessToken: function() { - return { user: {} } - }, - - // Or, calling a node-style callback. - getClient: function() { - return { grants: ['authorization_code'], redirectUris: ['http://example.com/cb'] }; - }, - saveAuthorizationCode: function() { - return { authorizationCode: 123 }; - }, - - + +export class InMemoryCache { + clients :{ [key:string] : any}[] + tokens:{ [key:string] : string}[] + users:{ [key:string] : string}[] +constructor(){ + this.clients = [{ clientId : 'thom', clientSecret : 'nightworld', 'redirectUris' : [''] }]; + this.tokens = []; + this.users = [{ id : '123', username: 'thomseddon', password: 'nightworld' }]; +} + +/** + * Dump the cache. + */ + +dump() { + console.log('clients', this.clients); + console.log('tokens', this.tokens); + console.log('users', this.users); +}; + +/* + * Get access token. + */ + + async getAccessToken (bearerToken:string) { + var tokens = this.tokens.filter(function(token) { + return token [ 'accessToken' ] === bearerToken; + }); + + return tokens.length ? tokens[0] : false; +}; + + +/** + * Get refresh token. + */ + +async getRefreshToken(bearerToken:string) { + let tokens = this.tokens.filter(function(token) { + return token [ 'refreshToken' ] === bearerToken; + }); + + return tokens.length ? tokens[0] : false; }; -let options = { model: model,grants:['password'] }; -let oauth = oauthserver(options); + +/** + * Get client. + */ + +async getClient(clientId:string, clientSecret:string) { + let clients = this.clients.filter(function(client) { + return client [ 'clientId' ] === clientId && client [ 'clientSecret' ] === clientSecret; + }); + + return clients.length ? clients[0] : false; +}; + +/** + * Save token. + */ + +async saveToken (token:any, client:any, user:any) { + this.tokens.push({ + accessToken: token['accessToken'], + accessTokenExpiresAt: token['accessTokenExpiresAt'], + clientId: client['clientId'], + refreshToken: token [ 'refreshToken' ], + refreshTokenExpiresAt: token [ 'refreshTokenExpiresAt' ], + userId: user [ 'id' ] + }); +}; + +/* + * Get user. + */ + +async getUser (username:string, password:string) { + let users = this.users.filter(function(user) { + return user['username'] === username && user [ 'password' ] === password; + }); + + return users.length ? users[0] : false; +}; +} From 59b9a432cbfc05cc0a8a240ed146089f045fe174 Mon Sep 17 00:00:00 2001 From: tomaswyz Date: Sun, 25 Sep 2016 00:15:33 +0800 Subject: [PATCH 4/4] chore(*): update all version --- package.json | 4 ++-- src/bin/restrun.ts | 1 - src/bin/tool.ts | 2 +- tsconfig.json | 1 - typings.json | 4 ++-- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 7c0c2c0..79b4763 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ "koa": "^2.0.0", "oauth2-server": "^2.4.1", "ts-router": "^0.2.6", - "typescript": "^1.8.10", + "typescript": "^2.0.3", "typescript-require": "^0.2.9-1", - "typings-core": "^1.4.0" + "typings-core": "^1.5.0" }, "devDependencies": { "mocha": "^3.0.1" diff --git a/src/bin/restrun.ts b/src/bin/restrun.ts index 23a2893..2fc75dd 100644 --- a/src/bin/restrun.ts +++ b/src/bin/restrun.ts @@ -1,4 +1,3 @@ - import * as tsRouter from 'ts-router'; import * as Koa from 'koa'; import * as mem from '../lib/oauth2'; diff --git a/src/bin/tool.ts b/src/bin/tool.ts index 96e847a..cec725f 100644 --- a/src/bin/tool.ts +++ b/src/bin/tool.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env node +/// import { Emitter } from 'typings-core' interface Argv { help: boolean diff --git a/tsconfig.json b/tsconfig.json index 4a5233c..d3e167d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,6 @@ "src/**/*.ts" ], "files": [ - "typings/index.d.ts", "src/index.ts" , "src/bin/tool.ts" , "src/bin/restrun.ts" diff --git a/typings.json b/typings.json index a83fdb9..9df6afa 100644 --- a/typings.json +++ b/typings.json @@ -6,11 +6,11 @@ "globalDependencies": { "cookies": "registry:dt/cookies#0.5.1+20160316171810", "express": "registry:dt/express#4.0.0+20160708185218", - "express-serve-static-core": "registry:dt/express-serve-static-core#4.0.0+20160819131900", + "express-serve-static-core": "registry:dt/express-serve-static-core#4.0.0+20160923124352", "koa": "registry:dt/koa#2.0.0+20160724024233", "mime": "registry:dt/mime#0.0.0+20160316155526", "mocha": "registry:dt/mocha#2.2.5+20160720003353", - "node": "registry:dt/node#6.0.0+20160818175514", + "node": "registry:dt/node#6.0.0+20160923124626", "oauth2-server": "registry:dt/oauth2-server#0.0.0+20160317120654", "serve-static": "registry:dt/serve-static#0.0.0+20160606155157" }