From 5be0add949acbc461c7efa7d3ecdb2db3702fafa Mon Sep 17 00:00:00 2001 From: TZ Date: Thu, 29 Mar 2018 11:54:28 +0800 Subject: [PATCH 01/10] feat: update to new egg-bin --- hackernews-async-ts/.autod.conf.js | 4 + hackernews-async-ts/.gitignore | 84 ++++--------------- hackernews-async-ts/.vscode/settings.json | 2 +- hackernews-async-ts/app/controller/index.d.ts | 6 -- hackernews-async-ts/app/router.ts | 11 +-- hackernews-async-ts/app/service/index.d.ts | 6 -- hackernews-async-ts/package.json | 36 ++++---- .../test/app/controller/news.test.ts | 12 +-- .../test/app/service/HackerNews.test.ts | 8 +- hackernews-async-ts/tsconfig.json | 7 +- .../typings/app/controller/index.d.ts | 10 +++ .../typings/app/service/index.d.ts | 10 +++ 12 files changed, 70 insertions(+), 126 deletions(-) delete mode 100644 hackernews-async-ts/app/controller/index.d.ts delete mode 100644 hackernews-async-ts/app/service/index.d.ts create mode 100644 hackernews-async-ts/typings/app/controller/index.d.ts create mode 100644 hackernews-async-ts/typings/app/service/index.d.ts diff --git a/hackernews-async-ts/.autod.conf.js b/hackernews-async-ts/.autod.conf.js index 4d1fb4a..96fdfa1 100644 --- a/hackernews-async-ts/.autod.conf.js +++ b/hackernews-async-ts/.autod.conf.js @@ -10,6 +10,10 @@ module.exports = { ], dep: [ 'egg', + 'egg-scripts', + 'egg-view-nunjucks', + 'moment', + 'source-map-support', ], devdep: [ 'autod', diff --git a/hackernews-async-ts/.gitignore b/hackernews-async-ts/.gitignore index faf57fa..59af3eb 100644 --- a/hackernews-async-ts/.gitignore +++ b/hackernews-async-ts/.gitignore @@ -1,71 +1,19 @@ +logs/ +npm-debug.log +node_modules/ +coverage/ +.idea/ +run/ +logs/ +.DS_Store +.vscode +*.swp +*.lock +*.js + app/**/*.js test/**/*.js config/**/*.js -*.map -run -logs - -# Created by https://www.gitignore.io/api/node - -### Node ### -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - - -# End of https://www.gitignore.io/api/node +app/**/*.map +test/**/*.map +config/**/*.map \ No newline at end of file diff --git a/hackernews-async-ts/.vscode/settings.json b/hackernews-async-ts/.vscode/settings.json index db221e0..3a503d1 100644 --- a/hackernews-async-ts/.vscode/settings.json +++ b/hackernews-async-ts/.vscode/settings.json @@ -2,7 +2,7 @@ "files.exclude": { "USE_GITIGNORE": true, "**/*.js": { - "when": "$(basename).ts" + // "when": "$(basename).ts" }, "**/*.map": true, "run": true, diff --git a/hackernews-async-ts/app/controller/index.d.ts b/hackernews-async-ts/app/controller/index.d.ts deleted file mode 100644 index 0b8bebb..0000000 --- a/hackernews-async-ts/app/controller/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import NewsController from './news'; -declare module 'egg' { - export interface IController { - news: NewsController; - } -} diff --git a/hackernews-async-ts/app/router.ts b/hackernews-async-ts/app/router.ts index 4d5d311..50a9d49 100644 --- a/hackernews-async-ts/app/router.ts +++ b/hackernews-async-ts/app/router.ts @@ -1,9 +1,10 @@ import { Application } from 'egg'; export default (app: Application) => { - const controller = app.controller; - app.redirect('/', '/news'); - app.router.get('/news', controller.news.list); - app.router.get('/news/item/:id', controller.news.detail); - app.router.get('/news/user/:id', controller.news.user); + const { controller, router } = app; + + // router.redirect('/', '/news'); + router.get('/news', controller.news.list); + router.get('/news/item/:id', controller.news.detail); + router.get('/news/user/:id', controller.news.user); }; diff --git a/hackernews-async-ts/app/service/index.d.ts b/hackernews-async-ts/app/service/index.d.ts deleted file mode 100644 index 95157d8..0000000 --- a/hackernews-async-ts/app/service/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import HackerNews from './HackerNews'; -declare module 'egg' { - export interface IService { - hackerNews: HackerNews; - } -} diff --git a/hackernews-async-ts/package.json b/hackernews-async-ts/package.json index 45ef869..b10f535 100644 --- a/hackernews-async-ts/package.json +++ b/hackernews-async-ts/package.json @@ -4,12 +4,11 @@ "description": "hackernews showcase using async/await for egg", "private": true, "dependencies": { - "egg": "^2.0.0", - "egg-view-nunjucks": "^2.1.4", - "moment": "^2.19.4", - "source-map-support": "^0.5.0", - "tslib": "^1.8.1", - "typescript": "^2.6.2" + "egg": "^2.5.0", + "egg-scripts": "^2.5.1", + "egg-view-nunjucks": "^2.2.0", + "moment": "^2.21.0", + "source-map-support": "^0.5.4" }, "devDependencies": { "@types/cheerio": "^0.22.1", @@ -19,25 +18,28 @@ "autod": "^3.0.1", "autod-egg": "^1.1.0", "cheerio": "^1.0.0-rc.2", - "egg-bin": "^4.3.7", - "egg-mock": "^3.14.0", + "egg-bin": "^4.5.0", + "egg-mock": "^3.16.0", + "egg-ts-helper": "^1.1.3", "rimraf": "^2.6.1", - "tslint": "^4.0.0" + "tslib": "^1.8.1", + "tslint": "^4.0.0", + "typescript": "^2.6.2" }, "engines": { "node": ">=8.9.0" }, "scripts": { - "clean": "rimraf app/**/*.{js,map} test/**/*.{js,map} config/**/*.{js,map}", - "tsc": "tsc -p tsconfig.json", - "tsc:w": "tsc -p tsconfig.json -w", - "debug": "egg-bin debug", - "dev": "egg-bin dev", - "test": "npm run tsc && npm run test-local", - "test-local": "egg-bin test", - "cov": "egg-bin cov", + "start": "egg-scripts start", + "dev": "egg-bin dev --ts -r 'egg-ts-helper/register'", + "tsc": "ets && tsc -p tsconfig.json", + "clean": "rimraf ./app.js ./agent.js ./{app,test,config}/**/*.{js,map}", + "test": "npm run lint -- --fix && npm run test-local", + "test-local": "EGG_TYPESCRIPT=true egg-bin test --ts -r 'egg-ts-helper/register'", + "cov": "EGG_TYPESCRIPT=true egg-bin cov --ts", "lint": "tslint .", "ci": "npm run lint && npm run cov", + "debug": "egg-bin debug --ts", "autod": "autod" } } diff --git a/hackernews-async-ts/test/app/controller/news.test.ts b/hackernews-async-ts/test/app/controller/news.test.ts index df93b56..49574dd 100644 --- a/hackernews-async-ts/test/app/controller/news.test.ts +++ b/hackernews-async-ts/test/app/controller/news.test.ts @@ -1,19 +1,9 @@ 'use strict'; -import * as assert from 'assert'; import * as cheerio from 'cheerio'; -import mm from 'egg-mock'; +import { app, assert } from 'egg-mock/bootstrap'; describe('test/app/controller/news.test.ts', () => { - const app = mm.app(); - before(async () => { - await app.ready(); - }); - - after(() => app.close()); - - afterEach(mm.restore); - it('should GET /news', async () => { const result = await app.httpRequest().get('/news').expect(200); const $ = cheerio.load(result.text); diff --git a/hackernews-async-ts/test/app/service/HackerNews.test.ts b/hackernews-async-ts/test/app/service/HackerNews.test.ts index 539317a..2d6bf27 100644 --- a/hackernews-async-ts/test/app/service/HackerNews.test.ts +++ b/hackernews-async-ts/test/app/service/HackerNews.test.ts @@ -1,21 +1,15 @@ 'use strict'; -import * as assert from 'assert'; import { Context } from 'egg'; -import mm from 'egg-mock'; +import { app, assert } from 'egg-mock/bootstrap'; describe('test/app/service/HackerNews.test.js', () => { - const app = mm.app(); let ctx: Context; before(async () => { - await app.ready(); ctx = app.mockContext(); }); - after(() => app.close()); - afterEach(mm.restore); - it('getTopStories', async () => { const list = await ctx.service.hackerNews.getTopStories(); assert(list.length === 30); diff --git a/hackernews-async-ts/tsconfig.json b/hackernews-async-ts/tsconfig.json index 05d10e4..4e4f7d9 100644 --- a/hackernews-async-ts/tsconfig.json +++ b/hackernews-async-ts/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "target": "es2017", "module": "commonjs", + "strict": true, "noImplicitAny": false, "experimentalDecorators": true, "emitDecoratorMetadata": true, @@ -14,17 +15,13 @@ "noUnusedParameters": true, "allowUnreachableCode": false, "allowUnusedLabels": false, + "strictPropertyInitialization": false, "noFallthroughCasesInSwitch": true, "skipLibCheck": true, "skipDefaultLibCheck": true, "inlineSourceMap": true, "importHelpers": true }, - "include": [ - "app/**/*", - "config/**/*", - "test/**/*.ts" - ], "exclude": [ "app/public", "app/views" diff --git a/hackernews-async-ts/typings/app/controller/index.d.ts b/hackernews-async-ts/typings/app/controller/index.d.ts new file mode 100644 index 0000000..d8d65c3 --- /dev/null +++ b/hackernews-async-ts/typings/app/controller/index.d.ts @@ -0,0 +1,10 @@ +// This file was auto created by egg-ts-helper +// Do not modify this file!!!!!!!!! + +import News from '../../../app/controller/news'; + +declare module 'egg' { + interface IController { + news: News; + } +} diff --git a/hackernews-async-ts/typings/app/service/index.d.ts b/hackernews-async-ts/typings/app/service/index.d.ts new file mode 100644 index 0000000..d51448b --- /dev/null +++ b/hackernews-async-ts/typings/app/service/index.d.ts @@ -0,0 +1,10 @@ +// This file was auto created by egg-ts-helper +// Do not modify this file!!!!!!!!! + +import HackerNews from '../../../app/service/HackerNews'; + +declare module 'egg' { + interface IService { + hackerNews: HackerNews; + } +} From d32144ef691a1ffc98067368f15f11eb2324f8e9 Mon Sep 17 00:00:00 2001 From: TZ Date: Thu, 29 Mar 2018 11:54:28 +0800 Subject: [PATCH 02/10] feat: update to new egg-bin --- hackernews-async-ts/.autod.conf.js | 4 + hackernews-async-ts/.gitignore | 84 ++++--------------- hackernews-async-ts/.vscode/settings.json | 2 +- hackernews-async-ts/app/controller/index.d.ts | 6 -- hackernews-async-ts/app/router.ts | 11 +-- hackernews-async-ts/app/service/index.d.ts | 6 -- hackernews-async-ts/package.json | 36 ++++---- .../test/app/controller/news.test.ts | 12 +-- .../test/app/service/HackerNews.test.ts | 8 +- hackernews-async-ts/tsconfig.json | 7 +- .../typings/app/controller/index.d.ts | 10 +++ .../typings/app/service/index.d.ts | 10 +++ 12 files changed, 70 insertions(+), 126 deletions(-) delete mode 100644 hackernews-async-ts/app/controller/index.d.ts delete mode 100644 hackernews-async-ts/app/service/index.d.ts create mode 100644 hackernews-async-ts/typings/app/controller/index.d.ts create mode 100644 hackernews-async-ts/typings/app/service/index.d.ts diff --git a/hackernews-async-ts/.autod.conf.js b/hackernews-async-ts/.autod.conf.js index 4d1fb4a..96fdfa1 100644 --- a/hackernews-async-ts/.autod.conf.js +++ b/hackernews-async-ts/.autod.conf.js @@ -10,6 +10,10 @@ module.exports = { ], dep: [ 'egg', + 'egg-scripts', + 'egg-view-nunjucks', + 'moment', + 'source-map-support', ], devdep: [ 'autod', diff --git a/hackernews-async-ts/.gitignore b/hackernews-async-ts/.gitignore index faf57fa..59af3eb 100644 --- a/hackernews-async-ts/.gitignore +++ b/hackernews-async-ts/.gitignore @@ -1,71 +1,19 @@ +logs/ +npm-debug.log +node_modules/ +coverage/ +.idea/ +run/ +logs/ +.DS_Store +.vscode +*.swp +*.lock +*.js + app/**/*.js test/**/*.js config/**/*.js -*.map -run -logs - -# Created by https://www.gitignore.io/api/node - -### Node ### -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - - -# End of https://www.gitignore.io/api/node +app/**/*.map +test/**/*.map +config/**/*.map \ No newline at end of file diff --git a/hackernews-async-ts/.vscode/settings.json b/hackernews-async-ts/.vscode/settings.json index db221e0..3a503d1 100644 --- a/hackernews-async-ts/.vscode/settings.json +++ b/hackernews-async-ts/.vscode/settings.json @@ -2,7 +2,7 @@ "files.exclude": { "USE_GITIGNORE": true, "**/*.js": { - "when": "$(basename).ts" + // "when": "$(basename).ts" }, "**/*.map": true, "run": true, diff --git a/hackernews-async-ts/app/controller/index.d.ts b/hackernews-async-ts/app/controller/index.d.ts deleted file mode 100644 index 0b8bebb..0000000 --- a/hackernews-async-ts/app/controller/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import NewsController from './news'; -declare module 'egg' { - export interface IController { - news: NewsController; - } -} diff --git a/hackernews-async-ts/app/router.ts b/hackernews-async-ts/app/router.ts index 4d5d311..50a9d49 100644 --- a/hackernews-async-ts/app/router.ts +++ b/hackernews-async-ts/app/router.ts @@ -1,9 +1,10 @@ import { Application } from 'egg'; export default (app: Application) => { - const controller = app.controller; - app.redirect('/', '/news'); - app.router.get('/news', controller.news.list); - app.router.get('/news/item/:id', controller.news.detail); - app.router.get('/news/user/:id', controller.news.user); + const { controller, router } = app; + + // router.redirect('/', '/news'); + router.get('/news', controller.news.list); + router.get('/news/item/:id', controller.news.detail); + router.get('/news/user/:id', controller.news.user); }; diff --git a/hackernews-async-ts/app/service/index.d.ts b/hackernews-async-ts/app/service/index.d.ts deleted file mode 100644 index 95157d8..0000000 --- a/hackernews-async-ts/app/service/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import HackerNews from './HackerNews'; -declare module 'egg' { - export interface IService { - hackerNews: HackerNews; - } -} diff --git a/hackernews-async-ts/package.json b/hackernews-async-ts/package.json index 45ef869..b10f535 100644 --- a/hackernews-async-ts/package.json +++ b/hackernews-async-ts/package.json @@ -4,12 +4,11 @@ "description": "hackernews showcase using async/await for egg", "private": true, "dependencies": { - "egg": "^2.0.0", - "egg-view-nunjucks": "^2.1.4", - "moment": "^2.19.4", - "source-map-support": "^0.5.0", - "tslib": "^1.8.1", - "typescript": "^2.6.2" + "egg": "^2.5.0", + "egg-scripts": "^2.5.1", + "egg-view-nunjucks": "^2.2.0", + "moment": "^2.21.0", + "source-map-support": "^0.5.4" }, "devDependencies": { "@types/cheerio": "^0.22.1", @@ -19,25 +18,28 @@ "autod": "^3.0.1", "autod-egg": "^1.1.0", "cheerio": "^1.0.0-rc.2", - "egg-bin": "^4.3.7", - "egg-mock": "^3.14.0", + "egg-bin": "^4.5.0", + "egg-mock": "^3.16.0", + "egg-ts-helper": "^1.1.3", "rimraf": "^2.6.1", - "tslint": "^4.0.0" + "tslib": "^1.8.1", + "tslint": "^4.0.0", + "typescript": "^2.6.2" }, "engines": { "node": ">=8.9.0" }, "scripts": { - "clean": "rimraf app/**/*.{js,map} test/**/*.{js,map} config/**/*.{js,map}", - "tsc": "tsc -p tsconfig.json", - "tsc:w": "tsc -p tsconfig.json -w", - "debug": "egg-bin debug", - "dev": "egg-bin dev", - "test": "npm run tsc && npm run test-local", - "test-local": "egg-bin test", - "cov": "egg-bin cov", + "start": "egg-scripts start", + "dev": "egg-bin dev --ts -r 'egg-ts-helper/register'", + "tsc": "ets && tsc -p tsconfig.json", + "clean": "rimraf ./app.js ./agent.js ./{app,test,config}/**/*.{js,map}", + "test": "npm run lint -- --fix && npm run test-local", + "test-local": "EGG_TYPESCRIPT=true egg-bin test --ts -r 'egg-ts-helper/register'", + "cov": "EGG_TYPESCRIPT=true egg-bin cov --ts", "lint": "tslint .", "ci": "npm run lint && npm run cov", + "debug": "egg-bin debug --ts", "autod": "autod" } } diff --git a/hackernews-async-ts/test/app/controller/news.test.ts b/hackernews-async-ts/test/app/controller/news.test.ts index df93b56..49574dd 100644 --- a/hackernews-async-ts/test/app/controller/news.test.ts +++ b/hackernews-async-ts/test/app/controller/news.test.ts @@ -1,19 +1,9 @@ 'use strict'; -import * as assert from 'assert'; import * as cheerio from 'cheerio'; -import mm from 'egg-mock'; +import { app, assert } from 'egg-mock/bootstrap'; describe('test/app/controller/news.test.ts', () => { - const app = mm.app(); - before(async () => { - await app.ready(); - }); - - after(() => app.close()); - - afterEach(mm.restore); - it('should GET /news', async () => { const result = await app.httpRequest().get('/news').expect(200); const $ = cheerio.load(result.text); diff --git a/hackernews-async-ts/test/app/service/HackerNews.test.ts b/hackernews-async-ts/test/app/service/HackerNews.test.ts index 539317a..2d6bf27 100644 --- a/hackernews-async-ts/test/app/service/HackerNews.test.ts +++ b/hackernews-async-ts/test/app/service/HackerNews.test.ts @@ -1,21 +1,15 @@ 'use strict'; -import * as assert from 'assert'; import { Context } from 'egg'; -import mm from 'egg-mock'; +import { app, assert } from 'egg-mock/bootstrap'; describe('test/app/service/HackerNews.test.js', () => { - const app = mm.app(); let ctx: Context; before(async () => { - await app.ready(); ctx = app.mockContext(); }); - after(() => app.close()); - afterEach(mm.restore); - it('getTopStories', async () => { const list = await ctx.service.hackerNews.getTopStories(); assert(list.length === 30); diff --git a/hackernews-async-ts/tsconfig.json b/hackernews-async-ts/tsconfig.json index 05d10e4..4e4f7d9 100644 --- a/hackernews-async-ts/tsconfig.json +++ b/hackernews-async-ts/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "target": "es2017", "module": "commonjs", + "strict": true, "noImplicitAny": false, "experimentalDecorators": true, "emitDecoratorMetadata": true, @@ -14,17 +15,13 @@ "noUnusedParameters": true, "allowUnreachableCode": false, "allowUnusedLabels": false, + "strictPropertyInitialization": false, "noFallthroughCasesInSwitch": true, "skipLibCheck": true, "skipDefaultLibCheck": true, "inlineSourceMap": true, "importHelpers": true }, - "include": [ - "app/**/*", - "config/**/*", - "test/**/*.ts" - ], "exclude": [ "app/public", "app/views" diff --git a/hackernews-async-ts/typings/app/controller/index.d.ts b/hackernews-async-ts/typings/app/controller/index.d.ts new file mode 100644 index 0000000..d8d65c3 --- /dev/null +++ b/hackernews-async-ts/typings/app/controller/index.d.ts @@ -0,0 +1,10 @@ +// This file was auto created by egg-ts-helper +// Do not modify this file!!!!!!!!! + +import News from '../../../app/controller/news'; + +declare module 'egg' { + interface IController { + news: News; + } +} diff --git a/hackernews-async-ts/typings/app/service/index.d.ts b/hackernews-async-ts/typings/app/service/index.d.ts new file mode 100644 index 0000000..d51448b --- /dev/null +++ b/hackernews-async-ts/typings/app/service/index.d.ts @@ -0,0 +1,10 @@ +// This file was auto created by egg-ts-helper +// Do not modify this file!!!!!!!!! + +import HackerNews from '../../../app/service/HackerNews'; + +declare module 'egg' { + interface IService { + hackerNews: HackerNews; + } +} From 855aec9178a6f0607f086c2b7ee111728864209e Mon Sep 17 00:00:00 2001 From: TZ Date: Fri, 30 Mar 2018 13:35:01 +0800 Subject: [PATCH 03/10] feat: new egg-bin with pkg conf --- hackernews-async-ts/.eslintignore | 3 +++ hackernews-async-ts/.eslintrc | 7 +++++++ hackernews-async-ts/package.json | 19 +++++++++++++------ 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 hackernews-async-ts/.eslintignore create mode 100644 hackernews-async-ts/.eslintrc diff --git a/hackernews-async-ts/.eslintignore b/hackernews-async-ts/.eslintignore new file mode 100644 index 0000000..b9d5101 --- /dev/null +++ b/hackernews-async-ts/.eslintignore @@ -0,0 +1,3 @@ + +coverage/ +**/*.d.ts diff --git a/hackernews-async-ts/.eslintrc b/hackernews-async-ts/.eslintrc new file mode 100644 index 0000000..b5f697d --- /dev/null +++ b/hackernews-async-ts/.eslintrc @@ -0,0 +1,7 @@ +{ + "extends": "eslint-config-egg", + "parser": "typescript-eslint-parser", + "plugins": [ + "typescript" + ] +} \ No newline at end of file diff --git a/hackernews-async-ts/package.json b/hackernews-async-ts/package.json index b10f535..aca1d97 100644 --- a/hackernews-async-ts/package.json +++ b/hackernews-async-ts/package.json @@ -3,6 +3,9 @@ "version": "1.0.0", "description": "hackernews showcase using async/await for egg", "private": true, + "egg": { + "typescript": true + }, "dependencies": { "egg": "^2.5.0", "egg-scripts": "^2.5.1", @@ -18,28 +21,32 @@ "autod": "^3.0.1", "autod-egg": "^1.1.0", "cheerio": "^1.0.0-rc.2", - "egg-bin": "^4.5.0", + "egg-bin": "^4.6.0", "egg-mock": "^3.16.0", "egg-ts-helper": "^1.1.3", + "eslint": "^4.19.1", + "eslint-config-egg": "^7.0.0", + "eslint-plugin-typescript": "^0.11.0", "rimraf": "^2.6.1", "tslib": "^1.8.1", "tslint": "^4.0.0", - "typescript": "^2.6.2" + "typescript": "^2.6.2", + "typescript-eslint-parser": "^14.0.0" }, "engines": { "node": ">=8.9.0" }, "scripts": { "start": "egg-scripts start", - "dev": "egg-bin dev --ts -r 'egg-ts-helper/register'", + "dev": "egg-bin dev -r 'egg-ts-helper/register'", "tsc": "ets && tsc -p tsconfig.json", "clean": "rimraf ./app.js ./agent.js ./{app,test,config}/**/*.{js,map}", "test": "npm run lint -- --fix && npm run test-local", - "test-local": "EGG_TYPESCRIPT=true egg-bin test --ts -r 'egg-ts-helper/register'", - "cov": "EGG_TYPESCRIPT=true egg-bin cov --ts", + "test-local": "egg-bin test -r 'egg-ts-helper/register'", + "cov": "egg-bin cov", "lint": "tslint .", "ci": "npm run lint && npm run cov", - "debug": "egg-bin debug --ts", + "debug": "egg-bin debug", "autod": "autod" } } From aa318fd5e5b7861933cc93fc4474d6093d71cffa Mon Sep 17 00:00:00 2001 From: wanghx Date: Sun, 1 Apr 2018 13:45:10 +0800 Subject: [PATCH 04/10] feat: change to returnType --- hackernews-async-ts/.vscode/settings.json | 3 +- hackernews-async-ts/config/config.ts | 40 ++++++++++++--------- hackernews-async-ts/config/defaultConfig.ts | 14 -------- 3 files changed, 25 insertions(+), 32 deletions(-) delete mode 100644 hackernews-async-ts/config/defaultConfig.ts diff --git a/hackernews-async-ts/.vscode/settings.json b/hackernews-async-ts/.vscode/settings.json index 3a503d1..6e7f656 100644 --- a/hackernews-async-ts/.vscode/settings.json +++ b/hackernews-async-ts/.vscode/settings.json @@ -9,5 +9,6 @@ "logs": true, "out": true, "node_modules": true - } + }, + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/hackernews-async-ts/config/config.ts b/hackernews-async-ts/config/config.ts index f15ec1c..ca4786a 100644 --- a/hackernews-async-ts/config/config.ts +++ b/hackernews-async-ts/config/config.ts @@ -3,24 +3,30 @@ import { EggAppConfig } from 'egg'; import * as fs from 'fs'; import * as path from 'path'; import 'source-map-support/register'; -import defaultConfig from './defaultConfig'; -export default (appInfo: EggAppConfig) => { - const config: any = {}; - - // should change to your own - config.keys = appInfo.name + '123456'; - - config.siteFile = { - '/favicon.ico': fs.readFileSync(path.join(appInfo.baseDir, 'app/public/favicon.png')), - }; - - config.view = { - defaultViewEngine: 'nunjucks', - mapping: { - '.tpl': 'nunjucks', +export default function config(appInfo: EggAppConfig) { + return { + keys: appInfo.name + '123456', + siteFile: { + '/favicon.ico': fs.readFileSync( + path.join(appInfo.baseDir, 'app/public/favicon.png'), + ), + }, + view: { + defaultViewEngine: 'nunjucks', + mapping: { + '.tpl': 'nunjucks', + }, + }, + news: { + pageSize: 30, + serverUrl: 'https://hacker-news.firebaseio.com/v0', }, }; - - return { ...config, ...defaultConfig }; }; + +declare module 'egg' { + interface Application { + config: EggAppConfig & ReturnType; + } +} diff --git a/hackernews-async-ts/config/defaultConfig.ts b/hackernews-async-ts/config/defaultConfig.ts deleted file mode 100644 index e6279b5..0000000 --- a/hackernews-async-ts/config/defaultConfig.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class DefaultConfig { - news = { - pageSize: 30, - serverUrl: 'https://hacker-news.firebaseio.com/v0', - }; -}; - -export default new DefaultConfig(); - -declare module 'egg' { - export interface Application { - config: EggAppConfig & DefaultConfig; - } -} From a468bab3a1418869c061fe306f8d2341a9c60c49 Mon Sep 17 00:00:00 2001 From: wanghx Date: Sun, 1 Apr 2018 13:51:30 +0800 Subject: [PATCH 05/10] feat: remove source map support --- hackernews-async-ts/config/config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/hackernews-async-ts/config/config.ts b/hackernews-async-ts/config/config.ts index ca4786a..f9a9fe2 100644 --- a/hackernews-async-ts/config/config.ts +++ b/hackernews-async-ts/config/config.ts @@ -2,7 +2,6 @@ import { EggAppConfig } from 'egg'; import * as fs from 'fs'; import * as path from 'path'; -import 'source-map-support/register'; export default function config(appInfo: EggAppConfig) { return { From 1caffa1e1c44b7c5469933aa8ab5a415d2aabf87 Mon Sep 17 00:00:00 2001 From: wanghx Date: Sun, 1 Apr 2018 14:20:33 +0800 Subject: [PATCH 06/10] feat: add more config demo --- .../config/{config.ts => config.default.ts} | 8 +------- hackernews-async-ts/config/config.local.ts | 3 +++ hackernews-async-ts/config/config.prod.ts | 5 +++++ hackernews-async-ts/config/index.d.ts | 15 +++++++++++++++ 4 files changed, 24 insertions(+), 7 deletions(-) rename hackernews-async-ts/config/{config.ts => config.default.ts} (75%) create mode 100644 hackernews-async-ts/config/config.local.ts create mode 100644 hackernews-async-ts/config/config.prod.ts create mode 100644 hackernews-async-ts/config/index.d.ts diff --git a/hackernews-async-ts/config/config.ts b/hackernews-async-ts/config/config.default.ts similarity index 75% rename from hackernews-async-ts/config/config.ts rename to hackernews-async-ts/config/config.default.ts index f9a9fe2..ca909ab 100644 --- a/hackernews-async-ts/config/config.ts +++ b/hackernews-async-ts/config/config.default.ts @@ -3,7 +3,7 @@ import { EggAppConfig } from 'egg'; import * as fs from 'fs'; import * as path from 'path'; -export default function config(appInfo: EggAppConfig) { +export default (appInfo: EggAppConfig) => { return { keys: appInfo.name + '123456', siteFile: { @@ -23,9 +23,3 @@ export default function config(appInfo: EggAppConfig) { }, }; }; - -declare module 'egg' { - interface Application { - config: EggAppConfig & ReturnType; - } -} diff --git a/hackernews-async-ts/config/config.local.ts b/hackernews-async-ts/config/config.local.ts new file mode 100644 index 0000000..2138d55 --- /dev/null +++ b/hackernews-async-ts/config/config.local.ts @@ -0,0 +1,3 @@ +export const info = { + msg: 'hello', +}; diff --git a/hackernews-async-ts/config/config.prod.ts b/hackernews-async-ts/config/config.prod.ts new file mode 100644 index 0000000..46e1878 --- /dev/null +++ b/hackernews-async-ts/config/config.prod.ts @@ -0,0 +1,5 @@ +export default { + info: { + msg: 'hello', + }, +}; diff --git a/hackernews-async-ts/config/index.d.ts b/hackernews-async-ts/config/index.d.ts new file mode 100644 index 0000000..8135338 --- /dev/null +++ b/hackernews-async-ts/config/index.d.ts @@ -0,0 +1,15 @@ +import { EggAppConfig } from 'egg'; +import defaultConfig from './config.default'; +import * as localConfig from './config.local'; +import prodConfig from './config.prod'; + +type DefaultConfig = ReturnType; +type LocalConfig = typeof localConfig; +type ProdConfig = typeof prodConfig; +type NewAppConfig = EggAppConfig & DefaultConfig & LocalConfig & ProdConfig; + +declare module 'egg' { + interface Application { + config: NewAppConfig; + } +} \ No newline at end of file From 2ca8ba8d7a1ce1518a1113918ac63470dcbb59a3 Mon Sep 17 00:00:00 2001 From: wanghx Date: Sun, 1 Apr 2018 14:38:43 +0800 Subject: [PATCH 07/10] refactor: remove eslint --- hackernews-async-ts/.eslintignore | 3 --- hackernews-async-ts/.eslintrc | 7 ------- hackernews-async-ts/package.json | 6 +----- 3 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 hackernews-async-ts/.eslintignore delete mode 100644 hackernews-async-ts/.eslintrc diff --git a/hackernews-async-ts/.eslintignore b/hackernews-async-ts/.eslintignore deleted file mode 100644 index b9d5101..0000000 --- a/hackernews-async-ts/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ - -coverage/ -**/*.d.ts diff --git a/hackernews-async-ts/.eslintrc b/hackernews-async-ts/.eslintrc deleted file mode 100644 index b5f697d..0000000 --- a/hackernews-async-ts/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "eslint-config-egg", - "parser": "typescript-eslint-parser", - "plugins": [ - "typescript" - ] -} \ No newline at end of file diff --git a/hackernews-async-ts/package.json b/hackernews-async-ts/package.json index aca1d97..010e15e 100644 --- a/hackernews-async-ts/package.json +++ b/hackernews-async-ts/package.json @@ -24,14 +24,10 @@ "egg-bin": "^4.6.0", "egg-mock": "^3.16.0", "egg-ts-helper": "^1.1.3", - "eslint": "^4.19.1", - "eslint-config-egg": "^7.0.0", - "eslint-plugin-typescript": "^0.11.0", "rimraf": "^2.6.1", "tslib": "^1.8.1", "tslint": "^4.0.0", - "typescript": "^2.6.2", - "typescript-eslint-parser": "^14.0.0" + "typescript": "^2.6.2" }, "engines": { "node": ">=8.9.0" From fc5c1824e09bc396a80cd638bbf7f02f53f7a776 Mon Sep 17 00:00:00 2001 From: TZ Date: Sun, 1 Apr 2018 17:57:01 +0800 Subject: [PATCH 08/10] f --- hackernews-async-ts/.vscode/settings.json | 11 ----------- hackernews-async-ts/package.json | 4 ++-- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/hackernews-async-ts/.vscode/settings.json b/hackernews-async-ts/.vscode/settings.json index 6e7f656..25fa621 100644 --- a/hackernews-async-ts/.vscode/settings.json +++ b/hackernews-async-ts/.vscode/settings.json @@ -1,14 +1,3 @@ { - "files.exclude": { - "USE_GITIGNORE": true, - "**/*.js": { - // "when": "$(basename).ts" - }, - "**/*.map": true, - "run": true, - "logs": true, - "out": true, - "node_modules": true - }, "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/hackernews-async-ts/package.json b/hackernews-async-ts/package.json index 010e15e..e811bf9 100644 --- a/hackernews-async-ts/package.json +++ b/hackernews-async-ts/package.json @@ -27,7 +27,7 @@ "rimraf": "^2.6.1", "tslib": "^1.8.1", "tslint": "^4.0.0", - "typescript": "^2.6.2" + "typescript": "^2.8.1" }, "engines": { "node": ">=8.9.0" @@ -36,7 +36,7 @@ "start": "egg-scripts start", "dev": "egg-bin dev -r 'egg-ts-helper/register'", "tsc": "ets && tsc -p tsconfig.json", - "clean": "rimraf ./app.js ./agent.js ./{app,test,config}/**/*.{js,map}", + "clean": "ets clean", "test": "npm run lint -- --fix && npm run test-local", "test-local": "egg-bin test -r 'egg-ts-helper/register'", "cov": "egg-bin cov", From f223092e8298d4c5212ed2f312636d13ca17c163 Mon Sep 17 00:00:00 2001 From: wanghx Date: Sun, 1 Apr 2018 18:49:36 +0800 Subject: [PATCH 09/10] chore: add comment --- hackernews-async-ts/app/service/HackerNews.ts | 7 ++----- hackernews-async-ts/config/config.default.ts | 7 +++++++ hackernews-async-ts/config/index.d.ts | 8 ++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/hackernews-async-ts/app/service/HackerNews.ts b/hackernews-async-ts/app/service/HackerNews.ts index 290b8b9..38c1a44 100644 --- a/hackernews-async-ts/app/service/HackerNews.ts +++ b/hackernews-async-ts/app/service/HackerNews.ts @@ -19,9 +19,6 @@ export class HackerNews extends Service { constructor(ctx: Context) { super(ctx); } - getConfig() { - return this.app.config.news; - } /** * request hacker-news api @@ -34,7 +31,7 @@ export class HackerNews extends Service { timeout: ['30s', '30s'], }, opts); - const result = await this.ctx.curl(`${this.getConfig().serverUrl}/${api}`, options); + const result = await this.ctx.curl(`${this.config.news.serverUrl}/${api}`, options); return result.data; } @@ -45,7 +42,7 @@ export class HackerNews extends Service { */ public async getTopStories(page?: number, pageSize?: number): Promise { page = page || 1; - pageSize = pageSize || this.getConfig().pageSize; + pageSize = pageSize || this.config.news.pageSize; try { const result = await this.request('topstories.json', { diff --git a/hackernews-async-ts/config/config.default.ts b/hackernews-async-ts/config/config.default.ts index ca909ab..828e65d 100644 --- a/hackernews-async-ts/config/config.default.ts +++ b/hackernews-async-ts/config/config.default.ts @@ -18,7 +18,14 @@ export default (appInfo: EggAppConfig) => { }, }, news: { + /** + * page size + */ pageSize: 30, + + /** + * hacker news server url + */ serverUrl: 'https://hacker-news.firebaseio.com/v0', }, }; diff --git a/hackernews-async-ts/config/index.d.ts b/hackernews-async-ts/config/index.d.ts index 8135338..f105b89 100644 --- a/hackernews-async-ts/config/index.d.ts +++ b/hackernews-async-ts/config/index.d.ts @@ -12,4 +12,12 @@ declare module 'egg' { interface Application { config: NewAppConfig; } + + interface Controller { + config: NewAppConfig; + } + + interface Service { + config: NewAppConfig; + } } \ No newline at end of file From c2d8047f1a53f092b37d6a77118b9e23aa4d314e Mon Sep 17 00:00:00 2001 From: wanghx Date: Sun, 1 Apr 2018 19:00:13 +0800 Subject: [PATCH 10/10] refactor: remove useless code --- hackernews-async-ts/app/service/HackerNews.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/hackernews-async-ts/app/service/HackerNews.ts b/hackernews-async-ts/app/service/HackerNews.ts index 38c1a44..8076c74 100644 --- a/hackernews-async-ts/app/service/HackerNews.ts +++ b/hackernews-async-ts/app/service/HackerNews.ts @@ -1,4 +1,4 @@ -import { Context, Service } from 'egg'; +import { Service } from 'egg'; export interface NewsItem { id: number; @@ -16,10 +16,6 @@ export interface NewsItem { * HackerNews Api Service */ export class HackerNews extends Service { - constructor(ctx: Context) { - super(ctx); - } - /** * request hacker-news api * @param api - Api name