diff --git a/.babelrc b/.babelrc index a9ce1369..39147287 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,3 @@ { - "presets": ["react-native"] + "presets": ["react-native", "flow"] } diff --git a/.flowconfig b/.flowconfig index 1dd3eff6..277ddbe6 100644 --- a/.flowconfig +++ b/.flowconfig @@ -1,6 +1,7 @@ [ignore] ; We fork some components by platform .*/*[.]android.js +/node_modules/.* ; Ignore "BUCK" generated dirs /\.buckd/ diff --git a/app/containers/AttendeesList/index.js b/app/containers/AttendeesList/index.js index a52094d1..d4dd055a 100644 --- a/app/containers/AttendeesList/index.js +++ b/app/containers/AttendeesList/index.js @@ -21,7 +21,21 @@ import * as actions from './actions'; import * as selectors from './selectors'; import * as ticketSelectors from '../TicketList/selectors'; -class AttendeesList extends Component { +// @flow +type Props = { + listAttendees?: Array, + isTransferring: boolean, + isGettingTicket: boolean, + ticketId: number, + isGettingAttendees: boolean, + fetchingAttendeeStat: boolean +}; + +type State = { + isLoading: boolean +}; + +class AttendeesList extends Component { state = { isLoading: true } @@ -45,7 +59,7 @@ class AttendeesList extends Component { } } - handleTransferPressed = (ticketId, receiverId, targetName) => { + handleTransferPressed = (ticketId: number, receiverId: number, targetName: string) => { Alert.alert( strings.attendeesList.confirm, targetName, @@ -134,21 +148,6 @@ class AttendeesList extends Component { } } -AttendeesList.propTypes = { - listAttendees: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.array - ] - ).isRequired, - isTransferring: PropTypes.bool.isRequired, - isGettingTicket: PropTypes.bool.isRequired, - fetchAttendees: PropTypes.func.isRequired, - transferTicket: PropTypes.func.isRequired, - ticketId: PropTypes.number.isRequired, - isGettingAttendees: PropTypes.bool.isRequired, - fetchingAttendeeStat: PropTypes.bool.isRequired -}; - const mapStateToProps = createStructuredSelector({ listAttendees: selectors.getAttendees(), isTransferring: selectors.getIsTransferring(), diff --git a/app/containers/BoothInfo/index.js b/app/containers/BoothInfo/index.js index 7005abec..1510f593 100644 --- a/app/containers/BoothInfo/index.js +++ b/app/containers/BoothInfo/index.js @@ -33,8 +33,27 @@ import * as selectors from './selectors'; const background = require('./../../../assets/images/background.png'); const noImage = require('./../../../assets/images/noimage.png'); +// @flow +type Props = { + boothGalleries?: Array, + boothPhoto: string, + fields: { + photoPic: string + }, + isBoothGalleryUpdated: boolean, + isBoothPhotoUpdated: boolean, + summary: string, + title: string, + user: Object +}; -class BoothInfo extends Component { +type State = { + imagePreview: string, + modalVisible: boolean, + logged_user?: Object +}; + +class BoothInfo extends Component { constructor(props) { super(props); this.state = { @@ -74,7 +93,7 @@ class BoothInfo extends Component { }).catch(err => console.log(strings.booth.errorImage, err)); } - setModalVisible = (visible, image) => { + setModalVisible = (visible: boolean, image: string) => { this.setState({ modalVisible: visible, imagePreview: image }); } @@ -91,7 +110,6 @@ class BoothInfo extends Component { } renderItem = (images) => { - console.log('checking image', images); return ( this.setModalVisible(true, images.url)}> , + hackaton?: Object, + isFetching: boolean, + isFetching2: boolean +}; + +type State = { + accordion: boolean, + accordion2: boolean, + boothFilter?: Array, + modalVisible: boolean, + url: string +}; + +class BoothList extends Component { state = { modalVisible: false, boothFilter: this.props.booth, @@ -74,15 +90,15 @@ class BoothList extends Component { } } - setAccordion = (visible) => { + setAccordion = (visible: boolean) => { this.setState({ accordion: visible }); }; - setAccordion2 = (visible) => { + setAccordion2 = (visible: boolean) => { this.setState({ accordion2: visible }); } - setModalVisible(visible) { + setModalVisible(visible: boolean) { this.setState({ modalVisible: visible }); } diff --git a/app/containers/ChangePassword/index.js b/app/containers/ChangePassword/index.js index 4a6f13fe..22633086 100644 --- a/app/containers/ChangePassword/index.js +++ b/app/containers/ChangePassword/index.js @@ -22,7 +22,25 @@ import * as selectors from './selectors'; // import constants import { role_option } from '../../constants'; -class ChangePassword extends Component { +// @flow +type Props = { + errorFields: { + error_confirm_password: boolean, + error_current_password: boolean, + error_new_password: boolean, + error_password_not_the_same: boolean + }, + inputFields: { + confirm_password: string, + current_password: string, + new_password: string + }, + isLoading: boolean, + isPasswordUpdated: boolean, + isPasswordWrong: boolean +}; + +class ChangePassword extends Component { /* * initialize some state */ @@ -34,7 +52,7 @@ class ChangePassword extends Component { this.props.resetState() } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { const { errorFields } = this.props || {}; const { error_password_not_the_same } = errorFields || false; diff --git a/app/containers/Feed/index.js b/app/containers/Feed/index.js index 57dc561b..6bd7fb72 100644 --- a/app/containers/Feed/index.js +++ b/app/containers/Feed/index.js @@ -28,14 +28,12 @@ import { AsyncStorage, Modal, Alert, - BackHandler, KeyboardAvoidingView, ScrollView, TouchableHighlight, WebView, Platform } from 'react-native'; -import { func, bool, object, array, string } from 'prop-types'; import ImagePicker from 'react-native-image-crop-picker'; import { createStructuredSelector } from 'reselect'; import { connect } from 'react-redux'; @@ -57,8 +55,7 @@ import * as actions from './actions'; import * as selectors from './selectors'; import OrderList from '../OrderList'; import Redeem from '../Redeem'; -import { PRIMARYCOLOR } from '../../constants'; -import { API_BASE_URL } from '../../constants'; +import { PRIMARYCOLOR, API_BASE_URL } from '../../constants'; import { CONTENT_REPORT, TWITTER_ICON, FACEBOOK_ICON, WHATSAPP_ICON } from './constants'; import { isConfirm } from '../../helpers'; import { getIsConfirmEmail } from '../OrderList/selectors'; @@ -71,7 +68,7 @@ const noFeeds = require('./../../../assets/images/nofeed.png'); function subscribeToFeeds(cb) { socket.on('feeds', data => cb(null, data)); } - +// @flow const today = new Date(); const date = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`; const time = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`; @@ -142,7 +139,51 @@ const mapStateToProps = () => isConfirmEmail: getIsConfirmEmail() }); -class Feed extends Component { +type Links = { + attachment: string +}; + +type ImageObject = { + path?: string, + sourceURL?: string, + mime: string +}; + +type Props = { + isFetching: boolean, + feeds?: Array, + links?: Links, + isPosting: boolean, + imagesData?: ImageObject, + textData: string, + isRemoving: boolean +}; + +type ShareObject = { + message: string, + url: string +}; + +type State = { + userId: Array, + userPostID: string, + postId: string, + firstName: string, + lastName: string, + profileUrl: string, + imagePreview: string, + report: string, + fabActive: boolean, + modalRedeem: boolean, + modalVisible: boolean, + postToFeeds: boolean, + modalReport: boolean, + optionVisible: boolean, + shareOptions: ShareObject, + shareTwitter: ShareObject +}; + +class Feed extends Component { constructor(props) { super(props); this.state = { @@ -168,7 +209,7 @@ class Feed extends Component { console.ignoredYellowBox = [ 'Setting a timer' ]; subscribeToFeeds((err, data) => this.props.updateFeeds(data)); } - + componentWillMount() { this.props.setTokenHeader(this.props.currentPage); @@ -191,11 +232,11 @@ class Feed extends Component { this.setState({ visible: false }); }; - setModalVisible = (visible, image) => { + setModalVisible = (visible: boolean, image: string) => { this.setState({ modalVisible: visible, imagePreview: image }); }; - setModalRedeem = (visible) => { + setModalRedeem = (visible: boolean) => { this.setState({ modalRedeem: visible }); }; @@ -203,7 +244,7 @@ class Feed extends Component { this.setState({ modalReport: visible }); }; - setModalWebView = (visible, link) => { + setModalWebView = (visible: boolean, link: string) => { this.setState({ modalWebView: visible }); this.state.link = link; }; @@ -218,7 +259,7 @@ class Feed extends Component { _keyExtractor = (item, index) => item.id; - onOpen = (message, attachment) => { + onOpen = (message: string, attachment: string) => { Share.open({ title: 'Devsummit Indonesia', message, @@ -227,7 +268,7 @@ class Feed extends Component { }); }; - alertRemoveFeed = (postId) => { + alertRemoveFeed = (postId: number) => { Alert.alert( '', 'Are you sure you want to delete this post?', @@ -239,12 +280,12 @@ class Feed extends Component { ); }; - removeFeed = (postId) => { + removeFeed = (postId: number) => { this.props.removeFeed(postId); this.setState({ optionVisible: false }); }; - alertReportFeed = (postId) => { + alertReportFeed = (postId: number) => { Alert.alert( '', 'Are you sure you want to report this post?', @@ -256,12 +297,12 @@ class Feed extends Component { ); }; - reportFeed = (postId) => { + reportFeed = (postId: number) => { this.props.reportFeed(postId); this.setState({ optionVisible: false }); }; - handleInputChange = (value) => { + handleInputChange = (value: string) => { this.setState({ report: value }); }; @@ -609,7 +650,6 @@ class Feed extends Component { /> - {/* Modal for picture preview */} { constructor(props) { super(props); this.imageHeight = new Animated.Value(IMAGE_HEIGHT); @@ -95,7 +114,7 @@ class Main extends Component { this.props.resetState(); } - onLoginMobile(token) { + onLoginMobile(token: string) { if (!token) { this.setState({}); } else { @@ -346,24 +365,6 @@ class Main extends Component { } } -Main.propTypes = { - isLoggedIn: PropTypes.bool.isRequired, - updateIsLogIn: PropTypes.func.isRequired, - isSubscribed: PropTypes.bool.isRequired, - updateIsSubscribed: PropTypes.func.isRequired, - loginMobile: PropTypes.func.isRequired, - login: PropTypes.func.isRequired, - loginFacebook: PropTypes.func.isRequired, - updateFields: PropTypes.func.isRequired, - fields: PropTypes.object.isRequired, - isLoading: PropTypes.bool.isRequired, - subscribeNewsletter: PropTypes.func.isRequired, - loginGoogle: PropTypes.func.isRequired, - loginTwitter: PropTypes.func.isRequired, - resetPassword: PropTypes.func.isRequired, - isReseted: PropTypes.bool.isRequired -}; - /** * Map redux state to component props */ diff --git a/app/containers/MainTabs/index.js b/app/containers/MainTabs/index.js index f27e0a1d..e2445ee3 100644 --- a/app/containers/MainTabs/index.js +++ b/app/containers/MainTabs/index.js @@ -9,7 +9,14 @@ import BoothList from '../BoothList'; import Feed from '../Feed'; import Settings from '../Settings'; -export default class MainTabs extends Component { +// @flow +type State = { + currentTab: number, + roleId: number, + token: string +}; + +export default class MainTabs extends Component { constructor(props) { super(props); this.state = { @@ -27,7 +34,7 @@ export default class MainTabs extends Component { .catch(e => Toast.show('Error getting role id', e)); } - handleCurrentTab = (number) => { + handleCurrentTab = (number: number) => { this.setState({ currentTab: number }); }; diff --git a/app/containers/MaterialList/index.js b/app/containers/MaterialList/index.js index 24c51af3..2ea48a2a 100644 --- a/app/containers/MaterialList/index.js +++ b/app/containers/MaterialList/index.js @@ -32,7 +32,28 @@ import * as actions from './actions'; const noMaterial = require('./../../../assets/images/nomaterial.png'); -class MaterialList extends Component { +// @flow +type Props = { + inputFields: { + file: string, + is_used: number, + summary: string, + title: string + }, + isFetching: boolean, + material: Array, + visible: boolean +}; + +type State = { + fileName: string, + invisible: boolean, + isLoading: boolean, + modalVisible: boolean, + roleId: number +}; + +class MaterialList extends Component { constructor(props) { super(props); this.state = { @@ -48,7 +69,6 @@ class MaterialList extends Component { if (typeof this.props.speakerId === 'undefined'){ getProfileData() .then((profileData) => { - console.log("profiulenjdfsnakjno", profileData) this.props.fetchMaterialList(profileData.speaker.id); }); } @@ -67,17 +87,17 @@ class MaterialList extends Component { } } - setModalVisible(visible) { + setModalVisible(visible: boolean) { this.setState({ modalVisible: visible }); } - getSingleLink(url) { + getSingleLink(url: string) { this.setModalVisible(true); Linking.openURL(url); } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); } @@ -97,7 +117,7 @@ class MaterialList extends Component { this.setState({ fileName: '' }); } - showAlert = (id) => { + showAlert = (id: number) => { Alert.alert(strings.material.confirm, strings.material.remove, [ { text: strings.global.cancel }, @@ -107,7 +127,7 @@ class MaterialList extends Component { ); } - removeItem = (id) => { + removeItem = (id: number) => { this.props.deleteMaterialList(id); Toast.show(strings.material.deleted); } diff --git a/app/containers/NewOrder/index.js b/app/containers/NewOrder/index.js index e8296e1a..a26325fd 100644 --- a/app/containers/NewOrder/index.js +++ b/app/containers/NewOrder/index.js @@ -17,7 +17,30 @@ import * as actions from './actions'; import * as selectors from './selectors'; import { PRIMARYCOLOR } from '../../constants'; -class NewOrder extends Component { +// @flow +type Props = { + errorFields: { + referalCode: boolean, + }, + inputFields: { + isUsingReferal: boolean, + referalCode: string + }, + isFetchingReferal: boolean, + isFetchingTicket: boolean, + order?: Object, + referalInfo: { + data: string, + meta: string + }, + ticketTypes?: Array +}; + +type State = { + count: number +} + +class NewOrder extends Component { state ={ count: 0 }; @@ -26,11 +49,11 @@ class NewOrder extends Component { this.props.getTicketType(); } - increase = (typeId) => { + increase = (typeId: number) => { this.props.updateOrder('increase', typeId); }; - decrease = (typeId) => { + decrease = (typeId: number) => { this.props.updateOrder('decrease', typeId); }; @@ -66,7 +89,7 @@ class NewOrder extends Component { } }; - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); this.props.updateErrorFields(`error_${field}`, (value = !(value.length > 0))); }; @@ -317,21 +340,6 @@ class NewOrder extends Component { } } -NewOrder.propTypes = { - updateOrder: PropTypes.func.isRequired, - inputFields: PropTypes.object.isRequired, - updateInputFields: PropTypes.func.isRequired, - updateErrorFields: PropTypes.func.isRequired, - GetReferal: PropTypes.func.isRequired, - order: PropTypes.object.isRequired, - ticketTypes: PropTypes.oneOfType([ PropTypes.array, PropTypes.object ]).isRequired, - placeOrder: PropTypes.func.isRequired, - getTicketType: PropTypes.func.isRequired, - isFetchingReferal: PropTypes.bool.isRequired, - isFetchingTicket: PropTypes.bool.isRequired, - reset: PropTypes.func.isRequired -}; - const mapStateToProps = createStructuredSelector({ ticketTypes: selectors.getTicketTypes(), order: selectors.getOrder(), diff --git a/app/containers/OrderDetail/index.js b/app/containers/OrderDetail/index.js index 3d3ec943..17f41e5b 100644 --- a/app/containers/OrderDetail/index.js +++ b/app/containers/OrderDetail/index.js @@ -54,7 +54,27 @@ const noImage = require('./../../../assets/images/noimage.png'); const url = 'https://api.devsummit.io/static/Ref_Bank.PDF'; let total = 0; -class OrderDetail extends Component { + +// @flow +type Props = { + isConfirming: boolean, + isUpdating: boolean, + order?: Object, + orderId: string, + paymentProof: string, + ticketTypes: Array +}; + +type State = { + color: string, + modalVisible: boolean, + orderStatus: string, + scalesPageToFit: boolean, + status: string, + userId: number +}; + +class OrderDetail extends Component { constructor(props) { super(props); this.setModalVisible = this.setModalVisible.bind(this); @@ -96,7 +116,7 @@ class OrderDetail extends Component { } } - setModalVisible(visible) { + setModalVisible(visible: boolean) { this.setState({ modalVisible: visible }); } @@ -111,11 +131,11 @@ class OrderDetail extends Component { return total; }; - increase = (typeId) => { + increase = (typeId: number) => { this.props.updateOrder('increase', typeId); }; - decrease = (typeId) => { + decrease = (typeId: number) => { this.props.updateOrder('decrease', typeId); }; @@ -188,7 +208,7 @@ class OrderDetail extends Component { return ; }; - capitalizeEachWord = (str) => { + capitalizeEachWord = (str: string) => { const lower = str.toLowerCase(); return lower.replace(/(^| )(\w)/g, (words) => { return words.toUpperCase(); @@ -464,17 +484,6 @@ class OrderDetail extends Component { } } -OrderDetail.propTypes = { - getOrderDetail: PropTypes.func.isRequired, - order: PropTypes.object.isRequired, - uploadProgress: PropTypes.number, - updateOrder: PropTypes.func.isRequired, - submitUpdateOrder: PropTypes.func.isRequired, - confirmPayment: PropTypes.func.isRequired, - isConfirming: PropTypes.bool.isRequired, - isUpdating: PropTypes.bool.isRequired -}; - const mapStateToProps = createStructuredSelector({ orderId: selectors.getOrderId(), ticketTypes: selectors.getTicketTypes(), diff --git a/app/containers/OrderList/index.js b/app/containers/OrderList/index.js index 3f705d20..04f06f10 100644 --- a/app/containers/OrderList/index.js +++ b/app/containers/OrderList/index.js @@ -44,7 +44,36 @@ const { width } = Dimensions.get('window'); const noTicket = require('./../../../assets/images/noticket.png'); -class OrderList extends Component { +// @flow +type Props = { + community?: Object, + inputFields: { + email: string + }, + isConfirmEmail: boolean, + isConfirming: boolean, + isFetching: boolean, + orders: Array, + redeemCount: number, + redeemstatus?: string +}; + +type State = { + confirmed: number, + firstName: string, + haveRefered: number, + isLoading: boolean, + isPaid: boolean, + lastName: boolean, + modalMyOrders: boolean, + modalVisibleConfirmation: boolean, + referal: string, + referalCount: number, + roleId: number, + selectedOrder: string +}; + +class OrderList extends Component { state = { selectedOrder: '', isLoading: true, @@ -88,7 +117,7 @@ class OrderList extends Component { this.props.register(() => Actions.mainTabs()); }; - checkEmail = (inputvalue) => { + checkEmail = (inputvalue: string) => { const pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/; if (pattern.test(inputvalue)) return true; return false; @@ -475,14 +504,6 @@ class OrderList extends Component { } } -OrderList.propTypes = { - orders: PropTypes.array.isRequired, - confirmPayment: PropTypes.func.isRequired, - getOrderList: PropTypes.func.isRequired, - isFetching: PropTypes.bool.isRequired, - getCommunity: PropTypes.func.isRequired -}; - const mapStateToProps = createStructuredSelector({ orders: selectors.getOrders(), tickets: selectors.getTickets(), diff --git a/app/containers/Payment/index.js b/app/containers/Payment/index.js index 14a209fe..d963edbc 100644 --- a/app/containers/Payment/index.js +++ b/app/containers/Payment/index.js @@ -30,7 +30,35 @@ import { PAYMENT_METHODS, BANK_TRANSFERS, CREDIT_CARD_LIST } from './constants'; let bankList = []; const logo = require('../../../assets/images/bankmandiri.png'); -class Payment extends Component { +// @flow +type Props = { + errorFields: { + referalCode: boolean + }, + inputFields: { + referalCode: string + }, + order: Object, + paypalChecking: boolean, + referalInfo: { + data: string, + meta: string + }, + ticketTypes: Array, + userId: string +}; + +type order = { + count: number, + price: number, + ticket_id: number +}; + +type State = { + cardStatus: boolean +}; + +class Payment extends Component { constructor(props) { super(props); this.state = { @@ -55,7 +83,7 @@ class Payment extends Component { } } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); if (field === 'paymentType' && value !== 'credit_card' && value !== 'bank_transfer') { const selectedMethod = PAYMENT_METHODS.filter((data) => { @@ -272,15 +300,6 @@ class Payment extends Component { } } -// props validation -Payment.propTypes = { - updateErrorFields: PropTypes.func.isRequired, - updateInputFields: PropTypes.func.isRequired, - navigation: PropTypes.object.isRequired, - inputFields: PropTypes.object.isRequired, - paypalChecking: PropTypes.bool.isRequired -}; - /** * Map redux state to component props */ diff --git a/app/containers/PaymentDetail/index.js b/app/containers/PaymentDetail/index.js index d001c6a9..97fec428 100644 --- a/app/containers/PaymentDetail/index.js +++ b/app/containers/PaymentDetail/index.js @@ -23,7 +23,17 @@ import { PRIMARYCOLOR } from '../../constants'; import { getProfileData } from '../../helpers'; -class PaymentDetail extends Component { +// @flow +type Props = { + getTransactionResponse?: Object, + inputFields: Object, + errorFields: Object, + getIsFetchingTransaction: boolean, + order: Object, + initialPayment?: Object +}; + +class PaymentDetail extends Component { componentWillMount() { const { order, updateInputFields } = this.props; getProfileData().then((profileData) => { @@ -55,7 +65,7 @@ class PaymentDetail extends Component { } } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); this.props.updateErrorFields(`error_${field}`, (value = !(value.length > 0))); }; @@ -320,20 +330,6 @@ class PaymentDetail extends Component { } } -// props validation -PaymentDetail.propTypes = { - getTransactionResponse: PropTypes.object.isRequired, - updateErrorFields: PropTypes.func.isRequired, - resetResponse: PropTypes.func.isRequired, - updateInputFields: PropTypes.func.isRequired, - inputFields: PropTypes.object.isRequired, - errorFields: PropTypes.object.isRequired, - submitPayment: PropTypes.func.isRequired, - getIsFetchingTransaction: PropTypes.bool.isRequired, - order: PropTypes.object.isRequired, - initialPayment: PropTypes.object.isRequired -}; - /** * Map redux state to component props */ diff --git a/app/containers/Profile/index.js b/app/containers/Profile/index.js index c93cfd16..eb1a4e45 100644 --- a/app/containers/Profile/index.js +++ b/app/containers/Profile/index.js @@ -30,7 +30,38 @@ import * as actions from './actions'; import * as selectors from './selectors'; import { PRIMARYCOLOR } from '../../constants'; -class Profile extends Component { +// @flow +type Props = { + avatar: string, + codeReferal: string, + fields: Object, + haveRefered: number, + isAvatarUpdated: boolean, + isDisabled: boolean, + isLogOut: boolean, + isProfileUpdated: boolean +}; + +type fields = { + boothInfo: string, + firstName: string, + job: string, + lastName: string, + points: number, + profilePic: string, + summary: string, + username: string +}; + +type State = { + disabled: boolean, + id: number, + isLoading: boolean, + points: number, + referal: string +}; + +class Profile extends Component { state = { id: null, isLoading: true, @@ -93,15 +124,15 @@ class Profile extends Component { } } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateFields(field, value); }; - handleUpdateAvatar = (value) => { + handleUpdateAvatar = (value: string) => { this.props.updateAvatar(value); }; - handleInputReferal = (value) => { + handleInputReferal = (value: string) => { if (value === this.state.referal) { Toast.show("You can't refer your own code"); this.setState({ disabled: true }); diff --git a/app/containers/Redeem/index.js b/app/containers/Redeem/index.js index 16ef5ce7..1778e189 100644 --- a/app/containers/Redeem/index.js +++ b/app/containers/Redeem/index.js @@ -25,13 +25,23 @@ import HeaderPoint from '../../components/Header'; import * as actions from './actions'; import * as selectors from './selectors'; -class Redeem extends Component { +// @flow +type Props = { + inputFields: { + code: string + } +}; + +type State = { +}; + +class Redeem extends Component { constructor(props) { super(props); this.state = {}; } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); }; diff --git a/app/containers/RegisterEmail/index.js b/app/containers/RegisterEmail/index.js index a72f0b06..b5615055 100644 --- a/app/containers/RegisterEmail/index.js +++ b/app/containers/RegisterEmail/index.js @@ -32,7 +32,47 @@ const Logo = require('../../../assets/images/logo.png'); import styles, { IMAGE_HEIGHT, IMAGE_HEIGHT_SMALL } from './styles'; -class RegisterEmail extends Component { +// @flow +type Props = { + errorFields: Object, + inputFields: Object, + isLoggedIn: boolean, + isRegistered: { + message: string, + status: boolean, + title: string + }, + isRegistering: boolean +}; + +type errorFields = { + errorEmail: boolean, + errorFirstName: boolean, + errorLastName: boolean, + errorPassword: boolean, + errorPhone: boolean, + errorUsername: boolean, + errorVerifyPassword: boolean +}; + +type inputFields = { + email: string, + firstName: string, + lastName: string, + password: string, + phone: string, + referer: string, + role: number, + socialId: number, + username: string, + verifyPassword: string +}; + +type State = { + isChecked: boolean +}; + +class RegisterEmail extends Component { /* * initialize some state */ @@ -110,26 +150,26 @@ class RegisterEmail extends Component { this.props.updateRegisterMethod(value); }; - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); this.props.updateErrorFields(`error_${field}`, (value = !(value.length > 0))); }; // email validation - checkEmail = (inputvalue) => { + checkEmail = (inputvalue: string) => { const pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/; if (pattern.test(inputvalue)) return true; return false; }; // name validation - checkName = (value) => { + checkName = (value: string) => { const pattern = /([^a-zA-Z0-9_\ -])/g; if (pattern.test(value)) return false; return true; }; - handlePressCheckedBox = (checked) => { + handlePressCheckedBox = (checked: boolean) => { this.setState({ isChecked: checked }); @@ -334,20 +374,6 @@ class RegisterEmail extends Component { } } -RegisterEmail.propTypes = { - updateInputFields: PropTypes.func.isRequired, - prefilledData: PropTypes.object, // eslint-disable-line react/require-default-props - isRegistered: PropTypes.object.isRequired, - updateRegisterStatus: PropTypes.func.isRequired, - resetState: PropTypes.func.isRequired, - errorFields: PropTypes.object.isRequired, - register: PropTypes.func.isRequired, - updateRegisterMethod: PropTypes.func.isRequired, - updateErrorFields: PropTypes.func.isRequired, - isLoggedIn: PropTypes.bool.isRequired, - isRegistering: PropTypes.bool.isRequired -}; - /** * Map redux state to component props */ diff --git a/app/containers/RegisterMenu/index.js b/app/containers/RegisterMenu/index.js index d3c923ec..78ea3638 100644 --- a/app/containers/RegisterMenu/index.js +++ b/app/containers/RegisterMenu/index.js @@ -19,7 +19,12 @@ import * as selectors from './selectors'; const background = require('../../../assets/images/background.png'); -class RegisterMenu extends Component { +// @flow +type Props = { + isRegistered: boolean +}; + +class RegisterMenu extends Component { registerFacebook = () => { this.props.registerFacebook(); }; @@ -73,10 +78,6 @@ class RegisterMenu extends Component { } } -RegisterMenu.propTypes = { - registerFacebook: func -}; - const mapStateToProps = createStructuredSelector({ isRegistered: selectors.isRegistered() }); diff --git a/app/containers/RegisterPhone/index.js b/app/containers/RegisterPhone/index.js index 8291fce4..b3f8fd64 100644 --- a/app/containers/RegisterPhone/index.js +++ b/app/containers/RegisterPhone/index.js @@ -23,7 +23,47 @@ import { role_option, PRIMARYCOLOR } from '../../constants'; const background = require('../../../assets/images/background.png'); -class RegisterPhone extends Component { +// @flow +type Props = { + errorFields: Object, + inputFields: Object, + isRegistered: Object, + isRegistering: boolean +}; + +type errorFields = { + errorEmail: boolean, + errorFirstName: boolean, + errorLastName: boolean, + errorPassword: boolean, + errorPhone: boolean, + errorUserName: boolean +}; + +type inputFields = { + email: string, + firstName: string, + lastName: string, + password: string, + referer: string, + role: string, + socialId: number, + userName: string +}; + +type isRegistered = { + message: string, + status: boolean, + title: string +}; + +type State = { + fromLogin: boolean, + isChecked: boolean, + isEmailValid: boolean +}; + +class RegisterPhone extends Component { constructor(props) { super(props); this.state = { @@ -108,7 +148,7 @@ class RegisterPhone extends Component { }); }; - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.validateEmail(); this.props.updateInputFields(field, value); this.props.updateErrorFields(`error_${field}`, (value = !(value.length > 0))); @@ -146,7 +186,7 @@ class RegisterPhone extends Component { if (!this.state.isEmailValid) Toast.show('Email is invalid'); }; - validEmail = (email) => { + validEmail = (email: string) => { this.setState({ isEmailValid: true }); @@ -159,21 +199,21 @@ class RegisterPhone extends Component { }); }; - handlePressCheckedBox = (checked) => { + handlePressCheckedBox = (checked: boolean) => { this.setState({ isChecked: checked }); }; // email validation - checkEmail = (inputvalue) => { + checkEmail = (inputvalue: string) => { const pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/; if (pattern.test(inputvalue)) return true; return false; }; // name validation - checkName = (value) => { + checkName = (value: string) => { const pattern = /([^a-zA-Z0-9_-])/g; if (pattern.test(value)) return false; return true; @@ -320,20 +360,6 @@ class RegisterPhone extends Component { } } -RegisterPhone.propTypes = { - updateErrorFields: PropTypes.func.isRequired, - isRegistered: PropTypes.object.isRequired, - isRegistering: PropTypes.bool.isRequired, - updateInputFields: PropTypes.func.isRequired, - resetState: PropTypes.func.isRequired, - updateRegisterStatus: PropTypes.func.isRequired, - register: PropTypes.func.isRequired, - inputFields: PropTypes.object.isRequired, - errorFields: PropTypes.object.isRequired, - toggleIsRegistering: PropTypes.func.isRequired, - fromLogin: PropTypes.bool // eslint-disable-line react/require-default-props -}; - /** * Map redux state to component props */ diff --git a/app/containers/Schedule/index.js b/app/containers/Schedule/index.js index 6d309cb9..23ef636b 100644 --- a/app/containers/Schedule/index.js +++ b/app/containers/Schedule/index.js @@ -35,7 +35,16 @@ const noSchedule = require('./../../../assets/images/noschedule.png'); export const orderByDay = ''; -class Schedule extends Component { +// @flow +type Props = { + userSchedule?: Array +}; + +type State = { + isLoading: boolean +}; + +class Schedule extends Component { constructor(props) { super(props); this.state = { diff --git a/app/containers/ScheduleDetail/index.js b/app/containers/ScheduleDetail/index.js index 3c35af55..19049892 100644 --- a/app/containers/ScheduleDetail/index.js +++ b/app/containers/ScheduleDetail/index.js @@ -22,7 +22,33 @@ const itemHeight = 200; const SLIDER_1_FIRST_ITEM = 0; -class ScheduleDetail extends Component { +// @flow +type Props = { + event: Object, + speaker?: Object, + stage: string, + time_end: string, + time_start: string, + title: string, + user?: Array +}; + +type event = { + created_at: string, + id: number, + information: string, + title: string, + type: string, + updated_at: string, + user_id: number +}; + +type State = { + slider1ActiveSlide: number, + user?: Array +}; + +class ScheduleDetail extends Component { constructor(props) { super(props); this.state = { diff --git a/app/containers/Settings/index.js b/app/containers/Settings/index.js index 17033847..17c85880 100644 --- a/app/containers/Settings/index.js +++ b/app/containers/Settings/index.js @@ -19,7 +19,41 @@ import InputItem from '../../components/InputItem'; import * as actions from './actions'; import * as selectors from './selectors'; -class Settings extends Component { +// @flow +type Props = { + avatar: string, + feedback: string, + fields: Object, + isAvatarUpdated: boolean, + isDisabled: boolean, + isFeedbackPosted: boolean, + isLoading: boolean, + isLoadingFeedback: boolean, + isLogOut: boolean, + isProfileUpdated: boolean, + modalVisible: boolean +}; + +type fields = { + boothInfo: string, + firstName: string, + job: string, + lastName: string, + profilePic: string, + summary: string, + username: string +}; + +type State = { + firstName: string, + id: number, + lastName: string, + photo: string, + version: string, + versionCode: number +}; + +class Settings extends Component { constructor(props) { super(props); this.setModalVisible = this.setModalVisible.bind(this); @@ -57,19 +91,19 @@ class Settings extends Component { } } - setModalVisible(visible) { + setModalVisible(visible: boolean) { this.props.updateModalVisibility(visible); } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateFields(field, value); }; - handleChangeFeedback = (value) => { + handleChangeFeedback = (value: string) => { this.props.updateFeedback(value); }; - handleUpdateAvatar = (value) => { + handleUpdateAvatar = (value: string) => { this.props.updateAvatar(value); }; @@ -77,7 +111,6 @@ class Settings extends Component { const { fields, avatar, isLoading, feedBack, isLoadingFeedback, modalVisible } = this.props || {}; const { firstName, lastName, username } = fields || ''; - console.log('VISIBILITYMODAL', isLoadingFeedback); return ( diff --git a/app/containers/Speaker/index.js b/app/containers/Speaker/index.js index 52fd8648..9c0e3774 100644 --- a/app/containers/Speaker/index.js +++ b/app/containers/Speaker/index.js @@ -22,8 +22,18 @@ import styles from './styles'; import * as selectors from './selectors'; import * as actions from './actions'; +// @flow +type Props = { + speaker?: Array +}; -class Speaker extends Component { +type State = { + firstName: string, + lastName: string, + speakerFilter?: Array +}; + +class Speaker extends Component { constructor(props) { super(props); this.state = { @@ -46,7 +56,7 @@ class Speaker extends Component { } - handleInputChange = (field, value) => { + handleInputChange = (field: string, value: string) => { this.props.updateInputFields(field, value); this.props.updateErrorFields(`error_${field}`, value = !(value.length > 0)); } diff --git a/app/containers/SponsorInfo/index.js b/app/containers/SponsorInfo/index.js index 47a0df00..3067789d 100644 --- a/app/containers/SponsorInfo/index.js +++ b/app/containers/SponsorInfo/index.js @@ -12,7 +12,13 @@ import { import { connect } from 'react-redux'; import { DevSummitAxios } from '../../helpers'; -class SponsorInfo extends Component { +// @flow +type State = { + isFetching: boolean, + sponsors: Array +}; + +class SponsorInfo extends Component { constructor() { super(); this.state = { diff --git a/app/containers/TicketList/index.js b/app/containers/TicketList/index.js index 9e4e0818..89f26f1c 100755 --- a/app/containers/TicketList/index.js +++ b/app/containers/TicketList/index.js @@ -26,7 +26,20 @@ import { PRIMARYCOLOR } from '../../constants'; import Redeem from '../Redeem'; import OrderList from '../OrderList'; -class TicketList extends Component { +// @flow +type Props = { + listTicket?: Array, + isGettingUserTicket: boolean, + fetchTicketStatus: boolean +}; + +type State = { + counter: number, + isLoading: boolean, + modalVisible: boolean +}; + +class TicketList extends Component { constructor(props) { super(props); this.state = { @@ -49,7 +62,7 @@ class TicketList extends Component { } } - setModalVisible = (visible) => { + setModalVisible = (visible: boolean) => { this.setState({ modalVisible: visible }); }; @@ -251,13 +264,6 @@ class TicketList extends Component { } } -TicketList.propTypes = { - listTicket: PropTypes.oneOfType([ PropTypes.object, PropTypes.array ]).isRequired, - isGettingUserTicket: PropTypes.bool.isRequired, - fetchUserTicket: PropTypes.func.isRequired, - fetchTicketStatus: PropTypes.bool.isRequired -}; - const mapStateToProps = createStructuredSelector({ listTicket: selectors.getListTicket(), isGettingUserTicket: selectors.getIsFetchingTicket(), diff --git a/package-lock.json b/package-lock.json index 2a2a956f..ae0a3fa0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -305,6 +305,13 @@ } } }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true, + "optional": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -338,6 +345,214 @@ "ast-types-flow": "0.0.7" } }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.11.0", + "convert-source-map": "1.5.0", + "fs-readdir-recursive": "1.0.0", + "glob": "7.1.2", + "lodash": "4.17.4", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.6", + "v8flags": "2.1.1" + }, + "dependencies": { + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.0", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.6" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + } + } + }, "babel-code-frame": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", @@ -984,6 +1199,15 @@ "babel-plugin-transform-react-jsx": "6.24.1" } }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } + }, "babel-preset-jest": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz", @@ -1188,6 +1412,13 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.23.tgz", "integrity": "sha1-6F1QgiDHTj9DpM5y7tUfPaTblNE=" }, + "binary-extensions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true, + "optional": true + }, "blob": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", @@ -1379,6 +1610,24 @@ "supports-color": "2.0.0" } }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, "ci-info": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", @@ -2795,135 +3044,1046 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "requires": { - "ms": "0.7.1" + "ms": "0.7.1" + } + }, + "escape-html": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", + "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flat-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flow-bin": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.47.0.tgz", + "integrity": "sha1-oqCKs+DR8ctX0X4nswsRi2L9o2c=", + "dev": true + }, + "follow-redirects": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.4.tgz", + "integrity": "sha512-Suw6KewLV2hReSyEOeql+UUkBVyiBm3ok1VPrVFRZnQInWpdoZbbiG5i8aJVSjTr0yQ4Ava0Sh6/joCg1Brdqw==", + "requires": { + "debug": "2.6.8" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forEachAsync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/forEachAsync/-/forEachAsync-3.0.0.tgz", + "integrity": "sha1-NHWpWnfk3C0oAJE+aCTed7AM2Ao=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.2.0.tgz", + "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.16" + }, + "dependencies": { + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "requires": { + "mime-db": "1.29.0" + } + } + } + }, + "FormData": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/FormData/-/FormData-0.10.1.tgz", + "integrity": "sha1-gGhT6J/cA7uxxiClGErF5Hs0HQA=", + "requires": { + "bufferjs": "3.0.1", + "File": "0.10.2", + "FileReader": "0.10.2", + "forEachAsync": "3.0.0", + "remedial": "1.0.7" + } + }, + "formidable": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", + "integrity": "sha1-71SRSQ+UM7cF+qdyScmQKa40hVk=" + }, + "fresh": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" + }, + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0" + } + }, + "fs-readdir-recursive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.7.0", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" } }, - "escape-html": { + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", - "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=" + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "follow-redirects": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.4.tgz", - "integrity": "sha512-Suw6KewLV2hReSyEOeql+UUkBVyiBm3ok1VPrVFRZnQInWpdoZbbiG5i8aJVSjTr0yQ4Ava0Sh6/joCg1Brdqw==", - "requires": { - "debug": "2.6.8" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forEachAsync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/forEachAsync/-/forEachAsync-3.0.0.tgz", - "integrity": "sha1-NHWpWnfk3C0oAJE+aCTed7AM2Ao=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.2.0.tgz", - "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.16" - }, - "dependencies": { - "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, "requires": { - "mime-db": "1.29.0" + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true } } }, - "FormData": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/FormData/-/FormData-0.10.1.tgz", - "integrity": "sha1-gGhT6J/cA7uxxiClGErF5Hs0HQA=", - "requires": { - "bufferjs": "3.0.1", - "File": "0.10.2", - "FileReader": "0.10.2", - "forEachAsync": "3.0.0", - "remedial": "1.0.7" - } - }, - "formidable": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", - "integrity": "sha1-71SRSQ+UM7cF+qdyScmQKa40hVk=" - }, - "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, "ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", @@ -3470,6 +4630,16 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.1.tgz", "integrity": "sha1-wt/DhquqDD4zxI2z/ocFnmkGXv0=" }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "1.10.0" + } + }, "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", @@ -5128,6 +6298,13 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", + "dev": true, + "optional": true + }, "native-base": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/native-base/-/native-base-2.3.1.tgz", @@ -5489,6 +6666,17 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -6777,6 +7965,19 @@ "util-deprecate": "1.0.2" } }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, "rebound": { "version": "0.0.13", "resolved": "https://registry.npmjs.org/rebound/-/rebound-0.0.13.tgz", @@ -7235,6 +8436,13 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "optional": true + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -8003,6 +9211,12 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8018,6 +9232,15 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, "valib": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/valib/-/valib-2.0.0.tgz", diff --git a/package.json b/package.json index 2ba0fe55..d74e1458 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "scripts": { "start": "node node_modules/react-native/local-cli/cli.js start", "test": "jest", + "flow": "node_modules/.bin/flow", "codepush": "code-push release-react devsummit.android android -d Production && code-push release-react devsummit ios -d Production --privateKeyPath private.pem", "paypal-deps": "mkdir -p $(pwd)/node_modules/react-native-paypal/ios/lib/Paypal && curl -L --progress https://github.com/paypal/PayPal-iOS-SDK/archive/2.18.0.tar.gz | tar -xz - -C $(pwd)/node_modules/react-native-paypal/ios/lib/Paypal --strip-components=1" }, @@ -61,14 +62,17 @@ "socket.io-client": "^1.4.8" }, "devDependencies": { + "babel-cli": "^6.26.0", "babel-eslint": "^7.2.3", "babel-jest": "20.0.3", + "babel-preset-flow": "^6.23.0", "babel-preset-react-native": "^2.1.0", "eslint": "^4.4.0", "eslint-config-airbnb": "^15.1.0", "eslint-plugin-import": "^2.7.0", "eslint-plugin-jsx-a11y": "^5.1.1", "eslint-plugin-react": "^7.1.0", + "flow-bin": "^0.47.0", "jest": "20.0.4", "react-test-renderer": "16.0.0-alpha.12" },