{"files/.babelrc":{"root":"/","base":".babelrc","ext":"","name":".babelrc","relativeDirname":"files","relative":"files/.babelrc","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116394,"size":205,"blocks":8,"atimeMs":1527690473055.914,"mtimeMs":1518795381307.9153,"ctimeMs":1518795381307.9153,"birthtimeMs":1518795381307.8286,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.308Z","ctime":"2018-02-16T15:36:21.308Z","birthtime":"2018-02-16T15:36:21.308Z"},"extension":"","mime":{},"content":"{\n    \"presets\": [\n      [\"env\", { targets: { \"node\": \"current\" } }],\n      \"stage-0\",\n      \"react\"\n    ],\n    \"plugins\": [\n      \"transform-class-properties\",\n      \"transform-decorators-legacy\"\n    ]\n}\n"},"files/.eslintignore":{"root":"/","base":".eslintignore","ext":"","name":".eslintignore","relativeDirname":"files","relative":"files/.eslintignore","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116395,"size":103,"blocks":8,"atimeMs":1527690473055.9658,"mtimeMs":1518795381308.317,"ctimeMs":1518795381308.317,"birthtimeMs":1518795381308.2222,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.308Z","ctime":"2018-02-16T15:36:21.308Z","birthtime":"2018-02-16T15:36:21.308Z"},"extension":"","mime":{},"content":".gitignore\nbuild/\nnode_modules/\nnpm-debug.log\nwebpack.dev.config.babel.js\nwebpack.prod.config.babel.js\n"},"files/.eslintrc":{"root":"/","base":".eslintrc","ext":"","name":".eslintrc","relativeDirname":"files","relative":"files/.eslintrc","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116396,"size":225,"blocks":8,"atimeMs":1527690473056.02,"mtimeMs":1518795381308.6926,"ctimeMs":1518795381308.6926,"birthtimeMs":1518795381308.5867,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.309Z","ctime":"2018-02-16T15:36:21.309Z","birthtime":"2018-02-16T15:36:21.309Z"},"extension":"","mime":{},"content":"{\n    \"parser\": \"babel-eslint\",\n    \"globals\": {\n      \"skypager\": true\n    },\n    \"extends\": [\"prettier-standard\", \"standard-jsx\"],\n    \"plugins\": [\n      \"class-property\"\n    ],\n    \"rules\": {\n      \"jsx-quotes\": 0\n    }\n}\n"},"files/.prettierrc":{"root":"/","base":".prettierrc","ext":"","name":".prettierrc","relativeDirname":"files","relative":"files/.prettierrc","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116398,"size":153,"blocks":8,"atimeMs":1527690473056.1365,"mtimeMs":1518795381309.363,"ctimeMs":1518795381309.363,"birthtimeMs":1518795381309.2722,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.309Z","ctime":"2018-02-16T15:36:21.309Z","birthtime":"2018-02-16T15:36:21.309Z"},"extension":"","mime":{},"content":"{\n  \"semi\": false,\n  \"printWidth\": 100,\n  \"parser\": \"flow\",\n  \"singleQuote\": true,\n  \"tabWidth\": 2,\n  \"trailingComma\": \"es5\",\n  \"bracketSpacing\": true\n}\n"},"files/.gitignore":{"root":"/","base":".gitignore","ext":"","name":".gitignore","relativeDirname":"files","relative":"files/.gitignore","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116397,"size":107,"blocks":8,"atimeMs":1527690473056.0825,"mtimeMs":1518795381309.0217,"ctimeMs":1518795381309.0217,"birthtimeMs":1518795381308.947,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.309Z","ctime":"2018-02-16T15:36:21.309Z","birthtime":"2018-02-16T15:36:21.309Z"},"extension":"","mime":{},"content":"*.DS_Store\nconfig/development.js\nconfig/production.js\nnpm-debug.log\nnode_modules/\n.tmp/\nlib/\n*.log\npublic/\n"},"files/README.md":{"root":"/","base":"README.md","ext":".md","name":"README","relativeDirname":"files","relative":"files/README.md","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116399,"size":365,"blocks":8,"atimeMs":1527690473056.1904,"mtimeMs":1518795381309.8672,"ctimeMs":1518795381309.8672,"birthtimeMs":1518795381309.805,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.310Z","ctime":"2018-02-16T15:36:21.310Z","birthtime":"2018-02-16T15:36:21.310Z"},"extension":".md","mime":{"mimeType":"text/markdown"},"content":"# Skypager Web Boilerplate \n\n## Developer Guide\n> getting started developing locally\n\nTo run the local development server:\n\n```shell\n$ sky run build/dev --hot\n```\n\nTo generate a new page:\n\n```shell\n$ sky run generate page\n```\n\nTo generate a new component:\n\n```shell\n$ sky run generate component\n```\n\nTo create a production build:\n\n```shell\n$ sky run build/prod\n```\n"},"files/mocha-webpack.opts":{"root":"/","base":"mocha-webpack.opts","ext":".opts","name":"mocha-webpack","relativeDirname":"files","relative":"files/mocha-webpack.opts","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116400,"size":23,"blocks":8,"atimeMs":1527690473056.2542,"mtimeMs":1518795381310.0073,"ctimeMs":1518795381310.0073,"birthtimeMs":1518795381309.9634,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.310Z","ctime":"2018-02-16T15:36:21.310Z","birthtime":"2018-02-16T15:36:21.310Z"},"extension":".opts","mime":{},"content":"--require test/test.js\n"},"files/package.json":{"root":"/","base":"package.json","ext":".json","name":"package","relativeDirname":"files","relative":"files/package.json","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116401,"size":2568,"blocks":8,"atimeMs":1527690473056.306,"mtimeMs":1527690437810.6272,"ctimeMs":1527690437810.6272,"birthtimeMs":1518795381310.2637,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-05-30T14:27:17.811Z","ctime":"2018-05-30T14:27:17.811Z","birthtime":"2018-02-16T15:36:21.310Z"},"extension":".json","mime":{"mimeType":"application/json"},"content":"{\n  \"name\": \"skypager-web-boilerplate\",\n  \"version\": \"1.0.0\",\n  \"private\": \"true\",\n  \"description\": \"Skypager Web Boilerplate\",\n  \"main\": \"index.js\",\n  \"repository\": \"git@github.com:skypager/skypager-web-boilerplate.git\",\n  \"author\": \"Jon Soeder <jon@chicago.com>\",\n  \"license\": \"SEE LICENSE IN LICENSE.md\",\n  \"scripts\": {\n    \"start\": \"NODE_ENV=development ./node_modules/.bin/sky run build/dev --hot\",\n    \"prebuild\": \"rimraf public/\",\n    \"build\": \"NODE_ENV=development ./node_modules/.bin/sky run build/prod\",\n    \"predeploy\": \"yarn build\",\n    \"deploy:prod\": \"yarn build && cd public && now --npm && now alias web-boilerplate.skypager.io\"\n  },\n  \"dependencies\": {\n    \"axios\": \"github:axios/axios\",\n    \"babel-runtime\": \"^6.26.0\",\n    \"date-input-polyfill\": \"^2.14.0\",\n    \"prop-types\": \"^15.5.10\",\n    \"react\": \"^16.3.2\",\n    \"react-dom\": \"^16.3.2\",\n    \"react-input-range\": \"^1.2.1\",\n    \"react-router-dom\": \"^4.2.2\",\n    \"semantic-ui-css\": \"^2.3.1\",\n    \"semantic-ui-react\": \"^0.79.1\"\n  },\n  \"devDependencies\": {\n    \"babel-eslint\": \"^8.0.1\",\n    \"babel-plugin-transform-class-properties\": \"^6.24.1\",\n    \"babel-plugin-transform-decorators-legacy\": \"^1.3.4\",\n    \"babel-plugin-transform-object-rest-spread\": \"^6.26.0\",\n    \"babel-plugin-transform-runtime\": \"^6.23.0\",\n    \"babel-preset-env\": \"^1.6.0\",\n    \"babel-preset-react\": \"^6.24.1\",\n    \"babel-preset-stage-0\": \"^6.24.1\",\n    \"chai\": \"^4.1.2\",\n    \"chai-sinon\": \"^2.8.1\",\n    \"copy-webpack-plugin\": \"^4.0.1\",\n    \"dsv-loader\": \"^2.0.0\",\n    \"eslint\": \"^4.7.2\",\n    \"eslint-config-prettier\": \"^2.6.0\",\n    \"eslint-config-prettier-standard\": \"^1.0.1\",\n    \"eslint-config-react-app\": \"^2.0.0\",\n    \"eslint-config-standard\": \"^10.2.1\",\n    \"eslint-config-standard-jsx\": \"^4.0.2\",\n    \"eslint-plugin-class-property\": \"^1.0.6\",\n    \"eslint-plugin-flowtype\": \"^2.36.0\",\n    \"eslint-plugin-import\": \"^2.7.0\",\n    \"eslint-plugin-jsx-a11y\": \"^6.0.2\",\n    \"eslint-plugin-node\": \"^5.1.1\",\n    \"eslint-plugin-prettier\": \"^2.3.1\",\n    \"eslint-plugin-promise\": \"^3.5.0\",\n    \"eslint-plugin-react\": \"^7.4.0\",\n    \"eslint-plugin-standard\": \"^3.0.1\",\n    \"expose-loader\": \"^0.7.3\",\n    \"extract-text-webpack-plugin\": \"^2.0.0\",\n    \"faker\": \"^4.1.0\",\n    \"friendly-errors-webpack-plugin\": \"^1.6.1\",\n    \"image-webpack-loader\": \"^3.4.1\",\n    \"mocha\": \"^4.0.0\",\n    \"mocha-webpack\": \"^0.7.0\",\n    \"node-sass\": \"^4.7.2\",\n    \"prettier\": \"^1.7.4\",\n    \"rimraf\": \"^2.6.2\",\n    \"sass-loader\": \"^6.0.6\",\n    \"sinon\": \"^4.0.0\",\n    \"skypager\": \"^39.9.1\",\n    \"skypager-cli\": \"^39.9.1\",\n    \"uglifyjs-webpack-plugin\": \"^0.4.6\"\n  }\n}"},"files/skypager.js":{"root":"/","base":"skypager.js","ext":".js","name":"skypager","relativeDirname":"files","relative":"files/skypager.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116402,"size":817,"blocks":8,"atimeMs":1527690473056.3608,"mtimeMs":1518795381310.786,"ctimeMs":1518795381310.786,"birthtimeMs":1518795381310.6724,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.311Z","ctime":"2018-02-16T15:36:21.311Z","birthtime":"2018-02-16T15:36:21.311Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"try {\n  skypager.webpacks.register('dev', () =>\n    require(skypager.join('src', 'webpacks', 'dev.js'))\n  )\n  skypager.webpacks.register('prod', () =>\n    require(skypager.join('src', 'webpacks', 'prod.js'))\n  )\n} catch (error) {\n  skypager.REGISTRATION_ERROR = error\n}\n\ntry {\n  skypager.hide(\n    'axios',\n    require(skypager.packageFinder.attemptResolve('axios'))\n  )\n\n  skypager.fsx\n    .readdirSync(skypager.resolve('src', 'selectors'))\n    .map(file => [\n      file.replace('.js', ''),\n      skypager.resolve('src', 'selectors', file)\n    ])\n    .forEach(entry => {\n      const [id, path] = entry\n\n      try {\n        skypager.selectors.register(id, require(path))\n      } catch (error) {\n        skypager.set(['selectorErrors', id], error)\n      }\n    })\n} catch (error) {\n  skypager.SELECTORS_ERROR = error\n}\n"},"files/src/app.js":{"root":"/","base":"app.js","ext":".js","name":"app","relativeDirname":"files/src","relative":"files/src/app.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116404,"size":3750,"blocks":8,"atimeMs":1527690473056.4043,"mtimeMs":1518795381311.5854,"ctimeMs":1518795381311.5854,"birthtimeMs":1518795381311.4695,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.312Z","ctime":"2018-02-16T15:36:21.312Z","birthtime":"2018-02-16T15:36:21.311Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, React, Component, Loader } from './globals.js'\nimport { BrowserRouter as Router } from 'react-router-dom'\nimport PublicApp from 'apps/public'\n\nimport './styles/app.scss'\n\nexport class App extends Component {\n  static propTypes = {\n    runtime: types.object.isRequired\n  }\n\n  static childContextTypes = {\n    runtime: types.object,\n    currentUser: types.object\n  }\n\n  getChildContext() {\n    return {\n      runtime: this.props.runtime,\n      currentUser: this.state.currentUser\n    }\n  }\n\n  constructor(props = {}, context = {}) {\n    super(props, context)\n\n    const { runtime } = this.props\n\n    this.state = {\n      loading: !runtime.currentState.dataLoaded,\n      loggedIn: !!runtime.currentState.currentUser,\n      currentUser: runtime.currentState.currentUser,\n      public: PublicApp\n    }\n  }\n\n  async enforceRole(currentUser = this.state.currentUser) {\n    const { runtime } = this.props\n\n    await runtime.loadData()\n\n    if (currentUser && !this.state.roleEnforced) {\n      const updates = await runtime.enforceRole(currentUser)\n\n      this.setState(currentState => ({\n        ...currentState,\n        currentUser,\n        loggedIn: true,\n        roleEnforced: true,\n        ...updates\n      }))\n\n      console.log('loading in response to enforce role')\n      const data = await runtime.loadData()\n      console.log('loading', this.state.loading)\n      this.setState({ loading: !data })\n      console.log('data', data)\n\n      return updates\n    }\n\n    return {}\n  }\n\n  handleRuntimeStateChange({ name, newValue, type } = {}) {\n    const updates = {}\n\n    if (name === 'dataLoaded' && newValue) {\n      console.log('data loaded')\n      updates.loading = false\n    }\n\n    if (name === 'loggedIn' || name === 'currentUser') {\n      updates[name] = newValue\n      updates.loggedIn = !!newValue\n\n      if (!newValue) {\n        updates.currentUserRole = 'public'\n        updates.anonymized = true\n        updates.roleEnforced = false\n      } else {\n        name === 'currentUser' && Promise.resolve(this.enforceRole(newValue))\n      }\n    }\n\n    this.setState(currentState => ({\n      ...currentState,\n      ...updates\n    }))\n  }\n\n  async componentWillMount() {\n    const { runtime } = this.props\n    const { currentUser } = runtime.currentState\n\n    if (currentUser) {\n      await this.enforceRole(currentUser)\n    }\n\n    if (!this.disposer) {\n      this.disposer = runtime.state.observe(\n        this.handleRuntimeStateChange.bind(this)\n      )\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.disposer) {\n      this.disposer()\n    }\n  }\n\n  componentDidUpdate(previousProps, previousState) {\n    if (\n      !previousState[this.currentAppId] &&\n      !previousState[`loaded_${this.currentAppId}`] &&\n      !this._isLoading\n    ) {\n      this.loadCurrentApp().then(currentApp => {\n        this.setState({\n          [`loaded_${this.currentAppId}`]: true,\n          [this.currentAppId]: currentApp\n        })\n      })\n    }\n  }\n\n  loadCurrentApp() {\n    this._isLoading = true\n\n    return System.import(`./apps/${this.currentAppId}.js`).then(mod => {\n      this._isLoading = false\n      return mod.default\n    })\n  }\n\n  get CurrentApp() {\n    const { currentAppId } = this\n    const AppComponent = this.state[currentAppId]\n\n    return AppComponent || (() => <Loader active />)\n  }\n\n  get currentAppId() {\n    const { currentUserRole = 'public', loggedIn } = this.state\n\n    if (!loggedIn) {\n      return 'public'\n    }\n\n    return 'private'\n  }\n\n  render() {\n    const { CurrentApp } = this\n    const { loggedIn, loading = true } = this.state\n\n    if (loggedIn && loading) {\n      return <Loader active />\n    }\n\n    return (\n      <Router>\n        <CurrentApp {...this.props} />\n      </Router>\n    )\n  }\n}\n\nexport default App\n"},"files/src/apps/private.js":{"root":"/","base":"private.js","ext":".js","name":"private","relativeDirname":"files/src/apps","relative":"files/src/apps/private.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116406,"size":370,"blocks":8,"atimeMs":1527690473056.4556,"mtimeMs":1518795381312.373,"ctimeMs":1518795381312.373,"birthtimeMs":1518795381312.2944,"atime":"2018-05-30T14:27:53.056Z","mtime":"2018-02-16T15:36:21.312Z","ctime":"2018-02-16T15:36:21.312Z","birthtime":"2018-02-16T15:36:21.312Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { Switch, Route } from 'react-router-dom'\nimport LoginPage from 'pages/LoginPage'\nimport PrivateHome from 'pages/PrivateHome'\n\nexport const AgencyApp = () => (\n  <Switch>\n    <Route path=\"/\" component={PrivateHome} />\n    <Route path=\"/sign-in\" component={LoginPage} />\n    <Route path=\"/sign-out\" component={LoginPage} />\n  </Switch>\n)\n\nexport default AgencyApp\n"},"files/src/apps/public.js":{"root":"/","base":"public.js","ext":".js","name":"public","relativeDirname":"files/src/apps","relative":"files/src/apps/public.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116407,"size":919,"blocks":8,"atimeMs":1527690473056.518,"mtimeMs":1518795381312.7122,"ctimeMs":1518795381312.7122,"birthtimeMs":1518795381312.6392,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.313Z","ctime":"2018-02-16T15:36:21.313Z","birthtime":"2018-02-16T15:36:21.313Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { Switch, Route } from 'react-router-dom'\nimport LoginPage from 'pages/LoginPage'\nimport PublicHome from 'pages/PublicHome'\nimport AboutUs from 'pages/AboutUs'\nimport ContactUs from 'pages/ContactUs'\nimport FrequentlyAskedQuestions from 'pages/FrequentlyAskedQuestions'\nimport PrivacyPolicy from 'pages/PrivacyPolicy'\nimport TermsOfUse from 'pages/TermsOfUse'\n\nexport const PublicApp = () => (\n  <Switch>\n    <Route path=\"/\" exact component={PublicHome} />\n    <Route path=\"/about-us\" exact component={AboutUs} />\n    <Route path=\"/contact\" exact component={ContactUs} />\n    <Route path=\"/faq\" exact component={FrequentlyAskedQuestions} />\n    <Route path=\"/privacy\" exact component={PrivacyPolicy} />\n    <Route path=\"/terms-of-use\" exact component={TermsOfUse} />\n    <Route path=\"/sign-in\" component={LoginPage} />\n    <Route path=\"/sign-out\" component={LoginPage} />\n  </Switch>\n)\n\nexport default PublicApp\n"},"files/src/components/LoginStatus.js":{"root":"/","base":"LoginStatus.js","ext":".js","name":"LoginStatus","relativeDirname":"files/src/components","relative":"files/src/components/LoginStatus.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116409,"size":1112,"blocks":8,"atimeMs":1527690473056.5708,"mtimeMs":1518795381313.2654,"ctimeMs":1518795381313.2654,"birthtimeMs":1518795381313.185,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.313Z","ctime":"2018-02-16T15:36:21.313Z","birthtime":"2018-02-16T15:36:21.313Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { Link, types, Container, Component } from 'globals'\n\nexport class LoginStatus extends Component {\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  constructor(props = {}, context = {}) {\n    super(props, context)\n\n    this.state = {\n      currentUserName: ''\n    }\n  }\n\n  updateCurrentUserName() {\n    const { runtime } = this.context\n    const { currentUser } = runtime.currentState\n\n    if (currentUser) {\n      this.setState({\n        currentUserName: currentUser.displayName || currentUser.email\n      })\n    }\n  }\n\n  handleSignOut = e => {\n    e.preventDefault()\n\n    const { runtime } = this.context\n    runtime.auth.signOut()\n  }\n\n  componentDidMount() {\n    const { runtime } = this.context\n    this.updateCurrentUserName()\n  }\n\n  render() {\n    const { currentUserName } = this.state\n\n    if (!currentUserName) {\n      return <Link to=\"/sign-in\">Login</Link>\n    }\n\n    return (\n      <Container>\n        {currentUserName}{' '}\n        <a href=\"#\" onClick={this.handleSignOut}>\n          <Icon name=\"sign out\" />\n        </a>\n      </Container>\n    )\n  }\n}\n\nexport default LoginStatus\n"},"files/src/components/MainHeader.js":{"root":"/","base":"MainHeader.js","ext":".js","name":"MainHeader","relativeDirname":"files/src/components","relative":"files/src/components/MainHeader.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116410,"size":666,"blocks":8,"atimeMs":1527690473056.6248,"mtimeMs":1518795381313.6365,"ctimeMs":1518795381313.6365,"birthtimeMs":1518795381313.5374,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.314Z","ctime":"2018-02-16T15:36:21.314Z","birthtime":"2018-02-16T15:36:21.314Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, Component, Header, Image } from 'globals'\n\nexport class MainHeader extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  static defaultProps = {\n    subheader: 'Web Boilerplate Project',\n    title: 'Skypager'\n  }\n\n  render() {\n    const { runtime } = this.context\n    const { title, subheader } = this.props\n    return (\n      <Header as=\"h2\" onClick={() => runtime.history.push('/')}>\n        <Header.Content onClick={() => runtime.history.push('/')}>\n          {title}\n          <Header.Subheader>{subheader}</Header.Subheader>\n        </Header.Content>\n      </Header>\n    )\n  }\n}\n\nexport default MainHeader\n"},"files/src/features/authentication.js":{"root":"/","base":"authentication.js","ext":".js","name":"authentication","relativeDirname":"files/src/features","relative":"files/src/features/authentication.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116412,"size":224,"blocks":8,"atimeMs":1527690473056.6887,"mtimeMs":1518795381314.3037,"ctimeMs":1518795381314.3037,"birthtimeMs":1518795381314.2317,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.314Z","ctime":"2018-02-16T15:36:21.314Z","birthtime":"2018-02-16T15:36:21.314Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export function featureWasEnabled(options = {}) {\n  const { runtime } = this\n  const { provider = 'skypager' } = options\n\n  if (provider === 'skypager') {\n    runtime.feature('authentication/skypager').enable(options)\n  }\n}\n"},"files/src/features/authentication/local.js":{"root":"/","base":"local.js","ext":".js","name":"local","relativeDirname":"files/src/features/authentication","relative":"files/src/features/authentication/local.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116414,"size":646,"blocks":8,"atimeMs":1527690473056.741,"mtimeMs":1518795381314.8503,"ctimeMs":1518795381314.8503,"birthtimeMs":1518795381314.7864,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.315Z","ctime":"2018-02-16T15:36:21.315Z","birthtime":"2018-02-16T15:36:21.315Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export const hostMethods = ['enforceRole', 'checkRole', 'login', 'logout']\n\nexport function featureWasEnabled(options = {}) {}\n\nexport async function logout() {\n  this.setState({\n    currentUser: undefined,\n    loggedIn: false,\n    currentUserRole: 'public'\n  })\n}\n\n// since it is exported under hostMethods, this will be the host, or the runtime\nexport async function login(currentUser = {}) {\n  this.setState({\n    currentUser,\n    loggedIn: !!currentUser\n  })\n}\n\nexport async function checkRole(currentUser = {}) {\n  return { currentUserRole: 'user' }\n}\n\nexport async function enforceRole(currentUser = {}) {\n  return { roleEnforced: true }\n}\n"},"files/src/features/data-loading.js":{"root":"/","base":"data-loading.js","ext":".js","name":"data-loading","relativeDirname":"files/src/features","relative":"files/src/features/data-loading.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116415,"size":85,"blocks":8,"atimeMs":1527690473056.7842,"mtimeMs":1518795381315.217,"ctimeMs":1518795381315.217,"birthtimeMs":1518795381315.1448,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.315Z","ctime":"2018-02-16T15:36:21.315Z","birthtime":"2018-02-16T15:36:21.315Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export const hostMethods = ['loadData']\n\nexport function loadData() {\n  return {}\n}\n\n"},"files/src/generators/component.js":{"root":"/","base":"component.js","ext":".js","name":"component","relativeDirname":"files/src/generators","relative":"files/src/generators/component.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116417,"size":1230,"blocks":8,"atimeMs":1527690473056.8362,"mtimeMs":1518795381315.768,"ctimeMs":1518795381315.768,"birthtimeMs":1518795381315.7,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.316Z","ctime":"2018-02-16T15:36:21.316Z","birthtime":"2018-02-16T15:36:21.316Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export const questions = {\n  componentName: {\n    description: 'What is the class name of the Component?',\n    required: true,\n    pattern: /^[A-Z]/,\n    message: 'The Component class name should be CamelCase.',\n  },\n  sourcePath: {\n    description: 'Where should the component live?',\n    default: 'src/components',\n  },\n}\n\nexport const run = async (params = {}, { runtime } = {}) => {\n  const { sourcePath, componentName } = params\n  const { print } = runtime.cli\n\n  print(`Generating ${componentName} in ${sourcePath}/${componentName}.js`)\n\n  await runtime.fsx.mkdirpAsync(runtime.resolve(sourcePath))\n  await runtime.fsx.writeFileAsync(\n    runtime.resolve(sourcePath, `${componentName}.js`),\n    componentTemplate(params).trim() + '\\n',\n    'utf8'\n  )\n\n  return params\n}\n\nexport const componentTemplate = ({ componentName } = {}) => `\nimport { types, Container, Component } from 'globals'\n\nexport class ${componentName} extends Component {\n\tstatic contextTypes = { runtime: types.object }\n  state = {}\n\n\tcomponentWillMount() {\n\t\tconst { runtime } = this.context\n\t}\n\n  render() {\n    return (\n      <Container >\n        This is the ${componentName} Component.\n      </Container>\n    )\n  }\n}\n\nexport default ${componentName}\n`\n"},"files/src/generators/feature.js":{"root":"/","base":"feature.js","ext":".js","name":"feature","relativeDirname":"files/src/generators","relative":"files/src/generators/feature.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116418,"size":3759,"blocks":8,"atimeMs":1527690473056.87,"mtimeMs":1518795381316.341,"ctimeMs":1518795381316.341,"birthtimeMs":1518795381316.263,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.316Z","ctime":"2018-02-16T15:36:21.316Z","birthtime":"2018-02-16T15:36:21.316Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export const questions = {\n  featureName: {\n    description:\n      'What is the name of the feature? You can namespace this with a slash if you want.',\n    required: true\n  },\n  sourcePath: {\n    description: 'Where should the feature live?',\n    default: 'src/features'\n  }\n}\n\nexport const run = async (params = {}, { runtime } = {}) => {\n  const { sourcePath, featureName } = params\n  const { print } = runtime.cli\n\n  print(`Generating ${featureName} in ${sourcePath}/${featureName}.js`)\n\n  await runtime.fsx.mkdirpAsync(\n    runtime.pathUtils.dirname(runtime.resolve(sourcePath, `${featureName}.js`))\n  )\n\n  await runtime.fsx.writeFileAsync(\n    runtime.resolve(sourcePath, `${featureName}.js`),\n    featureTemplate(params, runtime).trim() + '\\n',\n    'utf8'\n  )\n\n  return params\n}\n\nexport const featureTemplate = ({ featureName } = {}, runtime) => {\n  return `\n// Creates a getter on runtime that lets you interact with your feature\nexport const shortcut = \"${runtime.stringUtils.camelCase(\n    featureName.replace(/\\//g, '_')\n  )}\"\n\n/**\n  Feature Methods are the public interface for your feature.\n\n  They should reference functions or values that are exported by your module.\n*/\nexport const featureMethods = [\n  // this will be available as runtime.${runtime.stringUtils.camelCase(\n    featureName.replace(/\\//g, '_')\n  )}.myFunction()\n  'myFunction',\n  // this will create a getter property. Useful for computed properties which don't change often, or aliases to other things\n  'getMyAttribute',\n  // this will create a getter property which is only run once.\n  'lazyLoadedAttribute'\n]\n\n/**\n  Host Methods are similar to featureMethods, except they get placed on the runtime.\n*/\nexport const hostMethods = [\n  'myHostExtension'\n]\n\n// will be available as runtime.myHostExtension()\nexport function myHostExtension(options = {}, context = {}) { }\n\n// will be available as runtime.${runtime.stringUtils.camelCase(\n    featureName.replace(/\\//g, '_')\n  )}.myFunction\nexport function myFunction(options = {}, context = {}) {}\n\n// will be available as runtime.${runtime.stringUtils.camelCase(\n    featureName.replace(/\\//g, '_')\n  )}.myAttribute\nexport function getMyAttribute(options = {}, context = {}) {}\n\n// will be available as runtime.${runtime.stringUtils.camelCase(\n    featureName.replace(/\\//g, '_')\n  )}.loadedAttribute\nexport function lazyLoadedAttribute(options = {}, context = {}) {}\n\n/** OPTIONAL CUSTOMIZATIONS **/\n/**\ncontrols how the featureMethod functions are applied to your feature.\nMainly the purpose is to control the arguments these functions are called with.\n\nFeel free to delete this if you don't need it.\n\nexport function featureMixinOptions() {\n  return {\n    // these values will automaticaly be appended or prepended to the function when called\n    partial: [this.runtime.context],\n    // when right is true, we use partialRight instead of partial\n    right: true,\n    // insert options will automatically pass an options hash by default to your function\n    // You can should disable this when you want absolute control over the method arguments.\n    insertOptions: true,\n    // transformKeys is responsible for converting functions which are prefixed with get or lazy\n    // into the desired attribute type, using skypager.propUtils\n    transformKeys: true,\n    // if hidden is true, the featureMethods will be created as non-enumerable properties\n    hidden: true\n    // scope controls the binding that will be used for the feature method\n    scope: this\n  }\n}\n*/\n\n\n// Same as featureMixinOptions. Delete if you don't need it.\n/**\nexport function hostMixinOptions() {\n  return {\n    scope: this.runtime,\n    partial: [this.runtime.context],\n    insertOptions: true,\n    hidden: false,\n    transformKeys: true\n  }\n}\n*/\n\n`\n}\n"},"files/src/generators/page.js":{"root":"/","base":"page.js","ext":".js","name":"page","relativeDirname":"files/src/generators","relative":"files/src/generators/page.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116419,"size":1317,"blocks":8,"atimeMs":1527690473056.9214,"mtimeMs":1518795381316.9426,"ctimeMs":1518795381316.9426,"birthtimeMs":1518795381316.8718,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.317Z","ctime":"2018-02-16T15:36:21.317Z","birthtime":"2018-02-16T15:36:21.317Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export const questions = {\n  componentName: {\n    description: 'What is the class name of the Page?',\n    required: true,\n    pattern: /^[A-Z]/,\n    message: 'The Page class name should be CamelCase.'\n  },\n  sourcePath: {\n    description: 'Where should the page live?',\n    default: 'src/pages'\n  }\n}\n\nexport const run = async (params = {}, { runtime } = {}) => {\n  const { sourcePath, componentName } = params\n  const { print } = runtime.cli\n\n  print(\n    `Generating ${componentName} in ${sourcePath}/${componentName}/index.js`\n  )\n\n  await runtime.fsx.mkdirpAsync(runtime.resolve(sourcePath, componentName))\n  await runtime.fsx.writeFileAsync(\n    runtime.resolve(sourcePath, componentName, 'index.js'),\n    componentTemplate(params).trim() + '\\n',\n    'utf8'\n  )\n\n  return params\n}\n\nexport const componentTemplate = ({ componentName } = {}) => `\n\nimport { Component } from 'react'\nimport types from 'prop-types'\nimport { Container, Segment, Header } from 'semantic-ui-react'\n\nexport class ${componentName} extends Component {\n  state = {}\n\n  render() {\n    return (\n      <Container page>\n        <Header as=\"h1\" content=\"Title\" subheader=\"Subtitle\" />\n\n        <Segment piled>\n          This is the ${componentName} Component.\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default ${componentName}\n`\n"},"files/src/generators/selector.js":{"root":"/","base":"selector.js","ext":".js","name":"selector","relativeDirname":"files/src/generators","relative":"files/src/generators/selector.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116420,"size":1132,"blocks":8,"atimeMs":1527690473056.9736,"mtimeMs":1518795381317.539,"ctimeMs":1518795381317.539,"birthtimeMs":1518795381317.4653,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.318Z","ctime":"2018-02-16T15:36:21.318Z","birthtime":"2018-02-16T15:36:21.317Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export const questions = {\n  selectorName: {\n    description:\n      'What is the name of the selector? You can namespace this with a slash if you want.',\n    required: true\n  },\n  sourcePath: {\n    description: 'Where should the selector live?',\n    default: 'src/selectors'\n  }\n}\n\nexport const run = async (params = {}, { runtime } = {}) => {\n  const { sourcePath, selectorName } = params\n  const { print } = runtime.cli\n\n  print(`Generating ${selectorName} in ${sourcePath}/${selectorName}.js`)\n\n  await runtime.fsx.mkdirpAsync(\n    runtime.pathUtils.dirname(runtime.resolve(sourcePath, `${selectorName}.js`))\n  )\n\n  await runtime.fsx.writeFileAsync(\n    runtime.resolve(sourcePath, `${selectorName}.js`),\n    featureTemplate(params, runtime).trim() + '\\n',\n    'utf8'\n  )\n\n  return params\n}\n\nexport const featureTemplate = ({ selectorName } = {}, runtime) => {\n  return `\nexport default async function ${runtime.stringUtils.camelCase(\n    selectorName.replace(/\\//g, '_')\n  )}(chain, options = {}) {\n  // The selector must return the lodash chain that gets passed as our first argument\n  return chain.plant(options)\n}\n`.trim()\n}\n"},"files/src/globals.js":{"root":"/","base":"globals.js","ext":".js","name":"globals","relativeDirname":"files/src","relative":"files/src/globals.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116421,"size":924,"blocks":8,"atimeMs":1527690473057.0293,"mtimeMs":1518795381317.8506,"ctimeMs":1518795381317.8506,"birthtimeMs":1518795381317.7861,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.318Z","ctime":"2018-02-16T15:36:21.318Z","birthtime":"2018-02-16T15:36:21.318Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"const { lodash, axios, semanticUIReact, React } = window\nconst Component = (window.Component = window.React.Component)\nconst types = (window.types = window.PropTypes)\n\nconst sleep = (ms = 0) => new Promise(res => setTimeout(res, ms))\n\nconst baseContextTypes = (window.contextTypes = window.baseContextTypes = {\n  runtime: types.object\n})\n\nObject.assign(window, semanticUIReact)\n\nwindow.Row = semanticUIReact.Grid.Row\nwindow.Col = window.Column = semanticUIReact.Grid.Column\nconst Link = (window.Link = window.ReactRouterDOM.Link)\nconst NavLink = (window.NavLink = window.ReactRouterDOM.NavLink)\nconst runtime = (window.runtime = window.runtime || require('./runtime'))\n\nmodule.exports = {\n  Component,\n  axios,\n  types,\n  skypager: runtime,\n  runtime,\n  React,\n  Link,\n  NavLink,\n  Column: window.Column,\n  Row: window.Row,\n  Col: window.Col,\n  semanticUIReact,\n  baseContextTypes,\n  sleep,\n  lodash,\n  ...semanticUIReact\n}\n"},"files/src/index.web.js":{"root":"/","base":"index.web.js","ext":".js","name":"index.web","relativeDirname":"files/src","relative":"files/src/index.web.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116422,"size":858,"blocks":8,"atimeMs":1527690473057.0857,"mtimeMs":1518795381318.0176,"ctimeMs":1518795381318.0176,"birthtimeMs":1518795381317.9448,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.318Z","ctime":"2018-02-16T15:36:21.318Z","birthtime":"2018-02-16T15:36:21.318Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { runtime } from './globals'\nimport { render } from 'react-dom'\nimport { AppContainer } from 'react-hot-loader'\nimport App from './app.js'\n\nlet renderVersion = (global.renderVersion = 0)\n\nrequire('date-input-polyfill')\n\nconst sleep = (ms = 0) =>\n  new Promise((resolve, reject) => setTimeout(resolve, ms))\n\nconst renderApp = (Component, props = {}) =>\n  render(\n    <AppContainer key={Math.random() + renderVersion}>\n      <Component runtime={runtime} />\n    </AppContainer>,\n    document.getElementById('app')\n  )\n\nif (module.hot) {\n  module.hot.accept('./app.js', () => {\n    runtime.state.set('loaded', true)\n    renderApp(require('./app.js').App, { loaded: true })\n  })\n}\n\nruntime\n  .startApp()\n  .then(() => renderApp(App))\n  .then(() => sleep(200))\n  .then(() => runtime.state.set('loaded', true))\n\nglobal.renderApp = renderApp\nglobal.App = App\n"},"files/src/pages/AboutUs/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/AboutUs","relative":"files/src/pages/AboutUs/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116425,"size":558,"blocks":8,"atimeMs":1527690473057.1343,"mtimeMs":1518795381318.8606,"ctimeMs":1518795381318.8606,"birthtimeMs":1518795381318.7847,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.319Z","ctime":"2018-02-16T15:36:21.319Z","birthtime":"2018-02-16T15:36:21.319Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, Container, Component } from 'globals'\n\nexport class AboutUs extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Container page>\n        <Header as=\"h1\" content=\"Title\" subheader=\"Subtitle\" />\n\n        <Segment piled>\n          This is the AboutUs Component.\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default AboutUs\n"},"files/src/pages/ContactUs/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/ContactUs","relative":"files/src/pages/ContactUs/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116427,"size":564,"blocks":8,"atimeMs":1527690473057.1628,"mtimeMs":1518795381319.2173,"ctimeMs":1518795381319.2173,"birthtimeMs":1518795381319.1487,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.319Z","ctime":"2018-02-16T15:36:21.319Z","birthtime":"2018-02-16T15:36:21.319Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, Container, Component } from 'globals'\n\nexport class ContactUs extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Container page>\n        <Header as=\"h1\" content=\"Title\" subheader=\"Subtitle\" />\n\n        <Segment piled>\n          This is the ContactUs Component.\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default ContactUs\n"},"files/src/pages/FrequentlyAskedQuestions/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/FrequentlyAskedQuestions","relative":"files/src/pages/FrequentlyAskedQuestions/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116429,"size":609,"blocks":8,"atimeMs":1527690473057.2014,"mtimeMs":1518795381319.7798,"ctimeMs":1518795381319.7798,"birthtimeMs":1518795381319.7214,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.320Z","ctime":"2018-02-16T15:36:21.320Z","birthtime":"2018-02-16T15:36:21.320Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, Container, Component } from 'globals'\n\nexport class FrequentlyAskedQuestions extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Container page>\n        <Header as=\"h1\" content=\"Title\" subheader=\"Subtitle\" />\n\n        <Segment piled>\n          This is the FrequentlyAskedQuestions Component.\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default FrequentlyAskedQuestions\n"},"files/src/pages/LoginPage/EmailAuth.js":{"root":"/","base":"EmailAuth.js","ext":".js","name":"EmailAuth","relativeDirname":"files/src/pages/LoginPage","relative":"files/src/pages/LoginPage/EmailAuth.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116431,"size":2302,"blocks":8,"atimeMs":1527690473057.239,"mtimeMs":1518795381320.8318,"ctimeMs":1518795381320.8318,"birthtimeMs":1518795381320.561,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.321Z","ctime":"2018-02-16T15:36:21.321Z","birthtime":"2018-02-16T15:36:21.321Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, runtime, React, Component } from '../../globals.js'\nimport {\n  Icon,\n  Button,\n  Header,\n  Container,\n  Form,\n  Segment\n} from '../../globals.js'\n\nexport class EmailAuthForm extends Component {\n  static contextTypes = {\n    runtime: types.object,\n    database: types.object,\n    auth: types.object,\n    firebase: types.object\n  }\n\n  state = {\n    email: '',\n    password: ''\n  }\n\n  handleFieldChange = (e, { name, value } = {}) =>\n    this.setState({ error: false, errorMessage: undefined, [name]: value })\n\n  handleLoginClick = e => {\n    e.preventDefault()\n\n    const { email, password } = this.state\n    const { runtime } = this.context\n\n    this.setState({ error: false, errorMessage: undefined })\n\n    runtime.login({ email, password, uid: email }).catch(error => {\n      const { code, message } = error\n      console.log('Error while logging in', error)\n      this.setState({\n        error: true,\n        errorMessage: this.formatErrorMessage(code, message)\n      })\n    })\n  }\n\n  formatErrorMessage = (code, message) => {\n    switch (code) {\n      case 'auth/wrong-password':\n      default:\n        return 'The password is invalid'\n    }\n  }\n\n  render() {\n    const { error = false, errorMessage } = this.state\n\n    return (\n      <Segment>\n        <Header as=\"h4\" content=\"Login\" icon=\"lock\" />\n        <Form error={error} onSubmit={e => e.preventDefault()}>\n          {error && (\n            <Message error header=\"Login Error\" content={errorMessage} />\n          )}\n          <Form.Input\n            name=\"email\"\n            type=\"email\"\n            key=\"email\"\n            label=\"E-Mail\"\n            placeholder=\"Enter your E-Mail address\"\n            onChange={this.handleFieldChange}\n          />\n          <Form.Input\n            type=\"password\"\n            name=\"password\"\n            key=\"password\"\n            label=\"Password\"\n            placeholder=\"Enter your password\"\n            error={error}\n            onChange={this.handleFieldChange}\n          />\n          <Segment clearing basic>\n            <Button.Group floated=\"right\">\n              <Button onClick={this.handleLoginClick} primary>\n                Login\n              </Button>\n            </Button.Group>\n          </Segment>\n        </Form>\n      </Segment>\n    )\n  }\n}\n\nexport default EmailAuthForm\n"},"files/src/pages/LoginPage/LoginPage.js":{"root":"/","base":"LoginPage.js","ext":".js","name":"LoginPage","relativeDirname":"files/src/pages/LoginPage","relative":"files/src/pages/LoginPage/LoginPage.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116432,"size":780,"blocks":8,"atimeMs":1527690473057.2798,"mtimeMs":1518795381321.3826,"ctimeMs":1518795381321.3826,"birthtimeMs":1518795381321.3218,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.321Z","ctime":"2018-02-16T15:36:21.321Z","birthtime":"2018-02-16T15:36:21.321Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, runtime, React, Component } from '../../globals.js'\nimport { Container, Grid, Column as Col, Row } from '../../globals.js'\nimport EmailAuthForm from './EmailAuth'\nimport MainHeader from 'components/MainHeader'\n\nexport class LoginPage extends Component {\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Grid as={Container} fluid>\n        <Row>\n          <Col width={16}>\n            <MainHeader />\n          </Col>\n        </Row>\n        <Row>\n          <Col width={16}>\n            <EmailAuthForm />\n          </Col>\n        </Row>\n      </Grid>\n    )\n  }\n}\n\nexport default LoginPage\n"},"files/src/pages/LoginPage/MultiProviderAuth.js":{"root":"/","base":"MultiProviderAuth.js","ext":".js","name":"MultiProviderAuth","relativeDirname":"files/src/pages/LoginPage","relative":"files/src/pages/LoginPage/MultiProviderAuth.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116433,"size":3621,"blocks":8,"atimeMs":1527690473057.3171,"mtimeMs":1518795381321.5232,"ctimeMs":1518795381321.5232,"birthtimeMs":1518795381321.4812,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.322Z","ctime":"2018-02-16T15:36:21.322Z","birthtime":"2018-02-16T15:36:21.321Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, runtime, React, Component } from '../../globals.js'\nimport {\n  Icon,\n  Button,\n  Header,\n  Container,\n  Form,\n  Segment\n} from '../../globals.js'\n\nexport class MultiProviderAuthForm extends Component {\n  static contextTypes = {\n    runtime: types.object,\n    database: types.object,\n    storage: types.object,\n    auth: types.object,\n    firebase: types.object\n  }\n\n  state = {\n    email: '',\n    password: ''\n  }\n\n  handleFieldChange = (e, { name, value } = {}) =>\n    this.setState({ [name]: value })\n\n  handleLoginClick = () => {\n    const { email, password } = this.state\n\n    this.context.auth\n      .signInWithEmailAndPassword(email, password)\n      .then(currentUser => {\n        // console.log('Current User', currentUser)\n      })\n      .catch(err => {\n        const { code, message } = err\n      })\n  }\n\n  handleGoogleLogin = () => {\n    const { auth } = this.context.firebase\n    const { GoogleAuthProvider } = auth\n    const provider = new GoogleAuthProvider()\n\n    provider.addScope('email')\n    provider.addScope('offline')\n    provider.addScope('https://www.googleapis.com/auth/drive')\n    provider.addScope('https://www.googleapis.com/auth/spreadsheets')\n\n    this.context.auth\n      .signInWithPopup(provider)\n      .then(result => {\n        console.log('Logged in with Google', result)\n      })\n      .catch(err => {\n        console.error('Error in google auth flow', err)\n      })\n  }\n\n  handleGithubLogin = () => {\n    const { auth } = this.context.firebase\n    const { GithubAuthProvider } = auth\n    const provider = new GithubAuthProvider()\n\n    this.context.auth\n      .signInWithPopup(provider)\n      .then(result => {\n        console.log('Logged in with Github', result)\n      })\n      .catch(err => {\n        console.error('Error in github auth flow', err)\n      })\n  }\n\n  render() {\n    return (\n      <Container style={{ paddingTop: '40px' }}>\n        <Segment>\n          <Header as=\"h1\" content=\"Login\" icon=\"lock\" />\n          <Grid\n            columns=\"sixteen\"\n            style={{ paddingTop: '20px', paddingBottom: '20px' }}>\n            <Col width={8}>\n              <Form>\n                <Form.Input\n                  name=\"email\"\n                  type=\"email\"\n                  key=\"email\"\n                  label=\"E-Mail\"\n                  placeholder=\"Enter your E-Mail address\"\n                  onChange={this.handleFieldChange}\n                />\n                <Form.Input\n                  type=\"password\"\n                  name=\"password\"\n                  key=\"password\"\n                  label=\"Password\"\n                  placeholder=\"Enter your password\"\n                  onChange={this.handleFieldChange}\n                />\n                <Segment clearing basic>\n                  <Button.Group floated=\"right\">\n                    <Button onClick={this.handleLoginClick} primary>\n                      Login\n                    </Button>\n                  </Button.Group>\n                </Segment>\n              </Form>\n            </Col>\n            <Col width={2}>\n              <Divider vertical>OR</Divider>\n            </Col>\n            <Col width={6}>\n              <Button color=\"red\" onClick={this.handleGoogleLogin}>\n                <Icon name=\"google\" />&nbsp;Login with Google\n              </Button>\n              <div style={{ marginTop: '16px' }} />\n              <Button color=\"black\" onClick={this.handleGithubLogin}>\n                <Icon name=\"github\" />&nbsp;Login with Github\n              </Button>\n            </Col>\n          </Grid>\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default MultiProviderAuthForm\n"},"files/src/pages/LoginPage/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/LoginPage","relative":"files/src/pages/LoginPage/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116434,"size":43,"blocks":8,"atimeMs":1527690473057.356,"mtimeMs":1518795381321.8674,"ctimeMs":1518795381321.8674,"birthtimeMs":1518795381321.7573,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.322Z","ctime":"2018-02-16T15:36:21.322Z","birthtime":"2018-02-16T15:36:21.322Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"module.exports = require('./LoginPage.js')\n"},"files/src/pages/PrivacyPolicy/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/PrivacyPolicy","relative":"files/src/pages/PrivacyPolicy/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116436,"size":556,"blocks":8,"atimeMs":1527690473057.3943,"mtimeMs":1518795381322.3962,"ctimeMs":1518795381322.3962,"birthtimeMs":1518795381322.3315,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.322Z","ctime":"2018-02-16T15:36:21.322Z","birthtime":"2018-02-16T15:36:21.322Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, Container, Header, Component } from 'globals'\n\nexport class PrivacyPolicy extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Container fluid>\n        <Header\n          as=\"h1\"\n          content=\"Privacy Policy\"\n          subheader=\"We care about your data\"\n        />\n      </Container>\n    )\n  }\n}\n\nexport default PrivacyPolicy\n"},"files/src/pages/PrivateHome/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/PrivateHome","relative":"files/src/pages/PrivateHome/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116438,"size":823,"blocks":8,"atimeMs":1527690473057.4333,"mtimeMs":1518795381322.9592,"ctimeMs":1518795381322.9592,"birthtimeMs":1518795381322.852,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.323Z","ctime":"2018-02-16T15:36:21.323Z","birthtime":"2018-02-16T15:36:21.323Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { Segment, Container, types, Component } from 'globals'\nimport MainHeader from 'components/MainHeader'\n\nexport class PrivateHome extends Component {\n  state = {}\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  async handleLogout(e) {\n    e.preventDefault()\n    const { runtime } = this.context\n\n    await runtime.logout()\n    runtime.history.push('/')\n  }\n\n  render() {\n    return (\n      <Container>\n        <MainHeader />\n        <Segment piled>\n          This is the PrivateHome Component.\n          <a href=\"#\" onClick={this.handleLogout.bind(this)}>\n            Logout\n          </a>\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default PrivateHome\n"},"files/src/pages/PublicHome/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/PublicHome","relative":"files/src/pages/PublicHome/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116440,"size":1397,"blocks":8,"atimeMs":1527690473057.472,"mtimeMs":1518795381323.5464,"ctimeMs":1518795381323.5464,"birthtimeMs":1518795381323.4575,"atime":"2018-05-30T14:27:53.057Z","mtime":"2018-02-16T15:36:21.324Z","ctime":"2018-02-16T15:36:21.324Z","birthtime":"2018-02-16T15:36:21.323Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { Segment, Container, types, Component } from 'globals'\nimport MainHeader from 'components/MainHeader'\n\nexport class PublicHome extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Container>\n        <MainHeader />\n        <Segment piled>\n          <Link to=\"/\" children=\"Home\" />\n          <br />\n          <Link to=\"/about-us\" children=\"About\" />\n          <br />\n          <Link to=\"/contact\" children=\"Contact\" />\n          <br />\n          <Link to=\"/faq\" children=\"FAQ\" />\n          <br />\n          <Link to=\"/industries\" children=\"Industries\" />\n          <br />\n          <Link to=\"/industries/plastics\" children=\"Industry Page\" />\n          <br />\n          <Link to=\"/privacy\" children=\"Privacy\" />\n          <br />\n          <Link to=\"/purchase-agreement\" children=\"Purchase Agreement\" />\n          <br />\n          <Link to=\"/referral\" children=\"Referral\" />\n          <br />\n          <Link to=\"/refunds-and-returns\" children=\"Refunds\" />\n          <br />\n          <Link to=\"/terms-of-use\" children=\"Terms\" />\n          <br />\n          <Link to=\"/testimonials\" children=\"Testimonials\" />\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default PublicHome\n"},"files/src/pages/TermsOfUse/index.js":{"root":"/","base":"index.js","ext":".js","name":"index","relativeDirname":"files/src/pages/TermsOfUse","relative":"files/src/pages/TermsOfUse/index.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116442,"size":567,"blocks":8,"atimeMs":1527690473057.5105,"mtimeMs":1518795381324.2234,"ctimeMs":1518795381324.2234,"birthtimeMs":1518795381324.1433,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.324Z","ctime":"2018-02-16T15:36:21.324Z","birthtime":"2018-02-16T15:36:21.324Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"import { types, Container, Component } from 'globals'\n\nexport class TermsOfUse extends Component {\n  state = {}\n\n  static contextTypes = {\n    runtime: types.object\n  }\n\n  componentWillMount() {\n    const { runtime } = this.context\n    const { history } = this.props\n    runtime.set('history', history)\n  }\n\n  render() {\n    return (\n      <Container page>\n        <Header as=\"h1\" content=\"Title\" subheader=\"Subtitle\" />\n\n        <Segment piled>\n          This is the TermsOfUse Component.\n        </Segment>\n      </Container>\n    )\n  }\n}\n\nexport default TermsOfUse\n"},"files/src/runtime.js":{"root":"/","base":"runtime.js","ext":".js","name":"runtime","relativeDirname":"files/src","relative":"files/src/runtime.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116443,"size":622,"blocks":8,"atimeMs":1527690473057.5476,"mtimeMs":1518795381324.529,"ctimeMs":1518795381324.529,"birthtimeMs":1518795381324.4563,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.325Z","ctime":"2018-02-16T15:36:21.325Z","birthtime":"2018-02-16T15:36:21.324Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"const { axios, firebase } = window\nconst runtime = (module.exports = window.runtime = skypager)\n\nruntime.hide('axios', axios)\n\n// register all of the selectors found in src/selectors\n// example: runtime.select('remote-data', options)\nruntime.selectors.add(require.context('./selectors', true, /\\.js$/))\n\n// register all of the feature modules found in src/features\nruntime.features.add(require.context('./features', true, /\\.js$/))\n\nruntime.feature('authentication').enable({ provider: 'skypager' })\nruntime.feature('data-loading').enable()\n\nruntime.startApp = () =>\n  runtime.start().then(() => {\n    return runtime\n  })\n"},"files/src/scripts/build/dev.js":{"root":"/","base":"dev.js","ext":".js","name":"dev","relativeDirname":"files/src/scripts/build","relative":"files/src/scripts/build/dev.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116446,"size":1394,"blocks":8,"atimeMs":1527690473057.5854,"mtimeMs":1518795381325.2148,"ctimeMs":1518795381325.2148,"birthtimeMs":1518795381325.1394,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.325Z","ctime":"2018-02-16T15:36:21.325Z","birthtime":"2018-02-16T15:36:21.325Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"/* prettier-disable */\n\nasync function dev() {\n  const { print } = skypager.cli\n\n  const port = skypager.get('argv.port', 3000)\n  const host = skypager.get('argv.host', skypager.get('argv.hostname')) || '0.0.0.0'\n\n  const compiler = await skypager.compiler('dev', {\n    moduleLocations: [skypager.join('src'), 'node_modules'],\n    aliases: {\n      'pages/PortfolioManager': skypager.resolve('src/pages/PortfolioManager/PortfolioManager.js'),\n      'pages/LoginPage': skypager.resolve('src/pages/LoginPage/LoginPage.js'),\n      'pages/ViewCarrierBook': skypager.resolve('src/pages/ViewCarrierBook/ViewCarrierBook.js'),\n      'pages/ViewCarrierPolicy': skypager.resolve('src/pages/ViewCarrierPolicy/ViewCarrierPolicy.js'),\n      'pages/ViewPortfolioPolicy': skypager.resolve('src/pages/ViewPortfolioPolicy/ViewPortfolioPolicy.js'),\n    }\n  })\n\n  if (!compiler.isConfigValid) {\n    print('Compiler configuration is invalid', 4)\n    print(compiler.configValidationMessages, 8)\n  }\n\n  const devServer = await compiler.createDevServer({\n    historyApiFallback: true,\n    noInfo: false,\n    hot: true,\n    contentBase: skypager.join('public'),\n    port,\n    host,\n    publicPath: compiler.publicPath || '/',\n    stats: { colors: true, minimal: true },\n    quiet: false,\n  })\n\n  devServer.listen(port, host, err => {\n    !err && print(`Dev Server is listening on http://${host}:${port}`)\n  })\n}\n\ndev()\n"},"files/src/scripts/build/prod.js":{"root":"/","base":"prod.js","ext":".js","name":"prod","relativeDirname":"files/src/scripts/build","relative":"files/src/scripts/build/prod.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116447,"size":693,"blocks":8,"atimeMs":1527690473057.6228,"mtimeMs":1518795381325.6182,"ctimeMs":1518795381325.6182,"birthtimeMs":1518795381325.4812,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.326Z","ctime":"2018-02-16T15:36:21.326Z","birthtime":"2018-02-16T15:36:21.325Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"/* prettier-disable */\n\nasync function prod() {\n  const { print } = skypager.cli\n\n  const fCompiler = await skypager.compiler('prod', {\n    moduleLocations: [skypager.join('src'), 'node_modules'],\n  })\n\n  if (!fCompiler.isConfigValid) {\n    print('Compiler configuration is invalid', 4)\n    print(fCompiler.configValidationMessages, 8)\n  }\n\n  if (skypager.argv.watch) {\n    fCompiler.watch({ aggregateTimeout: 400 }, err => {\n      if (!err) {\n        print('Compiler watch OK')\n      }\n    })\n  } else {\n    await fCompiler.run()\n    print(fCompiler.stringifyStats({ colors: true, reasons: skypager.argv.debug, modules: skypager.argv.verbose || skypager.argv.debug }), 8, 2, 2)\n  }\n}\n\nprod()\n"},"files/src/scripts/generate.js":{"root":"/","base":"generate.js","ext":".js","name":"generate","relativeDirname":"files/src/scripts","relative":"files/src/scripts/generate.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116448,"size":2082,"blocks":8,"atimeMs":1527690473057.6594,"mtimeMs":1518795381326.6338,"ctimeMs":1518795381326.6338,"birthtimeMs":1518795381325.8647,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.327Z","ctime":"2018-02-16T15:36:21.327Z","birthtime":"2018-02-16T15:36:21.326Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"const questions = {\n  generatorType: {\n    description: 'Which generator do you want to run? page, component',\n    ask: () => !runtime.get('argv._[2]', '').length\n  }\n}\n\nconst { randomBanner, clear, print, prompt } = runtime.cli // eslint-disable-line\nconst { mapKeys, invert, values, keys } = runtime.lodash // eslint-disable-line\n\nconst component = require(skypager.resolve('src/generators/component.js'))\nconst page = require(skypager.resolve('src/generators/page.js'))\nconst feature = require(skypager.resolve('src/generators/feature.js'))\nconst selector = require(skypager.resolve('src/generators/selector.js'))\n\nasync function main() {\n  clear()\n\n  randomBanner('Skypager', { font: 'Slant' })\n\n  prompt.start()\n\n  prompt.message = ''\n  prompt.delimter = ''\n\n  const initial = await ask(questions)\n\n  let { generatorType } = initial\n\n  if (generatorType.length === 0) {\n    generatorType = runtime.get('argv._[2]')\n  }\n\n  if (generatorType === 'page') {\n    const pageData = await ask(page.questions)\n    await page.run(pageData, this).catch(e => {\n      print(`Error: ${e.message}`)\n    })\n  } else if (generatorType === 'component') {\n    const componentData = await ask(component.questions)\n    await component.run(componentData, this).catch(e => {\n      print(`Error: ${e.message}`)\n    })\n  } else if (generatorType === 'selector') {\n    const selectorData = await ask(selector.questions)\n    await selector.run(selectorData, this).catch(e => {\n      print(`Error: ${e.message}`)\n    })\n  } else if (generatorType === 'feature') {\n    const featureData = await ask(feature.questions)\n    await feature.run(featureData, this).catch(e => {\n      print(`Error: ${e.message}`)\n    })\n  } else {\n    print(`Unknown generator type: ${generatorType}`)\n  }\n}\n\nfunction ask(schema) {\n  return new Promise((resolve, reject) => {\n    prompt.get(\n      { properties: schema },\n      (err, results) => (err ? reject(err) : resolve(results))\n    )\n  })\n}\n\nruntime.fileManager\n  .whenActivated()\n  .then(main)\n  .catch(e => {\n    print(`Error: ${e.message}`)\n  }) // eslint-disable-line\n"},"files/src/selectors/remote-data.js":{"root":"/","base":"remote-data.js","ext":".js","name":"remote-data","relativeDirname":"files/src/selectors","relative":"files/src/selectors/remote-data.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116450,"size":539,"blocks":8,"atimeMs":1527690473057.6985,"mtimeMs":1518795381327.2573,"ctimeMs":1518795381327.2573,"birthtimeMs":1518795381327.162,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.327Z","ctime":"2018-02-16T15:36:21.327Z","birthtime":"2018-02-16T15:36:21.327Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"const REMOTE_URL = ''\n\nexport default (async function selectRemoteData(chain, options = {}) {\n  const runtime = this\n\n  const { url = REMOTE_URL } = options\n  const { axios = global.axios } = runtime\n  const { omit } = runtime.lodash\n\n  if (!url.length) {\n    throw new Error(`Must supply a remote endpointURL`)\n  }\n\n  const data = await axios\n    .get(url)\n    .then(resp => resp.data || [])\n    .catch(error => {\n      console.log('Error fetching data', error)\n      return []\n    })\n\n  // DATA Cleanup Format Pipeline\n\n  return data\n})\n"},"files/src/snapshots/static-data.json":{"root":"/","base":"static-data.json","ext":".json","name":"static-data","relativeDirname":"files/src/snapshots","relative":"files/src/snapshots/static-data.json","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116452,"size":4,"blocks":8,"atimeMs":1527690473057.7358,"mtimeMs":1518795381328.0872,"ctimeMs":1518795381328.0872,"birthtimeMs":1518795381328.0325,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.328Z","ctime":"2018-02-16T15:36:21.328Z","birthtime":"2018-02-16T15:36:21.328Z"},"extension":".json","mime":{"mimeType":"application/json"},"content":"{}\n\n"},"files/src/styles/app.scss":{"root":"/","base":"app.scss","ext":".scss","name":"app","relativeDirname":"files/src/styles","relative":"files/src/styles/app.scss","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116454,"size":49,"blocks":8,"atimeMs":1527690473057.7747,"mtimeMs":1518795381328.8542,"ctimeMs":1518795381328.8542,"birthtimeMs":1518795381328.7732,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.329Z","ctime":"2018-02-16T15:36:21.329Z","birthtime":"2018-02-16T15:36:21.329Z"},"extension":".scss","mime":{"mimeType":"text/x-scss"},"content":"$badass: #bada55;\n\n.badass {\n  color: $badass;\n}\n"},"files/src/templates/html.dev.js":{"root":"/","base":"html.dev.js","ext":".js","name":"html.dev","relativeDirname":"files/src/templates","relative":"files/src/templates/html.dev.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116456,"size":1301,"blocks":8,"atimeMs":1527690473057.8125,"mtimeMs":1518795381329.9167,"ctimeMs":1518795381329.9167,"birthtimeMs":1518795381329.8135,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.330Z","ctime":"2018-02-16T15:36:21.330Z","birthtime":"2018-02-16T15:36:21.330Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export default (async function compile(params = {}) {\n  const {\n    compilation,\n    webpack,\n    webpackConfig,\n    htmlWebpackPlugin: { files, options }\n  } = params\n  const { skypager } = options\n\n  const page = skypager.page('html')\n\n  page.initialState = {}\n\n  page.dllPublicPath = '/'\n  page.publicPath = '/'\n\n  page.stylesheets = ['semantic.css']\n\n  page.dllScripts = [\n    'react.js',\n    'react-dom.js',\n    'prop-types.js',\n    'semantic-ui-react.min.js',\n    'skypager-web.js',\n    'axios.js',\n    'react-router-dom.js',\n    'moment.min.js'\n  ]\n\n  page.headTop = `\n  <style>\n    html, body, #app {\n      height: 100%;\n      width: 100%;\n      margin: 0;\n      padding: 0;\n    }\n  </style>\n  <script>\n    window.process = window.process || {}\n    window.process.env = window.process.env || {};\n    window.process.env.NODE_ENV = 'development';\n    window.process.env.DB_ENV = '${skypager.get('argv.dbEnv', 'development')}'\n    window.process.env.DB_VERSION = '${skypager.get('argv.dbVersion', 'v2')}'\n    window.process.env.GIT_BRANCH = '${skypager.gitInfo.branch}';\n    window.process.env.GIT_SHA = '${skypager.gitInfo.abbreviatedSha}';\n    window.process.env.GIT_VERSION = '${skypager.currentPackage.version}';\n    window.ARGV = process.env\n  </script>\n  `\n\n  return await page.render()\n})\n"},"files/src/templates/html.js":{"root":"/","base":"html.js","ext":".js","name":"html","relativeDirname":"files/src/templates","relative":"files/src/templates/html.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116457,"size":1284,"blocks":8,"atimeMs":1527690473057.8506,"mtimeMs":1518795381330.4148,"ctimeMs":1518795381330.4148,"birthtimeMs":1518795381330.2104,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.330Z","ctime":"2018-02-16T15:36:21.330Z","birthtime":"2018-02-16T15:36:21.330Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"export default (async function compile(params = {}) {\n  const {\n    compilation,\n    webpack,\n    webpackConfig,\n    htmlWebpackPlugin: { files, options }\n  } = params\n  const { skypager } = options\n\n  const page = skypager.page('html')\n\n  page.initialState = {}\n\n  page.dllPublicPath = '/'\n  page.publicPath = '/'\n\n  page.stylesheets = ['semantic.min.css']\n\n  page.dllScripts = [\n    'react.min.js',\n    'react-dom.min.js',\n    'prop-types.min.js',\n    'semantic-ui-react.min.js',\n    'skypager-web.min.js',\n    'axios.min.js',\n    'react-router-dom.min.js'\n  ]\n\n  page.headTop = `\n  <style>\n    html, body, #app {\n      height: 100%;\n      width: 100%;\n      margin: 0;\n      padding: 0;\n    }\n  </style>\n<script>\n  window.process = window.process || {}\n  window.process.env = window.process.env || {};\n  window.process.env.NODE_ENV = 'production';\n  window.process.env.DB_ENV = '${skypager.get('argv.dbEnv', 'production')}'\n  window.process.env.DB_VERSION = '${skypager.get('argv.dbVersion', 'v2')}'\n  window.process.env.GIT_BRANCH = '${skypager.gitInfo.branch}';\n  window.process.env.GIT_SHA = '${skypager.gitInfo.abbreviatedSha}';\n  window.process.env.GIT_VERSION = '${skypager.currentPackage.version}';\n  window.ARGV = process.env\n</script>\n  `\n\n  return await page.render()\n})\n"},"files/src/webpacks/dev.js":{"root":"/","base":"dev.js","ext":".js","name":"dev","relativeDirname":"files/src/webpacks","relative":"files/src/webpacks/dev.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116459,"size":5207,"blocks":16,"atimeMs":1527690473057.888,"mtimeMs":1518795381330.9531,"ctimeMs":1518795381330.9531,"birthtimeMs":1518795381330.8079,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.331Z","ctime":"2018-02-16T15:36:21.331Z","birthtime":"2018-02-16T15:36:21.331Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"const ExtractTextPlugin = require('extract-text-webpack-plugin')\n\nconst { dirname } = require('path')\nconst loaderUtils = require('loader-utils')\n\n// i forget which one gets used\nexport const target = 'web'\nexport const buildTarget = 'web'\n\nexport function entry() {\n  const { runtime } = this\n  const { host = 'localhost', port = 3000 } = runtime.argv\n\n  return {\n    app: [\n      'react-hot-loader/patch',\n      `webpack-dev-server/client?http://${host}:${port}`,\n      'webpack/hot/only-dev-server',\n      runtime.join('src', 'index.web.js')\n    ]\n  }\n}\n\nexport function outputPath() {\n  return this.runtime.join('public')\n}\n\nexport function moduleLocations() {\n  return [this.runtime.join('src'), 'node_modules']\n}\n\nexport function rules() {\n  const { compact } = this.lodash\n  const { runtime } = this\n\n  return [\n    {\n      name: 'babel',\n      test: /\\.js$/,\n      exclude: [\n        /node_modules/,\n        this.runtime.join('node_modules'),\n        dirname(this.runtime.packageFinder.attemptResolve('skypager')),\n        this.runtime.join('src/templates'),\n        dirname(\n          dirname(\n            this.runtime.resolve(\n              this.runtime.packageFinder.attemptResolve('skypager')\n            )\n          )\n        )\n      ],\n      use: compact([\n        !this.runtime.isProduction &&\n          (this.runtime.argv.hot || this.options.hot) && {\n            loader: 'react-hot-loader/webpack'\n          },\n        {\n          loader: 'babel-loader',\n          options: {\n            babelrc: false,\n            ...babelConfig.call(this)\n          }\n        }\n      ]).filter(v => v)\n    },\n    {\n      test: /\\.(eot|svg|ttf|woff|woff2)(\\?v=[a-z0-9]\\.[a-z0-9]\\.[a-z0-9])?$/,\n      use: [\n        {\n          loader: 'url-loader',\n          options: { limit: 65000 }\n        }\n      ]\n    },\n    {\n      test: /\\.(jpe?g|png|gif)$/,\n      use: [\n        {\n          loader: 'url-loader',\n          options: { limit: 65000 }\n        },\n        {\n          loader: 'image-webpack-loader',\n          options: {}\n        }\n      ]\n    },\n    {\n      test: /\\.css$/,\n      use: ExtractTextPlugin.extract({\n        fallback: 'style-loader',\n        use: ['css-loader']\n      })\n    },\n    {\n      test: /\\.(scss|sass)$/,\n      use: ExtractTextPlugin.extract({\n        fallback: 'style-loader',\n        use: ['css-loader', 'sass-loader']\n      })\n    }\n  ]\n}\n\nexport function webpackPlugins() {\n  const definitions = {}\n\n  const res = m => {\n    const p = this.runtime.packageFinder.attemptResolve(m)\n\n    if (!p) {\n      console.log('FAILED TO RESOLVE', m)\n      process.exit(1)\n    }\n\n    return p\n  }\n\n  return this.runtime.convertToJS({\n    'html-webpack-plugin': {\n      template: 'src/templates/html.dev.js',\n      skypager: this.runtime,\n      runtime: this.runtime,\n      inject: true,\n      filename: 'index.html'\n    },\n\n    'extract-text-webpack-plugin': 'styles.css',\n\n    ExternalsPlugin: {\n      react: 'global React',\n      'semantic-ui-react': 'global semanticUIReact',\n      skypager: 'global skypager',\n      'react-dom': 'global ReactDOM',\n      'prop-types': 'global PropTypes',\n      axios: 'global axios',\n      'react-router-dom': 'global ReactRouterDOM'\n    },\n\n    DefinePlugin: definitions,\n\n    'copy-webpack-plugin': [\n      { from: res('skypager-runtimes-web/skypager-web.js') },\n      { from: res('skypager-runtimes-web/skypager-web.min.js') },\n      { from: res('axios/dist/axios.js') },\n      { from: res('axios/dist/axios.min.js') },\n      { from: res('react/dist/react.js') },\n      { from: res('react/dist/react.min.js') },\n      { from: res('prop-types/prop-types.js') },\n      { from: res('prop-types/prop-types.min.js') },\n      { from: res('react-dom/dist/react-dom.js') },\n      { from: res('react-dom/dist/react-dom.min.js') },\n      { from: res('semantic-ui-react/dist/umd/semantic-ui-react.min.js') },\n      { from: res('react-router-dom/umd/react-router-dom.min.js') },\n      { from: res('react-router-dom/umd/react-router-dom.js') },\n      { from: this.runtime.join('src', 'snapshots'), flatten: false },\n      {\n        from: dirname(res('semantic-ui-css/semantic.css')),\n        to: this.runtime.join('public'),\n        flatten: false,\n        ignore: ['**/components/**']\n      }\n    ]\n  })\n}\n\nexport function babelConfig() {\n  const { runtime } = this\n  const { packageFinder } = runtime\n  const { isString, isArray } = this.lodash\n\n  const validate = items =>\n    items\n      .filter(item => (isArray(item) && isString(item[0])) || isString(item))\n      .filter(i => i && i.length)\n\n  return {\n    presets: validate([\n      [\n        packageFinder.attemptResolve('babel-preset-env'),\n        {\n          targets: {\n            browsers: ['>5%']\n          }\n        }\n      ],\n      packageFinder.attemptResolve('babel-preset-stage-0'),\n      packageFinder.attemptResolve('babel-preset-react')\n    ]),\n    plugins: validate([\n      packageFinder.attemptResolve('babel-plugin-transform-decorators-legacy'),\n      packageFinder.attemptResolve('babel-plugin-transform-object-rest-spread'),\n      !runtime.isProduction &&\n        (this.options.hot || runtime.argv.hot) &&\n        packageFinder.attemptResolve('webpack-hot-loader/babel')\n    ])\n  }\n}\n"},"files/src/webpacks/prod.js":{"root":"/","base":"prod.js","ext":".js","name":"prod","relativeDirname":"files/src/webpacks","relative":"files/src/webpacks/prod.js","stats":{"dev":16777221,"mode":33188,"nlink":1,"uid":501,"gid":20,"rdev":0,"blksize":4194304,"ino":8602116460,"size":5108,"blocks":16,"atimeMs":1527690473057.9258,"mtimeMs":1518795381331.3352,"ctimeMs":1518795381331.3352,"birthtimeMs":1518795381331.2217,"atime":"2018-05-30T14:27:53.058Z","mtime":"2018-02-16T15:36:21.331Z","ctime":"2018-02-16T15:36:21.331Z","birthtime":"2018-02-16T15:36:21.331Z"},"extension":".js","mime":{"mimeType":"application/javascript"},"content":"const ExtractTextPlugin = require('extract-text-webpack-plugin')\nconst { dirname } = require('path')\n\nexport function rules() {\n  const { compact } = this.lodash\n  const { runtime } = this\n\n  return [\n    {\n      name: 'babel',\n      test: /\\.js$/,\n      exclude: [\n        this.runtime.join('node_modules'),\n        dirname(this.runtime.packageFinder.attemptResolve('skypager')),\n        this.runtime.join('src/templates'),\n        dirname(\n          dirname(\n            this.runtime.resolve(\n              this.runtime.packageFinder.attemptResolve('skypager')\n            )\n          )\n        )\n      ],\n      use: compact([\n        !this.runtime.isProduction && { loader: 'react-hot-loader/webpack' },\n        {\n          loader: 'babel-loader',\n          options: {\n            babelrc: false,\n            ...babelConfig.call(this)\n          }\n        }\n      ]).filter(v => v)\n    },\n    {\n      test: /\\.(eot|svg|ttf|woff|woff2)(\\?v=[a-z0-9]\\.[a-z0-9]\\.[a-z0-9])?$/,\n      use: [\n        {\n          loader: 'url-loader',\n          options: { limit: 65000 }\n        }\n      ]\n    },\n    {\n      test: /.css$/,\n      use: ExtractTextPlugin.extract({\n        fallback: 'style-loader',\n        use: ['css-loader']\n      })\n    },\n    {\n      test: /\\.(scss|sass)$/,\n      use: ExtractTextPlugin.extract({\n        fallback: 'style-loader',\n        use: ['css-loader', 'sass-loader']\n      })\n    },\n    {\n      test: /\\.(jpe?g|png|gif)$/,\n      use: [\n        {\n          loader: 'url-loader',\n          options: { limit: 65000 }\n        },\n        {\n          loader: 'image-webpack-loader',\n          options: {}\n        }\n      ]\n    }\n  ]\n}\n\nexport function babelConfig() {\n  const { runtime } = this\n  const { packageFinder } = runtime\n  const { isString, isArray } = this.lodash\n\n  const validate = items =>\n    items\n      .filter(item => (isArray(item) && isString(item[0])) || isString(item))\n      .filter(i => i && i.length)\n\n  return {\n    presets: validate([\n      [\n        packageFinder.attemptResolve('babel-preset-env'),\n        {\n          targets: {\n            node: ['7.0.0'],\n            browsers: ['>5%']\n          }\n        }\n      ],\n      packageFinder.attemptResolve('babel-preset-stage-0'),\n      packageFinder.attemptResolve('babel-preset-react')\n    ]),\n    plugins: validate([\n      packageFinder.attemptResolve('babel-plugin-transform-decorators-legacy'),\n      packageFinder.attemptResolve('babel-plugin-transform-object-rest-spread'),\n      !runtime.isProduction &&\n        packageFinder.attemptResolve('webpack-hot-loader/babel')\n    ])\n  }\n}\n\nexport function entry() {\n  const { runtime } = this\n\n  return {\n    app: [runtime.join('src', 'index.web.js')]\n  }\n}\n\nexport const buildTarget = 'web'\n\nexport const outputFilename = '[name].[hash].js'\n\nexport function outputPath() {\n  return this.runtime.join('public')\n}\n\nexport function moduleLocations() {\n  return [this.runtime.join('src'), 'packages', 'node_modules']\n}\n\nexport function webpackPlugins() {\n  const res = m => this.runtime.packageFinder.attemptResolve(m)\n\n  const definitions = {}\n\n  return this.runtime.convertToJS({\n    'html-webpack-plugin': {\n      template: 'src/templates/html.js',\n      skypager: this.runtime,\n      runtime: this.runtime,\n      inject: true,\n      filename: 'index.html'\n    },\n\n    DefinePlugin: definitions,\n\n    ExternalsPlugin: {\n      react: 'global React',\n      'semantic-ui-react': 'global semanticUIReact',\n      skypager: 'global skypager',\n      'react-dom': 'global ReactDOM',\n      'prop-types': 'global PropTypes',\n      axios: 'global axios',\n      'react-router-dom': 'global ReactRouterDOM'\n    },\n\n    'uglifyjs-webpack-plugin': {\n      warnings: false,\n      compress: {\n        warnings: false\n      },\n      mangle: true,\n      minimize: true,\n      comments: false\n    },\n\n    'extract-text-webpack-plugin': 'styles.css',\n\n    'copy-webpack-plugin': [\n      { from: res('skypager-runtimes-web/skypager-web.js') },\n      { from: res('skypager-runtimes-web/skypager-web.min.js') },\n      { from: res('axios/dist/axios.js') },\n      { from: res('axios/dist/axios.min.js') },\n      { from: res('react/dist/react.js') },\n      { from: res('react/dist/react.min.js') },\n      { from: res('prop-types/prop-types.js') },\n      { from: res('prop-types/prop-types.min.js') },\n      { from: res('react-dom/dist/react-dom.js') },\n      { from: res('react-dom/dist/react-dom.min.js') },\n      { from: res('semantic-ui-react/dist/umd/semantic-ui-react.min.js') },\n      { from: res('react-router-dom/umd/react-router-dom.min.js') },\n      { from: res('react-router-dom/umd/react-router-dom.js') },\n\n      { from: this.runtime.join('src', 'vendor'), flatten: false },\n      { from: this.runtime.join('src', 'snapshots'), flatten: false },\n\n      {\n        from: dirname(res('semantic-ui-css/semantic.css')),\n        to: this.runtime.join('public'),\n        flatten: false,\n        ignore: [\n          '**/components/**',\n          'components/**',\n          'README.md',\n          'LICENSE',\n          'package.json',\n          'package.js'\n        ]\n      }\n    ]\n  })\n}\n"}}