3.0.0-beta 3fa7189ebd6a cached
86 files
440.0 KB
175.5k tokens
12 symbols
1 requests
Download .txt
Showing preview only (468K chars total). Download the full file or copy to clipboard to get everything.
Repository: ramsaylanier/wordexpress-starter-vue
Branch: 3.0.0-beta
Commit: 3fa7189ebd6a
Files: 86
Total size: 440.0 KB

Directory structure:
gitextract_x5kofju5/

├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .travis.yml
├── History.md
├── README.md
├── acf-export.json
├── babel.config.js
├── config/
│   └── sample-client.config.json
├── jest.config.js
├── package.json
├── public/
│   └── index.html
├── scripts/
│   ├── serve.js
│   └── start.js
├── server.js
├── src/
│   ├── core/
│   │   ├── app.js
│   │   ├── graphql/
│   │   │   ├── category.gql
│   │   │   ├── menu.gql
│   │   │   ├── page.gql
│   │   │   ├── post.gql
│   │   │   ├── posts.gql
│   │   │   └── user.gql
│   │   ├── plugin/
│   │   │   └── index.js
│   │   ├── router.js
│   │   ├── ssr/
│   │   │   ├── entry-client.js
│   │   │   └── entry-server.js
│   │   ├── vue-apollo.js
│   │   └── vuex/
│   │       ├── actions.js
│   │       ├── getters.js
│   │       └── store.js
│   ├── index.template.html
│   └── themes/
│       ├── basic/
│       │   ├── App.vue
│       │   ├── components/
│       │   │   ├── category/
│       │   │   │   ├── CategoryList.vue
│       │   │   │   └── containers/
│       │   │   │       └── CategoryContainer.vue
│       │   │   ├── header/
│       │   │   │   └── header.vue
│       │   │   ├── icons/
│       │   │   │   └── icons.vue
│       │   │   ├── menu/
│       │   │   │   ├── menu.vue
│       │   │   │   ├── menuContainer.vue
│       │   │   │   └── menuLink.vue
│       │   │   ├── page/
│       │   │   │   ├── PageHeader.vue
│       │   │   │   ├── layouts/
│       │   │   │   │   ├── DefaultPage.vue
│       │   │   │   │   ├── PageWithHeader.vue
│       │   │   │   │   ├── PageWithSidebar.vue
│       │   │   │   │   └── layouts.js
│       │   │   │   └── page.vue
│       │   │   └── post/
│       │   │       ├── PostContent.vue
│       │   │       ├── PostList.vue
│       │   │       ├── PostListItem.vue
│       │   │       ├── PostSingle.vue
│       │   │       └── containers/
│       │   │           ├── PostContainer.vue
│       │   │           └── PostsContainer.vue
│       │   ├── routes/
│       │   │   └── index.js
│       │   └── styles/
│       │       ├── colors.scss
│       │       ├── reset.css
│       │       └── typography.css
│       └── multi-user/
│           ├── App.vue
│           ├── components/
│           │   ├── author/
│           │   │   ├── AuthorSingle.vue
│           │   │   └── containers/
│           │   │       └── AuthorContainer.vue
│           │   ├── category/
│           │   │   ├── CategoryList.vue
│           │   │   └── containers/
│           │   │       └── CategoryContainer.vue
│           │   ├── header/
│           │   │   └── header.vue
│           │   ├── icons/
│           │   │   └── icons.vue
│           │   ├── menu/
│           │   │   ├── menu.vue
│           │   │   ├── menuContainer.vue
│           │   │   └── menuLink.vue
│           │   ├── page/
│           │   │   ├── PageHeader.vue
│           │   │   ├── layouts/
│           │   │   │   ├── DefaultPage.vue
│           │   │   │   ├── PageWithHeader.vue
│           │   │   │   ├── PageWithSidebar.vue
│           │   │   │   └── layouts.js
│           │   │   └── page.vue
│           │   └── post/
│           │       ├── PostContent.vue
│           │       ├── PostList.vue
│           │       ├── PostListItem.vue
│           │       ├── PostSingle.vue
│           │       └── containers/
│           │           ├── PostContainer.vue
│           │           └── PostsContainer.vue
│           ├── routes/
│           │   └── index.js
│           └── styles/
│               ├── colors.scss
│               ├── reset.css
│               └── typography.css
├── tests/
│   └── unit/
│       ├── .eslintrc.js
│       └── HelloWorld.spec.js
├── vue.config.js
└── yarn-error.log

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true


================================================
FILE: .eslintignore
================================================
build/*.js
dist/*.js
node_modules/*
**/lib/*
*.gql

================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/essential',
    '@vue/prettier'
  ],
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  },
  parserOptions: {
    parser: 'babel-eslint'
  }
}

================================================
FILE: .gitignore
================================================
.DS_Store
node_modules/
dist/
npm-debug.log
.vscode/
config/client.json
config/development.json
config/production.json

================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
  - "6"
  - "7"
script: npm run unit --single-run

================================================
FILE: History.md
================================================
# V.3.0.0-beta

- Completely replaced build system using Vue CLI 3.0 (beta release)

# V.2.1

- Created a multi-user theme to display author profile pages. 
- Add gravatar link helper to plugin


# V.2.0

I have since moved the GraphQL server into its own stand-alone repo called [WordExpress Server](https://github.com/ramsaylanier/WordExpress-Server). V.1.X of this repo included the GraphQL server and schema, etc. If you are migrating from V.1.X, you'll first need to clone the WordExpress Server repo and follow the instructions on setting it up.

# V.1.0

Welcome to VuePress

================================================
FILE: README.md
================================================
# WordExpress Starter - Vue (AKA VuePress)

> WordPress development using Vue, GraphQL, and Express.

[Read the Introduction to Vue Press](https://medium.com/@rmmmsy/introducing-vuepress-wordpress-development-with-vue-and-graphql-f5063a97bb69)

This repo is a starting off point for working with WordExpress using Vue. Its meant to work with [WordExpress Server](https://github.com/ramsaylanier/WordExpress-Server). 

## Node Version Requirement

```bash
node 6.*
node 7.*
```

## Before Doing Anything Else

Please make sure you have cloned the [WordExpress Server](https://github.com/ramsaylanier/WordExpress-Server) repo and have followed the instructions for getting it up and running. WordExpress server provides you with a connection to your WordPress database using GraphQL. 

## Config

Using the `/config/sample-client.config.json` file as an example, create a `client.json` file. As of now, this the config files just point to the url of where your WordExpress Server is running, and which theme in the `src/themes` directory to use. 

## Build Setup

``` bash
yarn
yarn build
yarn start
=======
npm install
npm run build
```

## Development Setup

```bash
yarn
yarn serve
```

# Working With WordPress

## First Steps

In a fresh WordPress install, you'll need to do a few basic setup items:

- Create a page called 'Homepage'
- Create a menu called 'primary-navigation'
- Install Advanced Custom Fields plugin (see below)

## Advanced Custom Fields

VuePress uses some custom post fields. You're best bet is to install the Advanced Custom Fields plugin into your WordPress backend. I've included am `acf-export` JSON file in this repo that you should import. This will give you just a few basic custom page fields that can be used to give your pages custom layout components.

## Layout Components

Currently there are only [three layout components](https://github.com/ramsaylanier/VuePress/tree/master/src/components/page/layouts) - `DefaultPage`, `PageWithHeader`, and `PostList`. In order to set the layout component, simply type the name of the component in the custom field. If there is nothing in the layout component field, `DefaultPage` will be used. 

### PageWithHeader

In the backend:

<img width="965" alt="screen shot 2017-12-19 at 8 54 27 pm" src="https://user-images.githubusercontent.com/2359852/34187337-dadf8bec-e4fe-11e7-84a0-3f1d885437d7.png">


Result:

<img width="1428" alt="screen shot 2017-12-19 at 9 06 14 pm" src="https://user-images.githubusercontent.com/2359852/34187651-80791a72-e500-11e7-8c9d-ec7bdbeb62be.png">

### PostList

In the backend: 

<img width="962" alt="screen shot 2017-12-19 at 9 10 04 pm" src="https://user-images.githubusercontent.com/2359852/34187773-0762ff30-e501-11e7-8b82-bd16d2b77c94.png">

Result:

<img width="1440" alt="screen shot 2017-12-19 at 9 08 38 pm" src="https://user-images.githubusercontent.com/2359852/34187730-d36b6442-e500-11e7-9af3-a52674dbfd6a.png">

## License

[MIT](http://opensource.org/licenses/MIT)


================================================
FILE: acf-export.json
================================================
[
    {
        "key": "group_5a32cdd1b53f1",
        "title": "Page Fields",
        "fields": [
            {
                "key": "field_5699475fcd949",
                "label": "Layout Component",
                "name": "page_layout_component",
                "type": "select",
                "instructions": "",
                "required": 0,
                "conditional_logic": 0,
                "wrapper": {
                    "width": "",
                    "class": "",
                    "id": ""
                },
                "choices": {
                    "Default": "Default",
                    "PageWithHeader": "PageWithHeader",
                    "PostList": "PostList",
                    "AboutPage": "AboutPage"
                },
                "default_value": [
                    "Default"
                ],
                "allow_null": 0,
                "multiple": 0,
                "ui": 0,
                "ajax": 0,
                "return_format": "value",
                "placeholder": ""
            },
            {
                "key": "field_5a43baa53bf80",
                "label": "Post Type",
                "name": "post_type",
                "type": "select",
                "instructions": "",
                "required": 0,
                "conditional_logic": [
                    [
                        {
                            "field": "field_5699475fcd949",
                            "operator": "==",
                            "value": "PostList"
                        }
                    ]
                ],
                "wrapper": {
                    "width": "",
                    "class": "",
                    "id": ""
                },
                "choices": {
                    "post": "Post",
                    "tutorial": "Tutorial"
                },
                "default_value": [
                    "post"
                ],
                "allow_null": 0,
                "multiple": 0,
                "ui": 0,
                "ajax": 0,
                "return_format": "value",
                "placeholder": ""
            },
            {
                "key": "field_5a43c2c5ab175",
                "label": "Post Item Component",
                "name": "post_item_component",
                "type": "select",
                "instructions": "",
                "required": 0,
                "conditional_logic": [
                    [
                        {
                            "field": "field_5699475fcd949",
                            "operator": "==",
                            "value": "PostList"
                        }
                    ]
                ],
                "wrapper": {
                    "width": "",
                    "class": "",
                    "id": ""
                },
                "choices": {
                    "PostListItem": "PostListItem",
                    "TutorialListItem": "TutorialListItem"
                },
                "default_value": [],
                "allow_null": 0,
                "multiple": 0,
                "ui": 0,
                "ajax": 0,
                "return_format": "value",
                "placeholder": ""
            },
            {
                "key": "field_5a4423fc9061e",
                "label": "About Image",
                "name": "about_image",
                "type": "image",
                "instructions": "",
                "required": 0,
                "conditional_logic": [
                    [
                        {
                            "field": "field_5699475fcd949",
                            "operator": "==",
                            "value": "AboutPage"
                        }
                    ]
                ],
                "wrapper": {
                    "width": "",
                    "class": "",
                    "id": ""
                },
                "return_format": "url",
                "preview_size": "thumbnail",
                "library": "all",
                "min_width": "",
                "min_height": "",
                "min_size": "",
                "max_width": "",
                "max_height": "",
                "max_size": "",
                "mime_types": ""
            }
        ],
        "location": [
            [
                {
                    "param": "post_type",
                    "operator": "==",
                    "value": "page"
                }
            ]
        ],
        "menu_order": 0,
        "position": "acf_after_title",
        "style": "seamless",
        "label_placement": "top",
        "instruction_placement": "label",
        "hide_on_screen": "",
        "active": 1,
        "description": ""
    }
]

================================================
FILE: babel.config.js
================================================
module.exports = {
  presets: ["@vue/app"]
};


================================================
FILE: config/sample-client.config.json
================================================
{
  "wordexpressServerHost": "http://localhost:4000",
  "theme": "basic"
}

================================================
FILE: jest.config.js
================================================
module.exports = {
  moduleFileExtensions: ["js", "jsx", "json", "vue"],
  transform: {
    "^.+\\.vue$": "vue-jest",
    ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$":
      "jest-transform-stub",
    "^.+\\.jsx?$": "babel-jest"
  },
  moduleNameMapper: {
    "^@/(.*)$": "<rootDir>/src/$1"
  },
  snapshotSerializers: ["jest-serializer-vue"],
  testMatch: [
    "<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))"
  ]
};


================================================
FILE: package.json
================================================
{
  "name": "wordexpress-starter-kit-vue",
  "version": "3.0.0-beta",
  "private": false,
  "scripts": {
    "start": "cross-env NODE_ENV=production node scripts/start",
    "serve": "vue-cli-service serve",
    "build": "npm run build:server && mv dist/vue-ssr-server-bundle.json bundle && npm run build:client && mv bundle dist/vue-ssr-server-bundle.json",
    "lint": "vue-cli-service lint",
    "build:client": "vue-cli-service build",
    "build:server": "cross-env WEBPACK_TARGET=node vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "ssr:serve": "vue-cli-service ssr:serve",
    "ssr:build": "vue-cli-service ssr:build",
    "ssr:start": "cross-env NODE_ENV=production vue-cli-service ssr:serve --mode production"
  },
  "dependencies": {
    "apollo-link-http": "^1.5.4",
    "config": "^1.30.0",
    "graphql": "^14.0.0-rc.1",
    "gsap": "^2.0.1",
    "highlightjs": "^9.10.0",
    "isomorphic-fetch": "^2.2.1",
    "vue": "^2.5.16",
    "vue-apollo": "^3.0.0-beta.10",
    "vue-resource": "^1.5.1",
    "vue-router": "^3.0.1",
    "vue-server-renderer": "^2.5.16",
    "vuex": "^3.0.1",
    "vuex-router-sync": "^5.0.0",
    "wordexpress-tools": "^1.3.0"
  },
  "devDependencies": {
    "@akryum/vue-cli-plugin-ssr": "^0.1.2",
    "@vue/cli-plugin-babel": "^3.0.0-beta.15",
    "@vue/cli-plugin-eslint": "^3.0.0-beta.15",
    "@vue/cli-plugin-unit-jest": "^3.0.0-beta.15",
    "@vue/cli-service": "^3.0.0-beta.15",
    "@vue/eslint-config-prettier": "^3.0.0-beta.16",
    "@vue/test-utils": "^1.0.0-beta.16",
    "babel-core": "7.0.0-bridge.0",
    "babel-jest": "^23.0.1",
    "cross-env": "^5.1.6",
    "eslint": "^5.6.1",
    "eslint-loader": "^2.1.1",
    "eslint-plugin-html": "^4.0.3",
    "eslint-plugin-vue": "^4.7.1",
    "graphql-tag": "^2.9.2",
    "lodash.merge": "^4.6.1",
    "node-sass": "^4.9.0",
    "sass-loader": "^7.0.1",
    "vue-cli-plugin-apollo": "^0.16.0",
    "vue-template-compiler": "^2.5.16",
    "webpack": "^4.20.2",
    "webpack-node-externals": "^1.7.2"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ],
  "bugs": {
    "url": "https://github.com/ramsaylanier/VuePress/issues"
  },
  "homepage": "https://github.com/ramsaylanier/VuePress#readme",
  "author": "ramsay lanier <ramsaylanier@gmail.com>",
  "keywords": [
    "vue",
    "vuex",
    "vue-router",
    "webpack",
    "starter",
    "server-side",
    "boilerplate",
    "wordpress"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/ramsaylanier/VuePress"
  },
  "description": "WordPress with Vue",
  "license": "MIT"
}


================================================
FILE: public/index.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>WordExpress Starter Vue</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but wordexpress-starter-vue-temp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!--vue-ssr-outlet-->
  </body>
</html>


================================================
FILE: scripts/serve.js
================================================
const { spawn } = require("child_process");
const serve = spawn("npx", ["vue-cli-service", "serve"]);

const log = console.log;
const errAndExit = err => {
  console.log(err);
  process.exit(1);
};

serve.on("data", log);
serve.on("error", errAndExit);
serve.on("close", log);


================================================
FILE: scripts/start.js
================================================
const app = require("../server");

const port = process.env.PORT || 3000;

app.listen(port, () => {
  console.log(`server started at localhost:${port}`);
});


================================================
FILE: server.js
================================================
const fs = require("fs");
const path = require("path");
const express = require("express");
var proxy = require("http-proxy-middleware");
const { createBundleRenderer } = require("vue-server-renderer");

const devServerBaseURL = process.env.DEV_SERVER_BASE_URL || "http://localhost";
const devServerPort = process.env.DEV_SERVER_PORT || 8080;

const app = express();

function createRenderer(bundle, options) {
  return createBundleRenderer(
    bundle,
    Object.assign(options, {
      runInNewContext: false
    })
  );
}

let renderer;
const templatePath = path.resolve(__dirname, "./src/index.template.html");

const bundle = require("./dist/vue-ssr-server-bundle.json");
const template = fs.readFileSync(templatePath, "utf-8");
const clientManifest = require("./dist/vue-ssr-client-manifest.json");
renderer = createRenderer(bundle, {
  template,
  clientManifest
});

if (process.env.NODE_ENV !== "production") {
  app.use(
    "/js/main*",
    proxy({
      target: `${devServerBaseURL}/${devServerPort}`,
      changeOrigin: true,
      pathRewrite: function(path) {
        return path.includes("main") ? "/main.js" : path;
      },
      prependPath: false
    })
  );

  app.use(
    "/*hot-update*",
    proxy({
      target: `${devServerBaseURL}/${devServerPort}`,
      changeOrigin: true
    })
  );

  app.use(
    "/sockjs-node",
    proxy({
      target: `${devServerBaseURL}/${devServerPort}`,
      changeOrigin: true,
      ws: true
    })
  );
}

app.use("/js", express.static(path.resolve(__dirname, "./dist/js")));
app.use("/css", express.static(path.resolve(__dirname, "./dist/css")));

app.get("*", (req, res) => {
  res.setHeader("Content-Type", "text/html");

  const context = {
    title: "WordExpress Starter Vue", // default title
    url: req.url
  };

  renderer.renderToString(context, (err, html) => {
    if (err) {
      if (err.url) {
        res.redirect(err.url);
      } else {
        // Render Error Page or Redirect
        res.status(500).end("500 | Internal Server Error");
        console.error(`error during render : ${req.url}`);
        console.error(err.stack);
      }
    }
    res.status(context.HTTPStatus || 200);
    res.send(html);
  });
});

module.exports = app;


================================================
FILE: src/core/app.js
================================================
import Vue from "vue";
import createStore from "./vuex/store";
import createRouter from "./router.js";
import { sync } from "vuex-router-sync";
import { createProvider } from "./vue-apollo.js";
import VueResource from "vue-resource";
import WordExpressPlugin from "./plugin";
import { WordExpressShortcodes, WordExpressHelpers } from "wordexpress-tools";

// THEME
import App from "@/App.vue";
import routes from "@/routes/index.js";

Vue.use(VueResource);
Vue.use(WordExpressPlugin, {
  shortcodes: WordExpressShortcodes,
  helpers: WordExpressHelpers
});

export function createApp(context) {
  const apolloProvider = createProvider({ ssr: context.ssr }).provide();
  const router = createRouter(routes);
  const store = createStore();
  sync(store, router);
  const app = new Vue({
    el: "#app",
    store,
    router,
    provide: apolloProvider,
    ...App,
    render: h => h(App)
  });
  return { app, router, store, apolloProvider };
}


================================================
FILE: src/core/graphql/category.gql
================================================
query Category($term_id: Int!){
  category(term_id: $term_id){
    name
    slug
    posts{
      id
      post_name
      post_date
      post_title
      post_meta{
        meta_value
        meta_key
      }
      categories{
        term_id
        name
      }
      thumbnail{
        src
        sizes{
          size
          file
        }
      }
    }
  }
}

================================================
FILE: src/core/graphql/menu.gql
================================================
query Menu($menu: String!) {
  menus(name: $menu) {
    items {
      id
      order
      navitem{
        id
        post_title
        post_name
        post_meta{
          meta_value
          meta_key
        }
      }
      children{
        id
        linkedId
        navitem{
          post_title
          post_name
        }
      }
    }
  }
}

================================================
FILE: src/core/graphql/page.gql
================================================
query Page($name: String){
  post(name: $name){
    id
    post_title
    post_content
    thumbnail{
      src
    }
    post_meta{
      meta_key
      meta_value
    }
    layout{
      meta_value
    }
  }
}

================================================
FILE: src/core/graphql/post.gql
================================================
query Post($name: String) {
  post(name: $name){
    id
    post_name
    post_parent
    post_content
    post_title
    post_date
    thumbnail{
      src
      sizes{
        size
        file
      }
    }
    post_meta{
      meta_value
      meta_key
    }
    author{
      user_nicename
      display_name
    }
  }
}

================================================
FILE: src/core/graphql/posts.gql
================================================
query Posts($post_type: [String], $limit: Int, $skip: Int, $order: OrderInput) {
  posts(post_type: $post_type, limit: $limit, skip: $skip, order: $order){
    id
    post_name
    post_title
    post_date
    post_meta{
      meta_value
      meta_key
    }
    categories{
      term_id
      name
    }
    author{
      user_nicename
      display_name
    }
  }
}

================================================
FILE: src/core/graphql/user.gql
================================================
query User($name: String) {
  user(name: $name){
    display_name
    user_email
    posts{
      post_name
      post_title
      post_date
    }
  }
}

================================================
FILE: src/core/plugin/index.js
================================================
const WordExpressPlugin = {
  install(Vue, options) {
    const { shortcodes, helpers } = options;
    Vue.prototype.$parseContent = function(content) {
      return helpers.parseContent(content, shortcodes);
    };

    Vue.prototype.$getThumbnail = function(thumbnail, size) {
      return helpers.getThumbnail(thumbnail, size);
    };

    Vue.prototype.$formatDate = function(date) {
      return helpers.formatDate(date);
    };

    Vue.prototype.$renderEmbed = function(embed) {
      return helpers.renderEmbed(embed);
    };

    Vue.prototype.$getAvatarLink = function(email, size) {
      return helpers.getAvatarLink(email, size);
    };
  }
};

export default WordExpressPlugin;


================================================
FILE: src/core/router.js
================================================
import Vue from "vue";
import Router from "vue-router";

Vue.use(Router);

export function createRouter(routes) {
  return new Router({
    mode: "history",
    routes
  });
}

export default createRouter;


================================================
FILE: src/core/ssr/entry-client.js
================================================
import { loadAsyncComponents } from "@akryum/vue-cli-plugin-ssr/client";
import { createApp } from "../app";

createApp({
  async beforeApp({ router }) {
    const components = await loadAsyncComponents({ router });
    console.log(components);
  },

  afterApp({ app, store }) {
    store.replaceState(window.__INITIAL_STATE__);
    app.$mount("#app");
  }
});


================================================
FILE: src/core/ssr/entry-server.js
================================================
import "isomorphic-fetch";
import { createApp } from "../app";

export default context => {
  return new Promise(async (resolve, reject) => {
    const { app, router, store, apolloProvider } = await createApp();

    router.push(context.url);

    router.onReady(() => {
      const matchedComponents = router.getMatchedComponents();

      if (!matchedComponents.length) {
        // eslint-disable-next-line prefer-promise-reject-errors
        return reject({ code: 404 });
      }

      Promise.all([
        // Async data
        ...matchedComponents.map(Component => {
          if (Component.asyncData) {
            return Component.asyncData({
              store,
              route: router.currentRoute
            });
          }
        }),
        // Apollo prefetch
        apolloProvider.prefetchAll(
          {
            route: router.currentRoute
          },
          matchedComponents
        )
      ]).then(() => {
        // After all preFetch hooks are resolved, our store is now
        // filled with the state needed to render the app.
        // When we attach the state to the context, and the `template` option
        // is used for the renderer, the state will automatically be
        // serialized and injected into the HTML as `window.__INITIAL_STATE__`.
        context.state = store.state;

        // Apollo
        context.apolloState = apolloProvider.getStates();
      });

      resolve(app);
    }, reject);
  });
};


================================================
FILE: src/core/vue-apollo.js
================================================
import Vue from "vue";
import VueApollo from "vue-apollo";
import {
  createApolloClient,
  restartWebsockets
} from "vue-cli-plugin-apollo/graphql-client";
import config from "config";

const { wordexpressServerHost } = config;

// Install the vue plugin
Vue.use(VueApollo);

// Name of the localStorage item
const AUTH_TOKEN = "apollo-token";

// Http endpoint
const httpEndpoint = wordexpressServerHost;

// Files URL root
export const filesRoot =
  process.env.VUE_APP_FILES_ROOT ||
  httpEndpoint.substr(0, httpEndpoint.indexOf("/graphql"));

Object.defineProperty(Vue.prototype, "$filesRoot", {
  get: () => filesRoot
});

// Config
const defaultOptions = {
  // You can use `https` for secure connection (recommended in production)
  httpEndpoint,
  // You can use `wss` for secure connection (recommended in production)
  // Use `null` to disable subscriptions
  wsEndpoint: null,
  // LocalStorage token
  tokenName: AUTH_TOKEN,
  // Enable Automatic Query persisting with Apollo Engine
  persisting: false,
  // Use websockets for everything (no HTTP)
  // You need to pass a `wsEndpoint` for this to work
  websocketsOnly: false,
  // Is being rendered on the server?
  ssr: true

  // Override default http link
  // link: myLink

  // Override default cache
  // cache: myCache

  // Override the way the Authorization header is set
  // getAuth: (tokenName) => ...

  // Additional ApolloClient options
  // apollo: { ... }

  // Client local data (see apollo-link-state)
  // clientState: { resolvers: { ... }, defaults: { ... } }
};

// Call this in the Vue app file
export function createProvider(options = {}) {
  // Create apollo client
  const { apolloClient, wsClient } = createApolloClient({
    ...defaultOptions,
    ...options
  });
  apolloClient.wsClient = wsClient;

  // Create vue apollo provider
  const apolloProvider = new VueApollo({
    defaultClient: apolloClient,
    defaultOptions: {
      $query: {
        // fetchPolicy: 'cache-and-network',
      }
    },
    errorHandler(error) {
      // eslint-disable-next-line no-console
      console.log(
        "%cError",
        "background: red; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;",
        error.message
      );
    }
  });

  return apolloProvider;
}

// Manually call this when user log in
export async function onLogin(apolloClient, token) {
  localStorage.setItem(AUTH_TOKEN, token);
  if (apolloClient.wsClient) restartWebsockets(apolloClient.wsClient);
  try {
    await apolloClient.resetStore();
  } catch (e) {
    // eslint-disable-next-line no-console
    console.log("%cError on cache reset (login)", "color: orange;", e.message);
  }
}

// Manually call this when user log out
export async function onLogout(apolloClient) {
  localStorage.removeItem(AUTH_TOKEN);
  if (apolloClient.wsClient) restartWebsockets(apolloClient.wsClient);
  try {
    await apolloClient.resetStore();
  } catch (e) {
    // eslint-disable-next-line no-console
    console.log("%cError on cache reset (logout)", "color: orange;", e.message);
  }
}


================================================
FILE: src/core/vuex/actions.js
================================================
export const activeMenuName = ({ commit }, name) =>
  commit("ACTIVE_MENU_NAME", { name: name });


================================================
FILE: src/core/vuex/getters.js
================================================
export const getActiveMenuName = state => state.getActiveMenuName;


================================================
FILE: src/core/vuex/store.js
================================================
import Vue from "vue";
import Vuex from "vuex";
import * as actions from "./actions";
import * as getters from "./getters";

Vue.use(Vuex);

const state = {
  activeMenuName: null
};

const mutations = {
  ACTIVE_MENU_NAME: (state, name) => {
    state.activeMenuName = name;
  }
};

function createStore() {
  return new Vuex.Store({
    state,
    actions,
    mutations,
    getters
  });
}

export default createStore;


================================================
FILE: src/index.template.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <meta name="theme-color" content="#40b883"/>
    <meta name="msapplication-navbutton-color" content="#40b883"/>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
    <title>{{ title }}</title>
    {{{ renderResourceHints() }}}
    {{{ renderStyles() }}}
  </head>
  <body>
    <!--vue-ssr-outlet-->
    {{{ renderState() }}}
    {{{ renderState({ contextKey: 'apolloState', windowKey: '__APOLLO_STATE__' }) }}}
    {{{ renderScripts() }}}
  </body>
</html>


================================================
FILE: src/themes/basic/App.vue
================================================
<template>
  <div id="app">
    <icons/>
    <app-header/>
    <div class="main">
      <transition
        appear
        v-on:before-enter="beforeEnter"
        v-on:enter="enter"
        v-bind:css="false"
      >
        <router-view/>
      </transition>
    </div>
  </div>
</template>

<script>
import Icons from "./components/icons/icons";
import AppHeader from "./components/header/header";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "app",
  components: {
    Icons,
    AppHeader
  },
  methods: {
    beforeEnter: function(el) {
      TweenMax.set(el, {
        alpha: 0
      });
    },
    enter: function(el, done) {
      TweenMax.to(el, 1, {
        y: 0,
        alpha: 1,
        ease: Power4.easeOut
      });
      done();
    }
  }
};
</script>

<style lang="scss">
@import url("https://fonts.googleapis.com/css?family=Oswald:300|Source+Sans+Pro:300,400|Source+Code+Pro:400,700");
@import "./styles/reset.css";
@import "./styles/typography.css";

* {
  box-sizing: border-box;
}

body {
  font-family: var(--copy-font);
  background-color: var(--dark-color);
  padding: 0;
  margin: 0;
}

:root {
  --primary-color: #b60fe0;
  --secondary-color: #acf3a7;
  --dark-color: #380436;
  --light-grey-color: #f3f3f3;

  --heading-font: "Oswald", sans-serif;
  --copy-font: "Source Sans Pro", sans-serif;
  --mono-font: "Source Code Pro", monospace;
}
</style>


================================================
FILE: src/themes/basic/components/category/CategoryList.vue
================================================
<template>
  <div class="wrapper">
    <page-header :page="{post_title: category.name}" />
    <div class="page-content">
      <transition
        appear
        @enter="enter"
        :css="false"
        v-if="category"
      >
        <div class="posts">
          <post-list-item v-for="post in category.posts" :key="post.id" :post="post"/>
        </div>
      </transition>
    </div>
  </div>
</template>

<script>
import PageHeader from "../page/PageHeader";
import CategoryContainer from "./containers/CategoryContainer";
import PostListItem from "../post/PostListItem";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "category-list",
  props: ["category"],
  methods: {
    enter: function(el, done) {
      TweenMax.staggerFromTo(
        el.children,
        1,
        {
          y: 10,
          alpha: 0
        },
        {
          y: 0,
          alpha: 1,
          ease: Power4.easeOut,
          onComplete: done
        },
        0.05
      );
    }
  },
  components: {
    PageHeader,
    CategoryContainer,
    PostListItem
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 1fr 5%;
}

.posts {
  display: grid;
  grid-row-gap: 1rem;
}

.page-content {
  grid-column: 2;
  max-width: 800px;
  width: 100%;
  justify-self: center;
  padding: 2rem 0;
}
</style>


================================================
FILE: src/themes/basic/components/category/containers/CategoryContainer.vue
================================================
<template>
  <category-list v-if="category" :category="category"/>
</template>

<script>
import CategoryQuery from "core/graphql/category.gql";
import CategoryList from "../CategoryList";

export default {
  name: "category-container",
  data() {
    return {
      post: {}
    };
  },
  watch: {
    "$route.params.id": function(id) {
      this.$apollo.queries.category.refetch({ term_id: id });
    }
  },
  apollo: {
    category() {
      return {
        query: CategoryQuery,
        variables: {
          term_id: this.$route.params.id
        }
      };
    }
  },
  components: {
    CategoryList
  }
};
</script>


================================================
FILE: src/themes/basic/components/header/header.vue
================================================
<template>
  <header class="header">
    <div class="wrapper">
      <menu-container :menuName="'primary-navigation'">
        <app-menu slot-scope="menu" :menuItems="menu.items"/>
      </menu-container>
    </div>
  </header>
</template>

<script>
import MenuContainer from "../menu/menuContainer";
import AppMenu from "../menu/menu";
export default {
  name: "app-header",
  components: {
    MenuContainer,
    AppMenu
  }
};
</script>

<style scoped lang="scss">
@import "../../styles/colors.scss";

.header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 10;
  height: 40px;
  display: flex;
  justify-content: center;
}

.wrapper {
  background: darken($dark-color, 3%);
  height: 100%;
  padding: 0rem 1rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-width: 0 1px 1px 1px;
  border-style: solid;
  border-color: $secondary-color;
}
</style>


================================================
FILE: src/themes/basic/components/icons/icons.vue
================================================
<template>
  <svg style="display:none;">
    <symbol id="plus-icon" viewBox="0 0 24 24">
      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
      <path d="M0 0h24v24H0z" fill="none"/>
    </symbol>
  </svg>  
</template>

<script>
export default {
  name: "icons"
};
</script>

<style>
</style>


================================================
FILE: src/themes/basic/components/menu/menu.vue
================================================
<template>
  <ul class="menu">
    <li class="item">
      <router-link :to="{name: 'Home'}">Home</router-link>
    </li>
    <li class="item" v-for="item in menuItems" :key="item.id">
      <menu-link :link="item.navitem"/>
    </li>
  </ul>
</template>

<script>
import MenuLink from "./menuLink";
export default {
  name: "app-menu",
  props: ["menuItems"],
  components: {
    MenuLink
  }
};
</script>

<style scoped lang="scss">
@import "../../styles/colors";

.menu {
  padding: 0;
  display: flex;
}

.item {
  padding: 0rem 1rem;

  a {
    text-decoration: none;
    color: $secondary-color;
    font-size: 0.9rem;
  }
}
</style>


================================================
FILE: src/themes/basic/components/menu/menuContainer.vue
================================================
<template>
  <div>
    <slot :items="menus.items">
    </slot>
  </div>
</template>

<script>
import MenuQuery from "core/graphql/menu.gql";
export default {
  name: "menu-container",
  props: ["menuName"],
  data() {
    return {
      menus: {}
    };
  },
  apollo: {
    menus() {
      return {
        query: MenuQuery,
        variables: {
          menu: this.menuName
        }
      };
    }
  }
};
</script>


================================================
FILE: src/themes/basic/components/menu/menuLink.vue
================================================
<template>
  <a v-if="type === 'custom'" class="link" :href="url">{{link.post_title}}</a>
  <router-link v-else class="link" :to="`/${link.post_name}`">{{link.post_title}}</router-link>
</template>

<script>
export default {
  name: "menu-link",
  props: ["link"],
  data() {
    return {
      type: "",
      url: "",
      to: ""
    };
  },
  mounted() {
    this.parseLink();
  },
  methods: {
    parseLink() {
      this.link.post_meta.forEach(meta => {
        switch (meta.meta_key) {
          case "_menu_item_type":
            this.type = meta.meta_value;
            break;
          case "_menu_item_url":
            this.url = meta.meta_value;
            break;
        }
      });
    }
  }
};
</script>


================================================
FILE: src/themes/basic/components/page/PageHeader.vue
================================================
<template>
  <div class="header" :style="renderHeaderImage()">
    <div class="header-content">
      <h2 class="title">{{page.post_title}}</h2>
    </div>
  </div>
</template>

<script>
export default {
  name: "page-header",
  props: ["page"],
  methods: {
    renderHeaderImage() {
      const imageSrc = this.page.thumbnail ? this.page.thumbnail : null;
      return `backgroundImage: url('${imageSrc}');`;
    }
  }
};
</script>

<style scoped lang="scss">
@import "../../styles/colors.scss";

.header {
  grid-column: 1 / 4;
  grid-row: 1;
  padding: 2rem;
  background-color: $secondary-color;
}

.header-content {
  max-width: 800px;
  margin: 0 auto;
  padding: 2rem 0;
}

.title {
  margin: 0;
  font-weight: 100;
  letter-spacing: 0.015em;
}
</style>


================================================
FILE: src/themes/basic/components/page/layouts/DefaultPage.vue
================================================
<template>
  <div class="wrapper">
    <div class="body">
      <post-content :content="page.post_content"/> 
    </div>
  </div>
</template>

<script>
import PostContent from "../../post/PostContent";
export default {
  name: "default-page",
  props: ["page"],
  components: {
    PostContent
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 90% 5%;
}

.body {
  grid-column: 2;
  position: relative;
  width: 100%;
  max-width: 800px;
  justify-self: center;
  margin: 4rem auto 0rem auto;
  z-index: 2;
}

.post-content {
  padding: 2rem;
  margin-top: 2rem;
  background-color: white;
}
</style>


================================================
FILE: src/themes/basic/components/page/layouts/PageWithHeader.vue
================================================
<template>
  <div class="wrapper">
    <page-header :page="page"/>
    <div class="body">
      <post-content :content="page.post_content"/> 
    </div>
  </div>
</template>

<script>
import PostContent from "../../post/PostContent";
import PageHeader from "../PageHeader";
export default {
  name: "front-page",
  props: ["page"],
  methods: {
    renderHeader() {
      const header = this.page.post_meta.filter(meta => {
        return meta.meta_key === "page_header";
      });

      if (header.length > 0) {
        return header[0].meta_value;
      }
    },
    renderHeaderImage() {
      const imageSrc = this.page.thumbnail
        ? this.page.thumbnail
        : require("assets/post_header_bg.png");
      return `backgroundImage: url('${imageSrc}');`;
    }
  },
  components: {
    PostContent,
    PageHeader
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 90% 5%;
}

.header {
  grid-column: 1 / 4;
  grid-row: 1;
  padding: 2rem;
}

.header-content {
  max-width: 800px;
  margin: 0 auto;
  padding: 2rem 0;
}

.title {
  margin: 0;
  font-weight: 100;
  letter-spacing: 0.015em;
}

.body {
  grid-column: 2;
  position: relative;
  width: 100%;
  max-width: 800px;
  justify-self: center;
  margin: -4rem auto 0rem auto;
  z-index: 2;
}

.post-content {
  padding: 2rem;
  margin-top: 2rem;
  background-color: white;
}
</style>


================================================
FILE: src/themes/basic/components/page/layouts/PageWithSidebar.vue
================================================
<template>
  <div class="wrapper">
    <menu-container class="sidebar" :menuName="getSidebarMenuName()">
      <ul class="menu" slot-scope="menu">
        <li class="item" v-for="item in menu.items" :key="item.id">
          <menu-link :link="item.navitem"/>
        </li>
      </ul>
    </menu-container>
    <div class="body">
      <post-content :content="page.post_content"/> 
    </div>
  </div>
</template>

<script>
import MenuContainer from "../../menu/menuContainer";
import MenuLink from "../../menu/menuLink";
import PostContent from "../../post/PostContent";
export default {
  name: "page-with-sidebar",
  props: ["page"],
  components: {
    MenuContainer,
    MenuLink,
    PostContent
  },
  methods: {
    getSidebarMenuName() {
      return this.page.post_meta.filter(item => {
        return item.meta_key === "sidebarmenu";
      })[0].meta_value;
    }
  }
};
</script>

<style scoped lang="scss">
@import "../../../styles/colors.scss";

.wrapper {
  display: grid;
  grid-template-columns: 5% 1fr 4fr 5%;
  margin-top: 4rem;
}

.sidebar {
  padding: 1rem;
  grid-column: 2;
  display: flex;
  flex-flow: column;
  background-color: $secondary-color;
}

.body {
  grid-column: 3;
}

.post-content {
  padding: 2rem;
  background-color: white;
}

.item {
  a {
    font-size: 1.2rem;
    color: $dark-color;
    text-decoration: none;

    &:hover {
      color: $primary-color;
    }
  }

  &:not(:last-of-type) {
    margin-bottom: 1rem;
  }
}
</style>


================================================
FILE: src/themes/basic/components/page/layouts/layouts.js
================================================
import DefaultPage from "./DefaultPage";
import PageWithHeader from "./PageWithHeader";
import PageWithSidebar from "./PageWithSidebar";
import PostList from "../../post/PostList";

export default {
  DefaultPage,
  PageWithHeader,
  PageWithSidebar,
  PostList
};


================================================
FILE: src/themes/basic/components/page/page.vue
================================================
<template>
  <div class="page">
     <transition
      appear
      v-on:before-enter="beforeEnter"
      v-on:enter="enter"
      v-on:leave="leave"
      v-bind:css="false"
    >
      <component v-if="post && !isLoading" :is="getLayout()" :page="post"/>
    </transition>
  </div>
</template>

<script>
import PageQuery from "core/graphql/page.gql";
import Layouts from "./layouts/layouts";
import { TweenMax, Power4 } from "gsap";

export default {
  name: "page",
  props: ["name"],
  data() {
    return {
      post: {},
      isLoading: 0
    };
  },
  apollo: {
    post: {
      query: PageQuery,
      loadingKey: "isLoading",
      prefetch: ({ route }) => {
        return {
          name: route.params.name || "homepage"
        };
      },
      variables() {
        return {
          name: this.$route.params.name || "homepage"
        };
      }
    }
  },
  methods: {
    getLayout: function() {
      const layout = this.post.layout
        ? this.post.layout.meta_value
        : "DefaultPage";
      return Layouts[layout];
    },
    beforeEnter: function(el) {
      TweenMax.set(el, {
        alpha: 0
      });
    },
    enter: function(el, done) {
      TweenMax.to(el, 1, {
        y: 0,
        alpha: 1,
        ease: Power4.easeOut
      });
      done();
    },
    leave: function(el, done) {
      TweenMax.to(el, 1, {
        y: 0,
        alpha: 0,
        ease: Power4.easeOut
      });
      done();
    }
  }
};
</script>

<style scoped>
.page {
  min-height: 100vh;
  width: 100vw;
  background-color: var(--dark-color);
}
</style>


================================================
FILE: src/themes/basic/components/post/PostContent.vue
================================================
<template>
  <div class="post-content" v-html="$parseContent(content)"/> 
</template>

<script>
import { map } from "lodash";
import hljs from "highlightjs";

export default {
  name: "post-content",
  props: ["content"],
  mounted() {
    const anchors = this.$el.getElementsByTagName("a");
    const r = new RegExp("^(?:[a-z]+:)?//", "i");
    const m = new RegExp("mailto", "g");

    // add transitions to all internal links
    map(anchors, anchor => {
      const target = anchor.getAttribute("href");
      if (!r.test(target) && !m.test(target)) {
        anchor.addEventListener("click", e => {
          e.preventDefault();
          this.$router.push(target);
        });
      }
    });

    let targets = this.$el.querySelectorAll("pre code");
    targets.forEach(target => {
      hljs.highlightBlock(target);
    });

    let embeds = this.$el.querySelectorAll(".js-embed");
    embeds.forEach(embed => {
      this.$renderEmbed(embed);
    });
  }
};
</script>

<style lang="scss">
.post-content {
  font-size: 1.15rem;

  .cta {
    display: inline-block;
    margin: 1rem 0;
    padding: 0.75rem 1.5rem;
    background-color: var(--primary-color);
    color: white;
    border-radius: 3px;
    text-decoration: none;
    font-size: 1.25rem;
    font-family: var(--heading-font);

    &:hover {
      background-color: var(--secondary-color);
    }
  }

  ul {
    list-style-type: square;
    margin-left: 1rem;

    li {
      margin-bottom: 1rem;
    }
  }

  a {
    color: var(--primary-color);
    font-weight: 600;
  }

  blockquote {
    margin-left: 1rem;
    padding: 2rem;
    background-color: var(--light-grey-color);
    font-size: 1.2rem;
    border-left: 0.5rem solid var(--primary-color);
  }

  figure {
    max-width: 100%;
    padding: 2rem 0;
  }

  img {
    max-width: 100%;
    height: auto;

    &.alignright {
      float: right;
      margin-left: 1rem;
    }

    &.alignleft {
      float: left;
      margin-right: 1rem;
    }

    &.aligncenter {
      display: block;
      margin: 1rem auto;
    }
  }

  figcaption {
    background-color: var(--light-grey-color);
    padding: 0.25rem;
    margin-top: -7px;
    text-align: center;
  }

  code {
    font-size: 0.8rem;
    background-color: var(--light-grey-color);
    padding: 0.1rem;
    font-family: var(--mono-font);
  }

  pre {
    padding: 0.25rem;
    background-color: var(--light-grey-color);

    code {
      font-size: 0.9rem;
    }

    .hljs {
      top: 0;
    }
  }

  .hljs {
    display: inline-block;
    position: relative;
  }
}
</style>


================================================
FILE: src/themes/basic/components/post/PostList.vue
================================================
<template>
  <div class="wrapper">
    <page-header :page="{post_title: 'Posts'}" />
    <div class="page-content">
      <posts-container>
        <transition
          appear
          slot-scope="data"
          @enter="enter"
          :css="false"
        >
          <div class="posts" v-if="!data.isLoading">
            <post-list-item v-for="post in data.posts" :key="post.id" :post="post"/>
          </div>
        </transition>
      </posts-container>
    </div>
  </div>
</template>

<script>
import PageHeader from "../page/PageHeader";
import PostsContainer from "./containers/PostsContainer";
import PostListItem from "./PostListItem";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "post-list",
  methods: {
    enter: function(el, done) {
      TweenMax.staggerFromTo(
        el.children,
        2,
        {
          y: 20,
          alpha: 0
        },
        {
          y: 0,
          alpha: 1,
          ease: Power4.easeOut,
          onComplete: done
        },
        0.1
      );
    }
  },
  components: {
    PageHeader,
    PostsContainer,
    PostListItem
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 1fr 5%;
}

.posts {
  display: grid;
  grid-row-gap: 1rem;
}

.page-content {
  grid-column: 2;
  max-width: 800px;
  width: 100%;
  justify-self: center;
  padding: 2rem 0;
}
</style>


================================================
FILE: src/themes/basic/components/post/PostListItem.vue
================================================
<template>
  <div class="post-list-item">
    <router-link class="post-link" :to="{name: 'Post', params: {postname: post.post_name}}">
      <h3 class="post-title">{{post.post_title}}</h3>
      <p class="post-date">{{$formatDate(post.post_date)}}</p>
    </router-link>
    <ul class="post-categories">
      <li class="post-category" v-for="cat in post.categories" :key="cat.name">
        <router-link :to="{name: 'Category', params: {id: cat.term_id}}">{{cat.name}}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "post-list-item",
  props: ["post"]
};
</script>

<style scoped>
.post-list-item {
  background-color: var(--light-grey-color);
  width: 100%;
  display: grid;
  box-shadow: 8px 8px 8px -8px var(--dark-color);
}

.post-link:hover .post-title,
.post-link:hover .post-date {
  color: var(--primary-color);
}

.post-link {
  display: block;
  padding: 2rem;
  text-decoration: none;
}

.post-title {
  margin: 0;
}

.post-date {
  margin: 0;
}

.post-categories {
  border-top: 1px solid var(--dark-color);
  padding: 0.5rem 2rem;
  align-self: center;
  display: flex;
}

.post-category {
  margin-right: 1rem;
}

.post-category a {
  text-decoration: none;
  font-size: 0.8rem;
}
</style>


================================================
FILE: src/themes/basic/components/post/PostSingle.vue
================================================
<template>
  <div v-if="post.id">
    <div class="post-header" :style="renderHeaderImage()">
      <h2 class="post-title">{{post.post_title}}</h2>
    </div>

    <post-content :content="post.post_content"/>
  </div>
</template>

<script>
import PostContent from "./PostContent";

export default {
  name: "post-single",
  props: ["post"],
  methods: {
    renderHeaderImage() {
      const imageSrc = this.post.thumbnail
        ? this.$getThumbnail(this.post.thumbnail, "large")
        : require("assets/post_header_bg.png");
      return `backgroundImage: url('${imageSrc}');`;
    }
  },
  components: {
    PostContent
  }
};
</script>

<style scoped>
.post-header {
  height: 300px;
  width: 100%;
  background-size: cover;
  background-color: var(--primary-color);
  display: flex;
  align-items: center;
  justify-content: center;
}

.post-title {
  margin: 0;
  font-size: 4rem;
}

.post-content {
  padding: 2rem;
  max-width: 800px;
  margin: 0 auto;
  background-color: white;
}
</style>


================================================
FILE: src/themes/basic/components/post/containers/PostContainer.vue
================================================
<template>
  <post-single :post="post"/>
</template>

<script>
import PostQuery from "core/graphql/post.gql";
import PostSingle from "../PostSingle";

export default {
  name: "posts-container",
  data() {
    return {
      post: {}
    };
  },
  apollo: {
    post: {
      query: PostQuery,
      prefetch({ route }) {
        return {
          name: route.params.postname
        };
      },
      variables() {
        return {
          name: this.$route.params.postname
        };
      }
    }
  },
  components: {
    PostSingle
  }
};
</script>


================================================
FILE: src/themes/basic/components/post/containers/PostsContainer.vue
================================================
<template>
  <div>
    <slot :posts="posts" :isLoading="isLoading">
    </slot>
  </div>
</template>

<script>
import PostsQuery from "core/graphql/posts.gql";

export default {
  name: "posts-container",
  props: ["postType", "limit", "skip", "order"],
  data() {
    return {
      isLoading: 0
    };
  },
  apollo: {
    posts: {
      query: PostsQuery,
      loadingKey: "isLoading",
      prefetch: () => {
        return {
          post_type: this.a.props.postType
        };
      },
      variables() {
        return {
          post_type: this.postType
        };
      }
    }
  }
};
</script>


================================================
FILE: src/themes/basic/routes/index.js
================================================
import Page from "../components/page/page";
import Post from "../components/post/containers/PostContainer";
import Category from "../components/category/containers/CategoryContainer";

const routes = [
  {
    path: "/",
    name: "Home",
    component: Page
  },
  {
    path: "/:name",
    name: "Page",
    component: Page
  },
  {
    path: "/post/:postname",
    name: "Post",
    component: Post
  },
  {
    path: "/category/:id",
    name: "Category",
    component: Category
  }
];

export default routes;


================================================
FILE: src/themes/basic/styles/colors.scss
================================================
$primary-color: #B60FE0;
$secondary-color: #acf3a7;
$accent-color: #F53C76;
$secondary-accent-color: #FF594F;
$dark-color: #380436;
$light-grey-color: #f3f3f3;

$colors: $primary-color, $secondary-color, $accent-color, $secondary-accent-color

================================================
FILE: src/themes/basic/styles/reset.css
================================================
/** * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) * http://cssreset.com */html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary,time, mark, audio, video {	margin: 0;	padding: 0;	border: 0;	font-size: 100%;	font: inherit;	vertical-align: baseline;}/* HTML5 display-role reset for older browsers */article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {	display: block;}body {	line-height: 1;}ol, ul {	list-style: none;}blockquote, q {	quotes: none;}blockquote:before, blockquote:after,q:before, q:after {	content: '';	content: none;}table {	border-collapse: collapse;	border-spacing: 0;}


================================================
FILE: src/themes/basic/styles/typography.css
================================================
html {font-size: 1.125em;}

body {
  font-family: var(--copy-font);
  font-weight: 400;
  line-height: 1.45;
}

h1, h2, h3, h4, h5 {
  margin: 1.414em 0 0.5em;
  line-height: 1.2;
  font-weight: 700;
  font-family: var(--heading-font);
  color: var(--dark-color);
}

h1 {
  margin-top: 0;
  font-size: 3.998em;
}

h2 {font-size: 2.827em;}

h3 {font-size: 1.999em;}

h4 {font-size: 1.414em;}

small, .font_small {font-size: 0.707em;}

hr {
  border: 1px solid;
  margin: -1px 0;
}

p {
  margin-bottom: 1.3em;
  font-family: var(--copy-font);
}

b, strong, em, small, code {
  line-height: 1;
}

sup {
  line-height: 0;
  position: relative;
  vertical-align: baseline;
  top: -0.5em;
}

pre{
  font-family: var(--mono-font);
  font-size: 1rem;
  padding: 1rem;
  border: 1px solid darken(white, 5%);
  background-color: darken(white, 10%);
  font-size: .8rem;
  overflow: auto;
  margin-bottom: 1.5rem;
}

pre p{
  font-family: var(--mono-font);
  margin: 0;
}

sub {
  bottom: -0.25em;
}

em{
  font-style: italic;
}

strong{
  font-weight: 700;
}

figcaption{
  font-size: .9rem;
  font-style: italic;
}

.sans{
  font-family: var(--heading-font);
}

.serif{
  font-family: var(--copy-font);
}

.black{
  font-weight: 900;
}

.bold{
  font-weight: 700;
}

.thin{
  font-weight: 100;
}

.uppercase{
  text-transform: uppercase;
}

.center{
  text-align: center;
}


================================================
FILE: src/themes/multi-user/App.vue
================================================
<template>
  <div id="app">
    <icons/>
    <app-header/>
    <div class="main">
      <transition
        appear
        v-on:before-enter="beforeEnter"
        v-on:enter="enter"
        v-bind:css="false"
      >
        <router-view/>
      </transition>
    </div>
  </div>
</template>

<script>
import Icons from "./components/icons/icons";
import AppHeader from "./components/header/header";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "app",
  components: {
    Icons,
    AppHeader
  },
  methods: {
    beforeEnter: function(el) {
      TweenMax.set(el, {
        alpha: 0
      });
    },
    enter: function(el, done) {
      TweenMax.to(el, 1, {
        y: 0,
        alpha: 1,
        ease: Power4.easeOut
      });
      done();
    }
  }
};
</script>

<style lang="scss">
@import url("https://fonts.googleapis.com/css?family=Oswald:300|Source+Sans+Pro:300,400|Source+Code+Pro:400,700");
@import "./styles/reset.css";
@import "./styles/typography.css";

* {
  box-sizing: border-box;
}

body {
  font-family: var(--copy-font);
  background-color: var(--dark-color);
  padding: 0;
  margin: 0;
}

:root {
  --primary-color: #b60fe0;
  --secondary-color: #acf3a7;
  --dark-color: #380436;
  --light-grey-color: #f3f3f3;

  --heading-font: "Oswald", sans-serif;
  --copy-font: "Source Sans Pro", sans-serif;
  --mono-font: "Source Code Pro", monospace;
}
</style>


================================================
FILE: src/themes/multi-user/components/author/AuthorSingle.vue
================================================
<template>
  <author-container class="author-page">
    <div class="author-content" slot-scope="data" v-if="data.author">
      <page-header>
        <span slot="title">{{data.author.display_name}}</span>
      </page-header>

      <div class="body">
        <div class="wrapper">
          
          <div class="avatar">
            <img :src="$getAvatarLink(data.author.user_email, 150)" :alt="`${data.author.display_name} Avatar`"/>
          </div>

          <transition
            appear
            @enter="enter"
            :css="false"
          >
            <div class="posts" v-if="!data.isLoading">
              <post-list-item v-for="post in data.author.posts" :key="post.id" :post="post" ref="posts"/>
            </div>
          </transition>
        </div>
      </div>
    </div>
  </author-container>
</template>

<script>
import AuthorContainer from "./containers/AuthorContainer";
import PageHeader from "@/components/page/PageHeader";
import PostListItem from "@/components/post/PostListItem";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "author-single",
  components: {
    AuthorContainer,
    PageHeader,
    PostListItem
  },
  methods: {
    enter: function(el, done) {
      TweenMax.staggerFromTo(
        el.children,
        2,
        {
          y: 20,
          alpha: 0
        },
        {
          y: 0,
          alpha: 1,
          ease: Power4.easeOut,
          onComplete: done
        },
        0.1
      );
    }
  }
};
</script>
<style scoped lang="scss">
@import "../../styles/colors.scss";
.author-header {
  display: flex;
  justify-content: center;
  padding: 4rem 0;
}

.wrapper {
  position: relative;
  max-width: 800px;
  margin: 0 auto;
}

.avatar {
  position: absolute;
  top: -75px;
  right: 0;
  z-index: 2;
  img {
    border-radius: 50%;
    border: 5px solid $dark-color;
    box-sizing: content-box;
  }
}

.posts {
  position: relative;
  display: grid;
  grid-row-gap: 1rem;
  padding-top: 2rem;
  z-index: 1;
}
</style>


================================================
FILE: src/themes/multi-user/components/author/containers/AuthorContainer.vue
================================================
<template>
  <div>
    <slot :author="user" :isLoading="isLoading"></slot>
  </div>
</template>

<script>
import UserQuery from "core/graphql/user.gql";
import { willPrefetch } from "vue-apollo";

export default willPrefetch({
  name: "author-container",
  data() {
    return {
      isLoading: 0
    };
  },
  apollo: {
    user: {
      query: UserQuery,
      loadingKey: "isLoading",
      prefetch({ route }) {
        return {
          name: route.params.name
        };
      },
      variables() {
        return {
          name: this.$route.params.name
        };
      }
    }
  }
});
</script>


================================================
FILE: src/themes/multi-user/components/category/CategoryList.vue
================================================
<template>
  <div class="wrapper">
    <page-header :page="{post_title: category.name}" />
    <div class="page-content">
      <transition
        appear
        @enter="enter"
        :css="false"
        v-if="category"
      >
        <div class="posts">
          <post-list-item v-for="post in category.posts" :key="post.id" :post="post"/>
        </div>
      </transition>
    </div>
  </div>
</template>

<script>
import PageHeader from "../page/PageHeader";
import CategoryContainer from "./containers/CategoryContainer";
import PostListItem from "../post/PostListItem";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "category-list",
  props: ["category"],
  methods: {
    enter: function(el, done) {
      TweenMax.staggerFromTo(
        el.children,
        1,
        {
          y: 10,
          alpha: 0
        },
        {
          y: 0,
          alpha: 1,
          ease: Power4.easeOut,
          onComplete: done
        },
        0.05
      );
    }
  },
  components: {
    PageHeader,
    CategoryContainer,
    PostListItem
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 1fr 5%;
}

.posts {
  display: grid;
  grid-row-gap: 1rem;
}

.page-content {
  grid-column: 2;
  max-width: 800px;
  width: 100%;
  justify-self: center;
  padding: 2rem 0;
}
</style>


================================================
FILE: src/themes/multi-user/components/category/containers/CategoryContainer.vue
================================================
<template>
  <category-list v-if="category" :category="category"/>
</template>

<script>
import CategoryQuery from "core/graphql/category.gql";
import CategoryList from "../CategoryList";

export default {
  name: "category-container",
  data() {
    return {
      post: {}
    };
  },
  watch: {
    "$route.params.id": function(id) {
      this.$apollo.queries.category.refetch({ term_id: id });
    }
  },
  apollo: {
    category() {
      return {
        query: CategoryQuery,
        variables: {
          term_id: this.$route.params.id
        }
      };
    }
  },
  components: {
    CategoryList
  }
};
</script>


================================================
FILE: src/themes/multi-user/components/header/header.vue
================================================
<template>
  <header class="header">
    <div class="wrapper">
      <menu-container :menuName="'primary-navigation'">
        <app-menu slot-scope="menu" :menuItems="menu.items"/>
      </menu-container>
    </div>
  </header>
</template>

<script>
import MenuContainer from "../menu/menuContainer";
import AppMenu from "../menu/menu";
export default {
  name: "app-header",
  components: {
    MenuContainer,
    AppMenu
  }
};
</script>

<style scoped lang="scss">
@import "../../styles/colors.scss";

.header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 10;
  height: 40px;
  display: flex;
  justify-content: center;
}

.wrapper {
  background: darken($dark-color, 3%);
  height: 100%;
  padding: 0rem 1rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-width: 0 1px 1px 1px;
  border-style: solid;
  border-color: $secondary-color;
}
</style>


================================================
FILE: src/themes/multi-user/components/icons/icons.vue
================================================
<template>
  <svg style="display:none;">
    <symbol id="plus-icon" viewBox="0 0 24 24">
      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
      <path d="M0 0h24v24H0z" fill="none"/>
    </symbol>
  </svg>  
</template>

<script>
export default {
  name: "icons"
};
</script>

<style>
</style>


================================================
FILE: src/themes/multi-user/components/menu/menu.vue
================================================
<template>
  <ul class="menu">
    <li class="item">
      <router-link :to="{name: 'Home'}">Home</router-link>
    </li>
    <li class="item" v-for="item in menuItems" :key="item.id">
      <menu-link :link="item.navitem"/>
    </li>
  </ul>
</template>

<script>
import MenuLink from "./menuLink";
export default {
  name: "app-menu",
  props: ["menuItems"],
  components: {
    MenuLink
  }
};
</script>

<style scoped lang="scss">
@import "../../styles/colors";

.menu {
  padding: 0;
  display: flex;
}

.item {
  padding: 0rem 1rem;

  a {
    text-decoration: none;
    color: $secondary-color;
    font-size: 0.9rem;
  }
}
</style>


================================================
FILE: src/themes/multi-user/components/menu/menuContainer.vue
================================================
<template>
  <div>
    <slot :items="menus.items">
    </slot>
  </div>
</template>

<script>
import MenuQuery from "core/graphql/menu.gql";
export default {
  name: "menu-container",
  props: ["menuName"],
  data() {
    return {
      menus: {}
    };
  },
  apollo: {
    menus() {
      return {
        query: MenuQuery,
        variables: {
          menu: this.menuName
        }
      };
    }
  }
};
</script>


================================================
FILE: src/themes/multi-user/components/menu/menuLink.vue
================================================
<template>
  <a v-if="type === 'custom'" class="link" :href="url">{{link.post_title}}</a>
  <router-link v-else class="link" :to="`/${link.post_name}`">{{link.post_title}}</router-link>
</template>

<script>
export default {
  name: "menu-link",
  props: ["link"],
  data() {
    return {
      type: "",
      url: "",
      to: ""
    };
  },
  mounted() {
    this.parseLink();
  },
  methods: {
    parseLink() {
      this.link.post_meta.forEach(meta => {
        switch (meta.meta_key) {
          case "_menu_item_type":
            this.type = meta.meta_value;
            break;
          case "_menu_item_url":
            this.url = meta.meta_value;
            break;
        }
      });
    }
  }
};
</script>


================================================
FILE: src/themes/multi-user/components/page/PageHeader.vue
================================================
<template>
  <div class="header" v-bind:style="`backgroundImage: url(${this.image});`">
    <div class="header-content">
      <h2 class="title">
        <slot name="title"></slot>
      </h2>
    </div>
  </div>
</template>

<script>
export default {
  name: "page-header",
  props: ["image"]
};
</script>

<style scoped lang="scss">
@import "../../styles/colors.scss";

.header {
  grid-column: 1 / 4;
  grid-row: 1;
  padding: 2rem;
  background-color: $secondary-color;
}

.header-content {
  max-width: 800px;
  margin: 0 auto;
  padding: 2rem 0;
}

.title {
  margin: 0;
  font-weight: 100;
  letter-spacing: 0.015em;
}
</style>


================================================
FILE: src/themes/multi-user/components/page/layouts/DefaultPage.vue
================================================
<template>
  <div class="wrapper">
    <div class="body">
      <post-content :content="page.post_content"/> 
    </div>
  </div>
</template>

<script>
import PostContent from "../../post/PostContent";
export default {
  name: "default-page",
  props: ["page"],
  components: {
    PostContent
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 90% 5%;
}

.body {
  grid-column: 2;
  position: relative;
  width: 100%;
  max-width: 800px;
  justify-self: center;
  margin: 4rem auto 0rem auto;
  z-index: 2;
}

.post-content {
  padding: 2rem;
  margin-top: 2rem;
  background-color: white;
}
</style>


================================================
FILE: src/themes/multi-user/components/page/layouts/PageWithHeader.vue
================================================
<template>
  <div class="wrapper">
    <page-header>
      <span slot="title">{{page.post_title}}</span>
    </page-header>
    <div class="body">
      <post-content :content="page.post_content"/> 
    </div>
  </div>
</template>

<script>
import PostContent from "../../post/PostContent";
import PageHeader from "../PageHeader";
export default {
  name: "front-page",
  props: ["page"],
  methods: {
    renderHeader() {
      const header = this.page.post_meta.filter(meta => {
        return meta.meta_key === "page_header";
      });

      if (header.length > 0) {
        return header[0].meta_value;
      }
    },
    renderHeaderImage() {
      const imageSrc = this.page.thumbnail
        ? this.page.thumbnail
        : require("assets/post_header_bg.png");
      return `backgroundImage: url('${imageSrc}');`;
    }
  },
  components: {
    PostContent,
    PageHeader
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 90% 5%;
}

.header {
  grid-column: 1 / 4;
  grid-row: 1;
  padding: 2rem;
}

.header-content {
  max-width: 800px;
  margin: 0 auto;
  padding: 2rem 0;
}

.title {
  margin: 0;
  font-weight: 100;
  letter-spacing: 0.015em;
}

.body {
  grid-column: 2;
  position: relative;
  width: 100%;
  max-width: 800px;
  justify-self: center;
  margin: -4rem auto 0rem auto;
  z-index: 2;
}

.post-content {
  padding: 2rem;
  margin-top: 2rem;
  background-color: white;
}
</style>


================================================
FILE: src/themes/multi-user/components/page/layouts/PageWithSidebar.vue
================================================
<template>
  <div class="wrapper">
    <menu-container class="sidebar" :menuName="getSidebarMenuName()">
      <ul class="menu" slot-scope="menu">
        <li class="item" v-for="item in menu.items" :key="item.id">
          <menu-link :link="item.navitem"/>
        </li>
      </ul>
    </menu-container>
    <div class="body">
      <post-content :content="page.post_content"/> 
    </div>
  </div>
</template>

<script>
import MenuContainer from "../../menu/menuContainer";
import MenuLink from "../../menu/menuLink";
import PostContent from "../../post/PostContent";
export default {
  name: "page-with-sidebar",
  props: ["page"],
  components: {
    MenuContainer,
    MenuLink,
    PostContent
  },
  methods: {
    getSidebarMenuName() {
      return this.page.post_meta.filter(item => {
        return item.meta_key === "sidebarmenu";
      })[0].meta_value;
    }
  }
};
</script>

<style scoped lang="scss">
@import "../../../styles/colors.scss";

.wrapper {
  display: grid;
  grid-template-columns: 5% 1fr 4fr 5%;
  margin-top: 4rem;
}

.sidebar {
  padding: 1rem;
  grid-column: 2;
  display: flex;
  flex-flow: column;
  background-color: $secondary-color;
}

.body {
  grid-column: 3;
}

.post-content {
  padding: 2rem;
  background-color: white;
}

.item {
  a {
    font-size: 1.2rem;
    color: $dark-color;
    text-decoration: none;

    &:hover {
      color: $primary-color;
    }
  }

  &:not(:last-of-type) {
    margin-bottom: 1rem;
  }
}
</style>


================================================
FILE: src/themes/multi-user/components/page/layouts/layouts.js
================================================
import DefaultPage from "./DefaultPage";
import PageWithHeader from "./PageWithHeader";
import PageWithSidebar from "./PageWithSidebar";
import PostList from "../../post/PostList";

export default {
  DefaultPage,
  PageWithHeader,
  PageWithSidebar,
  PostList
};


================================================
FILE: src/themes/multi-user/components/page/page.vue
================================================
<template>
  <div class="page">
     <transition
      appear
      v-on:before-enter="beforeEnter"
      v-on:enter="enter"
      v-on:leave="leave"
      v-bind:css="false"
    >
      <component v-if="post && !isLoading" :is="getLayout()" :page="post"/>
    </transition>
  </div>
</template>

<script>
import PageQuery from "core/graphql/page.gql";
import Layouts from "./layouts/layouts";
import { TweenMax, Power4 } from "gsap";
import { willPrefetch } from "vue-apollo";

export default willPrefetch({
  name: "page",
  props: ["name"],
  data() {
    return {
      post: {},
      isLoading: 0
    };
  },
  apollo: {
    post: {
      query: PageQuery,
      loadingKey: "isLoading",
      prefetch: ({ route }) => {
        return {
          name: route.params.name || "homepage"
        };
      },
      variables() {
        return {
          name: this.$route.params.name || "homepage"
        };
      }
    }
  },
  methods: {
    getLayout: function() {
      const layout = this.post.layout
        ? this.post.layout.meta_value
        : "DefaultPage";
      return Layouts[layout];
    },
    beforeEnter: function(el) {
      TweenMax.set(el, {
        alpha: 0
      });
    },
    enter: function(el, done) {
      TweenMax.to(el, 1, {
        y: 0,
        alpha: 1,
        ease: Power4.easeOut
      });
      done();
    },
    leave: function(el, done) {
      TweenMax.to(el, 1, {
        y: 0,
        alpha: 0,
        ease: Power4.easeOut
      });
      done();
    }
  }
});
</script>

<style scoped>
.page {
  min-height: 100vh;
  width: 100vw;
  background-color: var(--dark-color);
}
</style>


================================================
FILE: src/themes/multi-user/components/post/PostContent.vue
================================================
<template>
  <div class="post-content" v-html="$parseContent(content)"/> 
</template>

<script>
import { map } from "lodash";
import hljs from "highlightjs";

export default {
  name: "post-content",
  props: ["content"],
  mounted() {
    const anchors = this.$el.getElementsByTagName("a");
    const r = new RegExp("^(?:[a-z]+:)?//", "i");
    const m = new RegExp("mailto", "g");

    // add transitions to all internal links
    map(anchors, anchor => {
      const target = anchor.getAttribute("href");
      if (!r.test(target) && !m.test(target)) {
        anchor.addEventListener("click", e => {
          e.preventDefault();
          this.$router.push(target);
        });
      }
    });

    let targets = this.$el.querySelectorAll("pre code");
    targets.forEach(target => {
      hljs.highlightBlock(target);
    });

    let embeds = this.$el.querySelectorAll(".js-embed");
    embeds.forEach(embed => {
      this.$renderEmbed(embed);
    });
  }
};
</script>

<style lang="scss">
.post-content {
  font-size: 1.15rem;

  .cta {
    display: inline-block;
    margin: 1rem 0;
    padding: 0.75rem 1.5rem;
    background-color: var(--primary-color);
    color: white;
    border-radius: 3px;
    text-decoration: none;
    font-size: 1.25rem;
    font-family: var(--heading-font);

    &:hover {
      background-color: var(--secondary-color);
    }
  }

  ul {
    list-style-type: square;
    margin-left: 1rem;

    li {
      margin-bottom: 1rem;
    }
  }

  a {
    color: var(--primary-color);
    font-weight: 600;
  }

  blockquote {
    margin-left: 1rem;
    padding: 2rem;
    background-color: var(--light-grey-color);
    font-size: 1.2rem;
    border-left: 0.5rem solid var(--primary-color);
  }

  figure {
    max-width: 100%;
    padding: 2rem 0;
  }

  img {
    max-width: 100%;
    height: auto;

    &.alignright {
      float: right;
      margin-left: 1rem;
    }

    &.alignleft {
      float: left;
      margin-right: 1rem;
    }

    &.aligncenter {
      display: block;
      margin: 1rem auto;
    }
  }

  figcaption {
    background-color: var(--light-grey-color);
    padding: 0.25rem;
    margin-top: -7px;
    text-align: center;
  }

  code {
    font-size: 0.8rem;
    background-color: var(--light-grey-color);
    padding: 0.1rem;
    font-family: var(--mono-font);
  }

  pre {
    padding: 0.25rem;
    background-color: var(--light-grey-color);

    code {
      font-size: 0.9rem;
    }

    .hljs {
      top: 0;
    }
  }

  .hljs {
    display: inline-block;
    position: relative;
  }
}
</style>


================================================
FILE: src/themes/multi-user/components/post/PostList.vue
================================================
<template>
  <div class="wrapper">
    <page-header>
      <span slot="title">Posts</span>
    </page-header>
    <div class="page-content">
      <posts-container :postType="'post'">
        <transition
          appear
          slot-scope="data"
          @enter="enter"
          :css="false"
        >
          <div class="posts" v-if="!data.isLoading">
            <post-list-item v-for="post in data.posts" :key="post.id" :post="post"/>
          </div>
        </transition>
      </posts-container>
    </div>
  </div>
</template>

<script>
import PageHeader from "../page/PageHeader";
import PostsContainer from "./containers/PostsContainer";
import PostListItem from "./PostListItem";
import { TweenMax, Power4 } from "gsap";
export default {
  name: "post-list",
  methods: {
    enter: function(el, done) {
      TweenMax.staggerFromTo(
        el.children,
        2,
        {
          y: 20,
          alpha: 0
        },
        {
          y: 0,
          alpha: 1,
          ease: Power4.easeOut,
          onComplete: done
        },
        0.1
      );
    }
  },
  components: {
    PageHeader,
    PostsContainer,
    PostListItem
  }
};
</script>

<style scoped>
.wrapper {
  display: grid;
  grid-template-columns: 5% 1fr 5%;
}

.posts {
  display: grid;
  grid-row-gap: 1rem;
}

.page-content {
  grid-column: 2;
  max-width: 800px;
  width: 100%;
  justify-self: center;
  padding: 2rem 0;
}
</style>


================================================
FILE: src/themes/multi-user/components/post/PostListItem.vue
================================================
<template>
  <div class="post-list-item">
    <div class="post-body">
      <router-link class="post-link" :to="{name: 'Post', params: {postname: post.post_name}}">
        <h3 class="post-title">{{post.post_title}}</h3>
      </router-link>
      <p>Written {{$formatDate(post.post_date)}} 
        <span v-if="post.author">
          by <router-link class="post-link" :to="{name: 'Author', params: {name: post.author.user_nicename}}">{{post.author.display_name}}</router-link>  
        </span>
      </p>
    </div>
    <ul class="post-categories" v-if="post.categories && post.categories.length > 0">
      <li class="post-category" v-for="cat in post.categories" :key="cat.name">
        <router-link :to="{name: 'Category', params: {id: cat.term_id}}">{{cat.name}}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "post-list-item",
  props: ["post"]
};
</script>

<style scoped>
.post-list-item {
  background-color: var(--light-grey-color);
  width: 100%;
  display: grid;
  box-shadow: 8px 8px 8px -8px var(--dark-color);
}

.post-body {
  padding: 0rem 2rem;
}

.post-link:hover .post-title,
.post-link:hover .post-date {
  color: var(--primary-color);
}

.post-title {
  /* margin: 0; */
}

.post-date {
  margin: 0;
}

.post-categories {
  border-top: 1px solid var(--dark-color);
  padding: 0.5rem 2rem;
  align-self: center;
  display: flex;
}

.post-category {
  margin-right: 1rem;
}

.post-category a {
  text-decoration: none;
  font-size: 0.8rem;
}
</style>


================================================
FILE: src/themes/multi-user/components/post/PostSingle.vue
================================================
<template>
  <div v-if="post.id">
    <div class="post-header" :style="renderHeaderImage()">
      <div class="wrapper">
        <h2 class="post-title">{{post.post_title}}</h2>

        <div class="post-meta">
          <p> Written {{$formatDate(post.post_date)}} 
            <span v-if="post.author">
              by <router-link class="post-link" :to="{name: 'Author', params: {name: post.author.user_nicename}}">{{post.author.display_name}}</router-link>  
            </span>
          </p>
        </div>
      </div>
    </div>

    <post-content :content="post.post_content"/>
  </div>
</template>

<script>
import PostContent from "./PostContent";

export default {
  name: "post-single",
  props: ["post"],
  methods: {
    renderHeaderImage() {
      const imageSrc = this.post.thumbnail
        ? this.$getThumbnail(this.post.thumbnail, "large")
        : require("assets/post_header_bg.png");
      return `backgroundImage: url('${imageSrc}');`;
    }
  },
  components: {
    PostContent
  }
};
</script>

<style scoped lang="scss">
@import "../../styles/colors.scss";
.post-header {
  height: 300px;
  width: 100%;
  background-size: cover;
  background-color: var(--primary-color);
}

.wrapper {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: center;
  position: relative;
  max-width: 800px;
  margin: 0 auto;
}

.post-title {
  margin: 0;
  font-size: 4rem;
}

.post-meta {
  position: absolute;
  bottom: 0;
  left: 0;
  background-color: white;
  padding: 0.5rem 1rem;

  p {
    margin: 0;
    // color: white;
  }

  a {
    color: $primary-color;
  }
}

.post-content {
  padding: 2rem;
  max-width: 800px;
  margin: 0 auto;
  background-color: white;
  border-top: 3px solid $dark-color;
}
</style>


================================================
FILE: src/themes/multi-user/components/post/containers/PostContainer.vue
================================================
<template>
  <post-single :post="post"/>
</template>

<script>
import PostQuery from "core/graphql/post.gql";
import PostSingle from "../PostSingle";

export default {
  name: "posts-container",
  data() {
    return {
      post: {}
    };
  },
  apollo: {
    post: {
      query: PostQuery,
      prefetch({ route }) {
        return {
          name: route.params.postname
        };
      },
      variables() {
        return {
          name: this.$route.params.postname
        };
      }
    }
  },
  components: {
    PostSingle
  }
};
</script>


================================================
FILE: src/themes/multi-user/components/post/containers/PostsContainer.vue
================================================
<template>
  <div>
    <slot :posts="posts" :isLoading="isLoading">
    </slot>
  </div>
</template>

<script>
import PostsQuery from "core/graphql/posts.gql";
import { willPrefetch } from "vue-apollo";

export default willPrefetch({
  name: "posts-container",
  props: ["postType", "limit", "skip", "order"],
  data() {
    return {
      isLoading: 0
    };
  },
  apollo: {
    posts: {
      query: PostsQuery,
      loadingKey: "isLoading",
      prefetch: () => {
        return {
          post_type: this.a.props.postType
        };
      },
      variables() {
        return {
          post_type: this.postType
        };
      }
    }
  }
});
</script>


================================================
FILE: src/themes/multi-user/routes/index.js
================================================
import Page from "../components/page/page";
import Post from "../components/post/containers/PostContainer";
import Category from "../components/category/containers/CategoryContainer";
import Author from "../components/author/AuthorSingle";

const routes = [
  {
    path: "/",
    name: "Home",
    component: Page
  },
  {
    path: "/:name",
    name: "Page",
    component: Page
  },
  {
    path: "/post/:postname",
    name: "Post",
    component: Post
  },
  {
    path: "/category/:id",
    name: "Category",
    component: Category
  },
  {
    path: "/author/:name",
    name: "Author",
    component: Author
  }
];

export default routes;


================================================
FILE: src/themes/multi-user/styles/colors.scss
================================================
$primary-color: #B60FE0;
$secondary-color: #acf3a7;
$accent-color: #F53C76;
$secondary-accent-color: #FF594F;
$dark-color: #380436;
$light-grey-color: #f3f3f3;

$colors: $primary-color, $secondary-color, $accent-color, $secondary-accent-color

================================================
FILE: src/themes/multi-user/styles/reset.css
================================================
/** * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) * http://cssreset.com */html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary,time, mark, audio, video {	margin: 0;	padding: 0;	border: 0;	font-size: 100%;	font: inherit;	vertical-align: baseline;}/* HTML5 display-role reset for older browsers */article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {	display: block;}body {	line-height: 1;}ol, ul {	list-style: none;}blockquote, q {	quotes: none;}blockquote:before, blockquote:after,q:before, q:after {	content: '';	content: none;}table {	border-collapse: collapse;	border-spacing: 0;}


================================================
FILE: src/themes/multi-user/styles/typography.css
================================================
html {font-size: 1.125em;}

body {
  font-family: var(--copy-font);
  font-weight: 400;
  line-height: 1.45;
}

h1, h2, h3, h4, h5 {
  margin: 1.414em 0 0.5em;
  line-height: 1.2;
  font-weight: 700;
  font-family: var(--heading-font);
  color: var(--dark-color);
}

h1 {
  margin-top: 0;
  font-size: 3.998em;
}

h2 {font-size: 2.827em;}

h3 {font-size: 1.999em;}

h4 {font-size: 1.414em;}

small, .font_small {font-size: 0.707em;}

hr {
  border: 1px solid;
  margin: -1px 0;
}

p {
  margin-bottom: 1.3em;
  font-family: var(--copy-font);
}

b, strong, em, small, code {
  line-height: 1;
}

sup {
  line-height: 0;
  position: relative;
  vertical-align: baseline;
  top: -0.5em;
}

pre{
  font-family: var(--mono-font);
  font-size: 1rem;
  padding: 1rem;
  border: 1px solid darken(white, 5%);
  background-color: darken(white, 10%);
  font-size: .8rem;
  overflow: auto;
  margin-bottom: 1.5rem;
}

pre p{
  font-family: var(--mono-font);
  margin: 0;
}

sub {
  bottom: -0.25em;
}

em{
  font-style: italic;
}

strong{
  font-weight: 700;
}

figcaption{
  font-size: .9rem;
  font-style: italic;
}

.sans{
  font-family: var(--heading-font);
}

.serif{
  font-family: var(--copy-font);
}

.black{
  font-weight: 900;
}

.bold{
  font-weight: 700;
}

.thin{
  font-weight: 100;
}

.uppercase{
  text-transform: uppercase;
}

.center{
  text-align: center;
}


================================================
FILE: tests/unit/.eslintrc.js
================================================
module.exports = {
  env: {
    jest: true
  },
  rules: {
    'import/no-extraneous-dependencies': 'off'
  }
}

================================================
FILE: tests/unit/HelloWorld.spec.js
================================================
import { shallowMount } from "@vue/test-utils";
import HelloWorld from "@/components/HelloWorld.vue";

describe("HelloWorld.vue", () => {
  it("renders props.msg when passed", () => {
    const msg = "new message";
    const wrapper = shallowMount(HelloWorld, {
      propsData: { msg }
    });
    expect(wrapper.text()).toMatch(msg);
  });
});


================================================
FILE: vue.config.js
================================================
const VueSSRServerPlugin = require("vue-server-renderer/server-plugin");
const VueSSRClientPlugin = require("vue-server-renderer/client-plugin");
const nodeExternals = require("webpack-node-externals");
const merge = require("lodash.merge");
const { theme } = require("./config/client.json");
const path = require("path");

console.log(`Current Theme: ${theme}`);

const TARGET_NODE = process.env.WEBPACK_TARGET === "node";

const createApiFile = TARGET_NODE
  ? "./create-api-server.js"
  : "./create-api-client.js";

const target = TARGET_NODE ? "server" : "client";

module.exports = {
  pluginOptions: {
    ssr: {
      entry: target => `./src/core/ssr/entry-${target}`
    }
  },
  configureWebpack: () => ({
    entry: `./src/core/ssr/entry-${target}`,
    target: TARGET_NODE ? "node" : "web",
    node: TARGET_NODE ? undefined : false,
    plugins: [
      TARGET_NODE ? new VueSSRServerPlugin() : new VueSSRClientPlugin()
    ],
    externals: TARGET_NODE
      ? nodeExternals({
          whitelist: /\.css$/
        })
      : undefined,
    output: {
      libraryTarget: TARGET_NODE ? "commonjs2" : undefined
    },
    optimization: {
      splitChunks: undefined
    },
    resolve: {
      alias: {
        "create-api": createApiFile,
        "@": path.resolve(__dirname, `./src/themes/${theme}`),
        assets: path.resolve(__dirname, "./src/assets"),
        core: path.resolve(__dirname, "./src/core"),
        config: path.resolve(__dirname, "./config/client.json")
      }
    }
  }),
  chainWebpack: config => {
    config.module
      .rule("vue")
      .use("vue-loader")
      .tap(options =>
        merge(options, {
          optimizeSSR: true
        })
      );
  }
};


================================================
FILE: yarn-error.log
================================================
Arguments: 
  /Users/rlanier/.nvm/versions/node/v10.1.0/bin/node /usr/local/Cellar/yarn/1.7.0/libexec/bin/yarn.js add @vue/cli-plugin-babel @vue/cli-plugin-eslint @vue/cli-plugin-unit-test

PATH: 
  /Users/rlanier/.pyenv/shims:/Users/rlanier/.nvm/versions/node/v10.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/Cellar/mysql/5.6.27/bin:/Users/rlanier/Library/Android/sdk/platform-tools:/Users/rlanier/.local/bin

Yarn version: 
  1.7.0

Node version: 
  10.1.0

Platform: 
  darwin x64

Trace: 
  Error: https://registry.yarnpkg.com/@vue%2fcli-plugin-unit-test: Not found
      at Request.params.callback [as _callback] (/usr/local/Cellar/yarn/1.7.0/libexec/lib/cli.js:65656:18)
      at Request.self.callback (/usr/local/Cellar/yarn/1.7.0/libexec/lib/cli.js:134675:22)
      at Request.emit (events.js:182:13)
      at Request.<anonymous> (/usr/local/Cellar/yarn/1.7.0/libexec/lib/cli.js:135658:10)
      at Request.emit (events.js:182:13)
      at IncomingMessage.<anonymous> (/usr/local/Cellar/yarn/1.7.0/libexec/lib/cli.js:135578:12)
      at Object.onceWrapper (events.js:273:13)
      at IncomingMessage.emit (events.js:187:15)
      at endReadableNT (_stream_readable.js:1086:12)
      at process._tickCallback (internal/process/next_tick.js:63:19)

npm manifest: 
  {
    "name": "wordexpress-starter-kit-vue",
    "version": "3.0.0-beta",
    "description": "WordPress with Vue",
    "repository": {
      "type": "git",
      "url": "git+https://github.com/ramsaylanier/VuePress"
    },
    "keywords": [
      "vue",
      "vuex",
      "vue-router",
      "webpack",
      "starter",
      "server-side",
      "boilerplate",
      "wordpress"
    ],
    "author": "ramsay lanier <ramsaylanier@gmail.com>",
    "license": "MIT",
    "bugs": {
      "url": "https://github.com/ramsaylanier/VuePress/issues"
    },
    "homepage": "https://github.com/ramsaylanier/VuePress#readme",
    "private": false,
    "scripts": {
      "serve": "npm run build && node scripts/serve",
      "build": "npm run build:server && mv dist/vue-ssr-server-bundle.json bundle && npm run build:client && mv bundle dist/vue-ssr-server-bundle.json",
      "lint": "vue-cli-service lint",
      "build:client": "vue-cli-service build",
      "build:server": "cross-env WEBPACK_TARGET=node vue-cli-service build",
      "start": "cross-env NODE_ENV=production node scripts/start",
      "test:unit": "vue-cli-service test:unit"
    },
    "dependencies": {
      "apollo-link-http": "^1.5.4",
      "config": "^1.30.0",
      "graphql": "^14.0.0-rc.1",
      "gsap": "^2.0.1",
      "highlightjs": "^9.10.0",
      "vue": "^2.5.16",
      "vue-apollo": "^3.0.0-beta.10",
      "vue-resource": "^1.5.1",
      "vue-router": "^3.0.1",
      "vue-server-renderer": "^2.5.16",
      "vuex": "^3.0.1",
      "vuex-router-sync": "^5.0.0",
      "wordexpress-tools": "^1.3.0"
    },
    "devDependencies": {
      "@vue/cli-plugin-babel": "^3.0.0-beta.15",
      "@vue/cli-plugin-eslint": "^3.0.0-beta.15",
      "@vue/cli-plugin-unit-jest": "^3.0.0-beta.15",
      "@vue/cli-service": "^3.0.0-rc.5",
      "@vue/eslint-config-prettier": "^3.0.0-beta.16",
      "@vue/test-utils": "^1.0.0-beta.16",
      "babel-core": "7.0.0-bridge.0",
      "babel-jest": "^23.0.1",
      "cross-env": "^5.1.6",
      "eslint-plugin-html": "^4.0.3",
      "graphql-tag": "^2.9.2",
      "lodash.merge": "^4.6.1",
      "node-sass": "^4.9.0",
      "sass-loader": "^7.0.1",
      "vue-cli-plugin-apollo": "^0.13.6",
      "vue-template-compiler": "^2.5.16",
      "webpack-node-externals": "^1.7.2"
    },
    "browserslist": [
      "> 1%",
      "last 2 versions",
      "not ie <= 8"
    ]
  }

yarn manifest: 
  No manifest

Lockfile: 
  # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
  # yarn lockfile v1
  
  
  "@babel/code-frame@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9"
    dependencies:
      "@babel/highlight" "7.0.0-beta.44"
  
  "@babel/code-frame@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.47.tgz#d18c2f4c4ba8d093a2bcfab5616593bfe2441a27"
    dependencies:
      "@babel/highlight" "7.0.0-beta.47"
  
  "@babel/code-frame@^7.0.0-beta.35":
    version "7.0.0-beta.49"
    resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.49.tgz#becd805482734440c9d137e46d77340e64d7f51b"
    dependencies:
      "@babel/highlight" "7.0.0-beta.49"
  
  "@babel/core@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.47.tgz#b9c164fb9a1e1083f067c236a9da1d7a7d759271"
    dependencies:
      "@babel/code-frame" "7.0.0-beta.47"
      "@babel/generator" "7.0.0-beta.47"
      "@babel/helpers" "7.0.0-beta.47"
      "@babel/template" "7.0.0-beta.47"
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
      babylon "7.0.0-beta.47"
      convert-source-map "^1.1.0"
      debug "^3.1.0"
      json5 "^0.5.0"
      lodash "^4.17.5"
      micromatch "^2.3.11"
      resolve "^1.3.2"
      semver "^5.4.1"
      source-map "^0.5.0"
  
  "@babel/generator@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42"
    dependencies:
      "@babel/types" "7.0.0-beta.44"
      jsesc "^2.5.1"
      lodash "^4.2.0"
      source-map "^0.5.0"
      trim-right "^1.0.1"
  
  "@babel/generator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.47.tgz#1835709f377cc4d2a4affee6d9258a10bbf3b9d1"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
      jsesc "^2.5.1"
      lodash "^4.17.5"
      source-map "^0.5.0"
      trim-right "^1.0.1"
  
  "@babel/helper-annotate-as-pure@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.47.tgz#354fb596055d9db369211bf075f0d5e93904d6f6"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.47.tgz#d5917c29ee3d68abc2c72f604bc043f6e056e907"
    dependencies:
      "@babel/helper-explode-assignable-expression" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-call-delegate@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.47.tgz#96b7804397075f722a4030d3876f51ec19d8829b"
    dependencies:
      "@babel/helper-hoist-variables" "7.0.0-beta.47"
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-define-map@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.47.tgz#43a9def87c5166dc29630d51b3da9cc4320c131c"
    dependencies:
      "@babel/helper-function-name" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
      lodash "^4.17.5"
  
  "@babel/helper-explode-assignable-expression@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.47.tgz#56b688e282a698f4d1cf135453a11ae8af870a19"
    dependencies:
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-function-name@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd"
    dependencies:
      "@babel/helper-get-function-arity" "7.0.0-beta.44"
      "@babel/template" "7.0.0-beta.44"
      "@babel/types" "7.0.0-beta.44"
  
  "@babel/helper-function-name@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.47.tgz#8057d63e951e85c57c02cdfe55ad7608d73ffb7d"
    dependencies:
      "@babel/helper-get-function-arity" "7.0.0-beta.47"
      "@babel/template" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-get-function-arity@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15"
    dependencies:
      "@babel/types" "7.0.0-beta.44"
  
  "@babel/helper-get-function-arity@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.47.tgz#2de04f97c14b094b55899d3fa83144a16d207510"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-hoist-variables@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.47.tgz#ce295d1d723fe22b2820eaec748ed701aa5ae3d0"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-member-expression-to-functions@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.47.tgz#35bfcf1d16dce481ef3dec66d5a1ae6a7d80bb45"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-module-imports@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.47.tgz#5af072029ffcfbece6ffbaf5d9984c75580f3f04"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
      lodash "^4.17.5"
  
  "@babel/helper-module-transforms@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.47.tgz#7eff91fc96873bd7b8d816698f1a69bbc01f3c38"
    dependencies:
      "@babel/helper-module-imports" "7.0.0-beta.47"
      "@babel/helper-simple-access" "7.0.0-beta.47"
      "@babel/helper-split-export-declaration" "7.0.0-beta.47"
      "@babel/template" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
      lodash "^4.17.5"
  
  "@babel/helper-optimise-call-expression@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.47.tgz#085d864d0613c5813c1b7c71b61bea36f195929e"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-plugin-utils@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.47.tgz#4f564117ec39f96cf60fafcde35c9ddce0e008fd"
  
  "@babel/helper-regex@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0-beta.47.tgz#b8e3b53132c4edbb04804242c02ffe4d60316971"
    dependencies:
      lodash "^4.17.5"
  
  "@babel/helper-remap-async-to-generator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.47.tgz#444dc362f61470bd61a745ebb364431d9ca186c2"
    dependencies:
      "@babel/helper-annotate-as-pure" "7.0.0-beta.47"
      "@babel/helper-wrap-function" "7.0.0-beta.47"
      "@babel/template" "7.0.0-beta.47"
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-replace-supers@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.47.tgz#310b206a302868a792b659455ceba27db686cbb7"
    dependencies:
      "@babel/helper-member-expression-to-functions" "7.0.0-beta.47"
      "@babel/helper-optimise-call-expression" "7.0.0-beta.47"
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-simple-access@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.47.tgz#234d754acbda9251a10db697ef50181eab125042"
    dependencies:
      "@babel/template" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
      lodash "^4.17.5"
  
  "@babel/helper-split-export-declaration@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc"
    dependencies:
      "@babel/types" "7.0.0-beta.44"
  
  "@babel/helper-split-export-declaration@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.47.tgz#e11277855472d8d83baf22f2d0186c4a2059b09a"
    dependencies:
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helper-wrap-function@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.47.tgz#6528b44a3ccb4f3aeeb79add0a88192f7eb81161"
    dependencies:
      "@babel/helper-function-name" "7.0.0-beta.47"
      "@babel/template" "7.0.0-beta.47"
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/helpers@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.47.tgz#f9b42ed2e4d5f75ec0fb2e792c173e451e8d40fd"
    dependencies:
      "@babel/template" "7.0.0-beta.47"
      "@babel/traverse" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
  
  "@babel/highlight@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5"
    dependencies:
      chalk "^2.0.0"
      esutils "^2.0.2"
      js-tokens "^3.0.0"
  
  "@babel/highlight@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.47.tgz#8fbc83fb2a21f0bd2b95cdbeb238cf9689cad494"
    dependencies:
      chalk "^2.0.0"
      esutils "^2.0.2"
      js-tokens "^3.0.0"
  
  "@babel/highlight@7.0.0-beta.49":
    version "7.0.0-beta.49"
    resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.49.tgz#96bdc6b43e13482012ba6691b1018492d39622cc"
    dependencies:
      chalk "^2.0.0"
      esutils "^2.0.2"
      js-tokens "^3.0.0"
  
  "@babel/plugin-proposal-async-generator-functions@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.47.tgz#571142284708c5ad4ec904d9aa705461a010be53"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-remap-async-to-generator" "7.0.0-beta.47"
      "@babel/plugin-syntax-async-generators" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-class-properties@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0-beta.47.tgz#08c1a1dfc92d0f5c37b39096c6fb883e1ca4b0f5"
    dependencies:
      "@babel/helper-function-name" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-replace-supers" "7.0.0-beta.47"
      "@babel/plugin-syntax-class-properties" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-decorators@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.0.0-beta.47.tgz#5e8943c8f8eb3301f911ef0dcd3ed64cf28c723e"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-syntax-decorators" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-export-namespace-from@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0-beta.47.tgz#38171dd0fd5f54aee377d338ed41bb92e25d6720"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-syntax-export-namespace-from" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-function-sent@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.0.0-beta.47.tgz#3ad46c04a277a887731f21843013292d254f7ba9"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-wrap-function" "7.0.0-beta.47"
      "@babel/plugin-syntax-function-sent" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-numeric-separator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.0.0-beta.47.tgz#3ace5cbacb62c3fa223c3c0b66c0c16e63a8e259"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-syntax-numeric-separator" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-object-rest-spread@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.47.tgz#e1529fddc88e948868ee1d0edaa27ebd9502322d"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.47.tgz#8c6453919537517ea773bb8f3fceda4250795efa"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-throw-expressions@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.0.0-beta.47.tgz#9a67f8b0852b4b0b255eff5d6d25fa436928424f"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-syntax-throw-expressions" "7.0.0-beta.47"
  
  "@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.47.tgz#34d7e4811bdc4f512400bb29d01051842528c8d5"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-regex" "7.0.0-beta.47"
      regexpu-core "^4.1.4"
  
  "@babel/plugin-syntax-async-generators@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.47.tgz#8ab94852bf348badc866af85bd852221f0961256"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-class-properties@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0-beta.47.tgz#de52bed12fd472c848e1562f57dd4a202fe27f11"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-decorators@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.0.0-beta.47.tgz#a42f10fcd651940bc475d93b3ac23432b4a8a293"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-dynamic-import@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.47.tgz#ee964915014a687701ee8e15c289e31a7c899e60"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-export-namespace-from@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0-beta.47.tgz#fd446c76c59849f15e6cde235b5b8e153413f21e"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-function-sent@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.0.0-beta.47.tgz#8d15536f55b21acdf9bfaa177c46591a589fe8b0"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-import-meta@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0-beta.47.tgz#8ab5174209a954b91e327004a7d16737bcc4774d"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-jsx@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.47.tgz#f3849d94288695d724bd205b4f6c3c99e4ec24a4"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-numeric-separator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.0.0-beta.47.tgz#9f06cb770a94f464b3b2889d2110080bc302fc80"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-object-rest-spread@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.47.tgz#21da514d94c138b2261ca09f0dec9abadce16185"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.47.tgz#0b1c52b066aa36893c41450773a5adb904cd4024"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-syntax-throw-expressions@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.0.0-beta.47.tgz#8ca197bab3534f443eecd7eb79da47e199dafaf7"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-arrow-functions@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.47.tgz#d6eecda4c652b909e3088f0983ebaf8ec292984b"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-async-to-generator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.47.tgz#5723816ea1e91fa313a84e6ee9cc12ff31d46610"
    dependencies:
      "@babel/helper-module-imports" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-remap-async-to-generator" "7.0.0-beta.47"
  
  "@babel/plugin-transform-block-scoped-functions@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.47.tgz#e422278e06c797b43c45f459d83c7af9d6237002"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-block-scoping@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.47.tgz#b737cc58a81bea57efd5bda0baef9a43a25859ad"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      lodash "^4.17.5"
  
  "@babel/plugin-transform-classes@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.47.tgz#7aff9cbe7b26fd94d7a9f97fa90135ef20c93fb6"
    dependencies:
      "@babel/helper-annotate-as-pure" "7.0.0-beta.47"
      "@babel/helper-define-map" "7.0.0-beta.47"
      "@babel/helper-function-name" "7.0.0-beta.47"
      "@babel/helper-optimise-call-expression" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-replace-supers" "7.0.0-beta.47"
      "@babel/helper-split-export-declaration" "7.0.0-beta.47"
      globals "^11.1.0"
  
  "@babel/plugin-transform-computed-properties@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.47.tgz#56ef2a021769a2b65e90a3e12fd10b791da9f3e0"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-destructuring@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.47.tgz#452b607775fd1c4d10621997837189efc0a6d428"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-dotall-regex@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.47.tgz#d8da9b706d4bfc68dec9d565661f83e6e8036636"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-regex" "7.0.0-beta.47"
      regexpu-core "^4.1.3"
  
  "@babel/plugin-transform-duplicate-keys@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.47.tgz#4aabeda051ca3007e33a207db08f1a0cf9bd253b"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-exponentiation-operator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.47.tgz#930e1abf5db9f4db5b63dbf97f3581ad0be1e907"
    dependencies:
      "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-for-of@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.47.tgz#527d5dc24e4a4ad0fc1d0a3990d29968cb984e76"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-function-name@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.47.tgz#fb443c81cc77f3206a863b730b35c8c553ce5041"
    dependencies:
      "@babel/helper-function-name" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-literals@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.47.tgz#448fad196f062163684a38f10f14e83315892e9c"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-modules-amd@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.47.tgz#84564419b11c1be6b9fcd4c7b3a6737f2335aac4"
    dependencies:
      "@babel/helper-module-transforms" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-modules-commonjs@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.47.tgz#dfe5c6d867aa9614e55f7616736073edb3aab887"
    dependencies:
      "@babel/helper-module-transforms" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-simple-access" "7.0.0-beta.47"
  
  "@babel/plugin-transform-modules-systemjs@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.47.tgz#8514dbcdfca3345abd690059e7e8544e16ecbf05"
    dependencies:
      "@babel/helper-hoist-variables" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-modules-umd@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.47.tgz#6dcfb9661fdd131b20b721044746a7a309882918"
    dependencies:
      "@babel/helper-module-transforms" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-new-target@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.47.tgz#4b5cb7ce30d7bffa105a1f43ed07d6ae206a4155"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-object-super@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.47.tgz#ca8e5f326c5011c879f3a6ed749e58bd10fff05d"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-replace-supers" "7.0.0-beta.47"
  
  "@babel/plugin-transform-parameters@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.47.tgz#46a4236040a6552a5f165fb3ddd60368954b0ddd"
    dependencies:
      "@babel/helper-call-delegate" "7.0.0-beta.47"
      "@babel/helper-get-function-arity" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-regenerator@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.47.tgz#86500e1c404055fb98fc82b73b09bd053cacb516"
    dependencies:
      regenerator-transform "^0.12.3"
  
  "@babel/plugin-transform-runtime@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0-beta.47.tgz#1700938fa8710909cbf28f7dd39f9b40688b09fd"
    dependencies:
      "@babel/helper-module-imports" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-shorthand-properties@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.47.tgz#00be44c4fad8fe2c00ed18ea15ea3c88dd519dbb"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-spread@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.47.tgz#3feadb02292ed1e9b75090d651b9df88a7ab5c50"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-sticky-regex@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.47.tgz#c0aa347d76b5dc87d3b37ac016ada3f950605131"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-regex" "7.0.0-beta.47"
  
  "@babel/plugin-transform-template-literals@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.47.tgz#5f7b5badf64c4c5da79026aeab03001e62a6ee5f"
    dependencies:
      "@babel/helper-annotate-as-pure" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-typeof-symbol@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.47.tgz#03c612ec09213eb386a81d5fa67c234ee4b2034c"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
  
  "@babel/plugin-transform-unicode-regex@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.47.tgz#efed0b2f1dfbf28283502234a95b4be88f7fdcb6"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/helper-regex" "7.0.0-beta.47"
      regexpu-core "^4.1.3"
  
  "@babel/preset-env@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.47.tgz#a3dab3b5fac4de56e3510bdbcb528f1cbdedbe2d"
    dependencies:
      "@babel/helper-module-imports" "7.0.0-beta.47"
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47"
      "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47"
      "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47"
      "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47"
      "@babel/plugin-syntax-async-generators" "7.0.0-beta.47"
      "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47"
      "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47"
      "@babel/plugin-transform-arrow-functions" "7.0.0-beta.47"
      "@babel/plugin-transform-async-to-generator" "7.0.0-beta.47"
      "@babel/plugin-transform-block-scoped-functions" "7.0.0-beta.47"
      "@babel/plugin-transform-block-scoping" "7.0.0-beta.47"
      "@babel/plugin-transform-classes" "7.0.0-beta.47"
      "@babel/plugin-transform-computed-properties" "7.0.0-beta.47"
      "@babel/plugin-transform-destructuring" "7.0.0-beta.47"
      "@babel/plugin-transform-dotall-regex" "7.0.0-beta.47"
      "@babel/plugin-transform-duplicate-keys" "7.0.0-beta.47"
      "@babel/plugin-transform-exponentiation-operator" "7.0.0-beta.47"
      "@babel/plugin-transform-for-of" "7.0.0-beta.47"
      "@babel/plugin-transform-function-name" "7.0.0-beta.47"
      "@babel/plugin-transform-literals" "7.0.0-beta.47"
      "@babel/plugin-transform-modules-amd" "7.0.0-beta.47"
      "@babel/plugin-transform-modules-commonjs" "7.0.0-beta.47"
      "@babel/plugin-transform-modules-systemjs" "7.0.0-beta.47"
      "@babel/plugin-transform-modules-umd" "7.0.0-beta.47"
      "@babel/plugin-transform-new-target" "7.0.0-beta.47"
      "@babel/plugin-transform-object-super" "7.0.0-beta.47"
      "@babel/plugin-transform-parameters" "7.0.0-beta.47"
      "@babel/plugin-transform-regenerator" "7.0.0-beta.47"
      "@babel/plugin-transform-shorthand-properties" "7.0.0-beta.47"
      "@babel/plugin-transform-spread" "7.0.0-beta.47"
      "@babel/plugin-transform-sticky-regex" "7.0.0-beta.47"
      "@babel/plugin-transform-template-literals" "7.0.0-beta.47"
      "@babel/plugin-transform-typeof-symbol" "7.0.0-beta.47"
      "@babel/plugin-transform-unicode-regex" "7.0.0-beta.47"
      browserslist "^3.0.0"
      invariant "^2.2.2"
      semver "^5.3.0"
  
  "@babel/preset-stage-2@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/preset-stage-2/-/preset-stage-2-7.0.0-beta.47.tgz#deb930c44d7d6e519a33174bba121a2a630ed654"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-proposal-decorators" "7.0.0-beta.47"
      "@babel/plugin-proposal-export-namespace-from" "7.0.0-beta.47"
      "@babel/plugin-proposal-function-sent" "7.0.0-beta.47"
      "@babel/plugin-proposal-numeric-separator" "7.0.0-beta.47"
      "@babel/plugin-proposal-throw-expressions" "7.0.0-beta.47"
      "@babel/preset-stage-3" "7.0.0-beta.47"
  
  "@babel/preset-stage-3@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/preset-stage-3/-/preset-stage-3-7.0.0-beta.47.tgz#17028f3b5dddc548d80404c86ed62622f601597b"
    dependencies:
      "@babel/helper-plugin-utils" "7.0.0-beta.47"
      "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47"
      "@babel/plugin-proposal-class-properties" "7.0.0-beta.47"
      "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47"
      "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47"
      "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47"
      "@babel/plugin-syntax-dynamic-import" "7.0.0-beta.47"
      "@babel/plugin-syntax-import-meta" "7.0.0-beta.47"
  
  "@babel/runtime@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.47.tgz#273f5e71629e80f6cbcd7507503848615e59f7e0"
    dependencies:
      core-js "^2.5.3"
      regenerator-runtime "^0.11.1"
  
  "@babel/runtime@^7.0.0-beta.38", "@babel/runtime@^7.0.0-beta.40":
    version "7.0.0-beta.49"
    resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.49.tgz#03b3bf07eb982072c8e851dd2ddd5110282e61bf"
    dependencies:
      core-js "^2.5.6"
      regenerator-runtime "^0.11.1"
  
  "@babel/template@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f"
    dependencies:
      "@babel/code-frame" "7.0.0-beta.44"
      "@babel/types" "7.0.0-beta.44"
      babylon "7.0.0-beta.44"
      lodash "^4.2.0"
  
  "@babel/template@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.47.tgz#0473970a7c0bee7a1a18c1ca999d3ba5e5bad83d"
    dependencies:
      "@babel/code-frame" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
      babylon "7.0.0-beta.47"
      lodash "^4.17.5"
  
  "@babel/traverse@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966"
    dependencies:
      "@babel/code-frame" "7.0.0-beta.44"
      "@babel/generator" "7.0.0-beta.44"
      "@babel/helper-function-name" "7.0.0-beta.44"
      "@babel/helper-split-export-declaration" "7.0.0-beta.44"
      "@babel/types" "7.0.0-beta.44"
      babylon "7.0.0-beta.44"
      debug "^3.1.0"
      globals "^11.1.0"
      invariant "^2.2.0"
      lodash "^4.2.0"
  
  "@babel/traverse@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.47.tgz#0e57fdbb9ff3a909188b6ebf1e529c641e6c82a4"
    dependencies:
      "@babel/code-frame" "7.0.0-beta.47"
      "@babel/generator" "7.0.0-beta.47"
      "@babel/helper-function-name" "7.0.0-beta.47"
      "@babel/helper-split-export-declaration" "7.0.0-beta.47"
      "@babel/types" "7.0.0-beta.47"
      babylon "7.0.0-beta.47"
      debug "^3.1.0"
      globals "^11.1.0"
      invariant "^2.2.0"
      lodash "^4.17.5"
  
  "@babel/types@7.0.0-beta.44":
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757"
    dependencies:
      esutils "^2.0.2"
      lodash "^4.2.0"
      to-fast-properties "^2.0.0"
  
  "@babel/types@7.0.0-beta.47":
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.47.tgz#e6fcc1a691459002c2671d558a586706dddaeef8"
    dependencies:
      esutils "^2.0.2"
      lodash "^4.17.5"
      to-fast-properties "^2.0.0"
  
  "@intervolga/optimize-cssnano-plugin@^1.0.5":
    version "1.0.6"
    resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8"
    dependencies:
      cssnano "^4.0.0"
      cssnano-preset-default "^4.0.0"
      postcss "^7.0.0"
  
  "@mrmlnc/readdir-enhanced@^2.2.1":
    version "2.2.1"
    resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
    dependencies:
      call-me-maybe "^1.0.1"
      glob-to-regexp "^0.3.0"
  
  "@nodelib/fs.stat@^1.0.1":
    version "1.1.0"
    resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a"
  
  "@sindresorhus/is@^0.7.0":
    version "0.7.0"
    resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
  
  "@types/accepts@*":
    version "1.3.5"
    resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
    dependencies:
      "@types/node" "*"
  
  "@types/async@2.0.49":
    version "2.0.49"
    resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.49.tgz#92e33d13f74c895cb9a7f38ba97db8431ed14bc0"
  
  "@types/body-parser@*":
    version "1.17.0"
    resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
    dependencies:
      "@types/connect" "*"
      "@types/node" "*"
  
  "@types/bunyan@*":
    version "1.8.4"
    resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.4.tgz#69c11adc7b50538d45fb68d9ae39d062b9432f38"
    dependencies:
      "@types/events" "*"
      "@types/node" "*"
  
  "@types/connect@*", "@types/connect@^3.4.31":
    version "3.4.32"
    resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
    dependencies:
      "@types/node" "*"
  
  "@types/cookies@*":
    version "0.7.1"
    resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.1.tgz#f9f204bd6767d389eea3b87609e30c090c77a540"
    dependencies:
      "@types/connect" "*"
      "@types/express" "*"
      "@types/keygrip" "*"
      "@types/node" "*"
  
  "@types/events@*":
    version "1.2.0"
    resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86"
  
  "@types/express-serve-static-core@*":
    version "4.16.0"
    resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz#fdfe777594ddc1fe8eb8eccce52e261b496e43e7"
    dependencies:
      "@types/events" "*"
      "@types/node" "*"
      "@types/range-parser" "*"
  
  "@types/express@*", "@types/express@^4.0.36":
    version "4.16.0"
    resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz#6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19"
    dependencies:
      "@types/body-parser" "*"
      "@types/express-serve-static-core" "*"
      "@types/serve-static" "*"
  
  "@types/graphql@0.12.6":
    version "0.12.6"
    resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.12.6.tgz#3d619198585fcabe5f4e1adfb5cf5f3388c66c13"
  
  "@types/http-assert@*":
    version "1.3.0"
    resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.3.0.tgz#5e932606153da28e1d04f9043f4912cf61fd55dd"
  
  "@types/keygrip@*":
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878"
  
  "@types/koa-bodyparser@^4.2.0":
    version "4.2.0"
    resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.2.0.tgz#04febc567f3d3dd40e3d1a0e095cdf7b07c4d7ce"
    dependencies:
      "@types/koa" "*"
  
  "@types/koa-compose@*":
    version "3.2.2"
    resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.2.tgz#dc106e000bbf92a3ac900f756df47344887ee847"
  
  "@types/koa-router@^7.0.27":
    version "7.0.28"
    resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.0.28.tgz#67487c862a831099aed8864a8996bfa7e989edc0"
    dependencies:
      "@types/koa" "*"
  
  "@types/koa@*", "@types/koa@^2.0.39":
    version "2.0.46"
    resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.46.tgz#24bc3cd405d10fcde81f876cd8285b44d4ddc3e9"
    dependencies:
      "@types/accepts" "*"
      "@types/cookies" "*"
      "@types/events" "*"
      "@types/http-assert" "*"
      "@types/keygrip" "*"
      "@types/koa-compose" "*"
      "@types/node" "*"
  
  "@types/mime@*":
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b"
  
  "@types/node@*":
    version "10.3.2"
    resolved "https://registry.yarnpkg.com/@types/node/-/node-10.3.2.tgz#3840ec6c12556fdda6e0e6d036df853101d732a4"
  
  "@types/node@^9.4.6":
    version "9.6.21"
    resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.21.tgz#4563c26a53531c5aca943065fcdf2dd562f63cd4"
  
  "@types/range-parser@*":
    version "1.2.2"
    resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.2.tgz#fa8e1ad1d474688a757140c91de6dace6f4abc8d"
  
  "@types/restify@^5.0.7":
    version "5.0.9"
    resolved "https://registry.yarnpkg.com/@types/restify/-/restify-5.0.9.tgz#95bf30b0fd7b92329a695bbd60feae019f3e31fd"
    dependencies:
      "@types/bunyan" "*"
      "@types/node" "*"
      "@types/spdy" "*"
  
  "@types/serve-static@*":
    version "1.13.2"
    resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
    dependencies:
      "@types/express-serve-static-core" "*"
      "@types/mime" "*"
  
  "@types/spdy@*":
    version "3.4.4"
    resolved "https://registry.yarnpkg.com/@types/spdy/-/spdy-3.4.4.tgz#3282fd4ad8c4603aa49f7017dd520a08a345b2bc"
    dependencies:
      "@types/node" "*"
  
  "@types/strip-bom@^3.0.0":
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2"
  
  "@types/strip-json-comments@0.0.30":
    version "0.0.30"
    resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1"
  
  "@types/zen-observable@^0.5.3":
    version "0.5.3"
    resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5"
  
  "@vue/babel-preset-app@^3.0.0-beta.16":
    version "3.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.0.0-beta.16.tgz#e5b4eaedfdcb842b2d3a4da9e23c1f8f81e4db01"
    dependencies:
      "@babel/plugin-syntax-jsx" "7.0.0-beta.47"
      "@babel/plugin-transform-runtime" "7.0.0-beta.47"
      "@babel/preset-env" "7.0.0-beta.47"
      "@babel/preset-stage-2" "7.0.0-beta.47"
      "@babel/runtime" "7.0.0-beta.47"
      babel-helper-vue-jsx-merge-props "^2.0.3"
      babel-plugin-dynamic-import-node "^1.2.0"
      babel-plugin-transform-vue-jsx "^4.0.1"
  
  "@vue/cli-overlay@^3.0.0-rc.5":
    version "3.0.0-rc.5"
    resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.0.0-rc.5.tgz#0a61adb1b6af9a2fce75b97cc83c54ee5227f629"
  
  "@vue/cli-plugin-babel@^3.0.0-beta.15":
    version "3.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.0.0-beta.16.tgz#ccf9d11425947c446f3c6f31e7a3b1e8a789696f"
    dependencies:
      "@babel/core" "7.0.0-beta.47"
      "@vue/babel-preset-app" "^3.0.0-beta.16"
      babel-loader "^8.0.0-0"
  
  "@vue/cli-plugin-eslint@^3.0.0-beta.15":
    version "3.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.0.0-beta.16.tgz#9dfb37cc9506996b319860562551838bc55a635e"
    dependencies:
      "@vue/cli-shared-utils" "^3.0.0-beta.16"
      babel-eslint "^8.2.3"
      eslint "^4.19.1"
      eslint-loader "^2.0.0"
      eslint-plugin-vue "^4.5.0"
  
  "@vue/cli-plugin-unit-jest@^3.0.0-beta.15":
    version "3.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.0.0-beta.16.tgz#b33b0f1ecbc8266c81e344689b4c0e447e29b3b5"
    dependencies:
      "@vue/cli-shared-utils" "^3.0.0-beta.16"
      jest "^23.1.0"
      jest-serializer-vue "^1.0.0"
      jest-transform-stub "^1.0.0"
      vue-jest "^2.6.0"
  
  "@vue/cli-service@^3.0.0-rc.5":
    version "3.0.0-rc.5"
    resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.0.0-rc.5.tgz#ed931795d7efebcd4afe794fc845874ddfacce63"
    dependencies:
      "@intervolga/optimize-cssnano-plugin" "^1.0.5"
      "@vue/cli-overlay" "^3.0.0-rc.5"
      "@vue/cli-shared-utils" "^3.0.0-rc.5"
      "@vue/preload-webpack-plugin" "^1.0.0"
      "@vue/web-component-wrapper" "^1.2.0"
      acorn "^5.7.1"
      address "^1.0.3"
      autoprefixer "^8.6.5"
      cache-loader "^1.2.2"
      case-sensitive-paths-webpack-plugin "^2.1.2"
      chalk "^2.4.1"
      clipboardy "^1.2.3"
      cliui "^4.1.0"
      copy-webpack-plugin "^4.5.2"
      css-loader "^1.0.0"
      debug "^3.1.0"
      escape-string-regexp "^1.0.5"
      file-loader "^1.1.11"
      friendly-errors-webpack-plugin "^1.7.0"
      fs-extra "^6.0.1"
      globby "^8.0.1"
      hash-sum "^1.0.2"
      html-webpack-plugin "^3.2.0"
      launch-editor-middleware "^2.2.1"
      lodash.defaultsdeep "^4.6.0"
      lodash.mapvalues "^4.6.0"
      lodash.transform "^4.6.0"
      mini-css-extract-plugin "^0.4.1"
      minimist "^1.2.0"
      ora "^2.1.0"
      portfinder "^1.0.13"
      postcss-loader "^2.1.6"
      read-pkg "^4.0.1"
      semver "^5.5.0"
      slash "^2.0.0"
      source-map-url "^0.4.0"
      string.prototype.padend "^3.0.0"
      thread-loader "^1.1.5"
      uglifyjs-webpack-plugin "^1.2.7"
      url-loader "^1.0.1"
      vue-loader "^15.2.4"
      vue-template-compiler "^2.5.16"
      webpack "^4.15.1"
      webpack-bundle-analyzer "^2.13.1"
      webpack-chain "^4.8.0"
      webpack-dev-server "^3.1.4"
      webpack-merge "^4.1.3"
      yorkie "^1.0.3"
  
  "@vue/cli-shared-utils@^3.0.0-beta.16":
    version "3.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.0.0-beta.16.tgz#b7908567a0e755f0bdfc0bf7ab897965b7fb89e7"
    dependencies:
      chalk "^2.3.0"
      execa "^0.10.0"
      joi "^12.0.0"
      node-ipc "^9.1.1"
      opn "^5.2.0"
      ora "^1.3.0"
      request "^2.83.0"
      request-promise-native "^1.0.5"
      string.prototype.padstart "^3.0.0"
  
  "@vue/cli-shared-utils@^3.0.0-rc.5":
    version "3.0.0-rc.5"
    resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.0.0-rc.5.tgz#665cc1af7454609313cd1de68ba1dddd82f3c4de"
    dependencies:
      chalk "^2.4.1"
      execa "^0.10.0"
      joi "^13.0.0"
      node-ipc "^9.1.1"
      opn "^5.3.0"
      ora "^2.1.0"
      request "^2.87.0"
      request-promise-native "^1.0.5"
      semver "^5.5.0"
      string.prototype.padstart "^3.0.0"
  
  "@vue/component-compiler-utils@^2.0.0":
    version "2.1.0"
    resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.1.0.tgz#8331eadc8acdbc35aace5a61d2153e6f6434bfe2"
    dependencies:
      consolidate "^0.15.1"
      hash-sum "^1.0.2"
      lru-cache "^4.1.2"
      merge-source-map "^1.1.0"
      postcss "^6.0.20"
      postcss-selector-parser "^3.1.1"
      prettier "^1.13.7"
      source-map "^0.5.6"
      vue-template-es2015-compiler "^1.6.0"
  
  "@vue/eslint-config-prettier@^3.0.0-beta.16":
    version "3.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-3.0.0-beta.16.tgz#b6575d7238c18559f86a692a2a053625863ebe0d"
    dependencies:
      eslint-config-prettier "^2.9.0"
      eslint-plugin-prettier "^2.6.0"
      prettier "^1.12.1"
  
  "@vue/preload-webpack-plugin@^1.0.0":
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.0.0.tgz#08f156532909824da2aad258e151742d1e8f822e"
  
  "@vue/test-utils@^1.0.0-beta.16":
    version "1.0.0-beta.16"
    resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.16.tgz#dcf7a30304391422e382b5f97db6eb9508112906"
    dependencies:
      lodash "^4.17.4"
  
  "@vue/web-component-wrapper@^1.2.0":
    version "1.2.0"
    resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1"
  
  "@webassemblyjs/ast@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25"
    dependencies:
      "@webassemblyjs/helper-module-context" "1.5.13"
      "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
      "@webassemblyjs/wast-parser" "1.5.13"
      debug "^3.1.0"
      mamacro "^0.0.3"
  
  "@webassemblyjs/floating-point-hex-parser@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298"
  
  "@webassemblyjs/helper-api-error@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59"
  
  "@webassemblyjs/helper-buffer@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e"
    dependencies:
      debug "^3.1.0"
  
  "@webassemblyjs/helper-code-frame@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58"
    dependencies:
      "@webassemblyjs/wast-printer" "1.5.13"
  
  "@webassemblyjs/helper-fsm@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924"
  
  "@webassemblyjs/helper-module-context@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5"
    dependencies:
      debug "^3.1.0"
      mamacro "^0.0.3"
  
  "@webassemblyjs/helper-wasm-bytecode@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747"
  
  "@webassemblyjs/helper-wasm-section@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/helper-buffer" "1.5.13"
      "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
      "@webassemblyjs/wasm-gen" "1.5.13"
      debug "^3.1.0"
  
  "@webassemblyjs/ieee754@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364"
    dependencies:
      ieee754 "^1.1.11"
  
  "@webassemblyjs/leb128@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee"
    dependencies:
      long "4.0.0"
  
  "@webassemblyjs/utf8@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469"
  
  "@webassemblyjs/wasm-edit@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/helper-buffer" "1.5.13"
      "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
      "@webassemblyjs/helper-wasm-section" "1.5.13"
      "@webassemblyjs/wasm-gen" "1.5.13"
      "@webassemblyjs/wasm-opt" "1.5.13"
      "@webassemblyjs/wasm-parser" "1.5.13"
      "@webassemblyjs/wast-printer" "1.5.13"
      debug "^3.1.0"
  
  "@webassemblyjs/wasm-gen@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
      "@webassemblyjs/ieee754" "1.5.13"
      "@webassemblyjs/leb128" "1.5.13"
      "@webassemblyjs/utf8" "1.5.13"
  
  "@webassemblyjs/wasm-opt@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/helper-buffer" "1.5.13"
      "@webassemblyjs/wasm-gen" "1.5.13"
      "@webassemblyjs/wasm-parser" "1.5.13"
      debug "^3.1.0"
  
  "@webassemblyjs/wasm-parser@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/helper-api-error" "1.5.13"
      "@webassemblyjs/helper-wasm-bytecode" "1.5.13"
      "@webassemblyjs/ieee754" "1.5.13"
      "@webassemblyjs/leb128" "1.5.13"
      "@webassemblyjs/utf8" "1.5.13"
  
  "@webassemblyjs/wast-parser@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/floating-point-hex-parser" "1.5.13"
      "@webassemblyjs/helper-api-error" "1.5.13"
      "@webassemblyjs/helper-code-frame" "1.5.13"
      "@webassemblyjs/helper-fsm" "1.5.13"
      long "^3.2.0"
      mamacro "^0.0.3"
  
  "@webassemblyjs/wast-printer@1.5.13":
    version "1.5.13"
    resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95"
    dependencies:
      "@webassemblyjs/ast" "1.5.13"
      "@webassemblyjs/wast-parser" "1.5.13"
      long "^3.2.0"
  
  "@webpack-contrib/schema-utils@^1.0.0-beta.0":
    version "1.0.0-beta.0"
    resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65"
    dependencies:
      ajv "^6.1.0"
      ajv-keywords "^3.1.0"
      chalk "^2.3.2"
      strip-ansi "^4.0.0"
      text-table "^0.2.0"
      webpack-log "^1.1.2"
  
  abab@^1.0.4:
    version "1.0.4"
    resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
  
  abbrev@1:
    version "1.1.1"
    resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
  
  accepts@~1.3.4, accepts@~1.3.5:
    version "1.3.5"
    resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
    dependencies:
      mime-types "~2.1.18"
      negotiator "0.6.1"
  
  acorn-dynamic-import@^3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
    dependencies:
      acorn "^5.0.0"
  
  acorn-globals@^4.1.0:
    version "4.1.0"
    resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
    dependencies:
      acorn "^5.0.0"
  
  acorn-jsx@^3.0.0:
    version "3.0.1"
    resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
    dependencies:
      acorn "^3.0.4"
  
  acorn@^3.0.4:
    version "3.3.0"
    resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
  
  acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.6.2:
    version "5.6.2"
    resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.2.tgz#b1da1d7be2ac1b4a327fb9eab851702c5045b4e7"
  
  acorn@^5.7.1:
    version "5.7.1"
    resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
  
  address@^1.0.3:
    version "1.0.3"
    resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
  
  ajv-keywords@^2.1.0:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
  
  ajv-keywords@^3.1.0:
    version "3.2.0"
    resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
  
  ajv@^4.9.1:
    version "4.11.8"
    resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
    dependencies:
      co "^4.6.0"
      json-stable-stringify "^1.0.1"
  
  ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
    version "5.5.2"
    resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
    dependencies:
      co "^4.6.0"
      fast-deep-equal "^1.0.0"
      fast-json-stable-stringify "^2.0.0"
      json-schema-traverse "^0.3.0"
  
  ajv@^6.1.0:
    version "6.5.0"
    resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c"
    dependencies:
      fast-deep-equal "^2.0.1"
      fast-json-stable-stringify "^2.0.0"
      json-schema-traverse "^0.3.0"
      uri-js "^4.2.1"
  
  align-text@^0.1.1, align-text@^0.1.3:
    version "0.1.4"
    resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
    dependencies:
      kind-of "^3.0.2"
      longest "^1.0.1"
      repeat-string "^1.5.2"
  
  alphanum-sort@^1.0.0:
    version "1.0.2"
    resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
  
  amdefine@>=0.0.4:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
  
  ansi-align@^2.0.0:
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
    dependencies:
      string-width "^2.0.0"
  
  ansi-escapes@^3.0.0:
    version "3.1.0"
    resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
  
  ansi-html@0.0.7:
    version "0.0.7"
    resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
  
  ansi-regex@^2.0.0:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
  
  ansi-regex@^3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
  
  ansi-styles@^2.2.1:
    version "2.2.1"
    resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
  
  ansi-styles@^3.2.0, ansi-styles@^3.2.1:
    version "3.2.1"
    resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
    dependencies:
      color-convert "^1.9.0"
  
  anymatch@^2.0.0:
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
    dependencies:
      micromatch "^3.1.4"
      normalize-path "^2.1.1"
  
  apollo-cache-control@^0.1.0:
    version "0.1.1"
    resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171"
    dependencies:
      graphql-extensions "^0.0.x"
  
  apollo-cache-inmemory@^1.2.1:
    version "1.2.2"
    resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.2.2.tgz#051b1fec5b3cec1b348bd7ac9c713a72a0bba45b"
    dependencies:
      apollo-cache "^1.1.9"
      apollo-utilities "^1.0.13"
      graphql-anywhere "^4.1.11"
  
  apollo-cache@^1.1.9:
    version "1.1.9"
    resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.9.tgz#90426f25c43bc66ae02808af01194d78fd15ea40"
    dependencies:
      apollo-utilities "^1.0.13"
  
  apollo-client@^2.3.1:
    version "2.3.2"
    resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.3.2.tgz#0c4c06eba0aedc63d2d988f247a9310cb2152c2e"
    dependencies:
      "@types/zen-observable" "^0.5.3"
      apollo-cache "^1.1.9"
      apollo-link "^1.0.0"
      apollo-link-dedup "^1.0.0"
      apollo-utilities "^1.0.13"
      symbol-observable "^1.0.2"
      zen-observable "^0.8.0"
    optionalDependencies:
      "@types/async" "2.0.49"
  
  apollo-engine-binary-darwin@0.2018.4-86-gf35bdc892:
    version "0.2018.4-86-gf35bdc892"
    resolved "https://registry.yarnpkg.com/apollo-engine-binary-darwin/-/apollo-engine-binary-darwin-0.2018.4-86-gf35bdc892.tgz#f1e4ae4b72afdb298039d0230e38dab8774c8890"
  
  apollo-engine-binary-linux@0.2018.4-86-gf35bdc892:
    version "0.2018.4-86-gf35bdc892"
    resolved "https://registry.yarnpkg.com/apollo-engine-binary-linux/-/apollo-engine-binary-linux-0.2018.4-86-gf35bdc892.tgz#bc63eee10cb5191d7eb5e61f01d50e28983c89d7"
  
  apollo-engine-binary-windows@0.2018.4-86-gf35bdc892:
    version "0.2018.4-86-gf35bdc892"
    resolved "https://registry.yarnpkg.com/apollo-engine-binary-windows/-/apollo-engine-binary-windows-0.2018.4-86-gf35bdc892.tgz#1e02f8ceb9f75ab72551f584a4730260907ef199"
  
  apollo-engine@^1.1.1:
    version "1.1.1"
    resolved "https://registry.yarnpkg.com/apollo-engine/-/apollo-engine-1.1.1.tgz#5e0ea8f1d6d23b5b931cee5404c472893045b201"
    dependencies:
      "@types/connect" "^3.4.31"
      "@types/express" "^4.0.36"
      "@types/koa" "^2.0.39"
      "@types/koa-bodyparser" "^4.2.0"
      "@types/koa-router" "^7.0.27"
      "@types/restify" "^5.0.7"
    optionalDependencies:
      apollo-engine-binary-darwin "0.2018.4-86-gf35bdc892"
      apollo-engine-binary-linux "0.2018.4-86-gf35bdc892"
      apollo-engine-binary-windows "0.2018.4-86-gf35bdc892"
  
  apollo-link-context@^1.0.8:
    version "1.0.8"
    resolved "https://registry.yarnpkg.com/apollo-link-context/-/apollo-link-context-1.0.8.tgz#c967a56ac6ed32add748937735bcb57c5cc64c95"
    dependencies:
      apollo-link "^1.2.2"
  
  apollo-link-dedup@^1.0.0:
    version "1.0.9"
    resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.9.tgz#3c4e4af88ef027cbddfdb857c043fd0574051dad"
    dependencies:
      apollo-link "^1.2.2"
  
  apollo-link-http-common@^0.2.3, apollo-link-http-common@^0.2.4:
    version "0.2.4"
    resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.4.tgz#877603f7904dc8f70242cac61808b1f8d034b2c3"
    dependencies:
      apollo-link "^1.2.2"
  
  apollo-link-http@^1.5.4:
    version "1.5.4"
    resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.4.tgz#b80b7b4b342c655b6a5614624b076a36be368f43"
    dependencies:
      apollo-link "^1.2.2"
      apollo-link-http-common "^0.2.4"
  
  apollo-link-persisted-queries@^0.2.0:
    version "0.2.0"
    resolved "https://registry.yarnpkg.com/apollo-link-persisted-queries/-/apollo-link-persisted-queries-0.2.0.tgz#3f970f1f07caabf050b18d5acc1aa6d058993339"
    dependencies:
      apollo-link "^1.2.1"
      hash.js "^1.1.3"
  
  apollo-link-state@^0.4.1:
    version "0.4.1"
    resolved "https://registry.yarnpkg.com/apollo-link-state/-/apollo-link-state-0.4.1.tgz#65e9e0e12c67936b8c4b12b8438434f393104579"
    dependencies:
      apollo-utilities "^1.0.8"
      graphql-anywhere "^4.1.0-alpha.0"
  
  apollo-link-ws@^1.0.8:
    version "1.0.8"
    resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.8.tgz#ac1de8f29e92418728479a9a523af9f75b9ccc8b"
    dependencies:
      apollo-link "^1.2.2"
  
  apollo-link@1.2.1:
    version "1.2.1"
    resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.1.tgz#c120b16059f9bd93401b9f72b94d2f80f3f305d2"
    dependencies:
      "@types/node" "^9.4.6"
      apollo-utilities "^1.0.0"
      zen-observable-ts "^0.8.6"
  
  apollo-link@^1.0.0, apollo-link@^1.2.1, apollo-link@^1.2.2:
    version "1.2.2"
    resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.2.tgz#54c84199b18ac1af8d63553a68ca389c05217a03"
    dependencies:
      "@types/graphql" "0.12.6"
      apollo-utilities "^1.0.0"
      zen-observable-ts "^0.8.9"
  
  apollo-server-core@^1.3.6:
    version "1.3.6"
    resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.3.6.tgz#08636243c2de56fa8c267d68dd602cb1fbd323e3"
    dependencies:
      apollo-cache-control "^0.1.0"
      apollo-tracing "^0.1.0"
      graphql-extensions "^0.0.x"
  
  apollo-server-express@^1.3.6:
    version "1.3.6"
    resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.3.6.tgz#2120b05021a87def44fafd846e8a0e2a32852db7"
    dependencies:
      apollo-server-core "^1.3.6"
      apollo-server-module-graphiql "^1.3.4"
  
  apollo-server-module-graphiql@^1.3.4:
    version "1.3.4"
    resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.3.4.tgz#50399b7c51b7267d0c841529f5173e5fc7304de4"
  
  apollo-tracing@^0.1.0:
    version "0.1.4"
    resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7"
    dependencies:
      graphql-extensions "~0.0.9"
  
  apollo-upload-client@^8.0.0:
    version "8.0.0"
    resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-8.0.0.tgz#0067f3b426b3828f971964799bc31f8073bd0607"
    dependencies:
      "@babel/runtime" "^7.0.0-beta.40"
      apollo-link-http-common "^0.2.3"
      extract-files "^3.1.0"
  
  apollo-upload-server@^5.0.0:
    version "5.0.0"
    resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-5.0.0.tgz#c953b523608313966e0c8444637f4ae8ef77d5bc"
    dependencies:
      "@babel/runtime" "^7.0.0-beta.40"
      busboy "^0.2.14"
      object-path "^0.11.4"
  
  apollo-utilities@^1.0.0, apollo-utilities@^1.0.1, apollo-utilities@^1.0.12, apollo-utilities@^1.0.13, apollo-utilities@^1.0.8:
    version "1.0.13"
    resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.13.tgz#793c858bb42243f7254d3c2961c64a7158e51022"
  
  append-transform@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab"
    dependencies:
      default-require-extensions "^2.0.0"
  
  aproba@^1.0.3, aproba@^1.1.1:
    version "1.2.0"
    resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
  
  arch@^2.1.0:
    version "2.1.0"
    resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.0.tgz#3613aa46149064b3c1f0607919bf1d4786e82889"
  
  are-we-there-yet@~1.1.2:
    version "1.1.5"
    resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
    dependencies:
      delegates "^1.0.0"
      readable-stream "^2.0.6"
  
  argparse@^1.0.7:
    version "1.0.10"
    resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
    dependencies:
      sprintf-js "~1.0.2"
  
  arr-diff@^2.0.0:
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
    dependencies:
      arr-flatten "^1.0.1"
  
  arr-diff@^4.0.0:
    version "4.0.0"
    resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
  
  arr-flatten@^1.0.1, arr-flatten@^1.1.0:
    version "1.1.0"
    resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
  
  arr-union@^3.1.0:
    version "3.1.0"
    resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
  
  array-equal@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
  
  array-filter@~0.0.0:
    version "0.0.1"
    resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
  
  array-find-index@^1.0.1:
    version "1.0.2"
    resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
  
  array-flatten@1.1.1:
    version "1.1.1"
    resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
  
  array-flatten@^2.1.0:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
  
  array-includes@^3.0.3:
    version "3.0.3"
    resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
    dependencies:
      define-properties "^1.1.2"
      es-abstract "^1.7.0"
  
  array-map@~0.0.0:
    version "0.0.0"
    resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
  
  array-reduce@~0.0.0:
    version "0.0.0"
    resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
  
  array-union@^1.0.1:
    version "1.0.2"
    resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
    dependencies:
      array-uniq "^1.0.1"
  
  array-uniq@^1.0.1:
    version "1.0.3"
    resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
  
  array-unique@^0.2.1:
    version "0.2.1"
    resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
  
  array-unique@^0.3.2:
    version "0.3.2"
    resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
  
  arrify@^1.0.0, arrify@^1.0.1:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
  
  asn1.js@^4.0.0:
    version "4.10.1"
    resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
    dependencies:
      bn.js "^4.0.0"
      inherits "^2.0.1"
      minimalistic-assert "^1.0.0"
  
  asn1@~0.2.3:
    version "0.2.3"
    resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
  
  assert-plus@1.0.0, assert-plus@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
  
  assert-plus@^0.2.0:
    version "0.2.0"
    resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
  
  assert@^1.1.1:
    version "1.4.1"
    resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
    dependencies:
      util "0.10.3"
  
  assign-symbols@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
  
  astral-regex@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
  
  async-each@^1.0.0:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
  
  async-foreach@^0.1.3:
    version "0.1.3"
    resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
  
  async-limiter@~1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
  
  async@^1.4.0, async@^1.5.2:
    version "1.5.2"
    resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
  
  async@^2.1.4, async@^2.3.0:
    version "2.6.1"
    resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
    dependencies:
      lodash "^4.17.10"
  
  asynckit@^0.4.0:
    version "0.4.0"
    resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
  
  atob@^2.1.1:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a"
  
  autoprefixer@^8.6.5:
    version "8.6.5"
    resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9"
    dependencies:
      browserslist "^3.2.8"
      caniuse-lite "^1.0.30000864"
      normalize-range "^0.1.2"
      num2fraction "^1.2.2"
      postcss "^6.0.23"
      postcss-value-parser "^3.2.3"
  
  aws-sign2@~0.6.0:
    version "0.6.0"
    resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
  
  aws-sign2@~0.7.0:
    version "0.7.0"
    resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
  
  aws4@^1.2.1, aws4@^1.6.0:
    version "1.7.0"
    resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
  
  babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
    version "6.26.0"
    resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
    dependencies:
      chalk "^1.1.3"
      esutils "^2.0.2"
      js-tokens "^3.0.2"
  
  babel-core@7.0.0-bridge.0:
    version "7.0.0-bridge.0"
    resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
  
  babel-core@^6.0.0, babel-core@^6.26.0:
    version "6.26.3"
    resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
    dependencies:
      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.1"
      debug "^2.6.9"
      json5 "^0.5.1"
      lodash "^4.17.4"
      minimatch "^3.0.4"
      path-is-absolute "^1.0.1"
      private "^0.1.8"
      slash "^1.0.0"
      source-map "^0.5.7"
  
  babel-eslint@^8.2.3:
    version "8.2.3"
    resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf"
    dependencies:
      "@babel/code-frame" "7.0.0-beta.44"
      "@babel/traverse" "7.0.0-beta.44"
      "@babel/types" "7.0.0-beta.44"
      babylon "7.0.0-beta.44"
      eslint-scope "~3.7.1"
      eslint-visitor-keys "^1.0.0"
  
  babel-generator@^6.18.0, babel-generator@^6.26.0:
    version "6.26.1"
    resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
    dependencies:
      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.7"
      trim-right "^1.0.1"
  
  babel-helper-vue-jsx-merge-props@^2.0.3:
    version "2.0.3"
    resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6"
  
  babel-helpers@^6.24.1:
    version "6.24.1"
    resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
    dependencies:
      babel-runtime "^6.22.0"
      babel-template "^6.24.1"
  
  babel-jest@^23.0.1:
    version "23.0.1"
    resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.0.1.tgz#bbad3bf523fb202da05ed0a6540b48c84eed13a6"
    dependencies:
      babel-plugin-istanbul "^4.1.6"
      babel-preset-jest "^23.0.1"
  
  babel-loader@^8.0.0-0:
    version "8.0.0-beta.3"
    resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.3.tgz#49efeea6e8058d5af860a18a6de88b8c1450645b"
    dependencies:
      find-cache-dir "^1.0.0"
      loader-utils "^1.0.2"
      mkdirp "^0.5.1"
      util.promisify "^1.0.0"
  
  babel-messages@^6.23.0:
    version "6.23.0"
    resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
    dependencies:
      babel-runtime "^6.22.0"
  
  babel-plugin-dynamic-import-node@^1.2.0:
    version "1.2.0"
    resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz#f91631e703e0595e47d4beafbb088576c87fbeee"
    dependencies:
      babel-plugin-syntax-dynamic-import "^6.18.0"
  
  babel-plugin-istanbul@^4.1.6:
    version "4.1.6"
    resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
    dependencies:
      babel-plugin-syntax-object-rest-spread "^6.13.0"
      find-up "^2.1.0"
      istanbul-lib-instrument "^1.10.1"
      test-exclude "^4.2.1"
  
  babel-plugin-jest-hoist@^23.0.1:
    version "23.0.1"
    resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.0.1.tgz#eaa11c964563aea9c21becef2bdf7853f7f3c148"
  
  babel-plugin-syntax-dynamic-import@^6.18.0:
    version "6.18.0"
    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
  
  babel-plugin-syntax-object-rest-spread@^6.13.0:
    version "6.13.0"
    resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
  
  babel-plugin-transform-es2015-modules-commonjs@^6.26.0:
    version "6.26.2"
    resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
    dependencies:
      babel-plugin-transform-strict-mode "^6.24.1"
      babel-runtime "^6.26.0"
      babel-template "^6.26.0"
      babel-types "^6.26.0"
  
  babel-plugin-transform-strict-mode@^6.24.1:
    version "6.24.1"
    resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
    dependencies:
      babel-runtime "^6.22.0"
      babel-types "^6.24.1"
  
  babel-plugin-transform-vue-jsx@^4.0.1:
    version "4.0.1"
    resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d"
    dependencies:
      esutils "^2.0.2"
  
  babel-preset-jest@^23.0.1:
    version "23.0.1"
    resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.0.1.tgz#631cc545c6cf021943013bcaf22f45d87fe62198"
    dependencies:
      babel-plugin-jest-hoist "^23.0.1"
      babel-plugin-syntax-object-rest-spread "^6.13.0"
  
  babel-register@^6.26.0:
    version "6.26.0"
    resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
    dependencies:
      babel-core "^6.26.0"
      babel-runtime "^6.26.0"
      core-js "^2.5.0"
      home-or-tmp "^2.0.0"
      lodash "^4.17.4"
      mkdirp "^0.5.1"
      source-map-support "^0.4.15"
  
  babel-runtime@^6.22.0, babel-runtime@^6.26.0:
    version "6.26.0"
    resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
    dependencies:
      core-js "^2.4.0"
      regenerator-runtime "^0.11.0"
  
  babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
    version "6.26.0"
    resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
    dependencies:
      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@^6.18.0, babel-traverse@^6.26.0:
    version "6.26.0"
    resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
    dependencies:
      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@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0:
    version "6.26.0"
    resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
    dependencies:
      babel-runtime "^6.26.0"
      esutils "^2.0.2"
      lodash "^4.17.4"
      to-fast-properties "^1.0.3"
  
  babylon@7.0.0-beta.44:
    version "7.0.0-beta.44"
    resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d"
  
  babylon@7.0.0-beta.47:
    version "7.0.0-beta.47"
    resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80"
  
  babylon@^6.18.0:
    version "6.18.0"
    resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
  
  backo2@^1.0.2:
    version "1.0.2"
    resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
  
  balanced-match@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
  
  base64-js@^1.0.2:
    version "1.3.0"
    resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
  
  base@^0.11.1:
    version "0.11.2"
    resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
    dependencies:
      cache-base "^1.0.1"
      class-utils "^0.3.5"
      component-emitter "^1.2.1"
      define-property "^1.0.0"
      isobject "^3.0.1"
      mixin-deep "^1.2.0"
      pascalcase "^0.1.1"
  
  batch@0.6.1:
    version "0.6.1"
    resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
  
  bcrypt-pbkdf@^1.0.0:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
    dependencies:
      tweetnacl "^0.14.3"
  
  bfj-node4@^5.2.0:
    version "5.3.1"
    resolved "https://registry.yarnpkg.com/bfj-node4/-/bfj-node4-5.3.1.tgz#e23d8b27057f1d0214fc561142ad9db998f26830"
    dependencies:
      bluebird "^3.5.1"
      check-types "^7.3.0"
      tryer "^1.0.0"
  
  big.js@^3.1.3:
    version "3.2.0"
    resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
  
  binary-extensions@^1.0.0:
    version "1.11.0"
    resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
  
  block-stream@*:
    version "0.0.9"
    resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
    dependencies:
      inherits "~2.0.0"
  
  bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.5.1:
    version "3.5.1"
    resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
  
  bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
    version "4.11.8"
    resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
  
  body-parser@1.18.2:
    version "1.18.2"
    resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
    dependencies:
      bytes "3.0.0"
      content-type "~1.0.4"
      debug "2.6.9"
      depd "~1.1.1"
      http-errors "~1.6.2"
      iconv-lite "0.4.19"
      on-finished "~2.3.0"
      qs "6.5.1"
      raw-body "2.3.2"
      type-is "~1.6.15"
  
  body-parser@^1.18.2:
    version "1.18.3"
    resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
    dependencies:
      bytes "3.0.0"
      content-type "~1.0.4"
      debug "2.6.9"
      depd "~1.1.2"
      http-errors "~1.6.3"
      iconv-lite "0.4.23"
      on-finished "~2.3.0"
      qs "6.5.2"
      raw-body "2.3.3"
      type-is "~1.6.16"
  
  bonjour@^3.5.0:
    version "3.5.0"
    resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
    dependencies:
      array-flatten "^2.1.0"
      deep-equal "^1.0.1"
      dns-equal "^1.0.0"
      dns-txt "^2.0.2"
      multicast-dns "^6.0.1"
      multicast-dns-service-types "^1.1.0"
  
  boolbase@^1.0.0, boolbase@~1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
  
  boom@2.x.x:
    version "2.10.1"
    resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
    dependencies:
      hoek "2.x.x"
  
  boxen@^1.2.1:
    version "1.3.0"
    resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
    dependencies:
      ansi-align "^2.0.0"
      camelcase "^4.0.0"
      chalk "^2.0.1"
      cli-boxes "^1.0.0"
      string-width "^2.0.0"
      term-size "^1.2.0"
      widest-line "^2.0.0"
  
  brace-expansion@^1.1.7:
    version "1.1.11"
    resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
    dependencies:
      balanced-match "^1.0.0"
      concat-map "0.0.1"
  
  braces@^1.8.2:
    version "1.8.5"
    resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
    dependencies:
      expand-range "^1.8.1"
      preserve "^0.2.0"
      repeat-element "^1.1.2"
  
  braces@^2.3.0, braces@^2.3.1:
    version "2.3.2"
    resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
    dependencies:
      arr-flatten "^1.1.0"
      array-unique "^0.3.2"
      extend-shallow "^2.0.1"
      fill-range "^4.0.0"
      isobject "^3.0.1"
      repeat-element "^1.1.2"
      snapdragon "^0.8.1"
      snapdragon-node "^2.0.1"
      split-string "^3.0.2"
      to-regex "^3.0.1"
  
  brorand@^1.0.1:
    version "1.1.0"
    resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
  
  browser-process-hrtime@^0.1.2:
    version "0.1.2"
    resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
  
  browser-resolve@^1.11.2:
    version "1.11.2"
    resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
    dependencies:
      resolve "1.1.7"
  
  browserify-aes@^1.0.0, browserify-aes@^1.0.4:
    version "1.2.0"
    resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
    dependencies:
      buffer-xor "^1.0.3"
      cipher-base "^1.0.0"
      create-hash "^1.1.0"
      evp_bytestokey "^1.0.3"
      inherits "^2.0.1"
      safe-buffer "^5.0.1"
  
  browserify-cipher@^1.0.0:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
    dependencies:
      browserify-aes "^1.0.4"
      browserify-des "^1.0.0"
      evp_bytestokey "^1.0.0"
  
  browserify-des@^1.0.0:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c"
    dependencies:
      cipher-base "^1.0.1"
      des.js "^1.0.0"
      inherits "^2.0.1"
  
  browserify-rsa@^4.0.0:
    version "4.0.1"
    resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
    dependencies:
      bn.js "^4.1.0"
      randombytes "^2.0.1"
  
  browserify-sign@^4.0.0:
    version "4.0.4"
    resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
    dependencies:
      bn.js "^4.1.1"
      browserify-rsa "^4.0.0"
      create-hash "^1.1.0"
      create-hmac "^1.1.2"
      elliptic "^6.0.0"
      inherits "^2.0.1"
      parse-asn1 "^5.0.0"
  
  browserify-zlib@^0.2.0:
    version "0.2.0"
    resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
    dependencies:
      pako "~1.0.5"
  
  browserslist@^3.0.0, browserslist@^3.2.8:
    version "3.2.8"
    resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
    dependencies:
      caniuse-lite "^1.0.30000844"
      electron-to-chromium "^1.3.47"
  
  browserslist@^4.0.0:
    version "4.0.1"
    resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.0.1.tgz#61c05ce2a5843c7d96166408bc23d58b5416e818"
    dependencies:
      caniuse-lite "^1.0.30000865"
      electron-to-chromium "^1.3.52"
      node-releases "^1.0.0-alpha.10"
  
  bser@^2.0.0:
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
    dependencies:
      node-int64 "^0.4.0"
  
  buffer-from@^1.0.0:
    version "1.1.0"
    resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04"
  
  buffer-indexof@^1.0.0:
    version "1.1.1"
    resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
  
  buffer-xor@^1.0.3:
    version "1.0.3"
    resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
  
  buffer@^4.3.0:
    version "4.9.1"
    resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
    dependencies:
      base64-js "^1.0.2"
      ieee754 "^1.1.4"
      isarray "^1.0.0"
  
  builtin-modules@^1.0.0:
    version "1.1.1"
    resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
  
  builtin-status-codes@^3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
  
  busboy@^0.2.14:
    version "0.2.14"
    resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"
    dependencies:
      dicer "0.2.5"
      readable-stream "1.1.x"
  
  bytes@3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
  
  cacache@^10.0.4:
    version "10.0.4"
    resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
    dependencies:
      bluebird "^3.5.1"
      chownr "^1.0.1"
      glob "^7.1.2"
      graceful-fs "^4.1.11"
      lru-cache "^4.1.1"
      mississippi "^2.0.0"
      mkdirp "^0.5.1"
      move-concurrently "^1.0.1"
      promise-inflight "^1.0.1"
      rimraf "^2.6.2"
      ssri "^5.2.4"
      unique-filename "^1.1.0"
      y18n "^4.0.0"
  
  cache-base@^1.0.1:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
    dependencies:
      collection-visit "^1.0.0"
      component-emitter "^1.2.1"
      get-value "^2.0.6"
      has-value "^1.0.0"
      isobject "^3.0.1"
      set-value "^2.0.0"
      to-object-path "^0.3.0"
      union-value "^1.0.0"
      unset-value "^1.0.0"
  
  cache-loader@^1.2.2:
    version "1.2.2"
    resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-1.2.2.tgz#6d5c38ded959a09cc5d58190ab5af6f73bd353f5"
    dependencies:
      loader-utils "^1.1.0"
      mkdirp "^0.5.1"
      neo-async "^2.5.0"
      schema-utils "^0.4.2"
  
  cacheable-request@^2.1.1:
    version "2.1.4"
    resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
    dependencies:
      clone-response "1.0.2"
      get-stream "3.0.0"
      http-cache-semantics "3.8.1"
      keyv "3.0.0"
      lowercase-keys "1.0.0"
      normalize-url "2.0.1"
      responselike "1.0.2"
  
  call-me-maybe@^1.0.1:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
  
  caller-path@^0.1.0:
    version "0.1.0"
    resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
    dependencies:
      callsites "^0.2.0"
  
  callsites@^0.2.0:
    version "0.2.0"
    resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
  
  callsites@^2.0.0:
    version "2.0.0"
    resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
  
  camel-case@3.0.x:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
    dependencies:
      no-case "^2.2.0"
      upper-case "^1.1.1"
  
  camelcase-keys@^2.0.0:
    version "2.1.0"
    resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
    dependencies:
      camelcase "^2.0.0"
      map-obj "^1.0.0"
  
  camelcase@^1.0.2:
    version "1.2.1"
    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
  
  camelcase@^2.0.0:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
  
  camelcase@^3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
  
  camelcase@^4.0.0, camelcase@^4.1.0:
    version "4.1.0"
    resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
  
  caniuse-api@^3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
    dependencies:
      browserslist "^4.0.0"
      caniuse-lite "^1.0.0"
      lodash.memoize "^4.1.2"
      lodash.uniq "^4.5.0"
  
  caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000865:
    version "1.0.30000865"
    resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz#70026616e8afe6e1442f8bb4e1092987d81a2f25"
  
  caniuse-lite@^1.0.30000844:
    version "1.0.30000851"
    resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000851.tgz#3b498aebf9f92cf6cff4ab54d13b557c0b590533"
  
  capture-exit@^1.2.0:
    version "1.2.0"
    resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
    dependencies:
      rsvp "^3.3.3"
  
  capture-stack-trace@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
  
  case-sensitive-paths-webpack-plugin@^2.1.2:
    version "2.1.2"
    resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192"
  
  caseless@~0.11.0:
    version "0.11.0"
    resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
  
  caseless@~0.12.0:
    version "0.12.0"
    resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
  
  center-align@^0.1.1:
    version "0.1.3"
    resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
    dependencies:
      align-text "^0.1.3"
      lazy-cache "^1.0.3"
  
  chalk@^1.1.1, chalk@^1.1.3:
    version "1.1.3"
    resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
    dependencies:
      ansi-styles "^2.2.1"
      escape-string-regexp "^1.0.2"
      has-ansi "^2.0.0"
      strip-ansi "^3.0.0"
      supports-color "^2.0.0"
  
  chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1:
    version "2.4.1"
    resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
    dependencies:
      ansi-styles "^3.2.1"
      escape-string-regexp "^1.0.5"
      supports-color "^5.3.0"
  
  chardet@^0.4.0:
    version "0.4.2"
    resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
  
  charenc@~0.0.1:
    version "0.0.2"
    resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
  
  check-types@^7.3.0:
    version "7.4.0"
    resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
  
  chokidar@^2.0.0, chokidar@^2.0.2:
    version "2.0.3"
    resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176"
    dependencies:
      anymatch "^2.0.0"
      async-each "^1.0.0"
      braces "^2.3.0"
      glob-parent "^3.1.0"
      inherits "^2.0.1"
      is-binary-path "^1.0.0"
      is-glob "^4.0.0"
      normalize-path "^2.1.1"
      path-is-absolute "^1.0.0"
      readdirp "^2.0.0"
      upath "^1.0.0"
    optionalDependencies:
      fsevents "^1.1.2"
  
  chownr@^1.0.1:
    version "1.0.1"
    resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
  
  chrome-trace-event@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
    dependencies:
      tslib "^1.9.0"
  
  ci-info@^1.0.0:
    version "1.1.3"
    resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2"
  
  cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
    version "1.0.4"
    resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
    dependencies:
      inherits "^2.0.1"
      safe-buffer "^5.0.1"
  
  circular-json@^0.3.1:
    version "0.3.3"
    resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
  
  class-utils@^0.3.5:
    version "0.3.6"
    resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
    dependencies:
      arr-union "^3.1.0"
      define-property "^0.2.5"
      isobject "^3.0.0"
      static-extend "^0.1.1"
  
  clean-css@4.1.x:
    version "4.1.11"
    resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a"
    dependencies:
      source-map "0.5.x"
  
  cli-boxes@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
  
  cli-cursor@^2.1.0:
    version "2.1.0"
    resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
    dependencies:
      restore-cursor "^2.0.0"
  
  cli-spinners@^1.0.1, cli-spinners@^1.1.0:
    version "1.3.1"
    resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
  
  cli-width@^2.0.0:
    version "2.2.0"
    resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
  
  clipboardy@^1.2.3:
    version "1.2.3"
    resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef"
    dependencies:
      arch "^2.1.0"
      execa "^0.8.0"
  
  cliui@^2.1.0:
    version "2.1.0"
    resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
    dependencies:
      center-align "^0.1.1"
      right-align "^0.1.1"
      wordwrap "0.0.2"
  
  cliui@^3.2.0:
    version "3.2.0"
    resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
    dependencies:
      string-width "^1.0.1"
      strip-ansi "^3.0.1"
      wrap-ansi "^2.0.0"
  
  cliui@^4.0.0, cliui@^4.1.0:
    version "4.1.0"
    resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
    dependencies:
      string-width "^2.1.1"
      strip-ansi "^4.0.0"
      wrap-ansi "^2.0.0"
  
  clone-deep@^2.0.1:
    version "2.0.2"
    resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
    dependencies:
      for-own "^1.0.0"
      is-plain-object "^2.0.4"
      kind-of "^6.0.0"
      shallow-clone "^1.0.0"
  
  clone-response@1.0.2:
    version "1.0.2"
    resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
    dependencies:
      mimic-response "^1.0.0"
  
  clone@2.x:
    version "2.1.1"
    resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
  
  clone@^1.0.2:
    version "1.0.4"
    resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
  
  co@^4.6.0:
    version "4.6.0"
    resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
  
  coa@~2.0.1:
    version "2.0.1"
    resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af"
    dependencies:
      q "^1.1.2"
  
  code-point-at@^1.0.0:
    version "1.1.0"
    resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
  
  collection-visit@^1.0.0:
    version "1.0.0"
    resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
    dependencies:
      map-visit "^1.0.0"
      object-visit "^1.0.0"
  
  color-convert@^1.9.0:
    version "1.9.1"
    resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
    dependencies:
      color-name "^1.1.1"
  
  color-convert@^1.9.1:
    version "1.9.2"
    resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147"
    dependencies:
      color-name "1.1.1"
  
  color-name@1.1.1:
    version "1.1.1"
    resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
  
  color-name@^1.0.0, color-name@^1.1.1:
    version "1.1.3"
    resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
  
  color-string@^1.5.2:
    version "1.5.2"
    resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.2.tgz#26e45814bc3c9a7cbd6751648a41434514a773a9"
    dependencies:
      color-name "^1.0.0"
      simple-swizzle "^0.2.2"
  
  color@^3.0.0:
    version "3.0.0"
    resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
    dependencies:
      color-convert "^1.9.1"
  
Download .txt
gitextract_x5kofju5/

├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .travis.yml
├── History.md
├── README.md
├── acf-export.json
├── babel.config.js
├── config/
│   └── sample-client.config.json
├── jest.config.js
├── package.json
├── public/
│   └── index.html
├── scripts/
│   ├── serve.js
│   └── start.js
├── server.js
├── src/
│   ├── core/
│   │   ├── app.js
│   │   ├── graphql/
│   │   │   ├── category.gql
│   │   │   ├── menu.gql
│   │   │   ├── page.gql
│   │   │   ├── post.gql
│   │   │   ├── posts.gql
│   │   │   └── user.gql
│   │   ├── plugin/
│   │   │   └── index.js
│   │   ├── router.js
│   │   ├── ssr/
│   │   │   ├── entry-client.js
│   │   │   └── entry-server.js
│   │   ├── vue-apollo.js
│   │   └── vuex/
│   │       ├── actions.js
│   │       ├── getters.js
│   │       └── store.js
│   ├── index.template.html
│   └── themes/
│       ├── basic/
│       │   ├── App.vue
│       │   ├── components/
│       │   │   ├── category/
│       │   │   │   ├── CategoryList.vue
│       │   │   │   └── containers/
│       │   │   │       └── CategoryContainer.vue
│       │   │   ├── header/
│       │   │   │   └── header.vue
│       │   │   ├── icons/
│       │   │   │   └── icons.vue
│       │   │   ├── menu/
│       │   │   │   ├── menu.vue
│       │   │   │   ├── menuContainer.vue
│       │   │   │   └── menuLink.vue
│       │   │   ├── page/
│       │   │   │   ├── PageHeader.vue
│       │   │   │   ├── layouts/
│       │   │   │   │   ├── DefaultPage.vue
│       │   │   │   │   ├── PageWithHeader.vue
│       │   │   │   │   ├── PageWithSidebar.vue
│       │   │   │   │   └── layouts.js
│       │   │   │   └── page.vue
│       │   │   └── post/
│       │   │       ├── PostContent.vue
│       │   │       ├── PostList.vue
│       │   │       ├── PostListItem.vue
│       │   │       ├── PostSingle.vue
│       │   │       └── containers/
│       │   │           ├── PostContainer.vue
│       │   │           └── PostsContainer.vue
│       │   ├── routes/
│       │   │   └── index.js
│       │   └── styles/
│       │       ├── colors.scss
│       │       ├── reset.css
│       │       └── typography.css
│       └── multi-user/
│           ├── App.vue
│           ├── components/
│           │   ├── author/
│           │   │   ├── AuthorSingle.vue
│           │   │   └── containers/
│           │   │       └── AuthorContainer.vue
│           │   ├── category/
│           │   │   ├── CategoryList.vue
│           │   │   └── containers/
│           │   │       └── CategoryContainer.vue
│           │   ├── header/
│           │   │   └── header.vue
│           │   ├── icons/
│           │   │   └── icons.vue
│           │   ├── menu/
│           │   │   ├── menu.vue
│           │   │   ├── menuContainer.vue
│           │   │   └── menuLink.vue
│           │   ├── page/
│           │   │   ├── PageHeader.vue
│           │   │   ├── layouts/
│           │   │   │   ├── DefaultPage.vue
│           │   │   │   ├── PageWithHeader.vue
│           │   │   │   ├── PageWithSidebar.vue
│           │   │   │   └── layouts.js
│           │   │   └── page.vue
│           │   └── post/
│           │       ├── PostContent.vue
│           │       ├── PostList.vue
│           │       ├── PostListItem.vue
│           │       ├── PostSingle.vue
│           │       └── containers/
│           │           ├── PostContainer.vue
│           │           └── PostsContainer.vue
│           ├── routes/
│           │   └── index.js
│           └── styles/
│               ├── colors.scss
│               ├── reset.css
│               └── typography.css
├── tests/
│   └── unit/
│       ├── .eslintrc.js
│       └── HelloWorld.spec.js
├── vue.config.js
└── yarn-error.log
Download .txt
SYMBOL INDEX (12 symbols across 8 files)

FILE: server.js
  function createRenderer (line 12) | function createRenderer(bundle, options) {

FILE: src/core/app.js
  function createApp (line 20) | function createApp(context) {

FILE: src/core/plugin/index.js
  method install (line 2) | install(Vue, options) {

FILE: src/core/router.js
  function createRouter (line 6) | function createRouter(routes) {

FILE: src/core/ssr/entry-client.js
  method beforeApp (line 5) | async beforeApp({ router }) {
  method afterApp (line 10) | afterApp({ app, store }) {

FILE: src/core/vue-apollo.js
  constant AUTH_TOKEN (line 15) | const AUTH_TOKEN = "apollo-token";
  function createProvider (line 63) | function createProvider(options = {}) {
  function onLogin (line 93) | async function onLogin(apolloClient, token) {
  function onLogout (line 105) | async function onLogout(apolloClient) {

FILE: src/core/vuex/store.js
  function createStore (line 18) | function createStore() {

FILE: vue.config.js
  constant TARGET_NODE (line 10) | const TARGET_NODE = process.env.WEBPACK_TARGET === "node";
Condensed preview — 86 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (485K chars).
[
  {
    "path": ".editorconfig",
    "chars": 147,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_"
  },
  {
    "path": ".eslintignore",
    "chars": 50,
    "preview": "build/*.js\ndist/*.js\nnode_modules/*\n**/lib/*\n*.gql"
  },
  {
    "path": ".eslintrc.js",
    "chars": 347,
    "preview": "module.exports = {\n  root: true,\n  env: {\n    node: true\n  },\n  'extends': [\n    'plugin:vue/essential',\n    '@vue/prett"
  },
  {
    "path": ".gitignore",
    "chars": 118,
    "preview": ".DS_Store\nnode_modules/\ndist/\nnpm-debug.log\n.vscode/\nconfig/client.json\nconfig/development.json\nconfig/production.json"
  },
  {
    "path": ".travis.yml",
    "chars": 76,
    "preview": "language: node_js\nnode_js:\n  - \"6\"\n  - \"7\"\nscript: npm run unit --single-run"
  },
  {
    "path": "History.md",
    "chars": 581,
    "preview": "# V.3.0.0-beta\n\n- Completely replaced build system using Vue CLI 3.0 (beta release)\n\n# V.2.1\n\n- Created a multi-user the"
  },
  {
    "path": "README.md",
    "chars": 2989,
    "preview": "# WordExpress Starter - Vue (AKA VuePress)\n\n> WordPress development using Vue, GraphQL, and Express.\n\n[Read the Introduc"
  },
  {
    "path": "acf-export.json",
    "chars": 4806,
    "preview": "[\n    {\n        \"key\": \"group_5a32cdd1b53f1\",\n        \"title\": \"Page Fields\",\n        \"fields\": [\n            {\n        "
  },
  {
    "path": "babel.config.js",
    "chars": 46,
    "preview": "module.exports = {\n  presets: [\"@vue/app\"]\n};\n"
  },
  {
    "path": "config/sample-client.config.json",
    "chars": 74,
    "preview": "{\n  \"wordexpressServerHost\": \"http://localhost:4000\",\n  \"theme\": \"basic\"\n}"
  },
  {
    "path": "jest.config.js",
    "chars": 464,
    "preview": "module.exports = {\n  moduleFileExtensions: [\"js\", \"jsx\", \"json\", \"vue\"],\n  transform: {\n    \"^.+\\\\.vue$\": \"vue-jest\",\n  "
  },
  {
    "path": "package.json",
    "chars": 2609,
    "preview": "{\n  \"name\": \"wordexpress-starter-kit-vue\",\n  \"version\": \"3.0.0-beta\",\n  \"private\": false,\n  \"scripts\": {\n    \"start\": \"c"
  },
  {
    "path": "public/index.html",
    "chars": 557,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n   "
  },
  {
    "path": "scripts/serve.js",
    "chars": 277,
    "preview": "const { spawn } = require(\"child_process\");\nconst serve = spawn(\"npx\", [\"vue-cli-service\", \"serve\"]);\n\nconst log = conso"
  },
  {
    "path": "scripts/start.js",
    "chars": 158,
    "preview": "const app = require(\"../server\");\n\nconst port = process.env.PORT || 3000;\n\napp.listen(port, () => {\n  console.log(`serve"
  },
  {
    "path": "server.js",
    "chars": 2226,
    "preview": "const fs = require(\"fs\");\nconst path = require(\"path\");\nconst express = require(\"express\");\nvar proxy = require(\"http-pr"
  },
  {
    "path": "src/core/app.js",
    "chars": 946,
    "preview": "import Vue from \"vue\";\nimport createStore from \"./vuex/store\";\nimport createRouter from \"./router.js\";\nimport { sync } f"
  },
  {
    "path": "src/core/graphql/category.gql",
    "chars": 369,
    "preview": "query Category($term_id: Int!){\n  category(term_id: $term_id){\n    name\n    slug\n    posts{\n      id\n      post_name\n   "
  },
  {
    "path": "src/core/graphql/menu.gql",
    "chars": 356,
    "preview": "query Menu($menu: String!) {\n  menus(name: $menu) {\n    items {\n      id\n      order\n      navitem{\n        id\n        p"
  },
  {
    "path": "src/core/graphql/page.gql",
    "chars": 211,
    "preview": "query Page($name: String){\n  post(name: $name){\n    id\n    post_title\n    post_content\n    thumbnail{\n      src\n    }\n  "
  },
  {
    "path": "src/core/graphql/post.gql",
    "chars": 325,
    "preview": "query Post($name: String) {\n  post(name: $name){\n    id\n    post_name\n    post_parent\n    post_content\n    post_title\n  "
  },
  {
    "path": "src/core/graphql/posts.gql",
    "chars": 368,
    "preview": "query Posts($post_type: [String], $limit: Int, $skip: Int, $order: OrderInput) {\n  posts(post_type: $post_type, limit: $"
  },
  {
    "path": "src/core/graphql/user.gql",
    "chars": 152,
    "preview": "query User($name: String) {\n  user(name: $name){\n    display_name\n    user_email\n    posts{\n      post_name\n      post_t"
  },
  {
    "path": "src/core/plugin/index.js",
    "chars": 692,
    "preview": "const WordExpressPlugin = {\n  install(Vue, options) {\n    const { shortcodes, helpers } = options;\n    Vue.prototype.$pa"
  },
  {
    "path": "src/core/router.js",
    "chars": 206,
    "preview": "import Vue from \"vue\";\nimport Router from \"vue-router\";\n\nVue.use(Router);\n\nexport function createRouter(routes) {\n  retu"
  },
  {
    "path": "src/core/ssr/entry-client.js",
    "chars": 362,
    "preview": "import { loadAsyncComponents } from \"@akryum/vue-cli-plugin-ssr/client\";\nimport { createApp } from \"../app\";\n\ncreateApp("
  },
  {
    "path": "src/core/ssr/entry-server.js",
    "chars": 1466,
    "preview": "import \"isomorphic-fetch\";\nimport { createApp } from \"../app\";\n\nexport default context => {\n  return new Promise(async ("
  },
  {
    "path": "src/core/vue-apollo.js",
    "chars": 3064,
    "preview": "import Vue from \"vue\";\nimport VueApollo from \"vue-apollo\";\nimport {\n  createApolloClient,\n  restartWebsockets\n} from \"vu"
  },
  {
    "path": "src/core/vuex/actions.js",
    "chars": 98,
    "preview": "export const activeMenuName = ({ commit }, name) =>\n  commit(\"ACTIVE_MENU_NAME\", { name: name });\n"
  },
  {
    "path": "src/core/vuex/getters.js",
    "chars": 67,
    "preview": "export const getActiveMenuName = state => state.getActiveMenuName;\n"
  },
  {
    "path": "src/core/vuex/store.js",
    "chars": 423,
    "preview": "import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport * as actions from \"./actions\";\nimport * as getters from \"./getter"
  },
  {
    "path": "src/index.template.html",
    "chars": 673,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width\">\n    <"
  },
  {
    "path": "src/themes/basic/App.vue",
    "chars": 1399,
    "preview": "<template>\n  <div id=\"app\">\n    <icons/>\n    <app-header/>\n    <div class=\"main\">\n      <transition\n        appear\n     "
  },
  {
    "path": "src/themes/basic/components/category/CategoryList.vue",
    "chars": 1346,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <page-header :page=\"{post_title: category.name}\" />\n    <div class=\"page-content\""
  },
  {
    "path": "src/themes/basic/components/category/containers/CategoryContainer.vue",
    "chars": 626,
    "preview": "<template>\n  <category-list v-if=\"category\" :category=\"category\"/>\n</template>\n\n<script>\nimport CategoryQuery from \"core"
  },
  {
    "path": "src/themes/basic/components/header/header.vue",
    "chars": 909,
    "preview": "<template>\n  <header class=\"header\">\n    <div class=\"wrapper\">\n      <menu-container :menuName=\"'primary-navigation'\">\n "
  },
  {
    "path": "src/themes/basic/components/icons/icons.vue",
    "chars": 298,
    "preview": "<template>\n  <svg style=\"display:none;\">\n    <symbol id=\"plus-icon\" viewBox=\"0 0 24 24\">\n      <path d=\"M19 13h-6v6h-2v-"
  },
  {
    "path": "src/themes/basic/components/menu/menu.vue",
    "chars": 640,
    "preview": "<template>\n  <ul class=\"menu\">\n    <li class=\"item\">\n      <router-link :to=\"{name: 'Home'}\">Home</router-link>\n    </li"
  },
  {
    "path": "src/themes/basic/components/menu/menuContainer.vue",
    "chars": 419,
    "preview": "<template>\n  <div>\n    <slot :items=\"menus.items\">\n    </slot>\n  </div>\n</template>\n\n<script>\nimport MenuQuery from \"cor"
  },
  {
    "path": "src/themes/basic/components/menu/menuLink.vue",
    "chars": 723,
    "preview": "<template>\n  <a v-if=\"type === 'custom'\" class=\"link\" :href=\"url\">{{link.post_title}}</a>\n  <router-link v-else class=\"l"
  },
  {
    "path": "src/themes/basic/components/page/PageHeader.vue",
    "chars": 762,
    "preview": "<template>\n  <div class=\"header\" :style=\"renderHeaderImage()\">\n    <div class=\"header-content\">\n      <h2 class=\"title\">"
  },
  {
    "path": "src/themes/basic/components/page/layouts/DefaultPage.vue",
    "chars": 640,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <div class=\"body\">\n      <post-content :content=\"page.post_content\"/> \n    </div>"
  },
  {
    "path": "src/themes/basic/components/page/layouts/PageWithHeader.vue",
    "chars": 1389,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <page-header :page=\"page\"/>\n    <div class=\"body\">\n      <post-content :content=\""
  },
  {
    "path": "src/themes/basic/components/page/layouts/PageWithSidebar.vue",
    "chars": 1476,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <menu-container class=\"sidebar\" :menuName=\"getSidebarMenuName()\">\n      <ul class"
  },
  {
    "path": "src/themes/basic/components/page/layouts/layouts.js",
    "chars": 265,
    "preview": "import DefaultPage from \"./DefaultPage\";\nimport PageWithHeader from \"./PageWithHeader\";\nimport PageWithSidebar from \"./P"
  },
  {
    "path": "src/themes/basic/components/page/page.vue",
    "chars": 1576,
    "preview": "<template>\n  <div class=\"page\">\n     <transition\n      appear\n      v-on:before-enter=\"beforeEnter\"\n      v-on:enter=\"en"
  },
  {
    "path": "src/themes/basic/components/post/PostContent.vue",
    "chars": 2562,
    "preview": "<template>\n  <div class=\"post-content\" v-html=\"$parseContent(content)\"/> \n</template>\n\n<script>\nimport { map } from \"lod"
  },
  {
    "path": "src/themes/basic/components/post/PostList.vue",
    "chars": 1387,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <page-header :page=\"{post_title: 'Posts'}\" />\n    <div class=\"page-content\">\n    "
  },
  {
    "path": "src/themes/basic/components/post/PostListItem.vue",
    "chars": 1250,
    "preview": "<template>\n  <div class=\"post-list-item\">\n    <router-link class=\"post-link\" :to=\"{name: 'Post', params: {postname: post"
  },
  {
    "path": "src/themes/basic/components/post/PostSingle.vue",
    "chars": 1001,
    "preview": "<template>\n  <div v-if=\"post.id\">\n    <div class=\"post-header\" :style=\"renderHeaderImage()\">\n      <h2 class=\"post-title"
  },
  {
    "path": "src/themes/basic/components/post/containers/PostContainer.vue",
    "chars": 556,
    "preview": "<template>\n  <post-single :post=\"post\"/>\n</template>\n\n<script>\nimport PostQuery from \"core/graphql/post.gql\";\nimport Pos"
  },
  {
    "path": "src/themes/basic/components/post/containers/PostsContainer.vue",
    "chars": 608,
    "preview": "<template>\n  <div>\n    <slot :posts=\"posts\" :isLoading=\"isLoading\">\n    </slot>\n  </div>\n</template>\n\n<script>\nimport Po"
  },
  {
    "path": "src/themes/basic/routes/index.js",
    "chars": 515,
    "preview": "import Page from \"../components/page/page\";\nimport Post from \"../components/post/containers/PostContainer\";\nimport Categ"
  },
  {
    "path": "src/themes/basic/styles/colors.scss",
    "chars": 242,
    "preview": "$primary-color: #B60FE0;\n$secondary-color: #acf3a7;\n$accent-color: #F53C76;\n$secondary-accent-color: #FF594F;\n$dark-colo"
  },
  {
    "path": "src/themes/basic/styles/reset.css",
    "chars": 1051,
    "preview": "/** * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) * http://cssreset.com */html, body, div, s"
  },
  {
    "path": "src/themes/basic/styles/typography.css",
    "chars": 1365,
    "preview": "html {font-size: 1.125em;}\n\nbody {\n  font-family: var(--copy-font);\n  font-weight: 400;\n  line-height: 1.45;\n}\n\nh1, h2, "
  },
  {
    "path": "src/themes/multi-user/App.vue",
    "chars": 1399,
    "preview": "<template>\n  <div id=\"app\">\n    <icons/>\n    <app-header/>\n    <div class=\"main\">\n      <transition\n        appear\n     "
  },
  {
    "path": "src/themes/multi-user/components/author/AuthorSingle.vue",
    "chars": 2015,
    "preview": "<template>\n  <author-container class=\"author-page\">\n    <div class=\"author-content\" slot-scope=\"data\" v-if=\"data.author\""
  },
  {
    "path": "src/themes/multi-user/components/author/containers/AuthorContainer.vue",
    "chars": 608,
    "preview": "<template>\n  <div>\n    <slot :author=\"user\" :isLoading=\"isLoading\"></slot>\n  </div>\n</template>\n\n<script>\nimport UserQue"
  },
  {
    "path": "src/themes/multi-user/components/category/CategoryList.vue",
    "chars": 1346,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <page-header :page=\"{post_title: category.name}\" />\n    <div class=\"page-content\""
  },
  {
    "path": "src/themes/multi-user/components/category/containers/CategoryContainer.vue",
    "chars": 626,
    "preview": "<template>\n  <category-list v-if=\"category\" :category=\"category\"/>\n</template>\n\n<script>\nimport CategoryQuery from \"core"
  },
  {
    "path": "src/themes/multi-user/components/header/header.vue",
    "chars": 909,
    "preview": "<template>\n  <header class=\"header\">\n    <div class=\"wrapper\">\n      <menu-container :menuName=\"'primary-navigation'\">\n "
  },
  {
    "path": "src/themes/multi-user/components/icons/icons.vue",
    "chars": 298,
    "preview": "<template>\n  <svg style=\"display:none;\">\n    <symbol id=\"plus-icon\" viewBox=\"0 0 24 24\">\n      <path d=\"M19 13h-6v6h-2v-"
  },
  {
    "path": "src/themes/multi-user/components/menu/menu.vue",
    "chars": 640,
    "preview": "<template>\n  <ul class=\"menu\">\n    <li class=\"item\">\n      <router-link :to=\"{name: 'Home'}\">Home</router-link>\n    </li"
  },
  {
    "path": "src/themes/multi-user/components/menu/menuContainer.vue",
    "chars": 419,
    "preview": "<template>\n  <div>\n    <slot :items=\"menus.items\">\n    </slot>\n  </div>\n</template>\n\n<script>\nimport MenuQuery from \"cor"
  },
  {
    "path": "src/themes/multi-user/components/menu/menuLink.vue",
    "chars": 723,
    "preview": "<template>\n  <a v-if=\"type === 'custom'\" class=\"link\" :href=\"url\">{{link.post_title}}</a>\n  <router-link v-else class=\"l"
  },
  {
    "path": "src/themes/multi-user/components/page/PageHeader.vue",
    "chars": 635,
    "preview": "<template>\n  <div class=\"header\" v-bind:style=\"`backgroundImage: url(${this.image});`\">\n    <div class=\"header-content\">"
  },
  {
    "path": "src/themes/multi-user/components/page/layouts/DefaultPage.vue",
    "chars": 640,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <div class=\"body\">\n      <post-content :content=\"page.post_content\"/> \n    </div>"
  },
  {
    "path": "src/themes/multi-user/components/page/layouts/PageWithHeader.vue",
    "chars": 1446,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <page-header>\n      <span slot=\"title\">{{page.post_title}}</span>\n    </page-head"
  },
  {
    "path": "src/themes/multi-user/components/page/layouts/PageWithSidebar.vue",
    "chars": 1476,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <menu-container class=\"sidebar\" :menuName=\"getSidebarMenuName()\">\n      <ul class"
  },
  {
    "path": "src/themes/multi-user/components/page/layouts/layouts.js",
    "chars": 265,
    "preview": "import DefaultPage from \"./DefaultPage\";\nimport PageWithHeader from \"./PageWithHeader\";\nimport PageWithSidebar from \"./P"
  },
  {
    "path": "src/themes/multi-user/components/page/page.vue",
    "chars": 1633,
    "preview": "<template>\n  <div class=\"page\">\n     <transition\n      appear\n      v-on:before-enter=\"beforeEnter\"\n      v-on:enter=\"en"
  },
  {
    "path": "src/themes/multi-user/components/post/PostContent.vue",
    "chars": 2562,
    "preview": "<template>\n  <div class=\"post-content\" v-html=\"$parseContent(content)\"/> \n</template>\n\n<script>\nimport { map } from \"lod"
  },
  {
    "path": "src/themes/multi-user/components/post/PostList.vue",
    "chars": 1431,
    "preview": "<template>\n  <div class=\"wrapper\">\n    <page-header>\n      <span slot=\"title\">Posts</span>\n    </page-header>\n    <div c"
  },
  {
    "path": "src/themes/multi-user/components/post/PostListItem.vue",
    "chars": 1519,
    "preview": "<template>\n  <div class=\"post-list-item\">\n    <div class=\"post-body\">\n      <router-link class=\"post-link\" :to=\"{name: '"
  },
  {
    "path": "src/themes/multi-user/components/post/PostSingle.vue",
    "chars": 1752,
    "preview": "<template>\n  <div v-if=\"post.id\">\n    <div class=\"post-header\" :style=\"renderHeaderImage()\">\n      <div class=\"wrapper\">"
  },
  {
    "path": "src/themes/multi-user/components/post/containers/PostContainer.vue",
    "chars": 556,
    "preview": "<template>\n  <post-single :post=\"post\"/>\n</template>\n\n<script>\nimport PostQuery from \"core/graphql/post.gql\";\nimport Pos"
  },
  {
    "path": "src/themes/multi-user/components/post/containers/PostsContainer.vue",
    "chars": 665,
    "preview": "<template>\n  <div>\n    <slot :posts=\"posts\" :isLoading=\"isLoading\">\n    </slot>\n  </div>\n</template>\n\n<script>\nimport Po"
  },
  {
    "path": "src/themes/multi-user/routes/index.js",
    "chars": 649,
    "preview": "import Page from \"../components/page/page\";\nimport Post from \"../components/post/containers/PostContainer\";\nimport Categ"
  },
  {
    "path": "src/themes/multi-user/styles/colors.scss",
    "chars": 242,
    "preview": "$primary-color: #B60FE0;\n$secondary-color: #acf3a7;\n$accent-color: #F53C76;\n$secondary-accent-color: #FF594F;\n$dark-colo"
  },
  {
    "path": "src/themes/multi-user/styles/reset.css",
    "chars": 1051,
    "preview": "/** * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) * http://cssreset.com */html, body, div, s"
  },
  {
    "path": "src/themes/multi-user/styles/typography.css",
    "chars": 1365,
    "preview": "html {font-size: 1.125em;}\n\nbody {\n  font-family: var(--copy-font);\n  font-weight: 400;\n  line-height: 1.45;\n}\n\nh1, h2, "
  },
  {
    "path": "tests/unit/.eslintrc.js",
    "chars": 111,
    "preview": "module.exports = {\n  env: {\n    jest: true\n  },\n  rules: {\n    'import/no-extraneous-dependencies': 'off'\n  }\n}"
  },
  {
    "path": "tests/unit/HelloWorld.spec.js",
    "chars": 346,
    "preview": "import { shallowMount } from \"@vue/test-utils\";\nimport HelloWorld from \"@/components/HelloWorld.vue\";\n\ndescribe(\"HelloWo"
  },
  {
    "path": "vue.config.js",
    "chars": 1702,
    "preview": "const VueSSRServerPlugin = require(\"vue-server-renderer/server-plugin\");\nconst VueSSRClientPlugin = require(\"vue-server-"
  },
  {
    "path": "yarn-error.log",
    "chars": 373174,
    "preview": "Arguments: \n  /Users/rlanier/.nvm/versions/node/v10.1.0/bin/node /usr/local/Cellar/yarn/1.7.0/libexec/bin/yarn.js add @v"
  }
]

About this extraction

This page contains the full source code of the ramsaylanier/wordexpress-starter-vue GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 86 files (440.0 KB), approximately 175.5k tokens, and a symbol index with 12 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!