Skip to content

Commit

Permalink
update dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
billneff79 committed Mar 22, 2019
1 parent f714647 commit 937928c
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 117 deletions.
31 changes: 23 additions & 8 deletions README.md
Expand Up @@ -36,17 +36,32 @@ render(

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### 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) => {
Expand Down Expand Up @@ -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';
Expand Down Expand Up @@ -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';
Expand All @@ -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';
Expand Down
38 changes: 27 additions & 11 deletions 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; }
70 changes: 37 additions & 33 deletions package.json
Expand Up @@ -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"
Expand Down Expand Up @@ -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": "*"
Expand Down
60 changes: 21 additions & 39 deletions 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)
};
}
52 changes: 26 additions & 26 deletions 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'),
Expand All @@ -27,11 +27,11 @@ describe('preact-context-provider', () => {

it('should overwrite higher context keys', () => {
mount(
<Provider {...context}>
<Provider a="overwrittenA" >
<Spy />
</Provider>
</Provider>);
<Provider {...context}>
<Provider a="overwrittenA" >
<Spy />
</Provider>
</Provider>);
expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] }, { a: 'overwrittenA', b: 'b' });

});
Expand All @@ -41,44 +41,44 @@ describe('preact-context-provider', () => {
describe('<MergingProvider />', () => {
it('should deep merge with higher context keys, giving them precendence, when mergeProps is unset', () => {
mount(
<MergingProvider {...context}>
<MergingProvider a={{ name: 'notOverwrittenNameA', newProp: 'c' }} b="newB">
<Spy />
</MergingProvider>
</MergingProvider>);
<MergingProvider {...context}>
<MergingProvider a={{ name: 'notOverwrittenNameA', newProp: 'c' }} b="newB">
<Spy />
</MergingProvider>
</MergingProvider>);
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(
<MergingProvider {...context}>
<MergingProvider mergeProps a={{ name: 'notOverwrittenNameA', newProp: 'c' }} b="newB">
<Spy />
</MergingProvider>
</MergingProvider>);
<MergingProvider {...context}>
<MergingProvider mergeProps a={{ name: 'notOverwrittenNameA', newProp: 'c' }} b="newB">
<Spy />
</MergingProvider>
</MergingProvider>);
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(
<MergingProvider a={{ name: 'a' }} b={{ name: 'b' }} >
<MergingProvider mergeProps={['a']} a={{ name: 'notOverwrittenNameA', newProp: 'c' }} b={{ newProp: 'd' }} >
<Spy />
</MergingProvider>
</MergingProvider>);
<MergingProvider a={{ name: 'a' }} b={{ name: 'b' }} >
<MergingProvider mergeProps={['a']} a={{ name: 'notOverwrittenNameA', newProp: 'c' }} b={{ newProp: 'd' }} >
<Spy />
</MergingProvider>
</MergingProvider>);
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(
<MergingProvider a={null} b={{ name: 'b' }} >
<MergingProvider mergeProps a={{ name: 'a', newProp: 'c' }} b={{ newProp: 'd' }} >
<Spy />
</MergingProvider>
</MergingProvider>);
<MergingProvider a={null} b={{ name: 'b' }} >
<MergingProvider mergeProps a={{ name: 'a', newProp: 'c' }} b={{ newProp: 'd' }} >
<Spy />
</MergingProvider>
</MergingProvider>);
expect(Spy).to.have.been.calledOnce.and.calledWith({ children: [] },
{ a: null, b: { name: 'b', newProp: 'd' } });
});
Expand Down

0 comments on commit 937928c

Please sign in to comment.