From 7a3df06eb573d36142bd1a8e03c5ce8752d300b3 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 24 May 2017 15:10:37 +0200 Subject: fix build issues and add typedoc --- .../webpack1/react-babel-karma-gulp/gulp/.eslintrc | 73 ++++++++++++++++ .../webpack1/react-babel-karma-gulp/gulp/clean.js | 29 +++++++ .../webpack1/react-babel-karma-gulp/gulp/inject.js | 55 ++++++++++++ .../react-babel-karma-gulp/gulp/staticFiles.js | 31 +++++++ .../webpack1/react-babel-karma-gulp/gulp/tests.js | 45 ++++++++++ .../react-babel-karma-gulp/gulp/webpack.js | 98 ++++++++++++++++++++++ .../webpack1/react-babel-karma-gulp/gulpFile.js | 66 +++++++++++++++ .../webpack1/react-babel-karma-gulp/karma.conf.js | 66 +++++++++++++++ .../webpack1/react-babel-karma-gulp/package.json | 83 ++++++++++++++++++ .../webpack1/react-babel-karma-gulp/tsconfig.json | 22 +++++ .../react-babel-karma-gulp/webpack.config.js | 43 ++++++++++ 11 files changed, 611 insertions(+) create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json create mode 100644 node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js (limited to 'node_modules/ts-loader/examples/webpack1') diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc new file mode 100644 index 000000000..f7aa388ad --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc @@ -0,0 +1,73 @@ +{ + "root": true, + "env": { + "commonjs": true, + }, + "rules": { + "camelcase": 2, + "comma-spacing": 1, + "consistent-return": 2, + "curly": [ 2, "all" ], + "dot-notation": [ + 2, + { "allowKeywords": true } + ], + "eol-last": 2, + "eqeqeq": 2, + "keyword-spacing": 2, + "new-cap": 2, + "new-parens": 2, + "no-alert": 2, + "no-array-constructor": 2, + "no-caller": 2, + "no-catch-shadow": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-parens": [ 2, "functions" ], + "no-implied-eval": 2, + "no-iterator": 2, + "no-labels": 2, + "no-label-var": 2, + "no-lone-blocks": 2, + "no-loop-func": 2, + "no-multi-str": 2, + "no-native-reassign": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-wrappers": 2, + "no-octal-escape": 2, + "no-proto": 2, + "no-return-assign": 2, + "no-script-url": 2, + "no-sequences": 2, + "no-shadow": 2, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-trailing-spaces": 1, + "no-undef-init": 2, + "no-unused-expressions": 2, + "no-use-before-define": [ 2, "nofunc" ], + "no-with": 2, + "quotes": [ 1, "single" ], + "semi": 2, + "semi-spacing": [ + 2, + { + "before": false, + "after": true + } + ], + "space-infix-ops": 2, + "space-unary-ops": [ + 2, + { + "words": true, + "nonwords": false + } + ], + "strict": [ 2, "global" ], + "yoda": [ 2, "never" ] + } +} diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js new file mode 100644 index 000000000..c51b4e416 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js @@ -0,0 +1,29 @@ +'use strict'; + +var del = require('del'); +var gutil = require('gulp-util'); +var fs = require('fs'); + +function run(done) { + fs.stat('./dist', function(err){ + if (err) { + // Never existed + done(); + } + else { + del(['./dist'], { force: true }) + .then(function(paths) { + gutil.log('Deleted files/folders:\n', paths.join('\n')); + done(); + }) + .catch(function(error) { + gutil.log('Problem deleting:\n', error); + done(); + }); + } + }); +} + +module.exports = { + run: function(done) { return run(done); } +}; diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js new file mode 100644 index 000000000..e4133e565 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js @@ -0,0 +1,55 @@ +'use strict'; + +var gulp = require('gulp'); +var inject = require('gulp-inject'); +var glob = require('glob'); + +function injectIndex(options) { + function run() { + var target = gulp.src('./src/index.html'); + var sources = gulp.src([ + //'./dist/styles/main*.css', + './dist/scripts/vendor*.js', + './dist/scripts/main*.js' + ], { read: false }); + + return target + .pipe(inject(sources, { ignorePath: '/dist/', addRootSlash: false, removeTags: true })) + .pipe(gulp.dest('./dist')); + } + + var jsCssGlob = 'dist/**/*.{js,css}'; + + function checkForInitialFilesThenRun() { + glob(jsCssGlob, function (er, files) { + var filesWeNeed = ['dist/scripts/main', 'dist/scripts/vendor'/*, 'dist/styles/main'*/]; + + function fileIsPresent(fileWeNeed) { + return files.some(function(file) { + return file.indexOf(fileWeNeed) !== -1; + }); + } + + if (filesWeNeed.every(fileIsPresent)) { + run('initial build'); + } else { + checkForInitialFilesThenRun(); + } + }); + } + + checkForInitialFilesThenRun(); + + if (options.shouldWatch) { + gulp.watch(jsCssGlob, function(evt) { + if (evt.path && evt.type === 'changed') { + run(evt.path); + } + }); + } +} + +module.exports = { + build: function() { return injectIndex({ shouldWatch: false }); }, + watch: function() { return injectIndex({ shouldWatch: true }); } +}; diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js new file mode 100644 index 000000000..20327f272 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js @@ -0,0 +1,31 @@ +'use strict'; + +var gulp = require('gulp'); +var cache = require('gulp-cached'); + +var targets = [ + { description: 'INDEX', src: './src/index.html', dest: './dist' } +]; + +function copy(options) { + function run(target) { + gulp.src(target.src) + .pipe(cache(target.description)) + .pipe(gulp.dest(target.dest)); + } + + function watch(target) { + gulp.watch(target.src, function() { run(target); }); + } + + targets.forEach(run); + + if (options.shouldWatch) { + targets.forEach(watch); + } +} + +module.exports = { + build: function() { return copy({ shouldWatch: false }); }, + watch: function() { return copy({ shouldWatch: true }); } +}; diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js new file mode 100644 index 000000000..05af0a551 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js @@ -0,0 +1,45 @@ +'use strict'; + +var Server = require('karma').Server; +var path = require('path'); +var gutil = require('gulp-util'); + +function runTests(options) { + // Documentation: https://karma-runner.github.io/0.13/dev/public-api.html + var karmaConfig = { + configFile: path.join(__dirname, '../karma.conf.js'), + singleRun: !options.shouldWatch, + + plugins: ['karma-webpack', 'karma-jasmine', 'karma-mocha-reporter', 'karma-sourcemap-loader', 'karma-phantomjs-launcher'], + reporters: ['mocha'] + }; + + if (options.done) { + karmaConfig.plugins.push('karma-junit-reporter'); + karmaConfig.reporters.push('junit'); + } else { + karmaConfig.plugins.push('karma-notify-reporter'); + karmaConfig.reporters.push('notify'); + } + + new Server(karmaConfig, karmaCompleted).start(); + + function karmaCompleted(exitCode) { + if (options.done) { + if (exitCode === 1) { + gutil.log('Karma: tests failed with code ' + exitCode); + } else { + gutil.log('Karma completed!'); + } + options.done(); + } + else { + process.exit(exitCode); + } + } +} + +module.exports = { + run: function(done) { return runTests({ shouldWatch: false, done: done }); }, + watch: function() { return runTests({ shouldWatch: true }); } +}; diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js new file mode 100644 index 000000000..b0de5c558 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js @@ -0,0 +1,98 @@ +'use strict'; + +var gulp = require('gulp'); +var gutil = require('gulp-util'); +var webpack = require('webpack'); +var WebpackNotifierPlugin = require('webpack-notifier'); +var failPlugin = require('webpack-fail-plugin'); +var webpackConfig = require('../webpack.config.js'); +var packageJson = require('../package.json'); + +function buildProduction(done) { + // modify some webpack config options + var myProdConfig = Object.create(webpackConfig); + myProdConfig.output.filename = '[name].[hash].js'; + + myProdConfig.plugins = myProdConfig.plugins.concat( + new webpack.DefinePlugin({ + 'process.env': { + 'NODE_ENV': JSON.stringify('production') + } + }), + new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: 'vendor.[hash].js' }), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin(), + failPlugin + ); + + // run webpack + webpack(myProdConfig, function (err, stats) { + if (err) { throw new gutil.PluginError('webpack:build', err); } + gutil.log('[webpack:build]', stats.toString({ + colors: true + })); + + if (done) { done(); } + }); +} + +function createDevCompiler() { + // modify some webpack config options + var myDevConfig = Object.create(webpackConfig); + myDevConfig.devtool = 'inline-source-map'; + myDevConfig.debug = true; + + myDevConfig.plugins = myDevConfig.plugins.concat( + new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: 'vendor.js' }), + new WebpackNotifierPlugin({ title: 'Webpack build', excludeWarnings: true }) + ); + + // create a single instance of the compiler to allow caching + return webpack(myDevConfig); +} + +function build() { + return new Promise(function (resolve, reject) { + buildProduction(function (err) { + if (err) { + reject(err); + } else { + resolve('webpack built'); + } + }); + }); +} + +function watch() { + var firstBuildDone = false; + + return new Promise(function (resolve, reject) { + var devCompiler = createDevCompiler(); + devCompiler.watch({ // watch options: + aggregateTimeout: 300 // wait so long for more changes + }, function (err, stats) { + if (err) { + if (!firstBuildDone) { + firstBuildDone = true; + reject(err); + } + throw new gutil.PluginError('webpack:build-dev', err); + } else { + if (!firstBuildDone) { + firstBuildDone = true; + resolve('webpack built'); + } + } + + gutil.log('[webpack:build-dev]', stats.toString({ + chunks: false, + colors: true + })); + }); + }); +} + +module.exports = { + build: function () { return build(); }, + watch: function () { return watch(); } +}; diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js new file mode 100644 index 000000000..b7b3abe73 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js @@ -0,0 +1,66 @@ +/* eslint-disable no-var, strict, prefer-arrow-callback */ +'use strict'; + +var gulp = require('gulp'); +var gutil = require('gulp-util'); +var eslint = require('gulp-eslint'); +var webpack = require('./gulp/webpack'); +var staticFiles = require('./gulp/staticFiles'); +var tests = require('./gulp/tests'); +var clean = require('./gulp/clean'); +var inject = require('./gulp/inject'); + +var lintSrcs = ['./gulp/**/*.js']; + +gulp.task('delete-dist', function (done) { + clean.run(done); +}); + +gulp.task('build-process.env.NODE_ENV', function () { + process.env.NODE_ENV = 'production'; +}); + +gulp.task('build-js', ['delete-dist', 'build-process.env.NODE_ENV'], function(done) { + webpack.build().then(function() { done(); }); +}); + +gulp.task('build-other', ['delete-dist', 'build-process.env.NODE_ENV'], function() { + staticFiles.build(); +}); + +gulp.task('build', ['build-js', 'build-other', 'lint'], function () { + inject.build(); +}); + +gulp.task('lint', function () { + return gulp.src(lintSrcs) + .pipe(eslint()) + .pipe(eslint.format()); +}); + +gulp.task('watch', ['delete-dist'], function(done) { + process.env.NODE_ENV = 'development'; + Promise.all([ + webpack.watch()//, + //less.watch() + ]).then(function() { + gutil.log('Now that initial assets (js and css) are generated inject will start...'); + inject.watch(); + done(); + }).catch(function(error) { + gutil.log('Problem generating initial assets (js and css)', error); + }); + + gulp.watch(lintSrcs, ['lint']); + staticFiles.watch(); + tests.watch(); +}); + +gulp.task('watch-and-serve', ['watch'], function() { + // local as not required for build + var express = require('express') + var app = express() + + app.use(express.static('dist', {'index': 'index.html'})) + app.listen(8080); +}); diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js new file mode 100644 index 000000000..72579927f --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js @@ -0,0 +1,66 @@ +/* eslint-disable no-var, strict */ +'use strict'; + +var webpackConfig = require('./webpack.config.js'); + +module.exports = function(config) { + // Documentation: https://karma-runner.github.io/0.13/config/configuration-file.html + config.set({ + browsers: [ 'PhantomJS' ], + + files: [ + // This ensures we have the es6 shims in place from babel and that angular and angular-mocks are loaded + // and then loads all the tests + 'test/main.js' + ], + + port: 9876, + + frameworks: [ 'jasmine' ], + + logLevel: config.LOG_INFO, //config.LOG_DEBUG + + preprocessors: { + 'test/main.js': [ 'webpack', 'sourcemap' ] + }, + + webpack: { + devtool: 'inline-source-map', + debug: true, + module: webpackConfig.module, + resolve: webpackConfig.resolve + }, + + webpackMiddleware: { + quiet: true, + stats: { + colors: true + } + }, + + // reporter options + mochaReporter: { + colors: { + success: 'bgGreen', + info: 'cyan', + warning: 'bgBlue', + error: 'bgRed' + } + }, + + // the default configuration + junitReporter: { + outputDir: 'test-results', // results will be saved as $outputDir/$browserName.xml + outputFile: undefined, // if included, results will be saved as $outputDir/$browserName/$outputFile + suite: '' + }, + + coverageReporter: { + reporters:[ + //{type: 'html', dir:'coverage/'}, // https://github.com/karma-runner/karma-coverage/issues/123 + {type: 'text'}, + {type: 'text-summary'} + ], + } + }); +}; diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json new file mode 100644 index 000000000..131bb2911 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json @@ -0,0 +1,83 @@ +{ + "name": "es6-babel-react-flux-karma", + "version": "1.0.0", + "description": "ES6 + TypeScript + Babel + React + Karma: The Secret Recipe", + "main": "index.js", + "scripts": { + "test": "karma start --reporters mocha,junit --single-run --browsers PhantomJS", + "serve": "gulp watch-and-serve", + "watch": "gulp watch", + "build": "gulp build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/microsoft/typescriptsamples.git" + }, + "keywords": [ + "React", + "Flux", + "ES2016", + "typescript" + ], + "author": "John Reilly", + "license": "MIT", + "bugs": { + "url": "https://github.com/microsoft/typescriptsamples/issues" + }, + "homepage": "https://github.com/Microsoft/TypeScriptSamples/tree/master/es6-babel-react-flux-karma#readme", + "devDependencies": { + "@types/fbemitter": "^2.0.32", + "@types/flux": "0.0.32", + "@types/jasmine": "^2.5.35", + "@types/react": "^0.14.41", + "@types/react-addons-test-utils": "^0.14.15", + "@types/react-bootstrap": "0.0.33", + "@types/react-dom": "^0.14.18", + "babel": "^6.0.0", + "babel-core": "^6.0.0", + "babel-loader": "^6.0.0", + "babel-preset-es2015": "^6.0.0", + "babel-preset-es2016": "^6.16.0", + "babel-preset-react": "^6.0.0", + "del": "^2.0.2", + "eslint": "^2.0.0", + "express": "^4.13.3", + "glob": "^7.0.0", + "gulp": "^3.9.0", + "gulp-autoprefixer": "^3.1.0", + "gulp-cached": "^1.1.0", + "gulp-cssmin": "^0.1.7", + "gulp-eslint": "^2.0.0", + "gulp-if": "^2.0.0", + "gulp-inject": "^3.0.0", + "gulp-notify": "^2.2.0", + "gulp-sourcemaps": "^1.5.2", + "gulp-streamify": "1.0.2", + "gulp-uglify": "^1.2.0", + "gulp-util": "^3.0.6", + "jasmine-core": "^2.3.4", + "karma": "^1.2.0", + "karma-coverage": "^1.0.0", + "karma-jasmine": "^1.0.0", + "karma-junit-reporter": "^1.0.0", + "karma-mocha-reporter": "^2.0.0", + "karma-notify-reporter": "^1.0.0", + "karma-phantomjs-launcher": "^1.0.0", + "karma-sourcemap-loader": "^0.3.6", + "karma-webpack": "^1.7.0", + "phantomjs-prebuilt": "^2.1.4", + "ts-loader": "^1.3.3", + "typescript": "^2.1.4", + "webpack": "^1.12.2", + "webpack-fail-plugin": "^1.0.4", + "webpack-notifier": "^1.2.1" + }, + "dependencies": { + "babel-polyfill": "^6.0.0", + "flux": "^2.0.3", + "fbemitter": "^2.0.2", + "react": "^15.4.1", + "react-addons-test-utils": "^15.4.1", + "react-dom": "^15.4.1" + } +} diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json new file mode 100644 index 000000000..c3a732c12 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "lib": [ + "dom", + "es2015", + "es2016" + ], + "jsx": "preserve", + "target": "es2016", + "module": "es2015", + "moduleResolution": "node", + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "removeComments": false, + "preserveConstEnums": true, + "sourceMap": true, + "skipLibCheck": true + } +} \ No newline at end of file diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js new file mode 100644 index 000000000..cc26b27b7 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js @@ -0,0 +1,43 @@ +/* eslint-disable no-var, strict, prefer-arrow-callback */ +'use strict'; + +var path = require('path'); + +module.exports = { + cache: true, + entry: { + main: './src/main.tsx', + vendor: [ + 'babel-polyfill', + 'fbemitter', + 'flux', + 'react', + 'react-dom' + ] + }, + output: { + path: path.resolve(__dirname, './dist/scripts'), + filename: '[name].js', + chunkFilename: '[chunkhash].js' + }, + module: { + loaders: [{ + test: /\.ts(x?)$/, + exclude: /node_modules/, + loader: 'babel-loader?presets[]=es2016&presets[]=es2015&presets[]=react!ts-loader' + }, { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel', + query: { + presets: ['es2016', 'es2015', 'react'] + } + }] + }, + plugins: [ + ], + resolve: { + // Add `.ts` and `.tsx` as a resolvable extension. + extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js'] + }, +}; -- cgit v1.2.3