From 2e28c4eea8641129ca5e7c2cf90581ec9d0c33c8 Mon Sep 17 00:00:00 2001 From: Kelvin Jin Date: Wed, 2 Aug 2017 13:39:04 -0700 Subject: [PATCH] chore: initial commit --- .gitignore | 7 +++++ gulpfile.js | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 22 +++++++++++++ tsconfig.json | 23 ++++++++++++++ tslint.json | 31 +++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 .gitignore create mode 100644 gulpfile.js create mode 100644 package.json create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..caa17e01 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +.vscode +build/ +node_modules/ +npm-debug.log +yarn-error.log +yarn.lock diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 00000000..a64e2316 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,86 @@ +const gulp = require('gulp'); +const merge2 = require('merge2'); +const path = require('path'); +const sourcemaps = require('gulp-sourcemaps'); +const tslint = require('gulp-tslint'); +const typescript = require('gulp-typescript'); + +const tslintPath = './tslint.json' +const tsconfigPath = './tsconfig.json'; +const outDir = 'build'; +const srcGlob = 'src/**/*.ts'; + +function onError() {} + +function makeCompileFn(dev) { + const tsSettings = dev ? { + noEmitOnError: false, + noUnusedParameters: false + } : {}; + return () => { + const { dts, js } = gulp.src(srcGlob) + .pipe(sourcemaps.init()) + .pipe(typescript.createProject(tsconfigPath, tsSettings)()) + .on('error', onError); + const jsMap = js.pipe(sourcemaps.write('.', { + includeContent: false, + sourceRoot: path.relative(outDir, 'src') + })); + return merge2([ + js.pipe(gulp.dest(`${outDir}/src`)), + dts.pipe(gulp.dest(`${outDir}/types`)), + jsMap.pipe(gulp.dest(`${outDir}/src`)) + ]); + }; +} + +/** + * Runs tslint on files in src/, with linting rules defined in tslint.json. + */ +gulp.task('lint', () => { + const program = require('tslint').Linter.createProgram(tsconfigPath); + gulp.src(srcGlob) + .pipe(tslint({ + configuration: tslintPath, + formatter: 'prose', + program + })) + .pipe(tslint.report()) + .on('warning', onError); +}); + +/** + * Transpiles TypeScript files in src/ to JavaScript according to the settings + * found in tsconfig.json. + * Currently, all errors are emitted twice. This is being tracked here: + * https://github.com/ivogabe/gulp-typescript/issues/438 + */ +gulp.task('compile', makeCompileFn(false)); + +/** + * Starts watching files in src/, running the 'compile' step whenever a file + * changes. + */ +gulp.task('watch', () => { + gulp.start(['compile']); + return gulp.watch(srcGlob, ['compile']); +}); + +/** + * Transpiles source code with relaxed requirements: + * - Emit output even if there are type-checking errors (this is a workaround + * for the twice-emitted errors in the 'compile' step) + * - Do not emit errors for unused parameters + */ +gulp.task('dev.compile', makeCompileFn(true)); + +/** + * Watches files similar to the 'watch' step, but runs the 'dev.compile' step + * instead. + */ +gulp.task('dev.watch', () => { + gulp.start(['dev.compile']); + return gulp.watch(srcGlob, ['dev.compile']); +}); + +gulp.task('default', ['compile']); diff --git a/package.json b/package.json new file mode 100644 index 00000000..6f0a0306 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "grpc-js", + "version": "0.1.0", + "description": "gRPC client implementation in Node.js", + "main": "index.js", + "engines": { + "node": ">=8.3" + }, + "keywords": [], + "author": "Google Inc.", + "license": "Apache-2.0", + "devDependencies": { + "@types/node": "^8.0.17", + "clang-format": "^1.0.53", + "gulp": "^3.9.1", + "gulp-sourcemaps": "^2.6.0", + "gulp-tslint": "^8.1.1", + "gulp-typescript": "^3.2.1", + "merge2": "^1.1.0", + "typescript": "^2.4.2" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..2032c368 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": false, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "declaration": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2015"], + "noFallthroughCasesInSwitch": true, + "noEmitOnError": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "pretty": true, + "strict": true, + "module": "commonjs", + "target": "es6", + "sourceMap": true + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..fb9deb7e --- /dev/null +++ b/tslint.json @@ -0,0 +1,31 @@ +{ + "rules": { + "class-name": true, + "comment-format": [true, "check-space"], + "eofline": true, + "forin": true, + "indent": [true, "spaces"], + "jsdoc-format": true, + "label-position": true, + "no-arg": true, + "no-conditional-assignment": true, + "no-construct": true, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": true, + "no-inferrable-types": true, + "no-internal-module": true, + "no-shadowed-variable": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "quotemark": [true, "single"], + "radix": true, + "semicolon": [true, "always"], + "switch-default": true, + "triple-equals": [true, "allow-null-check"], + "variable-name": [true, "check-format", "ban-keywords"] + } +} \ No newline at end of file