├── .gitignore
├── .npmignore
├── src
├── plugins
│ ├── base.coffee
│ ├── index.coffee
│ ├── distinctid.coffee
│ ├── utm.coffee
│ └── referral.coffee
├── providers
│ ├── index.coffee
│ ├── growingio.coffee
│ ├── base.coffee
│ ├── baidu.coffee
│ ├── google.coffee
│ ├── fullstory.coffee
│ ├── customerio.coffee
│ ├── sensorsdata.coffee
│ └── tbpanel.coffee
├── common.coffee
└── index.coffee
├── bower.json
├── webpack.config.js
├── package.json
├── test
├── test.js
└── index.html
├── LICENSE
├── CHANGELOG.md
├── README.md
├── lib
└── index.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | bower_components
3 | www
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 |
2 | /src
3 | /test
4 | /Gruntfile.coffee
5 | /bower.json
6 |
--------------------------------------------------------------------------------
/src/plugins/base.coffee:
--------------------------------------------------------------------------------
1 |
2 | module.exports = class BasePlugin
3 | name: 'base'
4 | constructor: (gta) -> # virtual
5 | onGTAEvent: (gtaOptions) -> gtaOptions
6 |
--------------------------------------------------------------------------------
/src/plugins/index.coffee:
--------------------------------------------------------------------------------
1 | UTM = require './utm'
2 | Referral = require './referral'
3 | DistinctID = require './distinctid'
4 |
5 | module.exports =
6 | utm: UTM
7 | referral: Referral
8 | distinctid: DistinctID
9 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gta",
3 | "version": "1.1.6",
4 | "main": "lib/index.js",
5 | "ignore": [
6 | "**/.*",
7 | "node_modules",
8 | "bower_components",
9 | "test",
10 | "tests"
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/src/plugins/distinctid.coffee:
--------------------------------------------------------------------------------
1 | BasePlugin = require './base'
2 |
3 | module.exports = class DistinctID extends BasePlugin
4 | name: 'distinct id synchronizer'
5 |
6 | constructor: (gta)->
7 | try
8 | if window.tbpanel and window.sa
9 | sa.quick 'isReady', ->
10 | tbpanel.identify(sa.store.getDistinctId())
11 | catch e
12 | console.error e if gta.debug or window._gta_debug
13 |
--------------------------------------------------------------------------------
/src/providers/index.coffee:
--------------------------------------------------------------------------------
1 | Google = require './google'
2 | Baidu = require './baidu'
3 | Customer = require './customerio'
4 | Fullstory = require './fullstory'
5 | GrowingIO = require './growingio'
6 | TBPanel = require './tbpanel'
7 | Sensors = require './sensorsdata'
8 |
9 | module.exports =
10 | google: Google
11 | baidu: Baidu
12 | tbpanel: TBPanel
13 | customer: Customer
14 | fullstory: Fullstory
15 | growingio: GrowingIO
16 | sensors: Sensors
17 |
--------------------------------------------------------------------------------
/src/providers/growingio.coffee:
--------------------------------------------------------------------------------
1 | # Last updated at 2016-10-28
2 |
3 | BaseProvider = require './base'
4 |
5 | module.exports =
6 | class GrowingIO extends BaseProvider
7 | name: 'growingio'
8 |
9 | constructor: (account) ->
10 | return unless account
11 | _vds = _vds or []
12 | window._vds = _vds
13 | _vds.push ['setAccountId', account]
14 | script = BaseProvider.createScript (if 'https:' is document.location.protocol then 'https://' else 'http://') + 'dn-growing.qbox.me/vds.js'
15 | BaseProvider.loadScript script
16 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | entry: "./src/index.coffee",
5 | output: {
6 | library: 'Gta',
7 | libraryTarget: 'umd',
8 | umdNamedDefine: true,
9 | path: path.resolve(__dirname, 'lib'),
10 | filename: "index.js"
11 | },
12 | module: {
13 | loaders: [
14 | { test: /\.coffee$/, loader: "coffee-loader" }
15 | ]
16 | },
17 | resolve: {
18 | root: path.resolve('./src'),
19 | extensions: ['', '.js', '.coffee']
20 | }
21 | };
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "teambition-gta",
3 | "version": "1.1.6",
4 | "description": "group teambition analysis tool",
5 | "main": "lib/index.js",
6 | "scripts": {
7 | "build": "webpack"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git@github.com:teambition/gta"
12 | },
13 | "keywords": [
14 | "google",
15 | "baidu",
16 | "mixpanel",
17 | "analysis",
18 | "customer.io",
19 | "fullstory",
20 | "growingio"
21 | ],
22 | "author": "teambition",
23 | "license": "MIT",
24 | "bugs": {
25 | "url": "https://github.com/teambition/gta/issues"
26 | },
27 | "devDependencies": {
28 | "coffee-loader": "^0.7.2",
29 | "coffee-script": "^1.11.1",
30 | "webpack": "^1.13.3"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/providers/base.coffee:
--------------------------------------------------------------------------------
1 | Common = require '../common'
2 |
3 | module.exports = class BaseProvider
4 | name: 'base'
5 | event: -> # virtual
6 | setUser: -> # virtual
7 | pageview: -> # virtual
8 |
9 | BaseProvider.createScript = (src, id) ->
10 | script = document.createElement 'script'
11 | script.async = 1
12 | script.src = src
13 | script.id = id if id
14 | return script
15 |
16 | BaseProvider.loadScript = (script, key, removeAfterLoad = yes) ->
17 | script.onerror = ->
18 | window[key] = null
19 | Common.removeElement script
20 | script.onload = ->
21 | if removeAfterLoad
22 | Common.removeElement script
23 |
24 | firstScript = document.getElementsByTagName('script')[0]
25 | firstScript.parentNode.insertBefore(script, firstScript)
26 |
--------------------------------------------------------------------------------
/test/test.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | console.log('test start!');
3 |
4 | window.Gta.debug = true;
5 |
6 | window.Gta.test = function () {
7 | window.Gta.pageview({
8 | 'page': '/my-overridden-page?id=1',
9 | 'title': 'my overridden page'
10 | });
11 | window.Gta.setCurrentPage('Tasks List Page');
12 | window.Gta.event({action: 'drag post card', type: 'post', control: 'Post Menu', method: 'drag'});
13 | }
14 | window.Gta.setUser('ziqiang250', {
15 | name: 'ziqiang',
16 | email: 'ziqiang@tb.com',
17 | created_at: {
18 | value: '20150805',
19 | alias: {
20 | fullstory: 'created_at_date'
21 | }
22 | },
23 | language: 'en',
24 | env: 'web',
25 | version: '2.5.0',
26 | city: 'Xi\'an',
27 | country: 'China',
28 | region: 'Shanxi',
29 | })
30 | }())
31 |
--------------------------------------------------------------------------------
/src/plugins/utm.coffee:
--------------------------------------------------------------------------------
1 | BasePlugin = require './base'
2 |
3 | UTM_TAG_REGEX = /utm_(\w+)=([^&]*)&?/ig
4 | COOKIE_TEST_REGEX = /(^|;\s?)utm=(\S+)(?:;|$)/i
5 |
6 | module.exports = class UTMDaemon extends BasePlugin
7 | name: 'utm daemon'
8 |
9 | constructor: (gta)->
10 | try
11 | return if COOKIE_TEST_REGEX.test(document.cookie)
12 | utm = {}
13 | while match = UTM_TAG_REGEX.exec window.location.search
14 | [ part, key, value ] = match
15 | utm[key] = value
16 | encodedUTM = encodeURIComponent(JSON.stringify(utm))
17 | domain = ".#{/\.?([\w\-]+\.\w+)$/.exec(window.location.hostname)[1]}"
18 | monthLater = new Date(Date.now() + 2592000000).toGMTString() # 1000 * 60 * 60 * 24 * 30
19 | if part
20 | document.cookie = "utm=#{encodedUTM};expires=#{monthLater};domain=#{domain};path=/"
21 | catch e
22 | console.error e if gta.debug or window._gta_debug
23 |
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | homepage
5 |
11 |
12 |
13 |
14 | hello world
15 |
16 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/providers/baidu.coffee:
--------------------------------------------------------------------------------
1 | # Last updated at 2016-10-27
2 |
3 | BaseProvider = require './base'
4 | Common = require '../common'
5 |
6 | module.exports =
7 | class Baidu extends BaseProvider
8 | name: 'baidu'
9 |
10 | constructor: (account) ->
11 | return unless account
12 | window._hmt = window._hmt || []
13 | script = BaseProvider.createScript "//hm.baidu.com/hm.js?#{account}"
14 | BaseProvider.loadScript script, '_hmt'
15 |
16 | pageview: ->
17 | return unless window._hmt
18 | args = Array::slice.call arguments
19 | if typeof args[0] is 'object'
20 | data = args[0].page
21 | unless data
22 | data = (val for key, val of args[0]).join '_'
23 | else
24 | data = args.join '_'
25 | window._hmt.push ['_trackPageview', data]
26 |
27 | event: (gtaOptions) ->
28 | return unless window._hmt
29 | category = gtaOptions.page or ''
30 | action = gtaOptions.action or ''
31 | label = gtaOptions.type or ''
32 | window._hmt.push ['_trackEvent', category, action, label]
33 |
--------------------------------------------------------------------------------
/src/plugins/referral.coffee:
--------------------------------------------------------------------------------
1 | BasePlugin = require './base'
2 |
3 | COOKIE_TEST_REGEX = /(^|;\s?)referral=(\S+)(?:;|$)/i
4 |
5 | module.exports = class ReferralDaemon extends BasePlugin
6 | name: 'referral daemon'
7 |
8 | constructor: (gta)->
9 | try
10 | if document.referrer and not COOKIE_TEST_REGEX.test(document.cookie)
11 | $parser = document.createElement('a')
12 | $parser.href = document.referrer
13 | referral =
14 | domain: $parser.hostname.slice(0, 100)
15 | path: $parser.pathname.slice(0, 100)
16 | query: $parser.search.slice(0, 100)
17 | hash: $parser.hash.slice(0, 100)
18 | encodedReferral = encodeURIComponent(JSON.stringify(referral))
19 | domain = ".#{/\.?([\w\-]+\.\w+)$/.exec(window.location.hostname)[1]}"
20 | monthLater = new Date(Date.now() + 2592000000).toGMTString() # 1000 * 60 * 60 * 24 * 30
21 | document.cookie = "referral=#{encodedReferral};expires=#{monthLater};domain=#{domain};path=/"
22 | catch e
23 | console.error e if gta.debug or window._gta_debug
24 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright © 2013 teambition, http://teambition.com
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/src/providers/google.coffee:
--------------------------------------------------------------------------------
1 | # Last updated at 2016-10-28
2 |
3 | BaseProvider = require './base'
4 |
5 | module.exports =
6 | class Google extends BaseProvider
7 | name: 'google'
8 |
9 | constructor: (account) ->
10 | return unless account
11 |
12 | window.GoogleAnalyticsObject = 'ga'
13 |
14 | window.ga = ->
15 | window.ga.q.push arguments
16 |
17 | window.ga.q = []
18 | window.ga.l = 1 * new Date()
19 |
20 | script = BaseProvider.createScript '//www.google-analytics.com/analytics.js'
21 | BaseProvider.loadScript script, 'ga'
22 |
23 | window.ga 'create', account, 'auto'
24 | # window.ga 'require', 'displayfeatures'
25 | window.ga 'require', 'linkid', 'linkid.js'
26 | window.ga 'send', 'pageview'
27 |
28 | pageview: ->
29 | return unless window.ga
30 | args = Array::slice.call arguments
31 | data = if typeof args[0] is 'object' then args[0] else args.join '_'
32 | window.ga 'send', 'pageview', data
33 |
34 | event: (gtaOptions) ->
35 | return unless window.ga
36 | category = gtaOptions.page
37 | action = gtaOptions.action
38 | label = gtaOptions.type
39 | window.ga 'send', 'event', category, action, label
40 |
--------------------------------------------------------------------------------
/src/common.coffee:
--------------------------------------------------------------------------------
1 | module.exports = Common = {}
2 |
3 | GTA_CHECK_REGEX = /^\s*\{(.*)\}\s*$/
4 | GTA_PARSE_REGEX = /[\s"']*([^:,"']+)[\s"']*:[\s"']*([^:,"']+)[\s"']*,?/g
5 |
6 | Common.extend = (dest, source...) ->
7 | for arg in source
8 | for key, value of arg
9 | dest[key] = value
10 | return dest
11 |
12 | Common.removeElement = (el) ->
13 | el.parentNode.removeChild el
14 |
15 | # gta规则:
16 | # gta两端由 引号、大括号包裹: "{}" 或 '{}'
17 | # 大括号内部类似JSON的 {key: value}格式,不同的是key和value两端的引号可以省略,两端的空格会被省略,
18 | # key 和 value 的值不可以包含: 冒号、逗号、单引号、双引号,
19 | # e.g. data-gta="{action: 'add content', 'page' : 'Project Page', type: task, control: tasks layout, 'method': double-click}"
20 | Common.parseGta = (gtaString) ->
21 | return unless gtaString
22 | gtaString = GTA_CHECK_REGEX.exec(gtaString)?[1]
23 | return unless gtaString and gtaString.length
24 |
25 | gtaOptions = {}
26 | while it = GTA_PARSE_REGEX.exec gtaString
27 | [_, key, value] = it
28 | gtaOptions[key] = value
29 | return gtaOptions
30 |
31 | # 根据属性为不同的 provider 提供不同类型的 super properties
32 | Common.formatUser = (provider, user)->
33 | result = {}
34 | for key, value of user
35 | continue unless value
36 | continue if value.wlist? and provider.name not in value.wlist
37 | if value.alias?[provider.name]
38 | result[value.alias[provider.name]] = value.value
39 | else
40 | if Object::toString.call(value) is '[object Object]' and 'value' of value
41 | result[key] = value.value
42 | else
43 | result[key] = value
44 | return result
45 |
46 | Common.pick = (obj, keys) ->
47 | return unless obj
48 | result = {}
49 | for key in keys
50 | if obj[key]
51 | result[key] = obj[key]
52 | return result
53 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## Change Log Archive under v1.0.0
2 | For change log since v1.0.0, please see README.md.
3 |
4 | #### 0.9.8
5 | 1. New provider: GrowingIO
6 |
7 | #### 0.9.7
8 | 1. Add `data-gta-ignore` support
9 |
10 | #### 0.9.6
11 | 1. Update tbpanel script
12 | 2. Fix bug on `delegateEvents`
13 |
14 | #### 0.9.5
15 | 1. Remove another jQuery dependency
16 |
17 | #### 0.9.4
18 | 1. Fix cookie path in utm daemon
19 |
20 | #### 0.9.3
21 | 1. Remove jQuery dependency
22 | 2. Minor bug fix
23 |
24 | #### 0.9.1 - 0.9.2
25 | 1. New provider: tbpanel
26 | 2. Make property 'platform' changable
27 | 3. Minor bug fix
28 |
29 | #### 0.9.0
30 | 1. utm daemon support
31 |
32 | #### 0.8.13
33 | 1. Report system version, desktop client type&version to mixpanel
34 |
35 | #### 0.8.12
36 | 1. For fullstory: Change `name` to `displayName`
37 |
38 | #### 0.8.10 - 0.8.11
39 | 1. Fix push config object when value is the falsely value
40 |
41 | #### 0.8.9
42 | 1. Add whitelist `wlist` support in `setUser`.
43 | 2. Teambition polyfill for desktop client in mixpanel
44 |
45 | #### 0.8.6 - 0.8.8
46 | 1. Force `created_at` field for Customer.io be a number in seconds since epoch
47 |
48 | #### 0.8.5
49 | 1. Fullstory will ignore unqualified field
50 |
51 | #### 0.8.3 - 0.8.4
52 | Minor bug fix
53 |
54 | #### 0.8.2
55 | 1. Mixin user info into mixpanel data
56 | 2. Teambition polyfill for customer.io
57 | 3. Remove sensetive data from fullstory
58 |
59 | #### 0.8.1
60 | 1. Add provider-specific alias support in method `setUser`
61 |
62 | #### 0.8.0
63 | 1. remove the compatible code for old rules
64 | 2. add 'debug' mode
65 |
66 | #### 0.7.2
67 | 1. remove the needless pageview method of customer.io
68 | 2. add setCurrentPage method
69 |
70 | #### 0.7.1
71 | 1. add new rules
72 | 2. remove Piwik
73 | 3. remove field 'value'
74 |
--------------------------------------------------------------------------------
/src/providers/fullstory.coffee:
--------------------------------------------------------------------------------
1 | # Last updated at 2016-10-28
2 |
3 | BaseProvider = require './base'
4 | Common = require '../common'
5 |
6 | module.exports =
7 | class Fullstory extends BaseProvider
8 | name: 'fullstory'
9 |
10 | constructor: (account)->
11 | return unless account
12 |
13 | _fullstory = window.FS = (id, user) ->
14 | if _fullstory.q
15 | _fullstory.q.push arguments
16 | else
17 | _fullstory._api id, user
18 |
19 | _fullstory.q = []
20 | _fs_debug = window._fs_debug = window._fs_debug or false
21 | _fs_host = window._fs_host = window._fs_host or 'www.fullstory.com'
22 | _fs_org = window._fs_org = account
23 |
24 | script = BaseProvider.createScript "https://#{_fs_host}/s/fs.js"
25 | BaseProvider.loadScript script
26 |
27 | _fullstory.identify = (id, user) ->
28 | _fullstory 'user', uid: id
29 | _fullstory 'user', user if user
30 |
31 | _fullstory.setUserVars = (user) ->
32 | _fullstory 'user', user
33 |
34 | _fullstory.identifyAccount = (id, user = {}) ->
35 | user.acctId = id
36 | _fullstory 'account', user
37 |
38 | _fullstory.clearUserCookie = (identified_only) ->
39 | if not identified_only or document.cookie.match('fs_uid=[`;`]*`[`;`]*`[`;`]*`')
40 | domain = document.domain
41 | while true
42 | document.cookie = 'fs_uid=;domain=' + domain + ';path=/;expires=' + new Date(0)
43 | index = domain.indexOf('.')
44 | break if index < 0
45 | domain = domain.slice index + 1
46 |
47 | setUser: (id, raw_user) ->
48 | user = Common.extend {}, raw_user
49 | for k, v of user when not /(^(displayName|email)$)|(.*_(str|int|real|date|bool)$)/.test k
50 | delete user[k]
51 | user.displayName = id # We don't log sensetive data
52 | user.email = "#{id}@mail.teambition.com" # We don't log sensetive data
53 | window.FS.identify id, user
54 |
--------------------------------------------------------------------------------
/src/providers/customerio.coffee:
--------------------------------------------------------------------------------
1 | # Last updated at 2016-10-28
2 |
3 | BaseProvider = require './base'
4 | Common = require '../common'
5 |
6 | module.exports =
7 | class CustomerIO extends BaseProvider
8 | name: 'customer.io'
9 |
10 | constructor: (@account) ->
11 |
12 | initCustomer: (id) ->
13 | _cio = window._cio = window._cio or []
14 | _cio.invoked = true
15 | _cio.methods = [
16 | 'trackSubmit', 'trackClick', 'trackLink', 'trackForm',
17 | 'pageview', 'reset', 'group', 'ready', 'alias', 'page',
18 | 'once', 'off', 'on', 'load', 'identify', 'sidentify', 'track'
19 | ]
20 | _cio.factory = (method) ->
21 | return ->
22 | _cio.push [method].concat Array.prototype.slice.call arguments
23 | return _cio
24 |
25 | _cio[method] = _cio.factory method for method in _cio.methods
26 |
27 | accounts = @account.split ','
28 | # teambition polyfill
29 | # if use Teambition as userid pick the first one [customer env=2015]
30 | # use email as userid pick the second one [customer env=2016]
31 | _account = if id?.indexOf('@') > 0 then accounts[1] else accounts[0]
32 |
33 | script = BaseProvider.createScript '//assets.customer.io/assets/track.js', 'cio-tracker'
34 | script.setAttribute 'data-site-id', _account
35 | BaseProvider.loadScript script, '_cio', false
36 |
37 | setUser: (id, raw_user) ->
38 | return unless @account
39 | user = Common.extend {}, raw_user
40 | user.id = id
41 | # teambition polyfill
42 | # For user created later than 2016, use email as user id
43 | if new Date(user.created_at) >= new Date('2016-01-01')
44 | user.id = user.email
45 | user.created_at = Math.floor(new Date(user.created_at).valueOf() / 1000)
46 | @initCustomer user.id
47 | window._cio?.identify user
48 |
49 | pageview: (data) ->
50 | # customer.io pageviews are tracking by the javascript snippet above
51 | # For Detail: https://customer.io/docs/pageviews.html
52 |
53 | event: (gtaOptions) ->
54 | return unless @account
55 | window._cio?.track gtaOptions.action, gtaOptions
56 |
--------------------------------------------------------------------------------
/src/providers/sensorsdata.coffee:
--------------------------------------------------------------------------------
1 | BaseProvider = require './base'
2 | Common = require '../common'
3 |
4 | module.exports =
5 | class SensorsData extends BaseProvider
6 | name: 'sensorsdata'
7 |
8 | constructor: (account, script, track) ->
9 | return unless account
10 |
11 | para =
12 | name: 'sa'
13 | web_url: track
14 | server_url: account
15 | sdk_url: '//dn-st.teambition.net/sensorsdata/sensorsdata.latest.min.js'
16 | heatmap_url: '//dn-st.teambition.net/sensorsdata/heatmap.latest.min.js'
17 |
18 | Common.extend(para, JSON.parse(script || '{}'))
19 |
20 | window.sensorsDataAnalytic201505 = 'sa'
21 |
22 | window.sa = window.sa or (a) -> () ->
23 | window.sa._q = window.sa._q || []
24 | window.sa._q.push([a, arguments])
25 |
26 | funcs = [
27 | 'track', 'quick', 'register', 'registerPage', 'registerOnce',
28 | 'clearAllRegister', 'trackSignup', 'trackAbtest', 'setProfile',
29 | 'setOnceProfile', 'appendProfile', 'incrementProfile', 'deleteProfile',
30 | 'unsetProfile', 'identify', 'login', 'logout', 'trackLink', 'clearAllRegister'
31 | ]
32 | for func in funcs
33 | window.sa[func] = window.sa.call(null, func)
34 |
35 | unless window.sa._t
36 | script = BaseProvider.createScript para.sdk_url
37 | BaseProvider.loadScript script, 'sa', no
38 | window.sa?.para = para
39 |
40 | window.sa?.quick 'autoTrack'
41 |
42 | setUser: (id, raw_user) ->
43 | if /[a-fA-F0-9]{24}/.test(id)
44 | window.sa?.login(id)
45 | window.sa?.setProfile(raw_user)
46 |
47 | event: (gtaOptions) ->
48 | data = Common.extend {}, gtaOptions
49 | data.platform ?= 'web'
50 |
51 | normalizedData = {}
52 | for key, value of data
53 | normalizedData[key.toLowerCase()] = value
54 | normalizedAction = data.action
55 | .replace(/ /g, '_')
56 | .replace(/[^A-Za-z0-9_\$]/g, '')
57 | .toLowerCase()
58 | window.sa?.track(normalizedAction, normalizedData)
59 |
60 | login: (userId) ->
61 | window.sa?.login(userId)
62 |
63 | logout: ->
64 | window.sa?.logout()
65 |
--------------------------------------------------------------------------------
/src/providers/tbpanel.coffee:
--------------------------------------------------------------------------------
1 | BaseProvider = require './base'
2 | Common = require '../common'
3 |
4 | module.exports =
5 | class TBPanel extends BaseProvider
6 | name: 'tbpanel'
7 |
8 | loaded: false
9 | loadHandlers: []
10 |
11 | constructor: (account, scriptUrl, track, bootParams) ->
12 | return unless account
13 | scriptUrl or= '//g.alicdn.com/teambition-fe/static-files/tbpanel/generic.36b6.js'
14 |
15 | lib_name = 'tbpanel'
16 | window.TBPANEL_TRACK_URL = track if track
17 | tbpanel = window.tbpanel = []
18 | tbpanel._i = []
19 |
20 | tbpanel.init = (token, config, name) ->
21 | # support multiple tbpanel instances
22 | target = tbpanel
23 | if name?
24 | target = tbpanel[name] = []
25 | else
26 | name = lib_name
27 |
28 | # Pass in current people object if it exists
29 | target.people or= []
30 |
31 | target.toString = (no_stub) ->
32 | str = lib_name
33 | str += '.' + name if name isnt lib_name
34 | str += ' (stub)' unless no_stub
35 | return str
36 |
37 | target.people.toString = ->
38 | target.toString(1) + '.people (stub)'
39 |
40 | _set_and_defer = (target, fn) ->
41 | split = fn.split '.'
42 | if split.length is 2
43 | target = target[split[0]]
44 | fn = split[1]
45 | target[fn] = -> target.push [fn].concat Array::slice.call arguments
46 |
47 | functions = [
48 | 'disable', 'track', 'track_pageview', 'track_links', 'track_forms', 'register',
49 | 'register_once', 'alias', 'unregister', 'identify', 'name_tag', 'set_config',
50 | 'people.set', 'people.set_once', 'people.increment', 'people.append',
51 | 'people.track_charge', 'people.clear_charges', 'people.delete_user'
52 | ]
53 |
54 | _set_and_defer target, fn for fn in functions
55 |
56 | tbpanel._i.push [token, config, name]
57 |
58 | tbpanel.__SV = 1.2
59 |
60 | options = loaded: @handleTBPanelLoaded
61 |
62 | try
63 | bootParams = JSON.parse(bootParams)
64 | options = Common.extend(options, bootParams)
65 | catch e
66 | console.error e
67 |
68 | tbpanel.init account, options
69 | script = BaseProvider.createScript scriptUrl
70 | BaseProvider.loadScript script, lib_name
71 |
72 | handleTBPanelLoaded: =>
73 | @loaded = yes
74 | while handler = @loadHandlers.shift()
75 | handler()
76 | return
77 |
78 | onLoad: (handler) ->
79 | if @loaded
80 | do handler
81 | else
82 | @loadHandlers.push handler
83 | return
84 |
85 | setUser: (id, raw_user) ->
86 | user = Common.extend {}, raw_user
87 | user.userKey = id if id
88 | window.tbpanel.register user
89 | # Teambition polyfill for desktop clients
90 | dc = navigator.userAgent.match /(Teambition(?:-UWP)?)\/([\d\.]+)/i
91 | if dc
92 | [ all, client, version ] = dc
93 | client = 'Teambition_Desktop' if client is 'Teambition'
94 | window.tbpanel.register
95 | $browser: client,
96 | $browser_version: version
97 | os = navigator.userAgent.match /Windows NT [\d.]+|(?:Macintosh;|Linux|\b\w*BSD)[^;)]*?(?=\)|;)/i
98 | window.tbpanel.register $os_version: os[0] if os
99 |
100 | event: (gtaOptions) ->
101 | data = Common.extend {}, gtaOptions
102 | data.platform ?= 'web'
103 | window.tbpanel?.track data.action, data
104 |
105 | login: (userId) ->
106 | @onLoad () ->
107 | host = window.tbpanel?.get_config('api_host')
108 | distinctid = window.tbpanel?.get_distinct_id()
109 | req = new XMLHttpRequest()
110 | req.open('GET', "#{host}/login?userkey=#{userId}&distinct_id=#{distinctid}")
111 | req.send()
112 |
--------------------------------------------------------------------------------
/src/index.coffee:
--------------------------------------------------------------------------------
1 | Common = require 'common'
2 | Plugins = require 'plugins'
3 | Providers = require 'providers'
4 |
5 | class GTA
6 | debug: no
7 | plugins: []
8 | providers: []
9 | mixPayload: {}
10 | actionMap: {}
11 |
12 | version: '1.1.6'
13 |
14 | constructor: ->
15 | return if typeof document is 'undefined'
16 | $el = document.getElementById 'gta-main'
17 | return unless $el
18 | @delegateEvents()
19 | @preloadActions($el)
20 |
21 | init: ->
22 | return if typeof document is 'undefined'
23 | $el = document.getElementById 'gta-main'
24 | return unless $el
25 |
26 | for own name, Provider of Providers
27 | @registerProvider name, Provider, $el
28 |
29 | for own name, Plugin of Plugins
30 | @registerPlugin Plugin
31 |
32 | Common.removeElement $el
33 |
34 | initXhr: (url) ->
35 | xhr = new XMLHttpRequest()
36 | xhr.open('GET', url, true)
37 | xhr.send()
38 | return xhr
39 |
40 | preloadActions: ($el) ->
41 | url = $el.getAttribute 'data-tbtracking'
42 | return unless url
43 | xhr = @initXhr(url)
44 | xhr.onreadystatechange = () =>
45 | if xhr.readyState is 4 and xhr.status is 200
46 | actions = JSON.parse(xhr.response)
47 | for item in actions
48 | @actionMap[item.hash] = (@actionMap[item.hash] or []).concat(item)
49 |
50 | registerProperty: (key, value)->
51 | @mixPayload[key] = value
52 | return this
53 |
54 | unregisterProperty: (key) ->
55 | delete @mixPayload[key]
56 | return this
57 |
58 | registerProvider: (name, Provider, $el = document.getElementById('gta-main')) ->
59 | return false if not $el
60 |
61 | account = $el.getAttribute "data-#{name}"
62 | scriptUrl = $el.getAttribute "data-#{name}-script"
63 | trackUrl = $el.getAttribute "data-#{name}-track"
64 | bootParams = $el.getAttribute "data-#{name}-boot-param"
65 | randomProportion = $el.getAttribute "data-#{name}-random-proportion"
66 |
67 | return true if randomProportion and do Math.random > randomProportion
68 |
69 | if account
70 | @providers.push new Provider account, scriptUrl, trackUrl, bootParams
71 | return true
72 |
73 | return false
74 |
75 | registerPlugin: (Plugin) ->
76 | plugin = new Plugin this
77 | @plugins.push plugin
78 | return plugin
79 |
80 | setCurrentPage: (page) ->
81 | @registerProperty('page', page)
82 |
83 | setUser: (id, user, turnOff) ->
84 | return this if turnOff
85 |
86 | try
87 | @init()
88 | for provider in @providers
89 | formattedUser = Common.formatUser provider, user
90 | if @debug or window._gta_debug
91 | console.log 'formatUser', provider.name, formattedUser
92 | provider.setUser?.call provider, id, formattedUser
93 | catch e
94 | console.error e if @debug or window._gta_debug
95 | return this
96 |
97 | pageview: ->
98 | try
99 | for provider in @providers
100 | provider.pageview?.apply provider, arguments
101 | catch e
102 | return this
103 |
104 | login: (userId) ->
105 | try
106 | for provider in @providers
107 | provider.login?.apply provider, arguments
108 | catch e
109 | return this
110 |
111 | logout: ->
112 | try
113 | for provider in @providers
114 | provider.logout?.apply provider, arguments
115 | catch e
116 | return this
117 |
118 | event: (gtaOptions) ->
119 | try
120 | if typeof gtaOptions is 'object' and !!gtaOptions
121 | gtaOptions.method or= 'click'
122 | gtaOptions = Common.extend {}, @mixPayload, gtaOptions
123 | for plugin in @plugins
124 | gtaOptions = plugin.onGTAEvent?(gtaOptions)
125 | unless gtaOptions
126 | console.info 'An event was filtered by plugin:', plugin.name if @debug or window._gta_debug
127 | return this
128 | console.log 'GTA options: ', gtaOptions if @debug or window._gta_debug
129 | for provider in @providers
130 | try
131 | provider.event? gtaOptions
132 | catch ee
133 | console.trace "error on gta provider: #{provider.name}, #{ee}" if @debug or window._gta_debug
134 | catch e
135 | console.trace "error on gta event: #{e}" if @debug or window._gta_debug
136 | return this
137 |
138 | delegateEvents: ->
139 | matches = (el, selector) ->
140 | (el.matches || el.matchesSelector ||
141 | el.msMatchesSelector || el.mozMatchesSelector ||
142 | el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector)
143 | listener = (e) =>
144 | window.setTimeout =>
145 | el = e.target
146 | while el
147 | gtaString = el.dataset?.gta
148 | gtaIgnore = el.dataset?.gtaIgnore
149 | gtaOptions = Common.parseGta gtaString
150 | gtaHash = el.dataset?.gtaHash
151 |
152 | if gtaOptions and (!gtaIgnore or matches(e.target, gtaIgnore))
153 | @event gtaOptions
154 |
155 | if gtaHash
156 | actions = @actionMap[gtaHash] or []
157 | for action in actions
158 | @event Common.pick action, ['action', 'type', 'control']
159 |
160 | el = el.parentElement
161 | , 0
162 | document.body.addEventListener 'click', listener, true
163 |
164 | module.exports = new GTA()
165 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Analysis Tool for Teambition
2 |
3 | ## Usage
4 |
5 | First, use Bower to install GTA:
6 |
7 | ```bash
8 | bower install gta
9 | ```
10 |
11 | or with NPM:
12 |
13 | ```bash
14 | npm install --save teambition/gta
15 | ```
16 |
17 | Then, include the following script in your HTML and you are ready to go:
18 |
19 | ```html
20 |
28 | ```
29 |
30 | ### Set User ID
31 | ```js
32 | // Currently only Customer.io and Fullstory support userId
33 | gta.setUser(id, user)
34 | ```
35 |
36 | ### Register Property
37 | ```js
38 | gta.registerProperty(key, value)
39 | gta.unregisterProperty(key)
40 | ```
41 | All registered properties would be mixed with every events util unregister.
42 |
43 | ### Register Provider
44 | ```js
45 | gta.registerProvider(name, Provider, $el)
46 | ```
47 | Register third party provider. `$el` points to element stores gta config,
48 | it could be omitted when config stores in `
106 | ```
107 | 2. `hash` is the target in your acions list.
108 |
109 | ```html
110 | actions = [
111 | ...,
112 | {
113 | hash: hash
114 | action: 'add content',
115 | control: 'tasks layout',
116 | type: 'task',
117 | }
118 | ]
119 |
120 |
121 | ```
122 |
123 | To automatically log gtaOptions, you can use the 'debug' mode:
124 | ```js
125 | gta.debug = true
126 | or
127 | window._gta_debug = true
128 | ```
129 | #### Warning! old rules not supported since v0.8.0
130 |
131 | ## API Documentations
132 |
133 | * [Google Analytics](https://developers.google.com/analytics/devguides/collection/analyticsjs/)
134 | * [Baidu Analytics](http://tongji.baidu.com/open/api/more?p=ref_trackPageview)
135 | * [Mixpanel](https://mixpanel.com/help/reference/javascript)
136 | * [Customer.io](https://customer.io/docs/api/javascript.html)
137 | * [Fullstory](http://help.fullstory.com/using-ref/getting-started)
138 | * [GrowingIO](https://help.growingio.com/Developer%20Document.html)
139 | * [SensorsData](https://www.sensorsdata.cn/manual/js_sdk.html)
140 |
141 | ## Change Log
142 |
143 | ### 1.1.6
144 | 1. Support boot params for providers
145 |
146 | ### 1.1.5
147 | 1. Add `gta.login(userId)` support
148 | 2. Implement `login` method on TBPanel
149 |
150 | #### 1.1.4
151 | 1. Add `data-tbtracking` support
152 |
153 | #### 1.1.1 - 1.1.2
154 | 1. New Plugin: `distinct id`
155 |
156 | #### 1.1.0
157 | 1. New provider: SensorsData
158 |
159 | #### 1.0.12
160 | 1. Deferred provider loading
161 |
162 | #### 1.0.11
163 | 1. Disable `displayfeatures` for Google Analytics
164 |
165 | #### 1.0.9 - 1.0.10
166 | 1. Plugin `referral` and `utm` will only record at first time.
167 | 2. Plugin `referral` and `utm` now use encodeURIComponent to prevent unexpected cookie cut off.
168 |
169 | #### 1.0.8
170 | 1. Plugin is able to filter event now.
171 |
172 | #### 1.0.7
173 | 1. New plugin `referral plugin`
174 |
175 | #### 1.0.5 - 1.0.6
176 | 1. `gta.registerPlugin` now returns plugin's instance
177 |
178 | #### 1.0.4
179 | 1. TBPanel now accepts optional `scriptUrl`
180 |
181 | #### 1.0.3
182 | 1. New API: `registerProvider`
183 |
184 | #### 1.0.2
185 | 1. Now library can be exported to `window.Gta`
186 |
187 | #### 1.0.1
188 | 1. Fix GTA crash when provider Baidu crash.
189 |
190 | #### 1.0.0
191 | 1. New architecture
192 | 2. New APIs: `(un)register(Property|Plugin)`
193 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | (function webpackUniversalModuleDefinition(root, factory) {
2 | if(typeof exports === 'object' && typeof module === 'object')
3 | module.exports = factory();
4 | else if(typeof define === 'function' && define.amd)
5 | define("Gta", [], factory);
6 | else if(typeof exports === 'object')
7 | exports["Gta"] = factory();
8 | else
9 | root["Gta"] = factory();
10 | })(this, function() {
11 | return /******/ (function(modules) { // webpackBootstrap
12 | /******/ // The module cache
13 | /******/ var installedModules = {};
14 |
15 | /******/ // The require function
16 | /******/ function __webpack_require__(moduleId) {
17 |
18 | /******/ // Check if module is in cache
19 | /******/ if(installedModules[moduleId])
20 | /******/ return installedModules[moduleId].exports;
21 |
22 | /******/ // Create a new module (and put it into the cache)
23 | /******/ var module = installedModules[moduleId] = {
24 | /******/ exports: {},
25 | /******/ id: moduleId,
26 | /******/ loaded: false
27 | /******/ };
28 |
29 | /******/ // Execute the module function
30 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31 |
32 | /******/ // Flag the module as loaded
33 | /******/ module.loaded = true;
34 |
35 | /******/ // Return the exports of the module
36 | /******/ return module.exports;
37 | /******/ }
38 |
39 |
40 | /******/ // expose the modules object (__webpack_modules__)
41 | /******/ __webpack_require__.m = modules;
42 |
43 | /******/ // expose the module cache
44 | /******/ __webpack_require__.c = installedModules;
45 |
46 | /******/ // __webpack_public_path__
47 | /******/ __webpack_require__.p = "";
48 |
49 | /******/ // Load entry module and return exports
50 | /******/ return __webpack_require__(0);
51 | /******/ })
52 | /************************************************************************/
53 | /******/ ([
54 | /* 0 */
55 | /***/ function(module, exports, __webpack_require__) {
56 |
57 | var Common, GTA, Plugins, Providers,
58 | hasProp = {}.hasOwnProperty;
59 |
60 | Common = __webpack_require__(1);
61 |
62 | Plugins = __webpack_require__(2);
63 |
64 | Providers = __webpack_require__(7);
65 |
66 | GTA = (function() {
67 | GTA.prototype.debug = false;
68 |
69 | GTA.prototype.plugins = [];
70 |
71 | GTA.prototype.providers = [];
72 |
73 | GTA.prototype.mixPayload = {};
74 |
75 | GTA.prototype.actionMap = {};
76 |
77 | GTA.prototype.version = '1.1.6';
78 |
79 | function GTA() {
80 | var $el;
81 | if (typeof document === 'undefined') {
82 | return;
83 | }
84 | $el = document.getElementById('gta-main');
85 | if (!$el) {
86 | return;
87 | }
88 | this.delegateEvents();
89 | this.preloadActions($el);
90 | }
91 |
92 | GTA.prototype.init = function() {
93 | var $el, Plugin, Provider, name;
94 | if (typeof document === 'undefined') {
95 | return;
96 | }
97 | $el = document.getElementById('gta-main');
98 | if (!$el) {
99 | return;
100 | }
101 | for (name in Providers) {
102 | if (!hasProp.call(Providers, name)) continue;
103 | Provider = Providers[name];
104 | this.registerProvider(name, Provider, $el);
105 | }
106 | for (name in Plugins) {
107 | if (!hasProp.call(Plugins, name)) continue;
108 | Plugin = Plugins[name];
109 | this.registerPlugin(Plugin);
110 | }
111 | return Common.removeElement($el);
112 | };
113 |
114 | GTA.prototype.initXhr = function(url) {
115 | var xhr;
116 | xhr = new XMLHttpRequest();
117 | xhr.open('GET', url, true);
118 | xhr.send();
119 | return xhr;
120 | };
121 |
122 | GTA.prototype.preloadActions = function($el) {
123 | var url, xhr;
124 | url = $el.getAttribute('data-tbtracking');
125 | if (!url) {
126 | return;
127 | }
128 | xhr = this.initXhr(url);
129 | return xhr.onreadystatechange = (function(_this) {
130 | return function() {
131 | var actions, i, item, len, results;
132 | if (xhr.readyState === 4 && xhr.status === 200) {
133 | actions = JSON.parse(xhr.response);
134 | results = [];
135 | for (i = 0, len = actions.length; i < len; i++) {
136 | item = actions[i];
137 | results.push(_this.actionMap[item.hash] = (_this.actionMap[item.hash] || []).concat(item));
138 | }
139 | return results;
140 | }
141 | };
142 | })(this);
143 | };
144 |
145 | GTA.prototype.registerProperty = function(key, value) {
146 | this.mixPayload[key] = value;
147 | return this;
148 | };
149 |
150 | GTA.prototype.unregisterProperty = function(key) {
151 | delete this.mixPayload[key];
152 | return this;
153 | };
154 |
155 | GTA.prototype.registerProvider = function(name, Provider, $el) {
156 | var account, bootParams, randomProportion, scriptUrl, trackUrl;
157 | if ($el == null) {
158 | $el = document.getElementById('gta-main');
159 | }
160 | if (!$el) {
161 | return false;
162 | }
163 | account = $el.getAttribute("data-" + name);
164 | scriptUrl = $el.getAttribute("data-" + name + "-script");
165 | trackUrl = $el.getAttribute("data-" + name + "-track");
166 | bootParams = $el.getAttribute("data-" + name + "-boot-param");
167 | randomProportion = $el.getAttribute("data-" + name + "-random-proportion");
168 | if (randomProportion && Math.random() > randomProportion) {
169 | return true;
170 | }
171 | if (account) {
172 | this.providers.push(new Provider(account, scriptUrl, trackUrl, bootParams));
173 | return true;
174 | }
175 | return false;
176 | };
177 |
178 | GTA.prototype.registerPlugin = function(Plugin) {
179 | var plugin;
180 | plugin = new Plugin(this);
181 | this.plugins.push(plugin);
182 | return plugin;
183 | };
184 |
185 | GTA.prototype.setCurrentPage = function(page) {
186 | return this.registerProperty('page', page);
187 | };
188 |
189 | GTA.prototype.setUser = function(id, user, turnOff) {
190 | var e, formattedUser, i, len, provider, ref, ref1;
191 | if (turnOff) {
192 | return this;
193 | }
194 | try {
195 | this.init();
196 | ref = this.providers;
197 | for (i = 0, len = ref.length; i < len; i++) {
198 | provider = ref[i];
199 | formattedUser = Common.formatUser(provider, user);
200 | if (this.debug || window._gta_debug) {
201 | console.log('formatUser', provider.name, formattedUser);
202 | }
203 | if ((ref1 = provider.setUser) != null) {
204 | ref1.call(provider, id, formattedUser);
205 | }
206 | }
207 | } catch (error) {
208 | e = error;
209 | if (this.debug || window._gta_debug) {
210 | console.error(e);
211 | }
212 | }
213 | return this;
214 | };
215 |
216 | GTA.prototype.pageview = function() {
217 | var e, i, len, provider, ref, ref1;
218 | try {
219 | ref = this.providers;
220 | for (i = 0, len = ref.length; i < len; i++) {
221 | provider = ref[i];
222 | if ((ref1 = provider.pageview) != null) {
223 | ref1.apply(provider, arguments);
224 | }
225 | }
226 | } catch (error) {
227 | e = error;
228 | }
229 | return this;
230 | };
231 |
232 | GTA.prototype.login = function(userId) {
233 | var e, i, len, provider, ref, ref1;
234 | try {
235 | ref = this.providers;
236 | for (i = 0, len = ref.length; i < len; i++) {
237 | provider = ref[i];
238 | if ((ref1 = provider.login) != null) {
239 | ref1.apply(provider, arguments);
240 | }
241 | }
242 | } catch (error) {
243 | e = error;
244 | }
245 | return this;
246 | };
247 |
248 | GTA.prototype.logout = function() {
249 | var e, i, len, provider, ref, ref1;
250 | try {
251 | ref = this.providers;
252 | for (i = 0, len = ref.length; i < len; i++) {
253 | provider = ref[i];
254 | if ((ref1 = provider.logout) != null) {
255 | ref1.apply(provider, arguments);
256 | }
257 | }
258 | } catch (error) {
259 | e = error;
260 | }
261 | return this;
262 | };
263 |
264 | GTA.prototype.event = function(gtaOptions) {
265 | var e, ee, i, j, len, len1, plugin, provider, ref, ref1;
266 | try {
267 | if (typeof gtaOptions === 'object' && !!gtaOptions) {
268 | gtaOptions.method || (gtaOptions.method = 'click');
269 | gtaOptions = Common.extend({}, this.mixPayload, gtaOptions);
270 | ref = this.plugins;
271 | for (i = 0, len = ref.length; i < len; i++) {
272 | plugin = ref[i];
273 | gtaOptions = typeof plugin.onGTAEvent === "function" ? plugin.onGTAEvent(gtaOptions) : void 0;
274 | if (!gtaOptions) {
275 | if (this.debug || window._gta_debug) {
276 | console.info('An event was filtered by plugin:', plugin.name);
277 | }
278 | return this;
279 | }
280 | }
281 | if (this.debug || window._gta_debug) {
282 | console.log('GTA options: ', gtaOptions);
283 | }
284 | ref1 = this.providers;
285 | for (j = 0, len1 = ref1.length; j < len1; j++) {
286 | provider = ref1[j];
287 | try {
288 | if (typeof provider.event === "function") {
289 | provider.event(gtaOptions);
290 | }
291 | } catch (error) {
292 | ee = error;
293 | if (this.debug || window._gta_debug) {
294 | console.trace("error on gta provider: " + provider.name + ", " + ee);
295 | }
296 | }
297 | }
298 | }
299 | } catch (error) {
300 | e = error;
301 | if (this.debug || window._gta_debug) {
302 | console.trace("error on gta event: " + e);
303 | }
304 | }
305 | return this;
306 | };
307 |
308 | GTA.prototype.delegateEvents = function() {
309 | var listener, matches;
310 | matches = function(el, selector) {
311 | return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);
312 | };
313 | listener = (function(_this) {
314 | return function(e) {
315 | return window.setTimeout(function() {
316 | var action, actions, el, gtaHash, gtaIgnore, gtaOptions, gtaString, i, len, ref, ref1, ref2, results;
317 | el = e.target;
318 | results = [];
319 | while (el) {
320 | gtaString = (ref = el.dataset) != null ? ref.gta : void 0;
321 | gtaIgnore = (ref1 = el.dataset) != null ? ref1.gtaIgnore : void 0;
322 | gtaOptions = Common.parseGta(gtaString);
323 | gtaHash = (ref2 = el.dataset) != null ? ref2.gtaHash : void 0;
324 | if (gtaOptions && (!gtaIgnore || matches(e.target, gtaIgnore))) {
325 | _this.event(gtaOptions);
326 | }
327 | if (gtaHash) {
328 | actions = _this.actionMap[gtaHash] || [];
329 | for (i = 0, len = actions.length; i < len; i++) {
330 | action = actions[i];
331 | _this.event(Common.pick(action, ['action', 'type', 'control']));
332 | }
333 | }
334 | results.push(el = el.parentElement);
335 | }
336 | return results;
337 | }, 0);
338 | };
339 | })(this);
340 | return document.body.addEventListener('click', listener, true);
341 | };
342 |
343 | return GTA;
344 |
345 | })();
346 |
347 | module.exports = new GTA();
348 |
349 |
350 | /***/ },
351 | /* 1 */
352 | /***/ function(module, exports) {
353 |
354 | var Common, GTA_CHECK_REGEX, GTA_PARSE_REGEX,
355 | slice = [].slice,
356 | indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
357 |
358 | module.exports = Common = {};
359 |
360 | GTA_CHECK_REGEX = /^\s*\{(.*)\}\s*$/;
361 |
362 | GTA_PARSE_REGEX = /[\s"']*([^:,"']+)[\s"']*:[\s"']*([^:,"']+)[\s"']*,?/g;
363 |
364 | Common.extend = function() {
365 | var arg, dest, i, key, len, source, value;
366 | dest = arguments[0], source = 2 <= arguments.length ? slice.call(arguments, 1) : [];
367 | for (i = 0, len = source.length; i < len; i++) {
368 | arg = source[i];
369 | for (key in arg) {
370 | value = arg[key];
371 | dest[key] = value;
372 | }
373 | }
374 | return dest;
375 | };
376 |
377 | Common.removeElement = function(el) {
378 | return el.parentNode.removeChild(el);
379 | };
380 |
381 | Common.parseGta = function(gtaString) {
382 | var _, gtaOptions, it, key, ref, value;
383 | if (!gtaString) {
384 | return;
385 | }
386 | gtaString = (ref = GTA_CHECK_REGEX.exec(gtaString)) != null ? ref[1] : void 0;
387 | if (!(gtaString && gtaString.length)) {
388 | return;
389 | }
390 | gtaOptions = {};
391 | while (it = GTA_PARSE_REGEX.exec(gtaString)) {
392 | _ = it[0], key = it[1], value = it[2];
393 | gtaOptions[key] = value;
394 | }
395 | return gtaOptions;
396 | };
397 |
398 | Common.formatUser = function(provider, user) {
399 | var key, ref, ref1, result, value;
400 | result = {};
401 | for (key in user) {
402 | value = user[key];
403 | if (!value) {
404 | continue;
405 | }
406 | if ((value.wlist != null) && (ref = provider.name, indexOf.call(value.wlist, ref) < 0)) {
407 | continue;
408 | }
409 | if ((ref1 = value.alias) != null ? ref1[provider.name] : void 0) {
410 | result[value.alias[provider.name]] = value.value;
411 | } else {
412 | if (Object.prototype.toString.call(value) === '[object Object]' && 'value' in value) {
413 | result[key] = value.value;
414 | } else {
415 | result[key] = value;
416 | }
417 | }
418 | }
419 | return result;
420 | };
421 |
422 | Common.pick = function(obj, keys) {
423 | var i, key, len, result;
424 | if (!obj) {
425 | return;
426 | }
427 | result = {};
428 | for (i = 0, len = keys.length; i < len; i++) {
429 | key = keys[i];
430 | if (obj[key]) {
431 | result[key] = obj[key];
432 | }
433 | }
434 | return result;
435 | };
436 |
437 |
438 | /***/ },
439 | /* 2 */
440 | /***/ function(module, exports, __webpack_require__) {
441 |
442 | var DistinctID, Referral, UTM;
443 |
444 | UTM = __webpack_require__(3);
445 |
446 | Referral = __webpack_require__(5);
447 |
448 | DistinctID = __webpack_require__(6);
449 |
450 | module.exports = {
451 | utm: UTM,
452 | referral: Referral,
453 | distinctid: DistinctID
454 | };
455 |
456 |
457 | /***/ },
458 | /* 3 */
459 | /***/ function(module, exports, __webpack_require__) {
460 |
461 | var BasePlugin, COOKIE_TEST_REGEX, UTMDaemon, UTM_TAG_REGEX,
462 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
463 | hasProp = {}.hasOwnProperty;
464 |
465 | BasePlugin = __webpack_require__(4);
466 |
467 | UTM_TAG_REGEX = /utm_(\w+)=([^&]*)&?/ig;
468 |
469 | COOKIE_TEST_REGEX = /(^|;\s?)utm=(\S+)(?:;|$)/i;
470 |
471 | module.exports = UTMDaemon = (function(superClass) {
472 | extend(UTMDaemon, superClass);
473 |
474 | UTMDaemon.prototype.name = 'utm daemon';
475 |
476 | function UTMDaemon(gta) {
477 | var domain, e, encodedUTM, key, match, monthLater, part, utm, value;
478 | try {
479 | if (COOKIE_TEST_REGEX.test(document.cookie)) {
480 | return;
481 | }
482 | utm = {};
483 | while (match = UTM_TAG_REGEX.exec(window.location.search)) {
484 | part = match[0], key = match[1], value = match[2];
485 | utm[key] = value;
486 | }
487 | encodedUTM = encodeURIComponent(JSON.stringify(utm));
488 | domain = "." + (/\.?([\w\-]+\.\w+)$/.exec(window.location.hostname)[1]);
489 | monthLater = new Date(Date.now() + 2592000000).toGMTString();
490 | if (part) {
491 | document.cookie = "utm=" + encodedUTM + ";expires=" + monthLater + ";domain=" + domain + ";path=/";
492 | }
493 | } catch (error) {
494 | e = error;
495 | if (gta.debug || window._gta_debug) {
496 | console.error(e);
497 | }
498 | }
499 | }
500 |
501 | return UTMDaemon;
502 |
503 | })(BasePlugin);
504 |
505 |
506 | /***/ },
507 | /* 4 */
508 | /***/ function(module, exports) {
509 |
510 | var BasePlugin;
511 |
512 | module.exports = BasePlugin = (function() {
513 | BasePlugin.prototype.name = 'base';
514 |
515 | function BasePlugin(gta) {}
516 |
517 | BasePlugin.prototype.onGTAEvent = function(gtaOptions) {
518 | return gtaOptions;
519 | };
520 |
521 | return BasePlugin;
522 |
523 | })();
524 |
525 |
526 | /***/ },
527 | /* 5 */
528 | /***/ function(module, exports, __webpack_require__) {
529 |
530 | var BasePlugin, COOKIE_TEST_REGEX, ReferralDaemon,
531 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
532 | hasProp = {}.hasOwnProperty;
533 |
534 | BasePlugin = __webpack_require__(4);
535 |
536 | COOKIE_TEST_REGEX = /(^|;\s?)referral=(\S+)(?:;|$)/i;
537 |
538 | module.exports = ReferralDaemon = (function(superClass) {
539 | extend(ReferralDaemon, superClass);
540 |
541 | ReferralDaemon.prototype.name = 'referral daemon';
542 |
543 | function ReferralDaemon(gta) {
544 | var $parser, domain, e, encodedReferral, monthLater, referral;
545 | try {
546 | if (document.referrer && !COOKIE_TEST_REGEX.test(document.cookie)) {
547 | $parser = document.createElement('a');
548 | $parser.href = document.referrer;
549 | referral = {
550 | domain: $parser.hostname.slice(0, 100),
551 | path: $parser.pathname.slice(0, 100),
552 | query: $parser.search.slice(0, 100),
553 | hash: $parser.hash.slice(0, 100)
554 | };
555 | encodedReferral = encodeURIComponent(JSON.stringify(referral));
556 | domain = "." + (/\.?([\w\-]+\.\w+)$/.exec(window.location.hostname)[1]);
557 | monthLater = new Date(Date.now() + 2592000000).toGMTString();
558 | document.cookie = "referral=" + encodedReferral + ";expires=" + monthLater + ";domain=" + domain + ";path=/";
559 | }
560 | } catch (error) {
561 | e = error;
562 | if (gta.debug || window._gta_debug) {
563 | console.error(e);
564 | }
565 | }
566 | }
567 |
568 | return ReferralDaemon;
569 |
570 | })(BasePlugin);
571 |
572 |
573 | /***/ },
574 | /* 6 */
575 | /***/ function(module, exports, __webpack_require__) {
576 |
577 | var BasePlugin, DistinctID,
578 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
579 | hasProp = {}.hasOwnProperty;
580 |
581 | BasePlugin = __webpack_require__(4);
582 |
583 | module.exports = DistinctID = (function(superClass) {
584 | extend(DistinctID, superClass);
585 |
586 | DistinctID.prototype.name = 'distinct id synchronizer';
587 |
588 | function DistinctID(gta) {
589 | var e;
590 | try {
591 | if (window.tbpanel && window.sa) {
592 | sa.quick('isReady', function() {
593 | return tbpanel.identify(sa.store.getDistinctId());
594 | });
595 | }
596 | } catch (error) {
597 | e = error;
598 | if (gta.debug || window._gta_debug) {
599 | console.error(e);
600 | }
601 | }
602 | }
603 |
604 | return DistinctID;
605 |
606 | })(BasePlugin);
607 |
608 |
609 | /***/ },
610 | /* 7 */
611 | /***/ function(module, exports, __webpack_require__) {
612 |
613 | var Baidu, Customer, Fullstory, Google, GrowingIO, Sensors, TBPanel;
614 |
615 | Google = __webpack_require__(8);
616 |
617 | Baidu = __webpack_require__(10);
618 |
619 | Customer = __webpack_require__(11);
620 |
621 | Fullstory = __webpack_require__(12);
622 |
623 | GrowingIO = __webpack_require__(13);
624 |
625 | TBPanel = __webpack_require__(14);
626 |
627 | Sensors = __webpack_require__(15);
628 |
629 | module.exports = {
630 | google: Google,
631 | baidu: Baidu,
632 | tbpanel: TBPanel,
633 | customer: Customer,
634 | fullstory: Fullstory,
635 | growingio: GrowingIO,
636 | sensors: Sensors
637 | };
638 |
639 |
640 | /***/ },
641 | /* 8 */
642 | /***/ function(module, exports, __webpack_require__) {
643 |
644 | var BaseProvider, Google,
645 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
646 | hasProp = {}.hasOwnProperty;
647 |
648 | BaseProvider = __webpack_require__(9);
649 |
650 | module.exports = Google = (function(superClass) {
651 | extend(Google, superClass);
652 |
653 | Google.prototype.name = 'google';
654 |
655 | function Google(account) {
656 | var script;
657 | if (!account) {
658 | return;
659 | }
660 | window.GoogleAnalyticsObject = 'ga';
661 | window.ga = function() {
662 | return window.ga.q.push(arguments);
663 | };
664 | window.ga.q = [];
665 | window.ga.l = 1 * new Date();
666 | script = BaseProvider.createScript('//www.google-analytics.com/analytics.js');
667 | BaseProvider.loadScript(script, 'ga');
668 | window.ga('create', account, 'auto');
669 | window.ga('require', 'linkid', 'linkid.js');
670 | window.ga('send', 'pageview');
671 | }
672 |
673 | Google.prototype.pageview = function() {
674 | var args, data;
675 | if (!window.ga) {
676 | return;
677 | }
678 | args = Array.prototype.slice.call(arguments);
679 | data = typeof args[0] === 'object' ? args[0] : args.join('_');
680 | return window.ga('send', 'pageview', data);
681 | };
682 |
683 | Google.prototype.event = function(gtaOptions) {
684 | var action, category, label;
685 | if (!window.ga) {
686 | return;
687 | }
688 | category = gtaOptions.page;
689 | action = gtaOptions.action;
690 | label = gtaOptions.type;
691 | return window.ga('send', 'event', category, action, label);
692 | };
693 |
694 | return Google;
695 |
696 | })(BaseProvider);
697 |
698 |
699 | /***/ },
700 | /* 9 */
701 | /***/ function(module, exports, __webpack_require__) {
702 |
703 | var BaseProvider, Common;
704 |
705 | Common = __webpack_require__(1);
706 |
707 | module.exports = BaseProvider = (function() {
708 | function BaseProvider() {}
709 |
710 | BaseProvider.prototype.name = 'base';
711 |
712 | BaseProvider.prototype.event = function() {};
713 |
714 | BaseProvider.prototype.setUser = function() {};
715 |
716 | BaseProvider.prototype.pageview = function() {};
717 |
718 | return BaseProvider;
719 |
720 | })();
721 |
722 | BaseProvider.createScript = function(src, id) {
723 | var script;
724 | script = document.createElement('script');
725 | script.async = 1;
726 | script.src = src;
727 | if (id) {
728 | script.id = id;
729 | }
730 | return script;
731 | };
732 |
733 | BaseProvider.loadScript = function(script, key, removeAfterLoad) {
734 | var firstScript;
735 | if (removeAfterLoad == null) {
736 | removeAfterLoad = true;
737 | }
738 | script.onerror = function() {
739 | window[key] = null;
740 | return Common.removeElement(script);
741 | };
742 | script.onload = function() {
743 | if (removeAfterLoad) {
744 | return Common.removeElement(script);
745 | }
746 | };
747 | firstScript = document.getElementsByTagName('script')[0];
748 | return firstScript.parentNode.insertBefore(script, firstScript);
749 | };
750 |
751 |
752 | /***/ },
753 | /* 10 */
754 | /***/ function(module, exports, __webpack_require__) {
755 |
756 | var Baidu, BaseProvider, Common,
757 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
758 | hasProp = {}.hasOwnProperty;
759 |
760 | BaseProvider = __webpack_require__(9);
761 |
762 | Common = __webpack_require__(1);
763 |
764 | module.exports = Baidu = (function(superClass) {
765 | extend(Baidu, superClass);
766 |
767 | Baidu.prototype.name = 'baidu';
768 |
769 | function Baidu(account) {
770 | var script;
771 | if (!account) {
772 | return;
773 | }
774 | window._hmt = window._hmt || [];
775 | script = BaseProvider.createScript("//hm.baidu.com/hm.js?" + account);
776 | BaseProvider.loadScript(script, '_hmt');
777 | }
778 |
779 | Baidu.prototype.pageview = function() {
780 | var args, data, key, val;
781 | if (!window._hmt) {
782 | return;
783 | }
784 | args = Array.prototype.slice.call(arguments);
785 | if (typeof args[0] === 'object') {
786 | data = args[0].page;
787 | if (!data) {
788 | data = ((function() {
789 | var ref, results;
790 | ref = args[0];
791 | results = [];
792 | for (key in ref) {
793 | val = ref[key];
794 | results.push(val);
795 | }
796 | return results;
797 | })()).join('_');
798 | }
799 | } else {
800 | data = args.join('_');
801 | }
802 | return window._hmt.push(['_trackPageview', data]);
803 | };
804 |
805 | Baidu.prototype.event = function(gtaOptions) {
806 | var action, category, label;
807 | if (!window._hmt) {
808 | return;
809 | }
810 | category = gtaOptions.page || '';
811 | action = gtaOptions.action || '';
812 | label = gtaOptions.type || '';
813 | return window._hmt.push(['_trackEvent', category, action, label]);
814 | };
815 |
816 | return Baidu;
817 |
818 | })(BaseProvider);
819 |
820 |
821 | /***/ },
822 | /* 11 */
823 | /***/ function(module, exports, __webpack_require__) {
824 |
825 | var BaseProvider, Common, CustomerIO,
826 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
827 | hasProp = {}.hasOwnProperty;
828 |
829 | BaseProvider = __webpack_require__(9);
830 |
831 | Common = __webpack_require__(1);
832 |
833 | module.exports = CustomerIO = (function(superClass) {
834 | extend(CustomerIO, superClass);
835 |
836 | CustomerIO.prototype.name = 'customer.io';
837 |
838 | function CustomerIO(account) {
839 | this.account = account;
840 | }
841 |
842 | CustomerIO.prototype.initCustomer = function(id) {
843 | var _account, _cio, accounts, i, len, method, ref, script;
844 | _cio = window._cio = window._cio || [];
845 | _cio.invoked = true;
846 | _cio.methods = ['trackSubmit', 'trackClick', 'trackLink', 'trackForm', 'pageview', 'reset', 'group', 'ready', 'alias', 'page', 'once', 'off', 'on', 'load', 'identify', 'sidentify', 'track'];
847 | _cio.factory = function(method) {
848 | return function() {
849 | _cio.push([method].concat(Array.prototype.slice.call(arguments)));
850 | return _cio;
851 | };
852 | };
853 | ref = _cio.methods;
854 | for (i = 0, len = ref.length; i < len; i++) {
855 | method = ref[i];
856 | _cio[method] = _cio.factory(method);
857 | }
858 | accounts = this.account.split(',');
859 | _account = (id != null ? id.indexOf('@') : void 0) > 0 ? accounts[1] : accounts[0];
860 | script = BaseProvider.createScript('//assets.customer.io/assets/track.js', 'cio-tracker');
861 | script.setAttribute('data-site-id', _account);
862 | return BaseProvider.loadScript(script, '_cio', false);
863 | };
864 |
865 | CustomerIO.prototype.setUser = function(id, raw_user) {
866 | var ref, user;
867 | if (!this.account) {
868 | return;
869 | }
870 | user = Common.extend({}, raw_user);
871 | user.id = id;
872 | if (new Date(user.created_at) >= new Date('2016-01-01')) {
873 | user.id = user.email;
874 | }
875 | user.created_at = Math.floor(new Date(user.created_at).valueOf() / 1000);
876 | this.initCustomer(user.id);
877 | return (ref = window._cio) != null ? ref.identify(user) : void 0;
878 | };
879 |
880 | CustomerIO.prototype.pageview = function(data) {};
881 |
882 | CustomerIO.prototype.event = function(gtaOptions) {
883 | var ref;
884 | if (!this.account) {
885 | return;
886 | }
887 | return (ref = window._cio) != null ? ref.track(gtaOptions.action, gtaOptions) : void 0;
888 | };
889 |
890 | return CustomerIO;
891 |
892 | })(BaseProvider);
893 |
894 |
895 | /***/ },
896 | /* 12 */
897 | /***/ function(module, exports, __webpack_require__) {
898 |
899 | var BaseProvider, Common, Fullstory,
900 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
901 | hasProp = {}.hasOwnProperty;
902 |
903 | BaseProvider = __webpack_require__(9);
904 |
905 | Common = __webpack_require__(1);
906 |
907 | module.exports = Fullstory = (function(superClass) {
908 | extend(Fullstory, superClass);
909 |
910 | Fullstory.prototype.name = 'fullstory';
911 |
912 | function Fullstory(account) {
913 | var _fs_debug, _fs_host, _fs_org, _fullstory, script;
914 | if (!account) {
915 | return;
916 | }
917 | _fullstory = window.FS = function(id, user) {
918 | if (_fullstory.q) {
919 | return _fullstory.q.push(arguments);
920 | } else {
921 | return _fullstory._api(id, user);
922 | }
923 | };
924 | _fullstory.q = [];
925 | _fs_debug = window._fs_debug = window._fs_debug || false;
926 | _fs_host = window._fs_host = window._fs_host || 'www.fullstory.com';
927 | _fs_org = window._fs_org = account;
928 | script = BaseProvider.createScript("https://" + _fs_host + "/s/fs.js");
929 | BaseProvider.loadScript(script);
930 | _fullstory.identify = function(id, user) {
931 | _fullstory('user', {
932 | uid: id
933 | });
934 | if (user) {
935 | return _fullstory('user', user);
936 | }
937 | };
938 | _fullstory.setUserVars = function(user) {
939 | return _fullstory('user', user);
940 | };
941 | _fullstory.identifyAccount = function(id, user) {
942 | if (user == null) {
943 | user = {};
944 | }
945 | user.acctId = id;
946 | return _fullstory('account', user);
947 | };
948 | _fullstory.clearUserCookie = function(identified_only) {
949 | var domain, index, results;
950 | if (!identified_only || document.cookie.match('fs_uid=[`;`]*`[`;`]*`[`;`]*`')) {
951 | domain = document.domain;
952 | results = [];
953 | while (true) {
954 | document.cookie = 'fs_uid=;domain=' + domain + ';path=/;expires=' + new Date(0);
955 | index = domain.indexOf('.');
956 | if (index < 0) {
957 | break;
958 | }
959 | results.push(domain = domain.slice(index + 1));
960 | }
961 | return results;
962 | }
963 | };
964 | }
965 |
966 | Fullstory.prototype.setUser = function(id, raw_user) {
967 | var k, user, v;
968 | user = Common.extend({}, raw_user);
969 | for (k in user) {
970 | v = user[k];
971 | if (!/(^(displayName|email)$)|(.*_(str|int|real|date|bool)$)/.test(k)) {
972 | delete user[k];
973 | }
974 | }
975 | user.displayName = id;
976 | user.email = id + "@mail.teambition.com";
977 | return window.FS.identify(id, user);
978 | };
979 |
980 | return Fullstory;
981 |
982 | })(BaseProvider);
983 |
984 |
985 | /***/ },
986 | /* 13 */
987 | /***/ function(module, exports, __webpack_require__) {
988 |
989 | var BaseProvider, GrowingIO,
990 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
991 | hasProp = {}.hasOwnProperty;
992 |
993 | BaseProvider = __webpack_require__(9);
994 |
995 | module.exports = GrowingIO = (function(superClass) {
996 | extend(GrowingIO, superClass);
997 |
998 | GrowingIO.prototype.name = 'growingio';
999 |
1000 | function GrowingIO(account) {
1001 | var _vds, script;
1002 | if (!account) {
1003 | return;
1004 | }
1005 | _vds = _vds || [];
1006 | window._vds = _vds;
1007 | _vds.push(['setAccountId', account]);
1008 | script = BaseProvider.createScript(('https:' === document.location.protocol ? 'https://' : 'http://') + 'dn-growing.qbox.me/vds.js');
1009 | BaseProvider.loadScript(script);
1010 | }
1011 |
1012 | return GrowingIO;
1013 |
1014 | })(BaseProvider);
1015 |
1016 |
1017 | /***/ },
1018 | /* 14 */
1019 | /***/ function(module, exports, __webpack_require__) {
1020 |
1021 | var BaseProvider, Common, TBPanel,
1022 | bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
1023 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
1024 | hasProp = {}.hasOwnProperty;
1025 |
1026 | BaseProvider = __webpack_require__(9);
1027 |
1028 | Common = __webpack_require__(1);
1029 |
1030 | module.exports = TBPanel = (function(superClass) {
1031 | extend(TBPanel, superClass);
1032 |
1033 | TBPanel.prototype.name = 'tbpanel';
1034 |
1035 | TBPanel.prototype.loaded = false;
1036 |
1037 | TBPanel.prototype.loadHandlers = [];
1038 |
1039 | function TBPanel(account, scriptUrl, track, bootParams) {
1040 | this.handleTBPanelLoaded = bind(this.handleTBPanelLoaded, this);
1041 | var e, lib_name, options, script, tbpanel;
1042 | if (!account) {
1043 | return;
1044 | }
1045 | scriptUrl || (scriptUrl = '//g.alicdn.com/teambition-fe/static-files/tbpanel/generic.36b6.js');
1046 | lib_name = 'tbpanel';
1047 | if (track) {
1048 | window.TBPANEL_TRACK_URL = track;
1049 | }
1050 | tbpanel = window.tbpanel = [];
1051 | tbpanel._i = [];
1052 | tbpanel.init = function(token, config, name) {
1053 | var _set_and_defer, fn, functions, i, len, target;
1054 | target = tbpanel;
1055 | if (name != null) {
1056 | target = tbpanel[name] = [];
1057 | } else {
1058 | name = lib_name;
1059 | }
1060 | target.people || (target.people = []);
1061 | target.toString = function(no_stub) {
1062 | var str;
1063 | str = lib_name;
1064 | if (name !== lib_name) {
1065 | str += '.' + name;
1066 | }
1067 | if (!no_stub) {
1068 | str += ' (stub)';
1069 | }
1070 | return str;
1071 | };
1072 | target.people.toString = function() {
1073 | return target.toString(1) + '.people (stub)';
1074 | };
1075 | _set_and_defer = function(target, fn) {
1076 | var split;
1077 | split = fn.split('.');
1078 | if (split.length === 2) {
1079 | target = target[split[0]];
1080 | fn = split[1];
1081 | }
1082 | return target[fn] = function() {
1083 | return target.push([fn].concat(Array.prototype.slice.call(arguments)));
1084 | };
1085 | };
1086 | functions = ['disable', 'track', 'track_pageview', 'track_links', 'track_forms', 'register', 'register_once', 'alias', 'unregister', 'identify', 'name_tag', 'set_config', 'people.set', 'people.set_once', 'people.increment', 'people.append', 'people.track_charge', 'people.clear_charges', 'people.delete_user'];
1087 | for (i = 0, len = functions.length; i < len; i++) {
1088 | fn = functions[i];
1089 | _set_and_defer(target, fn);
1090 | }
1091 | return tbpanel._i.push([token, config, name]);
1092 | };
1093 | tbpanel.__SV = 1.2;
1094 | options = {
1095 | loaded: this.handleTBPanelLoaded
1096 | };
1097 | try {
1098 | bootParams = JSON.parse(bootParams);
1099 | options = Common.extend(options, bootParams);
1100 | } catch (error) {
1101 | e = error;
1102 | console.error(e);
1103 | }
1104 | tbpanel.init(account, options);
1105 | script = BaseProvider.createScript(scriptUrl);
1106 | BaseProvider.loadScript(script, lib_name);
1107 | }
1108 |
1109 | TBPanel.prototype.handleTBPanelLoaded = function() {
1110 | var handler;
1111 | this.loaded = true;
1112 | while (handler = this.loadHandlers.shift()) {
1113 | handler();
1114 | }
1115 | };
1116 |
1117 | TBPanel.prototype.onLoad = function(handler) {
1118 | if (this.loaded) {
1119 | handler();
1120 | } else {
1121 | this.loadHandlers.push(handler);
1122 | }
1123 | };
1124 |
1125 | TBPanel.prototype.setUser = function(id, raw_user) {
1126 | var all, client, dc, os, user, version;
1127 | user = Common.extend({}, raw_user);
1128 | if (id) {
1129 | user.userKey = id;
1130 | }
1131 | window.tbpanel.register(user);
1132 | dc = navigator.userAgent.match(/(Teambition(?:-UWP)?)\/([\d\.]+)/i);
1133 | if (dc) {
1134 | all = dc[0], client = dc[1], version = dc[2];
1135 | if (client === 'Teambition') {
1136 | client = 'Teambition_Desktop';
1137 | }
1138 | window.tbpanel.register({
1139 | $browser: client,
1140 | $browser_version: version
1141 | });
1142 | }
1143 | os = navigator.userAgent.match(/Windows NT [\d.]+|(?:Macintosh;|Linux|\b\w*BSD)[^;)]*?(?=\)|;)/i);
1144 | if (os) {
1145 | return window.tbpanel.register({
1146 | $os_version: os[0]
1147 | });
1148 | }
1149 | };
1150 |
1151 | TBPanel.prototype.event = function(gtaOptions) {
1152 | var data, ref;
1153 | data = Common.extend({}, gtaOptions);
1154 | if (data.platform == null) {
1155 | data.platform = 'web';
1156 | }
1157 | return (ref = window.tbpanel) != null ? ref.track(data.action, data) : void 0;
1158 | };
1159 |
1160 | TBPanel.prototype.login = function(userId) {
1161 | return this.onLoad(function() {
1162 | var distinctid, host, ref, ref1, req;
1163 | host = (ref = window.tbpanel) != null ? ref.get_config('api_host') : void 0;
1164 | distinctid = (ref1 = window.tbpanel) != null ? ref1.get_distinct_id() : void 0;
1165 | req = new XMLHttpRequest();
1166 | req.open('GET', host + "/login?userkey=" + userId + "&distinct_id=" + distinctid);
1167 | return req.send();
1168 | });
1169 | };
1170 |
1171 | return TBPanel;
1172 |
1173 | })(BaseProvider);
1174 |
1175 |
1176 | /***/ },
1177 | /* 15 */
1178 | /***/ function(module, exports, __webpack_require__) {
1179 |
1180 | var BaseProvider, Common, SensorsData,
1181 | extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
1182 | hasProp = {}.hasOwnProperty;
1183 |
1184 | BaseProvider = __webpack_require__(9);
1185 |
1186 | Common = __webpack_require__(1);
1187 |
1188 | module.exports = SensorsData = (function(superClass) {
1189 | extend(SensorsData, superClass);
1190 |
1191 | SensorsData.prototype.name = 'sensorsdata';
1192 |
1193 | function SensorsData(account, script, track) {
1194 | var func, funcs, i, len, para, ref, ref1;
1195 | if (!account) {
1196 | return;
1197 | }
1198 | para = {
1199 | name: 'sa',
1200 | web_url: track,
1201 | server_url: account,
1202 | sdk_url: '//dn-st.teambition.net/sensorsdata/sensorsdata.latest.min.js',
1203 | heatmap_url: '//dn-st.teambition.net/sensorsdata/heatmap.latest.min.js'
1204 | };
1205 | Common.extend(para, JSON.parse(script || '{}'));
1206 | window.sensorsDataAnalytic201505 = 'sa';
1207 | window.sa = window.sa || function(a) {
1208 | return function() {
1209 | window.sa._q = window.sa._q || [];
1210 | return window.sa._q.push([a, arguments]);
1211 | };
1212 | };
1213 | funcs = ['track', 'quick', 'register', 'registerPage', 'registerOnce', 'clearAllRegister', 'trackSignup', 'trackAbtest', 'setProfile', 'setOnceProfile', 'appendProfile', 'incrementProfile', 'deleteProfile', 'unsetProfile', 'identify', 'login', 'logout', 'trackLink', 'clearAllRegister'];
1214 | for (i = 0, len = funcs.length; i < len; i++) {
1215 | func = funcs[i];
1216 | window.sa[func] = window.sa.call(null, func);
1217 | }
1218 | if (!window.sa._t) {
1219 | script = BaseProvider.createScript(para.sdk_url);
1220 | BaseProvider.loadScript(script, 'sa', false);
1221 | if ((ref = window.sa) != null) {
1222 | ref.para = para;
1223 | }
1224 | }
1225 | if ((ref1 = window.sa) != null) {
1226 | ref1.quick('autoTrack');
1227 | }
1228 | }
1229 |
1230 | SensorsData.prototype.setUser = function(id, raw_user) {
1231 | var ref, ref1;
1232 | if (/[a-fA-F0-9]{24}/.test(id)) {
1233 | if ((ref = window.sa) != null) {
1234 | ref.login(id);
1235 | }
1236 | return (ref1 = window.sa) != null ? ref1.setProfile(raw_user) : void 0;
1237 | }
1238 | };
1239 |
1240 | SensorsData.prototype.event = function(gtaOptions) {
1241 | var data, key, normalizedAction, normalizedData, ref, value;
1242 | data = Common.extend({}, gtaOptions);
1243 | if (data.platform == null) {
1244 | data.platform = 'web';
1245 | }
1246 | normalizedData = {};
1247 | for (key in data) {
1248 | value = data[key];
1249 | normalizedData[key.toLowerCase()] = value;
1250 | }
1251 | normalizedAction = data.action.replace(/ /g, '_').replace(/[^A-Za-z0-9_\$]/g, '').toLowerCase();
1252 | return (ref = window.sa) != null ? ref.track(normalizedAction, normalizedData) : void 0;
1253 | };
1254 |
1255 | SensorsData.prototype.login = function(userId) {
1256 | var ref;
1257 | return (ref = window.sa) != null ? ref.login(userId) : void 0;
1258 | };
1259 |
1260 | SensorsData.prototype.logout = function() {
1261 | var ref;
1262 | return (ref = window.sa) != null ? ref.logout() : void 0;
1263 | };
1264 |
1265 | return SensorsData;
1266 |
1267 | })(BaseProvider);
1268 |
1269 |
1270 | /***/ }
1271 | /******/ ])
1272 | });
1273 | ;
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | Base64@~0.2.0:
6 | version "0.2.1"
7 | resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028"
8 |
9 | abbrev@1:
10 | version "1.0.9"
11 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
12 |
13 | acorn@^3.0.0:
14 | version "3.3.0"
15 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
16 |
17 | align-text@^0.1.1, align-text@^0.1.3:
18 | version "0.1.4"
19 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
20 | dependencies:
21 | kind-of "^3.0.2"
22 | longest "^1.0.1"
23 | repeat-string "^1.5.2"
24 |
25 | amdefine@>=0.0.4:
26 | version "1.0.0"
27 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33"
28 |
29 | ansi-regex@^2.0.0:
30 | version "2.0.0"
31 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
32 |
33 | ansi-styles@^2.2.1:
34 | version "2.2.1"
35 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
36 |
37 | anymatch@^1.3.0:
38 | version "1.3.0"
39 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
40 | dependencies:
41 | arrify "^1.0.0"
42 | micromatch "^2.1.5"
43 |
44 | aproba@^1.0.3:
45 | version "1.0.4"
46 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
47 |
48 | are-we-there-yet@~1.1.2:
49 | version "1.1.2"
50 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
51 | dependencies:
52 | delegates "^1.0.0"
53 | readable-stream "^2.0.0 || ^1.1.13"
54 |
55 | arr-diff@^2.0.0:
56 | version "2.0.0"
57 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
58 | dependencies:
59 | arr-flatten "^1.0.1"
60 |
61 | arr-flatten@^1.0.1:
62 | version "1.0.1"
63 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
64 |
65 | array-unique@^0.2.1:
66 | version "0.2.1"
67 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
68 |
69 | arrify@^1.0.0:
70 | version "1.0.1"
71 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
72 |
73 | asn1@~0.2.3:
74 | version "0.2.3"
75 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
76 |
77 | assert-plus@^0.2.0:
78 | version "0.2.0"
79 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
80 |
81 | assert-plus@^1.0.0:
82 | version "1.0.0"
83 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
84 |
85 | assert@^1.1.1:
86 | version "1.4.1"
87 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
88 | dependencies:
89 | util "0.10.3"
90 |
91 | async-each@^1.0.0:
92 | version "1.0.1"
93 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
94 |
95 | async@^0.9.0:
96 | version "0.9.2"
97 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
98 |
99 | async@^1.3.0:
100 | version "1.5.2"
101 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
102 |
103 | async@~0.2.6:
104 | version "0.2.10"
105 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
106 |
107 | asynckit@^0.4.0:
108 | version "0.4.0"
109 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
110 |
111 | aws-sign2@~0.6.0:
112 | version "0.6.0"
113 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
114 |
115 | aws4@^1.2.1:
116 | version "1.5.0"
117 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
118 |
119 | balanced-match@^0.4.1:
120 | version "0.4.2"
121 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
122 |
123 | balanced-match@^1.0.0:
124 | version "1.0.2"
125 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
126 |
127 | base64-js@^1.0.2:
128 | version "1.2.0"
129 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
130 |
131 | bcrypt-pbkdf@^1.0.0:
132 | version "1.0.0"
133 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
134 | dependencies:
135 | tweetnacl "^0.14.3"
136 |
137 | big.js@^3.1.3:
138 | version "3.1.3"
139 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
140 |
141 | binary-extensions@^1.0.0:
142 | version "1.7.0"
143 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d"
144 |
145 | block-stream@*:
146 | version "0.0.9"
147 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
148 | dependencies:
149 | inherits "~2.0.0"
150 |
151 | boom@2.x.x:
152 | version "2.10.1"
153 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
154 | dependencies:
155 | hoek "2.x.x"
156 |
157 | brace-expansion@^1.0.0:
158 | version "1.1.6"
159 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
160 | dependencies:
161 | balanced-match "^0.4.1"
162 | concat-map "0.0.1"
163 |
164 | brace-expansion@^1.1.7:
165 | version "1.1.11"
166 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
167 | dependencies:
168 | balanced-match "^1.0.0"
169 | concat-map "0.0.1"
170 |
171 | braces@^1.8.2:
172 | version "1.8.5"
173 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
174 | dependencies:
175 | expand-range "^1.8.1"
176 | preserve "^0.2.0"
177 | repeat-element "^1.1.2"
178 |
179 | browserify-zlib@~0.1.4:
180 | version "0.1.4"
181 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
182 | dependencies:
183 | pako "~0.2.0"
184 |
185 | buffer-shims@^1.0.0:
186 | version "1.0.0"
187 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
188 |
189 | buffer@^4.9.0:
190 | version "4.9.1"
191 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
192 | dependencies:
193 | base64-js "^1.0.2"
194 | ieee754 "^1.1.4"
195 | isarray "^1.0.0"
196 |
197 | camelcase@^1.0.2:
198 | version "1.2.1"
199 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
200 |
201 | caseless@~0.11.0:
202 | version "0.11.0"
203 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
204 |
205 | center-align@^0.1.1:
206 | version "0.1.3"
207 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
208 | dependencies:
209 | align-text "^0.1.3"
210 | lazy-cache "^1.0.3"
211 |
212 | chalk@^1.1.1:
213 | version "1.1.3"
214 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
215 | dependencies:
216 | ansi-styles "^2.2.1"
217 | escape-string-regexp "^1.0.2"
218 | has-ansi "^2.0.0"
219 | strip-ansi "^3.0.0"
220 | supports-color "^2.0.0"
221 |
222 | chokidar@^1.0.0:
223 | version "1.6.1"
224 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
225 | dependencies:
226 | anymatch "^1.3.0"
227 | async-each "^1.0.0"
228 | glob-parent "^2.0.0"
229 | inherits "^2.0.1"
230 | is-binary-path "^1.0.0"
231 | is-glob "^2.0.0"
232 | path-is-absolute "^1.0.0"
233 | readdirp "^2.0.0"
234 | optionalDependencies:
235 | fsevents "^1.0.0"
236 |
237 | cliui@^2.1.0:
238 | version "2.1.0"
239 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
240 | dependencies:
241 | center-align "^0.1.1"
242 | right-align "^0.1.1"
243 | wordwrap "0.0.2"
244 |
245 | clone@^1.0.2:
246 | version "1.0.2"
247 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
248 |
249 | code-point-at@^1.0.0:
250 | version "1.0.1"
251 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb"
252 | dependencies:
253 | number-is-nan "^1.0.0"
254 |
255 | coffee-loader:
256 | version "0.7.2"
257 | resolved "https://registry.yarnpkg.com/coffee-loader/-/coffee-loader-0.7.2.tgz#4d3699af8a806312db3207385a842f497c1bd6fd"
258 | dependencies:
259 | loader-utils "0.2.x"
260 |
261 | coffee-script:
262 | version "1.11.1"
263 | resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.11.1.tgz#bf1c47ad64443a0d95d12df2b147cc0a4daad6e9"
264 |
265 | combined-stream@^1.0.5, combined-stream@~1.0.5:
266 | version "1.0.5"
267 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
268 | dependencies:
269 | delayed-stream "~1.0.0"
270 |
271 | commander@^2.9.0:
272 | version "2.9.0"
273 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
274 | dependencies:
275 | graceful-readlink ">= 1.0.0"
276 |
277 | concat-map@0.0.1:
278 | version "0.0.1"
279 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
280 |
281 | console-browserify@^1.1.0:
282 | version "1.1.0"
283 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
284 | dependencies:
285 | date-now "^0.1.4"
286 |
287 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
288 | version "1.1.0"
289 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
290 |
291 | constants-browserify@0.0.1:
292 | version "0.0.1"
293 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2"
294 |
295 | core-util-is@~1.0.0:
296 | version "1.0.2"
297 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
298 |
299 | cryptiles@2.x.x:
300 | version "2.0.5"
301 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
302 | dependencies:
303 | boom "2.x.x"
304 |
305 | crypto-browserify@~3.2.6:
306 | version "3.2.8"
307 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.2.8.tgz#b9b11dbe6d9651dd882a01e6cc467df718ecf189"
308 | dependencies:
309 | pbkdf2-compat "2.0.1"
310 | ripemd160 "0.2.0"
311 | sha.js "2.2.6"
312 |
313 | dashdash@^1.12.0:
314 | version "1.14.0"
315 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141"
316 | dependencies:
317 | assert-plus "^1.0.0"
318 |
319 | date-now@^0.1.4:
320 | version "0.1.4"
321 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
322 |
323 | debug@~2.2.0:
324 | version "2.2.0"
325 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
326 | dependencies:
327 | ms "0.7.1"
328 |
329 | decamelize@^1.0.0:
330 | version "1.2.0"
331 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
332 |
333 | deep-extend@~0.4.0:
334 | version "0.4.1"
335 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
336 |
337 | delayed-stream@~1.0.0:
338 | version "1.0.0"
339 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
340 |
341 | delegates@^1.0.0:
342 | version "1.0.0"
343 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
344 |
345 | domain-browser@^1.1.1:
346 | version "1.1.7"
347 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
348 |
349 | ecc-jsbn@~0.1.1:
350 | version "0.1.1"
351 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
352 | dependencies:
353 | jsbn "~0.1.0"
354 |
355 | emojis-list@^2.0.0:
356 | version "2.1.0"
357 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
358 |
359 | enhanced-resolve@~0.9.0:
360 | version "0.9.1"
361 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
362 | dependencies:
363 | graceful-fs "^4.1.2"
364 | memory-fs "^0.2.0"
365 | tapable "^0.1.8"
366 |
367 | errno@^0.1.3:
368 | version "0.1.4"
369 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
370 | dependencies:
371 | prr "~0.0.0"
372 |
373 | escape-string-regexp@^1.0.2:
374 | version "1.0.5"
375 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
376 |
377 | events@^1.0.0:
378 | version "1.1.1"
379 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
380 |
381 | expand-brackets@^0.1.4:
382 | version "0.1.5"
383 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
384 | dependencies:
385 | is-posix-bracket "^0.1.0"
386 |
387 | expand-range@^1.8.1:
388 | version "1.8.2"
389 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
390 | dependencies:
391 | fill-range "^2.1.0"
392 |
393 | extend@~3.0.0:
394 | version "3.0.0"
395 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
396 |
397 | extglob@^0.3.1:
398 | version "0.3.2"
399 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
400 | dependencies:
401 | is-extglob "^1.0.0"
402 |
403 | extsprintf@1.0.2:
404 | version "1.0.2"
405 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
406 |
407 | filename-regex@^2.0.0:
408 | version "2.0.0"
409 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
410 |
411 | fill-range@^2.1.0:
412 | version "2.2.3"
413 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
414 | dependencies:
415 | is-number "^2.1.0"
416 | isobject "^2.0.0"
417 | randomatic "^1.1.3"
418 | repeat-element "^1.1.2"
419 | repeat-string "^1.5.2"
420 |
421 | for-in@^0.1.5:
422 | version "0.1.6"
423 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
424 |
425 | for-own@^0.1.4:
426 | version "0.1.4"
427 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
428 | dependencies:
429 | for-in "^0.1.5"
430 |
431 | forever-agent@~0.6.1:
432 | version "0.6.1"
433 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
434 |
435 | form-data@~2.1.1:
436 | version "2.1.1"
437 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.1.tgz#4adf0342e1a79afa1e84c8c320a9ffc82392a1f3"
438 | dependencies:
439 | asynckit "^0.4.0"
440 | combined-stream "^1.0.5"
441 | mime-types "^2.1.12"
442 |
443 | fs.realpath@^1.0.0:
444 | version "1.0.0"
445 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
446 |
447 | fsevents@^1.0.0:
448 | version "1.0.14"
449 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4"
450 | dependencies:
451 | nan "^2.3.0"
452 | node-pre-gyp "^0.6.29"
453 |
454 | fstream-ignore@~1.0.5:
455 | version "1.0.5"
456 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
457 | dependencies:
458 | fstream "^1.0.0"
459 | inherits "2"
460 | minimatch "^3.0.0"
461 |
462 | fstream@^1.0.0, fstream@^1.0.12, fstream@~1.0.10:
463 | version "1.0.12"
464 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
465 | dependencies:
466 | graceful-fs "^4.1.2"
467 | inherits "~2.0.0"
468 | mkdirp ">=0.5 0"
469 | rimraf "2"
470 |
471 | gauge@~2.6.0:
472 | version "2.6.0"
473 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46"
474 | dependencies:
475 | aproba "^1.0.3"
476 | console-control-strings "^1.0.0"
477 | has-color "^0.1.7"
478 | has-unicode "^2.0.0"
479 | object-assign "^4.1.0"
480 | signal-exit "^3.0.0"
481 | string-width "^1.0.1"
482 | strip-ansi "^3.0.1"
483 | wide-align "^1.1.0"
484 |
485 | generate-function@^2.0.0:
486 | version "2.0.0"
487 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
488 |
489 | generate-object-property@^1.1.0:
490 | version "1.2.0"
491 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
492 | dependencies:
493 | is-property "^1.0.0"
494 |
495 | getpass@^0.1.1:
496 | version "0.1.6"
497 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
498 | dependencies:
499 | assert-plus "^1.0.0"
500 |
501 | glob-base@^0.3.0:
502 | version "0.3.0"
503 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
504 | dependencies:
505 | glob-parent "^2.0.0"
506 | is-glob "^2.0.0"
507 |
508 | glob-parent@^2.0.0:
509 | version "2.0.0"
510 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
511 | dependencies:
512 | is-glob "^2.0.0"
513 |
514 | glob@^7.0.5:
515 | version "7.1.1"
516 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
517 | dependencies:
518 | fs.realpath "^1.0.0"
519 | inflight "^1.0.4"
520 | inherits "2"
521 | minimatch "^3.0.2"
522 | once "^1.3.0"
523 | path-is-absolute "^1.0.0"
524 |
525 | glob@^7.1.3:
526 | version "7.1.7"
527 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
528 | dependencies:
529 | fs.realpath "^1.0.0"
530 | inflight "^1.0.4"
531 | inherits "2"
532 | minimatch "^3.0.4"
533 | once "^1.3.0"
534 | path-is-absolute "^1.0.0"
535 |
536 | graceful-fs@^4.1.2:
537 | version "4.2.6"
538 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
539 |
540 | "graceful-readlink@>= 1.0.0":
541 | version "1.0.1"
542 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
543 |
544 | har-validator@~2.0.6:
545 | version "2.0.6"
546 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
547 | dependencies:
548 | chalk "^1.1.1"
549 | commander "^2.9.0"
550 | is-my-json-valid "^2.12.4"
551 | pinkie-promise "^2.0.0"
552 |
553 | has-ansi@^2.0.0:
554 | version "2.0.0"
555 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
556 | dependencies:
557 | ansi-regex "^2.0.0"
558 |
559 | has-color@^0.1.7:
560 | version "0.1.7"
561 | resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
562 |
563 | has-flag@^1.0.0:
564 | version "1.0.0"
565 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
566 |
567 | has-unicode@^2.0.0:
568 | version "2.0.1"
569 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
570 |
571 | hawk@~3.1.3:
572 | version "3.1.3"
573 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
574 | dependencies:
575 | boom "2.x.x"
576 | cryptiles "2.x.x"
577 | hoek "2.x.x"
578 | sntp "1.x.x"
579 |
580 | hoek@2.x.x:
581 | version "2.16.3"
582 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
583 |
584 | http-browserify@^1.3.2:
585 | version "1.7.0"
586 | resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20"
587 | dependencies:
588 | Base64 "~0.2.0"
589 | inherits "~2.0.1"
590 |
591 | http-signature@~1.1.0:
592 | version "1.1.1"
593 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
594 | dependencies:
595 | assert-plus "^0.2.0"
596 | jsprim "^1.2.2"
597 | sshpk "^1.7.0"
598 |
599 | https-browserify@0.0.0:
600 | version "0.0.0"
601 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd"
602 |
603 | ieee754@^1.1.4:
604 | version "1.1.8"
605 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
606 |
607 | indexof@0.0.1:
608 | version "0.0.1"
609 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
610 |
611 | inflight@^1.0.4:
612 | version "1.0.6"
613 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
614 | dependencies:
615 | once "^1.3.0"
616 | wrappy "1"
617 |
618 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
619 | version "2.0.4"
620 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
621 |
622 | inherits@2.0.1:
623 | version "2.0.1"
624 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
625 |
626 | ini@~1.3.0:
627 | version "1.3.4"
628 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
629 |
630 | interpret@^0.6.4:
631 | version "0.6.6"
632 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
633 |
634 | is-binary-path@^1.0.0:
635 | version "1.0.1"
636 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
637 | dependencies:
638 | binary-extensions "^1.0.0"
639 |
640 | is-buffer@^1.0.2:
641 | version "1.1.4"
642 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
643 |
644 | is-dotfile@^1.0.0:
645 | version "1.0.2"
646 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
647 |
648 | is-equal-shallow@^0.1.3:
649 | version "0.1.3"
650 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
651 | dependencies:
652 | is-primitive "^2.0.0"
653 |
654 | is-extendable@^0.1.1:
655 | version "0.1.1"
656 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
657 |
658 | is-extglob@^1.0.0:
659 | version "1.0.0"
660 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
661 |
662 | is-fullwidth-code-point@^1.0.0:
663 | version "1.0.0"
664 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
665 | dependencies:
666 | number-is-nan "^1.0.0"
667 |
668 | is-glob@^2.0.0, is-glob@^2.0.1:
669 | version "2.0.1"
670 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
671 | dependencies:
672 | is-extglob "^1.0.0"
673 |
674 | is-my-json-valid@^2.12.4:
675 | version "2.15.0"
676 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
677 | dependencies:
678 | generate-function "^2.0.0"
679 | generate-object-property "^1.1.0"
680 | jsonpointer "^4.0.0"
681 | xtend "^4.0.0"
682 |
683 | is-number@^2.0.2, is-number@^2.1.0:
684 | version "2.1.0"
685 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
686 | dependencies:
687 | kind-of "^3.0.2"
688 |
689 | is-posix-bracket@^0.1.0:
690 | version "0.1.1"
691 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
692 |
693 | is-primitive@^2.0.0:
694 | version "2.0.0"
695 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
696 |
697 | is-property@^1.0.0:
698 | version "1.0.2"
699 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
700 |
701 | is-typedarray@~1.0.0:
702 | version "1.0.0"
703 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
704 |
705 | isarray@0.0.1:
706 | version "0.0.1"
707 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
708 |
709 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
710 | version "1.0.0"
711 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
712 |
713 | isobject@^2.0.0:
714 | version "2.1.0"
715 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
716 | dependencies:
717 | isarray "1.0.0"
718 |
719 | isstream@~0.1.2:
720 | version "0.1.2"
721 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
722 |
723 | jodid25519@^1.0.0:
724 | version "1.0.2"
725 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
726 | dependencies:
727 | jsbn "~0.1.0"
728 |
729 | jsbn@~0.1.0:
730 | version "0.1.0"
731 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
732 |
733 | json-schema@0.2.3:
734 | version "0.2.3"
735 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
736 |
737 | json-stringify-safe@~5.0.1:
738 | version "5.0.1"
739 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
740 |
741 | json5@^0.5.0:
742 | version "0.5.0"
743 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2"
744 |
745 | jsonpointer@^4.0.0:
746 | version "4.0.0"
747 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5"
748 |
749 | jsprim@^1.2.2:
750 | version "1.3.1"
751 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
752 | dependencies:
753 | extsprintf "1.0.2"
754 | json-schema "0.2.3"
755 | verror "1.3.6"
756 |
757 | kind-of@^3.0.2:
758 | version "3.0.4"
759 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74"
760 | dependencies:
761 | is-buffer "^1.0.2"
762 |
763 | lazy-cache@^1.0.3:
764 | version "1.0.4"
765 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
766 |
767 | loader-utils@0.2.x, loader-utils@^0.2.11:
768 | version "0.2.16"
769 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
770 | dependencies:
771 | big.js "^3.1.3"
772 | emojis-list "^2.0.0"
773 | json5 "^0.5.0"
774 | object-assign "^4.0.1"
775 |
776 | longest@^1.0.1:
777 | version "1.0.1"
778 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
779 |
780 | memory-fs@^0.2.0:
781 | version "0.2.0"
782 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
783 |
784 | memory-fs@~0.3.0:
785 | version "0.3.0"
786 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
787 | dependencies:
788 | errno "^0.1.3"
789 | readable-stream "^2.0.1"
790 |
791 | micromatch@^2.1.5:
792 | version "2.3.11"
793 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
794 | dependencies:
795 | arr-diff "^2.0.0"
796 | array-unique "^0.2.1"
797 | braces "^1.8.2"
798 | expand-brackets "^0.1.4"
799 | extglob "^0.3.1"
800 | filename-regex "^2.0.0"
801 | is-extglob "^1.0.0"
802 | is-glob "^2.0.1"
803 | kind-of "^3.0.2"
804 | normalize-path "^2.0.1"
805 | object.omit "^2.0.0"
806 | parse-glob "^3.0.4"
807 | regex-cache "^0.4.2"
808 |
809 | mime-db@~1.24.0:
810 | version "1.24.0"
811 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c"
812 |
813 | mime-types@^2.1.12, mime-types@~2.1.7:
814 | version "2.1.12"
815 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729"
816 | dependencies:
817 | mime-db "~1.24.0"
818 |
819 | minimatch@^3.0.0, minimatch@^3.0.2:
820 | version "3.0.3"
821 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
822 | dependencies:
823 | brace-expansion "^1.0.0"
824 |
825 | minimatch@^3.0.4:
826 | version "3.0.4"
827 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
828 | dependencies:
829 | brace-expansion "^1.1.7"
830 |
831 | minimist@0.0.8:
832 | version "0.0.8"
833 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
834 |
835 | minimist@^1.2.0:
836 | version "1.2.0"
837 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
838 |
839 | minimist@^1.2.5:
840 | version "1.2.5"
841 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
842 |
843 | minimist@~0.0.1:
844 | version "0.0.10"
845 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
846 |
847 | "mkdirp@>=0.5 0":
848 | version "0.5.5"
849 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
850 | dependencies:
851 | minimist "^1.2.5"
852 |
853 | mkdirp@~0.5.0, mkdirp@~0.5.1:
854 | version "0.5.1"
855 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
856 | dependencies:
857 | minimist "0.0.8"
858 |
859 | ms@0.7.1:
860 | version "0.7.1"
861 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
862 |
863 | nan@^2.3.0:
864 | version "2.4.0"
865 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
866 |
867 | node-libs-browser@^0.6.0:
868 | version "0.6.0"
869 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c"
870 | dependencies:
871 | assert "^1.1.1"
872 | browserify-zlib "~0.1.4"
873 | buffer "^4.9.0"
874 | console-browserify "^1.1.0"
875 | constants-browserify "0.0.1"
876 | crypto-browserify "~3.2.6"
877 | domain-browser "^1.1.1"
878 | events "^1.0.0"
879 | http-browserify "^1.3.2"
880 | https-browserify "0.0.0"
881 | os-browserify "~0.1.2"
882 | path-browserify "0.0.0"
883 | process "^0.11.0"
884 | punycode "^1.2.4"
885 | querystring-es3 "~0.2.0"
886 | readable-stream "^1.1.13"
887 | stream-browserify "^1.0.0"
888 | string_decoder "~0.10.25"
889 | timers-browserify "^1.0.1"
890 | tty-browserify "0.0.0"
891 | url "~0.10.1"
892 | util "~0.10.3"
893 | vm-browserify "0.0.4"
894 |
895 | node-pre-gyp@^0.6.29:
896 | version "0.6.31"
897 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017"
898 | dependencies:
899 | mkdirp "~0.5.1"
900 | nopt "~3.0.6"
901 | npmlog "^4.0.0"
902 | rc "~1.1.6"
903 | request "^2.75.0"
904 | rimraf "~2.5.4"
905 | semver "~5.3.0"
906 | tar "~2.2.1"
907 | tar-pack "~3.3.0"
908 |
909 | node-uuid@~1.4.7:
910 | version "1.4.7"
911 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
912 |
913 | nopt@~3.0.6:
914 | version "3.0.6"
915 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
916 | dependencies:
917 | abbrev "1"
918 |
919 | normalize-path@^2.0.1:
920 | version "2.0.1"
921 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
922 |
923 | npmlog@^4.0.0:
924 | version "4.0.0"
925 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f"
926 | dependencies:
927 | are-we-there-yet "~1.1.2"
928 | console-control-strings "~1.1.0"
929 | gauge "~2.6.0"
930 | set-blocking "~2.0.0"
931 |
932 | number-is-nan@^1.0.0:
933 | version "1.0.1"
934 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
935 |
936 | oauth-sign@~0.8.1:
937 | version "0.8.2"
938 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
939 |
940 | object-assign@^4.0.1, object-assign@^4.1.0:
941 | version "4.1.0"
942 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
943 |
944 | object.omit@^2.0.0:
945 | version "2.0.1"
946 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
947 | dependencies:
948 | for-own "^0.1.4"
949 | is-extendable "^0.1.1"
950 |
951 | once@^1.3.0:
952 | version "1.4.0"
953 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
954 | dependencies:
955 | wrappy "1"
956 |
957 | once@~1.3.3:
958 | version "1.3.3"
959 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
960 | dependencies:
961 | wrappy "1"
962 |
963 | optimist@~0.6.0:
964 | version "0.6.1"
965 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
966 | dependencies:
967 | minimist "~0.0.1"
968 | wordwrap "~0.0.2"
969 |
970 | os-browserify@~0.1.2:
971 | version "0.1.2"
972 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54"
973 |
974 | pako@~0.2.0:
975 | version "0.2.9"
976 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
977 |
978 | parse-glob@^3.0.4:
979 | version "3.0.4"
980 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
981 | dependencies:
982 | glob-base "^0.3.0"
983 | is-dotfile "^1.0.0"
984 | is-extglob "^1.0.0"
985 | is-glob "^2.0.0"
986 |
987 | path-browserify@0.0.0:
988 | version "0.0.0"
989 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
990 |
991 | path-is-absolute@^1.0.0:
992 | version "1.0.1"
993 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
994 |
995 | pbkdf2-compat@2.0.1:
996 | version "2.0.1"
997 | resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
998 |
999 | pinkie-promise@^2.0.0:
1000 | version "2.0.1"
1001 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1002 | dependencies:
1003 | pinkie "^2.0.0"
1004 |
1005 | pinkie@^2.0.0:
1006 | version "2.0.4"
1007 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1008 |
1009 | preserve@^0.2.0:
1010 | version "0.2.0"
1011 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1012 |
1013 | process-nextick-args@~1.0.6:
1014 | version "1.0.7"
1015 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1016 |
1017 | process@^0.11.0, process@~0.11.0:
1018 | version "0.11.9"
1019 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
1020 |
1021 | prr@~0.0.0:
1022 | version "0.0.0"
1023 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
1024 |
1025 | punycode@1.3.2:
1026 | version "1.3.2"
1027 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
1028 |
1029 | punycode@^1.2.4, punycode@^1.4.1:
1030 | version "1.4.1"
1031 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1032 |
1033 | qs@~6.3.0:
1034 | version "6.3.0"
1035 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
1036 |
1037 | querystring-es3@~0.2.0:
1038 | version "0.2.1"
1039 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
1040 |
1041 | querystring@0.2.0:
1042 | version "0.2.0"
1043 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
1044 |
1045 | randomatic@^1.1.3:
1046 | version "1.1.5"
1047 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b"
1048 | dependencies:
1049 | is-number "^2.0.2"
1050 | kind-of "^3.0.2"
1051 |
1052 | rc@~1.1.6:
1053 | version "1.1.6"
1054 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
1055 | dependencies:
1056 | deep-extend "~0.4.0"
1057 | ini "~1.3.0"
1058 | minimist "^1.2.0"
1059 | strip-json-comments "~1.0.4"
1060 |
1061 | readable-stream@^1.0.27-1, readable-stream@^1.1.13:
1062 | version "1.1.14"
1063 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
1064 | dependencies:
1065 | core-util-is "~1.0.0"
1066 | inherits "~2.0.1"
1067 | isarray "0.0.1"
1068 | string_decoder "~0.10.x"
1069 |
1070 | "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.1.4:
1071 | version "2.1.5"
1072 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
1073 | dependencies:
1074 | buffer-shims "^1.0.0"
1075 | core-util-is "~1.0.0"
1076 | inherits "~2.0.1"
1077 | isarray "~1.0.0"
1078 | process-nextick-args "~1.0.6"
1079 | string_decoder "~0.10.x"
1080 | util-deprecate "~1.0.1"
1081 |
1082 | readdirp@^2.0.0:
1083 | version "2.1.0"
1084 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
1085 | dependencies:
1086 | graceful-fs "^4.1.2"
1087 | minimatch "^3.0.2"
1088 | readable-stream "^2.0.2"
1089 | set-immediate-shim "^1.0.1"
1090 |
1091 | regex-cache@^0.4.2:
1092 | version "0.4.3"
1093 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
1094 | dependencies:
1095 | is-equal-shallow "^0.1.3"
1096 | is-primitive "^2.0.0"
1097 |
1098 | repeat-element@^1.1.2:
1099 | version "1.1.2"
1100 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
1101 |
1102 | repeat-string@^1.5.2:
1103 | version "1.6.1"
1104 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1105 |
1106 | request@^2.75.0:
1107 | version "2.76.0"
1108 | resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e"
1109 | dependencies:
1110 | aws-sign2 "~0.6.0"
1111 | aws4 "^1.2.1"
1112 | caseless "~0.11.0"
1113 | combined-stream "~1.0.5"
1114 | extend "~3.0.0"
1115 | forever-agent "~0.6.1"
1116 | form-data "~2.1.1"
1117 | har-validator "~2.0.6"
1118 | hawk "~3.1.3"
1119 | http-signature "~1.1.0"
1120 | is-typedarray "~1.0.0"
1121 | isstream "~0.1.2"
1122 | json-stringify-safe "~5.0.1"
1123 | mime-types "~2.1.7"
1124 | node-uuid "~1.4.7"
1125 | oauth-sign "~0.8.1"
1126 | qs "~6.3.0"
1127 | stringstream "~0.0.4"
1128 | tough-cookie "~2.3.0"
1129 | tunnel-agent "~0.4.1"
1130 |
1131 | right-align@^0.1.1:
1132 | version "0.1.3"
1133 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
1134 | dependencies:
1135 | align-text "^0.1.1"
1136 |
1137 | rimraf@2:
1138 | version "2.7.1"
1139 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
1140 | dependencies:
1141 | glob "^7.1.3"
1142 |
1143 | rimraf@~2.5.1, rimraf@~2.5.4:
1144 | version "2.5.4"
1145 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
1146 | dependencies:
1147 | glob "^7.0.5"
1148 |
1149 | ripemd160@0.2.0:
1150 | version "0.2.0"
1151 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
1152 |
1153 | semver@~5.3.0:
1154 | version "5.3.0"
1155 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1156 |
1157 | set-blocking@~2.0.0:
1158 | version "2.0.0"
1159 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1160 |
1161 | set-immediate-shim@^1.0.1:
1162 | version "1.0.1"
1163 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
1164 |
1165 | sha.js@2.2.6:
1166 | version "2.2.6"
1167 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
1168 |
1169 | signal-exit@^3.0.0:
1170 | version "3.0.1"
1171 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81"
1172 |
1173 | sntp@1.x.x:
1174 | version "1.0.9"
1175 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
1176 | dependencies:
1177 | hoek "2.x.x"
1178 |
1179 | source-list-map@~0.1.0:
1180 | version "0.1.6"
1181 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.6.tgz#e1e6f94f0b40c4d28dcf8f5b8766e0e45636877f"
1182 |
1183 | source-map@~0.4.1:
1184 | version "0.4.4"
1185 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
1186 | dependencies:
1187 | amdefine ">=0.0.4"
1188 |
1189 | source-map@~0.5.1:
1190 | version "0.5.6"
1191 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
1192 |
1193 | sshpk@^1.7.0:
1194 | version "1.10.1"
1195 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
1196 | dependencies:
1197 | asn1 "~0.2.3"
1198 | assert-plus "^1.0.0"
1199 | dashdash "^1.12.0"
1200 | getpass "^0.1.1"
1201 | optionalDependencies:
1202 | bcrypt-pbkdf "^1.0.0"
1203 | ecc-jsbn "~0.1.1"
1204 | jodid25519 "^1.0.0"
1205 | jsbn "~0.1.0"
1206 | tweetnacl "~0.14.0"
1207 |
1208 | stream-browserify@^1.0.0:
1209 | version "1.0.0"
1210 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193"
1211 | dependencies:
1212 | inherits "~2.0.1"
1213 | readable-stream "^1.0.27-1"
1214 |
1215 | string-width@^1.0.1:
1216 | version "1.0.2"
1217 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1218 | dependencies:
1219 | code-point-at "^1.0.0"
1220 | is-fullwidth-code-point "^1.0.0"
1221 | strip-ansi "^3.0.0"
1222 |
1223 | string_decoder@~0.10.25, string_decoder@~0.10.x:
1224 | version "0.10.31"
1225 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1226 |
1227 | stringstream@~0.0.4:
1228 | version "0.0.5"
1229 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
1230 |
1231 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1232 | version "3.0.1"
1233 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1234 | dependencies:
1235 | ansi-regex "^2.0.0"
1236 |
1237 | strip-json-comments@~1.0.4:
1238 | version "1.0.4"
1239 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
1240 |
1241 | supports-color@^2.0.0:
1242 | version "2.0.0"
1243 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1244 |
1245 | supports-color@^3.1.0:
1246 | version "3.1.2"
1247 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
1248 | dependencies:
1249 | has-flag "^1.0.0"
1250 |
1251 | tapable@^0.1.8, tapable@~0.1.8:
1252 | version "0.1.10"
1253 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
1254 |
1255 | tar-pack@~3.3.0:
1256 | version "3.3.0"
1257 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
1258 | dependencies:
1259 | debug "~2.2.0"
1260 | fstream "~1.0.10"
1261 | fstream-ignore "~1.0.5"
1262 | once "~1.3.3"
1263 | readable-stream "~2.1.4"
1264 | rimraf "~2.5.1"
1265 | tar "~2.2.1"
1266 | uid-number "~0.0.6"
1267 |
1268 | tar@~2.2.1:
1269 | version "2.2.2"
1270 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
1271 | dependencies:
1272 | block-stream "*"
1273 | fstream "^1.0.12"
1274 | inherits "2"
1275 |
1276 | timers-browserify@^1.0.1:
1277 | version "1.4.2"
1278 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
1279 | dependencies:
1280 | process "~0.11.0"
1281 |
1282 | tough-cookie@~2.3.0:
1283 | version "2.3.2"
1284 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
1285 | dependencies:
1286 | punycode "^1.4.1"
1287 |
1288 | tty-browserify@0.0.0:
1289 | version "0.0.0"
1290 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
1291 |
1292 | tunnel-agent@~0.4.1:
1293 | version "0.4.3"
1294 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
1295 |
1296 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
1297 | version "0.14.3"
1298 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d"
1299 |
1300 | uglify-js@~2.7.3:
1301 | version "2.7.4"
1302 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.4.tgz#a295a0de12b6a650c031c40deb0dc40b14568bd2"
1303 | dependencies:
1304 | async "~0.2.6"
1305 | source-map "~0.5.1"
1306 | uglify-to-browserify "~1.0.0"
1307 | yargs "~3.10.0"
1308 |
1309 | uglify-to-browserify@~1.0.0:
1310 | version "1.0.2"
1311 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
1312 |
1313 | uid-number@~0.0.6:
1314 | version "0.0.6"
1315 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
1316 |
1317 | url@~0.10.1:
1318 | version "0.10.3"
1319 | resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64"
1320 | dependencies:
1321 | punycode "1.3.2"
1322 | querystring "0.2.0"
1323 |
1324 | util-deprecate@~1.0.1:
1325 | version "1.0.2"
1326 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1327 |
1328 | util@0.10.3, util@~0.10.3:
1329 | version "0.10.3"
1330 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
1331 | dependencies:
1332 | inherits "2.0.1"
1333 |
1334 | verror@1.3.6:
1335 | version "1.3.6"
1336 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
1337 | dependencies:
1338 | extsprintf "1.0.2"
1339 |
1340 | vm-browserify@0.0.4:
1341 | version "0.0.4"
1342 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
1343 | dependencies:
1344 | indexof "0.0.1"
1345 |
1346 | watchpack@^0.2.1:
1347 | version "0.2.9"
1348 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
1349 | dependencies:
1350 | async "^0.9.0"
1351 | chokidar "^1.0.0"
1352 | graceful-fs "^4.1.2"
1353 |
1354 | webpack:
1355 | version "1.13.3"
1356 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.3.tgz#e79c46fe5a37c5ca70084ba0894c595cdcb42815"
1357 | dependencies:
1358 | acorn "^3.0.0"
1359 | async "^1.3.0"
1360 | clone "^1.0.2"
1361 | enhanced-resolve "~0.9.0"
1362 | interpret "^0.6.4"
1363 | loader-utils "^0.2.11"
1364 | memory-fs "~0.3.0"
1365 | mkdirp "~0.5.0"
1366 | node-libs-browser "^0.6.0"
1367 | optimist "~0.6.0"
1368 | supports-color "^3.1.0"
1369 | tapable "~0.1.8"
1370 | uglify-js "~2.7.3"
1371 | watchpack "^0.2.1"
1372 | webpack-core "~0.6.0"
1373 |
1374 | webpack-core@~0.6.0:
1375 | version "0.6.8"
1376 | resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.8.tgz#edf9135de00a6a3c26dd0f14b208af0aa4af8d0a"
1377 | dependencies:
1378 | source-list-map "~0.1.0"
1379 | source-map "~0.4.1"
1380 |
1381 | wide-align@^1.1.0:
1382 | version "1.1.0"
1383 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
1384 | dependencies:
1385 | string-width "^1.0.1"
1386 |
1387 | window-size@0.1.0:
1388 | version "0.1.0"
1389 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
1390 |
1391 | wordwrap@0.0.2:
1392 | version "0.0.2"
1393 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
1394 |
1395 | wordwrap@~0.0.2:
1396 | version "0.0.3"
1397 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
1398 |
1399 | wrappy@1:
1400 | version "1.0.2"
1401 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1402 |
1403 | xtend@^4.0.0:
1404 | version "4.0.1"
1405 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1406 |
1407 | yargs@~3.10.0:
1408 | version "3.10.0"
1409 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
1410 | dependencies:
1411 | camelcase "^1.0.2"
1412 | cliui "^2.1.0"
1413 | decamelize "^1.0.0"
1414 | window-size "0.1.0"
1415 |
--------------------------------------------------------------------------------