diff --git a/static/js/dict.ts b/static/js/dict.ts index 108f4aefe9..9fc7f878df 100644 --- a/static/js/dict.ts +++ b/static/js/dict.ts @@ -38,10 +38,11 @@ export class Dict { throw new TypeError("Cannot convert argument to Dict"); } - let dict = new Dict(opts); - for (const key in obj) { - dict.set(key, obj[key]); - } + const dict = new Dict(opts); + _.each(obj, function (val: V, key: string) { + dict.set(key, val); + }); + return dict; } @@ -56,7 +57,7 @@ export class Dict { throw new TypeError("Argument is not an array"); } - let dict = new Dict(opts); + const dict = new Dict(opts); for (const key of arr) { dict.set(key, true); } @@ -67,14 +68,14 @@ export class Dict { private _munge(key: K): string | undefined { if (key === undefined) { blueslip.error("Tried to call a Dict method with an undefined key."); - return undefined; + return; } - let str_key = ':' + key.toString(); + const str_key = ':' + key.toString(); return this._fold_case ? str_key.toLowerCase() : str_key; } clone(): Dict { - let dict = new Dict({fold_case: this._fold_case}); + const dict = new Dict({fold_case: this._fold_case}); dict._items = { ...this._items }; return dict; } @@ -82,7 +83,7 @@ export class Dict { get(key: K): V | undefined { const mapping = this._items[this._munge(key)]; if (mapping === undefined) { - return undefined; + return; } return mapping.v; } @@ -122,7 +123,7 @@ export class Dict { items(): [K, V][] { return _.map(_.values(this._items), - (mapping: KeyValue): [K, V] => [mapping.k, mapping.v]); + (mapping: KeyValue): [K, V] => [mapping.k, mapping.v]); } num_items(): number { diff --git a/tools/webpack-helpers.ts b/tools/webpack-helpers.ts index cdbb0db8c1..1a05855f8c 100644 --- a/tools/webpack-helpers.ts +++ b/tools/webpack-helpers.ts @@ -11,12 +11,12 @@ interface importLoaderOptions { path: string; args: string; } -function getImportLoaders( optionsArr:Array ) { - let importsLoaders = []; - for(var loaderEntry of optionsArr) { +function getImportLoaders(optionsArr:Array) { + const importsLoaders = []; + for (var loaderEntry of optionsArr) { importsLoaders.push({ test: require.resolve(loaderEntry.path), - use: "imports-loader?" + loaderEntry.args + use: "imports-loader?" + loaderEntry.args, }); } return importsLoaders; @@ -38,21 +38,21 @@ interface exportLoaderOptions { path: string; name?: string | Array; } -function getExposeLoaders( optionsArr:Array ) { - let exposeLoaders = []; - for(var loaderEntry of optionsArr) { - let path = loaderEntry.path; +function getExposeLoaders(optionsArr:Array) { + const exposeLoaders = []; + for (var loaderEntry of optionsArr) { + const path = loaderEntry.path; let name = ""; - let useArr = []; + const useArr = []; // If no name is provided, infer it - if(!loaderEntry.name) { + if (!loaderEntry.name) { name = basename(path, '.js'); useArr.push({loader: 'expose-loader', options: name}); } else { // If name is an array - if(Array.isArray(loaderEntry.name)) { - for(var exposeName of loaderEntry.name) { - useArr.push({loader: 'expose-loader', options: exposeName}) + if (Array.isArray(loaderEntry.name)) { + for (var exposeName of loaderEntry.name) { + useArr.push({loader: 'expose-loader', options: exposeName}); } // If name is a string } else { @@ -61,12 +61,12 @@ function getExposeLoaders( optionsArr:Array ) { } exposeLoaders.push({ test: require.resolve(path), - use: useArr + use: useArr, }); } return exposeLoaders; } export { getExposeLoaders, - getImportLoaders -} + getImportLoaders, +}; diff --git a/tools/webpack.config.ts b/tools/webpack.config.ts index 6e78c3b25e..076abce4d1 100644 --- a/tools/webpack.config.ts +++ b/tools/webpack.config.ts @@ -8,7 +8,7 @@ const assets = require('./webpack.assets.json'); // Adds on css-hot-loader in dev mode function getHotCSS(bundle:any[], isProd:boolean) { - if(isProd) { + if (isProd) { return bundle; } return [ @@ -18,7 +18,7 @@ function getHotCSS(bundle:any[], isProd:boolean) { export default (env?: string) : webpack.Configuration => { const production: boolean = env === "production"; - let config: webpack.Configuration = { + const config: webpack.Configuration = { mode: production ? "production" : "development", context: resolve(__dirname, "../"), entry: assets, @@ -29,8 +29,8 @@ export default (env?: string) : webpack.Configuration => { test: /\.tsx?$/, loader: 'ts-loader', options: { - configFile: require.resolve('../static/js/tsconfig.json') - } + configFile: require.resolve('../static/js/tsconfig.json'), + }, }, // Uses script-loader on minified files so we don't change global variables in them. // Also has the effect of making processing these files fast @@ -39,7 +39,7 @@ export default (env?: string) : webpack.Configuration => { { // We dont want to match admin.js test: /(\.min|min\.|zxcvbn)\.js/, - use: [ 'script-loader' ], + use: ['script-loader'], }, // regular css files { @@ -49,10 +49,10 @@ export default (env?: string) : webpack.Configuration => { { loader: 'css-loader', options: { - sourceMap: true + sourceMap: true, }, }, - ], production) + ], production), }, // sass / scss loader { @@ -62,15 +62,15 @@ export default (env?: string) : webpack.Configuration => { { loader: 'css-loader', options: { - sourceMap: true - } + sourceMap: true, + }, }, { loader: 'sass-loader', options: { - sourceMap: true - } - } + sourceMap: true, + }, + }, ], production), }, // load fonts and files @@ -80,10 +80,10 @@ export default (env?: string) : webpack.Configuration => { loader: 'file-loader', options: { name: '[name].[ext]', - outputPath: 'files/' - } - }] - } + outputPath: 'files/', + }, + }], + }, ], }, output: { @@ -111,8 +111,8 @@ export default (env?: string) : webpack.Configuration => { var importsOptions = [ { path: "../static/third/spectrum/spectrum.js", - args: "this=>window" - } + args: "this=>window", + }, ]; config.module.rules.push(...getImportLoaders(importsOptions)); @@ -136,7 +136,7 @@ export default (env?: string) : webpack.Configuration => { { path: "../node_modules/handlebars/dist/handlebars.runtime.js", name: 'Handlebars' }, { path: "../node_modules/to-markdown/dist/to-markdown.js", name: 'toMarkdown' }, { path: "../node_modules/sortablejs/Sortable.js"}, - { path: "../node_modules/winchan/winchan.js", name: 'WinChan'} + { path: "../node_modules/winchan/winchan.js", name: 'WinChan'}, ]; config.module.rules.push(...getExposeLoaders(exposeOptions)); @@ -149,17 +149,17 @@ export default (env?: string) : webpack.Configuration => { // This is a special case in order to produce // a static CSS file to be consumed by // static/html/5xx.html - if(data.chunk.name === 'error-styles') { + if (data.chunk.name === 'error-styles') { return 'error-styles.css'; } return '[name].[contenthash].css'; }, - chunkFilename: "[chunkhash].css" - }) + chunkFilename: "[chunkhash].css", + }), ]; } else { // Out JS debugging tools - config.entry['common'].push('./static/js/debug.js'); + config.entry['common'].push('./static/js/debug.js'); // eslint-disable-line dot-notation config.output.publicPath = '/webpack/'; config.plugins = [ @@ -171,15 +171,15 @@ export default (env?: string) : webpack.Configuration => { // Extract CSS from files new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[chunkhash].css" + chunkFilename: "[chunkhash].css", }), ]; config.devServer = { clientLogLevel: "error", stats: "errors-only", watchOptions: { - poll: 100 - } + poll: 100, + }, }; } return config;