--- /dev/null
+dist
+.DS_Store
+node_modules
+explorations
+TODOs.md
--- /dev/null
+semi: false
+singleQuote: true
+printWidth: 80
--- /dev/null
+{
+ "typescript.tsdk": "node_modules/typescript/lib"
+}
--- /dev/null
+{
+ "packages": [
+ "packages/*"
+ ],
+ "version": "3.0.0-alpha.1"
+}
--- /dev/null
+{
+ "private": true,
+ "workspaces": [
+ "packages/*"
+ ],
+ "scripts": {
+ "dev": "node scripts/dev.js",
+ "build": "node scripts/build.js",
+ "lint": "prettier --write --parser typescript 'packages/*/src/**/*.ts'"
+ },
+ "devDependencies": {
+ "chalk": "^2.4.1",
+ "dts-bundle": "^0.7.3",
+ "execa": "^1.0.0",
+ "fs-extra": "^7.0.0",
+ "lerna": "^3.4.0",
+ "minimist": "^1.2.0",
+ "prettier": "^1.14.2",
+ "rollup": "^0.65.0",
+ "rollup-plugin-alias": "^1.4.0",
+ "rollup-plugin-replace": "^2.0.0",
+ "rollup-plugin-terser": "^2.0.2",
+ "rollup-plugin-typescript2": "^0.17.0",
+ "typescript": "^3.0.3"
+ }
+}
--- /dev/null
+__tests__/
+__mocks__/
+dist/packages
\ No newline at end of file
--- /dev/null
+# @vue/core
+
+> This package is published only for typing and building custom renderers. It is NOT meant to be used in applications.
--- /dev/null
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/core.cjs.prod.js')
+} else {
+ module.exports = require('./dist/core.cjs.js')
+}
--- /dev/null
+{
+ "name": "@vue/core",
+ "version": "3.0.0-alpha.1",
+ "description": "@vue/core",
+ "main": "index.js",
+ "module": "dist/core.esm.js",
+ "typings": "dist/index.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/vue.git"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/vue/issues"
+ },
+ "homepage": "https://github.com/vuejs/vue/tree/dev/packages/core#readme",
+ "dependencies": {
+ "@vue/observer": "3.0.0-alpha.1"
+ }
+}
--- /dev/null
+import { EMPTY_OBJ } from './utils'
+import { VNode, Slots, RenderNode, RenderFragment } from './vdom'
+import {
+ Data,
+ RenderFunction,
+ ComponentOptions,
+ ComponentPropsOptions
+} from './componentOptions'
+import { setupWatcher } from './componentWatch'
+import { Autorun, DebuggerEvent, ComputedGetter } from '@vue/observer'
+
+type Flatten<T> = { [K in keyof T]: T[K] }
+
+export interface ComponentClass extends Flatten<typeof Component> {
+ new <D = Data, P = Data>(): MountedComponent<D, P> & D & P
+}
+
+export interface FunctionalComponent<P = Data> extends RenderFunction<P> {
+ pure?: boolean
+ props?: ComponentPropsOptions<P>
+}
+
+// this interface is merged with the class type
+// to represent a mounted component
+export interface MountedComponent<D = Data, P = Data> extends Component {
+ $vnode: VNode
+ $data: D
+ $props: P
+ $computed: Data
+ $slots: Slots
+ $root: MountedComponent
+ $children: MountedComponent[]
+ $options: ComponentOptions<D, P>
+
+ render: RenderFunction<P>
+ data?(): Partial<D>
+ beforeCreate?(): void
+ created?(): void
+ beforeMount?(): void
+ mounted?(): void
+ beforeUpdate?(e: DebuggerEvent): void
+ updated?(): void
+ beforeDestroy?(): void
+ destroyed?(): void
+
+ _updateHandle: Autorun
+ $forceUpdate: () => void
+
+ _self: MountedComponent<D, P> // on proxies only
+}
+
+export class Component {
+ public static options?: ComponentOptions
+
+ public get $el(): RenderNode | RenderFragment | null {
+ return this.$vnode && this.$vnode.el
+ }
+
+ public $vnode: VNode | null = null
+ public $parentVNode: VNode | null = null
+ public $data: Data | null = null
+ public $props: Data | null = null
+ public $computed: Data | null = null
+ public $slots: Slots | null = null
+ public $root: MountedComponent | null = null
+ public $parent: MountedComponent | null = null
+ public $children: MountedComponent[] = []
+ public $options: any
+ public $proxy: any = null
+ public $forceUpdate: (() => void) | null = null
+
+ public _rawData: Data | null = null
+ public _computedGetters: Record<string, ComputedGetter> | null = null
+ public _watchHandles: Set<Autorun> | null = null
+ public _mounted: boolean = false
+ public _destroyed: boolean = false
+ public _events: { [event: string]: Function[] | null } | null = null
+ public _updateHandle: Autorun | null = null
+ public _revokeProxy: () => void
+ public _isVue: boolean = true
+
+ constructor(options?: ComponentOptions) {
+ this.$options = options || (this.constructor as any).options || EMPTY_OBJ
+ // root instance
+ if (options !== void 0) {
+ // mount this
+ }
+ }
+
+ $watch(
+ this: MountedComponent,
+ keyOrFn: string | (() => any),
+ cb: () => void
+ ) {
+ return setupWatcher(this, keyOrFn, cb)
+ }
+
+ // eventEmitter interface
+ $on(event: string, fn: Function): Component {
+ if (Array.isArray(event)) {
+ for (let i = 0; i < event.length; i++) {
+ this.$on(event[i], fn)
+ }
+ } else {
+ const events = this._events || (this._events = Object.create(null))
+ ;(events[event] || (events[event] = [])).push(fn)
+ }
+ return this
+ }
+
+ $once(event: string, fn: Function): Component {
+ const onceFn = (...args: any[]) => {
+ this.$off(event, onceFn)
+ fn.apply(this, args)
+ }
+ ;(onceFn as any).fn = fn
+ return this.$on(event, onceFn)
+ }
+
+ $off(event?: string, fn?: Function) {
+ if (this._events) {
+ if (!event && !fn) {
+ this._events = null
+ } else if (Array.isArray(event)) {
+ for (let i = 0; i < event.length; i++) {
+ this.$off(event[i], fn)
+ }
+ } else if (!fn) {
+ this._events[event as string] = null
+ } else {
+ const fns = this._events[event as string]
+ if (fns) {
+ for (let i = 0; i < fns.length; i++) {
+ const f = fns[i]
+ if (fn === f || fn === (f as any).fn) {
+ fns.splice(i, 1)
+ break
+ }
+ }
+ }
+ }
+ }
+ return this
+ }
+
+ $emit(this: MountedComponent, name: string, ...payload: any[]) {
+ const parentListener =
+ this.$props['on' + name] || this.$props['on' + name.toLowerCase()]
+ if (parentListener) {
+ invokeListeners(parentListener, payload)
+ }
+ if (this._events) {
+ const handlers = this._events[name]
+ if (handlers) {
+ invokeListeners(handlers, payload)
+ }
+ }
+ return this
+ }
+}
+
+function invokeListeners(value: Function | Function[], payload: any[]) {
+ // TODO handle error
+ if (Array.isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ value[i](...payload)
+ }
+ } else {
+ value(...payload)
+ }
+}
--- /dev/null
+import { EMPTY_OBJ } from './utils'
+import { computed, ComputedGetter } from '@vue/observer'
+import { Component, ComponentClass } from './component'
+import { ComponentComputedOptions } from './componentOptions'
+
+const extractionCache: WeakMap<
+ ComponentClass,
+ ComponentComputedOptions
+> = new WeakMap()
+
+export function getComputedOptions(
+ comp: ComponentClass
+): ComponentComputedOptions {
+ let computedOptions = extractionCache.get(comp)
+ if (computedOptions) {
+ return computedOptions
+ }
+ computedOptions = {}
+ const descriptors = Object.getOwnPropertyDescriptors(comp.prototype as any)
+ for (const key in descriptors) {
+ const d = descriptors[key]
+ if (d.get) {
+ computedOptions[key] = d.get
+ // there's no need to do anything for the setter
+ // as it's already defined on the prototype
+ }
+ }
+ return computedOptions
+}
+
+export function initializeComputed(
+ instance: Component,
+ computedOptions: ComponentComputedOptions | undefined
+) {
+ if (!computedOptions) {
+ instance.$computed = EMPTY_OBJ
+ return
+ }
+ const handles: Record<
+ string,
+ ComputedGetter
+ > = (instance._computedGetters = {})
+ const proxy = instance.$proxy
+ for (const key in computedOptions) {
+ handles[key] = computed(computedOptions[key], proxy)
+ }
+ instance.$computed = new Proxy(
+ {},
+ {
+ get(_, key: any) {
+ return handles[key]()
+ }
+ // TODO should be readonly
+ }
+ )
+}
+
+export function teardownComputed(instance: Component) {
+ const handles = instance._computedGetters
+ if (handles !== null) {
+ for (const key in handles) {
+ handles[key].stop()
+ }
+ }
+}
--- /dev/null
+import { Slots } from './vdom'
+import { MountedComponent } from './component'
+
+export type Data = Record<string, any>
+
+export interface RenderFunction<P = Data> {
+ (props: P, slots: Slots): any
+}
+
+export interface ComponentOptions<D = Data, P = Data> {
+ data?: () => Partial<D>
+ props?: ComponentPropsOptions<P>
+ computed?: ComponentComputedOptions<D, P>
+ watch?: ComponentWatchOptions<D, P>
+ render?: RenderFunction<P>
+ // TODO other options
+ readonly [key: string]: any
+}
+
+export type ComponentPropsOptions<P = Data> = {
+ [K in keyof P]: PropValidator<P[K]>
+}
+
+export type NormalizedPropsOptions<P = Data> = {
+ [K in keyof P]: PropOptions<P[K]>
+}
+
+export type Prop<T> = { (): T } | { new (...args: any[]): T & object }
+
+export type PropType<T> = Prop<T> | Prop<T>[]
+
+export type PropValidator<T> = PropOptions<T> | PropType<T>
+
+export interface PropOptions<T = any> {
+ type?: PropType<T>
+ required?: boolean
+ default?: T | null | undefined | (() => T | null | undefined)
+ validator?(value: T): boolean
+}
+
+export interface ComponentComputedOptions<D = Data, P = Data> {
+ [key: string]: (this: MountedComponent<D, P> & D & P, c: any) => any
+}
+
+export interface ComponentWatchOptions<D = Data, P = Data> {
+ [key: string]: (
+ this: MountedComponent<D, P> & D & P,
+ oldValue: any,
+ newValue: any
+ ) => void
+}
--- /dev/null
+import { EMPTY_OBJ, isReservedProp } from './utils'
+import { Component, ComponentClass, MountedComponent } from './component'
+import { immutable, unwrap, lock, unlock } from '@vue/observer'
+import {
+ Data,
+ ComponentPropsOptions,
+ NormalizedPropsOptions,
+ PropValidator,
+ PropOptions
+} from './componentOptions'
+
+export function initializeProps(instance: Component, props: Data | null) {
+ instance.$props = immutable(props || {})
+}
+
+export function updateProps(instance: MountedComponent, nextProps: Data) {
+ // instance.$props is an observable that should not be replaced.
+ // instead, we mutate it to match latest props, which will trigger updates
+ // if any value has changed.
+ if (nextProps != null) {
+ const props = instance.$props
+ const rawProps = unwrap(props)
+ // unlock to temporarily allow mutatiing props
+ unlock()
+ for (const key in rawProps) {
+ if (!nextProps.hasOwnProperty(key)) {
+ delete props[key]
+ }
+ }
+ for (const key in nextProps) {
+ props[key] = nextProps[key]
+ }
+ lock()
+ }
+}
+
+// This is called for every component vnode created. This also means the data
+// on every component vnode is guarunteed to be a fresh object.
+export function normalizeComponentProps(
+ raw: any,
+ options: ComponentPropsOptions,
+ Component: ComponentClass
+): Data {
+ if (!raw) {
+ return EMPTY_OBJ
+ }
+ const res: Data = {}
+ const normalizedOptions = options && normalizePropsOptions(options)
+ for (const key in raw) {
+ if (isReservedProp(key)) {
+ continue
+ }
+ if (__DEV__ && normalizedOptions != null) {
+ validateProp(key, raw[key], normalizedOptions[key], Component)
+ } else {
+ res[key] = raw[key]
+ }
+ }
+ // set default values
+ if (normalizedOptions != null) {
+ for (const key in normalizedOptions) {
+ if (res[key] === void 0) {
+ const opt = normalizedOptions[key]
+ if (opt != null && opt.hasOwnProperty('default')) {
+ const defaultValue = opt.default
+ res[key] =
+ typeof defaultValue === 'function' ? defaultValue() : defaultValue
+ }
+ }
+ }
+ }
+ return res
+}
+
+const normalizeCache: WeakMap<
+ ComponentPropsOptions,
+ NormalizedPropsOptions
+> = new WeakMap()
+function normalizePropsOptions(
+ raw: ComponentPropsOptions
+): NormalizedPropsOptions {
+ let cached = normalizeCache.get(raw)
+ if (cached) {
+ return cached
+ }
+ const normalized: NormalizedPropsOptions = {}
+ for (const key in raw) {
+ const opt = raw[key]
+ normalized[key] =
+ typeof opt === 'function' ? { type: opt } : (opt as PropOptions)
+ }
+ normalizeCache.set(raw, normalized)
+ return normalized
+}
+
+function validateProp(
+ key: string,
+ value: any,
+ validator: PropValidator<any>,
+ Component: ComponentClass
+) {
+ // TODO
+}
--- /dev/null
+import { Component, MountedComponent } from './component'
+
+const bindCache = new WeakMap()
+
+function getBoundMethod(fn: Function, target: any, receiver: any): Function {
+ let boundMethodsForTarget = bindCache.get(target)
+ if (boundMethodsForTarget === void 0) {
+ bindCache.set(target, (boundMethodsForTarget = new Map()))
+ }
+ let boundFn = boundMethodsForTarget.get(fn)
+ if (boundFn === void 0) {
+ boundMethodsForTarget.set(fn, (boundFn = fn.bind(receiver)))
+ }
+ return boundFn
+}
+
+const renderProxyHandlers = {
+ get(target: MountedComponent, key: string, receiver: any) {
+ if (key === '_self') {
+ return target
+ } else if (
+ target._rawData !== null &&
+ target._rawData.hasOwnProperty(key)
+ ) {
+ // data
+ return target.$data[key]
+ } else if (
+ target.$options.props != null &&
+ target.$options.props.hasOwnProperty(key)
+ ) {
+ // props are only proxied if declared
+ return target.$props[key]
+ } else if (
+ target._computedGetters !== null &&
+ target._computedGetters.hasOwnProperty(key)
+ ) {
+ // computed
+ return target._computedGetters[key]()
+ } else {
+ if (__DEV__ && !(key in target)) {
+ // TODO warn non-present property
+ }
+ const value = Reflect.get(target, key, receiver)
+ if (typeof value === 'function') {
+ // auto bind
+ return getBoundMethod(value, target, receiver)
+ } else {
+ return value
+ }
+ }
+ },
+ set(
+ target: MountedComponent,
+ key: string,
+ value: any,
+ receiver: any
+ ): boolean {
+ if (__DEV__) {
+ if (typeof key === 'string' && key[0] === '$') {
+ // TODO warn setting immutable properties
+ return false
+ }
+ if (
+ target.$options.props != null &&
+ target.$options.props.hasOwnProperty(key)
+ ) {
+ // TODO warn props are immutable
+ return false
+ }
+ }
+ if (target._rawData !== null && target._rawData.hasOwnProperty(key)) {
+ target.$data[key] = value
+ return true
+ } else {
+ return Reflect.set(target, key, value, receiver)
+ }
+ }
+}
+
+export function createRenderProxy(instance: Component): MountedComponent {
+ return new Proxy(instance, renderProxyHandlers) as MountedComponent
+}
--- /dev/null
+import { EMPTY_OBJ } from './utils'
+import { MountedComponent } from './component'
+import { observable } from '@vue/observer'
+
+export function initializeState(instance: MountedComponent) {
+ if (instance.data) {
+ instance._rawData = instance.data()
+ instance.$data = observable(instance._rawData)
+ } else {
+ instance.$data = EMPTY_OBJ
+ }
+}
--- /dev/null
+import { VNodeFlags } from './flags'
+import { EMPTY_OBJ } from './utils'
+import { VNode, createFragment } from './vdom'
+import { Component, MountedComponent, ComponentClass } from './component'
+import { createTextVNode, cloneVNode } from './vdom'
+import { initializeState } from './componentState'
+import { initializeProps } from './componentProps'
+import {
+ initializeComputed,
+ getComputedOptions,
+ teardownComputed
+} from './componentComputed'
+import { initializeWatch, teardownWatch } from './componentWatch'
+import { Data, ComponentOptions } from './componentOptions'
+import { createRenderProxy } from './componentProxy'
+
+export function createComponentInstance(
+ vnode: VNode,
+ Component: ComponentClass,
+ parentComponent: MountedComponent | null
+): MountedComponent {
+ const instance = (vnode.children = new Component()) as MountedComponent
+ instance.$parentVNode = vnode
+
+ // renderProxy
+ const proxy = (instance.$proxy = createRenderProxy(instance))
+
+ // pointer management
+ if (parentComponent) {
+ instance.$parent = parentComponent.$proxy
+ instance.$root = parentComponent.$root
+ parentComponent.$children.push(proxy)
+ } else {
+ instance.$root = proxy
+ }
+
+ // lifecycle
+ if (instance.beforeCreate) {
+ instance.beforeCreate.call(proxy)
+ }
+ // TODO provide/inject
+ initializeProps(instance, vnode.data)
+ initializeState(instance)
+ initializeComputed(instance, getComputedOptions(Component))
+ initializeWatch(instance, instance.$options.watch)
+ instance.$slots = vnode.slots || EMPTY_OBJ
+ if (instance.created) {
+ instance.created.call(proxy)
+ }
+
+ return instance as MountedComponent
+}
+
+export function renderInstanceRoot(instance: MountedComponent) {
+ // TODO handle render error
+ return normalizeComponentRoot(
+ instance.render.call(instance.$proxy, instance.$props, instance.$slots),
+ instance.$parentVNode
+ )
+}
+
+export function teardownComponentInstance(instance: MountedComponent) {
+ const parentComponent = instance.$parent && instance.$parent._self
+ if (parentComponent && !parentComponent._destroyed) {
+ parentComponent.$children.splice(
+ parentComponent.$children.indexOf(instance.$proxy),
+ 1
+ )
+ }
+ teardownComputed(instance)
+ teardownWatch(instance)
+}
+
+export function normalizeComponentRoot(
+ vnode: any,
+ componentVNode: VNode | null
+): VNode {
+ if (vnode == null) {
+ vnode = createTextVNode('')
+ } else if (typeof vnode !== 'object') {
+ vnode = createTextVNode(vnode + '')
+ } else if (Array.isArray(vnode)) {
+ vnode = createFragment(vnode)
+ } else {
+ const { flags } = vnode
+ // parentVNode data merge down
+ if (
+ componentVNode &&
+ (flags & VNodeFlags.COMPONENT || flags & VNodeFlags.ELEMENT)
+ ) {
+ const parentData = componentVNode.data || EMPTY_OBJ
+ const childData = vnode.data || EMPTY_OBJ
+ let extraData: any = null
+ for (const key in parentData) {
+ // class/style bindings on parentVNode are merged down to child
+ // component root.
+ if (key === 'class') {
+ ;(extraData || (extraData = {})).class = childData.class
+ ? [].concat(childData.class, parentData.class)
+ : parentData.class
+ } else if (key === 'style') {
+ ;(extraData || (extraData = {})).style = childData.style
+ ? [].concat(childData.style, parentData.style)
+ : parentData.style
+ } else if (key.startsWith('nativeOn')) {
+ // nativeOn* handlers are merged down to child root as native listeners
+ const event = 'on' + key.slice(8)
+ ;(extraData || (extraData = {}))[event] = childData.event
+ ? [].concat(childData.event, parentData[key])
+ : parentData[key]
+ }
+ }
+ if (extraData) {
+ vnode = cloneVNode(vnode, extraData)
+ }
+ if (vnode.el) {
+ vnode = cloneVNode(vnode)
+ }
+ if (flags & VNodeFlags.COMPONENT) {
+ vnode.parentVNode = componentVNode
+ }
+ } else if (vnode.el) {
+ vnode = cloneVNode(vnode)
+ }
+ }
+ return vnode
+}
+
+export function shouldUpdateFunctionalComponent(
+ prevProps: Data | null,
+ nextProps: Data | null
+): boolean {
+ if (prevProps === nextProps) {
+ return false
+ }
+ if (prevProps === null) {
+ return nextProps !== null
+ }
+ if (nextProps === null) {
+ return prevProps !== null
+ }
+ let shouldUpdate = true
+ const nextKeys = Object.keys(nextProps)
+ if (nextKeys.length === Object.keys(prevProps).length) {
+ shouldUpdate = false
+ for (let i = 0; i < nextKeys.length; i++) {
+ const key = nextKeys[i]
+ if (nextProps[key] !== prevProps[key]) {
+ shouldUpdate = true
+ }
+ }
+ }
+ return shouldUpdate
+}
+
+export function createComponentClassFromOptions(
+ options: ComponentOptions
+): ComponentClass {
+ class ObjectComponent extends Component {
+ constructor() {
+ super()
+ this.$options = options
+ }
+ }
+ for (const key in options) {
+ const value = options[key]
+ if (typeof value === 'function') {
+ ;(ObjectComponent.prototype as any)[key] = value
+ }
+ if (key === 'computed') {
+ const isGet = typeof value === 'function'
+ Object.defineProperty(ObjectComponent.prototype, key, {
+ configurable: true,
+ get: isGet ? value : value.get,
+ set: isGet ? undefined : value.set
+ })
+ }
+ }
+ return ObjectComponent as ComponentClass
+}
--- /dev/null
+import { MountedComponent } from './component'
+import { ComponentWatchOptions } from './componentOptions'
+import { autorun, stop, Autorun } from '@vue/observer'
+
+export function initializeWatch(
+ instance: MountedComponent,
+ options: ComponentWatchOptions | undefined
+) {
+ if (options !== void 0) {
+ for (const key in options) {
+ setupWatcher(instance, key, options[key])
+ }
+ }
+}
+
+// TODO deep watch
+export function setupWatcher(
+ instance: MountedComponent,
+ keyOrFn: string | Function,
+ cb: Function
+): () => void {
+ const handles = instance._watchHandles || (instance._watchHandles = new Set())
+ const proxy = instance.$proxy
+ const rawGetter =
+ typeof keyOrFn === 'string'
+ ? () => proxy[keyOrFn]
+ : () => keyOrFn.call(proxy)
+ let oldValue: any
+ const runner = autorun(rawGetter, {
+ scheduler: (runner: Autorun) => {
+ const newValue = runner()
+ if (newValue !== oldValue) {
+ cb(newValue, oldValue)
+ oldValue = newValue
+ }
+ }
+ })
+ oldValue = runner()
+ handles.add(runner)
+ return () => {
+ stop(runner)
+ handles.delete(runner)
+ }
+}
+
+export function teardownWatch(instance: MountedComponent) {
+ if (instance._watchHandles !== null) {
+ instance._watchHandles.forEach(stop)
+ }
+}
--- /dev/null
+import { autorun, stop } from '@vue/observer'
+import { VNodeFlags, ChildrenFlags } from './flags'
+import { EMPTY_OBJ, isReservedProp } from './utils'
+import {
+ VNode,
+ MountedVNode,
+ MountedVNodes,
+ RenderNode,
+ createTextVNode,
+ cloneVNode,
+ Ref,
+ VNodeChildren,
+ RenderFragment
+} from './vdom'
+import {
+ MountedComponent,
+ FunctionalComponent,
+ ComponentClass
+} from './component'
+import { updateProps } from './componentProps'
+import {
+ renderInstanceRoot,
+ createComponentInstance,
+ teardownComponentInstance,
+ normalizeComponentRoot,
+ shouldUpdateFunctionalComponent
+} from './componentUtils'
+
+interface RendererOptions {
+ queueJob: (fn: () => void, postFlushJob?: () => void) => void
+ nodeOps: {
+ createElement: (tag: string, isSVG?: boolean) => any
+ createText: (text: string) => any
+ setText: (node: any, text: string) => void
+ appendChild: (parent: any, child: any) => void
+ insertBefore: (parent: any, child: any, ref: any) => void
+ replaceChild: (parent: any, oldChild: any, newChild: any) => void
+ removeChild: (parent: any, child: any) => void
+ clearContent: (node: any) => void
+ parentNode: (node: any) => any
+ nextSibling: (node: any) => any
+ querySelector: (selector: string) => any
+ }
+ patchData: (
+ el: any,
+ key: string,
+ prevValue: any,
+ nextValue: any,
+ preVNode: VNode | null,
+ nextVNode: VNode,
+ isSVG: boolean,
+ // passed for DOM operations that removes child content
+ // e.g. innerHTML & textContent
+ unmountChildren: (children: VNode[], childFlags: ChildrenFlags) => void
+ ) => void
+ teardownVNode?: (vnode: VNode) => void
+}
+
+// The whole mounting / patching / unmouting logic is placed inside this
+// single function so that we can create multiple renderes with different
+// platform definitions. This allows for use cases like creating a test
+// renderer alongside an actual renderer.
+export function createRenderer(options: RendererOptions) {
+ const {
+ queueJob,
+ nodeOps: {
+ createElement: platformCreateElement,
+ createText: platformCreateText,
+ setText: platformSetText,
+ appendChild: platformAppendChild,
+ insertBefore: platformInsertBefore,
+ replaceChild: platformReplaceChild,
+ removeChild: platformRemoveChild,
+ clearContent: platformClearContent,
+ parentNode: platformParentNode,
+ nextSibling: platformNextSibling,
+ querySelector: platformQuerySelector
+ },
+ patchData: platformPatchData,
+ teardownVNode
+ } = options
+
+ // Node operations (shimmed to handle virtual fragments) ---------------------
+
+ function appendChild(container: RenderNode, el: RenderNode | RenderFragment) {
+ if (el.$f) {
+ for (let i = 0; i < el.children.length; i++) {
+ appendChild(container, el.children[i])
+ }
+ } else {
+ platformAppendChild(container, el)
+ }
+ }
+
+ function insertBefore(
+ container: RenderNode,
+ el: RenderNode | RenderFragment,
+ ref: RenderNode | RenderFragment
+ ) {
+ while (ref.$f) {
+ ref = ref.children[0]
+ }
+ if (el.$f) {
+ for (let i = 0; i < el.children.length; i++) {
+ insertBefore(container, el.children[i], ref)
+ }
+ } else {
+ platformInsertBefore(container, el, ref)
+ }
+ }
+
+ function removeChild(container: RenderNode, el: RenderNode | RenderFragment) {
+ if (el.$f) {
+ for (let i = 0; i < el.children.length; i++) {
+ removeChild(container, el.children[i])
+ }
+ } else {
+ platformRemoveChild(container, el)
+ }
+ }
+
+ function replaceChild(
+ container: RenderNode,
+ oldChild: RenderNode | RenderFragment,
+ newChild: RenderNode | RenderFragment
+ ) {
+ if (oldChild.$f || newChild.$f) {
+ insertOrAppend(container, newChild, oldChild)
+ removeChild(container, oldChild)
+ } else {
+ platformReplaceChild(container, oldChild, newChild)
+ }
+ }
+
+ function parentNode(el: RenderNode | RenderFragment): RenderNode {
+ while (el.$f) {
+ el = el.children[0]
+ }
+ return platformParentNode(el)
+ }
+
+ function insertOrAppend(
+ container: RenderNode,
+ newNode: RenderNode | RenderFragment,
+ refNode: RenderNode | RenderFragment | null
+ ) {
+ // TODO special case for Fragment
+ if (refNode === null) {
+ appendChild(container, newNode)
+ } else {
+ insertBefore(container, newNode, refNode)
+ }
+ }
+
+ // lifecycle hooks -----------------------------------------------------------
+
+ const hooks: Function[] = []
+
+ function queueHook(fn: Function) {
+ hooks.push(fn)
+ }
+
+ function flushHooks() {
+ let fn
+ while ((fn = hooks.shift())) {
+ fn()
+ }
+ }
+
+ // mounting ------------------------------------------------------------------
+
+ function mount(
+ vnode: VNode,
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ): RenderNode | RenderFragment {
+ const { flags } = vnode
+ if (flags & VNodeFlags.ELEMENT) {
+ return mountElement(vnode, container, parentComponent, isSVG, endNode)
+ } else if (flags & VNodeFlags.COMPONENT) {
+ return mountComponent(vnode, container, parentComponent, isSVG, endNode)
+ } else if (flags & VNodeFlags.TEXT) {
+ return mountText(vnode, container, endNode)
+ } else if (flags & VNodeFlags.FRAGMENT) {
+ return mountFragment(vnode, container, parentComponent, isSVG, endNode)
+ } else if (flags & VNodeFlags.PORTAL) {
+ return mountPortal(vnode, container, parentComponent)
+ } else {
+ return platformCreateText('')
+ }
+ }
+
+ function mountArrayChildren(
+ children: VNode[],
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ) {
+ for (let i = 0; i < children.length; i++) {
+ let child = children[i]
+ if (child.el) {
+ children[i] = child = cloneVNode(child)
+ }
+ mount(children[i], container, parentComponent, isSVG, endNode)
+ }
+ }
+
+ function mountElement(
+ vnode: VNode,
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ): RenderNode {
+ const { flags, tag, data, children, childFlags, ref } = vnode
+ isSVG = isSVG || (flags & VNodeFlags.ELEMENT_SVG) > 0
+ const el = (vnode.el = platformCreateElement(tag as string, isSVG))
+ if (data != null) {
+ for (const key in data) {
+ patchData(el, key, null, data[key], null, vnode, isSVG)
+ }
+ }
+ if (childFlags !== ChildrenFlags.NO_CHILDREN) {
+ const hasSVGChildren = isSVG && tag !== 'foreignObject'
+ if (childFlags & ChildrenFlags.SINGLE_VNODE) {
+ mount(children as VNode, el, parentComponent, hasSVGChildren, endNode)
+ } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ mountArrayChildren(
+ children as VNode[],
+ el,
+ parentComponent,
+ hasSVGChildren,
+ endNode
+ )
+ }
+ }
+ if (container != null) {
+ insertOrAppend(container, el, endNode)
+ }
+ if (ref) {
+ mountRef(ref, el)
+ }
+ return el
+ }
+
+ function mountRef(ref: Ref, el: RenderNode | MountedComponent) {
+ queueHook(() => {
+ ref(el)
+ })
+ }
+
+ function mountComponent(
+ vnode: VNode,
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ): RenderNode | RenderFragment {
+ let el: RenderNode | RenderFragment
+ const { flags, tag, data, slots } = vnode
+ if (flags & VNodeFlags.COMPONENT_STATEFUL) {
+ el = mountComponentInstance(
+ vnode,
+ tag as ComponentClass,
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ } else {
+ // functional component
+ const subTree = (vnode.children = normalizeComponentRoot(
+ (tag as FunctionalComponent)(data || EMPTY_OBJ, slots || EMPTY_OBJ),
+ vnode
+ ))
+ el = vnode.el = mount(subTree, null, parentComponent, isSVG, null)
+ }
+ if (container != null) {
+ insertOrAppend(container, el, endNode)
+ }
+ return el
+ }
+
+ function mountText(
+ vnode: VNode,
+ container: RenderNode | null,
+ endNode: RenderNode | RenderFragment | null
+ ): RenderNode {
+ const el = (vnode.el = platformCreateText(vnode.children as string))
+ if (container != null) {
+ insertOrAppend(container, el, endNode)
+ }
+ return el
+ }
+
+ function mountFragment(
+ vnode: VNode,
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ): RenderFragment {
+ const { children, childFlags } = vnode
+ const fragment: RenderFragment = (vnode.el = {
+ $f: true,
+ children: []
+ })
+ const fragmentChildren = fragment.children
+ if (childFlags & ChildrenFlags.SINGLE_VNODE) {
+ fragmentChildren.push(
+ mount(children as VNode, container, parentComponent, isSVG, endNode)
+ )
+ } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ mountArrayChildren(
+ children as VNode[],
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ for (let i = 0; i < (children as MountedVNodes).length; i++) {
+ fragmentChildren.push((children as MountedVNodes)[i].el)
+ }
+ } else {
+ // ensure at least one children so that it can be used as a ref node
+ // during insertions
+ fragmentChildren.push(mountText(createTextVNode(''), container, endNode))
+ }
+ return fragment
+ }
+
+ function mountPortal(
+ vnode: VNode,
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null
+ ): RenderNode {
+ const { tag, children, childFlags, ref } = vnode
+ const target = typeof tag === 'string' ? platformQuerySelector(tag) : tag
+
+ if (__DEV__ && !target) {
+ // TODO warn poartal target not found
+ }
+
+ if (childFlags & ChildrenFlags.SINGLE_VNODE) {
+ mount(
+ children as VNode,
+ target as RenderNode,
+ parentComponent,
+ false,
+ null
+ )
+ } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ mountArrayChildren(
+ children as VNode[],
+ target as RenderNode,
+ parentComponent,
+ false,
+ null
+ )
+ }
+ if (ref) {
+ mountRef(ref, target as RenderNode)
+ }
+ return (vnode.el = mountText(createTextVNode(''), container, null))
+ }
+
+ // patching ------------------------------------------------------------------
+
+ function patchData(
+ el: RenderNode,
+ key: string,
+ prevValue: any,
+ nextValue: any,
+ preVNode: VNode | null,
+ nextVNode: VNode,
+ isSVG: boolean
+ ) {
+ if (isReservedProp(key)) {
+ return
+ }
+ platformPatchData(
+ el,
+ key,
+ prevValue,
+ nextValue,
+ preVNode,
+ nextVNode,
+ isSVG,
+ unmountChildren
+ )
+ }
+
+ function patch(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean
+ ) {
+ const nextFlags = nextVNode.flags
+ const prevFlags = prevVNode.flags
+
+ if (prevFlags !== nextFlags) {
+ replaceVNode(prevVNode, nextVNode, container, parentComponent, isSVG)
+ } else if (nextFlags & VNodeFlags.ELEMENT) {
+ patchElement(prevVNode, nextVNode, container, parentComponent, isSVG)
+ } else if (nextFlags & VNodeFlags.COMPONENT) {
+ patchComponent(prevVNode, nextVNode, container, parentComponent, isSVG)
+ } else if (nextFlags & VNodeFlags.TEXT) {
+ patchText(prevVNode, nextVNode)
+ } else if (nextFlags & VNodeFlags.FRAGMENT) {
+ patchFragment(prevVNode, nextVNode, container, parentComponent, isSVG)
+ } else if (nextFlags & VNodeFlags.PORTAL) {
+ patchPortal(prevVNode, nextVNode, parentComponent)
+ }
+ }
+
+ function patchElement(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean
+ ) {
+ const { flags, tag } = nextVNode
+ isSVG = isSVG || (flags & VNodeFlags.ELEMENT_SVG) > 0
+
+ if (prevVNode.tag !== tag) {
+ replaceVNode(prevVNode, nextVNode, container, parentComponent, isSVG)
+ return
+ }
+
+ const el = (nextVNode.el = prevVNode.el) as RenderNode
+
+ // data
+ const prevData = prevVNode.data
+ const nextData = nextVNode.data
+ if (prevData !== nextData) {
+ const prevDataOrEmpty = prevData || EMPTY_OBJ
+ const nextDataOrEmpty = nextData || EMPTY_OBJ
+ if (nextDataOrEmpty !== EMPTY_OBJ) {
+ for (const key in nextDataOrEmpty) {
+ const prevValue = prevDataOrEmpty[key]
+ const nextValue = nextDataOrEmpty[key]
+ if (prevValue !== nextValue) {
+ patchData(
+ el,
+ key,
+ prevValue,
+ nextValue,
+ prevVNode,
+ nextVNode,
+ isSVG
+ )
+ }
+ }
+ }
+ if (prevDataOrEmpty !== EMPTY_OBJ) {
+ for (const key in prevDataOrEmpty) {
+ const prevValue = prevDataOrEmpty[key]
+ if (prevValue != null && !nextDataOrEmpty.hasOwnProperty(key)) {
+ patchData(el, key, prevValue, null, prevVNode, nextVNode, isSVG)
+ }
+ }
+ }
+ }
+
+ // children
+ patchChildren(
+ prevVNode.childFlags,
+ nextVNode.childFlags,
+ prevVNode.children,
+ nextVNode.children,
+ el,
+ parentComponent,
+ isSVG && nextVNode.tag !== 'foreignObject',
+ null
+ )
+ }
+
+ function patchComponent(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean
+ ) {
+ const { tag, flags } = nextVNode
+ if (tag !== prevVNode.tag) {
+ replaceVNode(prevVNode, nextVNode, container, parentComponent, isSVG)
+ } else if (flags & VNodeFlags.COMPONENT_STATEFUL) {
+ patchStatefulComponent(prevVNode, nextVNode)
+ } else {
+ patchFunctionalComponent(
+ prevVNode,
+ nextVNode,
+ container,
+ parentComponent,
+ isSVG
+ )
+ }
+ }
+
+ function patchStatefulComponent(prevVNode: VNode, nextVNode: VNode) {
+ const { childFlags: prevChildFlags } = prevVNode
+ const {
+ data: nextProps,
+ slots: nextSlots,
+ childFlags: nextChildFlags
+ } = nextVNode
+
+ const instance = (nextVNode.children =
+ prevVNode.children) as MountedComponent
+ instance.$slots = nextSlots || EMPTY_OBJ
+ instance.$parentVNode = nextVNode
+
+ // Update props. This will trigger child update if necessary.
+ if (nextProps !== null) {
+ updateProps(instance, nextProps)
+ }
+
+ // If has different slots content, or has non-compiled slots,
+ // the child needs to be force updated. It's ok to call $forceUpdate
+ // again even if props update has already queued an update, as the
+ // scheduler will not queue the same update twice.
+ const shouldForceUpdate =
+ prevChildFlags !== nextChildFlags ||
+ (nextChildFlags & ChildrenFlags.DYNAMIC_SLOTS) > 0
+ if (shouldForceUpdate) {
+ instance.$forceUpdate()
+ } else if (instance.$vnode.flags & VNodeFlags.COMPONENT) {
+ instance.$vnode.parentVNode = nextVNode
+ }
+ nextVNode.el = instance.$vnode.el
+ }
+
+ function patchFunctionalComponent(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean
+ ) {
+ // functional component tree is stored on the vnode as `children`
+ const { data: prevProps, slots: prevSlots } = prevVNode
+ const { data: nextProps, slots: nextSlots } = nextVNode
+ const render = nextVNode.tag as FunctionalComponent
+ const prevTree = prevVNode.children as VNode
+
+ let shouldUpdate = true
+ if (render.pure && prevSlots == null && nextSlots == null) {
+ shouldUpdate = shouldUpdateFunctionalComponent(prevProps, nextProps)
+ }
+
+ if (shouldUpdate) {
+ const nextTree = (nextVNode.children = normalizeComponentRoot(
+ render(nextProps || EMPTY_OBJ, nextSlots || EMPTY_OBJ),
+ nextVNode
+ ))
+ patch(prevTree, nextTree, container, parentComponent, isSVG)
+ nextVNode.el = nextTree.el
+ } else if (prevTree.flags & VNodeFlags.COMPONENT) {
+ // functional component returned another component
+ prevTree.parentVNode = nextVNode
+ }
+ }
+
+ function patchFragment(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean
+ ) {
+ // determine the tail node of the previous fragment,
+ // then retrieve its next sibling to use as the end node for patchChildren.
+ let prevElement = prevVNode.el as RenderNode | RenderFragment
+ while (prevElement.$f) {
+ prevElement = prevElement.children[prevElement.children.length - 1]
+ }
+ const { children, childFlags } = nextVNode
+ patchChildren(
+ prevVNode.childFlags,
+ childFlags,
+ prevVNode.children,
+ children,
+ container,
+ parentComponent,
+ isSVG,
+ platformNextSibling(prevElement)
+ )
+ nextVNode.el = prevVNode.el as RenderFragment
+ const fragmentChildren: (
+ | RenderNode
+ | RenderFragment)[] = (nextVNode.el.children = [])
+ if (childFlags & ChildrenFlags.SINGLE_VNODE) {
+ fragmentChildren.push((children as MountedVNode).el)
+ } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ for (let i = 0; i < (children as MountedVNodes).length; i++) {
+ fragmentChildren.push((children as MountedVNodes)[i].el)
+ }
+ } else {
+ fragmentChildren.push(mountText(createTextVNode(''), null, null))
+ }
+ }
+
+ function patchText(prevVNode: VNode, nextVNode: VNode) {
+ const el = (nextVNode.el = prevVNode.el) as RenderNode
+ const nextText = nextVNode.children
+ if (nextText !== prevVNode.children) {
+ platformSetText(el, nextText as string)
+ }
+ }
+
+ function patchPortal(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ parentComponent: MountedComponent | null
+ ) {
+ const prevContainer = prevVNode.tag as RenderNode
+ const nextContainer = nextVNode.tag as RenderNode
+ const nextChildren = nextVNode.children
+ patchChildren(
+ prevVNode.childFlags,
+ nextVNode.childFlags,
+ prevVNode.children,
+ nextChildren,
+ prevContainer,
+ parentComponent,
+ false,
+ null
+ )
+ nextVNode.el = prevVNode.el
+ if (nextContainer !== prevContainer) {
+ switch (nextVNode.childFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ appendChild(nextContainer, (nextChildren as MountedVNode).el)
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ break
+ default:
+ for (let i = 0; i < (nextChildren as MountedVNodes).length; i++) {
+ appendChild(nextContainer, (nextChildren as MountedVNodes)[i].el)
+ }
+ break
+ }
+ }
+ }
+
+ function replaceVNode(
+ prevVNode: VNode,
+ nextVNode: VNode,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean
+ ) {
+ unmount(prevVNode)
+ replaceChild(
+ container,
+ prevVNode.el as RenderNode | RenderFragment,
+ mount(nextVNode, null, parentComponent, isSVG, null)
+ )
+ }
+
+ function patchChildren(
+ prevChildFlags: ChildrenFlags,
+ nextChildFlags: ChildrenFlags,
+ prevChildren: VNodeChildren,
+ nextChildren: VNodeChildren,
+ container: RenderNode,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ) {
+ switch (prevChildFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ switch (nextChildFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ patch(
+ prevChildren as VNode,
+ nextChildren as VNode,
+ container,
+ parentComponent,
+ isSVG
+ )
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ remove(prevChildren as VNode, container)
+ break
+ default:
+ remove(prevChildren as VNode, container)
+ mountArrayChildren(
+ nextChildren as VNode[],
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ break
+ }
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ switch (nextChildFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ mount(
+ nextChildren as VNode,
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ break
+ default:
+ mountArrayChildren(
+ nextChildren as VNode[],
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ break
+ }
+ break
+ default:
+ // MULTIPLE_CHILDREN
+ if (nextChildFlags === ChildrenFlags.SINGLE_VNODE) {
+ removeAll(prevChildren as MountedVNodes, container, endNode)
+ mount(
+ nextChildren as VNode,
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ } else if (nextChildFlags === ChildrenFlags.NO_CHILDREN) {
+ removeAll(prevChildren as MountedVNodes, container, endNode)
+ } else {
+ const prevLength = (prevChildren as VNode[]).length
+ const nextLength = (nextChildren as VNode[]).length
+ if (prevLength === 0) {
+ if (nextLength > 0) {
+ mountArrayChildren(
+ nextChildren as VNode[],
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ }
+ } else if (nextLength === 0) {
+ removeAll(prevChildren as MountedVNodes, container, endNode)
+ } else if (
+ prevChildFlags === ChildrenFlags.KEYED_VNODES &&
+ nextChildFlags === ChildrenFlags.KEYED_VNODES
+ ) {
+ patchKeyedChildren(
+ prevChildren as VNode[],
+ nextChildren as VNode[],
+ container,
+ prevLength,
+ nextLength,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ } else {
+ patchNonKeyedChildren(
+ prevChildren as VNode[],
+ nextChildren as VNode[],
+ container,
+ prevLength,
+ nextLength,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ }
+ }
+ break
+ }
+ }
+
+ function patchNonKeyedChildren(
+ prevChildren: VNode[],
+ nextChildren: VNode[],
+ container: RenderNode,
+ prevLength: number,
+ nextLength: number,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ) {
+ const commonLength = prevLength > nextLength ? nextLength : prevLength
+ let i = 0
+ let nextChild
+ let prevChild
+ for (i; i < commonLength; i++) {
+ nextChild = nextChildren[i]
+ prevChild = prevChildren[i]
+ if (nextChild.el) {
+ nextChildren[i] = nextChild = cloneVNode(nextChild)
+ }
+ patch(prevChild, nextChild, container, parentComponent, isSVG)
+ prevChildren[i] = nextChild
+ }
+ if (prevLength < nextLength) {
+ for (i = commonLength; i < nextLength; i++) {
+ nextChild = nextChildren[i]
+ if (nextChild.el) {
+ nextChildren[i] = nextChild = cloneVNode(nextChild)
+ }
+ mount(nextChild, container, parentComponent, isSVG, endNode)
+ }
+ } else if (prevLength > nextLength) {
+ for (i = commonLength; i < prevLength; i++) {
+ remove(prevChildren[i], container)
+ }
+ }
+ }
+
+ function patchKeyedChildren(
+ prevChildren: VNode[],
+ nextChildren: VNode[],
+ container: RenderNode,
+ prevLength: number,
+ nextLength: number,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ) {
+ let prevEnd = prevLength - 1
+ let nextEnd = nextLength - 1
+ let i
+ let j = 0
+ let prevVNode = prevChildren[j]
+ let nextVNode = nextChildren[j]
+ let nextPos
+
+ outer: {
+ // Sync nodes with the same key at the beginning.
+ while (prevVNode.key === nextVNode.key) {
+ if (nextVNode.el) {
+ nextChildren[j] = nextVNode = cloneVNode(nextVNode)
+ }
+ patch(prevVNode, nextVNode, container, parentComponent, isSVG)
+ prevChildren[j] = nextVNode
+ j++
+ if (j > prevEnd || j > nextEnd) {
+ break outer
+ }
+ prevVNode = prevChildren[j]
+ nextVNode = nextChildren[j]
+ }
+
+ prevVNode = prevChildren[prevEnd]
+ nextVNode = nextChildren[nextEnd]
+
+ // Sync nodes with the same key at the end.
+ while (prevVNode.key === nextVNode.key) {
+ if (nextVNode.el) {
+ nextChildren[nextEnd] = nextVNode = cloneVNode(nextVNode)
+ }
+ patch(prevVNode, nextVNode, container, parentComponent, isSVG)
+ prevChildren[prevEnd] = nextVNode
+ prevEnd--
+ nextEnd--
+ if (j > prevEnd || j > nextEnd) {
+ break outer
+ }
+ prevVNode = prevChildren[prevEnd]
+ nextVNode = nextChildren[nextEnd]
+ }
+ }
+
+ if (j > prevEnd) {
+ if (j <= nextEnd) {
+ nextPos = nextEnd + 1
+ const nextNode =
+ nextPos < nextLength ? nextChildren[nextPos].el : endNode
+ while (j <= nextEnd) {
+ nextVNode = nextChildren[j]
+ if (nextVNode.el) {
+ nextChildren[j] = nextVNode = cloneVNode(nextVNode)
+ }
+ j++
+ mount(nextVNode, container, parentComponent, isSVG, nextNode)
+ }
+ }
+ } else if (j > nextEnd) {
+ while (j <= prevEnd) {
+ remove(prevChildren[j++], container)
+ }
+ } else {
+ let prevStart = j
+ const nextStart = j
+ const prevLeft = prevEnd - j + 1
+ const nextLeft = nextEnd - j + 1
+ const sources: number[] = []
+ for (i = 0; i < nextLeft; i++) {
+ sources.push(0)
+ }
+ // Keep track if its possible to remove whole DOM using textContent = ''
+ let canRemoveWholeContent = prevLeft === prevLength
+ let moved = false
+ let pos = 0
+ let patched = 0
+
+ // When sizes are small, just loop them through
+ if (nextLength < 4 || (prevLeft | nextLeft) < 32) {
+ for (i = prevStart; i <= prevEnd; i++) {
+ prevVNode = prevChildren[i]
+ if (patched < nextLeft) {
+ for (j = nextStart; j <= nextEnd; j++) {
+ nextVNode = nextChildren[j]
+ if (prevVNode.key === nextVNode.key) {
+ sources[j - nextStart] = i + 1
+ if (canRemoveWholeContent) {
+ canRemoveWholeContent = false
+ while (i > prevStart) {
+ remove(prevChildren[prevStart++], container)
+ }
+ }
+ if (pos > j) {
+ moved = true
+ } else {
+ pos = j
+ }
+ if (nextVNode.el) {
+ nextChildren[j] = nextVNode = cloneVNode(nextVNode)
+ }
+ patch(prevVNode, nextVNode, container, parentComponent, isSVG)
+ patched++
+ break
+ }
+ }
+ if (!canRemoveWholeContent && j > nextEnd) {
+ remove(prevVNode, container)
+ }
+ } else if (!canRemoveWholeContent) {
+ remove(prevVNode, container)
+ }
+ }
+ } else {
+ const keyIndex: Record<string, number> = {}
+
+ // Map keys by their index
+ for (i = nextStart; i <= nextEnd; i++) {
+ keyIndex[nextChildren[i].key as string] = i
+ }
+
+ // Try to patch same keys
+ for (i = prevStart; i <= prevEnd; i++) {
+ prevVNode = prevChildren[i]
+
+ if (patched < nextLeft) {
+ j = keyIndex[prevVNode.key as string]
+
+ if (j !== void 0) {
+ if (canRemoveWholeContent) {
+ canRemoveWholeContent = false
+ while (i > prevStart) {
+ remove(prevChildren[prevStart++], container)
+ }
+ }
+ nextVNode = nextChildren[j]
+ sources[j - nextStart] = i + 1
+ if (pos > j) {
+ moved = true
+ } else {
+ pos = j
+ }
+ if (nextVNode.el) {
+ nextChildren[j] = nextVNode = cloneVNode(nextVNode)
+ }
+ patch(prevVNode, nextVNode, container, parentComponent, isSVG)
+ patched++
+ } else if (!canRemoveWholeContent) {
+ remove(prevVNode, container)
+ }
+ } else if (!canRemoveWholeContent) {
+ remove(prevVNode, container)
+ }
+ }
+ }
+ // fast-path: if nothing patched remove all old and add all new
+ if (canRemoveWholeContent) {
+ removeAll(prevChildren as MountedVNodes, container, endNode)
+ mountArrayChildren(
+ nextChildren,
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ } else {
+ if (moved) {
+ const seq = lis(sources)
+ j = seq.length - 1
+ for (i = nextLeft - 1; i >= 0; i--) {
+ if (sources[i] === 0) {
+ pos = i + nextStart
+ nextVNode = nextChildren[pos]
+ if (nextVNode.el) {
+ nextChildren[pos] = nextVNode = cloneVNode(nextVNode)
+ }
+ nextPos = pos + 1
+ mount(
+ nextVNode,
+ container,
+ parentComponent,
+ isSVG,
+ nextPos < nextLength ? nextChildren[nextPos].el : endNode
+ )
+ } else if (j < 0 || i !== seq[j]) {
+ pos = i + nextStart
+ nextVNode = nextChildren[pos]
+ nextPos = pos + 1
+ insertOrAppend(
+ container,
+ nextVNode.el as RenderNode | RenderFragment,
+ nextPos < nextLength ? nextChildren[nextPos].el : endNode
+ )
+ } else {
+ j--
+ }
+ }
+ } else if (patched !== nextLeft) {
+ // when patched count doesn't match b length we need to insert those
+ // new ones loop backwards so we can use insertBefore
+ for (i = nextLeft - 1; i >= 0; i--) {
+ if (sources[i] === 0) {
+ pos = i + nextStart
+ nextVNode = nextChildren[pos]
+ if (nextVNode.el) {
+ nextChildren[pos] = nextVNode = cloneVNode(nextVNode)
+ }
+ nextPos = pos + 1
+ mount(
+ nextVNode,
+ container,
+ parentComponent,
+ isSVG,
+ nextPos < nextLength ? nextChildren[nextPos].el : endNode
+ )
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // https://en.wikipedia.org/wiki/Longest_increasing_subsequence
+ function lis(arr: number[]): number[] {
+ const p = arr.slice()
+ const result = [0]
+ let i
+ let j
+ let u
+ let v
+ let c
+ const len = arr.length
+ for (i = 0; i < len; i++) {
+ const arrI = arr[i]
+ if (arrI !== 0) {
+ j = result[result.length - 1]
+ if (arr[j] < arrI) {
+ p[i] = j
+ result.push(i)
+ continue
+ }
+ u = 0
+ v = result.length - 1
+ while (u < v) {
+ c = ((u + v) / 2) | 0
+ if (arr[result[c]] < arrI) {
+ u = c + 1
+ } else {
+ v = c
+ }
+ }
+ if (arrI < arr[result[u]]) {
+ if (u > 0) {
+ p[i] = result[u - 1]
+ }
+ result[u] = i
+ }
+ }
+ }
+ u = result.length
+ v = result[u - 1]
+ while (u-- > 0) {
+ result[u] = v
+ v = p[v]
+ }
+ return result
+ }
+
+ // unmounting ----------------------------------------------------------------
+
+ function unmount(vnode: VNode) {
+ const { flags, children, childFlags, ref } = vnode
+ if (flags & VNodeFlags.ELEMENT || flags & VNodeFlags.FRAGMENT) {
+ unmountChildren(children as VNodeChildren, childFlags)
+ if (teardownVNode !== void 0) {
+ teardownVNode(vnode)
+ }
+ } else if (flags & VNodeFlags.COMPONENT) {
+ if (flags & VNodeFlags.COMPONENT_STATEFUL) {
+ unmountComponentInstance(children as MountedComponent)
+ } else {
+ unmount(children as VNode)
+ }
+ } else if (flags & VNodeFlags.PORTAL) {
+ if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ removeAll(children as MountedVNodes, vnode.tag as RenderNode, null)
+ } else if (childFlags === ChildrenFlags.SINGLE_VNODE) {
+ remove(children as VNode, vnode.tag as RenderNode)
+ }
+ }
+ if (ref) {
+ ref(null)
+ }
+ }
+
+ function unmountChildren(children: VNodeChildren, childFlags: ChildrenFlags) {
+ if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ unmountArrayChildren(children as VNode[])
+ } else if (childFlags === ChildrenFlags.SINGLE_VNODE) {
+ unmount(children as VNode)
+ }
+ }
+
+ function unmountArrayChildren(children: VNode[]) {
+ for (let i = 0; i < children.length; i++) {
+ unmount(children[i])
+ }
+ }
+
+ function remove(vnode: VNode, container: RenderNode) {
+ unmount(vnode)
+ if (container && vnode.el) {
+ removeChild(container, vnode.el)
+ vnode.el = null
+ }
+ }
+
+ function removeAll(
+ children: MountedVNodes,
+ container: RenderNode,
+ ref: RenderNode | RenderFragment | null
+ ) {
+ unmountArrayChildren(children)
+ if (ref === null) {
+ platformClearContent(container)
+ } else {
+ for (let i = 0; i < children.length; i++) {
+ removeChild(container, children[i].el as RenderNode | RenderFragment)
+ }
+ }
+ }
+
+ // Component lifecycle -------------------------------------------------------
+
+ function mountComponentInstance(
+ parentVNode: VNode,
+ Component: ComponentClass,
+ container: RenderNode | null,
+ parentComponent: MountedComponent | null,
+ isSVG: boolean,
+ endNode: RenderNode | RenderFragment | null
+ ): RenderNode {
+ const instance = createComponentInstance(
+ parentVNode,
+ Component,
+ parentComponent
+ )
+
+ const queueUpdate = (instance.$forceUpdate = () => {
+ queueJob(instance._updateHandle, flushHooks)
+ })
+
+ instance._updateHandle = autorun(
+ () => {
+ if (instance._destroyed) {
+ return
+ }
+ if (instance._mounted) {
+ updateComponentInstance(instance, container, isSVG)
+ } else {
+ // this will be executed synchronously right here
+ instance.$vnode = renderInstanceRoot(instance)
+ parentVNode.el = mount(
+ instance.$vnode,
+ container,
+ instance,
+ isSVG,
+ endNode
+ )
+ instance._mounted = true
+ mountComponentInstanceCallbacks(instance, parentVNode.ref)
+ }
+ },
+ {
+ scheduler: queueUpdate,
+ onTrigger:
+ instance.beforeUpdate && instance.beforeUpdate.bind(instance.$proxy)
+ }
+ )
+
+ return parentVNode.el as RenderNode
+ }
+
+ function mountComponentInstanceCallbacks(
+ instance: MountedComponent,
+ ref: Ref | null
+ ) {
+ if (instance.beforeMount) {
+ instance.beforeMount.call(instance.$proxy)
+ }
+ if (ref) {
+ mountRef(ref, instance)
+ }
+ if (instance.mounted) {
+ queueHook(() => {
+ ;(instance as any).mounted.call(instance.$proxy)
+ })
+ }
+ }
+
+ function updateComponentInstance(
+ instance: MountedComponent,
+ container: RenderNode | null,
+ isSVG: boolean
+ ) {
+ // beforeUpdate is called as the onTrack hook of the instance's reactive
+ // runner
+ const prevVNode = instance.$vnode
+ const nextVNode = (instance.$vnode = renderInstanceRoot(instance))
+ container =
+ container || parentNode(prevVNode.el as RenderNode | RenderFragment)
+ patch(prevVNode, nextVNode, container, instance, isSVG)
+ const el = nextVNode.el as RenderNode
+
+ // recursively update parentVNode el for nested HOCs
+ if ((nextVNode.flags & VNodeFlags.PORTAL) === 0) {
+ let vnode = instance.$parentVNode
+ while (vnode !== null) {
+ if ((vnode.flags & VNodeFlags.COMPONENT) > 0) {
+ vnode.el = el
+ }
+ vnode = vnode.parentVNode
+ }
+ }
+
+ if (instance.updated) {
+ queueHook(() => {
+ ;(instance as any).updated.call(instance.$proxy, nextVNode)
+ })
+ }
+ }
+
+ function unmountComponentInstance(instance: MountedComponent) {
+ if (instance.beforeDestroy) {
+ instance.beforeDestroy.call(instance.$proxy)
+ }
+ if (instance.$vnode) {
+ unmount(instance.$vnode)
+ }
+ stop(instance._updateHandle)
+ teardownComponentInstance(instance)
+ instance._destroyed = true
+ if (instance.destroyed) {
+ instance.destroyed.call(instance.$proxy)
+ }
+ }
+
+ // TODO hydrating ------------------------------------------------------------
+
+ // API -----------------------------------------------------------------------
+
+ function render(vnode: VNode | null, container: RenderNode) {
+ const prevVNode = container.vnode
+ if (vnode && vnode.el) {
+ vnode = cloneVNode(vnode)
+ }
+ if (prevVNode == null) {
+ if (vnode) {
+ mount(vnode, container, null, false, null)
+ container.vnode = vnode
+ }
+ } else {
+ if (vnode) {
+ patch(prevVNode, vnode, container, null, false)
+ container.vnode = vnode
+ } else {
+ remove(prevVNode, container)
+ container.vnode = null
+ }
+ }
+ flushHooks()
+ }
+
+ return { render }
+}
--- /dev/null
+import { MountedComponent } from './component'
+
+export const enum ErrorTypes {
+ LIFECYCLE = 1,
+ RENDER = 2,
+ NATIVE_EVENT_HANDLER = 3,
+ COMPONENT_EVENT_HANDLER = 4
+}
+
+const globalHandlers: Function[] = []
+
+export function globalHandleError(handler: () => void) {
+ globalHandlers.push(handler)
+ return () => {
+ globalHandlers.splice(globalHandlers.indexOf(handler), 1)
+ }
+}
+
+export function handleError(
+ err: Error,
+ instance: MountedComponent,
+ type: ErrorTypes,
+ code: number
+) {
+ // TODO
+}
--- /dev/null
+// vnode flags
+export const enum VNodeFlags {
+ ELEMENT_HTML = 1,
+ ELEMENT_SVG = 1 << 1,
+ ELEMENT = ELEMENT_HTML | ELEMENT_SVG,
+
+ COMPONENT_UNKNOWN = 1 << 2,
+ COMPONENT_STATEFUL = 1 << 3,
+ COMPONENT_FUNCTIONAL = 1 << 4,
+ COMPONENT_ASYNC = 1 << 5,
+ COMPONENT = COMPONENT_UNKNOWN |
+ COMPONENT_STATEFUL |
+ COMPONENT_FUNCTIONAL |
+ COMPONENT_ASYNC,
+
+ TEXT = 1 << 6,
+ FRAGMENT = 1 << 7,
+ PORTAL = 1 << 8
+}
+
+export const enum ChildrenFlags {
+ UNKNOWN_CHILDREN = 0,
+ NO_CHILDREN = 1,
+ SINGLE_VNODE = 1 << 1,
+ KEYED_VNODES = 1 << 2,
+ NONE_KEYED_VNODES = 1 << 3,
+ STABLE_SLOTS = 1 << 4,
+ DYNAMIC_SLOTS = 1 << 5,
+ HAS_SLOTS = STABLE_SLOTS | DYNAMIC_SLOTS,
+ MULTIPLE_VNODES = KEYED_VNODES | NONE_KEYED_VNODES
+}
--- /dev/null
+import { ChildrenFlags } from './flags'
+import { ComponentClass, FunctionalComponent } from './component'
+import { ComponentOptions } from './componentOptions'
+import {
+ VNode,
+ createElementVNode,
+ createComponentVNode,
+ createTextVNode,
+ createFragment,
+ createPortal
+} from './vdom'
+
+export const Fragment = Symbol()
+export const Portal = Symbol()
+
+type ElementType =
+ | string
+ | FunctionalComponent
+ | ComponentClass
+ | ComponentOptions
+ | typeof Fragment
+ | typeof Portal
+
+export interface createElement {
+ (tag: ElementType, data: any, children: any): VNode
+ c: typeof createComponentVNode
+ e: typeof createElementVNode
+ t: typeof createTextVNode
+ f: typeof createFragment
+ p: typeof createPortal
+}
+
+export const h = ((tag: ElementType, data: any, children: any): VNode => {
+ if (Array.isArray(data) || (data !== void 0 && typeof data !== 'object')) {
+ children = data
+ data = null
+ }
+
+ // TODO clone data if it is observed
+
+ let key = null
+ let ref = null
+ let portalTarget = null
+ if (data != null) {
+ if (data.slots != null) {
+ children = data.slots
+ }
+ if (data.key != null) {
+ ;({ key } = data)
+ }
+ if (data.ref != null) {
+ ;({ ref } = data)
+ }
+ if (data.target != null) {
+ portalTarget = data.target
+ }
+ }
+
+ if (typeof tag === 'string') {
+ // element
+ return createElementVNode(
+ tag,
+ data,
+ children,
+ ChildrenFlags.UNKNOWN_CHILDREN,
+ key,
+ ref
+ )
+ } else if (tag === Fragment) {
+ if (__DEV__ && ref) {
+ // TODO warn fragment cannot have ref
+ }
+ return createFragment(children, ChildrenFlags.UNKNOWN_CHILDREN, key)
+ } else if (tag === Portal) {
+ if (__DEV__ && !portalTarget) {
+ // TODO warn portal must have a target
+ }
+ return createPortal(
+ portalTarget,
+ children,
+ ChildrenFlags.UNKNOWN_CHILDREN,
+ key,
+ ref
+ )
+ } else {
+ // TODO: handle fragment & portal types
+ // TODO: warn ref on fragment
+ // component
+ return createComponentVNode(
+ tag,
+ data,
+ children,
+ ChildrenFlags.UNKNOWN_CHILDREN,
+ key,
+ ref
+ )
+ }
+}) as createElement
+
+h.c = createComponentVNode
+h.e = createElementVNode
+h.t = createTextVNode
+h.f = createFragment
+h.p = createPortal
--- /dev/null
+// render api
+export { h, Fragment, Portal } from './h'
+export { cloneVNode, createPortal, createFragment } from './vdom'
+export { createRenderer } from './createRenderer'
+
+import { Component as InternalComponent, ComponentClass } from './component'
+
+// the public component constructor with proper type inference.
+export const Component = InternalComponent as ComponentClass
+
+// observer api
+export {
+ autorun,
+ stop,
+ observable,
+ immutable,
+ computed,
+ isObservable,
+ isImmutable,
+ markImmutable,
+ markNonReactive,
+ unwrap
+} from '@vue/observer'
+
+// flags & types
+export { FunctionalComponent } from './component'
+export { ComponentOptions, PropType } from './componentOptions'
+export { VNodeFlags, ChildrenFlags } from './flags'
+export { VNode, VNodeData, VNodeChildren, Key, Ref, Slots, Slot } from './vdom'
--- /dev/null
+export const EMPTY_OBJ: { readonly [key: string]: any } = Object.freeze({})
+
+export const isReservedProp = (key: string): boolean => {
+ switch (key) {
+ case 'key':
+ case 'ref':
+ case 'slots':
+ return true
+ default:
+ return key.startsWith('nativeOn')
+ }
+}
--- /dev/null
+import {
+ MountedComponent,
+ ComponentClass,
+ FunctionalComponent
+} from './component'
+import { VNodeFlags, ChildrenFlags } from './flags'
+import { normalizeComponentProps } from './componentProps'
+import { createComponentClassFromOptions } from './componentUtils'
+import { ComponentPropsOptions } from './componentOptions'
+
+// Vue core is platform agnostic, so we are not using Element for "DOM" nodes.
+export interface RenderNode {
+ vnode?: VNode | null
+ // technically this doesn't exist on platforn render nodes,
+ // but we list it here so that TS can figure out union types
+ $f: false
+}
+
+export interface RenderFragment {
+ children: (RenderNode | RenderFragment)[]
+ $f: true
+}
+
+export interface VNode {
+ _isVNode: true
+ flags: VNodeFlags
+ tag: string | FunctionalComponent | ComponentClass | RenderNode | null
+ data: VNodeData | null
+ children: VNodeChildren
+ childFlags: ChildrenFlags
+ key: Key | null
+ ref: Ref | null
+ slots: Slots | null
+ // only on mounted nodes
+ el: RenderNode | RenderFragment | null
+ // only on mounted component root nodes
+ // points to component node in parent tree
+ parentVNode: VNode | null
+}
+
+export interface MountedVNode extends VNode {
+ el: RenderNode | RenderFragment
+}
+
+export type MountedVNodes = MountedVNode[]
+
+export interface VNodeData {
+ key?: Key | null
+ ref?: Ref | null
+ slots?: Slots | null
+ [key: string]: any
+}
+
+export type VNodeChildren =
+ | VNode[] // ELEMENT | PORTAL
+ | MountedComponent // COMPONENT_STATEFUL
+ | VNode // COMPONENT_FUNCTIONAL
+ | string // TEXT
+ | null
+
+export type Key = string | number
+
+export type Ref = (t: RenderNode | MountedComponent | null) => void
+
+export interface Slots {
+ [name: string]: Slot
+}
+
+export type Slot = (...args: any[]) => VNode[]
+
+export function createVNode(
+ flags: VNodeFlags,
+ tag: string | FunctionalComponent | ComponentClass | RenderNode | null,
+ data: VNodeData | null,
+ children: VNodeChildren | null,
+ childFlags: ChildrenFlags,
+ key: Key | null | undefined,
+ ref: Ref | null | undefined,
+ slots: Slots | null | undefined
+): VNode {
+ const vnode: VNode = {
+ _isVNode: true,
+ flags,
+ tag,
+ data,
+ children,
+ childFlags,
+ key: key === void 0 ? null : key,
+ ref: ref === void 0 ? null : ref,
+ slots: slots === void 0 ? null : slots,
+ el: null,
+ parentVNode: null
+ }
+ if (childFlags === ChildrenFlags.UNKNOWN_CHILDREN) {
+ normalizeChildren(vnode, children)
+ }
+ return vnode
+}
+
+export function createElementVNode(
+ tag: string,
+ data: VNodeData | null,
+ children: VNodeChildren,
+ childFlags: ChildrenFlags,
+ key?: Key | null,
+ ref?: Ref | null
+) {
+ const flags = tag === 'svg' ? VNodeFlags.ELEMENT_SVG : VNodeFlags.ELEMENT_HTML
+ return createVNode(flags, tag, data, children, childFlags, key, ref, null)
+}
+
+export function createComponentVNode(
+ comp: any,
+ data: VNodeData | null,
+ children: VNodeChildren,
+ childFlags: ChildrenFlags,
+ key?: Key | null,
+ ref?: Ref | null
+) {
+ // resolve type
+ let flags: VNodeFlags
+ let propsOptions: ComponentPropsOptions
+
+ // flags
+ const compType = typeof comp
+ if (__COMPAT__ && compType === 'object') {
+ if (comp.functional) {
+ // object literal functional
+ flags = VNodeFlags.COMPONENT_FUNCTIONAL
+ const { render } = comp
+ if (!comp._normalized) {
+ render.pure = comp.pure
+ render.props = comp.props
+ comp._normalized = true
+ }
+ comp = render
+ propsOptions = comp.props
+ } else {
+ // object literal stateful
+ flags = VNodeFlags.COMPONENT_STATEFUL
+ comp =
+ comp._normalized ||
+ (comp._normalized = createComponentClassFromOptions(comp))
+ propsOptions = comp.options && comp.options.props
+ }
+ } else {
+ // assumes comp is function here now
+ if (__DEV__ && compType !== 'function') {
+ // TODO warn invalid comp value in dev
+ }
+ if (comp.prototype && comp.prototype.render) {
+ flags = VNodeFlags.COMPONENT_STATEFUL
+ propsOptions = comp.options && comp.options.props
+ } else {
+ flags = VNodeFlags.COMPONENT_FUNCTIONAL
+ propsOptions = comp.props
+ }
+ }
+
+ if (__DEV__ && flags === VNodeFlags.COMPONENT_FUNCTIONAL && ref) {
+ // TODO warn functional component cannot have ref
+ }
+
+ // props
+ const props = normalizeComponentProps(data, propsOptions, comp)
+
+ // slots
+ let slots: any
+ if (childFlags == null) {
+ childFlags = children
+ ? ChildrenFlags.DYNAMIC_SLOTS
+ : ChildrenFlags.NO_CHILDREN
+ if (children != null) {
+ const childrenType = typeof children
+ if (childrenType === 'function') {
+ // function as children
+ slots = { default: children }
+ } else if (childrenType === 'object' && !(children as VNode)._isVNode) {
+ // slot object as children
+ slots = children
+ } else {
+ slots = { default: () => children }
+ }
+ slots = normalizeSlots(slots)
+ }
+ }
+
+ return createVNode(
+ flags,
+ comp,
+ props,
+ null, // to be set during mount
+ childFlags,
+ key,
+ ref,
+ slots
+ )
+}
+
+export function createTextVNode(text: string): VNode {
+ return createVNode(
+ VNodeFlags.TEXT,
+ null,
+ null,
+ text == null ? '' : text,
+ ChildrenFlags.NO_CHILDREN,
+ null,
+ null,
+ null
+ )
+}
+
+export function createFragment(
+ children: VNodeChildren,
+ childFlags?: ChildrenFlags,
+ key?: Key | null
+) {
+ return createVNode(
+ VNodeFlags.FRAGMENT,
+ null,
+ null,
+ children,
+ childFlags === void 0 ? ChildrenFlags.UNKNOWN_CHILDREN : childFlags,
+ key,
+ null,
+ null
+ )
+}
+
+export function createPortal(
+ target: RenderNode | string,
+ children: VNodeChildren,
+ childFlags?: ChildrenFlags,
+ key?: Key | null,
+ ref?: Ref | null
+): VNode {
+ return createVNode(
+ VNodeFlags.PORTAL,
+ target,
+ null,
+ children,
+ childFlags === void 0 ? ChildrenFlags.UNKNOWN_CHILDREN : childFlags,
+ key,
+ ref,
+ null
+ )
+}
+
+export function cloneVNode(vnode: VNode, extraData?: VNodeData): VNode {
+ const { flags, data } = vnode
+ if (flags & VNodeFlags.ELEMENT || flags & VNodeFlags.COMPONENT) {
+ let clonedData = data
+ if (extraData != null) {
+ clonedData = {}
+ if (data != null) {
+ for (const key in data) {
+ clonedData[key] = data[key]
+ }
+ }
+ for (const key in extraData) {
+ clonedData[key] = extraData[key]
+ }
+ }
+ return createVNode(
+ flags,
+ vnode.tag,
+ clonedData,
+ vnode.children,
+ vnode.childFlags,
+ vnode.key,
+ vnode.ref,
+ vnode.slots
+ )
+ } else if (flags & VNodeFlags.TEXT) {
+ return createTextVNode(vnode.children as string)
+ } else {
+ return vnode
+ }
+}
+
+function normalizeChildren(vnode: VNode, children: any) {
+ let childFlags
+ if (Array.isArray(children)) {
+ const { length } = children
+ if (length === 0) {
+ childFlags = ChildrenFlags.NO_CHILDREN
+ children = null
+ } else if (length === 1) {
+ childFlags = ChildrenFlags.SINGLE_VNODE
+ children = children[0]
+ if (children.el) {
+ children = cloneVNode(children)
+ }
+ } else {
+ childFlags = ChildrenFlags.KEYED_VNODES
+ children = normalizeVNodes(children)
+ }
+ } else if (children == null) {
+ childFlags = ChildrenFlags.NO_CHILDREN
+ } else if (children._isVNode) {
+ childFlags = ChildrenFlags.SINGLE_VNODE
+ if (children.el) {
+ children = cloneVNode(children)
+ }
+ } else {
+ // primitives or invalid values, cast to string
+ childFlags = ChildrenFlags.SINGLE_VNODE
+ children = createTextVNode(children + '')
+ }
+ vnode.children = children
+ vnode.childFlags = childFlags
+}
+
+export function normalizeVNodes(
+ children: any[],
+ newChildren: VNode[] = [],
+ currentPrefix: string = ''
+): VNode[] {
+ for (let i = 0; i < children.length; i++) {
+ const child = children[i]
+ let newChild
+ if (child == null) {
+ newChild = createTextVNode('')
+ } else if (child._isVNode) {
+ newChild = child.el ? cloneVNode(child) : child
+ } else if (Array.isArray(child)) {
+ normalizeVNodes(child, newChildren, currentPrefix + i + '|')
+ } else {
+ newChild = createTextVNode(child + '')
+ }
+ if (newChild) {
+ if (newChild.key == null) {
+ newChild.key = currentPrefix + i
+ }
+ newChildren.push(newChild)
+ }
+ }
+ return newChildren
+}
+
+// ensure all slot functions return Arrays
+function normalizeSlots(slots: { [name: string]: any }): Slots {
+ const normalized: Slots = {}
+ for (const name in slots) {
+ normalized[name] = (...args) => normalizeSlot(slots[name](...args))
+ }
+ return normalized
+}
+
+function normalizeSlot(value: any): VNode[] {
+ if (value == null) {
+ return [createTextVNode('')]
+ } else if (Array.isArray(value)) {
+ return normalizeVNodes(value)
+ } else if (value._isVNode) {
+ return [value]
+ } else {
+ return [createTextVNode(value + '')]
+ }
+}
--- /dev/null
+// Global compile-time constants
+declare var __DEV__: boolean
+declare var __COMPAT__: boolean
--- /dev/null
+__tests__/
+__mocks__/
+dist/packages
\ No newline at end of file
--- /dev/null
+# @vue/observer
+
+> This package is inlined into UMD & Browser ESM builds of user-facing renderers (e.g. `@vue/runtime-dom`), but also published as a package that can be used standalone. The standalone build should not be used alongside a pre-bundled build of a user-facing renderer, as they will have different internal storage for reactivity connections. A user-facing renderer should re-export all APIs from this package.
--- /dev/null
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/observer.cjs.prod.js')
+} else {
+ module.exports = require('./dist/observer.cjs.js')
+}
--- /dev/null
+{
+ "name": "@vue/observer",
+ "version": "3.0.0-alpha.1",
+ "description": "@vue/observer",
+ "main": "index.js",
+ "module": "dist/observer.esm.js",
+ "typings": "dist/index.d.ts",
+ "unpkg": "dist/observer.umd.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/vue.git"
+ },
+ "buildOptions": {
+ "name": "VueObserver",
+ "formats": ["esm", "cjs", "umd", "esm-browser"]
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/vue/issues"
+ },
+ "homepage": "https://github.com/vuejs/vue/tree/dev/packages/observer#readme"
+}
--- /dev/null
+import { OperationTypes } from './operations'
+import { Dep, KeyToDepMap, targetMap } from './state'
+
+export interface Autorun {
+ (): any
+ isAutorun: true
+ active: boolean
+ raw: Function
+ deps: Array<Dep>
+ scheduler?: Scheduler
+ onTrack?: Debugger
+ onTrigger?: Debugger
+}
+
+export interface AutorunOptions {
+ lazy?: boolean
+ scheduler?: Scheduler
+ onTrack?: Debugger
+ onTrigger?: Debugger
+}
+
+export type Scheduler = (run: () => any) => void
+
+export type DebuggerEvent = {
+ runner: Autorun
+ target: any
+ type: OperationTypes
+ key: string | symbol | undefined
+}
+
+export type Debugger = (event: DebuggerEvent) => void
+
+export const activeAutorunStack: Autorun[] = []
+
+const ITERATE_KEY = Symbol('iterate')
+
+export function createAutorun(fn: Function, options: AutorunOptions): Autorun {
+ const runner = function runner(...args): any {
+ return run(runner as Autorun, fn, args)
+ } as Autorun
+ runner.active = true
+ runner.raw = fn
+ runner.scheduler = options.scheduler
+ runner.onTrack = options.onTrack
+ runner.onTrigger = options.onTrigger
+ runner.deps = []
+ return runner
+}
+
+function run(runner: Autorun, fn: Function, args: any[]): any {
+ if (!runner.active) {
+ return fn(...args)
+ }
+ if (activeAutorunStack.indexOf(runner) === -1) {
+ cleanup(runner)
+ try {
+ activeAutorunStack.push(runner)
+ return fn(...args)
+ } finally {
+ activeAutorunStack.pop()
+ }
+ }
+}
+
+export function cleanup(runner: Autorun) {
+ for (let i = 0; i < runner.deps.length; i++) {
+ runner.deps[i].delete(runner)
+ }
+ runner.deps = []
+}
+
+export function track(
+ target: any,
+ type: OperationTypes,
+ key?: string | symbol
+) {
+ const runner = activeAutorunStack[activeAutorunStack.length - 1]
+ if (runner) {
+ if (type === OperationTypes.ITERATE) {
+ key = ITERATE_KEY
+ }
+ // keyMap must exist because only an observed target can call this function
+ const depsMap = targetMap.get(target) as KeyToDepMap
+ let dep = depsMap.get(key as string | symbol)
+ if (!dep) {
+ depsMap.set(key as string | symbol, (dep = new Set()))
+ }
+ if (!dep.has(runner)) {
+ dep.add(runner)
+ runner.deps.push(dep)
+ if (__DEV__ && runner.onTrack) {
+ runner.onTrack({
+ runner,
+ target,
+ type,
+ key
+ })
+ }
+ }
+ }
+}
+
+export function trigger(
+ target: any,
+ type: OperationTypes,
+ key?: string | symbol,
+ extraInfo?: any
+) {
+ const depsMap = targetMap.get(target) as KeyToDepMap
+ const runners = new Set()
+ if (type === OperationTypes.CLEAR) {
+ // collection being cleared, trigger all runners for target
+ depsMap.forEach(dep => {
+ addRunners(runners, dep)
+ })
+ } else {
+ // schedule runs for SET | ADD | DELETE
+ addRunners(runners, depsMap.get(key as string | symbol))
+ // also run for iteration key on ADD | DELETE
+ if (type === OperationTypes.ADD || type === OperationTypes.DELETE) {
+ const iterationKey = Array.isArray(target) ? 'length' : ITERATE_KEY
+ addRunners(runners, depsMap.get(iterationKey))
+ }
+ }
+ runners.forEach(runner => {
+ scheduleRun(runner, target, type, key, extraInfo)
+ })
+}
+
+function addRunners(
+ runners: Set<Autorun>,
+ runnersToAdd: Set<Autorun> | undefined
+) {
+ if (runnersToAdd !== void 0) {
+ runnersToAdd.forEach(runners.add, runners)
+ }
+}
+
+function scheduleRun(
+ runner: Autorun,
+ target: any,
+ type: OperationTypes,
+ key: string | symbol | undefined,
+ extraInfo: any
+) {
+ if (__DEV__ && runner.onTrigger) {
+ runner.onTrigger(
+ Object.assign(
+ {
+ runner,
+ target,
+ key,
+ type
+ },
+ extraInfo
+ )
+ )
+ }
+ if (runner.scheduler !== void 0) {
+ runner.scheduler(runner)
+ } else {
+ runner()
+ }
+}
--- /dev/null
+import { observable, immutable, unwrap } from './index'
+import { OperationTypes } from './operations'
+import { track, trigger } from './autorun'
+import { LOCKED } from './lock'
+
+const hasOwnProperty = Object.prototype.hasOwnProperty
+
+const builtInSymbols = new Set(
+ Object.getOwnPropertyNames(Symbol)
+ .map(key => (Symbol as any)[key])
+ .filter(value => typeof value === 'symbol')
+)
+
+function get(
+ target: any,
+ key: string | symbol,
+ receiver: any,
+ toObsevable: (t: any) => any
+) {
+ const res = Reflect.get(target, key, receiver)
+ if (typeof key === 'symbol' && builtInSymbols.has(key)) {
+ return res
+ }
+ track(target, OperationTypes.GET, key)
+ return res !== null && typeof res === 'object' ? toObsevable(res) : res
+}
+
+function set(
+ target: any,
+ key: string | symbol,
+ value: any,
+ receiver: any
+): boolean {
+ value = unwrap(value)
+ const hadKey = hasOwnProperty.call(target, key)
+ const oldValue = target[key]
+ const result = Reflect.set(target, key, value, receiver)
+ // don't trigger if target is something up in the prototype chain of original
+ if (target === unwrap(receiver)) {
+ if (__DEV__) {
+ const extraInfo = { oldValue, newValue: value }
+ if (!hadKey) {
+ trigger(target, OperationTypes.ADD, key, extraInfo)
+ } else if (value !== oldValue) {
+ trigger(target, OperationTypes.SET, key, extraInfo)
+ }
+ } else {
+ if (!hadKey) {
+ trigger(target, OperationTypes.ADD, key)
+ } else if (value !== oldValue) {
+ trigger(target, OperationTypes.SET, key)
+ }
+ }
+ }
+ return result
+}
+
+function deleteProperty(target: any, key: string | symbol): boolean {
+ const hadKey = hasOwnProperty.call(target, key)
+ const oldValue = target[key]
+ const result = Reflect.deleteProperty(target, key)
+ if (hadKey) {
+ if (__DEV__) {
+ trigger(target, OperationTypes.DELETE, key, { oldValue })
+ } else {
+ trigger(target, OperationTypes.DELETE, key)
+ }
+ }
+ return result
+}
+
+function has(target: any, key: string | symbol): boolean {
+ const result = Reflect.has(target, key)
+ track(target, OperationTypes.HAS, key)
+ return result
+}
+
+function ownKeys(target: any): (string | number | symbol)[] {
+ track(target, OperationTypes.ITERATE)
+ return Reflect.ownKeys(target)
+}
+
+export const mutableHandlers: ProxyHandler<any> = {
+ get: (target: any, key: string | symbol, receiver: any) =>
+ get(target, key, receiver, observable),
+ set,
+ deleteProperty,
+ has,
+ ownKeys
+}
+
+export const immutableHandlers: ProxyHandler<any> = {
+ get: (target: any, key: string | symbol, receiver: any) =>
+ get(target, key, receiver, LOCKED ? immutable : observable),
+
+ set(target: any, key: string | symbol, value: any, receiver: any): boolean {
+ if (LOCKED) {
+ if (__DEV__) {
+ console.warn(`Set operation failed: target is immutable.`, target)
+ }
+ return true
+ } else {
+ return set(target, key, value, receiver)
+ }
+ },
+
+ deleteProperty(target: any, key: string | symbol): boolean {
+ if (LOCKED) {
+ if (__DEV__) {
+ console.warn(`Delete operation failed: target is immutable.`, target)
+ }
+ return true
+ } else {
+ return deleteProperty(target, key)
+ }
+ },
+
+ has,
+ ownKeys
+}
--- /dev/null
+import { unwrap } from './index'
+import { track, trigger } from './autorun'
+import { OperationTypes } from './operations'
+
+function instrument(
+ target: any,
+ key: string | symbol,
+ args: any[],
+ type: OperationTypes
+) {
+ target = unwrap(target)
+ const proto: any = Reflect.getPrototypeOf(target)
+ track(target, type)
+ return proto[key].apply(target, args)
+}
+
+function get(key: string | symbol) {
+ return instrument(this, key, [key], OperationTypes.GET)
+}
+
+function has(key: string | symbol): boolean {
+ return instrument(this, key, [key], OperationTypes.HAS)
+}
+
+function size(target: any) {
+ target = unwrap(target)
+ const proto = Reflect.getPrototypeOf(target)
+ track(target, OperationTypes.ITERATE)
+ return Reflect.get(proto, 'size', target)
+}
+
+function makeWarning(type: OperationTypes) {
+ return function() {
+ if (__DEV__) {
+ console.warn(
+ `${type} operation failed: target is immutable.`,
+ unwrap(this)
+ )
+ }
+ }
+}
+
+const mutableInstrumentations: any = {
+ get,
+ has,
+
+ get size() {
+ return size(this)
+ },
+
+ add(key: any) {
+ const target = unwrap(this)
+ const proto: any = Reflect.getPrototypeOf(this)
+ const hadKey = proto.has.call(target, key)
+ const result = proto.add.apply(target, arguments)
+ if (!hadKey) {
+ if (__DEV__) {
+ trigger(target, OperationTypes.ADD, key, { value: key })
+ } else {
+ trigger(target, OperationTypes.ADD, key)
+ }
+ }
+ return result
+ },
+
+ set(key: any, value: any) {
+ const target = unwrap(this)
+ const proto: any = Reflect.getPrototypeOf(this)
+ const hadKey = proto.has.call(target, key)
+ const oldValue = proto.get.call(target, key)
+ const result = proto.set.apply(target, arguments)
+ if (__DEV__) {
+ const extraInfo = { oldValue, newValue: value }
+ if (!hadKey) {
+ trigger(target, OperationTypes.ADD, key, extraInfo)
+ } else {
+ trigger(target, OperationTypes.SET, key, extraInfo)
+ }
+ } else {
+ if (!hadKey) {
+ trigger(target, OperationTypes.ADD, key)
+ } else {
+ trigger(target, OperationTypes.SET, key)
+ }
+ }
+ return result
+ },
+
+ delete(key: any) {
+ const target = unwrap(this)
+ const proto: any = Reflect.getPrototypeOf(this)
+ const hadKey = proto.has.call(target, key)
+ const oldValue = proto.get ? proto.get.call(target, key) : undefined
+ // forward the operation before queueing reactions
+ const result = proto.delete.apply(target, arguments)
+ if (hadKey) {
+ if (__DEV__) {
+ trigger(target, OperationTypes.DELETE, key, { oldValue })
+ } else {
+ trigger(target, OperationTypes.DELETE, key)
+ }
+ }
+ return result
+ },
+
+ clear() {
+ const target = unwrap(this)
+ const proto: any = Reflect.getPrototypeOf(this)
+ const hadItems = target.size !== 0
+ const oldTarget = target instanceof Map ? new Map(target) : new Set(target)
+ // forward the operation before queueing reactions
+ const result = proto.clear.apply(target, arguments)
+ if (hadItems) {
+ if (__DEV__) {
+ trigger(target, OperationTypes.CLEAR, void 0, { oldTarget })
+ } else {
+ trigger(target, OperationTypes.CLEAR)
+ }
+ }
+ return result
+ }
+}
+
+const immutableInstrumentations: any = {
+ get,
+ has,
+ get size() {
+ return size(this)
+ },
+ add: makeWarning(OperationTypes.ADD),
+ set: makeWarning(OperationTypes.SET),
+ delete: makeWarning(OperationTypes.DELETE),
+ clear: makeWarning(OperationTypes.CLEAR)
+}
+;['forEach', 'keys', 'values', 'entries', Symbol.iterator].forEach(key => {
+ mutableInstrumentations[key] = immutableInstrumentations[key] = function(
+ ...args: any[]
+ ) {
+ return instrument(this, key, args, OperationTypes.ITERATE)
+ }
+})
+
+function getInstrumented(
+ target: any,
+ key: string | symbol,
+ receiver: any,
+ instrumentations: any
+) {
+ target = instrumentations.hasOwnProperty(key) ? instrumentations : target
+ return Reflect.get(target, key, receiver)
+}
+
+export const mutableCollectionHandlers: ProxyHandler<any> = {
+ get: (target: any, key: string | symbol, receiver: any) =>
+ getInstrumented(target, key, receiver, mutableInstrumentations)
+}
+
+export const immutableCollectionHandlers: ProxyHandler<any> = {
+ get: (target: any, key: string | symbol, receiver: any) =>
+ getInstrumented(target, key, receiver, immutableInstrumentations)
+}
--- /dev/null
+import { autorun, stop } from './index'
+import { Autorun, activeAutorunStack } from './autorun'
+
+export interface ComputedGetter {
+ (): any
+ stop: () => void
+}
+
+export function computed(getter: Function, context?: any): ComputedGetter {
+ let dirty: boolean = true
+ let value: any = undefined
+ const runner = autorun(() => getter.call(context, context), {
+ lazy: true,
+ scheduler: () => {
+ dirty = true
+ }
+ })
+ const computedGetter = (() => {
+ if (dirty) {
+ value = runner()
+ dirty = false
+ }
+ // When computed autoruns are accessed in a parent autorun, the parent
+ // should track all the dependencies the computed property has tracked.
+ // This should also apply for chained computed properties.
+ trackChildRun(runner)
+ return value
+ }) as ComputedGetter
+ computedGetter.stop = () => stop(runner)
+ return computedGetter
+}
+
+function trackChildRun(childRunner: Autorun) {
+ const parentRunner = activeAutorunStack[activeAutorunStack.length - 1]
+ if (parentRunner) {
+ for (let i = 0; i < childRunner.deps.length; i++) {
+ const dep = childRunner.deps[i]
+ if (!dep.has(parentRunner)) {
+ dep.add(parentRunner)
+ parentRunner.deps.push(dep)
+ }
+ }
+ }
+}
--- /dev/null
+import { mutableHandlers, immutableHandlers } from './baseHandlers'
+
+import {
+ mutableCollectionHandlers,
+ immutableCollectionHandlers
+} from './collectionHandlers'
+
+import {
+ targetMap,
+ observedToRaw,
+ rawToObserved,
+ immutableToRaw,
+ rawToImmutable,
+ immutableValues,
+ nonReactiveValues
+} from './state'
+
+import {
+ createAutorun,
+ cleanup,
+ Autorun,
+ AutorunOptions,
+ DebuggerEvent
+} from './autorun'
+
+export { Autorun, DebuggerEvent }
+export { computed, ComputedGetter } from './computed'
+export { lock, unlock } from './lock'
+
+const EMPTY_OBJ = {}
+const collectionTypes: Set<any> = new Set([Set, Map, WeakMap, WeakSet])
+const observableValueRE = /^\[object (?:Object|Array|Map|Set|WeakMap|WeakSet)\]$/
+
+const canObserve = (value: any): boolean => {
+ return (
+ !value._isVue &&
+ !value._isVNode &&
+ observableValueRE.test(Object.prototype.toString.call(value)) &&
+ !nonReactiveValues.has(value)
+ )
+}
+
+type identity = <T>(target: T) => T
+
+export const observable = ((target: any = {}): any => {
+ // if trying to observe an immutable proxy, return the immutable version.
+ if (immutableToRaw.has(target)) {
+ return target
+ }
+ // target is explicitly marked as immutable by user
+ if (immutableValues.has(target)) {
+ return immutable(target)
+ }
+ return createObservable(
+ target,
+ rawToObserved,
+ observedToRaw,
+ mutableHandlers,
+ mutableCollectionHandlers
+ )
+}) as identity
+
+export const immutable = ((target: any = {}): any => {
+ // value is a mutable observable, retrive its original and return
+ // a readonly version.
+ if (observedToRaw.has(target)) {
+ target = observedToRaw.get(target)
+ }
+ return createObservable(
+ target,
+ rawToImmutable,
+ immutableToRaw,
+ immutableHandlers,
+ immutableCollectionHandlers
+ )
+}) as identity
+
+function createObservable(
+ target: any,
+ toProxy: WeakMap<any, any>,
+ toRaw: WeakMap<any, any>,
+ baseHandlers: ProxyHandler<any>,
+ collectionHandlers: ProxyHandler<any>
+) {
+ if ((__DEV__ && target === null) || typeof target !== 'object') {
+ throw new Error(`value is not observable: ${String(target)}`)
+ }
+ // target already has corresponding Proxy
+ let observed = toProxy.get(target)
+ if (observed !== void 0) {
+ return observed
+ }
+ // target is already a Proxy
+ if (toRaw.has(target)) {
+ return target
+ }
+ // only a whitelist of value types can be observed.
+ if (!canObserve(target)) {
+ return target
+ }
+ const handlers = collectionTypes.has(target.constructor)
+ ? collectionHandlers
+ : baseHandlers
+ observed = new Proxy(target, handlers)
+ toProxy.set(target, observed)
+ toRaw.set(observed, target)
+ targetMap.set(target, new Map())
+ return observed
+}
+
+export function autorun(
+ fn: Function,
+ options: AutorunOptions = EMPTY_OBJ
+): Autorun {
+ if ((fn as Autorun).isAutorun) {
+ fn = (fn as Autorun).raw
+ }
+ const runner = createAutorun(fn, options)
+ if (!options.lazy) {
+ runner()
+ }
+ return runner
+}
+
+export function stop(runner: Autorun) {
+ if (runner.active) {
+ cleanup(runner)
+ runner.active = false
+ }
+}
+
+export function isObservable(value: any): boolean {
+ return observedToRaw.has(value) || immutableToRaw.has(value)
+}
+
+export function isImmutable(value: any): boolean {
+ return immutableToRaw.has(value)
+}
+
+export function unwrap<T>(observed: T): T {
+ return observedToRaw.get(observed) || immutableToRaw.get(observed) || observed
+}
+
+export function markImmutable<T>(value: T): T {
+ immutableValues.add(value)
+ return value
+}
+
+export function markNonReactive<T>(value: T): T {
+ nonReactiveValues.add(value)
+ return value
+}
--- /dev/null
+// global immutability lock
+export let LOCKED = true
+
+export function lock() {
+ LOCKED = true
+}
+
+export function unlock() {
+ LOCKED = false
+}
--- /dev/null
+export const enum OperationTypes {
+ // using literal strings instead of numbers so that it's easier to inspect
+ // debugger events
+ SET = 'set',
+ ADD = 'add',
+ DELETE = 'delete',
+ CLEAR = 'clear',
+ GET = 'get',
+ HAS = 'has',
+ ITERATE = 'iterate'
+}
--- /dev/null
+import { Autorun } from './autorun'
+
+// The main WeakMap that stores {target -> key -> dep} connections.
+// Conceptually, it's easier to think of a dependency as a Dep class
+// which maintains a Set of subscribers, but we simply store them as
+// raw Sets to reduce memory overhead.
+export type Dep = Set<Autorun>
+export type KeyToDepMap = Map<string | symbol, Dep>
+export const targetMap: WeakMap<any, KeyToDepMap> = new WeakMap()
+
+// WeakMaps that store {raw <-> observed} pairs.
+export const rawToObserved: WeakMap<any, any> = new WeakMap()
+export const observedToRaw: WeakMap<any, any> = new WeakMap()
+export const rawToImmutable: WeakMap<any, any> = new WeakMap()
+export const immutableToRaw: WeakMap<any, any> = new WeakMap()
+
+// WeakSets for values that are marked immutable or non-reactive during
+// observable creation.
+export const immutableValues: WeakSet<any> = new WeakSet()
+export const nonReactiveValues: WeakSet<any> = new WeakSet()
--- /dev/null
+__tests__/
+__mocks__/
+dist/packages
--- /dev/null
+# @vue/runtime-dom
+
+``` js
+import { h, render, Component } from '@vue/runtime-dom'
+
+class App extends Component {
+ data () {
+ return {
+ msg: 'Hello World!'
+ }
+ }
+ render () {
+ return h('div', this.msg)
+ }
+}
+
+render(
+ h(App),
+ document.getElementById('app')
+)
+```
--- /dev/null
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/runtime-dom.cjs.prod.js')
+} else {
+ module.exports = require('./dist/runtime-dom.cjs.js')
+}
--- /dev/null
+{
+ "name": "@vue/runtime-dom",
+ "version": "3.0.0-alpha.1",
+ "description": "@vue/runtime-dom",
+ "main": "index.js",
+ "module": "dist/runtime-dom.esm.js",
+ "typings": "dist/index.d.ts",
+ "unpkg": "dist/runtime-dom.umd.js",
+ "buildOptions": {
+ "name": "Vue",
+ "formats": ["esm", "cjs", "umd", "esm-browser"]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/vue.git"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/vue/issues"
+ },
+ "homepage": "https://github.com/vuejs/vue/tree/dev/packages/runtime-dom#readme",
+ "dependencies": {
+ "@vue/core": "3.0.0-alpha.1",
+ "@vue/scheduler": "3.0.0-alpha.1"
+ }
+}
--- /dev/null
+import {
+ h,
+ cloneVNode,
+ createPortal,
+ Component,
+ createRenderer
+} from '@vue/core'
+
+import { queueJob, nextTick } from '@vue/scheduler'
+
+import { nodeOps } from './nodeOps'
+import { patchData } from './patchData'
+import { teardownVNode } from './teardownVNode'
+
+const { render } = createRenderer({
+ queueJob,
+ nodeOps,
+ patchData,
+ teardownVNode
+})
+
+// important: inline the definition for nextTick
+const publicNextTick = nextTick as (fn: Function) => Promise<void>
+
+export { h, cloneVNode, createPortal, Component, render, publicNextTick as nextTick }
+
+// also expose observer API
+export {
+ autorun,
+ stop,
+ observable,
+ immutable,
+ computed,
+ isObservable,
+ isImmutable,
+ markImmutable,
+ markNonReactive,
+ unwrap
+} from '@vue/core'
--- /dev/null
+export function patchAttr(
+ el: Element,
+ key: string,
+ value: any,
+ isSVG: boolean
+) {
+ // isSVG short-circuits isXlink check
+ if (isSVG && isXlink(key)) {
+ if (value == null) {
+ el.removeAttributeNS(xlinkNS, getXlinkProp(key))
+ } else {
+ el.setAttributeNS(xlinkNS, key, value)
+ }
+ } else {
+ if (value == null) {
+ el.removeAttribute(key)
+ } else {
+ el.setAttribute(key, value)
+ }
+ }
+}
+
+const xlinkNS = 'http://www.w3.org/1999/xlink'
+
+function isXlink(name: string): boolean {
+ return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
+}
+
+function getXlinkProp(name: string): string {
+ return isXlink(name) ? name.slice(6, name.length) : ''
+}
--- /dev/null
+// compiler should normlaize class + :class bindings on the same element
+// into a single binding ['staticClass', dynamic]
+
+export function patchClass(el: Element, value: any, isSVG: boolean) {
+ // directly setting className should be faster than setAttribute in theory
+ if (isSVG) {
+ el.setAttribute('class', normalizeClass(value))
+ } else {
+ el.className = normalizeClass(value)
+ }
+}
+
+function normalizeClass(value: any): string {
+ let res = ''
+ if (typeof value === 'string') {
+ res = value
+ } else if (Array.isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ res += normalizeClass(value[i]) + ' '
+ }
+ } else if (typeof value === 'object') {
+ for (const name in value) {
+ if (value[name]) {
+ res += name + ' '
+ }
+ }
+ }
+ return res.trim()
+}
--- /dev/null
+const delegateRE = /^(?:click|dblclick|submit|(?:key|mouse|touch).*)$/
+
+type EventValue = Function | Function[]
+type TargetRef = { el: Element | Document }
+
+export function patchEvent(
+ el: Element,
+ name: string,
+ prevValue: EventValue | null,
+ nextValue: EventValue | null
+) {
+ if (delegateRE.test(name)) {
+ handleDelegatedEvent(el, name, nextValue)
+ } else {
+ handleNormalEvent(el, name, prevValue, nextValue)
+ }
+}
+
+const eventCounts: Record<string, number> = {}
+const attachedGlobalHandlers: Record<string, Function> = {}
+
+export function handleDelegatedEvent(
+ el: any,
+ name: string,
+ value: EventValue | null
+) {
+ const count = eventCounts[name]
+ let store = el.__events
+ if (value) {
+ if (!count) {
+ attachGlobalHandler(name)
+ }
+ if (!store) {
+ store = el.__events = {}
+ }
+ if (!store[name]) {
+ eventCounts[name]++
+ }
+ store[name] = value
+ } else if (store && store[name]) {
+ eventCounts[name]--
+ store[name] = null
+ if (count === 1) {
+ removeGlobalHandler(name)
+ }
+ }
+}
+
+function attachGlobalHandler(name: string) {
+ const handler = (attachedGlobalHandlers[name] = (e: Event) => {
+ const { type } = e
+ const isClick = type === 'click' || type === 'dblclick'
+ if (isClick && (e as MouseEvent).button !== 0) {
+ e.stopPropagation()
+ return false
+ }
+ e.stopPropagation = stopPropagation
+ const targetRef: TargetRef = { el: document }
+ Object.defineProperty(e, 'currentTarget', {
+ configurable: true,
+ get() {
+ return targetRef.el
+ }
+ })
+ dispatchEvent(e, name, isClick, targetRef)
+ })
+ document.addEventListener(name, handler)
+ eventCounts[name] = 0
+}
+
+function stopPropagation() {
+ this.cancelBubble = true
+ if (!this.immediatePropagationStopped) {
+ this.stopImmediatePropagation()
+ }
+}
+
+function dispatchEvent(
+ e: Event,
+ name: string,
+ isClick: boolean,
+ targetRef: TargetRef
+) {
+ let el = e.target as any
+ while (el != null) {
+ // Don't process clicks on disabled elements
+ if (isClick && el.disabled) {
+ break
+ }
+ const store = el.__events
+ if (store) {
+ const value = store[name]
+ if (value) {
+ targetRef.el = el
+ invokeEvents(e, value)
+ if (e.cancelBubble) {
+ break
+ }
+ }
+ }
+ el = el.parentNode
+ }
+}
+
+function invokeEvents(e: Event, value: EventValue) {
+ if (Array.isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ value[i](e)
+ }
+ } else {
+ value(e)
+ }
+}
+
+function removeGlobalHandler(name: string) {
+ document.removeEventListener(name, attachedGlobalHandlers[name] as any)
+ eventCounts[name] = 0
+}
+
+function handleNormalEvent(el: Element, name: string, prev: any, next: any) {
+ const invoker = prev && prev.invoker
+ if (next) {
+ if (invoker) {
+ prev.invoker = null
+ invoker.value = next
+ next.invoker = invoker
+ } else {
+ el.addEventListener(name, createInvoker(next))
+ }
+ } else if (invoker) {
+ el.removeEventListener(name, invoker)
+ }
+}
+
+function createInvoker(value: any) {
+ const invoker = ((e: Event) => {
+ invokeEvents(e, invoker.value)
+ }) as any
+ invoker.value = value
+ value.invoker = invoker
+ return invoker
+}
--- /dev/null
+import { VNode, ChildrenFlags } from '@vue/core'
+
+export function patchDOMProp(
+ el: any,
+ key: string,
+ value: any,
+ prevVNode: VNode,
+ unmountChildren: any
+) {
+ if (key === 'innerHTML' || key === 'textContent') {
+ if (prevVNode && prevVNode.children) {
+ unmountChildren(prevVNode.children, prevVNode.childFlags)
+ prevVNode.children = null
+ prevVNode.childFlags = ChildrenFlags.NO_CHILDREN
+ }
+ }
+ el[key] = value
+}
--- /dev/null
+import { isObservable } from '@vue/core'
+
+// style properties that should NOT have "px" added when numeric
+const nonNumericRE = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i
+
+export function patchStyle(el: any, prev: any, next: any, data: any) {
+ // If next is observed, the user is likely to mutate the style object.
+ // We need to normalize + clone it and replace data.style with the clone.
+ if (isObservable(next)) {
+ data.style = normalizeStyle(next)
+ }
+
+ const { style } = el
+ if (!next) {
+ el.removeAttribute('style')
+ } else if (typeof next === 'string') {
+ style.cssText = next
+ } else {
+ // TODO: warn invalid value in dev
+ next = normalizeStyle(next)
+ for (const key in next) {
+ let value = next[key]
+ if (typeof value === 'number' && !nonNumericRE.test(key)) {
+ value = value + 'px'
+ }
+ style.setProperty(key, value)
+ }
+ if (prev && typeof prev !== 'string') {
+ prev = normalizeStyle(prev)
+ for (const key in prev) {
+ if (!next[key]) {
+ style.setProperty(key, '')
+ }
+ }
+ }
+ }
+}
+
+function normalizeStyle(value: any): Record<string, string | number> | void {
+ if (value && typeof value === 'object') {
+ return value
+ } else if (Array.isArray(value)) {
+ const res: Record<string, string | number> = {}
+ for (let i = 0; i < value.length; i++) {
+ const normalized = normalizeStyle(value[i])
+ if (normalized) {
+ for (const key in normalized) {
+ res[key] = normalized[key]
+ }
+ }
+ }
+ return res
+ }
+}
--- /dev/null
+const svgNS = 'http://www.w3.org/2000/svg'
+
+export const nodeOps = {
+ createElement: (tag: string, isSVG?: boolean): Element =>
+ isSVG ? document.createElementNS(svgNS, tag) : document.createElement(tag),
+
+ createText: (text: string): Text => document.createTextNode(text),
+
+ setText: (node: Text, text: string) => {
+ node.nodeValue = text
+ },
+
+ appendChild: (parent: Node, child: Node) => {
+ parent.appendChild(child)
+ },
+
+ insertBefore: (parent: Node, child: Node, ref: Node) => {
+ parent.insertBefore(child, ref)
+ },
+
+ replaceChild: (parent: Node, oldChild: Node, newChild: Node) => {
+ parent.replaceChild(newChild, oldChild)
+ },
+
+ removeChild: (parent: Node, child: Node) => {
+ parent.removeChild(child)
+ },
+
+ clearContent: (node: Node) => {
+ node.textContent = ''
+ },
+
+ parentNode: (node: Node): Node | null => node.parentNode,
+
+ nextSibling: (node: Node): Node | null => node.nextSibling,
+
+ querySelector: (selector: string): Node | null =>
+ document.querySelector(selector)
+}
--- /dev/null
+import { VNode } from '@vue/core'
+import { patchClass } from './modules/class'
+import { patchStyle } from './modules/style'
+import { patchAttr } from './modules/attrs'
+import { patchDOMProp } from './modules/props'
+import { patchEvent } from './modules/events'
+
+export function patchData(
+ el: Element,
+ key: string,
+ prevValue: any,
+ nextValue: any,
+ prevVNode: VNode,
+ nextVNode: VNode,
+ isSVG: boolean,
+ unmountChildren: any
+) {
+ switch (key) {
+ // special
+ case 'class':
+ patchClass(el, nextValue, isSVG)
+ break
+ case 'style':
+ patchStyle(el, prevValue, nextValue, nextVNode.data)
+ break
+ default:
+ if (key.startsWith('on')) {
+ patchEvent(el, key.toLowerCase().slice(2), prevValue, nextValue)
+ } else if (key.startsWith('domProps')) {
+ patchDOMProp(
+ el,
+ key[8].toLowerCase() + key.slice(9),
+ nextValue,
+ prevVNode,
+ unmountChildren
+ )
+ } else {
+ patchAttr(el, key, nextValue, isSVG)
+ }
+ break
+ }
+}
--- /dev/null
+import { VNode } from '@vue/core'
+import { handleDelegatedEvent } from './modules/events'
+
+export function teardownVNode(vnode: VNode) {
+ const { el, data } = vnode
+ if (data != null) {
+ for (const key in data) {
+ if (key.startsWith('on')) {
+ handleDelegatedEvent(el, key.toLowerCase().slice(2), null)
+ }
+ }
+ }
+}
--- /dev/null
+__tests__/
+__mocks__/
+dist/packages
\ No newline at end of file
--- /dev/null
+# @vue/scheduler
+
+> This package is published only for typing and building custom renderers. It is NOT meant to be used in applications.
--- /dev/null
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/scheduler.cjs.prod.js')
+} else {
+ module.exports = require('./dist/scheduler.cjs.js')
+}
--- /dev/null
+{
+ "name": "@vue/scheduler",
+ "version": "3.0.0-alpha.1",
+ "description": "@vue/scheduler",
+ "main": "index.js",
+ "module": "dist/scheduler.esm.js",
+ "typings": "dist/index.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/vue.git"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/vue/issues"
+ },
+ "homepage": "https://github.com/vuejs/vue/tree/dev/packages/scheduler#readme"
+}
--- /dev/null
+const queue: Array<() => void> = []
+const postFlushCbs: Array<() => void> = []
+const p = Promise.resolve()
+let flushing = false
+
+export function nextTick(fn: () => void) {
+ p.then(fn)
+}
+
+export function queueJob(job: () => void, postFlushCb?: () => void) {
+ if (queue.indexOf(job) === -1) {
+ if (flushing) {
+ job()
+ } else {
+ queue.push(job)
+ }
+ }
+ if (postFlushCb) {
+ queuePostFlushCb(postFlushCb)
+ }
+ if (!flushing) {
+ nextTick(flushJobs)
+ }
+}
+
+export function queuePostFlushCb(cb: () => void) {
+ postFlushCbs.push(cb)
+}
+
+export function flushJobs() {
+ flushing = true
+ let job
+ while ((job = queue.shift())) {
+ job()
+ }
+ while ((job = postFlushCbs.shift())) {
+ job()
+ }
+ flushing = false
+}
--- /dev/null
+const fs = require('fs')
+const path = require('path')
+const ts = require('rollup-plugin-typescript2')
+const replace = require('rollup-plugin-replace')
+const alias = require('rollup-plugin-alias')
+
+if (!process.env.TARGET) {
+ throw new Error('TARGET package must be specified via --environment flag.')
+}
+
+const packagesDir = path.resolve(__dirname, 'packages')
+const packageDir = path.resolve(packagesDir, process.env.TARGET)
+const name = path.basename(packageDir)
+const resolve = p => path.resolve(packageDir, p)
+const pkg = require(resolve(`package.json`))
+const packageOptions = pkg.buildOptions || {}
+
+// build aliases dynamically
+const aliasOptions = { resolve: ['.ts'] }
+fs.readdirSync(packagesDir).forEach(dir => {
+ if (fs.statSync(path.resolve(packagesDir, dir)).isDirectory()) {
+ aliasOptions[`@vue/${dir}`] = path.resolve(packagesDir, `${dir}/src/index`)
+ }
+})
+const aliasPlugin = alias(aliasOptions)
+
+// ensure TS checks only once for each build
+let hasTSChecked = false
+
+const configs = {
+ esm: {
+ file: resolve(`dist/${name}.esm.js`),
+ format: `es`
+ },
+ cjs: {
+ file: resolve(`dist/${name}.cjs.js`),
+ format: `cjs`
+ },
+ umd: {
+ file: resolve(`dist/${name}.umd.js`),
+ format: `umd`
+ },
+ 'esm-browser': {
+ file: resolve(`dist/${name}.esm-browser.js`),
+ format: `es`
+ }
+}
+
+const defaultFormats = ['esm', 'cjs']
+const inlineFromats = process.env.FORMATS && process.env.FORMATS.split(',')
+const packageFormats = inlineFromats || packageOptions.formats || defaultFormats
+const packageConfigs = packageFormats.map(format => createConfig(configs[format]))
+
+if (process.env.NODE_ENV === 'production') {
+ packageFormats.forEach(format => {
+ if (format === 'cjs') {
+ packageConfigs.push(createProductionConfig(format))
+ }
+ if (format === 'umd' || format === 'esm-browser') {
+ packageConfigs.push(createMinifiedConfig(format))
+ }
+ })
+}
+
+module.exports = packageConfigs
+
+function createConfig(output, plugins = []) {
+ const isProductionBuild = /\.prod\.js$/.test(output.file)
+ const isUMDBuild = /\.umd(\.prod)?\.js$/.test(output.file)
+ const isBunlderESMBuild = /\.esm\.js$/.test(output.file)
+ const isBrowserESMBuild = /esm-browser(\.prod)?\.js$/.test(output.file)
+
+ if (isUMDBuild) {
+ output.name = packageOptions.name
+ }
+
+ const tsPlugin = ts({
+ check: process.env.NODE_ENV === 'production' && !hasTSChecked,
+ tsconfig: path.resolve(__dirname, 'tsconfig.json'),
+ cacheRoot: path.resolve(__dirname, 'node_modules/.rts2_cache'),
+ tsconfigOverride: {
+ compilerOptions: {
+ declaration: process.env.NODE_ENV === 'production' && !hasTSChecked
+ }
+ }
+ })
+ // we only need to check TS and generate declarations once for each build.
+ // it also seems to run into weird issues when checking multiple times
+ // during a single build.
+ hasTSChecked = true
+
+ return {
+ input: resolve(`src/index.ts`),
+ // UMD and Browser ESM builds inlines everything so that they can be
+ // used alone.
+ external: isUMDBuild || isBrowserESMBuild
+ ? []
+ : Object.keys(aliasOptions),
+ plugins: [
+ tsPlugin,
+ aliasPlugin,
+ createReplacePlugin(isProductionBuild, isBunlderESMBuild),
+ ...plugins
+ ],
+ output,
+ onwarn: (msg, warn) => {
+ if (!/Circular/.test(msg)) {
+ warn(msg)
+ }
+ }
+ }
+}
+
+function createReplacePlugin(isProduction, isBunlderESMBuild) {
+ return replace({
+ __DEV__: isBunlderESMBuild
+ // preserve to be handled by bundlers
+ ? `process.env.NODE_ENV !== 'production'`
+ // hard coded dev/prod builds
+ : !isProduction,
+ // compatibility builds
+ __COMPAT__: !!process.env.COMPAT
+ })
+}
+
+function createProductionConfig(format) {
+ return createConfig({
+ file: resolve(`dist/${name}.${format}.prod.js`),
+ format: /^esm/.test(format) ? 'es' : format
+ })
+}
+
+function createMinifiedConfig(format) {
+ const { terser } = require('rollup-plugin-terser')
+ const isESM = /^esm/.test(format)
+ return createConfig(
+ {
+ file: resolve(`dist/${name}.${format}.prod.js`),
+ format: isESM ? 'es' : format
+ },
+ [
+ terser({
+ module: isESM
+ })
+ ]
+ )
+}
--- /dev/null
+// create package.json, README, etc. for packages that don't have them yet
+
+const args = require('minimist')(process.argv.slice(2))
+const fs = require('fs')
+const path = require('path')
+const baseVersion = require('../lerna.json').version
+
+const packagesDir = path.resolve(__dirname, '../packages')
+const files = fs.readdirSync(packagesDir)
+
+files.forEach(shortName => {
+ if (!fs.statSync(path.join(packagesDir, shortName)).isDirectory()) {
+ return
+ }
+
+ const name = shortName === `vue` ? shortName : `@vue/${shortName}`
+ const pkgPath = path.join(packagesDir, shortName, `package.json`)
+ if (args.force || !fs.existsSync(pkgPath)) {
+ const json = {
+ name,
+ version: baseVersion,
+ description: name,
+ main: 'index.js',
+ module: `dist/${shortName}.esm.js`,
+ typings: 'dist/index.d.ts',
+ repository: {
+ type: 'git',
+ url: 'git+https://github.com/vuejs/vue.git'
+ },
+ keywords: ['vue'],
+ author: 'Evan You',
+ license: 'MIT',
+ bugs: {
+ url: 'https://github.com/vuejs/vue/issues'
+ },
+ homepage: `https://github.com/vuejs/vue/tree/dev/packages/${shortName}#readme`
+ }
+ fs.writeFileSync(pkgPath, JSON.stringify(json, null, 2))
+ }
+
+ const readmePath = path.join(packagesDir, shortName, `README.md`)
+ if (args.force || !fs.existsSync(readmePath)) {
+ fs.writeFileSync(readmePath, `# ${name}`)
+ }
+
+ const npmIgnorePath = path.join(packagesDir, shortName, `.npmignore`)
+ if (args.force || !fs.existsSync(npmIgnorePath)) {
+ fs.writeFileSync(npmIgnorePath, `__tests__/\n__mocks__/\ndist/packages`)
+ }
+
+ const srcDir = path.join(packagesDir, shortName, `src`)
+ const indexPath = path.join(packagesDir, shortName, `src/index.ts`)
+ if (args.force || !fs.existsSync(indexPath)) {
+ if (!fs.existsSync(srcDir)) {
+ fs.mkdirSync(srcDir)
+ }
+ fs.writeFileSync(indexPath, ``)
+ }
+
+ const nodeIndexPath = path.join(packagesDir, shortName, 'index.js')
+ if (args.force || !fs.existsSync(nodeIndexPath)) {
+ fs.writeFileSync(
+ nodeIndexPath,
+ `
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/${shortName}.cjs.prod.js')
+} else {
+ module.exports = require('./dist/${shortName}.cjs.js')
+}
+ `.trim() + '\n'
+ )
+ }
+})
--- /dev/null
+const fs = require('fs-extra')
+const path = require('path')
+const zlib = require('zlib')
+const chalk = require('chalk')
+const execa = require('execa')
+const dts = require('dts-bundle')
+const { targets, fuzzyMatchTarget } = require('./utils')
+
+const target = process.argv[2]
+
+;(async () => {
+ if (!target) {
+ await buildAll(targets)
+ checkAllSizes(targets)
+ } else {
+ await buildAll(fuzzyMatchTarget(target))
+ checkAllSizes(fuzzyMatchTarget(target))
+ }
+})()
+
+async function buildAll (targets) {
+ for (const target of targets) {
+ await build(target)
+ }
+}
+
+async function build (target) {
+ const pkgDir = path.resolve(`packages/${target}`)
+
+ await fs.remove(`${pkgDir}/dist`)
+
+ await execa('rollup', [
+ '-c',
+ '--environment',
+ `NODE_ENV:production,TARGET:${target}`
+ ], { stdio: 'inherit' })
+
+ const dtsOptions = {
+ name: target === 'vue' ? target : `@vue/${target}`,
+ main: `${pkgDir}/dist/packages/${target}/src/index.d.ts`,
+ out: `${pkgDir}/dist/index.d.ts`
+ }
+ dts.bundle(dtsOptions)
+ console.log()
+ console.log(chalk.blue(chalk.bold(`generated typings at ${dtsOptions.out}`)))
+
+ await fs.remove(`${pkgDir}/dist/packages`)
+}
+
+function checkAllSizes (targets) {
+ console.log()
+ for (const target of targets) {
+ checkSize(target)
+ }
+ console.log()
+}
+
+function checkSize (target) {
+ const pkgDir = path.resolve(`packages/${target}`)
+ const esmProdBuild = `${pkgDir}/dist/${target}.esm-browser.prod.js`
+ if (fs.existsSync(esmProdBuild)) {
+ const file = fs.readFileSync(esmProdBuild)
+ const minSize = (file.length / 1024).toFixed(2) + 'kb'
+ const gzipped = zlib.gzipSync(file)
+ const gzipSize = (gzipped.length / 1024).toFixed(2) + 'kb'
+ console.log(`${
+ chalk.gray(chalk.bold(target))
+ } min:${minSize} / gzip:${gzipSize}`)
+ }
+}
--- /dev/null
+// Run Rollup in watch mode for a single package for development.
+// Only the ES modules format will be generated, as it is expected to be tested
+// in a modern browser using <script type="module">.
+// Defaults to watch the `vue` meta package.
+// To specific the package to watch, simply pass its name. e.g.
+// ```
+// yarn dev observer
+// ```
+
+const execa = require('execa')
+const { targets, fuzzyMatchTarget } = require('./utils')
+
+const target = fuzzyMatchTarget(process.argv[2] || 'runtime-dom')
+
+execa(
+ 'rollup',
+ [
+ '-wc',
+ '--environment',
+ `TARGET:${target},FORMATS:umd`
+ ],
+ {
+ stdio: 'inherit'
+ }
+)
--- /dev/null
+const fs = require('fs')
+
+const targets = exports.targets = fs.readdirSync('packages').filter(f => {
+ return fs.statSync(`packages/${f}`).isDirectory()
+})
+
+exports.fuzzyMatchTarget = partialTarget => {
+ const matched = []
+ for (const target of targets) {
+ if (target.match(partialTarget)) {
+ matched.push(target)
+ }
+ }
+ if (matched.length) {
+ return matched
+ } else {
+ throw new Error(`Target ${partialTarget} not found!`)
+ }
+}
--- /dev/null
+// Invoked on the commit-msg git hook by yorkie.
+
+const chalk = require('chalk')
+const msgPath = process.env.GIT_PARAMS
+const msg = require('fs')
+ .readFileSync(msgPath, 'utf-8')
+ .trim()
+
+const commitRE = /^(revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?: .{1,50}/
+
+if (!commitRE.test(msg)) {
+ console.log()
+ console.error(
+ ` ${chalk.bgRed.white(' ERROR ')} ${chalk.red(
+ `invalid commit message format.`
+ )}\n\n` +
+ chalk.red(
+ ` Proper commit message format is required for automated changelog generation. Examples:\n\n`
+ ) +
+ ` ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
+ ` ${chalk.green(
+ `fix(v-model): handle events on blur (close #28)`
+ )}\n\n` +
+ chalk.red(` See .github/COMMIT_CONVENTION.md for more details.\n`) +
+ chalk.red(
+ ` You can also use ${chalk.cyan(
+ `npm run commit`
+ )} to interactively generate a commit message.\n`
+ )
+ )
+ process.exit(1)
+}
--- /dev/null
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "outDir": "dist",
+ "sourceMap": false,
+ "target": "esnext",
+ "module": "esnext",
+ "moduleResolution": "node",
+ // "declaration": true,
+ "allowJs": false,
+ "noUnusedLocals": true,
+ "strictNullChecks": true,
+ "noImplicitAny": true,
+ "experimentalDecorators": true,
+ "removeComments": false,
+ "lib": [
+ "esnext",
+ "dom"
+ ],
+ "rootDir": ".",
+ "paths": {
+ "@vue/core": ["packages/core/src"],
+ "@vue/observer": ["packages/observer/src"],
+ "@vue/scheduler": ["packages/scheduler/src"]
+ }
+ },
+ "include": [
+ "packages/global.d.ts",
+ "packages/*/src"
+ ]
+}
--- /dev/null
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@lerna/add@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.3.2.tgz#767a879ecb117be06414e7e76d4d93bb9934fa57"
+ dependencies:
+ "@lerna/bootstrap" "^3.3.2"
+ "@lerna/command" "^3.3.0"
+ "@lerna/filter-options" "^3.3.2"
+ "@lerna/npm-conf" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+ dedent "^0.7.0"
+ npm-package-arg "^6.0.0"
+ p-map "^1.2.0"
+ pacote "^9.1.0"
+ semver "^5.5.0"
+
+"@lerna/batch-packages@^3.1.2":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.1.2.tgz#74b5312a01a8916204cbc71237ffbe93144b99df"
+ dependencies:
+ "@lerna/package-graph" "^3.1.2"
+ "@lerna/validation-error" "^3.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/bootstrap@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.3.2.tgz#01e894295dea89dcc0c62ee188f49f78873e08c9"
+ dependencies:
+ "@lerna/batch-packages" "^3.1.2"
+ "@lerna/command" "^3.3.0"
+ "@lerna/filter-options" "^3.3.2"
+ "@lerna/has-npm-version" "^3.3.0"
+ "@lerna/npm-conf" "^3.0.0"
+ "@lerna/npm-install" "^3.3.0"
+ "@lerna/rimraf-dir" "^3.3.0"
+ "@lerna/run-lifecycle" "^3.3.1"
+ "@lerna/run-parallel-batches" "^3.0.0"
+ "@lerna/symlink-binary" "^3.3.0"
+ "@lerna/symlink-dependencies" "^3.3.0"
+ "@lerna/validation-error" "^3.0.0"
+ dedent "^0.7.0"
+ get-port "^3.2.0"
+ multimatch "^2.1.0"
+ npm-package-arg "^6.0.0"
+ npmlog "^4.1.2"
+ p-finally "^1.0.0"
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+ p-waterfall "^1.0.0"
+ read-package-tree "^5.1.6"
+ semver "^5.5.0"
+
+"@lerna/changed@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.3.2.tgz#679c9fd353a82d00e2a27847c79f061d5abdea67"
+ dependencies:
+ "@lerna/collect-updates" "^3.3.2"
+ "@lerna/command" "^3.3.0"
+ "@lerna/listable" "^3.0.0"
+ "@lerna/output" "^3.0.0"
+ "@lerna/version" "^3.3.2"
+
+"@lerna/check-working-tree@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.3.0.tgz#2118f301f28ccb530812e5b27a341b1e6b3c84e2"
+ dependencies:
+ "@lerna/describe-ref" "^3.3.0"
+ "@lerna/validation-error" "^3.0.0"
+
+"@lerna/child-process@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.3.0.tgz#71184a763105b6c8ece27f43f166498d90fe680f"
+ dependencies:
+ chalk "^2.3.1"
+ execa "^1.0.0"
+ strong-log-transformer "^2.0.0"
+
+"@lerna/clean@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.3.2.tgz#9a7e8a1e400e580de260fa124945b2939a025069"
+ dependencies:
+ "@lerna/command" "^3.3.0"
+ "@lerna/filter-options" "^3.3.2"
+ "@lerna/prompt" "^3.3.1"
+ "@lerna/rimraf-dir" "^3.3.0"
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+ p-waterfall "^1.0.0"
+
+"@lerna/cli@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.2.0.tgz#3ed25bcbc0b8f0878bc6a102ee0296f01476cfdf"
+ dependencies:
+ "@lerna/global-options" "^3.1.3"
+ dedent "^0.7.0"
+ npmlog "^4.1.2"
+ yargs "^12.0.1"
+
+"@lerna/collect-updates@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.3.2.tgz#54df5ce59ca05e8aa04ff8a9299f89cc253a9304"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/describe-ref" "^3.3.0"
+ minimatch "^3.0.4"
+ npmlog "^4.1.2"
+ slash "^1.0.0"
+
+"@lerna/command@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.3.0.tgz#e81c4716a676b02dbe9d3f548d5f45b4ba32c25a"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/package-graph" "^3.1.2"
+ "@lerna/project" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+ "@lerna/write-log-file" "^3.0.0"
+ dedent "^0.7.0"
+ execa "^1.0.0"
+ is-ci "^1.0.10"
+ lodash "^4.17.5"
+ npmlog "^4.1.2"
+
+"@lerna/conventional-commits@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.3.0.tgz#68302b6ca58b3ab7e91807664deeda2eac025ab0"
+ dependencies:
+ "@lerna/validation-error" "^3.0.0"
+ conventional-changelog-angular "^1.6.6"
+ conventional-changelog-core "^2.0.5"
+ conventional-recommended-bump "^2.0.6"
+ dedent "^0.7.0"
+ fs-extra "^7.0.0"
+ get-stream "^4.0.0"
+ npm-package-arg "^6.0.0"
+ npmlog "^4.1.2"
+ semver "^5.5.0"
+
+"@lerna/create-symlink@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.3.0.tgz#91de00fd576018ba4251f0c6a5b4b7f768f22a82"
+ dependencies:
+ cmd-shim "^2.0.2"
+ fs-extra "^7.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/create@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.3.1.tgz#cfd7e0cb30d1f45133691165e103d26318d90ebf"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/command" "^3.3.0"
+ "@lerna/npm-conf" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+ camelcase "^4.1.0"
+ dedent "^0.7.0"
+ fs-extra "^7.0.0"
+ globby "^8.0.1"
+ init-package-json "^1.10.3"
+ npm-package-arg "^6.0.0"
+ pify "^3.0.0"
+ semver "^5.5.0"
+ slash "^1.0.0"
+ validate-npm-package-license "^3.0.3"
+ validate-npm-package-name "^3.0.0"
+ whatwg-url "^7.0.0"
+
+"@lerna/describe-ref@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.3.0.tgz#d373adb530d5428ab91e303ccbfcf51a98374a3a"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ npmlog "^4.1.2"
+
+"@lerna/diff@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.3.0.tgz#c8130a5f508b47fad5fec81404498bc3acdf9cb5"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/command" "^3.3.0"
+ "@lerna/validation-error" "^3.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/exec@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.3.2.tgz#95ecaca617fd85abdb91e9a378ed06ec1763d665"
+ dependencies:
+ "@lerna/batch-packages" "^3.1.2"
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/command" "^3.3.0"
+ "@lerna/filter-options" "^3.3.2"
+ "@lerna/run-parallel-batches" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+
+"@lerna/filter-options@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.3.2.tgz#ac90702b7876ff4980dcdeaeac049c433dd01773"
+ dependencies:
+ "@lerna/collect-updates" "^3.3.2"
+ "@lerna/filter-packages" "^3.0.0"
+ dedent "^0.7.0"
+
+"@lerna/filter-packages@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0.tgz#5eb25ad1610f3e2ab845133d1f8d7d40314e838f"
+ dependencies:
+ "@lerna/validation-error" "^3.0.0"
+ multimatch "^2.1.0"
+ npmlog "^4.1.2"
+
+"@lerna/get-npm-exec-opts@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz#8fc7866e8d8e9a2f2dc385287ba32eb44de8bdeb"
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/global-options@^3.1.3":
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.1.3.tgz#cf85e24655a91d04d4efc9a80c1f83fc768d08ae"
+
+"@lerna/has-npm-version@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz#8a73c2c437a0e1e68a19ccbd0dd3c014d4d39135"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ semver "^5.5.0"
+
+"@lerna/import@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.3.1.tgz#deca8c93c9cc03c5844b975c6da9937dd7530440"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/command" "^3.3.0"
+ "@lerna/prompt" "^3.3.1"
+ "@lerna/validation-error" "^3.0.0"
+ dedent "^0.7.0"
+ fs-extra "^7.0.0"
+ p-map-series "^1.0.0"
+
+"@lerna/init@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.3.0.tgz#998f3497da3d891867c593b808b6db4b8fc4ccb9"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/command" "^3.3.0"
+ fs-extra "^7.0.0"
+ p-map "^1.2.0"
+ write-json-file "^2.3.0"
+
+"@lerna/link@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.3.0.tgz#c0c05ff52d0f0c659fcf221627edfcd58e477a5c"
+ dependencies:
+ "@lerna/command" "^3.3.0"
+ "@lerna/package-graph" "^3.1.2"
+ "@lerna/symlink-dependencies" "^3.3.0"
+ p-map "^1.2.0"
+ slash "^1.0.0"
+
+"@lerna/list@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.3.2.tgz#1412b3cce2a83b1baa4ff6fb962d50b46c28ec98"
+ dependencies:
+ "@lerna/command" "^3.3.0"
+ "@lerna/filter-options" "^3.3.2"
+ "@lerna/listable" "^3.0.0"
+ "@lerna/output" "^3.0.0"
+
+"@lerna/listable@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.0.0.tgz#27209b1382c87abdbc964220e75c247d803d4199"
+ dependencies:
+ chalk "^2.3.1"
+ columnify "^1.5.4"
+
+"@lerna/log-packed@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.0.4.tgz#6d1f6ce5ca68b9971f2a27f0ecf3c50684be174a"
+ dependencies:
+ byte-size "^4.0.3"
+ columnify "^1.5.4"
+ has-unicode "^2.0.1"
+ npmlog "^4.1.2"
+
+"@lerna/npm-conf@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.0.0.tgz#7a4b8304a0ecd1e366208f656bd3d7f4dcb3b5e7"
+ dependencies:
+ config-chain "^1.1.11"
+ pify "^3.0.0"
+
+"@lerna/npm-dist-tag@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz#e1c5ab67674216d901266a16846b21cc81ff6afd"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/get-npm-exec-opts" "^3.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/npm-install@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.3.0.tgz#16d00ffd668d11b2386b3ac68bdac2cf8320e533"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/get-npm-exec-opts" "^3.0.0"
+ fs-extra "^7.0.0"
+ npm-package-arg "^6.0.0"
+ npmlog "^4.1.2"
+ signal-exit "^3.0.2"
+ write-pkg "^3.1.0"
+
+"@lerna/npm-publish@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.3.1.tgz#30384665d7ee387343332ece62ca231207bbabea"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/get-npm-exec-opts" "^3.0.0"
+ "@lerna/has-npm-version" "^3.3.0"
+ "@lerna/log-packed" "^3.0.4"
+ fs-extra "^7.0.0"
+ npmlog "^4.1.2"
+ p-map "^1.2.0"
+
+"@lerna/npm-run-script@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz#3c79601c27c67121155b20e039be53130217db72"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/get-npm-exec-opts" "^3.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/output@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0.tgz#4ed4a30ed2f311046b714b3840a090990ba3ce35"
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/package-graph@^3.1.2":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.1.2.tgz#b70298a3a8c82e12090da33233bf242223a38f20"
+ dependencies:
+ "@lerna/validation-error" "^3.0.0"
+ npm-package-arg "^6.0.0"
+ semver "^5.5.0"
+
+"@lerna/package@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0.tgz#14afc9a6cb1f7f7b23c1d7c7aa81bdac7d44c0e5"
+ dependencies:
+ npm-package-arg "^6.0.0"
+ write-pkg "^3.1.0"
+
+"@lerna/project@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.0.0.tgz#4320d2a2b4080cabcf95161d9c48475217d8a545"
+ dependencies:
+ "@lerna/package" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+ cosmiconfig "^5.0.2"
+ dedent "^0.7.0"
+ dot-prop "^4.2.0"
+ glob-parent "^3.1.0"
+ globby "^8.0.1"
+ load-json-file "^4.0.0"
+ npmlog "^4.1.2"
+ p-map "^1.2.0"
+ resolve-from "^4.0.0"
+ write-json-file "^2.3.0"
+
+"@lerna/prompt@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.3.1.tgz#ec53f9034a7a02a671627241682947f65078ab88"
+ dependencies:
+ inquirer "^6.2.0"
+ npmlog "^4.1.2"
+
+"@lerna/publish@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.4.0.tgz#d2665f7b16eb3b2b8962c47fcf31fe901ff9a288"
+ dependencies:
+ "@lerna/batch-packages" "^3.1.2"
+ "@lerna/check-working-tree" "^3.3.0"
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/collect-updates" "^3.3.2"
+ "@lerna/command" "^3.3.0"
+ "@lerna/describe-ref" "^3.3.0"
+ "@lerna/get-npm-exec-opts" "^3.0.0"
+ "@lerna/npm-conf" "^3.0.0"
+ "@lerna/npm-dist-tag" "^3.3.0"
+ "@lerna/npm-publish" "^3.3.1"
+ "@lerna/output" "^3.0.0"
+ "@lerna/prompt" "^3.3.1"
+ "@lerna/run-lifecycle" "^3.3.1"
+ "@lerna/run-parallel-batches" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+ "@lerna/version" "^3.3.2"
+ fs-extra "^7.0.0"
+ libnpmaccess "^3.0.0"
+ npm-package-arg "^6.0.0"
+ npm-registry-fetch "^3.8.0"
+ npmlog "^4.1.2"
+ p-finally "^1.0.0"
+ p-map "^1.2.0"
+ p-pipe "^1.2.0"
+ p-reduce "^1.0.0"
+ semver "^5.5.0"
+
+"@lerna/resolve-symlink@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz#c5d99a60cb17e2ea90b3521a0ba445478d194a44"
+ dependencies:
+ fs-extra "^7.0.0"
+ npmlog "^4.1.2"
+ read-cmd-shim "^1.0.1"
+
+"@lerna/rimraf-dir@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz#687e9bb3668a9e540e281302a52d9a573860f5db"
+ dependencies:
+ "@lerna/child-process" "^3.3.0"
+ npmlog "^4.1.2"
+ path-exists "^3.0.0"
+ rimraf "^2.6.2"
+
+"@lerna/run-lifecycle@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.3.1.tgz#13a03f353aab6c1639bf8953f58f0c45585785ac"
+ dependencies:
+ "@lerna/npm-conf" "^3.0.0"
+ npm-lifecycle "^2.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/run-parallel-batches@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz#468704934084c74991d3124d80607857d4dfa840"
+ dependencies:
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+
+"@lerna/run@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.3.2.tgz#f521f4a22585c90758f34a584cb1871f8bb2a83e"
+ dependencies:
+ "@lerna/batch-packages" "^3.1.2"
+ "@lerna/command" "^3.3.0"
+ "@lerna/filter-options" "^3.3.2"
+ "@lerna/npm-run-script" "^3.3.0"
+ "@lerna/output" "^3.0.0"
+ "@lerna/run-parallel-batches" "^3.0.0"
+ "@lerna/validation-error" "^3.0.0"
+ p-map "^1.2.0"
+
+"@lerna/symlink-binary@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz#99ea570b21baabd61ecab27582eeb1d7b2c5f9cf"
+ dependencies:
+ "@lerna/create-symlink" "^3.3.0"
+ "@lerna/package" "^3.0.0"
+ fs-extra "^7.0.0"
+ p-map "^1.2.0"
+ read-pkg "^3.0.0"
+
+"@lerna/symlink-dependencies@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz#13bcaed3e37986ab01b13498a459c7f609397dc3"
+ dependencies:
+ "@lerna/create-symlink" "^3.3.0"
+ "@lerna/resolve-symlink" "^3.3.0"
+ "@lerna/symlink-binary" "^3.3.0"
+ fs-extra "^7.0.0"
+ p-finally "^1.0.0"
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+
+"@lerna/validation-error@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0.tgz#a27e90051c3ba71995e2a800a43d94ad04b3e3f4"
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/version@^3.3.2":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.3.2.tgz#b1f4be43f61edf97428efca09dddc47ffd769bb4"
+ dependencies:
+ "@lerna/batch-packages" "^3.1.2"
+ "@lerna/check-working-tree" "^3.3.0"
+ "@lerna/child-process" "^3.3.0"
+ "@lerna/collect-updates" "^3.3.2"
+ "@lerna/command" "^3.3.0"
+ "@lerna/conventional-commits" "^3.3.0"
+ "@lerna/output" "^3.0.0"
+ "@lerna/prompt" "^3.3.1"
+ "@lerna/run-lifecycle" "^3.3.1"
+ "@lerna/validation-error" "^3.0.0"
+ chalk "^2.3.1"
+ dedent "^0.7.0"
+ minimatch "^3.0.4"
+ npmlog "^4.1.2"
+ p-map "^1.2.0"
+ p-pipe "^1.2.0"
+ p-reduce "^1.0.0"
+ p-waterfall "^1.0.0"
+ semver "^5.5.0"
+ slash "^1.0.0"
+ temp-write "^3.4.0"
+
+"@lerna/write-log-file@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0.tgz#2f95fee80c6821fe1ee6ccf8173d2b4079debbd2"
+ dependencies:
+ npmlog "^4.1.2"
+ write-file-atomic "^2.3.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.2"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26"
+
+"@types/detect-indent@0.1.30":
+ version "0.1.30"
+ resolved "https://registry.yarnpkg.com/@types/detect-indent/-/detect-indent-0.1.30.tgz#dc682bb412b4e65ba098e70edad73b4833fb910d"
+
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+
+"@types/glob@5.0.30":
+ version "5.0.30"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.30.tgz#1026409c5625a8689074602808d082b2867b8a51"
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/minimatch@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+
+"@types/mkdirp@0.3.29":
+ version "0.3.29"
+ resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.3.29.tgz#7f2ad7ec55f914482fc9b1ec4bb1ae6028d46066"
+
+"@types/node@*":
+ version "10.9.4"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897"
+
+"@types/node@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.0.tgz#acaa89247afddc7967e9902fd11761dadea1a555"
+
+JSONStream@^1.0.4, JSONStream@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.4.tgz#615bb2adb0cd34c8f4c447b5f6512fa1d8f16a2e"
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+
+agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
+ dependencies:
+ es6-promisify "^5.0.0"
+
+agentkeepalive@^3.4.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.1.tgz#4eba75cf2ad258fc09efd506cdb8d8c2971d35a4"
+ dependencies:
+ humanize-ms "^1.2.1"
+
+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"
+
+ansi-escapes@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
+
+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@^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"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+
+aproba@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+
+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-differ@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+
+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-ify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+
+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"
+
+asap@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ dependencies:
+ safer-buffer "~2.1.0"
+
+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"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+
+async@^2.5.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.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+
+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.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
+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"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+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.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a"
+
+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.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"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+builtins@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
+
+byline@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
+
+byte-size@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.3.tgz#b7c095efc68eadf82985fccd9a2df43a74fa2ccd"
+
+cacache@^11.0.1, cacache@^11.0.2:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.2.0.tgz#617bdc0b02844af56310e411c0878941d5739965"
+ dependencies:
+ bluebird "^3.5.1"
+ chownr "^1.0.1"
+ figgy-pudding "^3.1.0"
+ glob "^7.1.2"
+ graceful-fs "^4.1.11"
+ lru-cache "^4.1.3"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.2"
+ ssri "^6.0.0"
+ 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"
+
+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"
+
+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-keys@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+ dependencies:
+ camelcase "^4.1.0"
+ map-obj "^2.0.0"
+ quick-lru "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
+chalk@^2.0.0, chalk@^2.3.1, 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.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+
+chownr@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+
+ci-info@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.5.1.tgz#17e8eb5de6f8b2b6038f0cbb714d410bfa9f3030"
+
+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"
+
+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-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+
+cliui@^4.0.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@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+
+cmd-shim@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb"
+ dependencies:
+ graceful-fs "^4.1.2"
+ mkdirp "~0.5.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+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.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+
+columnify@^1.5.4:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
+ dependencies:
+ strip-ansi "^3.0.0"
+ wcwidth "^1.0.0"
+
+combined-stream@1.0.6:
+ version "1.0.6"
+ resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+combined-stream@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.9.0:
+ version "2.18.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
+
+commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+
+compare-func@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^3.0.0"
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.5.0, concat-stream@^1.6.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+config-chain@^1.1.11:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+conventional-changelog-angular@^1.6.6:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f"
+ dependencies:
+ compare-func "^1.3.1"
+ q "^1.5.1"
+
+conventional-changelog-core@^2.0.5:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287"
+ dependencies:
+ conventional-changelog-writer "^3.0.9"
+ conventional-commits-parser "^2.1.7"
+ dateformat "^3.0.0"
+ get-pkg-repo "^1.0.0"
+ git-raw-commits "^1.3.6"
+ git-remote-origin-url "^2.0.0"
+ git-semver-tags "^1.3.6"
+ lodash "^4.2.1"
+ normalize-package-data "^2.3.5"
+ q "^1.5.1"
+ read-pkg "^1.1.0"
+ read-pkg-up "^1.0.1"
+ through2 "^2.0.0"
+
+conventional-changelog-preset-loader@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373"
+
+conventional-changelog-writer@^3.0.9:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz#4aecdfef33ff2a53bb0cf3b8071ce21f0e994634"
+ dependencies:
+ compare-func "^1.3.1"
+ conventional-commits-filter "^1.1.6"
+ dateformat "^3.0.0"
+ handlebars "^4.0.2"
+ json-stringify-safe "^5.0.1"
+ lodash "^4.2.1"
+ meow "^4.0.0"
+ semver "^5.5.0"
+ split "^1.0.0"
+ through2 "^2.0.0"
+
+conventional-commits-filter@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831"
+ dependencies:
+ is-subset "^0.1.1"
+ modify-values "^1.0.0"
+
+conventional-commits-parser@^2.1.7:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e"
+ dependencies:
+ JSONStream "^1.0.4"
+ is-text-path "^1.0.0"
+ lodash "^4.2.1"
+ meow "^4.0.0"
+ split2 "^2.0.0"
+ through2 "^2.0.0"
+ trim-off-newlines "^1.0.0"
+
+conventional-recommended-bump@^2.0.6:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-2.0.9.tgz#7392421e7d0e3515f3df2040572a23cc73a68a93"
+ dependencies:
+ concat-stream "^1.6.0"
+ conventional-changelog-preset-loader "^1.1.8"
+ conventional-commits-filter "^1.1.6"
+ conventional-commits-parser "^2.1.7"
+ git-raw-commits "^1.3.6"
+ git-semver-tags "^1.3.6"
+ meow "^4.0.0"
+ q "^1.5.1"
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+cosmiconfig@^5.0.2:
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39"
+ dependencies:
+ is-directory "^0.3.1"
+ js-yaml "^3.9.0"
+ parse-json "^4.0.0"
+
+cross-spawn@^6.0.0:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+
+dargs@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+dateformat@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
+
+debug@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.2.0, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407"
+ dependencies:
+ ms "^2.1.1"
+
+debuglog@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
+
+decamelize-keys@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+decamelize@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
+ dependencies:
+ xregexp "4.0.0"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ dependencies:
+ clone "^1.0.2"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+detect-indent@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-0.2.0.tgz#042914498979ac2d9f3c73e4ff3e6877d3bc92b6"
+ dependencies:
+ get-stdin "^0.1.0"
+ minimist "^0.1.0"
+
+detect-indent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
+
+dezalgo@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
+ dependencies:
+ asap "^2.0.0"
+ wrappy "1"
+
+dir-glob@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ dependencies:
+ is-obj "^1.0.0"
+
+dts-bundle@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/dts-bundle/-/dts-bundle-0.7.3.tgz#372b7bb69c820782e6382f400739a69dced3d59a"
+ dependencies:
+ "@types/detect-indent" "0.1.30"
+ "@types/glob" "5.0.30"
+ "@types/mkdirp" "0.3.29"
+ "@types/node" "8.0.0"
+ commander "^2.9.0"
+ detect-indent "^0.2.0"
+ glob "^6.0.4"
+ mkdirp "^0.5.0"
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410"
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ dependencies:
+ once "^1.4.0"
+
+err-code@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es6-promise@^4.0.3:
+ version "4.2.5"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
+
+es6-promisify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+ dependencies:
+ es6-promise "^4.0.3"
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+
+estree-walker@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+
+external-editor@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+
+fast-deep-equal@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+
+fast-glob@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf"
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.0.1"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.1"
+ micromatch "^3.1.10"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+
+figgy-pudding@^3.1.0, figgy-pudding@^3.2.1, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+
+fill-range@^2.1.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^3.0.0"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ dependencies:
+ locate-path "^3.0.0"
+
+flush-write-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.4"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "1.0.6"
+ mime-types "^2.1.12"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ dependencies:
+ map-cache "^0.2.2"
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-extra@7.0.0, fs-extra@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fstream@^1.0.0, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+genfun@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1"
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+
+get-pkg-repo@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ meow "^3.3.0"
+ normalize-package-data "^2.3.0"
+ parse-github-repo-url "^1.3.0"
+ through2 "^2.0.0"
+
+get-port@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc"
+
+get-stdin@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-0.1.0.tgz#5998af24aafc802d15c82c685657eeb8b10d4a91"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+get-stream@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.0.0.tgz#9e074cb898bd2b9ebabb445a1766d7f43576d977"
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
+git-raw-commits@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff"
+ dependencies:
+ dargs "^4.0.1"
+ lodash.template "^4.0.2"
+ meow "^4.0.0"
+ split2 "^2.0.0"
+ through2 "^2.0.0"
+
+git-remote-origin-url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
+ dependencies:
+ gitconfiglocal "^1.0.0"
+ pify "^2.3.0"
+
+git-semver-tags@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.6.tgz#357ea01f7280794fe0927f2806bee6414d2caba5"
+ dependencies:
+ meow "^4.0.0"
+ semver "^5.5.0"
+
+gitconfiglocal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
+ dependencies:
+ ini "^1.3.2"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+
+glob@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globby@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50"
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "^2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+handlebars@^4.0.2:
+ version "4.0.12"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5"
+ dependencies:
+ async "^2.5.0"
+ optimist "^0.6.1"
+ source-map "^0.6.1"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+
+har-validator@~5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
+ dependencies:
+ ajv "^5.3.0"
+ har-schema "^2.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
+has-unicode@^2.0.0, has-unicode@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+hosted-git-info@^2.1.4, hosted-git-info@^2.6.0:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+
+http-cache-semantics@^3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
+
+http-proxy-agent@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
+ dependencies:
+ agent-base "4"
+ debug "3.1.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-proxy-agent@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
+ dependencies:
+ agent-base "^4.1.0"
+ debug "^3.1.0"
+
+humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ dependencies:
+ ms "^2.0.0"
+
+iconv-lite@^0.4.24, iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+
+import-local@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
+ dependencies:
+ pkg-dir "^2.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+ini@^1.3.2, ini@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+
+init-package-json@^1.10.3:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe"
+ dependencies:
+ glob "^7.1.1"
+ npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0"
+ promzard "^0.3.0"
+ read "~1.0.1"
+ read-package-json "1 || 2"
+ semver "2.x || 3.x || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+ validate-npm-package-name "^3.0.0"
+
+inquirer@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8"
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.0"
+ figures "^2.0.0"
+ lodash "^4.17.10"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.1.0"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+
+ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-ci@^1.0.10:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ dependencies:
+ ci-info "^1.5.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ dependencies:
+ kind-of "^6.0.0"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ dependencies:
+ isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-subset@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+
+is-text-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ dependencies:
+ text-extensions "^1.0.0"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+jest-worker@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
+ dependencies:
+ merge-stream "^1.0.1"
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+
+js-yaml@^3.9.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ dependencies:
+ invert-kv "^2.0.0"
+
+lerna@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.4.0.tgz#c1403852b4b3fa986072de11d7f549604fd41775"
+ dependencies:
+ "@lerna/add" "^3.3.2"
+ "@lerna/bootstrap" "^3.3.2"
+ "@lerna/changed" "^3.3.2"
+ "@lerna/clean" "^3.3.2"
+ "@lerna/cli" "^3.2.0"
+ "@lerna/create" "^3.3.1"
+ "@lerna/diff" "^3.3.0"
+ "@lerna/exec" "^3.3.2"
+ "@lerna/import" "^3.3.1"
+ "@lerna/init" "^3.3.0"
+ "@lerna/link" "^3.3.0"
+ "@lerna/list" "^3.3.2"
+ "@lerna/publish" "^3.4.0"
+ "@lerna/run" "^3.3.2"
+ "@lerna/version" "^3.3.2"
+ import-local "^1.0.0"
+ npmlog "^4.1.2"
+
+libnpmaccess@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.0.tgz#33cc9c8a5cb53e87d06bf2e547c2eba974f619af"
+ dependencies:
+ aproba "^2.0.0"
+ get-stream "^4.0.0"
+ npm-package-arg "^6.1.0"
+ npm-registry-fetch "^3.8.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lodash._reinterpolate@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+
+lodash.template@^4.0.2:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+
+lodash@^4.17.10, lodash@^4.17.5, lodash@^4.2.1:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lru-cache@^4.1.2, lru-cache@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+magic-string@^0.22.4:
+ version "0.22.5"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
+ dependencies:
+ vlq "^0.2.2"
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ dependencies:
+ pify "^3.0.0"
+
+make-fetch-happen@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083"
+ dependencies:
+ agentkeepalive "^3.4.1"
+ cacache "^11.0.1"
+ http-cache-semantics "^3.8.1"
+ http-proxy-agent "^2.1.0"
+ https-proxy-agent "^2.2.1"
+ lru-cache "^4.1.2"
+ mississippi "^3.0.0"
+ node-fetch-npm "^2.0.2"
+ promise-retry "^1.1.1"
+ socks-proxy-agent "^4.0.0"
+ ssri "^6.0.0"
+
+map-age-cleaner@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74"
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+map-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ dependencies:
+ object-visit "^1.0.0"
+
+math-random@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
+
+mem@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf"
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^1.0.0"
+ p-is-promise "^1.1.0"
+
+meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+meow@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
+ dependencies:
+ camelcase-keys "^4.0.0"
+ decamelize-keys "^1.0.0"
+ loud-rejection "^1.0.0"
+ minimist "^1.1.3"
+ minimist-options "^3.0.1"
+ normalize-package-data "^2.3.4"
+ read-pkg-up "^3.0.0"
+ redent "^2.0.0"
+ trim-newlines "^2.0.0"
+
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ dependencies:
+ readable-stream "^2.0.1"
+
+merge2@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34"
+
+micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+micromatch@^3.1.10:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+mime-db@~1.36.0:
+ version "1.36.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
+
+mime-types@^2.1.12, mime-types@~2.1.19:
+ version "2.1.20"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
+ dependencies:
+ mime-db "~1.36.0"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist-options@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^0.1.0:
+ version "0.1.0"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de"
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+
+minipass@^2.2.1, minipass@^2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957"
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb"
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+ version "0.5.1"
+ resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+modify-values@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+ms@^2.0.0, ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+
+multimatch@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
+ dependencies:
+ array-differ "^1.0.0"
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ minimatch "^3.0.0"
+
+mute-stream@0.0.7, mute-stream@~0.0.4:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+
+node-fetch-npm@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7"
+ dependencies:
+ encoding "^0.1.11"
+ json-parse-better-errors "^1.0.0"
+ safe-buffer "^5.1.1"
+
+node-gyp@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request "^2.87.0"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
+"nopt@2 || 3":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-bundled@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
+
+npm-lifecycle@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz#1eda2eedb82db929e3a0c50341ab0aad140ed569"
+ dependencies:
+ byline "^5.0.0"
+ graceful-fs "^4.1.11"
+ node-gyp "^3.8.0"
+ resolve-from "^4.0.0"
+ slide "^1.1.6"
+ uid-number "0.0.6"
+ umask "^1.1.0"
+ which "^1.3.1"
+
+"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1"
+ dependencies:
+ hosted-git-info "^2.6.0"
+ osenv "^0.1.5"
+ semver "^5.5.0"
+ validate-npm-package-name "^3.0.0"
+
+npm-packlist@^1.1.10:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de"
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-pick-manifest@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz#dc381bdd670c35d81655e1d5a94aa3dd4d87fce5"
+ dependencies:
+ npm-package-arg "^6.0.0"
+ semver "^5.4.1"
+
+npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz#aa7d9a7c92aff94f48dba0984bdef4bd131c88cc"
+ dependencies:
+ JSONStream "^1.3.4"
+ bluebird "^3.5.1"
+ figgy-pudding "^3.4.1"
+ lru-cache "^4.1.3"
+ make-fetch-happen "^4.0.1"
+ npm-package-arg "^6.1.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ dependencies:
+ isobject "^3.0.0"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ dependencies:
+ isobject "^3.0.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620"
+ dependencies:
+ execa "^0.10.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@0, osenv@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-is-promise@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec"
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ dependencies:
+ p-limit "^2.0.0"
+
+p-map-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-map@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+
+p-pipe@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+
+p-try@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
+
+p-waterfall@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00"
+ dependencies:
+ p-reduce "^1.0.0"
+
+pacote@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.1.0.tgz#59810859bbd72984dcb267269259375d32f391e5"
+ dependencies:
+ bluebird "^3.5.1"
+ cacache "^11.0.2"
+ figgy-pudding "^3.2.1"
+ get-stream "^3.0.0"
+ glob "^7.1.2"
+ lru-cache "^4.1.3"
+ make-fetch-happen "^4.0.1"
+ minimatch "^3.0.4"
+ minipass "^2.3.3"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ normalize-package-data "^2.4.0"
+ npm-package-arg "^6.1.0"
+ npm-packlist "^1.1.10"
+ npm-pick-manifest "^2.1.0"
+ npm-registry-fetch "^3.0.0"
+ osenv "^0.1.5"
+ promise-inflight "^1.0.1"
+ promise-retry "^1.1.1"
+ protoduck "^5.0.0"
+ rimraf "^2.6.2"
+ safe-buffer "^5.1.2"
+ semver "^5.5.0"
+ ssri "^6.0.0"
+ tar "^4.4.3"
+ unique-filename "^1.1.0"
+ which "^1.3.0"
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parse-github-repo-url@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
+path-parse@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ dependencies:
+ pify "^3.0.0"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ dependencies:
+ find-up "^2.1.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+prettier@^1.14.2:
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9"
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+
+promise-retry@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d"
+ dependencies:
+ err-code "^1.0.0"
+ retry "^0.10.0"
+
+promzard@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"
+ dependencies:
+ read "1"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+
+protoduck@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.0.tgz#752145e6be0ad834cb25716f670a713c860dce70"
+ dependencies:
+ genfun "^4.0.1"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+psl@^1.1.24:
+ version "1.1.29"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+
+q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+
+quick-lru@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+
+randomatic@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116"
+ dependencies:
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
+
+read-cmd-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b"
+ dependencies:
+ graceful-fs "^4.1.2"
+
+"read-package-json@1 || 2", read-package-json@^2.0.0:
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a"
+ dependencies:
+ glob "^7.1.1"
+ json-parse-better-errors "^1.0.1"
+ normalize-package-data "^2.0.0"
+ slash "^1.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.2"
+
+read-package-tree@^5.1.6:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63"
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ once "^1.3.0"
+ read-package-json "^2.0.0"
+ readdir-scoped-modules "^1.0.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg@^1.0.0, read-pkg@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+read@1, read@~1.0.1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ dependencies:
+ mute-stream "~0.0.4"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdir-scoped-modules@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ graceful-fs "^4.1.2"
+ once "^1.3.0"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+ dependencies:
+ indent-string "^3.0.0"
+ strip-indent "^2.0.0"
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+
+repeat-string@^1.5.2, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.87.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+
+resolve@1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ dependencies:
+ path-parse "^1.0.5"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+
+retry@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
+
+rimraf@2, rimraf@^2.5.4, rimraf@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ dependencies:
+ glob "^7.0.5"
+
+rollup-plugin-alias@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.4.0.tgz#120cba7c46621c03138f0ca6fd5dd2ade9872db9"
+ dependencies:
+ slash "^1.0.0"
+
+rollup-plugin-replace@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.0.0.tgz#19074089c8ed57184b8cc64e967a03d095119277"
+ dependencies:
+ magic-string "^0.22.4"
+ minimatch "^3.0.2"
+ rollup-pluginutils "^2.0.1"
+
+rollup-plugin-terser@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-2.0.2.tgz#1b59d67c80fc0d499cdc29a6991944b2d671ea03"
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ jest-worker "^23.2.0"
+ terser "^3.8.2"
+
+rollup-plugin-typescript2@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.17.0.tgz#a540eecfe9ad8ff5e8e86eaf5069bb2a7f84f33a"
+ dependencies:
+ fs-extra "7.0.0"
+ resolve "1.8.1"
+ rollup-pluginutils "2.3.1"
+ tslib "1.9.3"
+
+rollup-pluginutils@2.3.1, rollup-pluginutils@^2.0.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.1.tgz#760d185ccc237dedc12d7ae48c6bcd127b4892d0"
+ dependencies:
+ estree-walker "^0.5.2"
+ micromatch "^2.3.11"
+
+rollup@^0.65.0:
+ version "0.65.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.65.0.tgz#280db1252169b68fc3043028346b337dde453fba"
+ dependencies:
+ "@types/estree" "0.0.39"
+ "@types/node" "*"
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ dependencies:
+ is-promise "^2.1.0"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ dependencies:
+ aproba "^1.1.1"
+
+rxjs@^6.1.0:
+ version "6.3.2"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f"
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+
+"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0:
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
+
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+
+slide@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
+smart-buffer@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+socks-proxy-agent@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473"
+ dependencies:
+ agent-base "~4.2.0"
+ socks "~2.2.0"
+
+socks@~2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9"
+ dependencies:
+ ip "^1.1.5"
+ smart-buffer "^4.0.1"
+
+sort-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@~0.5.6:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+
+source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+
+spdx-correct@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f"
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split2@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
+ dependencies:
+ through2 "^2.0.2"
+
+split@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+sshpk@^1.7.0:
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ safer-buffer "^2.0.2"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-indent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+
+strong-log-transformer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz#fa6d8e0a9e62b3c168c3cad5ae5d00dc97ba26cc"
+ dependencies:
+ byline "^5.0.0"
+ duplexer "^0.1.1"
+ minimist "^1.2.0"
+ through "^2.3.4"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ dependencies:
+ has-flag "^3.0.0"
+
+tar@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+tar@^4.4.3:
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b"
+ dependencies:
+ chownr "^1.0.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.3"
+ minizlib "^1.1.0"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+temp-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
+
+temp-write@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492"
+ dependencies:
+ graceful-fs "^4.1.2"
+ is-stream "^1.1.0"
+ make-dir "^1.0.0"
+ pify "^3.0.0"
+ temp-dir "^1.0.0"
+ uuid "^3.0.1"
+
+terser@^3.8.2:
+ version "3.8.2"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-3.8.2.tgz#48b880f949f8d038aca4dfd00a37c53d96ecf9fb"
+ dependencies:
+ commander "~2.17.1"
+ source-map "~0.6.1"
+ source-map-support "~0.5.6"
+
+text-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.8.0.tgz#6f343c62268843019b21a616a003557bdb952d2b"
+
+through2@^2.0.0, through2@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6:
+ version "2.3.8"
+ resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ dependencies:
+ punycode "^2.1.0"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-newlines@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+
+trim-off-newlines@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
+
+tslib@1.9.3, tslib@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+typescript@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.3.tgz#4853b3e275ecdaa27f78fda46dc273a7eb7fc1c8"
+
+uglify-js@^3.1.4:
+ version "3.4.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+ dependencies:
+ commander "~2.17.1"
+ source-map "~0.6.1"
+
+uid-number@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+umask@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unique-filename@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab"
+ dependencies:
+ imurmurhash "^0.1.4"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+uuid@^3.0.1, uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+
+validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+validate-npm-package-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
+ dependencies:
+ builtins "^1.0.3"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vlq@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
+
+wcwidth@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ dependencies:
+ defaults "^1.0.3"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+
+whatwg-url@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+
+which@1, which@^1.2.9, which@^1.3.0, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-atomic@^2.0.0, write-file-atomic@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-json-file@^2.2.0, write-json-file@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f"
+ dependencies:
+ detect-indent "^5.0.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ pify "^3.0.0"
+ sort-keys "^2.0.0"
+ write-file-atomic "^2.0.0"
+
+write-pkg@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21"
+ dependencies:
+ sort-keys "^2.0.0"
+ write-json-file "^2.2.0"
+
+xregexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
+
+xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+yallist@^3.0.0, yallist@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
+
+yargs-parser@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^12.0.1:
+ version "12.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc"
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^2.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^10.1.0"