diff options
| author | Florian Dold <florian.dold@gmail.com> | 2017-05-03 15:35:00 +0200 | 
|---|---|---|
| committer | Florian Dold <florian.dold@gmail.com> | 2017-05-03 15:35:00 +0200 | 
| commit | de98e0b232509d5f40c135d540a70e415272ff85 (patch) | |
| tree | a79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/ts-loader/examples | |
| parent | e0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff) | |
node_modules
Diffstat (limited to 'node_modules/ts-loader/examples')
50 files changed, 2384 insertions, 0 deletions
diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/.npmignore b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/.npmignore new file mode 100644 index 000000000..c8c6a02b7 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/.npmignore @@ -0,0 +1,201 @@ +## Ignore Visual Studio temporary files, build results, and
 +## files generated by popular Visual Studio add-ons.
 +
 +# User-specific files
 +*.suo
 +*.user
 +*.userosscache
 +*.sln.docstates
 +
 +# User-specific files (MonoDevelop/Xamarin Studio)
 +*.userprefs
 +
 +# Build results
 +[Dd]ebug/
 +[Dd]ebugPublic/
 +[Rr]elease/
 +[Rr]eleases/
 +x64/
 +x86/
 +build/
 +bld/
 +[Bb]in/
 +[Oo]bj/
 +dist/
 +
 +# Visual Studo 2015 cache/options directory
 +.vs/
 +
 +# MSTest test Results
 +[Tt]est[Rr]esult*/
 +[Bb]uild[Ll]og.*
 +
 +# NUNIT
 +*.VisualState.xml
 +TestResult.xml
 +
 +# JUnit test results
 +test-results
 +
 +# Build Results of an ATL Project
 +[Dd]ebugPS/
 +[Rr]eleasePS/
 +dlldata.c
 +
 +*_i.c
 +*_p.c
 +*_i.h
 +*.ilk
 +*.meta
 +*.obj
 +*.pch
 +*.pdb
 +*.pgc
 +*.pgd
 +*.rsp
 +*.sbr
 +*.tlb
 +*.tli
 +*.tlh
 +*.tmp
 +*.tmp_proj
 +*.log
 +*.vspscc
 +*.vssscc
 +.builds
 +*.pidb
 +*.svclog
 +*.scc
 +
 +# Chutzpah Test files
 +_Chutzpah*
 +
 +# Visual C++ cache files
 +ipch/
 +*.aps
 +*.ncb
 +*.opensdf
 +*.sdf
 +*.cachefile
 +
 +# Visual Studio profiler
 +*.psess
 +*.vsp
 +*.vspx
 +
 +# TFS 2012 Local Workspace
 +$tf/
 +
 +# Guidance Automation Toolkit
 +*.gpState
 +
 +# ReSharper is a .NET coding add-in
 +_ReSharper*/
 +*.[Rr]e[Ss]harper
 +*.DotSettings.user
 +
 +# JustCode is a .NET coding addin-in
 +.JustCode
 +
 +# TeamCity is a build add-in
 +_TeamCity*
 +
 +# DotCover is a Code Coverage Tool
 +*.dotCover
 +
 +# NCrunch
 +_NCrunch_*
 +.*crunch*.local.xml
 +
 +# MightyMoose
 +*.mm.*
 +AutoTest.Net/
 +
 +# Web workbench (sass)
 +.sass-cache/
 +
 +# Installshield output folder
 +[Ee]xpress/
 +
 +# DocProject is a documentation generator add-in
 +DocProject/buildhelp/
 +DocProject/Help/*.HxT
 +DocProject/Help/*.HxC
 +DocProject/Help/*.hhc
 +DocProject/Help/*.hhk
 +DocProject/Help/*.hhp
 +DocProject/Help/Html2
 +DocProject/Help/html
 +
 +# Click-Once directory
 +publish/
 +
 +# Publish Web Output
 +*.[Pp]ublish.xml
 +*.azurePubxml
 +# TODO: Comment the next line if you want to checkin your web deploy settings
 +# but database connection strings (with potential passwords) will be unencrypted
 +*.pubxml
 +*.publishproj
 +
 +# NuGet Packages
 +*.nupkg
 +# The packages folder can be ignored because of Package Restore
 +**/packages/*
 +# except build/, which is used as an MSBuild target.
 +!**/packages/build/
 +# Uncomment if necessary however generally it will be regenerated when needed
 +#!**/packages/repositories.config
 +
 +# Windows Azure Build Output
 +csx/
 +*.build.csdef
 +
 +# Windows Store app package directory
 +AppPackages/
 +
 +# Others
 +*.[Cc]ache
 +ClientBin/
 +[Ss]tyle[Cc]op.*
 +~$*
 +*~
 +*.dbmdl
 +*.dbproj.schemaview
 +*.pfx
 +*.publishsettings
 +node_modules/
 +bower_components/
 +typings/
 +
 +# RIA/Silverlight projects
 +Generated_Code/
 +
 +# Backup & report files from converting an old project file
 +# to a newer Visual Studio version. Backup files are not needed,
 +# because we have git ;-)
 +_UpgradeReport_Files/
 +Backup*/
 +UpgradeLog*.XML
 +UpgradeLog*.htm
 +
 +# SQL Server files
 +*.mdf
 +*.ldf
 +
 +# Business Intelligence projects
 +*.rdl.data
 +*.bim.layout
 +*.bim_*.settings
 +
 +# Microsoft Fakes
 +FakesAssemblies/
 +
 +# Node.js Tools for Visual Studio
 +.ntvs_analysis.dat
 +
 +# Visual Studio 6 build log
 +*.plg
 +
 +# Visual Studio 6 workspace options file
 +*.opt
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/LICENSE b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/LICENSE new file mode 100644 index 000000000..d5a917f49 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT)
 +
 +Copyright (c) 2015 John Reilly
 +
 +Permission is hereby granted, free of charge, to any person obtaining a copy
 +of this software and associated documentation files (the "Software"), to deal
 +in the Software without restriction, including without limitation the rights
 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 +copies of the Software, and to permit persons to whom the Software is
 +furnished to do so, subject to the following conditions:
 +
 +The above copyright notice and this permission notice shall be included in all
 +copies or substantial portions of the Software.
 +
 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 +SOFTWARE.
 +
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/README.md b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/README.md new file mode 100644 index 000000000..5d52ccbb8 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/README.md @@ -0,0 +1,15 @@ +# TypeScript, Babel, React, and Karma Sample
 +
 +## Getting started
 +
 +You'll need [node / npm](https://nodejs.org/) installed.  To get up and running just enter:
 +
 +```
 +npm install
 +npm run serve
 +```
 +
 +This will:
 +
 +1. Download the npm packages you need (including the type definitions from DefinitelyTyped)
 +2. Compile the code and serve it up at [http://localhost:8080](http://localhost:8080)
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/.eslintrc b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/.eslintrc new file mode 100644 index 000000000..f7aa388ad --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/gulp/clean.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/clean.js new file mode 100644 index 000000000..c51b4e416 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/gulp/inject.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/inject.js new file mode 100644 index 000000000..e4133e565 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/gulp/staticFiles.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/staticFiles.js new file mode 100644 index 000000000..20327f272 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/gulp/tests.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/tests.js new file mode 100644 index 000000000..05af0a551 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/gulp/webpack.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulp/webpack.js new file mode 100644 index 000000000..b0de5c558 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/gulpFile.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/gulpFile.js new file mode 100644 index 000000000..b7b3abe73 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/karma.conf.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/karma.conf.js new file mode 100644 index 000000000..72579927f --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/package.json b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/package.json new file mode 100644 index 000000000..131bb2911 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/src/components/App.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/App.tsx new file mode 100644 index 000000000..e74cc9538 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/App.tsx @@ -0,0 +1,45 @@ +import React from 'react';
 +import FBEmitter from "fbemitter";
 +
 +import GreetingStore from '../stores/GreetingStore';
 +import GreetingState from '../types/GreetingState';
 +import WhoToGreet from './WhoToGreet';
 +import Greeting from './Greeting';
 +
 +class App extends React.Component<{}, GreetingState> {
 +  eventSubscription: FBEmitter.EventSubscription;
 +  constructor(props: {}) {
 +    super(props);
 +    this.state = this.getStateFromStores();
 +  }
 +  private onChange = () => {
 +    this.setState(this.getStateFromStores());
 +  }
 +
 +  public componentWillMount() {
 +    this.eventSubscription = GreetingStore.addChangeListener(this.onChange);
 +  }
 +
 +  public componentWillUnmount() {
 +    this.eventSubscription.remove();
 +  }
 +
 +  render() {
 +    const { greetings, newGreeting } = this.state;
 +    return (
 +      <div className="container-fluid">
 +        <h1>Hello People!</h1>
 +
 +        <WhoToGreet newGreeting={ newGreeting } />
 +
 +        { greetings.map((g, index) => <Greeting key={ index } targetOfGreeting={ g } />) }
 +      </div>
 +    );
 +  }
 +
 +  private getStateFromStores() {
 +    return GreetingStore.getState();
 +  }
 +}
 +
 +export default App;
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/Greeting.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/Greeting.tsx new file mode 100644 index 000000000..7150537c7 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/Greeting.tsx @@ -0,0 +1,37 @@ +import React from 'react';
 +
 +import * as GreetingActions from '../actions/GreetingActions';
 +
 +interface Props {
 +  key: number;
 +  targetOfGreeting: string;
 +}
 +
 +class Greeting extends React.Component<Props, any> {
 +  constructor(props: Props) {
 +    super(props);
 +  }
 +
 +  static propTypes: React.ValidationMap<Props> = {
 +    targetOfGreeting: React.PropTypes.string.isRequired
 +  }
 +
 +  render() {
 +    return (
 +      <p>
 +        Hello { this.props.targetOfGreeting }!
 +
 +        <button className="btn btn-default btn-danger"
 +                onClick={ this._onClick }>
 +                Remove
 +        </button>
 +      </p>
 +    );
 +  }
 +
 +  _onClick = (_event: React.MouseEvent<HTMLButtonElement>) => {
 +    GreetingActions.removeGreeting(this.props.targetOfGreeting);
 +  }
 +}
 +
 +export default Greeting;
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/WhoToGreet.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/WhoToGreet.tsx new file mode 100644 index 000000000..9f3deda94 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/components/WhoToGreet.tsx @@ -0,0 +1,53 @@ +import React from 'react';
 +
 +import * as GreetingActions from '../actions/GreetingActions';
 +
 +interface Props {
 +  newGreeting: string;
 +}
 +
 +class WhoToGreet extends React.Component<Props, any> {
 +  constructor(props: Props) {
 +    super(props);
 +  }
 +
 +  static propTypes: React.ValidationMap<Props> = {
 +    newGreeting: React.PropTypes.string.isRequired
 +  }
 +
 +  render() {
 +    return (
 +        <form role="form">
 +          <div className="form-group">
 +            <input type="text" className="form-control" placeholder="Who would you like to greet?"
 +                   value={ this.props.newGreeting }
 +                   onChange={ this._handleNewGreetingChange } />
 +            <button type="submit" className="btn btn-default btn-primary"
 +                    onClick={ this._onSubmit }
 +                    disabled={ this._preventSubmission }>
 +                    Add greeting
 +            </button>
 +          </div>
 +        </form>
 +    );
 +  }
 +
 +  get _preventSubmission() {
 +    return !this.props.newGreeting;
 +  }
 +
 +  _handleNewGreetingChange = (event: React.FormEvent<HTMLInputElement>) => {
 +    const newGreeting = (event.target as HTMLInputElement).value;
 +    GreetingActions.newGreetingChanged(newGreeting);
 +  }
 +
 +  _onSubmit = (event: React.FormEvent<HTMLButtonElement>) => {
 +    event.preventDefault();
 +
 +    if (!this._preventSubmission) {
 +      GreetingActions.addGreeting(this.props.newGreeting);
 +    }
 +  }
 +}
 +
 +export default WhoToGreet;
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/index.html b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/index.html new file mode 100644 index 000000000..a3f53185a --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/index.html @@ -0,0 +1,19 @@ +<!doctype html>
 +<html lang="en">
 +  <head>
 +    <meta charset="utf-8">
 +    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 +    <meta name="viewport" content="width=device-width, initial-scale=1">
 +
 +    <title>TypeScript, Babel, React, Flux, and Karma</title>
 +
 +    <!-- inject:css -->
 +    <!-- endinject -->
 +    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
 +    </head>
 +  <body>
 +    <div id="content"></div>
 +    <!-- inject:js -->
 +    <!-- endinject -->
 +  </body>
 +</html>
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/main.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/main.tsx new file mode 100644 index 000000000..7e957bd47 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/src/main.tsx @@ -0,0 +1,7 @@ +import 'babel-polyfill';
 +import React from 'react';
 +import ReactDOM from 'react-dom';
 +
 +import App from './components/App';
 +
 +ReactDOM.render(<App />, document.getElementById('content'));
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/App.tests.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/App.tests.tsx new file mode 100644 index 000000000..aa9612416 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/App.tests.tsx @@ -0,0 +1,32 @@ +import React from 'react';
 +import TestUtils from 'react-addons-test-utils';
 +
 +import App from '../../src/components/App';
 +import WhoToGreet from '../../src/components/WhoToGreet';
 +import Greeting from '../../src/components/Greeting';
 +import GreetingStore from '../../src/stores/GreetingStore';
 +
 +describe('App', () => {
 +  it('renders expected HTML', () => {
 +    const app = render({ greetings: ['James'], newGreeting: 'Benjamin' });
 +    expect(app).toEqual(
 +      <div className="container-fluid">
 +        <h1>Hello People!</h1>
 +
 +        <WhoToGreet newGreeting={ 'Benjamin' } />
 +
 +        { [
 +          <Greeting key={ 0 } targetOfGreeting="James" />
 +        ] }
 +      </div>
 +    );
 +  });
 +
 +  function render(state: any) {
 +    const shallowRenderer = TestUtils.createRenderer();
 +    spyOn(GreetingStore, 'getState').and.returnValue(state);
 +
 +    shallowRenderer.render(<App />);
 +    return shallowRenderer.getRenderOutput();
 +  }
 +});
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/Greeting.tests.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/Greeting.tests.tsx new file mode 100644 index 000000000..911a6cba2 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/Greeting.tests.tsx @@ -0,0 +1,45 @@ +import React from 'react';
 +import TestUtils from 'react-addons-test-utils';
 +
 +import Greeting from '../../src/components/Greeting';
 +import * as GreetingActions from '../../src/actions/GreetingActions';
 +
 +describe('Greeting', () => {
 +  let handleSelectionChangeSpy: jasmine.Spy;
 +  beforeEach(() => {
 +    handleSelectionChangeSpy = jasmine.createSpy('handleSelectionChange');
 +  });
 +
 +  it('given a targetOfGreeting of \'James\' it renders a p containing a greeting and a remove button', () => {
 +    const targetOfGreeting = 'James';
 +
 +    const p = render({ targetOfGreeting });
 +    expect(p.type).toBe('p');
 +    expect(p.props.children[0]).toBe('Hello ');
 +    expect(p.props.children[1]).toBe('James');
 +    expect(p.props.children[2]).toBe('!');
 +
 +    const [ , , , button ] = p.props.children;
 +
 +    expect(button.type).toBe('button');
 +    expect(button.props.className).toBe('btn btn-default btn-danger');
 +    expect(button.props.children).toBe('Remove');
 +  });
 +
 +  it('button onClick triggers an removeGreeting action', () => {
 +    const targetOfGreeting = 'Benjamin';
 +    const p = render({ targetOfGreeting });
 +    const [ , , , button ] = p.props.children;
 +    spyOn(GreetingActions, 'removeGreeting');
 +
 +    button.props.onClick();
 +
 +    expect(GreetingActions.removeGreeting).toHaveBeenCalledWith(targetOfGreeting);
 +  });
 +
 +  function render({ targetOfGreeting }: { targetOfGreeting: string; }) {
 +    const shallowRenderer = TestUtils.createRenderer();
 +    shallowRenderer.render(<Greeting key={ 0 } targetOfGreeting={ targetOfGreeting } />);
 +    return shallowRenderer.getRenderOutput();
 +  }
 +});
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/WhoToGreet.tests.tsx b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/WhoToGreet.tests.tsx new file mode 100644 index 000000000..01398952e --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/components/WhoToGreet.tests.tsx @@ -0,0 +1,68 @@ +import React from 'react';
 +import TestUtils from 'react-addons-test-utils';
 +
 +import WhoToGreet from '../../src/components/WhoToGreet';
 +import * as GreetingActions from '../../src/actions/GreetingActions';
 +
 +describe('WhoToGreet', () => {
 +  let handleSelectionChangeSpy: jasmine.Spy;
 +  beforeEach(() => {
 +    handleSelectionChangeSpy = jasmine.createSpy('handleSelectionChange');
 +  });
 +
 +  it('given a newGreeting then it renders a form containing an input containing that text and an add button', () => {
 +    const newGreeting = 'James';
 +
 +    const form = render({ newGreeting });
 +    expect(form.type).toBe('form');
 +    expect(form.props.role).toBe('form');
 +
 +    const formGroup = form.props.children;
 +    expect(formGroup.type).toBe('div');
 +    expect(formGroup.props.className).toBe('form-group');
 +
 +    const [ input, button ] = formGroup.props.children;
 +
 +    expect(input.type).toBe('input');
 +    expect(input.props.type).toBe('text');
 +    expect(input.props.className).toBe('form-control');
 +    expect(input.props.placeholder).toBe('Who would you like to greet?');
 +    expect(input.props.value).toBe(newGreeting);
 +
 +    expect(button.type).toBe('button');
 +    expect(button.props.type).toBe('submit');
 +    expect(button.props.className).toBe('btn btn-default btn-primary');
 +    expect(button.props.disabled).toBe(false);
 +    expect(button.props.children).toBe('Add greeting');
 +  });
 +
 +  it('input onChange triggers a newGreetingChanged action', () => {
 +    const newGreeting = 'Benjamin';
 +    const form = render({ newGreeting });
 +    const formGroup = form.props.children;
 +    const [ input ] = formGroup.props.children;
 +    spyOn(GreetingActions, 'newGreetingChanged');
 +
 +    input.props.onChange({ target: { value: newGreeting }});
 +
 +    expect(GreetingActions.newGreetingChanged).toHaveBeenCalledWith(newGreeting);
 +  });
 +
 +  it('button onClick triggers an addGreeting action', () => {
 +    const newGreeting = 'Benjamin';
 +    const form = render({ newGreeting });
 +    const formGroup = form.props.children;
 +    const [ , button ] = formGroup.props.children;
 +    spyOn(GreetingActions, 'addGreeting');
 +
 +    button.props.onClick({ preventDefault: () => {} });
 +
 +    expect(GreetingActions.addGreeting).toHaveBeenCalledWith(newGreeting);
 +  });
 +
 +  function render({ newGreeting }: { newGreeting: string }) {
 +    const shallowRenderer = TestUtils.createRenderer();
 +    shallowRenderer.render(<WhoToGreet newGreeting={ newGreeting } />);
 +    return shallowRenderer.getRenderOutput();
 +  }
 +});
 diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/main.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/main.js new file mode 100644 index 000000000..1b332a7c0 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/test/main.js @@ -0,0 +1,5 @@ +/* eslint-disable */ +import 'babel-polyfill'; + +const testsContext = require.context('./', true, /\.tests\.ts(x?)$/); +testsContext.keys().forEach(testsContext);
\ No newline at end of file diff --git a/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/tsconfig.json b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/tsconfig.json new file mode 100644 index 000000000..c3a732c12 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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-gulp-react-flux-babel-karma/webpack.config.js b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/webpack.config.js new file mode 100644 index 000000000..cc26b27b7 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack1-gulp-react-flux-babel-karma/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'] +  }, +}; diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/.npmignore b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/.npmignore new file mode 100644 index 000000000..c8c6a02b7 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/.npmignore @@ -0,0 +1,201 @@ +## Ignore Visual Studio temporary files, build results, and
 +## files generated by popular Visual Studio add-ons.
 +
 +# User-specific files
 +*.suo
 +*.user
 +*.userosscache
 +*.sln.docstates
 +
 +# User-specific files (MonoDevelop/Xamarin Studio)
 +*.userprefs
 +
 +# Build results
 +[Dd]ebug/
 +[Dd]ebugPublic/
 +[Rr]elease/
 +[Rr]eleases/
 +x64/
 +x86/
 +build/
 +bld/
 +[Bb]in/
 +[Oo]bj/
 +dist/
 +
 +# Visual Studo 2015 cache/options directory
 +.vs/
 +
 +# MSTest test Results
 +[Tt]est[Rr]esult*/
 +[Bb]uild[Ll]og.*
 +
 +# NUNIT
 +*.VisualState.xml
 +TestResult.xml
 +
 +# JUnit test results
 +test-results
 +
 +# Build Results of an ATL Project
 +[Dd]ebugPS/
 +[Rr]eleasePS/
 +dlldata.c
 +
 +*_i.c
 +*_p.c
 +*_i.h
 +*.ilk
 +*.meta
 +*.obj
 +*.pch
 +*.pdb
 +*.pgc
 +*.pgd
 +*.rsp
 +*.sbr
 +*.tlb
 +*.tli
 +*.tlh
 +*.tmp
 +*.tmp_proj
 +*.log
 +*.vspscc
 +*.vssscc
 +.builds
 +*.pidb
 +*.svclog
 +*.scc
 +
 +# Chutzpah Test files
 +_Chutzpah*
 +
 +# Visual C++ cache files
 +ipch/
 +*.aps
 +*.ncb
 +*.opensdf
 +*.sdf
 +*.cachefile
 +
 +# Visual Studio profiler
 +*.psess
 +*.vsp
 +*.vspx
 +
 +# TFS 2012 Local Workspace
 +$tf/
 +
 +# Guidance Automation Toolkit
 +*.gpState
 +
 +# ReSharper is a .NET coding add-in
 +_ReSharper*/
 +*.[Rr]e[Ss]harper
 +*.DotSettings.user
 +
 +# JustCode is a .NET coding addin-in
 +.JustCode
 +
 +# TeamCity is a build add-in
 +_TeamCity*
 +
 +# DotCover is a Code Coverage Tool
 +*.dotCover
 +
 +# NCrunch
 +_NCrunch_*
 +.*crunch*.local.xml
 +
 +# MightyMoose
 +*.mm.*
 +AutoTest.Net/
 +
 +# Web workbench (sass)
 +.sass-cache/
 +
 +# Installshield output folder
 +[Ee]xpress/
 +
 +# DocProject is a documentation generator add-in
 +DocProject/buildhelp/
 +DocProject/Help/*.HxT
 +DocProject/Help/*.HxC
 +DocProject/Help/*.hhc
 +DocProject/Help/*.hhk
 +DocProject/Help/*.hhp
 +DocProject/Help/Html2
 +DocProject/Help/html
 +
 +# Click-Once directory
 +publish/
 +
 +# Publish Web Output
 +*.[Pp]ublish.xml
 +*.azurePubxml
 +# TODO: Comment the next line if you want to checkin your web deploy settings
 +# but database connection strings (with potential passwords) will be unencrypted
 +*.pubxml
 +*.publishproj
 +
 +# NuGet Packages
 +*.nupkg
 +# The packages folder can be ignored because of Package Restore
 +**/packages/*
 +# except build/, which is used as an MSBuild target.
 +!**/packages/build/
 +# Uncomment if necessary however generally it will be regenerated when needed
 +#!**/packages/repositories.config
 +
 +# Windows Azure Build Output
 +csx/
 +*.build.csdef
 +
 +# Windows Store app package directory
 +AppPackages/
 +
 +# Others
 +*.[Cc]ache
 +ClientBin/
 +[Ss]tyle[Cc]op.*
 +~$*
 +*~
 +*.dbmdl
 +*.dbproj.schemaview
 +*.pfx
 +*.publishsettings
 +node_modules/
 +bower_components/
 +typings/
 +
 +# RIA/Silverlight projects
 +Generated_Code/
 +
 +# Backup & report files from converting an old project file
 +# to a newer Visual Studio version. Backup files are not needed,
 +# because we have git ;-)
 +_UpgradeReport_Files/
 +Backup*/
 +UpgradeLog*.XML
 +UpgradeLog*.htm
 +
 +# SQL Server files
 +*.mdf
 +*.ldf
 +
 +# Business Intelligence projects
 +*.rdl.data
 +*.bim.layout
 +*.bim_*.settings
 +
 +# Microsoft Fakes
 +FakesAssemblies/
 +
 +# Node.js Tools for Visual Studio
 +.ntvs_analysis.dat
 +
 +# Visual Studio 6 build log
 +*.plg
 +
 +# Visual Studio 6 workspace options file
 +*.opt
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/LICENSE b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/LICENSE new file mode 100644 index 000000000..d5a917f49 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT)
 +
 +Copyright (c) 2015 John Reilly
 +
 +Permission is hereby granted, free of charge, to any person obtaining a copy
 +of this software and associated documentation files (the "Software"), to deal
 +in the Software without restriction, including without limitation the rights
 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 +copies of the Software, and to permit persons to whom the Software is
 +furnished to do so, subject to the following conditions:
 +
 +The above copyright notice and this permission notice shall be included in all
 +copies or substantial portions of the Software.
 +
 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 +SOFTWARE.
 +
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/README.md b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/README.md new file mode 100644 index 000000000..e7a0cb064 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/README.md @@ -0,0 +1,16 @@ +# TypeScript, Babel, React, and Karma Sample
 +
 +## Getting started
 +
 +You'll need [node / npm](https://nodejs.org/) installed.  To get up and running just enter:
 +
 +```
 +npm install
 +npm run serve
 +```
 +
 +This will:
 +
 +1. Download the npm packages you need (including the type definitions from DefinitelyTyped)
 +2. Compile the code and serve it up at [http://localhost:8080](http://localhost:8080)
 +
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/.eslintrc b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/.eslintrc new file mode 100644 index 000000000..f7aa388ad --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/gulp/clean.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/clean.js new file mode 100644 index 000000000..c51b4e416 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/gulp/inject.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/inject.js new file mode 100644 index 000000000..e4133e565 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/gulp/staticFiles.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/staticFiles.js new file mode 100644 index 000000000..20327f272 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/gulp/tests.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/tests.js new file mode 100644 index 000000000..05af0a551 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/gulp/webpack.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/webpack.js new file mode 100644 index 000000000..2ecbf42ea --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulp/webpack.js @@ -0,0 +1,100 @@ +'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 = 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.UglifyJsPlugin({ +         compress: { +            warnings: true +         } +      }), +      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 = webpackConfig; +   myDevConfig.devtool = 'inline-source-map'; + +   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/webpack2-gulp-react-flux-babel-karma/gulpFile.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/gulpFile.js new file mode 100644 index 000000000..b7b3abe73 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/karma.conf.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/karma.conf.js new file mode 100644 index 000000000..f07fbc179 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/karma.conf.js @@ -0,0 +1,49 @@ +/* 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 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', +      module: webpackConfig.module, +      resolve: webpackConfig.resolve +    }, + +    webpackMiddleware: { +      quiet: true, +      stats: { +        colors: true +      } +    }, + +    // reporter options +    mochaReporter: { +      colors: { +        success: 'bgGreen', +        info: 'cyan', +        warning: 'bgBlue', +        error: 'bgRed' +      } +    } +  }); +}; diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/package.json b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/package.json new file mode 100644 index 000000000..f90bfb4df --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/package.json @@ -0,0 +1,82 @@ +{
 +  "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-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": "^2.0.1",
 +    "phantomjs-prebuilt": "^2.1.4",
 +    "ts-loader": "^2.0.0",
 +    "typescript": "^2.1.4",
 +    "webpack": "^2.2.0",
 +    "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/webpack2-gulp-react-flux-babel-karma/src/components/App.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/App.tsx new file mode 100644 index 000000000..e74cc9538 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/App.tsx @@ -0,0 +1,45 @@ +import React from 'react';
 +import FBEmitter from "fbemitter";
 +
 +import GreetingStore from '../stores/GreetingStore';
 +import GreetingState from '../types/GreetingState';
 +import WhoToGreet from './WhoToGreet';
 +import Greeting from './Greeting';
 +
 +class App extends React.Component<{}, GreetingState> {
 +  eventSubscription: FBEmitter.EventSubscription;
 +  constructor(props: {}) {
 +    super(props);
 +    this.state = this.getStateFromStores();
 +  }
 +  private onChange = () => {
 +    this.setState(this.getStateFromStores());
 +  }
 +
 +  public componentWillMount() {
 +    this.eventSubscription = GreetingStore.addChangeListener(this.onChange);
 +  }
 +
 +  public componentWillUnmount() {
 +    this.eventSubscription.remove();
 +  }
 +
 +  render() {
 +    const { greetings, newGreeting } = this.state;
 +    return (
 +      <div className="container-fluid">
 +        <h1>Hello People!</h1>
 +
 +        <WhoToGreet newGreeting={ newGreeting } />
 +
 +        { greetings.map((g, index) => <Greeting key={ index } targetOfGreeting={ g } />) }
 +      </div>
 +    );
 +  }
 +
 +  private getStateFromStores() {
 +    return GreetingStore.getState();
 +  }
 +}
 +
 +export default App;
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/Greeting.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/Greeting.tsx new file mode 100644 index 000000000..7150537c7 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/Greeting.tsx @@ -0,0 +1,37 @@ +import React from 'react';
 +
 +import * as GreetingActions from '../actions/GreetingActions';
 +
 +interface Props {
 +  key: number;
 +  targetOfGreeting: string;
 +}
 +
 +class Greeting extends React.Component<Props, any> {
 +  constructor(props: Props) {
 +    super(props);
 +  }
 +
 +  static propTypes: React.ValidationMap<Props> = {
 +    targetOfGreeting: React.PropTypes.string.isRequired
 +  }
 +
 +  render() {
 +    return (
 +      <p>
 +        Hello { this.props.targetOfGreeting }!
 +
 +        <button className="btn btn-default btn-danger"
 +                onClick={ this._onClick }>
 +                Remove
 +        </button>
 +      </p>
 +    );
 +  }
 +
 +  _onClick = (_event: React.MouseEvent<HTMLButtonElement>) => {
 +    GreetingActions.removeGreeting(this.props.targetOfGreeting);
 +  }
 +}
 +
 +export default Greeting;
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/WhoToGreet.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/WhoToGreet.tsx new file mode 100644 index 000000000..9f3deda94 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/components/WhoToGreet.tsx @@ -0,0 +1,53 @@ +import React from 'react';
 +
 +import * as GreetingActions from '../actions/GreetingActions';
 +
 +interface Props {
 +  newGreeting: string;
 +}
 +
 +class WhoToGreet extends React.Component<Props, any> {
 +  constructor(props: Props) {
 +    super(props);
 +  }
 +
 +  static propTypes: React.ValidationMap<Props> = {
 +    newGreeting: React.PropTypes.string.isRequired
 +  }
 +
 +  render() {
 +    return (
 +        <form role="form">
 +          <div className="form-group">
 +            <input type="text" className="form-control" placeholder="Who would you like to greet?"
 +                   value={ this.props.newGreeting }
 +                   onChange={ this._handleNewGreetingChange } />
 +            <button type="submit" className="btn btn-default btn-primary"
 +                    onClick={ this._onSubmit }
 +                    disabled={ this._preventSubmission }>
 +                    Add greeting
 +            </button>
 +          </div>
 +        </form>
 +    );
 +  }
 +
 +  get _preventSubmission() {
 +    return !this.props.newGreeting;
 +  }
 +
 +  _handleNewGreetingChange = (event: React.FormEvent<HTMLInputElement>) => {
 +    const newGreeting = (event.target as HTMLInputElement).value;
 +    GreetingActions.newGreetingChanged(newGreeting);
 +  }
 +
 +  _onSubmit = (event: React.FormEvent<HTMLButtonElement>) => {
 +    event.preventDefault();
 +
 +    if (!this._preventSubmission) {
 +      GreetingActions.addGreeting(this.props.newGreeting);
 +    }
 +  }
 +}
 +
 +export default WhoToGreet;
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/index.html b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/index.html new file mode 100644 index 000000000..a3f53185a --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/index.html @@ -0,0 +1,19 @@ +<!doctype html>
 +<html lang="en">
 +  <head>
 +    <meta charset="utf-8">
 +    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 +    <meta name="viewport" content="width=device-width, initial-scale=1">
 +
 +    <title>TypeScript, Babel, React, Flux, and Karma</title>
 +
 +    <!-- inject:css -->
 +    <!-- endinject -->
 +    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
 +    </head>
 +  <body>
 +    <div id="content"></div>
 +    <!-- inject:js -->
 +    <!-- endinject -->
 +  </body>
 +</html>
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/main.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/main.tsx new file mode 100644 index 000000000..7e957bd47 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/src/main.tsx @@ -0,0 +1,7 @@ +import 'babel-polyfill';
 +import React from 'react';
 +import ReactDOM from 'react-dom';
 +
 +import App from './components/App';
 +
 +ReactDOM.render(<App />, document.getElementById('content'));
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/App.tests.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/App.tests.tsx new file mode 100644 index 000000000..aa9612416 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/App.tests.tsx @@ -0,0 +1,32 @@ +import React from 'react';
 +import TestUtils from 'react-addons-test-utils';
 +
 +import App from '../../src/components/App';
 +import WhoToGreet from '../../src/components/WhoToGreet';
 +import Greeting from '../../src/components/Greeting';
 +import GreetingStore from '../../src/stores/GreetingStore';
 +
 +describe('App', () => {
 +  it('renders expected HTML', () => {
 +    const app = render({ greetings: ['James'], newGreeting: 'Benjamin' });
 +    expect(app).toEqual(
 +      <div className="container-fluid">
 +        <h1>Hello People!</h1>
 +
 +        <WhoToGreet newGreeting={ 'Benjamin' } />
 +
 +        { [
 +          <Greeting key={ 0 } targetOfGreeting="James" />
 +        ] }
 +      </div>
 +    );
 +  });
 +
 +  function render(state: any) {
 +    const shallowRenderer = TestUtils.createRenderer();
 +    spyOn(GreetingStore, 'getState').and.returnValue(state);
 +
 +    shallowRenderer.render(<App />);
 +    return shallowRenderer.getRenderOutput();
 +  }
 +});
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/Greeting.tests.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/Greeting.tests.tsx new file mode 100644 index 000000000..911a6cba2 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/Greeting.tests.tsx @@ -0,0 +1,45 @@ +import React from 'react';
 +import TestUtils from 'react-addons-test-utils';
 +
 +import Greeting from '../../src/components/Greeting';
 +import * as GreetingActions from '../../src/actions/GreetingActions';
 +
 +describe('Greeting', () => {
 +  let handleSelectionChangeSpy: jasmine.Spy;
 +  beforeEach(() => {
 +    handleSelectionChangeSpy = jasmine.createSpy('handleSelectionChange');
 +  });
 +
 +  it('given a targetOfGreeting of \'James\' it renders a p containing a greeting and a remove button', () => {
 +    const targetOfGreeting = 'James';
 +
 +    const p = render({ targetOfGreeting });
 +    expect(p.type).toBe('p');
 +    expect(p.props.children[0]).toBe('Hello ');
 +    expect(p.props.children[1]).toBe('James');
 +    expect(p.props.children[2]).toBe('!');
 +
 +    const [ , , , button ] = p.props.children;
 +
 +    expect(button.type).toBe('button');
 +    expect(button.props.className).toBe('btn btn-default btn-danger');
 +    expect(button.props.children).toBe('Remove');
 +  });
 +
 +  it('button onClick triggers an removeGreeting action', () => {
 +    const targetOfGreeting = 'Benjamin';
 +    const p = render({ targetOfGreeting });
 +    const [ , , , button ] = p.props.children;
 +    spyOn(GreetingActions, 'removeGreeting');
 +
 +    button.props.onClick();
 +
 +    expect(GreetingActions.removeGreeting).toHaveBeenCalledWith(targetOfGreeting);
 +  });
 +
 +  function render({ targetOfGreeting }: { targetOfGreeting: string; }) {
 +    const shallowRenderer = TestUtils.createRenderer();
 +    shallowRenderer.render(<Greeting key={ 0 } targetOfGreeting={ targetOfGreeting } />);
 +    return shallowRenderer.getRenderOutput();
 +  }
 +});
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/WhoToGreet.tests.tsx b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/WhoToGreet.tests.tsx new file mode 100644 index 000000000..01398952e --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/components/WhoToGreet.tests.tsx @@ -0,0 +1,68 @@ +import React from 'react';
 +import TestUtils from 'react-addons-test-utils';
 +
 +import WhoToGreet from '../../src/components/WhoToGreet';
 +import * as GreetingActions from '../../src/actions/GreetingActions';
 +
 +describe('WhoToGreet', () => {
 +  let handleSelectionChangeSpy: jasmine.Spy;
 +  beforeEach(() => {
 +    handleSelectionChangeSpy = jasmine.createSpy('handleSelectionChange');
 +  });
 +
 +  it('given a newGreeting then it renders a form containing an input containing that text and an add button', () => {
 +    const newGreeting = 'James';
 +
 +    const form = render({ newGreeting });
 +    expect(form.type).toBe('form');
 +    expect(form.props.role).toBe('form');
 +
 +    const formGroup = form.props.children;
 +    expect(formGroup.type).toBe('div');
 +    expect(formGroup.props.className).toBe('form-group');
 +
 +    const [ input, button ] = formGroup.props.children;
 +
 +    expect(input.type).toBe('input');
 +    expect(input.props.type).toBe('text');
 +    expect(input.props.className).toBe('form-control');
 +    expect(input.props.placeholder).toBe('Who would you like to greet?');
 +    expect(input.props.value).toBe(newGreeting);
 +
 +    expect(button.type).toBe('button');
 +    expect(button.props.type).toBe('submit');
 +    expect(button.props.className).toBe('btn btn-default btn-primary');
 +    expect(button.props.disabled).toBe(false);
 +    expect(button.props.children).toBe('Add greeting');
 +  });
 +
 +  it('input onChange triggers a newGreetingChanged action', () => {
 +    const newGreeting = 'Benjamin';
 +    const form = render({ newGreeting });
 +    const formGroup = form.props.children;
 +    const [ input ] = formGroup.props.children;
 +    spyOn(GreetingActions, 'newGreetingChanged');
 +
 +    input.props.onChange({ target: { value: newGreeting }});
 +
 +    expect(GreetingActions.newGreetingChanged).toHaveBeenCalledWith(newGreeting);
 +  });
 +
 +  it('button onClick triggers an addGreeting action', () => {
 +    const newGreeting = 'Benjamin';
 +    const form = render({ newGreeting });
 +    const formGroup = form.props.children;
 +    const [ , button ] = formGroup.props.children;
 +    spyOn(GreetingActions, 'addGreeting');
 +
 +    button.props.onClick({ preventDefault: () => {} });
 +
 +    expect(GreetingActions.addGreeting).toHaveBeenCalledWith(newGreeting);
 +  });
 +
 +  function render({ newGreeting }: { newGreeting: string }) {
 +    const shallowRenderer = TestUtils.createRenderer();
 +    shallowRenderer.render(<WhoToGreet newGreeting={ newGreeting } />);
 +    return shallowRenderer.getRenderOutput();
 +  }
 +});
 diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/main.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/main.js new file mode 100644 index 000000000..1b332a7c0 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/test/main.js @@ -0,0 +1,5 @@ +/* eslint-disable */ +import 'babel-polyfill'; + +const testsContext = require.context('./', true, /\.tests\.ts(x?)$/); +testsContext.keys().forEach(testsContext);
\ No newline at end of file diff --git a/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/tsconfig.json b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/tsconfig.json new file mode 100644 index 000000000..c3a732c12 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/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/webpack2-gulp-react-flux-babel-karma/webpack.config.js b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/webpack.config.js new file mode 100644 index 000000000..60620a83f --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-gulp-react-flux-babel-karma/webpack.config.js @@ -0,0 +1,64 @@ +'use strict'; + +var path = require('path'); + +var babelOptions = { +  "presets": [ +    "react", +    [ +      "es2015", +      { +        "modules": false +      } +    ], +    "es2016" +  ] +}; + +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: { +    rules: [{ +      test: /\.ts(x?)$/, +      exclude: /node_modules/, +      use: [ +        { +          loader: 'babel-loader', +          options: babelOptions +        }, +        { +          loader: 'ts-loader' +        } +      ] +    }, { +      test: /\.js$/, +      exclude: /node_modules/, +      use: [ +        { +          loader: 'babel-loader', +          options: babelOptions +        } +      ] +    }] +  }, +  plugins: [ +  ], +  resolve: { +    extensions: ['.ts', '.tsx', '.js'] +  }, +}; diff --git a/node_modules/ts-loader/examples/webpack2-react-cdn-simple/index.html b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/index.html new file mode 100644 index 000000000..09651107e --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/index.html @@ -0,0 +1,13 @@ +<!DOCTYPE html>
 +<html>
 +    <head>
 +        <meta charset="UTF-8">
 +    </head>
 +    <body>
 +        <div id="wrapper"></div>
 +
 +        <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script>
 +        <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script>
 +        <script src="index.js"></script>
 +    </body>
 +</html>
 diff --git a/node_modules/ts-loader/examples/webpack2-react-cdn-simple/package.json b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/package.json new file mode 100644 index 000000000..33b29639d --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/package.json @@ -0,0 +1,16 @@ +{
 +  "name": "webpack2-react-cdn-simple",
 +  "main": "index.js",
 +  "version": "1.0.0",
 +  "scripts": {
 +    "build": "webpack"
 +  },
 +  "devDependencies": {
 +    "ts-loader": "^2.0.0",
 +    "webpack": "^2.2.0"
 +  },
 +  "dependencies": {
 +    "@types/react": "^15.0.4",
 +    "@types/react-dom": "^0.14.21"
 +  }
 +}
 diff --git a/node_modules/ts-loader/examples/webpack2-react-cdn-simple/tsconfig.json b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/tsconfig.json new file mode 100644 index 000000000..b48ecdfb6 --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/tsconfig.json @@ -0,0 +1,5 @@ +{
 +    "compilerOptions": {
 +        "jsx": "react"
 +    }
 +}
 diff --git a/node_modules/ts-loader/examples/webpack2-react-cdn-simple/webpack.config.js b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/webpack.config.js new file mode 100644 index 000000000..7abb3171d --- /dev/null +++ b/node_modules/ts-loader/examples/webpack2-react-cdn-simple/webpack.config.js @@ -0,0 +1,24 @@ +'use strict'; + +module.exports = { +    entry: './src/index.tsx', +    output: { filename: 'index.js' }, +    module: { +        rules: [ +            { +                test: /\.tsx?$/, +                loader: 'ts-loader', +                options: { +                    transpileOnly: true +                } +            } +        ] +    }, +    resolve: { +        extensions: [ '.ts', '.tsx' ] +    }, +    externals: { +        'react': 'React', +        'react-dom': 'ReactDOM' +    } +};  | 
