summaryrefslogtreecommitdiff
path: root/date-fns/config
diff options
context:
space:
mode:
Diffstat (limited to 'date-fns/config')
-rw-r--r--date-fns/config/.eslintrc.js5
-rw-r--r--date-fns/config/_lib/benchmarkJSONReporter.js48
-rw-r--r--date-fns/config/_lib/countReporter.js34
-rw-r--r--date-fns/config/karma.js220
-rw-r--r--date-fns/config/webpack.js79
5 files changed, 386 insertions, 0 deletions
diff --git a/date-fns/config/.eslintrc.js b/date-fns/config/.eslintrc.js
new file mode 100644
index 0000000..a40aaa8
--- /dev/null
+++ b/date-fns/config/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-console': 'off'
+ }
+}
diff --git a/date-fns/config/_lib/benchmarkJSONReporter.js b/date-fns/config/_lib/benchmarkJSONReporter.js
new file mode 100644
index 0000000..d435c96
--- /dev/null
+++ b/date-fns/config/_lib/benchmarkJSONReporter.js
@@ -0,0 +1,48 @@
+var fs = require('fs')
+
+var benchmarkResultFilename = './tmp/benchmark.json'
+
+function benchmarkJSONReporter () {
+ var benchmarkResult = {}
+
+ this.onSpecComplete = function (_, result) {
+ var fnName = result.benchmark.suite
+ var libraryName = result.benchmark.name
+ var operationsPerSecond = Math.floor(result.benchmark.hz)
+
+ if (!benchmarkResult[fnName]) {
+ benchmarkResult[fnName] = {}
+ }
+
+ benchmarkResult[fnName][libraryName] = operationsPerSecond
+ }
+
+ this.onRunComplete = function () {
+ var benchmarkResultArray = []
+ for (var fnName in benchmarkResult) {
+ if (benchmarkResult.hasOwnProperty(fnName)) {
+ var element = {fn: fnName}
+
+ if (benchmarkResult[fnName]['date-fns']) {
+ element.dateFns = benchmarkResult[fnName]['date-fns']
+ }
+
+ if (benchmarkResult[fnName]['Moment.js']) {
+ element.moment = benchmarkResult[fnName]['Moment.js']
+ }
+
+ benchmarkResultArray.push(element)
+ }
+ }
+
+ fs.writeFile(benchmarkResultFilename, JSON.stringify(benchmarkResultArray), 'utf-8', function (err) {
+ if (err) {
+ throw err
+ }
+
+ console.log('See results at ' + benchmarkResultFilename)
+ })
+ }
+}
+
+module.exports = benchmarkJSONReporter
diff --git a/date-fns/config/_lib/countReporter.js b/date-fns/config/_lib/countReporter.js
new file mode 100644
index 0000000..e78e238
--- /dev/null
+++ b/date-fns/config/_lib/countReporter.js
@@ -0,0 +1,34 @@
+var fs = require('fs')
+
+var countFilename = './tmp/tests_count.txt'
+
+function countReporter() {
+ this.onRunComplete = function (_, result) {
+ var runCount = result.success
+
+ fs.readFile(
+ countFilename,
+ { encoding: 'utf-8', flag: 'a+' },
+ function (err, data) {
+ if (err) {
+ throw err
+ }
+
+ var totalCount = (parseInt(data, 10) || 0) + runCount
+
+ fs.writeFile(
+ countFilename,
+ totalCount.toString(),
+ 'utf-8',
+ function (err) {
+ if (err) {
+ throw err
+ }
+ }
+ )
+ }
+ )
+ }
+}
+
+module.exports = countReporter
diff --git a/date-fns/config/karma.js b/date-fns/config/karma.js
new file mode 100644
index 0000000..e43fe80
--- /dev/null
+++ b/date-fns/config/karma.js
@@ -0,0 +1,220 @@
+process.env.PHANTOMJS_BIN = 'node_modules/.bin/phantomjs'
+process.env.NODE_ENV = 'test'
+
+const webpackConfig = require('./webpack')
+const countReporter = require('./_lib/countReporter')
+const benchmarkJSONReporter = require('./_lib/benchmarkJSONReporter')
+
+const sauceLabsLaunchers = {
+ // TODO: See if Safari became more reliable
+ safari: {
+ base: 'SauceLabs',
+ platform: 'OS X 10.11',
+ browserName: 'safari',
+ version: '9.0',
+ },
+
+ chrome: {
+ base: 'SauceLabs',
+ platform: 'Windows 8.1',
+ browserName: 'chrome',
+ version: '46.0',
+ },
+
+ firefox: {
+ base: 'SauceLabs',
+ platform: 'Windows 8.1',
+ browserName: 'firefox',
+ version: '41.0',
+ },
+
+ ie8: {
+ base: 'SauceLabs',
+ platform: 'Windows 7',
+ browserName: 'internet explorer',
+ version: '8.0',
+ },
+
+ ie9: {
+ base: 'SauceLabs',
+ platform: 'Windows 7',
+ browserName: 'internet explorer',
+ version: '9.0',
+ },
+
+ ie10: {
+ base: 'SauceLabs',
+ platform: 'Windows 7',
+ browserName: 'internet explorer',
+ version: '10.0',
+ },
+
+ ie11: {
+ base: 'SauceLabs',
+ platform: 'Windows 8.1',
+ browserName: 'internet explorer',
+ version: '11.0',
+ },
+
+ edge: {
+ base: 'SauceLabs',
+ platform: 'Windows 10',
+ browserName: 'microsoftedge',
+ version: '20.10240',
+ },
+
+ // TODO: See if iPhone became more reliable
+ // ios: {
+ // base: 'SauceLabs',
+ // browserName: 'iphone',
+ // platform: 'OS X 10.10',
+ // version: '9.1',
+ // deviceName: 'iPhone 6',
+ // deviceOrientation: 'portrait'
+ // },
+
+ android: {
+ base: 'SauceLabs',
+ browserName: 'android',
+ platform: 'Linux',
+ version: '5.1',
+ deviceName: 'Android Emulator',
+ deviceOrientation: 'portrait',
+ },
+}
+
+const localLaunchers = {
+ LocalChrome: {
+ base: 'Chrome',
+ },
+}
+
+const ciLaunchers = {
+ CIChrome: {
+ base: 'ChromeHeadless',
+ },
+}
+
+function config(config) {
+ config.set({
+ frameworks: getFrameworksConfig(),
+ files: getFilesConfig(),
+ preprocessors: getPreprocessorsConfig(),
+ webpack: webpackConfig,
+ webpackMiddleware: {
+ stats: {
+ assets: false,
+ chunks: false,
+ hash: false,
+ timings: false,
+ version: false,
+ },
+ },
+
+ // We are limited in the number of parallel VMs in SauceLabs (5)
+ // and Karma don't know how to limit parallel browser instances
+ // so waiting time must be insanely high.
+ browserNoActivityTimeout: process.env.TEST_CROSS_BROWSER
+ ? 60 * 60 * 1000 /* 1 hour */
+ : 10 * 1000 /* 10 sec */,
+ captureTimeout: process.env.TEST_CROSS_BROWSER
+ ? 120 * 1000 /* 2 min */
+ : 60 * 1000 /* 1 min */,
+
+ sauceLabs: {
+ startConnect: false,
+ tunnelIdentifier: process.env.GITHUB_RUN_ID,
+ recordScreenshots: false,
+ public: 'public',
+ },
+
+ coveageIstanbulReporter: {
+ reports: ['html', 'lcovonly'],
+ fixWebpackSourcePaths: true,
+ },
+
+ mochaReporter: {
+ output: 'minimal',
+ },
+
+ plugins: (process.env.COVERAGE_REPORT
+ ? ['karma-coverage', 'karma-coverage-istanbul-reporter']
+ : []
+ ).concat([
+ 'karma-mocha',
+ 'karma-mocha-reporter',
+ 'karma-phantomjs-launcher',
+ 'karma-chrome-launcher',
+ // TODO: Make it work
+ // 'karma-sauce-launcher',
+ 'karma-sourcemap-loader',
+ 'karma-webpack',
+ 'karma-benchmark',
+ 'karma-benchmark-reporter',
+ { 'reporter:count': ['type', countReporter] },
+ { 'reporter:benchmark-json': ['type', benchmarkJSONReporter] },
+ ]),
+
+ customLaunchers: process.env.TEST_CROSS_BROWSER
+ ? sauceLabsLaunchers
+ : process.env.CI
+ ? ciLaunchers
+ : localLaunchers,
+ browsers: getBrowsersConfig(),
+ reporters: getReportersConfig(),
+ })
+}
+
+function getFrameworksConfig() {
+ if (process.env.TEST_BENCHMARK) {
+ return ['benchmark']
+ } else {
+ return ['mocha']
+ }
+}
+
+function getFilesConfig() {
+ if (process.env.USE_STATIC_TESTS) {
+ return ['../tmp/tests.js']
+ } else if (process.env.TEST_BENCHMARK) {
+ return ['../node_modules/moment/moment.js', '../benchmark.js']
+ } else {
+ return ['../test.js']
+ }
+}
+
+function getPreprocessorsConfig() {
+ if (process.env.USE_STATIC_TESTS) {
+ return { '../tmp/tests.js': ['sourcemap'] }
+ } else if (process.env.TEST_BENCHMARK) {
+ return { '../benchmark.js': ['webpack', 'sourcemap'] }
+ } else {
+ return { '../test.js': ['webpack', 'sourcemap'] }
+ }
+}
+
+function getBrowsersConfig() {
+ if (process.env.TEST_CROSS_BROWSER) {
+ return Object.keys(sauceLabsLaunchers)
+ } else if (process.env.TEST_BENCHMARK) {
+ return ['PhantomJS']
+ } else if (process.env.CI) {
+ return Object.keys(ciLaunchers)
+ } else {
+ return Object.keys(localLaunchers)
+ }
+}
+
+function getReportersConfig() {
+ if (process.env.TEST_CROSS_BROWSER) {
+ return ['dots', 'saucelabs', 'count']
+ } else if (process.env.TEST_BENCHMARK) {
+ return ['benchmark', 'benchmark-json']
+ } else if (process.env.COVERAGE_REPORT) {
+ return ['coverage-istanbul']
+ } else {
+ return ['mocha', 'count']
+ }
+}
+
+module.exports = config
diff --git a/date-fns/config/webpack.js b/date-fns/config/webpack.js
new file mode 100644
index 0000000..327b587
--- /dev/null
+++ b/date-fns/config/webpack.js
@@ -0,0 +1,79 @@
+const path = require('path')
+const webpack = require('webpack')
+
+const isProduction = process.env.NODE_ENV === 'production'
+
+const config = {
+ mode: isProduction ? 'production' : 'development',
+ devtool: isProduction ? 'source-map' : 'inline-source-map',
+ entry: getEntryConfig(),
+ output: getOutputConfig(),
+ resolve: {
+ extensions: ['.ts', '.js']
+ },
+ module: {
+ rules: [
+ { test: /\.(js|ts)$/, exclude: /node_modules/, use: 'babel-loader' }
+ ].concat(
+ process.env.COVERAGE_REPORT
+ ? [
+ {
+ test: /\.(js|ts)$/,
+ use: {
+ loader: 'istanbul-instrumenter-loader',
+ options: { esModules: true }
+ },
+ enforce: 'post',
+ exclude: /node_modules|test.js|src\/locale$/
+ }
+ ]
+ : []
+ )
+ },
+ plugins: getPlugins()
+}
+
+module.exports = config
+
+function getEntryConfig() {
+ if (process.env.BUILD_TESTS) {
+ return {
+ tests: './testWithoutLocales.js'
+ }
+ } else if (process.env.NODE_ENV === 'test') {
+ return undefined
+ } else {
+ return {
+ date_fns: './tmp/umd/index.js'
+ }
+ }
+}
+
+function getOutputConfig() {
+ if (process.env.BUILD_TESTS) {
+ return {
+ path: path.join(process.cwd(), 'tmp'),
+ filename: '[name].js'
+ }
+ } else if (process.env.NODE_ENV === 'test') {
+ return undefined
+ } else {
+ return {
+ path: path.join(process.cwd(), 'dist'),
+ filename: '[name].js',
+ library: 'dateFns',
+ libraryTarget: 'umd'
+ }
+ }
+}
+
+function getPlugins() {
+ return process.env.NODE_ENV === 'test'
+ ? [
+ new webpack.ContextReplacementPlugin(
+ /power-assert-formatter[\\/]lib/,
+ new RegExp('^\\./.*\\.js$')
+ )
+ ]
+ : undefined
+}