1 | var fs = require('graceful-fs')
|
2 | var path = require('path')
|
3 | var _ = require('lodash')
|
4 | var useragent = require('useragent')
|
5 | var Promise = require('bluebird')
|
6 |
|
7 | exports.browserFullNameToShort = function (fullName) {
|
8 | var agent = useragent.parse(fullName)
|
9 | var isKnown = agent.family !== 'Other' && agent.os.family !== 'Other'
|
10 | return isKnown ? agent.toAgent() + ' (' + agent.os + ')' : fullName
|
11 | }
|
12 |
|
13 | exports.isDefined = function (value) {
|
14 | return !_.isUndefined(value)
|
15 | }
|
16 |
|
17 | exports.isFunction = _.isFunction
|
18 | exports.isString = _.isString
|
19 | exports.isObject = _.isObject
|
20 | exports.isArray = _.isArray
|
21 |
|
22 | var ABS_URL = /^https?:\/\//
|
23 | exports.isUrlAbsolute = function (url) {
|
24 | return ABS_URL.test(url)
|
25 | }
|
26 |
|
27 | exports.camelToSnake = function (camelCase) {
|
28 | return camelCase.replace(/[A-Z]/g, function (match, pos) {
|
29 | return (pos > 0 ? '_' : '') + match.toLowerCase()
|
30 | })
|
31 | }
|
32 |
|
33 | exports.ucFirst = function (word) {
|
34 | return word.charAt(0).toUpperCase() + word.substr(1)
|
35 | }
|
36 |
|
37 | exports.dashToCamel = function (dash) {
|
38 | var words = dash.split('-')
|
39 | return words.shift() + words.map(exports.ucFirst).join('')
|
40 | }
|
41 |
|
42 | exports.arrayRemove = function (collection, item) {
|
43 | var idx = collection.indexOf(item)
|
44 |
|
45 | if (idx !== -1) {
|
46 | collection.splice(idx, 1)
|
47 | return true
|
48 | }
|
49 |
|
50 | return false
|
51 | }
|
52 |
|
53 | exports.merge = function () {
|
54 | var args = Array.prototype.slice.call(arguments, 0)
|
55 | args.unshift({})
|
56 | return _.merge.apply({}, args)
|
57 | }
|
58 |
|
59 | exports.formatTimeInterval = function (time) {
|
60 | var mins = Math.floor(time / 60000)
|
61 | var secs = (time - mins * 60000) / 1000
|
62 | var str = secs + (secs === 1 ? ' sec' : ' secs')
|
63 |
|
64 | if (mins) {
|
65 | str = mins + (mins === 1 ? ' min ' : ' mins ') + str
|
66 | }
|
67 |
|
68 | return str
|
69 | }
|
70 |
|
71 | var replaceWinPath = function (path) {
|
72 | return exports.isDefined(path) ? path.replace(/\\/g, '/') : path
|
73 | }
|
74 |
|
75 | exports.normalizeWinPath = process.platform === 'win32' ? replaceWinPath : _.identity
|
76 |
|
77 | exports.mkdirIfNotExists = function mkdir (directory, done) {
|
78 |
|
79 |
|
80 | fs.stat(directory, function (err, stat) {
|
81 | if (stat && stat.isDirectory()) {
|
82 | done()
|
83 | } else {
|
84 | mkdir(path.dirname(directory), function () {
|
85 | fs.mkdir(directory, done)
|
86 | })
|
87 | }
|
88 | })
|
89 |
|
90 | }
|
91 |
|
92 | exports.defer = function () {
|
93 | var resolve
|
94 | var reject
|
95 | var promise = new Promise(function () {
|
96 | resolve = arguments[0]
|
97 | reject = arguments[1]
|
98 | })
|
99 |
|
100 | return {
|
101 | resolve: resolve,
|
102 | reject: reject,
|
103 | promise: promise
|
104 | }
|
105 | }
|
106 |
|
107 |
|
108 | exports._ = _
|