From eb088195d333c80ddad0f02c8d67c9cb073a4c89 Mon Sep 17 00:00:00 2001 From: Scott Prue Date: Mon, 10 Jul 2017 00:34:08 -0700 Subject: [PATCH 1/6] Export createFirebaseConnect * Export createFirebaseConnect * Rename connect.js to firebaseConnect.js (for clarity) --- package.json | 2 +- src/{connect.js => firebaseConnect.js} | 0 src/index.js | 7 ++++--- tests/unit/connect.spec.js | 4 ++-- webpack.config.js | 14 ++++++++------ 5 files changed, 15 insertions(+), 12 deletions(-) rename src/{connect.js => firebaseConnect.js} (100%) diff --git a/package.json b/package.json index 4a7dc0c11..d08480484 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-redux-firebase", - "version": "1.5.0-beta.3", + "version": "1.5.0-rc.1", "description": "Redux integration for Firebase. Comes with a Higher Order Component for use with React.", "main": "lib/index.js", "module": "es/index.js", diff --git a/src/connect.js b/src/firebaseConnect.js similarity index 100% rename from src/connect.js rename to src/firebaseConnect.js diff --git a/src/index.js b/src/index.js index 9fb7e8213..451334427 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,13 @@ -import connect from './connect' +import firebaseConnect, { createFirebaseConnect } from './firebaseConnect' import compose, { getFirebase } from './compose' import reducer from './reducer' import constants, { actionTypes } from './constants' import * as helpers from './helpers' export default { - firebase: connect, - firebaseConnect: connect, + firebase: firebaseConnect, + firebaseConnect, + createFirebaseConnect, firebaseStateReducer: reducer, reduxReactFirebase: compose, reactReduxFirebase: compose, diff --git a/tests/unit/connect.spec.js b/tests/unit/connect.spec.js index 486ff60d9..990210116 100644 --- a/tests/unit/connect.spec.js +++ b/tests/unit/connect.spec.js @@ -5,9 +5,9 @@ import TestUtils from 'react-addons-test-utils' import { createStore, compose, combineReducers } from 'redux' import getDisplayName from 'react-display-name' import reactReduxFirebase from '../../src/compose' -import firebaseConnect from '../../src/connect' +import firebaseConnect from '../../src/firebaseConnect' -describe('Connect', () => { +describe('firebaseConnect', () => { class Passthrough extends Component { render () { return
{JSON.stringify(this.props)}
diff --git a/webpack.config.js b/webpack.config.js index e42388f89..d53a4a63c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,11 +21,15 @@ const config = { commonjs2: 'react', amd: 'react', root: 'React' + }, + firebase: { + commonjs: 'firebase', + commonjs2: 'firebase', + amd: 'firebase', + root: 'Firebase' } }, - plugins: [ - - ] + plugins: [] } if (env === 'production') { @@ -43,9 +47,7 @@ if (env === 'production') { ) if (process.env.SIZE) { - config.plugins.push( - new BundleAnalyzerPlugin() - ) + config.plugins.push(new BundleAnalyzerPlugin()) } } From 67e5c143615a5e9ceb0a410af79c530cf10c52c3 Mon Sep 17 00:00:00 2001 From: Scott Prue Date: Mon, 10 Jul 2017 12:39:18 -0700 Subject: [PATCH 2/6] npmignore updates. No longer using stage-1. * env specific babel config added (decorators only used in testing) * .eslintrc added to tests folder (has globals needed only for testing) * `.npmignore` now includes other files not needed in published version (some files cause build errors such as `.babelrc`) * `stage-1` babel transform removed --- .babelrc | 18 ++++++++++++++---- .eslintrc | 7 ------- .npmignore | 17 ++++++++++++++++- package.json | 1 - tests/.eslintrc | 14 ++++++++++++++ 5 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 tests/.eslintrc diff --git a/.babelrc b/.babelrc index f0d8a8965..2ebda1eac 100644 --- a/.babelrc +++ b/.babelrc @@ -1,12 +1,22 @@ { - "presets": ["es2015", "stage-1", "react"], + "presets": ["es2015", "react"], "plugins": [ "es6-promise", "add-module-exports", "lodash", "transform-object-rest-spread", "transform-object-assign", - "transform-class-properties", - "transform-decorators-legacy" - ] + "transform-class-properties" + ], + "env": { + "es": { + "comments": false + }, + "commonjs": { + "comments": false + }, + "test": { + "plugins": ["transform-decorators-legacy"] + } + } } diff --git a/.eslintrc b/.eslintrc index a88694083..33193bbfa 100644 --- a/.eslintrc +++ b/.eslintrc @@ -15,13 +15,6 @@ ecmaFeatures: jsx: true modules: true -globals: - MockFirebase: true - sinon: true - Raven: true - __COVERAGE__: true - __DEV__: true - rules: semi: [2, 'never'] no-console: 'error' diff --git a/.npmignore b/.npmignore index 2239b0ef6..73a564d30 100644 --- a/.npmignore +++ b/.npmignore @@ -1,6 +1,21 @@ docs bin -tests examples +tests coverage +.istanbul.yml _book +.babelrc +SUMMARY.md +webpack.config.js +.eslintignore +.eslintrc +book.json +CNAME +.github +yarn.lock +.travis.yml +CODE_OF_CONDUCT.md +CHANGELOG.md +.codeclimate.yml +PATRONS.md diff --git a/package.json b/package.json index d08480484..cbf023e81 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,6 @@ "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-es2015": "^6.24.0", "babel-preset-react": "^6.23.0", - "babel-preset-stage-1": "^6.22.0", "babel-register": "^6.24.0", "chai": "^3.5.0", "chai-as-promised": "^6.0.0", diff --git a/tests/.eslintrc b/tests/.eslintrc new file mode 100644 index 000000000..ead6411e7 --- /dev/null +++ b/tests/.eslintrc @@ -0,0 +1,14 @@ +extends: ../.eslintrc + +globals: + sinon: true + expect: true + after: true + afterEach: true + before: true + beforeEach: true + Firebase: true + firebase: true + +rules: + no-unused-expressions: [0] From 95ac29c32a1d5a2a076971c0e17c4d884ee79d67 Mon Sep 17 00:00:00 2001 From: Scott Prue Date: Mon, 10 Jul 2017 12:55:27 -0700 Subject: [PATCH 3/6] Login now supports credential. Test added to confirm credential functionality. --- src/utils/auth.js | 32 +++++++++----------------------- tests/unit/utils/auth.spec.js | 13 ++++++++++++- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/utils/auth.js b/src/utils/auth.js index 9b38530a2..ae900ad5f 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -57,36 +57,22 @@ export const createAuthProvider = (firebase, providerName, scopes) => { * @param {String} credentials.scopes - Scopes to add to provider (i.e. email) * @private */ -export const getLoginMethodAndParams = (firebase, {email, password, provider, type, token, scopes}) => { +export const getLoginMethodAndParams = (firebase, {email, password, provider, type, token, scopes, credential}) => { if (provider) { + if (credential) { + return { method: 'signInWithCredential', params: [ credential ] } + } if (token) { - return { - method: 'signInWithCredential', - params: [ provider, token ] - } + return { method: 'signInWithCredential', params: [ provider, token ] } } const authProvider = createAuthProvider(firebase, provider, scopes) if (type === 'popup') { - return { - method: 'signInWithPopup', - params: [ authProvider ] - } - } - return { - method: 'signInWithRedirect', - params: [ authProvider ] + return { method: 'signInWithPopup', params: [ authProvider ] } } + return { method: 'signInWithRedirect', params: [ authProvider ] } } if (token) { - return { - method: 'signInWithCustomToken', - params: [ token ] - } - } - return { - method: 'signInWithEmailAndPassword', - params: [ email, password ] + return { method: 'signInWithCustomToken', params: [ token ] } } + return { method: 'signInWithEmailAndPassword', params: [ email, password ] } } - -export default { getLoginMethodAndParams } diff --git a/tests/unit/utils/auth.spec.js b/tests/unit/utils/auth.spec.js index 17d65d905..c33cfddb8 100644 --- a/tests/unit/utils/auth.spec.js +++ b/tests/unit/utils/auth.spec.js @@ -5,20 +5,22 @@ import { describe('Utils: Auth', () => { describe('createAuthProvider', () => { - // Skipped due to capatalize and auth provider function it('creates valid Auth Provider', () => { expect(createAuthProvider(firebase, 'google', ['email'])) .to.be.a.function }) + it('handles string list of scopes', () => { expect(createAuthProvider(firebase, 'google', 'email')) .to.be.a.function }) + it('handles customAuthParameters config option', () => { firebase._.config.customAuthParameters = { google: [{prompt: 'select_account'}] } expect(createAuthProvider(firebase, 'google', 'email')) .to.be.a.function }) + it('throws for invalid provider', () => { const provider = 'asdf' expect(() => createAuthProvider(firebase, provider, ['email'])) @@ -31,19 +33,28 @@ describe('Utils: Auth', () => { expect(getLoginMethodAndParams(firebase, { provider: 'google' })) .to.include.keys('method') }) + it('twitter provider', () => { // TODO: Confirm that addScope expect(getLoginMethodAndParams(firebase, { provider: 'twitter' })) .to.include.keys('method') }) + it('token', () => { expect(getLoginMethodAndParams(firebase, { token: 'asdf' })) .to.include.keys('method') }) + it('token with provider', () => { expect(getLoginMethodAndParams(firebase, { provider: 'google', token: 'asdf' })) .to.include.keys('method') }) + + it('credential', () => { + expect(getLoginMethodAndParams(firebase, { provider: 'google', credential: 'asdf' })) + .to.include.keys('method') + }) + it('popup', () => { expect(getLoginMethodAndParams(firebase, { provider: 'google', type: 'popup' })) .to.include.keys('method') From 21fa7f60fe73b60d2f577ea27978fe583b2d211f Mon Sep 17 00:00:00 2001 From: Scott Prue Date: Mon, 10 Jul 2017 13:20:03 -0700 Subject: [PATCH 4/6] Docs update for login method credential support. * deprecation warning added for provider + token combo in login method --- bin/api-docs-generate.js | 2 +- docs/api/compose.md | 64 +++++++++++++++++++++++++++++++++++----- docs/auth.md | 54 ++++++++++++++++++++++----------- src/actions/auth.js | 2 ++ src/utils/auth.js | 7 +++-- 5 files changed, 100 insertions(+), 29 deletions(-) diff --git a/bin/api-docs-generate.js b/bin/api-docs-generate.js index d8ecbce89..d8aa52b54 100644 --- a/bin/api-docs-generate.js +++ b/bin/api-docs-generate.js @@ -1,7 +1,7 @@ const exec = require('child_process').exec const files = [ { - src: 'connect.js', + src: 'firebaseConnect.js', dest: 'connect.md' }, { diff --git a/docs/api/compose.md b/docs/api/compose.md index 3f49aba82..12b377f9c 100644 --- a/docs/api/compose.md +++ b/docs/api/compose.md @@ -102,7 +102,8 @@ Sets data to Firebase. _Basic_ ```javascript -import React, { Component, PropTypes } from 'react' +import React, { Component } from 'react' +import PropTypes from 'prop-types' import { firebaseConnect } from 'react-redux-firebase' const Example = ({ firebase: { set } }) => (