diff options
30 files changed, 292 insertions, 106 deletions
diff --git a/client/.gitignore b/client/.gitignore index 27e212f08..fa5433194 100644 --- a/client/.gitignore +++ b/client/.gitignore | |||
@@ -1,2 +1,4 @@ | |||
1 | /dist/ | 1 | /dist/ |
2 | /node_modules | 2 | /node_modules |
3 | /compiled | ||
4 | /stats.json | ||
diff --git a/client/config/empty.js b/client/config/empty.js new file mode 100644 index 000000000..33acae188 --- /dev/null +++ b/client/config/empty.js | |||
@@ -0,0 +1,8 @@ | |||
1 | module.exports = { | ||
2 | NgProbeToken: {}, | ||
3 | HmrState: function () {}, | ||
4 | _createConditionalRootRenderer: function (rootRenderer, extraTokens, coreTokens) { | ||
5 | return rootRenderer | ||
6 | }, | ||
7 | __platform_browser_private__: {} | ||
8 | } | ||
diff --git a/client/config/helpers.js b/client/config/helpers.js index 6268d2628..ca5923472 100644 --- a/client/config/helpers.js +++ b/client/config/helpers.js | |||
@@ -1,13 +1,17 @@ | |||
1 | const path = require('path') | 1 | const path = require('path') |
2 | 2 | ||
3 | // Helper functions | ||
3 | const ROOT = path.resolve(__dirname, '..') | 4 | const ROOT = path.resolve(__dirname, '..') |
4 | 5 | const EVENT = process.env.npm_lifecycle_event || '' | |
5 | console.log('root directory:', root() + '\n') | ||
6 | 6 | ||
7 | function hasProcessFlag (flag) { | 7 | function hasProcessFlag (flag) { |
8 | return process.argv.join('').indexOf(flag) > -1 | 8 | return process.argv.join('').indexOf(flag) > -1 |
9 | } | 9 | } |
10 | 10 | ||
11 | function hasNpmFlag (flag) { | ||
12 | return EVENT.includes(flag) | ||
13 | } | ||
14 | |||
11 | function isWebpackDevServer () { | 15 | function isWebpackDevServer () { |
12 | return process.argv[1] && !!(/webpack-dev-server$/.exec(process.argv[1])) | 16 | return process.argv[1] && !!(/webpack-dev-server$/.exec(process.argv[1])) |
13 | } | 17 | } |
@@ -18,5 +22,6 @@ function root (args) { | |||
18 | } | 22 | } |
19 | 23 | ||
20 | exports.hasProcessFlag = hasProcessFlag | 24 | exports.hasProcessFlag = hasProcessFlag |
25 | exports.hasNpmFlag = hasNpmFlag | ||
21 | exports.isWebpackDevServer = isWebpackDevServer | 26 | exports.isWebpackDevServer = isWebpackDevServer |
22 | exports.root = root | 27 | exports.root = root |
diff --git a/client/config/resource-override.js b/client/config/resource-override.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/client/config/resource-override.js | |||
diff --git a/client/config/webpack.common.js b/client/config/webpack.common.js index 7631af6b9..09d6f72b5 100644 --- a/client/config/webpack.common.js +++ b/client/config/webpack.common.js | |||
@@ -1,17 +1,20 @@ | |||
1 | const webpack = require('webpack') | ||
2 | const helpers = require('./helpers') | 1 | const helpers = require('./helpers') |
3 | 2 | ||
4 | /* | 3 | /* |
5 | * Webpack Plugins | 4 | * Webpack Plugins |
6 | */ | 5 | */ |
7 | 6 | ||
8 | const CopyWebpackPlugin = require('copy-webpack-plugin') | ||
9 | const HtmlWebpackPlugin = require('html-webpack-plugin') | ||
10 | const ForkCheckerPlugin = require('awesome-typescript-loader').ForkCheckerPlugin | ||
11 | const AssetsPlugin = require('assets-webpack-plugin') | 7 | const AssetsPlugin = require('assets-webpack-plugin') |
8 | const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin') | ||
12 | const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin') | 9 | const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin') |
10 | const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin') | ||
11 | const CopyWebpackPlugin = require('copy-webpack-plugin') | ||
12 | const CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin | ||
13 | const HtmlWebpackPlugin = require('html-webpack-plugin') | ||
13 | const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin') | 14 | const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin') |
14 | const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') | 15 | const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') |
16 | const ngcWebpack = require('ngc-webpack') | ||
17 | |||
15 | const WebpackNotifierPlugin = require('webpack-notifier') | 18 | const WebpackNotifierPlugin = require('webpack-notifier') |
16 | 19 | ||
17 | /* | 20 | /* |
@@ -29,7 +32,8 @@ const METADATA = { | |||
29 | * See: http://webpack.github.io/docs/configuration.html#cli | 32 | * See: http://webpack.github.io/docs/configuration.html#cli |
30 | */ | 33 | */ |
31 | module.exports = function (options) { | 34 | module.exports = function (options) { |
32 | var isProd = options.env === 'production' | 35 | const isProd = options.env === 'production' |
36 | const AOT = isProd | ||
33 | 37 | ||
34 | return { | 38 | return { |
35 | 39 | ||
@@ -49,9 +53,10 @@ module.exports = function (options) { | |||
49 | * See: http://webpack.github.io/docs/configuration.html#entry | 53 | * See: http://webpack.github.io/docs/configuration.html#entry |
50 | */ | 54 | */ |
51 | entry: { | 55 | entry: { |
52 | 'polyfills': './src/polyfills.ts', | 56 | 'polyfills': './src/polyfills.browser.ts', |
53 | 'vendor': './src/vendor.ts', | 57 | 'main': AOT |
54 | 'main': './src/main.ts' | 58 | ? './src/main.browser.aot.ts' |
59 | : './src/main.browser.ts' | ||
55 | }, | 60 | }, |
56 | 61 | ||
57 | /* | 62 | /* |
@@ -67,7 +72,7 @@ module.exports = function (options) { | |||
67 | */ | 72 | */ |
68 | extensions: [ '.ts', '.js', '.json', '.scss' ], | 73 | extensions: [ '.ts', '.js', '.json', '.scss' ], |
69 | 74 | ||
70 | modules: [helpers.root('src'), 'node_modules'], | 75 | modules: [ helpers.root('src'), helpers.root('node_modules') ], |
71 | 76 | ||
72 | alias: { | 77 | alias: { |
73 | 'video.js': 'video.js/dist/alt/video.novtt' | 78 | 'video.js': 'video.js/dist/alt/video.novtt' |
@@ -90,10 +95,18 @@ module.exports = function (options) { | |||
90 | */ | 95 | */ |
91 | { | 96 | { |
92 | test: /\.ts$/, | 97 | test: /\.ts$/, |
93 | loaders: [ | 98 | use: [ |
94 | '@angularclass/hmr-loader?pretty=' + !isProd + '&prod=' + isProd, | 99 | '@angularclass/hmr-loader?pretty=' + !isProd + '&prod=' + isProd, |
95 | 'awesome-typescript-loader', | 100 | 'awesome-typescript-loader?{configFileName: "tsconfig.webpack.json"}', |
96 | 'angular2-template-loader' | 101 | 'angular2-template-loader', |
102 | { | ||
103 | loader: 'ng-router-loader', | ||
104 | options: { | ||
105 | loader: 'async-system', | ||
106 | genDir: 'compiled', | ||
107 | aot: AOT | ||
108 | } | ||
109 | } | ||
97 | ], | 110 | ], |
98 | exclude: [/\.(spec|e2e)\.ts$/] | 111 | exclude: [/\.(spec|e2e)\.ts$/] |
99 | }, | 112 | }, |
@@ -110,10 +123,11 @@ module.exports = function (options) { | |||
110 | 123 | ||
111 | { | 124 | { |
112 | test: /\.(sass|scss)$/, | 125 | test: /\.(sass|scss)$/, |
113 | loaders: ['css-to-string-loader', 'css-loader?sourceMap', 'resolve-url', 'sass-loader?sourceMap'] | 126 | use: ['css-to-string-loader', 'css-loader?sourceMap', 'resolve-url-loader', 'sass-loader?sourceMap'], |
127 | exclude: [ helpers.root('src', 'styles') ] | ||
114 | }, | 128 | }, |
115 | { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'url?limit=10000&minetype=application/font-woff' }, | 129 | { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'url-loader?limit=10000&minetype=application/font-woff' }, |
116 | { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'file' }, | 130 | { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'file-loader' }, |
117 | 131 | ||
118 | /* Raw loader support for *.html | 132 | /* Raw loader support for *.html |
119 | * Returns file content as string | 133 | * Returns file content as string |
@@ -148,7 +162,7 @@ module.exports = function (options) { | |||
148 | * | 162 | * |
149 | * See: https://github.com/s-panferov/awesome-typescript-loader#forkchecker-boolean-defaultfalse | 163 | * See: https://github.com/s-panferov/awesome-typescript-loader#forkchecker-boolean-defaultfalse |
150 | */ | 164 | */ |
151 | new ForkCheckerPlugin(), | 165 | new CheckerPlugin(), |
152 | 166 | ||
153 | /* | 167 | /* |
154 | * Plugin: CommonsChunkPlugin | 168 | * Plugin: CommonsChunkPlugin |
@@ -158,8 +172,21 @@ module.exports = function (options) { | |||
158 | * See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin | 172 | * See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin |
159 | * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app | 173 | * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app |
160 | */ | 174 | */ |
161 | new webpack.optimize.CommonsChunkPlugin({ | 175 | new CommonsChunkPlugin({ |
162 | name: [ 'polyfills', 'vendor' ].reverse() | 176 | name: 'polyfills', |
177 | chunks: ['polyfills'] | ||
178 | }), | ||
179 | |||
180 | // This enables tree shaking of the vendor modules | ||
181 | new CommonsChunkPlugin({ | ||
182 | name: 'vendor', | ||
183 | chunks: ['main'], | ||
184 | minChunks: module => /node_modules\//.test(module.resource) | ||
185 | }), | ||
186 | |||
187 | // Specify the correct order the scripts will be injected in | ||
188 | new CommonsChunkPlugin({ | ||
189 | name: ['polyfills', 'vendor'].reverse() | ||
163 | }), | 190 | }), |
164 | 191 | ||
165 | /** | 192 | /** |
@@ -171,8 +198,11 @@ module.exports = function (options) { | |||
171 | */ | 198 | */ |
172 | new ContextReplacementPlugin( | 199 | new ContextReplacementPlugin( |
173 | // The (\\|\/) piece accounts for path separators in *nix and Windows | 200 | // The (\\|\/) piece accounts for path separators in *nix and Windows |
174 | /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, | 201 | /angular(\\|\/)core(\\|\/)src(\\|\/)linker/, |
175 | helpers.root('src') // location of your src | 202 | helpers.root('src'), // location of your src |
203 | { | ||
204 | // your Angular Async Route paths relative to this root directory | ||
205 | } | ||
176 | ), | 206 | ), |
177 | 207 | ||
178 | /* | 208 | /* |
@@ -255,6 +285,34 @@ module.exports = function (options) { | |||
255 | precision: 10 | 285 | precision: 10 |
256 | } | 286 | } |
257 | } | 287 | } |
288 | }), | ||
289 | |||
290 | // Fix Angular 2 | ||
291 | new NormalModuleReplacementPlugin( | ||
292 | /facade(\\|\/)async/, | ||
293 | helpers.root('node_modules/@angular/core/src/facade/async.js') | ||
294 | ), | ||
295 | new NormalModuleReplacementPlugin( | ||
296 | /facade(\\|\/)collection/, | ||
297 | helpers.root('node_modules/@angular/core/src/facade/collection.js') | ||
298 | ), | ||
299 | new NormalModuleReplacementPlugin( | ||
300 | /facade(\\|\/)errors/, | ||
301 | helpers.root('node_modules/@angular/core/src/facade/errors.js') | ||
302 | ), | ||
303 | new NormalModuleReplacementPlugin( | ||
304 | /facade(\\|\/)lang/, | ||
305 | helpers.root('node_modules/@angular/core/src/facade/lang.js') | ||
306 | ), | ||
307 | new NormalModuleReplacementPlugin( | ||
308 | /facade(\\|\/)math/, | ||
309 | helpers.root('node_modules/@angular/core/src/facade/math.js') | ||
310 | ), | ||
311 | |||
312 | new ngcWebpack.NgcWebpackPlugin({ | ||
313 | disabled: !AOT, | ||
314 | tsConfig: helpers.root('tsconfig.webpack.json'), | ||
315 | resourceOverride: helpers.root('config/resource-override.js') | ||
258 | }) | 316 | }) |
259 | ], | 317 | ], |
260 | 318 | ||
@@ -270,7 +328,9 @@ module.exports = function (options) { | |||
270 | process: true, | 328 | process: true, |
271 | module: false, | 329 | module: false, |
272 | clearImmediate: false, | 330 | clearImmediate: false, |
273 | setImmediate: false | 331 | setImmediate: false, |
332 | setInterval: false, | ||
333 | setTimeout: false | ||
274 | } | 334 | } |
275 | } | 335 | } |
276 | } | 336 | } |
diff --git a/client/config/webpack.dev.js b/client/config/webpack.dev.js index 964ea56a5..cea9d0306 100644 --- a/client/config/webpack.dev.js +++ b/client/config/webpack.dev.js | |||
@@ -1,6 +1,7 @@ | |||
1 | const helpers = require('./helpers') | 1 | const helpers = require('./helpers') |
2 | const webpackMerge = require('webpack-merge') // used to merge webpack configs | 2 | const webpackMerge = require('webpack-merge') // used to merge webpack configs |
3 | const commonConfig = require('./webpack.common.js') // the settings that are common to prod and dev | 3 | const commonConfig = require('./webpack.common.js') // the settings that are common to prod and dev |
4 | const path = require('path') | ||
4 | 5 | ||
5 | /** | 6 | /** |
6 | * Webpack Plugins | 7 | * Webpack Plugins |
@@ -29,7 +30,7 @@ const METADATA = webpackMerge(commonConfig({env: ENV}).metadata, { | |||
29 | * See: http://webpack.github.io/docs/configuration.html#cli | 30 | * See: http://webpack.github.io/docs/configuration.html#cli |
30 | */ | 31 | */ |
31 | module.exports = function (env) { | 32 | module.exports = function (env) { |
32 | return webpackMerge(commonConfig({env: ENV}), { | 33 | return webpackMerge(commonConfig({ env: ENV }), { |
33 | /** | 34 | /** |
34 | * Developer tool to enhance debugging | 35 | * Developer tool to enhance debugging |
35 | * | 36 | * |
diff --git a/client/config/webpack.prod.js b/client/config/webpack.prod.js index 447d47415..64d776f24 100644 --- a/client/config/webpack.prod.js +++ b/client/config/webpack.prod.js | |||
@@ -9,14 +9,15 @@ const commonConfig = require('./webpack.common.js') // the settings that are com | |||
9 | /** | 9 | /** |
10 | * Webpack Plugins | 10 | * Webpack Plugins |
11 | */ | 11 | */ |
12 | // const ProvidePlugin = require('webpack/lib/ProvidePlugin') | ||
13 | const DefinePlugin = require('webpack/lib/DefinePlugin') | 12 | const DefinePlugin = require('webpack/lib/DefinePlugin') |
14 | const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin') | 13 | const ExtractTextPlugin = require('extract-text-webpack-plugin') |
14 | const IgnorePlugin = require('webpack/lib/IgnorePlugin') | ||
15 | const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin') | 15 | const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin') |
16 | // const IgnorePlugin = require('webpack/lib/IgnorePlugin') | 16 | const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin') |
17 | // const DedupePlugin = require('webpack/lib/optimize/DedupePlugin') | 17 | const ProvidePlugin = require('webpack/lib/ProvidePlugin') |
18 | const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin') | 18 | const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin') |
19 | const WebpackMd5Hash = require('webpack-md5-hash') | 19 | const WebpackMd5Hash = require('webpack-md5-hash') |
20 | const V8LazyParseWebpackPlugin = require('v8-lazy-parse-webpack-plugin') | ||
20 | 21 | ||
21 | /** | 22 | /** |
22 | * Webpack Constants | 23 | * Webpack Constants |
@@ -154,22 +155,67 @@ module.exports = function (env) { | |||
154 | // comments: true, //debug | 155 | // comments: true, //debug |
155 | 156 | ||
156 | beautify: false, // prod | 157 | beautify: false, // prod |
158 | output: { | ||
159 | comments: false | ||
160 | }, // prod | ||
157 | mangle: { | 161 | mangle: { |
158 | screw_ie8: true, | 162 | screw_ie8: true |
159 | keep_fnames: true | ||
160 | }, // prod | 163 | }, // prod |
161 | compress: { | 164 | compress: { |
162 | screw_ie8: true, | 165 | screw_ie8: true, |
163 | warnings: false | 166 | warnings: false, |
164 | }, // prod | 167 | conditionals: true, |
165 | comments: false // prod | 168 | unused: true, |
169 | comparisons: true, | ||
170 | sequences: true, | ||
171 | dead_code: true, | ||
172 | evaluate: true, | ||
173 | if_return: true, | ||
174 | join_vars: true, | ||
175 | negate_iife: false // we need this for lazy v8 | ||
176 | } | ||
166 | }), | 177 | }), |
167 | 178 | ||
168 | new NormalModuleReplacementPlugin( | 179 | new NormalModuleReplacementPlugin( |
169 | /angular2-hmr/, | 180 | /angular2-hmr/, |
170 | helpers.root('config/modules/angular2-hmr-prod.js') | 181 | helpers.root('config/empty.js') |
171 | ), | 182 | ), |
172 | 183 | ||
184 | new NormalModuleReplacementPlugin( | ||
185 | /zone\.js(\\|\/)dist(\\|\/)long-stack-trace-zone/, | ||
186 | helpers.root('config/empty.js') | ||
187 | ), | ||
188 | |||
189 | // AoT | ||
190 | // new NormalModuleReplacementPlugin( | ||
191 | // /@angular(\\|\/)upgrade/, | ||
192 | // helpers.root('config/empty.js') | ||
193 | // ), | ||
194 | // new NormalModuleReplacementPlugin( | ||
195 | // /@angular(\\|\/)compiler/, | ||
196 | // helpers.root('config/empty.js') | ||
197 | // ), | ||
198 | // new NormalModuleReplacementPlugin( | ||
199 | // /@angular(\\|\/)platform-browser-dynamic/, | ||
200 | // helpers.root('config/empty.js') | ||
201 | // ), | ||
202 | // new NormalModuleReplacementPlugin( | ||
203 | // /dom(\\|\/)debug(\\|\/)ng_probe/, | ||
204 | // helpers.root('config/empty.js') | ||
205 | // ), | ||
206 | // new NormalModuleReplacementPlugin( | ||
207 | // /dom(\\|\/)debug(\\|\/)by/, | ||
208 | // helpers.root('config/empty.js') | ||
209 | // ), | ||
210 | // new NormalModuleReplacementPlugin( | ||
211 | // /src(\\|\/)debug(\\|\/)debug_node/, | ||
212 | // helpers.root('config/empty.js') | ||
213 | // ), | ||
214 | // new NormalModuleReplacementPlugin( | ||
215 | // /src(\\|\/)debug(\\|\/)debug_renderer/, | ||
216 | // helpers.root('config/empty.js') | ||
217 | // ), | ||
218 | |||
173 | /** | 219 | /** |
174 | * Plugin: IgnorePlugin | 220 | * Plugin: IgnorePlugin |
175 | * Description: Don’t generate modules for requests matching the provided RegExp. | 221 | * Description: Don’t generate modules for requests matching the provided RegExp. |
@@ -228,7 +274,7 @@ module.exports = function (env) { | |||
228 | [/\*/, /(?:)/], | 274 | [/\*/, /(?:)/], |
229 | [/\[?\(?/, /(?:)/] | 275 | [/\[?\(?/, /(?:)/] |
230 | ], | 276 | ], |
231 | customAttrAssign: [/\)?]?=/] | 277 | customAttrAssign: [/\)?\]?=/] |
232 | }, | 278 | }, |
233 | 279 | ||
234 | // FIXME: Remove | 280 | // FIXME: Remove |
diff --git a/client/package.json b/client/package.json index e9f41959d..5d09f4c54 100644 --- a/client/package.json +++ b/client/package.json | |||
@@ -20,6 +20,7 @@ | |||
20 | "dependencies": { | 20 | "dependencies": { |
21 | "@angular/common": "~2.4.1", | 21 | "@angular/common": "~2.4.1", |
22 | "@angular/compiler": "~2.4.1", | 22 | "@angular/compiler": "~2.4.1", |
23 | "@angular/compiler-cli": "^2.4.3", | ||
23 | "@angular/core": "~2.4.1", | 24 | "@angular/core": "~2.4.1", |
24 | "@angular/forms": "~2.4.1", | 25 | "@angular/forms": "~2.4.1", |
25 | "@angular/http": "~2.4.1", | 26 | "@angular/http": "~2.4.1", |
@@ -33,12 +34,13 @@ | |||
33 | "@types/source-map": "^0.1.26", | 34 | "@types/source-map": "^0.1.26", |
34 | "@types/uglify-js": "^2.0.27", | 35 | "@types/uglify-js": "^2.0.27", |
35 | "@types/videojs": "0.0.30", | 36 | "@types/videojs": "0.0.30", |
36 | "@types/webpack": "^1.12.29", | 37 | "@types/webpack": "^2.0.0", |
37 | "angular-pipes": "^5.0.0", | 38 | "angular-pipes": "^5.0.0", |
38 | "angular2-template-loader": "^0.6.0", | 39 | "angular2-template-loader": "^0.6.0", |
39 | "assets-webpack-plugin": "^3.4.0", | 40 | "assets-webpack-plugin": "^3.4.0", |
40 | "awesome-typescript-loader": "^2.2.1", | 41 | "awesome-typescript-loader": "~3.0.0-beta.17", |
41 | "bootstrap-loader": "^2.0.0-beta.11", | 42 | "bootstrap": "^3.3.6", |
43 | "bootstrap-loader": "2.0.0-beta.18", | ||
42 | "bootstrap-sass": "^3.3.6", | 44 | "bootstrap-sass": "^3.3.6", |
43 | "copy-webpack-plugin": "^4.0.0", | 45 | "copy-webpack-plugin": "^4.0.0", |
44 | "core-js": "^2.4.1", | 46 | "core-js": "^2.4.1", |
@@ -52,9 +54,11 @@ | |||
52 | "intl": "^1.2.4", | 54 | "intl": "^1.2.4", |
53 | "json-loader": "^0.5.4", | 55 | "json-loader": "^0.5.4", |
54 | "ng2-bootstrap": "1.1.16-10", | 56 | "ng2-bootstrap": "1.1.16-10", |
55 | "ng2-file-upload": "^1.1.0", | 57 | "ng2-file-upload": "^1.1.4-2", |
56 | "ng2-meta": "^2.0.0", | 58 | "ng2-meta": "^2.0.0", |
57 | "node-sass": "^3.10.0", | 59 | "ng-router-loader": "^1.0.2", |
60 | "ngc-webpack": "^1.1.0", | ||
61 | "node-sass": "^4.1.1", | ||
58 | "normalize.css": "^5.0.0", | 62 | "normalize.css": "^5.0.0", |
59 | "raw-loader": "^0.5.1", | 63 | "raw-loader": "^0.5.1", |
60 | "reflect-metadata": "0.1.8", | 64 | "reflect-metadata": "0.1.8", |
@@ -68,13 +72,14 @@ | |||
68 | "ts-helpers": "^1.1.1", | 72 | "ts-helpers": "^1.1.1", |
69 | "tslint": "3.15.1", | 73 | "tslint": "3.15.1", |
70 | "tslint-loader": "^2.1.4", | 74 | "tslint-loader": "^2.1.4", |
71 | "typescript": "~2.0.9", | 75 | "typescript": "~2.1.0", |
72 | "url-loader": "^0.5.7", | 76 | "url-loader": "^0.5.7", |
77 | "v8-lazy-parse-webpack-plugin": "^0.3.0", | ||
73 | "video.js": "^5.11.9", | 78 | "video.js": "^5.11.9", |
74 | "videojs-dock": "^2.0.2", | 79 | "videojs-dock": "^2.0.2", |
75 | "webpack": "2.1.0-beta.25", | 80 | "webpack": "2.2.0-rc.3", |
76 | "webpack-md5-hash": "0.0.5", | 81 | "webpack-md5-hash": "0.0.5", |
77 | "webpack-merge": "^0.15.0", | 82 | "webpack-merge": "~2.3.1", |
78 | "webpack-notifier": "^1.3.0", | 83 | "webpack-notifier": "^1.3.0", |
79 | "webtorrent": "^0.98.0", | 84 | "webtorrent": "^0.98.0", |
80 | "zone.js": "~0.7.2" | 85 | "zone.js": "~0.7.2" |
diff --git a/client/src/app/account/account.service.ts b/client/src/app/account/account.service.ts index 0635c2533..046690347 100644 --- a/client/src/app/account/account.service.ts +++ b/client/src/app/account/account.service.ts | |||
@@ -1,4 +1,6 @@ | |||
1 | import { Injectable } from '@angular/core'; | 1 | import { Injectable } from '@angular/core'; |
2 | import 'rxjs/add/operator/catch'; | ||
3 | import 'rxjs/add/operator/map'; | ||
2 | 4 | ||
3 | import { AuthService } from '../core'; | 5 | import { AuthService } from '../core'; |
4 | import { AuthHttp, RestExtractor } from '../shared'; | 6 | import { AuthHttp, RestExtractor } from '../shared'; |
diff --git a/client/src/app/admin/friends/shared/friend.service.ts b/client/src/app/admin/friends/shared/friend.service.ts index 85ac04ba0..e97459385 100644 --- a/client/src/app/admin/friends/shared/friend.service.ts +++ b/client/src/app/admin/friends/shared/friend.service.ts | |||
@@ -1,5 +1,7 @@ | |||
1 | import { Injectable } from '@angular/core'; | 1 | import { Injectable } from '@angular/core'; |
2 | import { Observable } from 'rxjs/Observable'; | 2 | import { Observable } from 'rxjs/Observable'; |
3 | import 'rxjs/add/operator/catch'; | ||
4 | import 'rxjs/add/operator/map'; | ||
3 | 5 | ||
4 | import { Friend } from './friend.model'; | 6 | import { Friend } from './friend.model'; |
5 | import { AuthHttp, RestExtractor, ResultList } from '../../../shared'; | 7 | import { AuthHttp, RestExtractor, ResultList } from '../../../shared'; |
diff --git a/client/src/app/admin/requests/request-stats/request-stats.component.ts b/client/src/app/admin/requests/request-stats/request-stats.component.ts index 9e2af219c..66075e4b5 100644 --- a/client/src/app/admin/requests/request-stats/request-stats.component.ts +++ b/client/src/app/admin/requests/request-stats/request-stats.component.ts | |||
@@ -1,3 +1,4 @@ | |||
1 | import { setInterval } from 'timers' | ||
1 | import { Component, OnInit, OnDestroy } from '@angular/core'; | 2 | import { Component, OnInit, OnDestroy } from '@angular/core'; |
2 | 3 | ||
3 | import { RequestService, RequestStats } from '../shared'; | 4 | import { RequestService, RequestStats } from '../shared'; |
diff --git a/client/src/app/admin/requests/shared/request.service.ts b/client/src/app/admin/requests/shared/request.service.ts index aeec37448..55b28bcfc 100644 --- a/client/src/app/admin/requests/shared/request.service.ts +++ b/client/src/app/admin/requests/shared/request.service.ts | |||
@@ -1,5 +1,7 @@ | |||
1 | import { Injectable } from '@angular/core'; | 1 | import { Injectable } from '@angular/core'; |
2 | import { Observable } from 'rxjs/Observable'; | 2 | import { Observable } from 'rxjs/Observable'; |
3 | import 'rxjs/add/operator/catch'; | ||
4 | import 'rxjs/add/operator/map'; | ||
3 | 5 | ||
4 | import { RequestStats } from './request-stats.model'; | 6 | import { RequestStats } from './request-stats.model'; |
5 | import { AuthHttp, RestExtractor } from '../../../shared'; | 7 | import { AuthHttp, RestExtractor } from '../../../shared'; |
diff --git a/client/src/app/admin/users/shared/user.service.ts b/client/src/app/admin/users/shared/user.service.ts index 13be553c0..d9005b213 100644 --- a/client/src/app/admin/users/shared/user.service.ts +++ b/client/src/app/admin/users/shared/user.service.ts | |||
@@ -1,4 +1,6 @@ | |||
1 | import { Injectable } from '@angular/core'; | 1 | import { Injectable } from '@angular/core'; |
2 | import 'rxjs/add/operator/catch'; | ||
3 | import 'rxjs/add/operator/map'; | ||
2 | 4 | ||
3 | import { AuthHttp, RestExtractor, ResultList, User } from '../../../shared'; | 5 | import { AuthHttp, RestExtractor, ResultList, User } from '../../../shared'; |
4 | 6 | ||
diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index ce4fc04ff..3f2f1ace0 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts | |||
@@ -1,7 +1,7 @@ | |||
1 | import { Component, ViewContainerRef } from '@angular/core'; | 1 | import { Component, ViewContainerRef } from '@angular/core'; |
2 | import { Router } from '@angular/router'; | 2 | import { Router } from '@angular/router'; |
3 | 3 | ||
4 | import { MetaService } from 'ng2-meta'; | 4 | import { MetaService } from 'ng2-meta/src'; |
5 | @Component({ | 5 | @Component({ |
6 | selector: 'my-app', | 6 | selector: 'my-app', |
7 | templateUrl: './app.component.html', | 7 | templateUrl: './app.component.html', |
diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index e9bb800f4..fb71787c4 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts | |||
@@ -2,7 +2,8 @@ import { ApplicationRef, NgModule } from '@angular/core'; | |||
2 | import { BrowserModule } from '@angular/platform-browser'; | 2 | import { BrowserModule } from '@angular/platform-browser'; |
3 | import { removeNgStyles, createNewHosts } from '@angularclass/hmr'; | 3 | import { removeNgStyles, createNewHosts } from '@angularclass/hmr'; |
4 | 4 | ||
5 | import { MetaModule, MetaConfig } from 'ng2-meta'; | 5 | import { MetaModule, MetaConfig } from 'ng2-meta/src'; |
6 | import 'bootstrap-loader'; | ||
6 | 7 | ||
7 | import { ENV_PROVIDERS } from './environment'; | 8 | import { ENV_PROVIDERS } from './environment'; |
8 | import { AppRoutingModule } from './app-routing.module'; | 9 | import { AppRoutingModule } from './app-routing.module'; |
diff --git a/client/src/app/app.service.ts b/client/src/app/app.service.ts index 033c21900..9b582e472 100644 --- a/client/src/app/app.service.ts +++ b/client/src/app/app.service.ts | |||
@@ -1,35 +1,35 @@ | |||
1 | |||
2 | import { Injectable } from '@angular/core'; | 1 | import { Injectable } from '@angular/core'; |
3 | 2 | ||
3 | export type InternalStateType = { | ||
4 | [key: string]: any | ||
5 | }; | ||
6 | |||
4 | @Injectable() | 7 | @Injectable() |
5 | export class AppState { | 8 | export class AppState { |
6 | _state = { }; | ||
7 | 9 | ||
8 | constructor() { ; } | 10 | public _state: InternalStateType = { }; |
9 | 11 | ||
10 | // already return a clone of the current state | 12 | // already return a clone of the current state |
11 | get state() { | 13 | public get state() { |
12 | return this._state = this._clone(this._state); | 14 | return this._state = this._clone(this._state); |
13 | } | 15 | } |
14 | // never allow mutation | 16 | // never allow mutation |
15 | set state(value) { | 17 | public set state(value) { |
16 | throw new Error('do not mutate the `.state` directly'); | 18 | throw new Error('do not mutate the `.state` directly'); |
17 | } | 19 | } |
18 | 20 | ||
19 | 21 | public get(prop?: any) { | |
20 | get(prop?: any) { | ||
21 | // use our state getter for the clone | 22 | // use our state getter for the clone |
22 | const state = this.state; | 23 | const state = this.state; |
23 | return state.hasOwnProperty(prop) ? state[prop] : state; | 24 | return state.hasOwnProperty(prop) ? state[prop] : state; |
24 | } | 25 | } |
25 | 26 | ||
26 | set(prop: string, value: any) { | 27 | public set(prop: string, value: any) { |
27 | // internally mutate our state | 28 | // internally mutate our state |
28 | return this._state[prop] = value; | 29 | return this._state[prop] = value; |
29 | } | 30 | } |
30 | 31 | ||
31 | 32 | private _clone(object: InternalStateType) { | |
32 | _clone(object) { | ||
33 | // simple object clone | 33 | // simple object clone |
34 | return JSON.parse(JSON.stringify( object )); | 34 | return JSON.parse(JSON.stringify( object )); |
35 | } | 35 | } |
diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 1f0e322a9..bc276ed99 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts | |||
@@ -3,6 +3,8 @@ import { Headers, Http, Response, URLSearchParams } from '@angular/http'; | |||
3 | import { Router } from '@angular/router'; | 3 | import { Router } from '@angular/router'; |
4 | import { Observable } from 'rxjs/Observable'; | 4 | import { Observable } from 'rxjs/Observable'; |
5 | import { Subject } from 'rxjs/Subject'; | 5 | import { Subject } from 'rxjs/Subject'; |
6 | import 'rxjs/add/operator/map'; | ||
7 | import 'rxjs/add/operator/mergeMap'; | ||
6 | 8 | ||
7 | // Do not use the barrel (dependency loop) | 9 | // Do not use the barrel (dependency loop) |
8 | import { AuthStatus } from '../../shared/auth/auth-status.model'; | 10 | import { AuthStatus } from '../../shared/auth/auth-status.model'; |
diff --git a/client/src/app/environment.ts b/client/src/app/environment.ts index 8bba89c4e..929e09490 100644 --- a/client/src/app/environment.ts +++ b/client/src/app/environment.ts | |||
@@ -4,19 +4,24 @@ | |||
4 | import { enableDebugTools, disableDebugTools } from '@angular/platform-browser'; | 4 | import { enableDebugTools, disableDebugTools } from '@angular/platform-browser'; |
5 | import { enableProdMode, ApplicationRef } from '@angular/core'; | 5 | import { enableProdMode, ApplicationRef } from '@angular/core'; |
6 | // Environment Providers | 6 | // Environment Providers |
7 | let PROVIDERS = [ | 7 | let PROVIDERS: any[] = [ |
8 | // common env directives | 8 | // common env directives |
9 | ]; | 9 | ]; |
10 | 10 | ||
11 | // Angular debug tools in the dev console | 11 | // Angular debug tools in the dev console |
12 | // https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md | 12 | // https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md |
13 | let _decorateModuleRef = function identity(value) { return value; }; | 13 | let _decorateModuleRef = function identity<T>(value: T): T { return value; }; |
14 | 14 | ||
15 | if ('production' === ENV) { | 15 | if ('production' === ENV) { |
16 | // Production | ||
17 | disableDebugTools(); | ||
18 | enableProdMode(); | 16 | enableProdMode(); |
19 | 17 | ||
18 | // Production | ||
19 | _decorateModuleRef = (modRef: any) => { | ||
20 | disableDebugTools(); | ||
21 | |||
22 | return modRef; | ||
23 | }; | ||
24 | |||
20 | PROVIDERS = [ | 25 | PROVIDERS = [ |
21 | ...PROVIDERS, | 26 | ...PROVIDERS, |
22 | // custom providers in production | 27 | // custom providers in production |
diff --git a/client/src/app/shared/auth/auth-http.service.ts b/client/src/app/shared/auth/auth-http.service.ts index 602726570..c4114aa02 100644 --- a/client/src/app/shared/auth/auth-http.service.ts +++ b/client/src/app/shared/auth/auth-http.service.ts | |||
@@ -80,12 +80,14 @@ export class AuthHttp extends Http { | |||
80 | } | 80 | } |
81 | } | 81 | } |
82 | 82 | ||
83 | export function useFactory(backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) { | ||
84 | return new AuthHttp(backend, defaultOptions, authService); | ||
85 | } | ||
86 | |||
83 | export const AUTH_HTTP_PROVIDERS = [ | 87 | export const AUTH_HTTP_PROVIDERS = [ |
84 | { | 88 | { |
85 | provide: AuthHttp, | 89 | provide: AuthHttp, |
86 | useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) => { | 90 | useFactory, |
87 | return new AuthHttp(backend, defaultOptions, authService); | ||
88 | }, | ||
89 | deps: [ XHRBackend, RequestOptions, AuthService ] | 91 | deps: [ XHRBackend, RequestOptions, AuthService ] |
90 | }, | 92 | }, |
91 | ]; | 93 | ]; |
diff --git a/client/src/app/videos/shared/video.service.ts b/client/src/app/videos/shared/video.service.ts index f173ef06b..9d79b2f5e 100644 --- a/client/src/app/videos/shared/video.service.ts +++ b/client/src/app/videos/shared/video.service.ts | |||
@@ -1,6 +1,8 @@ | |||
1 | import { Injectable } from '@angular/core'; | 1 | import { Injectable } from '@angular/core'; |
2 | import { Http } from '@angular/http'; | 2 | import { Http } from '@angular/http'; |
3 | import { Observable } from 'rxjs/Observable'; | 3 | import { Observable } from 'rxjs/Observable'; |
4 | import 'rxjs/add/operator/catch'; | ||
5 | import 'rxjs/add/operator/map'; | ||
4 | 6 | ||
5 | import { Search } from '../../shared'; | 7 | import { Search } from '../../shared'; |
6 | import { SortField } from './sort-field.type'; | 8 | import { SortField } from './sort-field.type'; |
diff --git a/client/src/app/videos/video-watch/video-magnet.component.html b/client/src/app/videos/video-watch/video-magnet.component.html index 9108c7258..3fa82f1be 100644 --- a/client/src/app/videos/video-watch/video-magnet.component.html +++ b/client/src/app/videos/video-watch/video-magnet.component.html | |||
@@ -3,7 +3,7 @@ | |||
3 | <div class="modal-content modal-lg"> | 3 | <div class="modal-content modal-lg"> |
4 | 4 | ||
5 | <div class="modal-header"> | 5 | <div class="modal-header"> |
6 | <button type="button" class="close" aria-label="Close" (click)="hideModal()"> | 6 | <button type="button" class="close" aria-label="Close" (click)="hide()"> |
7 | <span aria-hidden="true">×</span> | 7 | <span aria-hidden="true">×</span> |
8 | </button> | 8 | </button> |
9 | <h4 class="modal-title">Magnet Uri</h4> | 9 | <h4 class="modal-title">Magnet Uri</h4> |
diff --git a/client/src/app/videos/video-watch/video-share.component.html b/client/src/app/videos/video-watch/video-share.component.html index 1c2fac1d7..88f59c063 100644 --- a/client/src/app/videos/video-watch/video-share.component.html +++ b/client/src/app/videos/video-watch/video-share.component.html | |||
@@ -3,7 +3,7 @@ | |||
3 | <div class="modal-content"> | 3 | <div class="modal-content"> |
4 | 4 | ||
5 | <div class="modal-header"> | 5 | <div class="modal-header"> |
6 | <button type="button" class="close" aria-label="Close" (click)="hideModal()"> | 6 | <button type="button" class="close" aria-label="Close" (click)="hide()"> |
7 | <span aria-hidden="true">×</span> | 7 | <span aria-hidden="true">×</span> |
8 | </button> | 8 | </button> |
9 | <h4 class="modal-title">Share</h4> | 9 | <h4 class="modal-title">Share</h4> |
diff --git a/client/src/app/videos/video-watch/video-watch.component.ts b/client/src/app/videos/video-watch/video-watch.component.ts index afc6fe01c..14aae9895 100644 --- a/client/src/app/videos/video-watch/video-watch.component.ts +++ b/client/src/app/videos/video-watch/video-watch.component.ts | |||
@@ -1,7 +1,8 @@ | |||
1 | import { setInterval, setTimeout } from 'timers' | ||
1 | import { Component, ElementRef, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core'; | 2 | import { Component, ElementRef, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core'; |
2 | import { ActivatedRoute } from '@angular/router'; | 3 | import { ActivatedRoute } from '@angular/router'; |
3 | 4 | ||
4 | import { MetaService } from 'ng2-meta'; | 5 | import { MetaService } from 'ng2-meta/src'; |
5 | import * as videojs from 'video.js'; | 6 | import * as videojs from 'video.js'; |
6 | 7 | ||
7 | import { VideoMagnetComponent } from './video-magnet.component'; | 8 | import { VideoMagnetComponent } from './video-magnet.component'; |
diff --git a/client/src/custom-typings.d.ts b/client/src/custom-typings.d.ts index 95787181f..7cb57b62b 100644 --- a/client/src/custom-typings.d.ts +++ b/client/src/custom-typings.d.ts | |||
@@ -46,6 +46,16 @@ import * as _ from 'lodash' | |||
46 | // support NodeJS modules without type definitions | 46 | // support NodeJS modules without type definitions |
47 | declare module '*'; | 47 | declare module '*'; |
48 | 48 | ||
49 | /* | ||
50 | // for legacy tslint etc to understand rename 'modern-lru' with your package | ||
51 | // then comment out `declare module '*';`. For each new module copy/paste | ||
52 | // this method of creating an `any` module type definition | ||
53 | declare module 'modern-lru' { | ||
54 | let x: any; | ||
55 | export = x; | ||
56 | } | ||
57 | */ | ||
58 | |||
49 | // Extra variables that live on Global that will be replaced by webpack DefinePlugin | 59 | // Extra variables that live on Global that will be replaced by webpack DefinePlugin |
50 | declare var ENV: string; | 60 | declare var ENV: string; |
51 | declare var HMR: boolean; | 61 | declare var HMR: boolean; |
@@ -56,8 +66,8 @@ interface SystemJS { | |||
56 | } | 66 | } |
57 | 67 | ||
58 | interface GlobalEnvironment { | 68 | interface GlobalEnvironment { |
59 | ENV; | 69 | ENV: string; |
60 | HMR; | 70 | HMR: boolean; |
61 | SystemJS: SystemJS; | 71 | SystemJS: SystemJS; |
62 | System: SystemJS; | 72 | System: SystemJS; |
63 | } | 73 | } |
@@ -76,7 +86,6 @@ type AsyncRoutes = { | |||
76 | FactoryPromise | 86 | FactoryPromise |
77 | }; | 87 | }; |
78 | 88 | ||
79 | |||
80 | type IdleCallbacks = Es6PromiseLoader | | 89 | type IdleCallbacks = Es6PromiseLoader | |
81 | Function | | 90 | Function | |
82 | FactoryEs6PromiseLoader | | 91 | FactoryEs6PromiseLoader | |
@@ -98,7 +107,6 @@ interface WebpackModule { | |||
98 | }; | 107 | }; |
99 | } | 108 | } |
100 | 109 | ||
101 | |||
102 | interface WebpackRequire { | 110 | interface WebpackRequire { |
103 | (id: string): any; | 111 | (id: string): any; |
104 | (paths: string[], callback: (...modules: any[]) => void): void; | 112 | (paths: string[], callback: (...modules: any[]) => void): void; |
@@ -114,7 +122,6 @@ interface ErrorStackTraceLimit { | |||
114 | stackTraceLimit: number; | 122 | stackTraceLimit: number; |
115 | } | 123 | } |
116 | 124 | ||
117 | |||
118 | // Extend typings | 125 | // Extend typings |
119 | interface NodeRequire extends WebpackRequire {} | 126 | interface NodeRequire extends WebpackRequire {} |
120 | interface ErrorConstructor extends ErrorStackTraceLimit {} | 127 | interface ErrorConstructor extends ErrorStackTraceLimit {} |
diff --git a/client/src/main.browser.aot.ts b/client/src/main.browser.aot.ts new file mode 100644 index 000000000..29ecf7349 --- /dev/null +++ b/client/src/main.browser.aot.ts | |||
@@ -0,0 +1,23 @@ | |||
1 | import { platformBrowser } from '@angular/platform-browser'; | ||
2 | import { decorateModuleRef } from './app/environment'; | ||
3 | /* | ||
4 | * App Module | ||
5 | * our top level module that holds all of our components | ||
6 | */ | ||
7 | import { AppModuleNgFactory } from '../compiled/src/app/app.module.ngfactory'; | ||
8 | |||
9 | /* | ||
10 | * Bootstrap our Angular app with a top level NgModule | ||
11 | */ | ||
12 | export function main(): Promise<any> { | ||
13 | return platformBrowser() | ||
14 | .bootstrapModuleFactory(AppModuleNgFactory) | ||
15 | .then(decorateModuleRef) | ||
16 | .catch((err) => console.error(err)); | ||
17 | } | ||
18 | |||
19 | export function bootstrapDomReady() { | ||
20 | document.addEventListener('DOMContentLoaded', main); | ||
21 | } | ||
22 | |||
23 | bootstrapDomReady(); | ||
diff --git a/client/src/main.ts b/client/src/main.browser.ts index 70bf48537..70bf48537 100644 --- a/client/src/main.ts +++ b/client/src/main.browser.ts | |||
diff --git a/client/src/polyfills.ts b/client/src/polyfills.browser.ts index 65e211459..65e211459 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.browser.ts | |||
diff --git a/client/src/sass/application.scss b/client/src/sass/application.scss index cdb486557..30588067f 100644 --- a/client/src/sass/application.scss +++ b/client/src/sass/application.scss | |||
@@ -1,4 +1,4 @@ | |||
1 | @import '../video.js/dist/video-js.css'; | 1 | @import '../../node_modules/video.js/dist/video-js.css'; |
2 | 2 | ||
3 | body { | 3 | body { |
4 | padding: 20px; | 4 | padding: 20px; |
diff --git a/client/src/vendor.ts b/client/src/vendor.ts deleted file mode 100644 index 436c58f48..000000000 --- a/client/src/vendor.ts +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | // For vendors for example jQuery, Lodash, angular2-jwt just import them here unless you plan on | ||
2 | // chunking vendors files for async loading. You would need to import the async loaded vendors | ||
3 | // at the entry point of the async loaded file. Also see custom-typings.d.ts as you also need to | ||
4 | // run `typings install x` where `x` is your module | ||
5 | |||
6 | // Angular 2 | ||
7 | import '@angular/platform-browser'; | ||
8 | import '@angular/platform-browser-dynamic'; | ||
9 | import '@angular/core'; | ||
10 | import '@angular/common'; | ||
11 | import '@angular/forms'; | ||
12 | import '@angular/http'; | ||
13 | import '@angular/router'; | ||
14 | |||
15 | import '@angularclass/hmr'; | ||
16 | |||
17 | // RxJS | ||
18 | import 'rxjs/Observable'; | ||
19 | import 'rxjs/Subject'; | ||
20 | import 'rxjs/ReplaySubject'; | ||
21 | import 'rxjs/add/operator/catch'; | ||
22 | import 'rxjs/add/operator/mergeMap'; | ||
23 | import 'rxjs/add/operator/map'; | ||
24 | import 'rxjs/add/observable/throw'; | ||
25 | |||
26 | import 'bootstrap-loader'; | ||
27 | |||
28 | import 'angular-pipes/src/math/bytes.pipe'; | ||
29 | import 'ng2-file-upload'; | ||
30 | import 'video.js'; | ||
31 | import 'ng2-meta'; | ||
32 | import 'ng2-bootstrap/pagination'; | ||
33 | import 'ng2-bootstrap/dropdown'; | ||
34 | import 'ng2-bootstrap/progressbar'; | ||
35 | import 'ng2-bootstrap/modal'; | ||
diff --git a/client/tsconfig.webpack.json b/client/tsconfig.webpack.json new file mode 100644 index 000000000..a0830cada --- /dev/null +++ b/client/tsconfig.webpack.json | |||
@@ -0,0 +1,42 @@ | |||
1 | { | ||
2 | "compilerOptions": { | ||
3 | "target": "es5", | ||
4 | "module": "es2015", | ||
5 | "moduleResolution": "node", | ||
6 | "emitDecoratorMetadata": true, | ||
7 | "experimentalDecorators": true, | ||
8 | "allowSyntheticDefaultImports": true, | ||
9 | "sourceMap": true, | ||
10 | "noEmitHelpers": true, | ||
11 | "strictNullChecks": false, | ||
12 | "baseUrl": "./src", | ||
13 | "paths": [ | ||
14 | ], | ||
15 | "lib": [ | ||
16 | "dom", | ||
17 | "es6" | ||
18 | ], | ||
19 | "types": [ | ||
20 | "node", | ||
21 | "source-map", | ||
22 | "uglify-js", | ||
23 | "videojs", | ||
24 | "webpack" | ||
25 | ] | ||
26 | }, | ||
27 | "exclude": [ | ||
28 | "node_modules", | ||
29 | "dist" | ||
30 | ], | ||
31 | "awesomeTypescriptLoaderOptions": { | ||
32 | "forkChecker": true, | ||
33 | "useWebpackText": true | ||
34 | }, | ||
35 | "angularCompilerOptions": { | ||
36 | "genDir": "./compiled", | ||
37 | "skipMetadataEmit": true | ||
38 | }, | ||
39 | "compileOnSave": false, | ||
40 | "buildOnSave": false, | ||
41 | "atom": { "rewriteTsconfig": false } | ||
42 | } | ||