From 937928c706f976190fe4011df0cfbebb4e353a18 Mon Sep 17 00:00:00 2001 From: Bill Neff Date: Fri, 22 Mar 2019 16:19:29 -0400 Subject: [PATCH] update dependencies --- README.md | 31 +++++++++++++++------ karma.conf.js | 38 ++++++++++++++++++-------- package.json | 70 +++++++++++++++++++++++++----------------------- rollup.config.js | 60 +++++++++++++++-------------------------- test/index.js | 52 +++++++++++++++++------------------ 5 files changed, 134 insertions(+), 117 deletions(-) diff --git a/README.md b/README.md index 8c097b5..cf5723b 100644 --- a/README.md +++ b/README.md @@ -36,17 +36,32 @@ render( +#### Table of Contents + +- [Provider](#provider) + - [Parameters](#parameters) + - [Examples](#examples) +- [MergingProvider](#mergingprovider) + - [Parameters](#parameters-1) + - [Examples](#examples-1) +- [provide](#provide) + - [Parameters](#parameters-2) + - [Examples](#examples-2) +- [mergingProvide](#mergingprovide) + - [Parameters](#parameters-3) + - [Examples](#examples-3) + ### Provider Adds all passed `props`, `children` into `context`, making them available to all descendants. To learn about `context`, see the [React Docs](https://facebook.github.io/react/docs/context.html). -**Parameters** +#### Parameters - `props` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** All props are exposed as properties in `context`, except children -**Examples** +#### Examples ```javascript const Demo = (props, context) => { @@ -77,13 +92,13 @@ provided by the current `MergingProvider` to be deep merged, instead of replaced To learn about `context`, see the [React Docs](https://facebook.github.io/react/docs/context.html). -**Parameters** +#### Parameters - `props` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** All props are exposed as properties in `context`, except `children` and `mergeProps` - `props.mergeProps` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)?** If not supplied, all supplied props will be merged with keys already in context. If supplied as an array of strings, it will deep merge any prop names that are present in the array, and missing prop names be overriden by the child like [Provider](#provider). -**Examples** +#### Examples ```javascript import Provider, { MergingProvider } from 'preact-context-provider'; @@ -117,11 +132,11 @@ render( Higher Order Component that wraps components in a [Provider](#provider) for the given context. -**Parameters** +#### Parameters - `ctx` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** Properties to pass into context (passed to [Provider](#provider)) -**Examples** +#### Examples ```javascript import {provide} from 'preact-context-provider'; @@ -139,11 +154,11 @@ Returns **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference Higher Order Component that wraps components in a [MergingProvider](#mergingprovider) for the given context. -**Parameters** +#### Parameters - `ctx` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** Properties to pass into context (passed to [MergingProvider](#mergingprovider)) -**Examples** +#### Examples ```javascript import {mergingProvide} from 'preact-context-provider'; diff --git a/karma.conf.js b/karma.conf.js index 66a1ae0..be12376 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,36 +1,52 @@ -/* eslint-env node */ +/* eslint-disable */ + +var path = require('path'); + +var pkg = require('./package.json'); + +var REPORTER = process.env.REPORTER || (process.env.ENVIRONMENT==='ci' && 'junit') || ''; module.exports = function(config) { config.set({ - browsers: ['jsdom'], + browsers: ['ChromeHeadless'], frameworks: ['mocha', 'chai-sinon'], - reporters: ['mocha'], + reporters: ['mocha'].concat(REPORTER.split(/[, ]/)).filter(dedupe), + junitReporter: { + outputDir: 'test-reports', // results will be saved as $outputDir/$browserName.xml + suite: require('./package.json').name + }, mochaReporter: { showDiff: true }, files: [ - { pattern: 'test/**/*.js', watched: false } + 'test/**/*.js' ], preprocessors: { '{src,test}/**/*': ['webpack', 'sourcemap'] }, webpack: { + mode: 'development', + devtool: 'inline-source-map', + resolve: { + alias: { + 'preact-context-provider': path.resolve(__dirname, process.env.TEST_PRODUCTION ? pkg.main : 'src') + } + }, module: { rules: [{ test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader', options: { - presets: [ - ['es2015', { loose: true }], - 'stage-0' - ], + presets: [ '@babel/env' ], plugins: [ - ['transform-react-jsx', { pragma: 'h' }] + ['@babel/plugin-transform-react-jsx', { pragma: 'h' }] ] } }] }, - devtool: 'inline-source-map' }, - webpackServer: { noInfo: true } + webpackServer: { stats: 'errors-only' } }); }; + +// filters out empties && dupes +function dedupe(v, i, arr) { return v && arr.indexOf(v)===i; } diff --git a/package.json b/package.json index 64ea9a5..81e85e4 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,18 @@ "module": "dist/preact-context-provider.es.js", "main": "dist/preact-context-provider.umd.js", "cjs:main": "dist/preact-context-provider.js", + "source": "src/index.js", "scripts": { "lint": "eslint src test", - "test": "npm-run-all lint test:unit", + "test": "npm-run-all -p lint test:unit test:prod", "test:unit": "karma start karma.conf.js --single-run", + "test:prod": "TEST_PRODUCTION=true npm run test:unit", "test:watch": "npm run test:unit -- --no-single-run", "build": "npm-run-all --silent clean transpile:* docs size", "clean": "rimraf dist && mkdirp dist", - "transpile:umd": "rollup -c --environment FORMAT:umd", - "transpile:es": "rollup -c --environment FORMAT:es", + "transpile:cjs": "rollup -c -m -f cjs -n $npm_package_amdName -i $npm_package_source -o $npm_package_cjs_main", + "transpile:umd": "rollup -c -m -f umd -n $npm_package_amdName -i $npm_package_source -o $npm_package_main", + "transpile:esm": "rollup -c -m -f es -n $npm_package_amdName -i $npm_package_source -o $npm_package_module", "docs": "documentation readme src/index.js --section API -q", "size": "echo \"Gzipped Size: $(strip-json-comments --no-whitespace dist/preact-context-provider.js | gzip-size --raw)b\"", "release": "npm run build -s && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish" @@ -43,42 +46,43 @@ "extends": "eslint-config-synacor" }, "devDependencies": { - "babel-core": "^6.9.0", - "babel-eslint": "^7.2.3", - "babel-loader": "^7.0.0", - "babel-plugin-external-helpers": "^6.8.0", - "babel-plugin-transform-react-jsx": "^6.8.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-0": "^6.5.0", - "chai": "^4.0.2", - "diff": "^3.2.0", - "documentation": "^4.0.0-beta4", - "eslint": "^3.17.1", - "eslint-config-synacor": "^1.0.0", - "gzip-size-cli": "^2.0.0", - "jsdom": "^11.0.0", - "karma": "^1.7.0", + "@babel/core": "^7.4.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "@babel/preset-env": "^7.4.2", + "babel-eslint": "^10.0.1", + "babel-loader": "^8.0.5", + "babel-plugin-external-helpers": "^6.22.0", + "chai": "^4.2.0", + "diff": "^4.0.1", + "documentation": "^9.3.1", + "eslint": "^5.15.3", + "eslint-config-synacor": "^3.0.3", + "gzip-size-cli": "^3.0.0", + "karma": "^4.0.1", "karma-chai": "^0.1.0", + "karma-chai-as-promised": "^0.1.2", "karma-chai-sinon": "^0.1.5", - "karma-jsdom-launcher": "^6.1.2", - "karma-mocha": "^1.0.1", - "karma-mocha-reporter": "^2.0.2", + "karma-chrome-launcher": "^2.2.0", + "karma-cli": "^2.0.0", + "karma-junit-reporter": "^1.2.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^2.0.3", + "karma-webpack": "^3.0.5", "mkdirp": "^0.5.1", - "mocha": "^3.2.0", - "npm-run-all": "^4.0.2", - "preact": "^8.1.0", + "mocha": "^6.0.2", + "npm-run-all": "^4.1.5", + "preact": "^8.2.5", "preact-jsx-chai": "^2.2.1", - "rimraf": "^2.6.1", - "rollup": "^0.42.0", - "rollup-plugin-buble": "^0.15.0", - "rollup-plugin-memory": "^2.0.0", - "rollup-plugin-uglify": "^2.0.1", - "sinon": "^2.3.2", - "sinon-chai": "^2.8.0", + "rimraf": "^2.6.3", + "rollup": "^1.7.0", + "rollup-plugin-buble": "^0.19.6", + "rollup-plugin-memory": "^3.0.0", + "rollup-plugin-uglify": "^6.0.2", + "sinon": "^7.3.0", + "sinon-chai": "^3.3.0", "strip-json-comments-cli": "^1.0.1", - "webpack": "^2.6.1" + "webpack": "^4.29.6" }, "peerDependencies": { "preact": "*" diff --git a/rollup.config.js b/rollup.config.js index 7aed638..774527f 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,43 +1,25 @@ -import fs from 'fs'; import memory from 'rollup-plugin-memory'; import buble from 'rollup-plugin-buble'; -import uglify from 'rollup-plugin-uglify'; +import { uglify } from 'rollup-plugin-uglify'; -let pkg = JSON.parse(fs.readFileSync('./package.json')); - -let format = process.env.FORMAT==='es' ? 'es' : 'umd'; - -export default { - entry: 'src/index.js', - useStrict: false, - sourceMap: true, - exports: format==='es' ? null : 'default', - moduleName: pkg.amdName, - external: ['preact'], - globals: { preact: 'preact' }, - plugins: [ - format==='umd' && memory({ - path: 'src/cjs.js', - contents: "export { default } from './index';" - }), - buble({ jsx: 'h' }), - format==='umd' && uglify({ - output: { - comments: false - }, - mangle: { - toplevel: true - }, - compress: { - pure_getters: true, - pure_funcs: ['classCallCheck', 'possibleConstructorReturn'] +export default function(config) { + let format = config.format; + return { + external: ['preact'], + output: { + strict: false, + exports: format==='es' ? null : 'named', + globals: { + preact: 'preact' } - }) - ].filter(Boolean), - targets: format==='es' ? [ - { format: 'es', dest: pkg.module } - ] : [ - { format: 'umd', dest: pkg.main }, - { format: 'cjs', dest: pkg['cjs:main'] } - ] -}; + }, + plugins: [ + format==='umd' && memory({ + path: 'src/cjs.js', + contents: "export { default } from './index';" + }), + buble({ jsx: 'h' }), + format!=='es' && uglify() + ].filter(Boolean) + }; +} diff --git a/test/index.js b/test/index.js index 2d27ae4..5d6f09d 100644 --- a/test/index.js +++ b/test/index.js @@ -1,6 +1,6 @@ import { h, render } from 'preact'; import 'preact-jsx-chai'; -import Provider, { MergingProvider, provide, mergingProvide } from '../src'; +import Provider, { MergingProvider, provide, mergingProvide } from 'preact-context-provider'; describe('preact-context-provider', () => { let scratch = document.createElement('div'), @@ -27,11 +27,11 @@ describe('preact-context-provider', () => { it('should overwrite higher context keys', () => { mount( - - - - - ); + + + + + ); expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] }, { a: 'overwrittenA', b: 'b' }); }); @@ -41,44 +41,44 @@ describe('preact-context-provider', () => { describe('', () => { it('should deep merge with higher context keys, giving them precendence, when mergeProps is unset', () => { mount( - - - - - ); + + + + + ); expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] }, { a: { name: 'a', newProp: 'c' }, b: 'b' }); }); it('should deep merge with higher context keys, giving them precendence, when mergeProps is true', () => { mount( - - - - - ); + + + + + ); expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] }, { a: { name: 'a', newProp: 'c' }, b: 'b' }); }); it('should deep merge with selected higher context keys, giving them precendence, when mergeProps is an array', () => { mount( - - - - - ); + + + + + ); expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] }, { a: { name: 'a', newProp: 'c' }, b: { newProp: 'd' } }); }); it('should allow parent to prevent child value from merging by using null value for a key', () => { mount( - - - - - ); + + + + + ); expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] }, { a: null, b: { name: 'b', newProp: 'd' } }); });