├── .gitignore
├── setenv
├── src
├── ios
│ ├── ShareExtension
│ │ ├── ShareViewController.h
│ │ ├── ShareExtension.entitlements
│ │ ├── MainInterface.storyboard
│ │ ├── ShareExtension-Info.plist
│ │ └── ShareViewController.m
│ └── OpenWithPlugin.m
└── android
│ └── com
│ └── missiveapp
│ └── openwith
│ ├── PluginResultSender.java
│ ├── Serializer.java
│ └── OpenWithPlugin.java
├── install-pmd
├── .eslintrc
├── LICENSE
├── hooks
├── npmInstall.js
├── iosCopyShareExtension.js
├── utils.js
└── iosAddTarget.js
├── package.json
├── plugin.xml
├── www
├── openwith.js
└── test-openwith.js
├── README.md
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/setenv:
--------------------------------------------------------------------------------
1 | NODE_VERSION=v6
2 |
3 | nvm ls $NODE_VERSION || nvm install $NODE_VERSION
4 | nvm use $NODE_VERSION
5 |
--------------------------------------------------------------------------------
/src/ios/ShareExtension/ShareViewController.h:
--------------------------------------------------------------------------------
1 | #define SHAREEXT_GROUP_IDENTIFIER @"group.__BUNDLE_IDENTIFIER__"
2 | #define SHAREEXT_URL_SCHEME @"__URL_SCHEME__"
3 |
--------------------------------------------------------------------------------
/src/ios/ShareExtension/ShareExtension.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.application-groups
6 |
7 | group.__BUNDLE_IDENTIFIER__
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/install-pmd:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Version of PMD to install
4 | VERSION=5.8.1
5 |
6 | set -e
7 | COPYWD="$PWD"
8 | cd "`dirname $0`"
9 | INSTALL_DIR=$PWD/node_modules/pmd-bin-$VERSION
10 | BIN_DIR=$PWD/node_modules/.bin
11 |
12 | if test -e $INSTALL_DIR; then
13 | # echo "PMD version $VERSION is already installed"
14 | exit 0
15 | fi
16 |
17 | echo "Intalling PMD version $VERSION into node_modules"
18 |
19 | curl -OL https://github.com/pmd/pmd/releases/download/pmd_releases%2F$VERSION/pmd-bin-$VERSION.zip
20 | unzip pmd-bin-$VERSION.zip
21 | rm -f pmd-bin-$VERSION.zip
22 |
23 | mkdir -p node_modules
24 | mv pmd-bin-$VERSION > $INSTALL_DIR
25 |
26 | cat << EOF > $BIN_DIR/pmd
27 | #!/bin/sh
28 | echo
29 | $INSTALL_DIR/bin/run.sh pmd "\$@"
30 | EOF
31 | chmod +x $BIN_DIR/pmd
32 |
33 | cat << EOF > $INSTALL_DIR/package.json
34 | {
35 | "name": "pdm",
36 | "version": "$VERSION"
37 | }
38 | EOF
39 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parserOptions": {
3 | "ecmaVersion": 2017,
4 | "sourceType": "module",
5 | "ecmaFeatures": {
6 | "impliedStrict": true
7 | }
8 | },
9 | "env": {
10 | "browser": true,
11 | "serviceworker": true,
12 | "commonjs": true,
13 | "es6": true
14 | },
15 | "globals": {
16 | "me": true
17 | },
18 | "rules": {
19 | "camelcase": 0,
20 | "eqeqeq": 1,
21 | "no-extra-parens": 2,
22 | "max-len": 0,
23 | "valid-jsdoc": 1,
24 | "require-jsdoc": 1,
25 | "array-bracket-spacing": 1,
26 | "block-spacing": 1,
27 | "brace-style": 1,
28 | "eol-last": 1,
29 | "func-call-spacing": 1,
30 | "func-name-matching": 1,
31 | "no-lonely-if": 1,
32 | "operator-assignment": 1,
33 | "keyword-spacing": 1,
34 | "arrow-body-style": 1,
35 | "prefer-spread": 1,
36 | "prefer-template": 1,
37 | "prefer-arrow-callback": 1,
38 | "prefer-rest-params": 0,
39 | "template-curly-spacing": 1,
40 | "no-invalid-this": 0
41 | },
42 | "extends": "google",
43 | "root": true
44 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017 Jean-Christophe Hoelt
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/android/com/missiveapp/openwith/PluginResultSender.java:
--------------------------------------------------------------------------------
1 | package com.missiveapp.openwith;
2 |
3 | import org.apache.cordova.CallbackContext;
4 | import org.apache.cordova.PluginResult;
5 |
6 | /**
7 | * Helper methods to reduce the pain while calling javascript callbacks.
8 | */
9 | @SuppressWarnings("PMD.ShortMethodName")
10 | class PluginResultSender {
11 | /** Send an INVALID_ACTION error. */
12 | public static boolean invalidAction(
13 | final CallbackContext context)
14 | {
15 | final PluginResult result = new PluginResult(PluginResult.Status.INVALID_ACTION);
16 | context.sendPluginResult(result);
17 |
18 | return false;
19 | }
20 |
21 | /** Send NO_RESULT.
22 | * We generally keep the callback for a later call,so this is left as
23 | * an option to this method. */
24 | public static boolean noResult(
25 | final CallbackContext context,
26 | final boolean keepCallback)
27 | {
28 | final PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
29 |
30 | result.setKeepCallback(keepCallback);
31 | context.sendPluginResult(result);
32 |
33 | return true;
34 | }
35 |
36 | /** Send OK. */
37 | public static boolean ok(
38 | final CallbackContext context)
39 | {
40 | final PluginResult result = new PluginResult(PluginResult.Status.OK);
41 | context.sendPluginResult(result);
42 |
43 | return true;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/hooks/npmInstall.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2017 DavidStrausz
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 all
11 | // 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 THE
19 | // SOFTWARE.
20 |
21 | const PLUGIN_ID = "cordova-plugin-openwith";
22 |
23 | module.exports = function (context) {
24 | var child_process = require('child_process');
25 | var deferral = require('q').defer();
26 |
27 | console.log('Installing "' + PLUGIN_ID + '" dependencies');
28 | child_process.exec('npm install --production', {cwd:__dirname}, function (error) {
29 | if (error !== null) {
30 | console.log('exec error: ' + error);
31 | deferral.reject('npm installation failed');
32 | }
33 | deferral.resolve();
34 | });
35 |
36 | return deferral.promise;
37 | };
38 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cordova-plugin-openwith",
3 | "version": "1.0.3",
4 | "description": "Cordova \"Open With\" plugin for iOS and Android",
5 | "cordova": {
6 | "id": "cordova-plugin-openwith",
7 | "platforms": [
8 | "android",
9 | "ios"
10 | ]
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "https://github.com/missive/cordova-plugin-openwith.git"
15 | },
16 | "keywords": [
17 | "ecosystem:cordova",
18 | "cordova-ios",
19 | "cordova",
20 | "phonegap",
21 | "openwith",
22 | "ios",
23 | "android"
24 | ],
25 | "scripts": {
26 | "test": "npm run js-lint && npm run js-test && npm run java-lint",
27 | "install-dev": "./install-pmd",
28 | "java-lint": "pmd -minimumpriority 4 -d src/android -R java-basic,java-android,java-braces,java-codesize,java-empty,java-finalizers,java-imports,java-naming,java-optimizations,java-strictexception,java-strings,java-sunsecure,java-typeresolution,java-unnecessary,java-unusedcode -f textcolor",
29 | "objc-lint": "true",
30 | "js-lint": "eslint www",
31 | "js-test": "mocha www",
32 | "js-lint-watch": "esw --watch www",
33 | "js-test-watch": "mocha --watch www"
34 | },
35 | "author": "Jean-Christophe Hoelt ",
36 | "license": "MIT",
37 | "bugs": {
38 | "url": "https://github.com/missive/cordova-plugin-openwith/issues"
39 | },
40 | "homepage": "https://github.com/missive/cordova-plugin-openwith",
41 | "# Dependencies required by the hooks": "",
42 | "dependencies": {
43 | "file-system": "^2.2.2",
44 | "path": "^0.12.7",
45 | "plist": "^2.1.0",
46 | "xcode": "2.0.0"
47 | },
48 | "# Dependencies required to run tests": "",
49 | "devDependencies": {
50 | "eslint": "^4.7.2",
51 | "eslint-config-google": "^0.9.1",
52 | "eslint-config-standard": "^10.2.1",
53 | "eslint-plugin-import": "^2.7.0",
54 | "eslint-plugin-mocha": "^4.11.0",
55 | "eslint-plugin-node": "^5.1.1",
56 | "eslint-plugin-promise": "^3.5.0",
57 | "eslint-plugin-standard": "^3.0.1",
58 | "eslint-watch": "^3.1.2",
59 | "expect.js": "^0.3.1",
60 | "mocha": "^3.5.3"
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/hooks/iosCopyShareExtension.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const {
5 | PLUGIN_ID,
6 | getPreferences,
7 | findXCodeproject,
8 | replacePreferencesInFile,
9 | log, redError,
10 | } = require('./utils')
11 |
12 | function copyFileSync(source, target, preferences) {
13 | var targetFile = target;
14 |
15 | // If target is a directory a new file with the same name will be created
16 | if (fs.existsSync(target)) {
17 | if (fs.lstatSync(target).isDirectory()) {
18 | targetFile = path.join(target, path.basename(source));
19 | }
20 | }
21 |
22 | fs.writeFileSync(targetFile, fs.readFileSync(source));
23 | replacePreferencesInFile(targetFile, preferences);
24 | }
25 |
26 | function copyFolderRecursiveSync(source, target, preferences) {
27 | var files = [];
28 |
29 | // Check if folder needs to be created or integrated
30 | var targetFolder = path.join(target, path.basename(source));
31 | if (!fs.existsSync(targetFolder)) {
32 | fs.mkdirSync(targetFolder);
33 | }
34 |
35 | // Copy
36 | if (fs.lstatSync(source).isDirectory()) {
37 | files = fs.readdirSync(source);
38 | files.forEach(function(file) {
39 | var curSource = path.join(source, file);
40 | if (fs.lstatSync(curSource).isDirectory()) {
41 | copyFolderRecursiveSync(curSource, targetFolder, preferences);
42 | } else {
43 | copyFileSync(curSource, targetFolder, preferences);
44 | }
45 | });
46 | }
47 | }
48 |
49 | module.exports = function(context) {
50 | log('Copying ShareExtension files to iOS project')
51 |
52 | var deferral = require('q').defer();
53 |
54 | findXCodeproject(context, function(projectFolder, projectName) {
55 | var preferences = getPreferences(context, projectName);
56 |
57 | var srcFolder = path.join(context.opts.projectRoot, 'plugins', PLUGIN_ID, 'src', 'ios', 'ShareExtension');
58 | var targetFolder = path.join(context.opts.projectRoot, 'platforms', 'ios');
59 |
60 | if (!fs.existsSync(srcFolder)) {
61 | throw redError('Missing extension project folder in ' + srcFolder + '.');
62 | }
63 |
64 | copyFolderRecursiveSync(srcFolder, targetFolder, preferences);
65 | deferral.resolve();
66 | });
67 |
68 | return deferral.promise;
69 | };
70 |
--------------------------------------------------------------------------------
/src/ios/ShareExtension/MainInterface.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/ios/ShareExtension/ShareExtension-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | __DISPLAY_NAME__
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | __BUNDLE_IDENTIFIER__
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | XPC!
19 | CFBundleShortVersionString
20 | __BUNDLE_SHORT_VERSION_STRING__
21 | CFBundleVersion
22 | __BUNDLE_VERSION__
23 | NSExtension
24 |
25 | NSExtensionAttributes
26 |
27 | NSExtensionActivationRule
28 |
29 | NSExtensionActivationUsesStrictMatching
30 | 0
31 | NSExtensionActivationDictionaryVersion
32 | 2
33 | NSExtensionActivationSupportsAttachmentsWithMaxCount
34 | 10
35 | NSExtensionActivationSupportsFileWithMaxCount
36 | 10
37 | NSExtensionActivationSupportsImageWithMaxCount
38 | 10
39 | NSExtensionActivationSupportsMovieWithMaxCount
40 | 5
41 | NSExtensionActivationSupportsText
42 |
43 | NSExtensionActivationSupportsWebURLWithMaxCount
44 | 10
45 | NSExtensionActivationSupportsWebPageWithMaxCount
46 | 10
47 |
48 |
49 | NSExtensionMainStoryboard
50 | MainInterface
51 | NSExtensionPointIdentifier
52 | com.apple.share-services
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/hooks/utils.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const PLUGIN_ID = 'cordova-plugin-openwith';
5 | const BUNDLE_SUFFIX = '.shareextension';
6 |
7 | function getPreferences(context, projectName) {
8 | var configXml = getConfigXml(context);
9 | var plist = projectPlistJson(context, projectName);
10 |
11 | return [{
12 | key: '__DISPLAY_NAME__',
13 | value: getCordovaParameter(configXml, 'DISPLAY_NAME') || projectName
14 | }, {
15 | key: '__BUNDLE_IDENTIFIER__',
16 | value: getCordovaParameter(configXml, 'IOS_BUNDLE_IDENTIFIER') + BUNDLE_SUFFIX
17 | }, {
18 | key: '__BUNDLE_SHORT_VERSION_STRING__',
19 | value: plist.CFBundleShortVersionString
20 | }, {
21 | key: '__BUNDLE_VERSION__',
22 | value: plist.CFBundleVersion
23 | }, {
24 | key: '__URL_SCHEME__',
25 | value: getCordovaParameter(configXml, 'IOS_URL_SCHEME')
26 | }];
27 | }
28 |
29 | function getConfigXml(context) {
30 | var configXml = fs.readFileSync(path.join(context.opts.projectRoot, 'config.xml'), 'utf-8');
31 |
32 | if (configXml) {
33 | configXml = configXml.substring(configXml.indexOf('<'));
34 | }
35 |
36 | return configXml
37 | }
38 |
39 | function projectPlistJson(context, projectName) {
40 | var plist = require('plist');
41 |
42 | var plistPath = path.join(iosFolder(context), projectName, projectName + '-Info.plist');
43 | return plist.parse(fs.readFileSync(plistPath, 'utf8'));
44 | }
45 |
46 | function iosFolder(context) {
47 | return context.opts.cordova.project
48 | ? context.opts.cordova.project.root
49 | : path.join(context.opts.projectRoot, 'platforms/ios/');
50 | }
51 |
52 | function getCordovaParameter(configXml, variableName) {
53 | var variable;
54 | var arg = process.argv.filter(function(arg) {
55 | return arg.indexOf(variableName + '=') == 0;
56 | });
57 |
58 | if (arg.length >= 1) {
59 | variable = arg[0].split('=')[1];
60 | } else {
61 | variable = getPreferenceValue(configXml, variableName);
62 | }
63 |
64 | return variable;
65 | }
66 |
67 | function getPreferenceValue(configXml, name) {
68 | var value = configXml.match(new RegExp('name="' + name + '" value="(.*?)"', "i"));
69 |
70 | if (value && value[1]) {
71 | return value[1];
72 | } else {
73 | return null;
74 | }
75 | }
76 |
77 | // Determine the full path to the app's xcode project file.
78 | function findXCodeproject(context, callback) {
79 | fs.readdir(iosFolder(context), function(err, data) {
80 | var projectFolder;
81 | var projectName;
82 |
83 | // Find the project folder by looking for *.xcodeproj
84 | if (data && data.length) {
85 | data.forEach(function(folder) {
86 | if (folder.match(/\.xcodeproj$/)) {
87 | projectFolder = path.join(iosFolder(context), folder);
88 | projectName = path.basename(folder, '.xcodeproj');
89 | }
90 | });
91 | }
92 |
93 | if (!projectFolder || !projectName) {
94 | throw redError('Could not find an .xcodeproj folder in: ' + iosFolder(context));
95 | }
96 |
97 | if (err) {
98 | throw redError(err);
99 | }
100 |
101 | callback(projectFolder, projectName);
102 | });
103 | }
104 |
105 | function replacePreferencesInFile(filePath, preferences) {
106 | var content = fs.readFileSync(filePath, 'utf8');
107 |
108 | for (var i = 0; i < preferences.length; i++) {
109 | var pref = preferences[i];
110 | var regexp = new RegExp(pref.key, "g");
111 | content = content.replace(regexp, pref.value);
112 | }
113 |
114 | fs.writeFileSync(filePath, content);
115 | }
116 |
117 | function redError(message) {
118 | return new Error('"' + PLUGIN_ID + '" \x1b[1m\x1b[31m' + message + '\x1b[0m');
119 | }
120 |
121 | function log(message) {
122 | console.log(`[${PLUGIN_ID}] ${message}`);
123 | }
124 |
125 | module.exports = {
126 | PLUGIN_ID,
127 | iosFolder,
128 | getPreferences,
129 | findXCodeproject,
130 | replacePreferencesInFile,
131 | log, redError,
132 | }
133 |
--------------------------------------------------------------------------------
/hooks/iosAddTarget.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const {
5 | PLUGIN_ID,
6 | iosFolder,
7 | getPreferences,
8 | findXCodeproject,
9 | replacePreferencesInFile,
10 | log, redError,
11 | } = require('./utils')
12 |
13 | // Return the list of files in the share extension project, organized by type
14 | const FILE_TYPES = {
15 | '.h':'source',
16 | '.m':'source',
17 | '.plist':'config',
18 | '.entitlements':'config',
19 | };
20 |
21 | function parsePbxProject(context, pbxProjectPath) {
22 | var xcode = require('xcode');
23 | log(`Parsing existing project at location: ${pbxProjectPath}…`);
24 |
25 | var pbxProject;
26 |
27 | if (context.opts.cordova.project) {
28 | pbxProject = context.opts.cordova.project.parseProjectFile(context.opts.projectRoot).xcode;
29 | } else {
30 | pbxProject = xcode.project(pbxProjectPath);
31 | pbxProject.parseSync();
32 | }
33 |
34 | return pbxProject;
35 | }
36 |
37 | function forEachShareExtensionFile(context, callback) {
38 | var shareExtensionFolder = path.join(iosFolder(context), 'ShareExtension');
39 | fs.readdirSync(shareExtensionFolder).forEach(function(name) {
40 | // Ignore junk files like .DS_Store
41 | if (!/^\..*/.test(name)) {
42 | callback({
43 | name: name,
44 | path: path.join(shareExtensionFolder, name),
45 | extension: path.extname(name)
46 | });
47 | }
48 | });
49 | }
50 |
51 | function getShareExtensionFiles(context) {
52 | var files = { source: [], config: [], resource: [] };
53 |
54 | forEachShareExtensionFile(context, function(file) {
55 | var fileType = FILE_TYPES[file.extension] || 'resource';
56 | files[fileType].push(file);
57 | });
58 |
59 | return files;
60 | }
61 |
62 | module.exports = function(context) {
63 | log('Adding ShareExt target to XCode project')
64 |
65 | var deferral = require('q').defer();
66 |
67 | findXCodeproject(context, function(projectFolder, projectName) {
68 | var preferences = getPreferences(context, projectName);
69 |
70 | var pbxProjectPath = path.join(projectFolder, 'project.pbxproj');
71 | var pbxProject = parsePbxProject(context, pbxProjectPath);
72 |
73 | var files = getShareExtensionFiles(context);
74 | files.config.concat(files.source).forEach(function(file) {
75 | replacePreferencesInFile(file.path, preferences);
76 | });
77 |
78 | // Find if the project already contains the target and group
79 | var target = pbxProject.pbxTargetByName('ShareExt') || pbxProject.pbxTargetByName('"ShareExt"');
80 | if (target) { log('ShareExt target already exists') }
81 |
82 | if (!target) {
83 | // Add PBXNativeTarget to the project
84 | target = pbxProject.addTarget('ShareExt', 'app_extension', 'ShareExtension');
85 |
86 | // Add a new PBXSourcesBuildPhase for our ShareViewController
87 | // (we can't add it to the existing one because an extension is kind of an extra app)
88 | pbxProject.addBuildPhase([], 'PBXSourcesBuildPhase', 'Sources', target.uuid);
89 |
90 | // Add a new PBXResourcesBuildPhase for the Resources used by the Share Extension
91 | // (MainInterface.storyboard)
92 | pbxProject.addBuildPhase([], 'PBXResourcesBuildPhase', 'Resources', target.uuid);
93 | }
94 |
95 | // Create a separate PBXGroup for the shareExtensions files, name has to be unique and path must be in quotation marks
96 | var pbxGroupKey = pbxProject.findPBXGroupKey({name: 'ShareExtension'});
97 | if (pbxGroupKey) {
98 | log('ShareExtension group already exists')
99 | } else {
100 | pbxGroupKey = pbxProject.pbxCreateGroup('ShareExtension', 'ShareExtension');
101 |
102 | // Add the PbxGroup to cordovas "CustomTemplate"-group
103 | var customTemplateKey = pbxProject.findPBXGroupKey({name: 'CustomTemplate'});
104 | pbxProject.addToPbxGroup(pbxGroupKey, customTemplateKey);
105 | }
106 |
107 | // Add files which are not part of any build phase (config)
108 | files.config.forEach(function (file) {
109 | pbxProject.addFile(file.name, pbxGroupKey);
110 | });
111 |
112 | // Add source files to our PbxGroup and our newly created PBXSourcesBuildPhase
113 | files.source.forEach(function(file) {
114 | pbxProject.addSourceFile(file.name, {target: target.uuid}, pbxGroupKey);
115 | });
116 |
117 | // Add the resource file and include it into the targest PbxResourcesBuildPhase and PbxGroup
118 | files.resource.forEach(function(file) {
119 | pbxProject.addResourceFile(file.name, {target: target.uuid}, pbxGroupKey);
120 | });
121 |
122 | // Add build settings for Swift support, bridging header and xcconfig files
123 | var configurations = pbxProject.pbxXCBuildConfigurationSection();
124 | for (var key in configurations) {
125 | if (typeof configurations[key].buildSettings !== 'undefined') {
126 | var buildSettingsObj = configurations[key].buildSettings;
127 | if (typeof buildSettingsObj['PRODUCT_NAME'] !== 'undefined') {
128 | var productName = buildSettingsObj['PRODUCT_NAME'];
129 | if (productName.indexOf('ShareExt') >= 0) {
130 | buildSettingsObj['CODE_SIGN_ENTITLEMENTS'] = '"ShareExtension/ShareExtension.entitlements"';
131 | }
132 | }
133 | }
134 | }
135 |
136 | // Write the modified project back to disc
137 | fs.writeFileSync(pbxProjectPath, pbxProject.writeSync());
138 | log('Successfully added ShareExt target to XCode project')
139 |
140 | deferral.resolve();
141 | });
142 |
143 | return deferral.promise;
144 | };
145 |
--------------------------------------------------------------------------------
/src/android/com/missiveapp/openwith/Serializer.java:
--------------------------------------------------------------------------------
1 | package com.missiveapp.openwith;
2 |
3 | import android.content.ClipData;
4 | import android.content.ContentResolver;
5 | import android.content.Intent;
6 | import android.database.Cursor;
7 | import android.net.Uri;
8 | import android.os.Build;
9 | import android.os.Bundle;
10 | import android.provider.OpenableColumns;
11 | import android.webkit.URLUtil;
12 | import org.json.JSONArray;
13 | import org.json.JSONException;
14 | import org.json.JSONObject;
15 |
16 | /**
17 | * Handle serialization of Android objects ready to be sent to javascript.
18 | */
19 | class Serializer {
20 | /** Convert an intent to JSON.
21 | *
22 | * This actually only exports stuff necessary to see file content
23 | * (streams or clip data) sent with the intent.
24 | * If none are specified, null is return.
25 | */
26 | public static JSONObject toJSONObject(
27 | final ContentResolver contentResolver,
28 | final Intent intent)
29 | throws JSONException
30 | {
31 | JSONArray items = null;
32 |
33 | if ("text/plain".equals(intent.getType())) {
34 | items = itemsFromIntent(intent);
35 | } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
36 | items = itemsFromClipData(contentResolver, intent.getClipData());
37 | }
38 |
39 | if (items == null || items.length() == 0) {
40 | items = itemsFromExtras(contentResolver, intent.getExtras());
41 | }
42 |
43 | if (items == null) {
44 | return null;
45 | }
46 |
47 | final JSONObject action = new JSONObject();
48 | action.put("action", translateAction(intent.getAction()));
49 | action.put("items", items);
50 |
51 | return action;
52 | }
53 |
54 | public static String translateAction(final String action) {
55 | if ("android.intent.action.SEND".equals(action) ||
56 | "android.intent.action.SEND_MULTIPLE".equals(action)) {
57 | return "SEND";
58 | } else if ("android.intent.action.VIEW".equals(action)) {
59 | return "VIEW";
60 | }
61 |
62 | return action;
63 | }
64 |
65 | /** Extract the list of items from an intent (plain text).
66 | *
67 | * Defaults to null. */
68 | public static JSONArray itemsFromIntent(
69 | final Intent intent)
70 | throws JSONException
71 | {
72 | if (intent != null) {
73 | String text = intent.getStringExtra(Intent.EXTRA_TEXT);
74 | String type = "text/plain";
75 |
76 | if (URLUtil.isValidUrl(text)) {
77 | type = "url";
78 | }
79 |
80 | final JSONObject json = new JSONObject();
81 | json.put("data", text);
82 | json.put("type", type);
83 |
84 | JSONObject[] items = new JSONObject[1];
85 | items[0] = json;
86 |
87 | return new JSONArray(items);
88 | }
89 |
90 | return null;
91 | }
92 |
93 | /** Extract the list of items from clip data (if available).
94 | *
95 | * Defaults to null. */
96 | public static JSONArray itemsFromClipData(
97 | final ContentResolver contentResolver,
98 | final ClipData clipData)
99 | throws JSONException
100 | {
101 | if (clipData != null) {
102 | final int clipItemCount = clipData.getItemCount();
103 | JSONObject[] items = new JSONObject[clipItemCount];
104 |
105 | for (int i = 0; i < clipItemCount; i++) {
106 | items[i] = toJSONObject(contentResolver, clipData.getItemAt(i).getUri());
107 | }
108 |
109 | return new JSONArray(items);
110 | }
111 |
112 | return null;
113 | }
114 |
115 | /** Extract the list of items from the intent's extra stream.
116 | *
117 | * See Intent.EXTRA_STREAM for details. */
118 | public static JSONArray itemsFromExtras(
119 | final ContentResolver contentResolver,
120 | final Bundle extras)
121 | throws JSONException
122 | {
123 | if (extras == null) {
124 | return null;
125 | }
126 |
127 | final JSONObject item = toJSONObject(
128 | contentResolver,
129 | (Uri) extras.get(Intent.EXTRA_STREAM)
130 | );
131 |
132 | if (item == null) {
133 | return null;
134 | }
135 |
136 | final JSONObject[] items = new JSONObject[1];
137 | items[0] = item;
138 |
139 | return new JSONArray(items);
140 | }
141 |
142 | /** Convert an Uri to JSON object.
143 | *
144 | * Object will include:
145 | * "fileUrl" itself;
146 | * "type" of data;
147 | * "name" for the file.
148 | */
149 | public static JSONObject toJSONObject(
150 | final ContentResolver contentResolver,
151 | final Uri uri)
152 | throws JSONException
153 | {
154 | if (uri == null) {
155 | return null;
156 | }
157 |
158 | final JSONObject json = new JSONObject();
159 | final String type = contentResolver.getType(uri);
160 | final String suggestedName = getNamefromURI(contentResolver, uri);
161 |
162 | json.put("fileUrl", uri);
163 | json.put("type", type);
164 | json.put("name", suggestedName);
165 |
166 | return json;
167 | }
168 |
169 | public static String getNamefromURI(
170 | final ContentResolver contentResolver,
171 | final Uri uri)
172 | {
173 | final Cursor cursor = contentResolver.query(uri, null, null, null, null);
174 |
175 | if (cursor == null) {
176 | return "";
177 | }
178 |
179 | final int column_index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
180 | if (column_index < 0) {
181 | cursor.close();
182 | return "";
183 | }
184 |
185 | cursor.moveToFirst();
186 |
187 | final String result = cursor.getString(column_index);
188 | cursor.close();
189 |
190 | return result;
191 | }
192 | }
193 |
--------------------------------------------------------------------------------
/plugin.xml:
--------------------------------------------------------------------------------
1 |
2 |
25 |
26 |
32 | OpenWith
33 | Cordova "Open With" plugin for Cordova
34 |
35 |
36 |
37 | https://github.com/missive/cordova-plugin-openwith.git
38 | https://github.com/missive/cordova-plugin-openwith/issues
39 | MIT
40 | cordova,phonegap,openwith,ios,android
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | CFBundleURLName
69 | $(CFBundleIdentifier).shareextension
70 | CFBundleURLSchemes
71 |
72 | $IOS_URL_SCHEME
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | group.$(CFBundleIdentifier).shareextension
82 |
83 |
84 |
85 |
86 |
87 |
88 | group.$(CFBundleIdentifier).shareextension
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
--------------------------------------------------------------------------------
/src/ios/OpenWithPlugin.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import "ShareViewController.h"
3 | #import
4 |
5 | /*
6 | * Constants
7 | */
8 |
9 | #define VERBOSITY_DEBUG 0
10 | #define VERBOSITY_INFO 10
11 | #define VERBOSITY_WARN 20
12 | #define VERBOSITY_ERROR 30
13 |
14 | /*
15 | * State variables
16 | */
17 |
18 | static NSDictionary* launchOptions = nil;
19 |
20 | /*
21 | * OpenWithPlugin definition
22 | */
23 |
24 | @interface OpenWithPlugin : CDVPlugin {
25 | NSString* _loggerCallback;
26 | NSString* _handlerCallback;
27 | NSUserDefaults *_userDefaults;
28 | int _verbosityLevel;
29 | }
30 |
31 | @property (nonatomic,retain) NSString* loggerCallback;
32 | @property (nonatomic,retain) NSString* handlerCallback;
33 | @property (nonatomic) int verbosityLevel;
34 | @property (nonatomic,retain) NSUserDefaults *userDefaults;
35 | @end
36 |
37 | /*
38 | * OpenWithPlugin implementation
39 | */
40 |
41 | @implementation OpenWithPlugin
42 |
43 | @synthesize loggerCallback = _loggerCallback;
44 | @synthesize handlerCallback = _handlerCallback;
45 | @synthesize verbosityLevel = _verbosityLevel;
46 | @synthesize userDefaults = _userDefaults;
47 |
48 | //
49 | // Retrieve launchOptions
50 | //
51 | // The plugin mechanism doesn’t provide an easy mechanism to capture the
52 | // launchOptions which are passed to the AppDelegate’s didFinishLaunching: method.
53 | //
54 | // Therefore we added an observer for the
55 | // UIApplicationDidFinishLaunchingNotification notification when the class is loaded.
56 | //
57 | // Source: https://www.plotprojects.com/blog/developing-a-cordova-phonegap-plugin-for-ios/
58 | //
59 | + (void) load {
60 | [[NSNotificationCenter defaultCenter] addObserver:self
61 | selector:@selector(didFinishLaunching:)
62 | name:UIApplicationDidFinishLaunchingNotification
63 | object:nil];
64 | }
65 |
66 | + (void) didFinishLaunching:(NSNotification*)notification {
67 | launchOptions = notification.userInfo;
68 | }
69 |
70 | - (void) log:(int)level message:(NSString*)message {
71 | if (level >= self.verbosityLevel) {
72 | NSLog(@"[OpenWithPlugin.m]%@", message);
73 |
74 | if (self.loggerCallback != nil) {
75 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
76 | pluginResult.keepCallback = [NSNumber numberWithBool:YES];
77 |
78 | [self.commandDelegate sendPluginResult:pluginResult callbackId:self.loggerCallback];
79 | }
80 | }
81 | }
82 |
83 | - (void) debug:(NSString*)message { [self log:VERBOSITY_DEBUG message:message]; }
84 | - (void) info:(NSString*)message { [self log:VERBOSITY_INFO message:message]; }
85 | - (void) warn:(NSString*)message { [self log:VERBOSITY_WARN message:message]; }
86 | - (void) error:(NSString*)message { [self log:VERBOSITY_ERROR message:message]; }
87 |
88 | - (void) pluginInitialize {
89 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onResume) name:UIApplicationWillEnterForegroundNotification object:nil];
90 |
91 | [self onReset];
92 | [self info:@"[pluginInitialize] OK"];
93 | }
94 |
95 | - (void) onReset {
96 | [self info:@"[onReset]"];
97 |
98 | self.userDefaults = [[NSUserDefaults alloc] initWithSuiteName:SHAREEXT_GROUP_IDENTIFIER];
99 | self.verbosityLevel = VERBOSITY_INFO;
100 | self.loggerCallback = nil;
101 | self.handlerCallback = nil;
102 | }
103 |
104 | - (void) onResume {
105 | [self debug:@"[onResume]"];
106 | [self checkForFileToShare];
107 | }
108 |
109 | - (void) setVerbosity:(CDVInvokedUrlCommand*)command {
110 | NSNumber *value = [command argumentAtIndex:0
111 | withDefault:[NSNumber numberWithInt: VERBOSITY_INFO]
112 | andClass:[NSNumber class]];
113 |
114 | self.verbosityLevel = value.integerValue;
115 | [self debug:[NSString stringWithFormat:@"[setVerbosity] %d", self.verbosityLevel]];
116 |
117 | [self.userDefaults setInteger:self.verbosityLevel forKey:@"verbosityLevel"];
118 | [self.userDefaults synchronize];
119 |
120 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
121 | [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
122 | }
123 |
124 | - (void) setLogger:(CDVInvokedUrlCommand*)command {
125 | self.loggerCallback = command.callbackId;
126 | [self debug:[NSString stringWithFormat:@"[setLogger] %@", self.loggerCallback]];
127 |
128 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT];
129 | pluginResult.keepCallback = [NSNumber numberWithBool:YES];
130 |
131 | [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
132 | }
133 |
134 | - (void) setHandler:(CDVInvokedUrlCommand*)command {
135 | self.handlerCallback = command.callbackId;
136 | [self debug:[NSString stringWithFormat:@"[setHandler] %@", self.handlerCallback]];
137 |
138 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT];
139 | pluginResult.keepCallback = [NSNumber numberWithBool:YES];
140 |
141 | [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
142 | }
143 |
144 | - (void) checkForFileToShare {
145 | [self debug:@"[checkForFileToShare]"];
146 |
147 | if (self.handlerCallback == nil) {
148 | [self debug:@"[checkForFileToShare] javascript not ready yet."];
149 | return;
150 | }
151 |
152 | [self.userDefaults synchronize];
153 |
154 | NSObject *object = [self.userDefaults objectForKey:@"shared"];
155 | if (object == nil) {
156 | [self debug:@"[checkForFileToShare] Nothing to share"];
157 | return;
158 | }
159 |
160 | // Clean-up the object, assume it's been handled from now, prevent double processing
161 | [self.userDefaults removeObjectForKey:@"shared"];
162 |
163 | // Extract sharing data, make sure that it is valid
164 | if (![object isKindOfClass:[NSDictionary class]]) {
165 | [self debug:@"[checkForFileToShare] Data object is invalid"];
166 | return;
167 | }
168 |
169 | NSDictionary *dict = (NSDictionary*)object;
170 | NSString *text = dict[@"text"];
171 | NSArray *items = dict[@"items"];
172 |
173 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:@{
174 | @"text": text,
175 | @"items": items
176 | }];
177 |
178 | pluginResult.keepCallback = [NSNumber numberWithBool:YES];
179 | [self.commandDelegate sendPluginResult:pluginResult callbackId:self.handlerCallback];
180 | }
181 |
182 | // Initialize the plugin
183 | - (void) init:(CDVInvokedUrlCommand*)command {
184 | [self debug:@"[init]"];
185 |
186 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
187 | [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
188 |
189 | [self checkForFileToShare];
190 | }
191 |
192 | @end
193 |
--------------------------------------------------------------------------------
/src/android/com/missiveapp/openwith/OpenWithPlugin.java:
--------------------------------------------------------------------------------
1 | package com.missiveapp.openwith;
2 |
3 | import android.content.ContentResolver;
4 | import android.content.Intent;
5 | import android.util.Log;
6 | import java.util.Arrays;
7 | import java.util.ArrayList;
8 | import org.apache.cordova.CallbackContext;
9 | import org.apache.cordova.CordovaPlugin;
10 | import org.apache.cordova.PluginResult;
11 | import org.json.JSONArray;
12 | import org.json.JSONException;
13 | import org.json.JSONObject;
14 |
15 | /**
16 | * This is the entry point of the openwith plugin
17 | *
18 | * @author Jean-Christophe Hoelt
19 | */
20 | public class OpenWithPlugin extends CordovaPlugin {
21 | private final String PLUGIN_NAME = "OpenWithPlugin";
22 |
23 | private final int DEBUG = 0; // Maximal verbosity, log everything
24 | private final int INFO = 10; // Default verbosity, log interesting stuff only
25 | private final int WARN = 20; // Low verbosity, log only warnings and errors
26 | private final int ERROR = 30; // Minimal verbosity, log only errors
27 |
28 | private int verbosity = INFO;
29 |
30 | /** Log to the console if verbosity level is greater or equal to level */
31 | private void log(final int level, final String message) {
32 | switch(level) {
33 | case DEBUG: Log.d(PLUGIN_NAME, message); break;
34 | case INFO: Log.i(PLUGIN_NAME, message); break;
35 | case WARN: Log.w(PLUGIN_NAME, message); break;
36 | case ERROR: Log.e(PLUGIN_NAME, message); break;
37 | }
38 |
39 | if (level >= verbosity && loggerContext != null) {
40 | final PluginResult result = new PluginResult(
41 | PluginResult.Status.OK,
42 | String.format("%d:%s", level, message)
43 | );
44 |
45 | result.setKeepCallback(true);
46 | loggerContext.sendPluginResult(result);
47 | }
48 | }
49 |
50 | private CallbackContext handlerContext; // Callback to the javascript onNewFile method */
51 | private CallbackContext loggerContext; // Callback to the javascript logger method */
52 |
53 | /** Intents added before the handler has been registered */
54 | private ArrayList pendingIntents = new ArrayList(); //NOPMD
55 |
56 | /**
57 | * Called when the WebView does a top-level navigation or refreshes.
58 | * Plugins should stop any long-running processes and clean up internal state.
59 | * Does nothing by default.
60 | */
61 | @Override
62 | public void onReset() {
63 | verbosity = INFO;
64 | handlerContext = null;
65 | loggerContext = null;
66 |
67 | pendingIntents.clear();
68 | }
69 |
70 | /**
71 | * Generic plugin command executor
72 | *
73 | * @param action
74 | * @param data
75 | * @param callbackContext
76 | * @return
77 | */
78 | @Override
79 | public boolean execute(final String action, final JSONArray data, final CallbackContext callbackContext) {
80 | log(DEBUG, "execute() called with action:" + action + " and options: " + data);
81 |
82 | if ("setVerbosity".equals(action)) {
83 | return setVerbosity(data, callbackContext);
84 | }
85 |
86 | if ("init".equals(action)) {
87 | return init(data, callbackContext);
88 | }
89 |
90 | if ("setHandler".equals(action)) {
91 | return setHandler(data, callbackContext);
92 | }
93 |
94 | if ("setLogger".equals(action)) {
95 | return setLogger(data, callbackContext);
96 | }
97 |
98 | log(DEBUG, "execute() did not recognize this action: " + action);
99 | return false;
100 | }
101 |
102 | public boolean setVerbosity(final JSONArray data, final CallbackContext context) {
103 | log(DEBUG, "setVerbosity() " + data);
104 |
105 | if (data.length() != 1) {
106 | log(WARN, "setVerbosity() -> invalidAction");
107 | return false;
108 | }
109 |
110 | try {
111 | verbosity = data.getInt(0);
112 | log(DEBUG, "setVerbosity() -> ok");
113 |
114 | return PluginResultSender.ok(context);
115 | } catch (JSONException ex) {
116 | log(WARN, "setVerbosity() -> invalidAction");
117 | return false;
118 | }
119 | }
120 |
121 | // Initialize the plugin
122 | public boolean init(final JSONArray data, final CallbackContext context) {
123 | log(DEBUG, "init() " + data);
124 |
125 | if (data.length() != 0) {
126 | log(WARN, "init() -> invalidAction");
127 | return false;
128 | }
129 |
130 | onNewIntent(cordova.getActivity().getIntent());
131 | log(DEBUG, "init() -> ok");
132 |
133 | return PluginResultSender.ok(context);
134 | }
135 |
136 | public boolean setHandler(final JSONArray data, final CallbackContext context) {
137 | log(DEBUG, "setHandler() " + data);
138 |
139 | if (data.length() != 0) {
140 | log(WARN, "setHandler() -> invalidAction");
141 | return false;
142 | }
143 |
144 | handlerContext = context;
145 | log(DEBUG, "setHandler() -> ok");
146 |
147 | return PluginResultSender.noResult(context, true);
148 | }
149 |
150 | public boolean setLogger(final JSONArray data, final CallbackContext context) {
151 | log(DEBUG, "setLogger() " + data);
152 |
153 | if (data.length() != 0) {
154 | log(WARN, "setLogger() -> invalidAction");
155 | return false;
156 | }
157 |
158 | loggerContext = context;
159 | log(DEBUG, "setLogger() -> ok");
160 |
161 | return PluginResultSender.noResult(context, true);
162 | }
163 |
164 | /**
165 | * This is called when a new intent is sent while the app is already opened.
166 | *
167 | * We also call it manually with the cordova application intent when the plugin
168 | * is initialized (so all intents will be managed by this method).
169 | */
170 | @Override
171 | public void onNewIntent(final Intent intent) {
172 | log(DEBUG, "onNewIntent() " + intent.getAction());
173 |
174 | final JSONObject json = toJSONObject(intent);
175 | if (json != null) {
176 | pendingIntents.add(json);
177 | }
178 |
179 | processPendingIntents();
180 | }
181 |
182 | /**
183 | * When the handler is defined, call it with all attached files.
184 | */
185 | private void processPendingIntents() {
186 | log(DEBUG, "processPendingIntents()");
187 |
188 | if (handlerContext == null) {
189 | return;
190 | }
191 |
192 | for (int i = 0; i < pendingIntents.size(); i++) {
193 | sendIntentToJavascript((JSONObject) pendingIntents.get(i));
194 | }
195 |
196 | pendingIntents.clear();
197 | }
198 |
199 | /** Calls the javascript intent handlers. */
200 | private void sendIntentToJavascript(final JSONObject intent) {
201 | final PluginResult result = new PluginResult(PluginResult.Status.OK, intent);
202 |
203 | result.setKeepCallback(true);
204 | handlerContext.sendPluginResult(result);
205 | }
206 |
207 | /**
208 | * Converts an intent to JSON
209 | */
210 | private JSONObject toJSONObject(final Intent intent) {
211 | try {
212 | final ContentResolver contentResolver = this.cordova
213 | .getActivity().getApplicationContext().getContentResolver();
214 |
215 | return Serializer.toJSONObject(contentResolver, intent);
216 | } catch (JSONException e) {
217 | log(ERROR, "Error converting intent to JSON: " + e.getMessage());
218 | log(ERROR, Arrays.toString(e.getStackTrace()));
219 |
220 | return null;
221 | }
222 | }
223 | }
224 |
--------------------------------------------------------------------------------
/www/openwith.js:
--------------------------------------------------------------------------------
1 | function initOpenwithPlugin(root) {
2 | 'use strict';
3 |
4 | // imports
5 | // var cordova = require('cordova')
6 |
7 | let PLUGIN_NAME = 'OpenWithPlugin';
8 |
9 | // the returned object
10 | let openwith = {};
11 |
12 | //
13 | // exported constants
14 | //
15 |
16 | // logging levels
17 | let DEBUG = openwith.DEBUG = 0;
18 | let INFO = openwith.INFO = 10;
19 | let WARN = openwith.WARN = 20;
20 | let ERROR = openwith.ERROR = 30;
21 |
22 | // actions
23 | openwith.SEND = 'SEND';
24 | openwith.VIEW = 'VIEW';
25 |
26 | //
27 | // state variables
28 | //
29 |
30 | // default verbosity level is to show errors only
31 | let verbosity;
32 |
33 | // list of registered handlers
34 | let handlers;
35 |
36 | // list of intents sent to this app
37 | //
38 | // it's never cleaned up, so that newly registered handlers (especially those registered a bit too late)
39 | // will still receive the list of intents.
40 | let intents;
41 |
42 | // the logger function (defaults to console.log)
43 | let logger;
44 |
45 | // the cordova object (defaults to global one)
46 | let cordova;
47 |
48 | // has init() been called or not already
49 | let initCalled;
50 |
51 | // make sure a number is displayed with 2 digits
52 | let twoDigits = function(n) {
53 | return n < 10
54 | ? `0${n}`
55 | : `${n}`;
56 | };
57 |
58 | // format a date for display
59 | let formatDate = function(now) {
60 | let date = now ? new Date(now) : new Date();
61 | let d = [date.getMonth() + 1, date.getDate()].map(twoDigits);
62 | let t = [date.getHours(), date.getMinutes(), date.getSeconds()].map(twoDigits);
63 | return `${d.join('-')} ${t.join(':')}`;
64 | };
65 |
66 | // format verbosity level for display
67 | let formatVerbosity = function(level) {
68 | if (level <= DEBUG) return 'D';
69 | if (level <= INFO) return 'I';
70 | if (level <= WARN) return 'W';
71 | return 'E';
72 | };
73 |
74 | // display a log in the console only if the level is higher than current verbosity
75 | let log = function(level, message) {
76 | if (level >= verbosity) {
77 | logger(`${formatDate()} ${formatVerbosity(level)} openwith: ${message}`);
78 | }
79 | };
80 |
81 | // reset the state to default
82 | openwith.reset = function() {
83 | log(DEBUG, 'reset');
84 | verbosity = openwith.INFO;
85 | handlers = [];
86 | intents = [];
87 | logger = console.log;
88 | cordova = root.cordova;
89 | initCalled = false;
90 | };
91 |
92 | // perform the initial reset
93 | openwith.reset();
94 |
95 | // change the logger function
96 | openwith.setLogger = function(value) {
97 | logger = value;
98 | };
99 |
100 | // change the cordova object (mostly for testing)
101 | openwith.setCordova = function(value) {
102 | cordova = value;
103 | };
104 |
105 | // change the verbosity level
106 | openwith.setVerbosity = function(value) {
107 | log(DEBUG, 'setVerbosity()');
108 | if (value !== DEBUG && value !== INFO && value !== WARN && value !== ERROR) {
109 | throw new Error('invalid verbosity level');
110 | }
111 | verbosity = value;
112 | cordova.exec(null, null, PLUGIN_NAME, 'setVerbosity', [value]);
113 | };
114 |
115 | // retrieve the verbosity level
116 | openwith.getVerbosity = function() {
117 | log(DEBUG, 'getVerbosity()');
118 | return verbosity;
119 | };
120 |
121 | // a simple function to test that the plugin is correctly installed
122 | openwith.about = function() {
123 | log(DEBUG, 'about()');
124 | return 'cordova-plugin-openwith, (c) 2017 fovea.cc';
125 | };
126 |
127 | let findHandler = function(callback) {
128 | for (let i = 0; i < handlers.length; ++i) {
129 | if (handlers[i] === callback) {
130 | return i;
131 | }
132 | }
133 | return -1;
134 | };
135 |
136 | // registers a intent handler
137 | openwith.addHandler = function(callback) {
138 | log(DEBUG, 'addHandler()');
139 | if (typeof callback !== 'function') {
140 | throw new Error('invalid handler function');
141 | }
142 | if (findHandler(callback) >= 0) {
143 | throw new Error('handler already defined');
144 | }
145 | handlers.push(callback);
146 | intents.forEach((intent) => {
147 | callback(intent);
148 | });
149 | };
150 |
151 | openwith.numHandlers = function() {
152 | log(DEBUG, 'numHandler()');
153 | return handlers.length;
154 | };
155 |
156 | openwith.load = function(dataDescriptor, successCallback, errorCallback) {
157 | let loadSuccess = function(base64) {
158 | dataDescriptor.base64 = base64;
159 | if (successCallback) {
160 | successCallback(base64, dataDescriptor);
161 | }
162 | };
163 | let loadError = function(err) {
164 | if (errorCallback) {
165 | errorCallback(err, dataDescriptor);
166 | }
167 | };
168 | if (dataDescriptor.base64) {
169 | loadSuccess(dataDescriptor.base64);
170 | } else {
171 | cordova.exec(loadSuccess, loadError, PLUGIN_NAME, 'load', [dataDescriptor]);
172 | }
173 | };
174 |
175 | let onNewIntent = function(intent) {
176 | log(DEBUG, `onNewIntent(${intent.action})`);
177 | // process the new intent
178 | handlers.forEach((handler) => {
179 | handler(intent);
180 | });
181 | intents.push(intent);
182 | };
183 |
184 | // Initialize the native side at startup
185 | openwith.init = function(successCallback, errorCallback) {
186 | log(DEBUG, 'init()');
187 | if (initCalled) {
188 | throw new Error('init should only be called once');
189 | }
190 | initCalled = true;
191 |
192 | // callbacks have to be functions
193 | if (successCallback && typeof successCallback !== 'function') {
194 | throw new Error('invalid success callback');
195 | }
196 | if (errorCallback && typeof errorCallback !== 'function') {
197 | throw new Error('invalid error callback');
198 | }
199 |
200 | let initSuccess = function() {
201 | log(DEBUG, 'initSuccess()');
202 | if (successCallback) successCallback();
203 | };
204 | let initError = function() {
205 | log(DEBUG, 'initError()');
206 | if (errorCallback) errorCallback();
207 | };
208 | let nativeLogger = function(data) {
209 | let split = data.split(':');
210 | log(+split[0], `[native] ${split.slice(1).join(':')}`);
211 | };
212 |
213 | cordova.exec(nativeLogger, null, PLUGIN_NAME, 'setLogger', []);
214 | cordova.exec(onNewIntent, null, PLUGIN_NAME, 'setHandler', []);
215 | cordova.exec(initSuccess, initError, PLUGIN_NAME, 'init', []);
216 | };
217 |
218 | return openwith;
219 | }
220 |
221 | // Export the plugin object
222 | let openwith = initOpenwithPlugin(this);
223 | module.exports = openwith;
224 | this.plugins = this.plugins || {};
225 | this.plugins.openwith = openwith;
226 |
--------------------------------------------------------------------------------
/www/test-openwith.js:
--------------------------------------------------------------------------------
1 | /* global describe it beforeEach */
2 | let openwith = require('./openwith');
3 | let expect = require('expect.js');
4 |
5 | describe('openwith', () => {
6 | let cordovaExecArgs;
7 |
8 | let cordovaExecCallTo = function(method) {
9 | return cordovaExecArgs[method];
10 | };
11 |
12 | // cordova fail-over (to run tests)
13 | let fakeCordova = () => ({
14 | exec: function(successCallback, errorCallback, targetObject, method, args) {
15 | cordovaExecArgs[method] = {
16 | successCallback: successCallback,
17 | errorCallback: errorCallback,
18 | targetObject: targetObject,
19 | method: method,
20 | args: args,
21 | };
22 | },
23 | });
24 |
25 | beforeEach(() => {
26 | // start each test from a clean state
27 | openwith.reset();
28 |
29 | // setup a fake cordova engine
30 | openwith.setCordova(fakeCordova());
31 |
32 | // disable all logging
33 | openwith.setLogger(() => {});
34 | // openwith.setVerbosity(0)
35 |
36 | cordovaExecArgs = {};
37 | });
38 |
39 | describe('.about()', () => {
40 | it('is a function', () => expect(openwith.about).to.be.a('function'));
41 | it('returns a string', () => expect(openwith.about()).to.be.a('string'));
42 | });
43 |
44 | describe('.init()', () => {
45 | it('is a function', () => expect(openwith.init).to.be.a('function'));
46 | it('can only be called once', () => {
47 | expect(openwith.init).withArgs(null, null).to.not.throwError();
48 | expect(openwith.init).withArgs(null, null).to.throwError();
49 | });
50 | it('accepts a success and error callback', () => {
51 | let success = () => {};
52 | let error = () => {};
53 | expect(openwith.init).withArgs(success, error).to.not.throwError();
54 | });
55 | it('rejects bad argument types', () => {
56 | let cb = () => {};
57 | expect(openwith.init).withArgs(cb, 1).to.throwError();
58 | expect(openwith.init).withArgs(1, cb).to.throwError();
59 | });
60 | });
61 |
62 | describe('.getVerbosity()', () => {
63 | it('is a function', () => expect(openwith.getVerbosity).to.be.a('function'));
64 | it('returns the verbosity level', () => expect(openwith.getVerbosity()).to.be.a('number'));
65 | });
66 |
67 | describe('.setVerbosity()', () => {
68 | it('is a function', () => expect(openwith.setVerbosity).to.be.a('function'));
69 | it('accepts only valid verbosity levels', () => {
70 | expect(openwith.setVerbosity).withArgs(openwith.DEBUG).to.not.throwError();
71 | expect(openwith.setVerbosity).withArgs(openwith.INFO).to.not.throwError();
72 | expect(openwith.setVerbosity).withArgs(openwith.WARN).to.not.throwError();
73 | expect(openwith.setVerbosity).withArgs(openwith.ERROR).to.not.throwError();
74 | expect(openwith.setVerbosity).withArgs(999).to.throwError();
75 | });
76 | it('changes the verbosity level', () => {
77 | openwith.setVerbosity(openwith.DEBUG);
78 | expect(openwith.getVerbosity()).to.equal(openwith.DEBUG);
79 | openwith.setVerbosity(openwith.INFO);
80 | expect(openwith.getVerbosity()).to.equal(openwith.INFO);
81 | openwith.setVerbosity(openwith.WARN);
82 | expect(openwith.getVerbosity()).to.equal(openwith.WARN);
83 | openwith.setVerbosity(openwith.ERROR);
84 | expect(openwith.getVerbosity()).to.equal(openwith.ERROR);
85 | });
86 | it('changes the native verbosity level', () => {
87 | openwith.setVerbosity(openwith.INFO);
88 | expect(cordovaExecCallTo('setVerbosity')).to.be.ok();
89 | expect(cordovaExecCallTo('setVerbosity').args).to.eql([openwith.INFO]);
90 | });
91 | });
92 |
93 | describe('.numHandlers', () => {
94 | it('is a function', () => expect(openwith.numHandlers).to.be.a('function'));
95 | it('returns the number of handlers', () => {
96 | expect(openwith.numHandlers()).to.be.a('number');
97 | expect(openwith.numHandlers()).to.equal(0);
98 | });
99 | });
100 |
101 | describe('.addHandler', () => {
102 | it('is a function', () => expect(openwith.addHandler).to.be.a('function'));
103 | it('accepts only a function as argument', () => {
104 | expect(openwith.addHandler).withArgs(() => {}).to.not.throwError();
105 | expect(openwith.addHandler).withArgs('nope').to.throwError();
106 | });
107 | it('increases the number of handlers', () => {
108 | expect(openwith.numHandlers()).to.equal(0);
109 | openwith.addHandler(() => {});
110 | expect(openwith.numHandlers()).to.equal(1);
111 | });
112 | it('refuses to add the same handler more than once', () => {
113 | const handler = () => {};
114 | expect(openwith.numHandlers()).to.equal(0);
115 | openwith.addHandler(handler);
116 | expect(openwith.numHandlers()).to.equal(1);
117 | expect(openwith.addHandler).withArgs(handler).to.throwError();
118 | expect(openwith.numHandlers()).to.equal(1);
119 | });
120 | });
121 |
122 | describe('new file received', () => {
123 | let onNewFile;
124 | let myHandlersArgs;
125 | let myHandlers;
126 |
127 | // test what happens for received files,
128 | // this requires to hack into some internal, to trigger a new file event
129 | beforeEach(() => {
130 | // There is the hack, we know that the onNewFile callback is expected by the
131 | // native side as argument 0 of the init function
132 | openwith.init();
133 | onNewFile = cordovaExecCallTo('setHandler').successCallback;
134 | // setup 2 handlers
135 | myHandlersArgs = [undefined, undefined];
136 | myHandlers = [
137 | function() {
138 | myHandlersArgs[0] = arguments;
139 | },
140 | function() {
141 | myHandlersArgs[1] = arguments;
142 | },
143 | ];
144 | });
145 |
146 | it('triggers all registered handlers', () => {
147 | // register handlers, check that they haven't been called yet
148 | myHandlers.forEach(openwith.addHandler);
149 | myHandlersArgs.forEach((args) => {
150 | expect(args).to.not.be.ok();
151 | });
152 |
153 | // trigger a new file event and check that the handlers have been called
154 | let newFile = {test: 1};
155 | onNewFile(newFile);
156 | myHandlersArgs.forEach((args) => {
157 | expect(args).to.be.ok();
158 | expect(args[0]).to.equal(newFile);
159 | });
160 |
161 | // do it again with another pseudo "file"
162 | let newFile2 = {test: 2};
163 | onNewFile(newFile2);
164 | myHandlersArgs.forEach((args) => {
165 | expect(args[0]).to.equal(newFile2);
166 | });
167 | });
168 |
169 | it('triggers for handlers added after the new file is received', () => {
170 | let newFile = {test: 3};
171 | onNewFile(newFile);
172 | myHandlers.forEach(openwith.addHandler);
173 | myHandlersArgs.forEach((args) => {
174 | expect(args).to.be.ok();
175 | expect(args[0]).to.equal(newFile);
176 | });
177 | });
178 | });
179 | });
180 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cordova-plugin-openwith
2 |
3 | > This plugin for [Apache Cordova](https://cordova.apache.org/) registers your app to handle certain types of files.
4 |
5 | ## Overview
6 |
7 | This is a bit modified version of [cordova-plugin-openwith](https://github.com/j3k0/cordova-plugin-openwith) by Jean-Christophe Hoelt for iOS.
8 |
9 | #### What's different:
10 |
11 | - **Works with several types of shared data** (UTIs). Currently, URLs, text and images are supported. If you would like to remove any of these types, feel free to edit ShareExtension-Info.plist (NSExtensionActivationRule section) after plugin's installation
12 | - **Support of sharing several photos at once is supported**. By default, the maximum number is 10, but this can be easily edited in the plugin's .plist file
13 | - **Does not show native UI with "Post" option**. Having two-step share (enter sharing message and then pick the receiver in the Cordova app) might be a bad user experience, so this plugin opens Cordova application immediately and passes the shared data to it. Thereby, you are expected to implement sharing UI in your Cordova app.
14 |
15 | You'd like your app to be listed in the **Send to...** section for certain types of files, on both **Android** and **iOS**? This is THE plugin! No need to meddle into Android's manifests and iOS's plist files, it's (almost) all managed for you by a no brainer one liner installation command.
16 |
17 | ## Table of Contents
18 |
19 | - [Installation](#installation)
20 | - [Usage](#usage)
21 | - [API](#api)
22 | - [License](#license)
23 |
24 |
25 | #### iOS
26 |
27 | On iOS, there are many ways apps can communicate. This plugin uses a [Share Extension](https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Share.html#//apple_ref/doc/uid/TP40014214-CH12-SW1). This is a particular type of App Extension which intent is, as Apple puts it: _"to post to a sharing website or share content with others"_.
28 |
29 | A share extension can be used to share any type of content. You have to define which you want to support using an [Universal Type Identifier](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html) (or UTI). For a full list of what your options are, please check [Apple's System-Declared UTI](https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1).
30 |
31 | As with all extensions, the flow of events is expected to be handled by a small app, external to your Cordova App but bundled with it. When installing the plugin, we will add a new target called **ShareExtension** to your XCode project which implements this Extension App. The Extension and the Cordova App live in different processes and can only communicate with each other using inter-app communication methods.
32 |
33 | When a user posts some content using the Share Extension, the content will be stored in a Shared User-Preferences Container. To enable this, the Cordova App and Share Extension should define a group and add both the app and extension to it.
34 |
35 | Once the data is in place in the Shared User-Preferences Container, the Share Extension will open the Cordova App by calling a [Custom URL Scheme](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). This seems a little borderline as Apple tries hard to prevent this from being possible, but brave iOS developers always find [solutions](https://stackoverflow.com/questions/24297273/openurl-not-work-in-action-extension/24614589#24614589)... So as for now there is one and it seems like people got their app pass the review process with it. At the moment of writing, this method is still working on iOS 11.1. The recommended solution is be to implement the posting logic in the Share Extension, but this doesn't play well with Cordova Apps architecture...
36 |
37 | On the Cordova App side, the plugin checks listens for app start or resume events. When this happens, it looks into the Shared User-Preferences Container for any content to share and report it to the javascript application.
38 |
39 | ## Installation
40 |
41 | Here's the promised one liner:
42 |
43 | ```
44 | cordova plugin add cordova-plugin-openwith \
45 | --variable IOS_URL_SCHEME=cordovaopenwithdemo
46 | ```
47 |
48 | | variable | example | notes |
49 | |---|---|---|
50 | | `DISPLAY_NAME` | My App Name | If you want to use a different name than your project name |
51 | | `IOS_BUNDLE_IDENTIFIER` | com.domain.app | Your app bundle identifier |
52 | | `IOS_URL_SCHEME` | uniquelonglowercase | Any random long string of lowercase alphabetical characters |
53 |
54 | It shouldn't be too hard. But just in case, Jean-Christophe Hoelt [posted a screencast of it](https://youtu.be/eaE4m_xO1mg).
55 |
56 | ## Usage
57 |
58 | ```js
59 | document.addEventListener('deviceready', setupOpenwith, false);
60 |
61 | function setupOpenwith() {
62 |
63 | // Increase verbosity if you need more logs
64 | //cordova.openwith.setVerbosity(cordova.openwith.DEBUG);
65 |
66 | // Initialize the plugin
67 | cordova.openwith.init(initSuccess, initError);
68 |
69 | function initSuccess() { console.log('init success!'); }
70 | function initError(err) { console.log('init failed: ' + err); }
71 |
72 | // Define your file handler
73 | cordova.openwith.addHandler(myHandler);
74 |
75 | function myHandler(intent) {
76 | console.log('intent received');
77 | console.log(' text: ' + intent.text); // description to the sharing, for instance title of the page when shared URL from Safari
78 | for (var i = 0; i < intent.items.length; ++i) {
79 | var item = intent.items[i];
80 | console.log(' type: ', item.uti); // UTI. possible values: public.url, public.text or public.image
81 | console.log(' type: ', item.type); // Mime type. For example: "image/jpeg"
82 | console.log(' data: ', item.data); // shared data. For URLs and text - actually the shared URL or text. For image - its base64 string representation.
83 | console.log(' text: ', item.text); // text to share alongside the item. as we don't allow user to enter text in native UI, in most cases this will be empty. However for sharing pages from Safari this might contain the title of the shared page.
84 | console.log(' name: ', item.name); // suggested name of the image. For instance: "IMG_0404.JPG"
85 | console.log(' utis: ', item.utis); // some optional additional info
86 |
87 | // Read file with Cordova’s file plugin
88 | if (item.fileUrl) {
89 | resolveLocalFileSystemURL(item.fileUrl, (fileEntry) => {
90 | fileEntry.file((file) => {
91 | let mediaType = file.type.split('/')[0].toLowerCase()
92 |
93 | if (mediaType == 'image') {
94 | let reader = new FileReader
95 |
96 | reader.readAsDataURL(file)
97 | reader.onloadend = () => {
98 | // Can use this for an
tag
99 | file.src = reader.result
100 | }
101 | }
102 | })
103 | })
104 | }
105 | }
106 | }
107 | }
108 | ```
109 |
110 | ## API
111 |
112 | ### cordova.openwith.setVerbosity(level)
113 |
114 | Change the verbosity level of the plugin.
115 |
116 | `level` can be set to:
117 |
118 | - `cordova.openwith.DEBUG` for maximal verbosity, log everything.
119 | - `cordova.openwith.INFO` for the default verbosity, log interesting stuff only.
120 | - `cordova.openwith.WARN` for low verbosity, log only warnings and errors.
121 | - `cordova.openwith.ERROR` for minimal verbosity, log only errors.
122 |
123 | ### cordova.openwith.addHandler(handlerFunction)
124 |
125 | Add an handler function, that will get notified when a file is received.
126 |
127 | **Handler function**
128 |
129 | The signature for the handler function is `function handlerFunction(intent)`. See below for what an intent is.
130 |
131 | **Intent**
132 |
133 | `intent` describe the operation to perform, toghether with the associated data. It has the following fields:
134 |
135 | - `text`: text to share alongside the item, in most cases this will be an empty string.
136 | - `items`: an array containing one or more data descriptor.
137 |
138 | **Data descriptor**
139 |
140 | A data descriptor describe one file. It is a javascript object with the following fields:
141 |
142 | - `uti`: Unique Type Identifier. possible values: public.url, public.text or public.image
143 | - `type`: Mime type. For example: "image/jpeg"
144 | - `text`: test description of the share, generally empty
145 | - `name`: suggested file name
146 | - `utis`: list of UTIs the file belongs to.
147 |
148 | ## Contribute
149 |
150 | Contributions in the form of GitHub pull requests are welcome. Please adhere to the following guidelines:
151 | - Before embarking on a significant change, please create an issue to discuss the proposed change and ensure that it is likely to be merged.
152 | - Follow the coding conventions used throughout the project. Many conventions are enforced using eslint and pmd. Run `npm t` to make sure of that.
153 | - Any contributions must be licensed under the MIT license.
154 |
155 | ## License
156 |
157 | [MIT](./LICENSE)
158 |
--------------------------------------------------------------------------------
/src/ios/ShareExtension/ShareViewController.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "ShareViewController.h"
4 | #import
5 |
6 | @interface ShareViewController : SLComposeServiceViewController {
7 | NSFileManager *_fileManager;
8 | NSUserDefaults *_userDefaults;
9 | int _verbosityLevel;
10 | }
11 | @property (nonatomic,retain) NSFileManager *fileManager;
12 | @property (nonatomic,retain) NSUserDefaults *userDefaults;
13 | @property (nonatomic) int verbosityLevel;
14 | @end
15 |
16 | /*
17 | * Constants
18 | */
19 |
20 | #define VERBOSITY_DEBUG 0
21 | #define VERBOSITY_INFO 10
22 | #define VERBOSITY_WARN 20
23 | #define VERBOSITY_ERROR 30
24 |
25 | @implementation ShareViewController
26 |
27 | @synthesize fileManager = _fileManager;
28 | @synthesize userDefaults = _userDefaults;
29 | @synthesize verbosityLevel = _verbosityLevel;
30 |
31 | - (void) log:(int)level message:(NSString*)message {
32 | if (level >= self.verbosityLevel) {
33 | NSLog(@"[ShareViewController.m]%@", message);
34 | }
35 | }
36 |
37 | - (void) debug:(NSString*)message { [self log:VERBOSITY_DEBUG message:message]; }
38 | - (void) info:(NSString*)message { [self log:VERBOSITY_INFO message:message]; }
39 | - (void) warn:(NSString*)message { [self log:VERBOSITY_WARN message:message]; }
40 | - (void) error:(NSString*)message { [self log:VERBOSITY_ERROR message:message]; }
41 |
42 | - (void) setup {
43 | [self debug:@"[setup]"];
44 |
45 | self.fileManager = [NSFileManager defaultManager];
46 | self.userDefaults = [[NSUserDefaults alloc] initWithSuiteName:SHAREEXT_GROUP_IDENTIFIER];
47 | self.verbosityLevel = [self.userDefaults integerForKey:@"verbosityLevel"];
48 | }
49 |
50 | - (BOOL) isContentValid {
51 | return YES;
52 | }
53 |
54 | - (void) openURL:(nonnull NSURL *)url {
55 | SEL selector = NSSelectorFromString(@"openURL:options:completionHandler:");
56 |
57 | UIResponder* responder = self;
58 | while ((responder = [responder nextResponder]) != nil) {
59 |
60 | if([responder respondsToSelector:selector] == true) {
61 | NSMethodSignature *methodSignature = [responder methodSignatureForSelector:selector];
62 | NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
63 |
64 | void (^completion)(BOOL success) = ^void(BOOL success) {};
65 |
66 | if (@available(iOS 13.0, *)) {
67 | UISceneOpenExternalURLOptions * options = [[UISceneOpenExternalURLOptions alloc] init];
68 | options.universalLinksOnly = false;
69 |
70 | [invocation setTarget: responder];
71 | [invocation setSelector: selector];
72 | [invocation setArgument: &url atIndex: 2];
73 | [invocation setArgument: &options atIndex:3];
74 | [invocation setArgument: &completion atIndex: 4];
75 | [invocation invoke];
76 | break;
77 | } else {
78 | NSDictionary *options = [NSDictionary dictionary];
79 |
80 | [invocation setTarget: responder];
81 | [invocation setSelector: selector];
82 | [invocation setArgument: &url atIndex: 2];
83 | [invocation setArgument: &options atIndex:3];
84 | [invocation setArgument: &completion atIndex: 4];
85 | [invocation invoke];
86 | break;
87 | }
88 | }
89 | }
90 | }
91 |
92 | - (void) viewWillAppear:(BOOL)animated {
93 | [super viewWillDisappear:animated];
94 | self.view.hidden = YES;
95 | }
96 |
97 | - (void) viewDidAppear:(BOOL)animated {
98 | [self.view endEditing:YES];
99 |
100 | [self setup];
101 | [self debug:@"[viewDidAppear]"];
102 |
103 | __block int remainingAttachments = ((NSExtensionItem*)self.extensionContext.inputItems[0]).attachments.count;
104 | __block NSMutableArray *items = [[NSMutableArray alloc] init];
105 | __block NSDictionary *results = @{
106 | @"text" : self.contentText,
107 | @"items": items,
108 | };
109 |
110 | for (NSItemProvider* itemProvider in ((NSExtensionItem*)self.extensionContext.inputItems[0]).attachments) {
111 | [self debug:[NSString stringWithFormat:@"item provider registered indentifiers = %@", itemProvider.registeredTypeIdentifiers]];
112 |
113 | // MOVIE
114 | if ([itemProvider hasItemConformingToTypeIdentifier:@"public.movie"]) {
115 | [self debug:[NSString stringWithFormat:@"item provider = %@", itemProvider]];
116 |
117 | [itemProvider loadItemForTypeIdentifier:@"public.movie" options:nil completionHandler: ^(NSURL* item, NSError *error) {
118 | NSString *fileUrl = [self saveFileToAppGroupFolder:item];
119 | NSString *suggestedName = item.lastPathComponent;
120 |
121 | NSString *uti = @"public.movie";
122 | NSString *registeredType = nil;
123 |
124 | if ([itemProvider.registeredTypeIdentifiers count] > 0) {
125 | registeredType = itemProvider.registeredTypeIdentifiers[0];
126 | } else {
127 | registeredType = uti;
128 | }
129 |
130 | NSString *mimeType = [self mimeTypeFromUti:registeredType];
131 | NSDictionary *dict = @{
132 | @"text" : self.contentText,
133 | @"fileUrl" : fileUrl,
134 | @"uti" : uti,
135 | @"utis" : itemProvider.registeredTypeIdentifiers,
136 | @"name" : suggestedName,
137 | @"type" : mimeType
138 | };
139 |
140 | [items addObject:dict];
141 |
142 | --remainingAttachments;
143 | if (remainingAttachments == 0) {
144 | [self sendResults:results];
145 | }
146 | }];
147 | }
148 |
149 | // IMAGE
150 | else if ([itemProvider hasItemConformingToTypeIdentifier:@"public.image"]) {
151 | [self debug:[NSString stringWithFormat:@"item provider = %@", itemProvider]];
152 |
153 | [itemProvider loadItemForTypeIdentifier:@"public.image" options:nil completionHandler: ^(id data, NSError *error) {
154 | NSString *fileUrl = @"";
155 | NSString *suggestedName = @"";
156 | NSString *uti = @"public.image";
157 | NSString *mimeType = @"";
158 |
159 | if([(NSObject*)data isKindOfClass:[UIImage class]]) {
160 | UIImage* image = (UIImage*) data;
161 |
162 | if (image != nil) {
163 | NSURL *targetUrl = [[self.fileManager containerURLForSecurityApplicationGroupIdentifier:SHAREEXT_GROUP_IDENTIFIER] URLByAppendingPathComponent:@"share.png"];
164 | NSData *binaryImageData = UIImagePNGRepresentation(image);
165 |
166 | [binaryImageData writeToFile:[targetUrl.absoluteString substringFromIndex:6] atomically:YES];
167 | fileUrl = targetUrl.absoluteString;
168 | suggestedName = targetUrl.lastPathComponent;
169 | mimeType = @"image/png";
170 | }
171 | }
172 |
173 | if ([(NSObject*)data isKindOfClass:[NSURL class]]) {
174 | NSURL* item = (NSURL*) data;
175 | NSString *registeredType = nil;
176 |
177 | fileUrl = [self saveFileToAppGroupFolder:item];
178 | suggestedName = item.lastPathComponent;
179 |
180 | if ([itemProvider.registeredTypeIdentifiers count] > 0) {
181 | registeredType = itemProvider.registeredTypeIdentifiers[0];
182 | } else {
183 | registeredType = uti;
184 | }
185 |
186 | mimeType = [self mimeTypeFromUti:registeredType];
187 | }
188 |
189 | NSDictionary *dict = @{
190 | @"text" : self.contentText,
191 | @"fileUrl" : fileUrl,
192 | @"uti" : uti,
193 | @"utis" : itemProvider.registeredTypeIdentifiers,
194 | @"name" : suggestedName,
195 | @"type" : mimeType
196 | };
197 |
198 | [items addObject:dict];
199 |
200 | --remainingAttachments;
201 | if (remainingAttachments == 0) {
202 | [self sendResults:results];
203 | }
204 | }];
205 | }
206 |
207 | // FILE
208 | else if ([itemProvider hasItemConformingToTypeIdentifier:@"public.file-url"]) {
209 | [self debug:[NSString stringWithFormat:@"item provider = %@", itemProvider]];
210 |
211 | [itemProvider loadItemForTypeIdentifier:@"public.file-url" options:nil completionHandler: ^(NSURL* item, NSError *error) {
212 | NSString *fileUrl = [self saveFileToAppGroupFolder:item];
213 | NSString *suggestedName = item.lastPathComponent;
214 |
215 | NSString *uti = @"public.file-url";
216 | NSString *registeredType = nil;
217 |
218 | if ([itemProvider.registeredTypeIdentifiers count] > 0) {
219 | registeredType = itemProvider.registeredTypeIdentifiers[0];
220 | } else {
221 | registeredType = uti;
222 | }
223 |
224 | NSString *mimeType = [self mimeTypeFromUti:registeredType];
225 | NSDictionary *dict = @{
226 | @"text" : self.contentText,
227 | @"fileUrl" : fileUrl,
228 | @"uti" : uti,
229 | @"utis" : itemProvider.registeredTypeIdentifiers,
230 | @"name" : suggestedName,
231 | @"type" : mimeType
232 | };
233 |
234 | [items addObject:dict];
235 |
236 | --remainingAttachments;
237 | if (remainingAttachments == 0) {
238 | [self sendResults:results];
239 | }
240 | }];
241 | }
242 |
243 | // URL
244 | else if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) {
245 | [self debug:[NSString stringWithFormat:@"item provider = %@", itemProvider]];
246 |
247 | [itemProvider loadItemForTypeIdentifier:@"public.url" options:nil completionHandler: ^(NSURL* item, NSError *error) {
248 | [self debug:[NSString stringWithFormat:@"public.url = %@", item]];
249 |
250 | NSString *uti = @"public.url";
251 | NSDictionary *dict = @{
252 | @"data" : item.absoluteString,
253 | @"uti": uti,
254 | @"utis": itemProvider.registeredTypeIdentifiers,
255 | @"name": @"",
256 | @"type": [self mimeTypeFromUti:uti],
257 | };
258 |
259 | [items addObject:dict];
260 |
261 | --remainingAttachments;
262 | if (remainingAttachments == 0) {
263 | [self sendResults:results];
264 | }
265 | }];
266 | }
267 |
268 | // TEXT
269 | else if ([itemProvider hasItemConformingToTypeIdentifier:@"public.text"]) {
270 | [self debug:[NSString stringWithFormat:@"item provider = %@", itemProvider]];
271 |
272 | [itemProvider loadItemForTypeIdentifier:@"public.text" options:nil completionHandler: ^(NSString* item, NSError *error) {
273 | [self debug:[NSString stringWithFormat:@"public.text = %@", item]];
274 |
275 | NSString *uti = @"public.text";
276 | NSDictionary *dict = @{
277 | @"text" : self.contentText,
278 | @"data" : item,
279 | @"uti": uti,
280 | @"utis": itemProvider.registeredTypeIdentifiers,
281 | @"name": @"",
282 | @"type": [self mimeTypeFromUti:uti],
283 | };
284 |
285 | [items addObject:dict];
286 |
287 | --remainingAttachments;
288 | if (remainingAttachments == 0) {
289 | [self sendResults:results];
290 | }
291 | }];
292 | }
293 |
294 | // Unhandled data type
295 | else {
296 | --remainingAttachments;
297 | if (remainingAttachments == 0) {
298 | [self sendResults:results];
299 | }
300 | }
301 | }
302 | }
303 |
304 | - (void) sendResults: (NSDictionary*)results {
305 | [self.userDefaults setObject:results forKey:@"shared"];
306 | [self.userDefaults synchronize];
307 |
308 | // Emit a URL that opens the cordova app
309 | NSString *url = [NSString stringWithFormat:@"%@://shared", SHAREEXT_URL_SCHEME];
310 | [self openURL:[NSURL URLWithString:url]];
311 |
312 | // Shut down the extension
313 | [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
314 | }
315 |
316 | - (void) didSelectPost {
317 | [self debug:@"[didSelectPost]"];
318 | }
319 |
320 | - (NSArray*) configurationItems {
321 | // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
322 | return @[];
323 | }
324 |
325 | - (NSString *) mimeTypeFromUti: (NSString*)uti {
326 | if (uti == nil) { return nil; }
327 |
328 | CFStringRef cret = UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)uti, kUTTagClassMIMEType);
329 | NSString *ret = (__bridge_transfer NSString *)cret;
330 |
331 | return ret == nil ? uti : ret;
332 | }
333 |
334 | - (NSString *) saveFileToAppGroupFolder: (NSURL*)url {
335 | NSURL *targetUrl = [[self.fileManager containerURLForSecurityApplicationGroupIdentifier:SHAREEXT_GROUP_IDENTIFIER] URLByAppendingPathComponent:url.lastPathComponent];
336 | [self.fileManager removeItemAtURL:targetUrl error:nil];
337 | [self.fileManager copyItemAtURL:url toURL:targetUrl error:nil];
338 |
339 | return targetUrl.absoluteString;
340 | }
341 |
342 | @end
343 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | abbrev@1:
6 | version "1.1.1"
7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
8 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
9 |
10 | acorn-jsx@^3.0.0:
11 | version "3.0.1"
12 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
13 | integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
14 | dependencies:
15 | acorn "^3.0.4"
16 |
17 | acorn@^3.0.4:
18 | version "3.3.0"
19 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
20 | integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
21 |
22 | acorn@^5.5.0:
23 | version "5.7.3"
24 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
25 | integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
26 |
27 | ajv-keywords@^2.1.0:
28 | version "2.1.1"
29 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
30 | integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
31 |
32 | ajv@^5.2.3, ajv@^5.3.0:
33 | version "5.5.2"
34 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
35 | integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
36 | dependencies:
37 | co "^4.6.0"
38 | fast-deep-equal "^1.0.0"
39 | fast-json-stable-stringify "^2.0.0"
40 | json-schema-traverse "^0.3.0"
41 |
42 | ansi-escapes@^3.0.0:
43 | version "3.2.0"
44 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
45 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
46 |
47 | ansi-regex@^2.0.0:
48 | version "2.1.1"
49 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
50 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
51 |
52 | ansi-regex@^3.0.0:
53 | version "3.0.0"
54 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
55 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
56 |
57 | ansi-styles@^2.2.1:
58 | version "2.2.1"
59 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
60 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
61 |
62 | ansi-styles@^3.2.1:
63 | version "3.2.1"
64 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
65 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
66 | dependencies:
67 | color-convert "^1.9.0"
68 |
69 | anymatch@^2.0.0:
70 | version "2.0.0"
71 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
72 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
73 | dependencies:
74 | micromatch "^3.1.4"
75 | normalize-path "^2.1.1"
76 |
77 | aproba@^1.0.3:
78 | version "1.2.0"
79 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
80 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
81 |
82 | are-we-there-yet@~1.1.2:
83 | version "1.1.5"
84 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
85 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
86 | dependencies:
87 | delegates "^1.0.0"
88 | readable-stream "^2.0.6"
89 |
90 | argparse@^1.0.7:
91 | version "1.0.10"
92 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
93 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
94 | dependencies:
95 | sprintf-js "~1.0.2"
96 |
97 | arr-diff@^4.0.0:
98 | version "4.0.0"
99 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
100 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
101 |
102 | arr-flatten@^1.1.0:
103 | version "1.1.0"
104 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
105 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
106 |
107 | arr-union@^3.1.0:
108 | version "3.1.0"
109 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
110 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
111 |
112 | array-unique@^0.3.2:
113 | version "0.3.2"
114 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
115 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
116 |
117 | assign-symbols@^1.0.0:
118 | version "1.0.0"
119 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
120 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
121 |
122 | async-each@^1.0.1:
123 | version "1.0.2"
124 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735"
125 | integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==
126 |
127 | atob@^2.1.1:
128 | version "2.1.2"
129 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
130 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
131 |
132 | babel-code-frame@^6.22.0:
133 | version "6.26.0"
134 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
135 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
136 | dependencies:
137 | chalk "^1.1.3"
138 | esutils "^2.0.2"
139 | js-tokens "^3.0.2"
140 |
141 | babel-polyfill@^6.20.0:
142 | version "6.26.0"
143 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
144 | integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=
145 | dependencies:
146 | babel-runtime "^6.26.0"
147 | core-js "^2.5.0"
148 | regenerator-runtime "^0.10.5"
149 |
150 | babel-runtime@^6.26.0:
151 | version "6.26.0"
152 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
153 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
154 | dependencies:
155 | core-js "^2.4.0"
156 | regenerator-runtime "^0.11.0"
157 |
158 | balanced-match@^1.0.0:
159 | version "1.0.0"
160 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
161 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
162 |
163 | base64-js@1.2.0:
164 | version "1.2.0"
165 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
166 | integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
167 |
168 | base64-js@^1.2.3:
169 | version "1.3.0"
170 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
171 | integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
172 |
173 | base@^0.11.1:
174 | version "0.11.2"
175 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
176 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
177 | dependencies:
178 | cache-base "^1.0.1"
179 | class-utils "^0.3.5"
180 | component-emitter "^1.2.1"
181 | define-property "^1.0.0"
182 | isobject "^3.0.1"
183 | mixin-deep "^1.2.0"
184 | pascalcase "^0.1.1"
185 |
186 | big-integer@^1.6.7:
187 | version "1.6.42"
188 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.42.tgz#91623ae5ceeff9a47416c56c9440a66f12f534f1"
189 | integrity sha512-3UQFKcRMx+5Z+IK5vYTMYK2jzLRJkt+XqyDdacgWgtMjjuifKpKTFneJLEgeBElOE2/lXZ1LcMcb5s8pwG2U8Q==
190 |
191 | binary-extensions@^1.0.0:
192 | version "1.13.0"
193 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1"
194 | integrity sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==
195 |
196 | bluebird@^3.5.1:
197 | version "3.5.3"
198 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
199 | integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
200 |
201 | bplist-creator@0.0.7:
202 | version "0.0.7"
203 | resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45"
204 | integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=
205 | dependencies:
206 | stream-buffers "~2.2.0"
207 |
208 | bplist-parser@0.1.1:
209 | version "0.1.1"
210 | resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6"
211 | integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=
212 | dependencies:
213 | big-integer "^1.6.7"
214 |
215 | brace-expansion@^1.1.7:
216 | version "1.1.11"
217 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
218 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
219 | dependencies:
220 | balanced-match "^1.0.0"
221 | concat-map "0.0.1"
222 |
223 | braces@^2.3.1, braces@^2.3.2:
224 | version "2.3.2"
225 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
226 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
227 | dependencies:
228 | arr-flatten "^1.1.0"
229 | array-unique "^0.3.2"
230 | extend-shallow "^2.0.1"
231 | fill-range "^4.0.0"
232 | isobject "^3.0.1"
233 | repeat-element "^1.1.2"
234 | snapdragon "^0.8.1"
235 | snapdragon-node "^2.0.1"
236 | split-string "^3.0.2"
237 | to-regex "^3.0.1"
238 |
239 | browser-stdout@1.3.0:
240 | version "1.3.0"
241 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
242 | integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
243 |
244 | buffer-from@^1.0.0:
245 | version "1.1.1"
246 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
247 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
248 |
249 | cache-base@^1.0.1:
250 | version "1.0.1"
251 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
252 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
253 | dependencies:
254 | collection-visit "^1.0.0"
255 | component-emitter "^1.2.1"
256 | get-value "^2.0.6"
257 | has-value "^1.0.0"
258 | isobject "^3.0.1"
259 | set-value "^2.0.0"
260 | to-object-path "^0.3.0"
261 | union-value "^1.0.0"
262 | unset-value "^1.0.0"
263 |
264 | caller-path@^0.1.0:
265 | version "0.1.0"
266 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
267 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
268 | dependencies:
269 | callsites "^0.2.0"
270 |
271 | callsites@^0.2.0:
272 | version "0.2.0"
273 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
274 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
275 |
276 | chalk@^1.1.3:
277 | version "1.1.3"
278 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
279 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
280 | dependencies:
281 | ansi-styles "^2.2.1"
282 | escape-string-regexp "^1.0.2"
283 | has-ansi "^2.0.0"
284 | strip-ansi "^3.0.0"
285 | supports-color "^2.0.0"
286 |
287 | chalk@^2.0.0, chalk@^2.1.0:
288 | version "2.4.2"
289 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
290 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
291 | dependencies:
292 | ansi-styles "^3.2.1"
293 | escape-string-regexp "^1.0.5"
294 | supports-color "^5.3.0"
295 |
296 | chardet@^0.4.0:
297 | version "0.4.2"
298 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
299 | integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
300 |
301 | chokidar@^2.0.0:
302 | version "2.1.2"
303 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058"
304 | integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==
305 | dependencies:
306 | anymatch "^2.0.0"
307 | async-each "^1.0.1"
308 | braces "^2.3.2"
309 | glob-parent "^3.1.0"
310 | inherits "^2.0.3"
311 | is-binary-path "^1.0.0"
312 | is-glob "^4.0.0"
313 | normalize-path "^3.0.0"
314 | path-is-absolute "^1.0.0"
315 | readdirp "^2.2.1"
316 | upath "^1.1.0"
317 | optionalDependencies:
318 | fsevents "^1.2.7"
319 |
320 | chownr@^1.1.1:
321 | version "1.1.1"
322 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
323 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
324 |
325 | circular-json@^0.3.1:
326 | version "0.3.3"
327 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
328 | integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
329 |
330 | class-utils@^0.3.5:
331 | version "0.3.6"
332 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
333 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
334 | dependencies:
335 | arr-union "^3.1.0"
336 | define-property "^0.2.5"
337 | isobject "^3.0.0"
338 | static-extend "^0.1.1"
339 |
340 | cli-cursor@^2.1.0:
341 | version "2.1.0"
342 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
343 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
344 | dependencies:
345 | restore-cursor "^2.0.0"
346 |
347 | cli-width@^2.0.0:
348 | version "2.2.0"
349 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
350 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
351 |
352 | co@^4.6.0:
353 | version "4.6.0"
354 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
355 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
356 |
357 | code-point-at@^1.0.0:
358 | version "1.1.0"
359 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
360 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
361 |
362 | collection-visit@^1.0.0:
363 | version "1.0.0"
364 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
365 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
366 | dependencies:
367 | map-visit "^1.0.0"
368 | object-visit "^1.0.0"
369 |
370 | color-convert@^1.9.0:
371 | version "1.9.3"
372 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
373 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
374 | dependencies:
375 | color-name "1.1.3"
376 |
377 | color-name@1.1.3:
378 | version "1.1.3"
379 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
380 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
381 |
382 | commander@2.9.0:
383 | version "2.9.0"
384 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
385 | integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
386 | dependencies:
387 | graceful-readlink ">= 1.0.0"
388 |
389 | component-emitter@^1.2.1:
390 | version "1.2.1"
391 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
392 | integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
393 |
394 | concat-map@0.0.1:
395 | version "0.0.1"
396 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
397 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
398 |
399 | concat-stream@^1.6.0:
400 | version "1.6.2"
401 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
402 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
403 | dependencies:
404 | buffer-from "^1.0.0"
405 | inherits "^2.0.3"
406 | readable-stream "^2.2.2"
407 | typedarray "^0.0.6"
408 |
409 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
410 | version "1.1.0"
411 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
412 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
413 |
414 | contains-path@^0.1.0:
415 | version "0.1.0"
416 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
417 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
418 |
419 | copy-descriptor@^0.1.0:
420 | version "0.1.1"
421 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
422 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
423 |
424 | core-js@^2.4.0, core-js@^2.5.0:
425 | version "2.6.5"
426 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
427 | integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
428 |
429 | core-util-is@~1.0.0:
430 | version "1.0.2"
431 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
432 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
433 |
434 | cross-spawn@^5.1.0:
435 | version "5.1.0"
436 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
437 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
438 | dependencies:
439 | lru-cache "^4.0.1"
440 | shebang-command "^1.2.0"
441 | which "^1.2.9"
442 |
443 | debug@2.6.8:
444 | version "2.6.8"
445 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
446 | integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=
447 | dependencies:
448 | ms "2.0.0"
449 |
450 | debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
451 | version "2.6.9"
452 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
453 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
454 | dependencies:
455 | ms "2.0.0"
456 |
457 | debug@^3.0.1, debug@^3.1.0:
458 | version "3.2.6"
459 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
460 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
461 | dependencies:
462 | ms "^2.1.1"
463 |
464 | decode-uri-component@^0.2.0:
465 | version "0.2.0"
466 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
467 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
468 |
469 | deep-extend@^0.6.0:
470 | version "0.6.0"
471 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
472 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
473 |
474 | deep-is@~0.1.3:
475 | version "0.1.3"
476 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
477 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
478 |
479 | define-property@^0.2.5:
480 | version "0.2.5"
481 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
482 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
483 | dependencies:
484 | is-descriptor "^0.1.0"
485 |
486 | define-property@^1.0.0:
487 | version "1.0.0"
488 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
489 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
490 | dependencies:
491 | is-descriptor "^1.0.0"
492 |
493 | define-property@^2.0.2:
494 | version "2.0.2"
495 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
496 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
497 | dependencies:
498 | is-descriptor "^1.0.2"
499 | isobject "^3.0.1"
500 |
501 | delegates@^1.0.0:
502 | version "1.0.0"
503 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
504 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
505 |
506 | detect-libc@^1.0.2:
507 | version "1.0.3"
508 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
509 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
510 |
511 | diff@3.2.0:
512 | version "3.2.0"
513 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
514 | integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k=
515 |
516 | doctrine@1.5.0:
517 | version "1.5.0"
518 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
519 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
520 | dependencies:
521 | esutils "^2.0.2"
522 | isarray "^1.0.0"
523 |
524 | doctrine@^2.1.0:
525 | version "2.1.0"
526 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
527 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
528 | dependencies:
529 | esutils "^2.0.2"
530 |
531 | error-ex@^1.2.0:
532 | version "1.3.2"
533 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
534 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
535 | dependencies:
536 | is-arrayish "^0.2.1"
537 |
538 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
539 | version "1.0.5"
540 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
541 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
542 |
543 | eslint-config-google@^0.9.1:
544 | version "0.9.1"
545 | resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.9.1.tgz#83353c3dba05f72bb123169a4094f4ff120391eb"
546 | integrity sha512-5A83D+lH0PA81QMESKbLJd/a3ic8tPZtwUmqNrxMRo54nfFaUvtt89q/+icQ+fd66c2xQHn0KyFkzJDoAUfpZA==
547 |
548 | eslint-config-standard@^10.2.1:
549 | version "10.2.1"
550 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591"
551 | integrity sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=
552 |
553 | eslint-import-resolver-node@^0.3.2:
554 | version "0.3.2"
555 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
556 | integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
557 | dependencies:
558 | debug "^2.6.9"
559 | resolve "^1.5.0"
560 |
561 | eslint-module-utils@^2.3.0:
562 | version "2.3.0"
563 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49"
564 | integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==
565 | dependencies:
566 | debug "^2.6.8"
567 | pkg-dir "^2.0.0"
568 |
569 | eslint-plugin-import@^2.7.0:
570 | version "2.16.0"
571 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f"
572 | integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==
573 | dependencies:
574 | contains-path "^0.1.0"
575 | debug "^2.6.9"
576 | doctrine "1.5.0"
577 | eslint-import-resolver-node "^0.3.2"
578 | eslint-module-utils "^2.3.0"
579 | has "^1.0.3"
580 | lodash "^4.17.11"
581 | minimatch "^3.0.4"
582 | read-pkg-up "^2.0.0"
583 | resolve "^1.9.0"
584 |
585 | eslint-plugin-mocha@^4.11.0:
586 | version "4.12.1"
587 | resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-4.12.1.tgz#dbacc543b178b4536ec5b19d7f8e8864d85404bf"
588 | integrity sha512-hxWtYHvLA0p/PKymRfDYh9Mxt5dYkg2Goy1vZDarTEEYfELP9ksga7kKG1NUKSQy27C8Qjc7YrSWTLUhOEOksA==
589 | dependencies:
590 | ramda "^0.25.0"
591 |
592 | eslint-plugin-node@^5.1.1:
593 | version "5.2.1"
594 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29"
595 | integrity sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==
596 | dependencies:
597 | ignore "^3.3.6"
598 | minimatch "^3.0.4"
599 | resolve "^1.3.3"
600 | semver "5.3.0"
601 |
602 | eslint-plugin-promise@^3.5.0:
603 | version "3.8.0"
604 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz#65ebf27a845e3c1e9d6f6a5622ddd3801694b621"
605 | integrity sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==
606 |
607 | eslint-plugin-standard@^3.0.1:
608 | version "3.1.0"
609 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz#2a9e21259ba4c47c02d53b2d0c9135d4b1022d47"
610 | integrity sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==
611 |
612 | eslint-scope@^3.7.1:
613 | version "3.7.3"
614 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
615 | integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
616 | dependencies:
617 | esrecurse "^4.1.0"
618 | estraverse "^4.1.1"
619 |
620 | eslint-visitor-keys@^1.0.0:
621 | version "1.0.0"
622 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
623 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
624 |
625 | eslint-watch@^3.1.2:
626 | version "3.1.5"
627 | resolved "https://registry.yarnpkg.com/eslint-watch/-/eslint-watch-3.1.5.tgz#52072135b45f07230b5e4df67354804eb8d6f2c8"
628 | integrity sha512-6iEMRwo6RUpSaYyU7547qWQbgUKSYtkn4eGId/hZJvi+gMnRVeNfIzv/HAOPUmH6y53p1Ks9oNvWm/xZh4RPGQ==
629 | dependencies:
630 | babel-polyfill "^6.20.0"
631 | bluebird "^3.5.1"
632 | chalk "^2.1.0"
633 | chokidar "^2.0.0"
634 | debug "^3.0.1"
635 | keypress "^0.2.1"
636 | lodash "^4.17.4"
637 | optionator "^0.8.2"
638 | source-map-support "^0.5.3"
639 | strip-ansi "^4.0.0"
640 | text-table "^0.2.0"
641 | unicons "0.0.3"
642 |
643 | eslint@^4.7.2:
644 | version "4.19.1"
645 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
646 | integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
647 | dependencies:
648 | ajv "^5.3.0"
649 | babel-code-frame "^6.22.0"
650 | chalk "^2.1.0"
651 | concat-stream "^1.6.0"
652 | cross-spawn "^5.1.0"
653 | debug "^3.1.0"
654 | doctrine "^2.1.0"
655 | eslint-scope "^3.7.1"
656 | eslint-visitor-keys "^1.0.0"
657 | espree "^3.5.4"
658 | esquery "^1.0.0"
659 | esutils "^2.0.2"
660 | file-entry-cache "^2.0.0"
661 | functional-red-black-tree "^1.0.1"
662 | glob "^7.1.2"
663 | globals "^11.0.1"
664 | ignore "^3.3.3"
665 | imurmurhash "^0.1.4"
666 | inquirer "^3.0.6"
667 | is-resolvable "^1.0.0"
668 | js-yaml "^3.9.1"
669 | json-stable-stringify-without-jsonify "^1.0.1"
670 | levn "^0.3.0"
671 | lodash "^4.17.4"
672 | minimatch "^3.0.2"
673 | mkdirp "^0.5.1"
674 | natural-compare "^1.4.0"
675 | optionator "^0.8.2"
676 | path-is-inside "^1.0.2"
677 | pluralize "^7.0.0"
678 | progress "^2.0.0"
679 | regexpp "^1.0.1"
680 | require-uncached "^1.0.3"
681 | semver "^5.3.0"
682 | strip-ansi "^4.0.0"
683 | strip-json-comments "~2.0.1"
684 | table "4.0.2"
685 | text-table "~0.2.0"
686 |
687 | espree@^3.5.4:
688 | version "3.5.4"
689 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
690 | integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
691 | dependencies:
692 | acorn "^5.5.0"
693 | acorn-jsx "^3.0.0"
694 |
695 | esprima@^4.0.0:
696 | version "4.0.1"
697 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
698 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
699 |
700 | esquery@^1.0.0:
701 | version "1.0.1"
702 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
703 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
704 | dependencies:
705 | estraverse "^4.0.0"
706 |
707 | esrecurse@^4.1.0:
708 | version "4.2.1"
709 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
710 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
711 | dependencies:
712 | estraverse "^4.1.0"
713 |
714 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
715 | version "4.2.0"
716 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
717 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
718 |
719 | esutils@^2.0.2:
720 | version "2.0.2"
721 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
722 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
723 |
724 | expand-brackets@^2.1.4:
725 | version "2.1.4"
726 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
727 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
728 | dependencies:
729 | debug "^2.3.3"
730 | define-property "^0.2.5"
731 | extend-shallow "^2.0.1"
732 | posix-character-classes "^0.1.0"
733 | regex-not "^1.0.0"
734 | snapdragon "^0.8.1"
735 | to-regex "^3.0.1"
736 |
737 | expect.js@^0.3.1:
738 | version "0.3.1"
739 | resolved "https://registry.yarnpkg.com/expect.js/-/expect.js-0.3.1.tgz#b0a59a0d2eff5437544ebf0ceaa6015841d09b5b"
740 | integrity sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=
741 |
742 | extend-shallow@^2.0.1:
743 | version "2.0.1"
744 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
745 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
746 | dependencies:
747 | is-extendable "^0.1.0"
748 |
749 | extend-shallow@^3.0.0, extend-shallow@^3.0.2:
750 | version "3.0.2"
751 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
752 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
753 | dependencies:
754 | assign-symbols "^1.0.0"
755 | is-extendable "^1.0.1"
756 |
757 | external-editor@^2.0.4:
758 | version "2.2.0"
759 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
760 | integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
761 | dependencies:
762 | chardet "^0.4.0"
763 | iconv-lite "^0.4.17"
764 | tmp "^0.0.33"
765 |
766 | extglob@^2.0.4:
767 | version "2.0.4"
768 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
769 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
770 | dependencies:
771 | array-unique "^0.3.2"
772 | define-property "^1.0.0"
773 | expand-brackets "^2.1.4"
774 | extend-shallow "^2.0.1"
775 | fragment-cache "^0.2.1"
776 | regex-not "^1.0.0"
777 | snapdragon "^0.8.1"
778 | to-regex "^3.0.1"
779 |
780 | fast-deep-equal@^1.0.0:
781 | version "1.1.0"
782 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
783 | integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
784 |
785 | fast-json-stable-stringify@^2.0.0:
786 | version "2.0.0"
787 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
788 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
789 |
790 | fast-levenshtein@~2.0.4:
791 | version "2.0.6"
792 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
793 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
794 |
795 | figures@^2.0.0:
796 | version "2.0.0"
797 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
798 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
799 | dependencies:
800 | escape-string-regexp "^1.0.5"
801 |
802 | file-entry-cache@^2.0.0:
803 | version "2.0.0"
804 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
805 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
806 | dependencies:
807 | flat-cache "^1.2.1"
808 | object-assign "^4.0.1"
809 |
810 | file-match@^1.0.1:
811 | version "1.0.2"
812 | resolved "https://registry.yarnpkg.com/file-match/-/file-match-1.0.2.tgz#c9cad265d2c8adf3a81475b0df475859069faef7"
813 | integrity sha1-ycrSZdLIrfOoFHWw30dYWQafrvc=
814 | dependencies:
815 | utils-extend "^1.0.6"
816 |
817 | file-system@^2.2.2:
818 | version "2.2.2"
819 | resolved "https://registry.yarnpkg.com/file-system/-/file-system-2.2.2.tgz#7d65833e3a2347dcd956a813c677153ed3edd987"
820 | integrity sha1-fWWDPjojR9zZVqgTxncVPtPt2Yc=
821 | dependencies:
822 | file-match "^1.0.1"
823 | utils-extend "^1.0.4"
824 |
825 | fill-range@^4.0.0:
826 | version "4.0.0"
827 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
828 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
829 | dependencies:
830 | extend-shallow "^2.0.1"
831 | is-number "^3.0.0"
832 | repeat-string "^1.6.1"
833 | to-regex-range "^2.1.0"
834 |
835 | find-up@^2.0.0, find-up@^2.1.0:
836 | version "2.1.0"
837 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
838 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
839 | dependencies:
840 | locate-path "^2.0.0"
841 |
842 | flat-cache@^1.2.1:
843 | version "1.3.4"
844 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
845 | integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
846 | dependencies:
847 | circular-json "^0.3.1"
848 | graceful-fs "^4.1.2"
849 | rimraf "~2.6.2"
850 | write "^0.2.1"
851 |
852 | for-in@^1.0.2:
853 | version "1.0.2"
854 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
855 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
856 |
857 | fragment-cache@^0.2.1:
858 | version "0.2.1"
859 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
860 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
861 | dependencies:
862 | map-cache "^0.2.2"
863 |
864 | fs-minipass@^1.2.5:
865 | version "1.2.5"
866 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
867 | integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
868 | dependencies:
869 | minipass "^2.2.1"
870 |
871 | fs.realpath@^1.0.0:
872 | version "1.0.0"
873 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
874 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
875 |
876 | fsevents@^1.2.7:
877 | version "1.2.7"
878 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4"
879 | integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==
880 | dependencies:
881 | nan "^2.9.2"
882 | node-pre-gyp "^0.10.0"
883 |
884 | function-bind@^1.1.1:
885 | version "1.1.1"
886 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
887 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
888 |
889 | functional-red-black-tree@^1.0.1:
890 | version "1.0.1"
891 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
892 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
893 |
894 | gauge@~2.7.3:
895 | version "2.7.4"
896 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
897 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
898 | dependencies:
899 | aproba "^1.0.3"
900 | console-control-strings "^1.0.0"
901 | has-unicode "^2.0.0"
902 | object-assign "^4.1.0"
903 | signal-exit "^3.0.0"
904 | string-width "^1.0.1"
905 | strip-ansi "^3.0.1"
906 | wide-align "^1.1.0"
907 |
908 | get-value@^2.0.3, get-value@^2.0.6:
909 | version "2.0.6"
910 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
911 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
912 |
913 | glob-parent@^3.1.0:
914 | version "3.1.0"
915 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
916 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
917 | dependencies:
918 | is-glob "^3.1.0"
919 | path-dirname "^1.0.0"
920 |
921 | glob@7.1.1:
922 | version "7.1.1"
923 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
924 | integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
925 | dependencies:
926 | fs.realpath "^1.0.0"
927 | inflight "^1.0.4"
928 | inherits "2"
929 | minimatch "^3.0.2"
930 | once "^1.3.0"
931 | path-is-absolute "^1.0.0"
932 |
933 | glob@^7.1.2, glob@^7.1.3:
934 | version "7.1.3"
935 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
936 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
937 | dependencies:
938 | fs.realpath "^1.0.0"
939 | inflight "^1.0.4"
940 | inherits "2"
941 | minimatch "^3.0.4"
942 | once "^1.3.0"
943 | path-is-absolute "^1.0.0"
944 |
945 | globals@^11.0.1:
946 | version "11.11.0"
947 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
948 | integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
949 |
950 | graceful-fs@^4.1.11, graceful-fs@^4.1.2:
951 | version "4.1.15"
952 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
953 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
954 |
955 | "graceful-readlink@>= 1.0.0":
956 | version "1.0.1"
957 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
958 | integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
959 |
960 | growl@1.9.2:
961 | version "1.9.2"
962 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
963 | integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=
964 |
965 | has-ansi@^2.0.0:
966 | version "2.0.0"
967 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
968 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
969 | dependencies:
970 | ansi-regex "^2.0.0"
971 |
972 | has-flag@^1.0.0:
973 | version "1.0.0"
974 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
975 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
976 |
977 | has-flag@^3.0.0:
978 | version "3.0.0"
979 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
980 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
981 |
982 | has-unicode@^2.0.0:
983 | version "2.0.1"
984 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
985 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
986 |
987 | has-value@^0.3.1:
988 | version "0.3.1"
989 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
990 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
991 | dependencies:
992 | get-value "^2.0.3"
993 | has-values "^0.1.4"
994 | isobject "^2.0.0"
995 |
996 | has-value@^1.0.0:
997 | version "1.0.0"
998 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
999 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
1000 | dependencies:
1001 | get-value "^2.0.6"
1002 | has-values "^1.0.0"
1003 | isobject "^3.0.0"
1004 |
1005 | has-values@^0.1.4:
1006 | version "0.1.4"
1007 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
1008 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
1009 |
1010 | has-values@^1.0.0:
1011 | version "1.0.0"
1012 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
1013 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
1014 | dependencies:
1015 | is-number "^3.0.0"
1016 | kind-of "^4.0.0"
1017 |
1018 | has@^1.0.3:
1019 | version "1.0.3"
1020 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1021 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1022 | dependencies:
1023 | function-bind "^1.1.1"
1024 |
1025 | he@1.1.1:
1026 | version "1.1.1"
1027 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
1028 | integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
1029 |
1030 | hosted-git-info@^2.1.4:
1031 | version "2.7.1"
1032 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
1033 | integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
1034 |
1035 | iconv-lite@^0.4.17, iconv-lite@^0.4.4:
1036 | version "0.4.24"
1037 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1038 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1039 | dependencies:
1040 | safer-buffer ">= 2.1.2 < 3"
1041 |
1042 | ignore-walk@^3.0.1:
1043 | version "3.0.1"
1044 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
1045 | integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
1046 | dependencies:
1047 | minimatch "^3.0.4"
1048 |
1049 | ignore@^3.3.3, ignore@^3.3.6:
1050 | version "3.3.10"
1051 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
1052 | integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
1053 |
1054 | imurmurhash@^0.1.4:
1055 | version "0.1.4"
1056 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1057 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1058 |
1059 | inflight@^1.0.4:
1060 | version "1.0.6"
1061 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1062 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1063 | dependencies:
1064 | once "^1.3.0"
1065 | wrappy "1"
1066 |
1067 | inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.3:
1068 | version "2.0.3"
1069 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1070 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1071 |
1072 | ini@~1.3.0:
1073 | version "1.3.5"
1074 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
1075 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
1076 |
1077 | inquirer@^3.0.6:
1078 | version "3.3.0"
1079 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
1080 | integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
1081 | dependencies:
1082 | ansi-escapes "^3.0.0"
1083 | chalk "^2.0.0"
1084 | cli-cursor "^2.1.0"
1085 | cli-width "^2.0.0"
1086 | external-editor "^2.0.4"
1087 | figures "^2.0.0"
1088 | lodash "^4.3.0"
1089 | mute-stream "0.0.7"
1090 | run-async "^2.2.0"
1091 | rx-lite "^4.0.8"
1092 | rx-lite-aggregates "^4.0.8"
1093 | string-width "^2.1.0"
1094 | strip-ansi "^4.0.0"
1095 | through "^2.3.6"
1096 |
1097 | is-accessor-descriptor@^0.1.6:
1098 | version "0.1.6"
1099 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
1100 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
1101 | dependencies:
1102 | kind-of "^3.0.2"
1103 |
1104 | is-accessor-descriptor@^1.0.0:
1105 | version "1.0.0"
1106 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
1107 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
1108 | dependencies:
1109 | kind-of "^6.0.0"
1110 |
1111 | is-arrayish@^0.2.1:
1112 | version "0.2.1"
1113 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1114 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
1115 |
1116 | is-binary-path@^1.0.0:
1117 | version "1.0.1"
1118 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
1119 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
1120 | dependencies:
1121 | binary-extensions "^1.0.0"
1122 |
1123 | is-buffer@^1.1.5:
1124 | version "1.1.6"
1125 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
1126 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
1127 |
1128 | is-data-descriptor@^0.1.4:
1129 | version "0.1.4"
1130 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
1131 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
1132 | dependencies:
1133 | kind-of "^3.0.2"
1134 |
1135 | is-data-descriptor@^1.0.0:
1136 | version "1.0.0"
1137 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
1138 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
1139 | dependencies:
1140 | kind-of "^6.0.0"
1141 |
1142 | is-descriptor@^0.1.0:
1143 | version "0.1.6"
1144 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
1145 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
1146 | dependencies:
1147 | is-accessor-descriptor "^0.1.6"
1148 | is-data-descriptor "^0.1.4"
1149 | kind-of "^5.0.0"
1150 |
1151 | is-descriptor@^1.0.0, is-descriptor@^1.0.2:
1152 | version "1.0.2"
1153 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
1154 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
1155 | dependencies:
1156 | is-accessor-descriptor "^1.0.0"
1157 | is-data-descriptor "^1.0.0"
1158 | kind-of "^6.0.2"
1159 |
1160 | is-extendable@^0.1.0, is-extendable@^0.1.1:
1161 | version "0.1.1"
1162 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
1163 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
1164 |
1165 | is-extendable@^1.0.1:
1166 | version "1.0.1"
1167 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
1168 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
1169 | dependencies:
1170 | is-plain-object "^2.0.4"
1171 |
1172 | is-extglob@^2.1.0, is-extglob@^2.1.1:
1173 | version "2.1.1"
1174 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1175 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1176 |
1177 | is-fullwidth-code-point@^1.0.0:
1178 | version "1.0.0"
1179 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1180 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
1181 | dependencies:
1182 | number-is-nan "^1.0.0"
1183 |
1184 | is-fullwidth-code-point@^2.0.0:
1185 | version "2.0.0"
1186 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
1187 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
1188 |
1189 | is-glob@^3.1.0:
1190 | version "3.1.0"
1191 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
1192 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
1193 | dependencies:
1194 | is-extglob "^2.1.0"
1195 |
1196 | is-glob@^4.0.0:
1197 | version "4.0.0"
1198 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
1199 | integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
1200 | dependencies:
1201 | is-extglob "^2.1.1"
1202 |
1203 | is-number@^3.0.0:
1204 | version "3.0.0"
1205 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
1206 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
1207 | dependencies:
1208 | kind-of "^3.0.2"
1209 |
1210 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
1211 | version "2.0.4"
1212 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
1213 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
1214 | dependencies:
1215 | isobject "^3.0.1"
1216 |
1217 | is-promise@^2.1.0:
1218 | version "2.1.0"
1219 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
1220 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
1221 |
1222 | is-resolvable@^1.0.0:
1223 | version "1.1.0"
1224 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
1225 | integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
1226 |
1227 | is-windows@^1.0.2:
1228 | version "1.0.2"
1229 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
1230 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
1231 |
1232 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
1233 | version "1.0.0"
1234 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1235 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1236 |
1237 | isexe@^2.0.0:
1238 | version "2.0.0"
1239 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1240 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1241 |
1242 | isobject@^2.0.0:
1243 | version "2.1.0"
1244 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1245 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
1246 | dependencies:
1247 | isarray "1.0.0"
1248 |
1249 | isobject@^3.0.0, isobject@^3.0.1:
1250 | version "3.0.1"
1251 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
1252 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
1253 |
1254 | js-tokens@^3.0.2:
1255 | version "3.0.2"
1256 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1257 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
1258 |
1259 | js-yaml@^3.9.1:
1260 | version "3.12.2"
1261 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc"
1262 | integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==
1263 | dependencies:
1264 | argparse "^1.0.7"
1265 | esprima "^4.0.0"
1266 |
1267 | json-schema-traverse@^0.3.0:
1268 | version "0.3.1"
1269 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
1270 | integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
1271 |
1272 | json-stable-stringify-without-jsonify@^1.0.1:
1273 | version "1.0.1"
1274 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1275 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1276 |
1277 | json3@3.3.2:
1278 | version "3.3.2"
1279 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
1280 | integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
1281 |
1282 | keypress@^0.2.1:
1283 | version "0.2.1"
1284 | resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77"
1285 | integrity sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=
1286 |
1287 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
1288 | version "3.2.2"
1289 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1290 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
1291 | dependencies:
1292 | is-buffer "^1.1.5"
1293 |
1294 | kind-of@^4.0.0:
1295 | version "4.0.0"
1296 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
1297 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
1298 | dependencies:
1299 | is-buffer "^1.1.5"
1300 |
1301 | kind-of@^5.0.0:
1302 | version "5.1.0"
1303 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
1304 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
1305 |
1306 | kind-of@^6.0.0, kind-of@^6.0.2:
1307 | version "6.0.2"
1308 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
1309 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
1310 |
1311 | levn@^0.3.0, levn@~0.3.0:
1312 | version "0.3.0"
1313 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1314 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
1315 | dependencies:
1316 | prelude-ls "~1.1.2"
1317 | type-check "~0.3.2"
1318 |
1319 | load-json-file@^2.0.0:
1320 | version "2.0.0"
1321 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
1322 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
1323 | dependencies:
1324 | graceful-fs "^4.1.2"
1325 | parse-json "^2.2.0"
1326 | pify "^2.0.0"
1327 | strip-bom "^3.0.0"
1328 |
1329 | locate-path@^2.0.0:
1330 | version "2.0.0"
1331 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
1332 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
1333 | dependencies:
1334 | p-locate "^2.0.0"
1335 | path-exists "^3.0.0"
1336 |
1337 | lodash._baseassign@^3.0.0:
1338 | version "3.2.0"
1339 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
1340 | integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
1341 | dependencies:
1342 | lodash._basecopy "^3.0.0"
1343 | lodash.keys "^3.0.0"
1344 |
1345 | lodash._basecopy@^3.0.0:
1346 | version "3.0.1"
1347 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
1348 | integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
1349 |
1350 | lodash._basecreate@^3.0.0:
1351 | version "3.0.3"
1352 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
1353 | integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=
1354 |
1355 | lodash._getnative@^3.0.0:
1356 | version "3.9.1"
1357 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
1358 | integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
1359 |
1360 | lodash._isiterateecall@^3.0.0:
1361 | version "3.0.9"
1362 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
1363 | integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
1364 |
1365 | lodash.create@3.1.1:
1366 | version "3.1.1"
1367 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
1368 | integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=
1369 | dependencies:
1370 | lodash._baseassign "^3.0.0"
1371 | lodash._basecreate "^3.0.0"
1372 | lodash._isiterateecall "^3.0.0"
1373 |
1374 | lodash.isarguments@^3.0.0:
1375 | version "3.1.0"
1376 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
1377 | integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
1378 |
1379 | lodash.isarray@^3.0.0:
1380 | version "3.0.4"
1381 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
1382 | integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
1383 |
1384 | lodash.keys@^3.0.0:
1385 | version "3.1.2"
1386 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
1387 | integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
1388 | dependencies:
1389 | lodash._getnative "^3.0.0"
1390 | lodash.isarguments "^3.0.0"
1391 | lodash.isarray "^3.0.0"
1392 |
1393 | lodash@^4.17.11, lodash@^4.17.4, lodash@^4.3.0:
1394 | version "4.17.11"
1395 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
1396 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
1397 |
1398 | lru-cache@^4.0.1:
1399 | version "4.1.5"
1400 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
1401 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
1402 | dependencies:
1403 | pseudomap "^1.0.2"
1404 | yallist "^2.1.2"
1405 |
1406 | map-cache@^0.2.2:
1407 | version "0.2.2"
1408 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
1409 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
1410 |
1411 | map-visit@^1.0.0:
1412 | version "1.0.0"
1413 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
1414 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
1415 | dependencies:
1416 | object-visit "^1.0.0"
1417 |
1418 | micromatch@^3.1.10, micromatch@^3.1.4:
1419 | version "3.1.10"
1420 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
1421 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
1422 | dependencies:
1423 | arr-diff "^4.0.0"
1424 | array-unique "^0.3.2"
1425 | braces "^2.3.1"
1426 | define-property "^2.0.2"
1427 | extend-shallow "^3.0.2"
1428 | extglob "^2.0.4"
1429 | fragment-cache "^0.2.1"
1430 | kind-of "^6.0.2"
1431 | nanomatch "^1.2.9"
1432 | object.pick "^1.3.0"
1433 | regex-not "^1.0.0"
1434 | snapdragon "^0.8.1"
1435 | to-regex "^3.0.2"
1436 |
1437 | mimic-fn@^1.0.0:
1438 | version "1.2.0"
1439 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
1440 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
1441 |
1442 | minimatch@^3.0.2, minimatch@^3.0.4:
1443 | version "3.0.4"
1444 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1445 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1446 | dependencies:
1447 | brace-expansion "^1.1.7"
1448 |
1449 | minimist@0.0.8:
1450 | version "0.0.8"
1451 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1452 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
1453 |
1454 | minimist@^1.2.0:
1455 | version "1.2.0"
1456 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1457 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
1458 |
1459 | minipass@^2.2.1, minipass@^2.3.4:
1460 | version "2.3.5"
1461 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
1462 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
1463 | dependencies:
1464 | safe-buffer "^5.1.2"
1465 | yallist "^3.0.0"
1466 |
1467 | minizlib@^1.1.1:
1468 | version "1.2.1"
1469 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
1470 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
1471 | dependencies:
1472 | minipass "^2.2.1"
1473 |
1474 | mixin-deep@^1.2.0:
1475 | version "1.3.1"
1476 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
1477 | integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
1478 | dependencies:
1479 | for-in "^1.0.2"
1480 | is-extendable "^1.0.1"
1481 |
1482 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1:
1483 | version "0.5.1"
1484 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1485 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
1486 | dependencies:
1487 | minimist "0.0.8"
1488 |
1489 | mocha@^3.5.3:
1490 | version "3.5.3"
1491 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d"
1492 | integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==
1493 | dependencies:
1494 | browser-stdout "1.3.0"
1495 | commander "2.9.0"
1496 | debug "2.6.8"
1497 | diff "3.2.0"
1498 | escape-string-regexp "1.0.5"
1499 | glob "7.1.1"
1500 | growl "1.9.2"
1501 | he "1.1.1"
1502 | json3 "3.3.2"
1503 | lodash.create "3.1.1"
1504 | mkdirp "0.5.1"
1505 | supports-color "3.1.2"
1506 |
1507 | ms@2.0.0:
1508 | version "2.0.0"
1509 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1510 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1511 |
1512 | ms@^2.1.1:
1513 | version "2.1.1"
1514 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1515 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
1516 |
1517 | mute-stream@0.0.7:
1518 | version "0.0.7"
1519 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
1520 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
1521 |
1522 | nan@^2.9.2:
1523 | version "2.13.1"
1524 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.1.tgz#a15bee3790bde247e8f38f1d446edcdaeb05f2dd"
1525 | integrity sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==
1526 |
1527 | nanomatch@^1.2.9:
1528 | version "1.2.13"
1529 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
1530 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
1531 | dependencies:
1532 | arr-diff "^4.0.0"
1533 | array-unique "^0.3.2"
1534 | define-property "^2.0.2"
1535 | extend-shallow "^3.0.2"
1536 | fragment-cache "^0.2.1"
1537 | is-windows "^1.0.2"
1538 | kind-of "^6.0.2"
1539 | object.pick "^1.3.0"
1540 | regex-not "^1.0.0"
1541 | snapdragon "^0.8.1"
1542 | to-regex "^3.0.1"
1543 |
1544 | natural-compare@^1.4.0:
1545 | version "1.4.0"
1546 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1547 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1548 |
1549 | needle@^2.2.1:
1550 | version "2.2.4"
1551 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
1552 | integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
1553 | dependencies:
1554 | debug "^2.1.2"
1555 | iconv-lite "^0.4.4"
1556 | sax "^1.2.4"
1557 |
1558 | node-pre-gyp@^0.10.0:
1559 | version "0.10.3"
1560 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
1561 | integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
1562 | dependencies:
1563 | detect-libc "^1.0.2"
1564 | mkdirp "^0.5.1"
1565 | needle "^2.2.1"
1566 | nopt "^4.0.1"
1567 | npm-packlist "^1.1.6"
1568 | npmlog "^4.0.2"
1569 | rc "^1.2.7"
1570 | rimraf "^2.6.1"
1571 | semver "^5.3.0"
1572 | tar "^4"
1573 |
1574 | nopt@^4.0.1:
1575 | version "4.0.1"
1576 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
1577 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
1578 | dependencies:
1579 | abbrev "1"
1580 | osenv "^0.1.4"
1581 |
1582 | normalize-package-data@^2.3.2:
1583 | version "2.5.0"
1584 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
1585 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
1586 | dependencies:
1587 | hosted-git-info "^2.1.4"
1588 | resolve "^1.10.0"
1589 | semver "2 || 3 || 4 || 5"
1590 | validate-npm-package-license "^3.0.1"
1591 |
1592 | normalize-path@^2.1.1:
1593 | version "2.1.1"
1594 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
1595 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
1596 | dependencies:
1597 | remove-trailing-separator "^1.0.1"
1598 |
1599 | normalize-path@^3.0.0:
1600 | version "3.0.0"
1601 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1602 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1603 |
1604 | npm-bundled@^1.0.1:
1605 | version "1.0.6"
1606 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
1607 | integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
1608 |
1609 | npm-packlist@^1.1.6:
1610 | version "1.4.1"
1611 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
1612 | integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
1613 | dependencies:
1614 | ignore-walk "^3.0.1"
1615 | npm-bundled "^1.0.1"
1616 |
1617 | npmlog@^4.0.2:
1618 | version "4.1.2"
1619 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1620 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
1621 | dependencies:
1622 | are-we-there-yet "~1.1.2"
1623 | console-control-strings "~1.1.0"
1624 | gauge "~2.7.3"
1625 | set-blocking "~2.0.0"
1626 |
1627 | number-is-nan@^1.0.0:
1628 | version "1.0.1"
1629 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1630 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
1631 |
1632 | object-assign@^4.0.1, object-assign@^4.1.0:
1633 | version "4.1.1"
1634 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1635 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1636 |
1637 | object-copy@^0.1.0:
1638 | version "0.1.0"
1639 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
1640 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
1641 | dependencies:
1642 | copy-descriptor "^0.1.0"
1643 | define-property "^0.2.5"
1644 | kind-of "^3.0.3"
1645 |
1646 | object-visit@^1.0.0:
1647 | version "1.0.1"
1648 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
1649 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
1650 | dependencies:
1651 | isobject "^3.0.0"
1652 |
1653 | object.pick@^1.3.0:
1654 | version "1.3.0"
1655 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
1656 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
1657 | dependencies:
1658 | isobject "^3.0.1"
1659 |
1660 | once@^1.3.0:
1661 | version "1.4.0"
1662 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1663 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1664 | dependencies:
1665 | wrappy "1"
1666 |
1667 | onetime@^2.0.0:
1668 | version "2.0.1"
1669 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
1670 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
1671 | dependencies:
1672 | mimic-fn "^1.0.0"
1673 |
1674 | optionator@^0.8.2:
1675 | version "0.8.2"
1676 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
1677 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
1678 | dependencies:
1679 | deep-is "~0.1.3"
1680 | fast-levenshtein "~2.0.4"
1681 | levn "~0.3.0"
1682 | prelude-ls "~1.1.2"
1683 | type-check "~0.3.2"
1684 | wordwrap "~1.0.0"
1685 |
1686 | os-homedir@^1.0.0:
1687 | version "1.0.2"
1688 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1689 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1690 |
1691 | os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
1692 | version "1.0.2"
1693 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1694 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1695 |
1696 | osenv@^0.1.4:
1697 | version "0.1.5"
1698 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1699 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
1700 | dependencies:
1701 | os-homedir "^1.0.0"
1702 | os-tmpdir "^1.0.0"
1703 |
1704 | p-limit@^1.1.0:
1705 | version "1.3.0"
1706 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
1707 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
1708 | dependencies:
1709 | p-try "^1.0.0"
1710 |
1711 | p-locate@^2.0.0:
1712 | version "2.0.0"
1713 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1714 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
1715 | dependencies:
1716 | p-limit "^1.1.0"
1717 |
1718 | p-try@^1.0.0:
1719 | version "1.0.0"
1720 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1721 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
1722 |
1723 | parse-json@^2.2.0:
1724 | version "2.2.0"
1725 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1726 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
1727 | dependencies:
1728 | error-ex "^1.2.0"
1729 |
1730 | pascalcase@^0.1.1:
1731 | version "0.1.1"
1732 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
1733 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
1734 |
1735 | path-dirname@^1.0.0:
1736 | version "1.0.2"
1737 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
1738 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
1739 |
1740 | path-exists@^3.0.0:
1741 | version "3.0.0"
1742 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1743 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1744 |
1745 | path-is-absolute@^1.0.0:
1746 | version "1.0.1"
1747 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1748 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1749 |
1750 | path-is-inside@^1.0.2:
1751 | version "1.0.2"
1752 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1753 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
1754 |
1755 | path-parse@^1.0.6:
1756 | version "1.0.6"
1757 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1758 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1759 |
1760 | path-type@^2.0.0:
1761 | version "2.0.0"
1762 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
1763 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
1764 | dependencies:
1765 | pify "^2.0.0"
1766 |
1767 | path@^0.12.7:
1768 | version "0.12.7"
1769 | resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f"
1770 | integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=
1771 | dependencies:
1772 | process "^0.11.1"
1773 | util "^0.10.3"
1774 |
1775 | pify@^2.0.0:
1776 | version "2.3.0"
1777 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1778 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
1779 |
1780 | pkg-dir@^2.0.0:
1781 | version "2.0.0"
1782 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
1783 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
1784 | dependencies:
1785 | find-up "^2.1.0"
1786 |
1787 | plist@^2.1.0:
1788 | version "2.1.0"
1789 | resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025"
1790 | integrity sha1-V8zbeggh3yGDEhejytVOPhRqECU=
1791 | dependencies:
1792 | base64-js "1.2.0"
1793 | xmlbuilder "8.2.2"
1794 | xmldom "0.1.x"
1795 |
1796 | plist@^3.0.1:
1797 | version "3.0.1"
1798 | resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c"
1799 | integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==
1800 | dependencies:
1801 | base64-js "^1.2.3"
1802 | xmlbuilder "^9.0.7"
1803 | xmldom "0.1.x"
1804 |
1805 | pluralize@^7.0.0:
1806 | version "7.0.0"
1807 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
1808 | integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
1809 |
1810 | posix-character-classes@^0.1.0:
1811 | version "0.1.1"
1812 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
1813 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
1814 |
1815 | prelude-ls@~1.1.2:
1816 | version "1.1.2"
1817 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1818 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
1819 |
1820 | process-nextick-args@~2.0.0:
1821 | version "2.0.0"
1822 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
1823 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
1824 |
1825 | process@^0.11.1:
1826 | version "0.11.10"
1827 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
1828 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
1829 |
1830 | progress@^2.0.0:
1831 | version "2.0.3"
1832 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1833 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1834 |
1835 | pseudomap@^1.0.2:
1836 | version "1.0.2"
1837 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1838 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
1839 |
1840 | ramda@^0.25.0:
1841 | version "0.25.0"
1842 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9"
1843 | integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==
1844 |
1845 | rc@^1.2.7:
1846 | version "1.2.8"
1847 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
1848 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
1849 | dependencies:
1850 | deep-extend "^0.6.0"
1851 | ini "~1.3.0"
1852 | minimist "^1.2.0"
1853 | strip-json-comments "~2.0.1"
1854 |
1855 | read-pkg-up@^2.0.0:
1856 | version "2.0.0"
1857 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
1858 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
1859 | dependencies:
1860 | find-up "^2.0.0"
1861 | read-pkg "^2.0.0"
1862 |
1863 | read-pkg@^2.0.0:
1864 | version "2.0.0"
1865 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
1866 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
1867 | dependencies:
1868 | load-json-file "^2.0.0"
1869 | normalize-package-data "^2.3.2"
1870 | path-type "^2.0.0"
1871 |
1872 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2:
1873 | version "2.3.6"
1874 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
1875 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
1876 | dependencies:
1877 | core-util-is "~1.0.0"
1878 | inherits "~2.0.3"
1879 | isarray "~1.0.0"
1880 | process-nextick-args "~2.0.0"
1881 | safe-buffer "~5.1.1"
1882 | string_decoder "~1.1.1"
1883 | util-deprecate "~1.0.1"
1884 |
1885 | readdirp@^2.2.1:
1886 | version "2.2.1"
1887 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
1888 | integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
1889 | dependencies:
1890 | graceful-fs "^4.1.11"
1891 | micromatch "^3.1.10"
1892 | readable-stream "^2.0.2"
1893 |
1894 | regenerator-runtime@^0.10.5:
1895 | version "0.10.5"
1896 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
1897 | integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=
1898 |
1899 | regenerator-runtime@^0.11.0:
1900 | version "0.11.1"
1901 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
1902 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
1903 |
1904 | regex-not@^1.0.0, regex-not@^1.0.2:
1905 | version "1.0.2"
1906 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
1907 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
1908 | dependencies:
1909 | extend-shallow "^3.0.2"
1910 | safe-regex "^1.1.0"
1911 |
1912 | regexpp@^1.0.1:
1913 | version "1.1.0"
1914 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
1915 | integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
1916 |
1917 | remove-trailing-separator@^1.0.1:
1918 | version "1.1.0"
1919 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
1920 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
1921 |
1922 | repeat-element@^1.1.2:
1923 | version "1.1.3"
1924 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
1925 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
1926 |
1927 | repeat-string@^1.6.1:
1928 | version "1.6.1"
1929 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1930 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
1931 |
1932 | require-uncached@^1.0.3:
1933 | version "1.0.3"
1934 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
1935 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
1936 | dependencies:
1937 | caller-path "^0.1.0"
1938 | resolve-from "^1.0.0"
1939 |
1940 | resolve-from@^1.0.0:
1941 | version "1.0.1"
1942 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
1943 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
1944 |
1945 | resolve-url@^0.2.1:
1946 | version "0.2.1"
1947 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
1948 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
1949 |
1950 | resolve@^1.10.0, resolve@^1.3.3, resolve@^1.5.0, resolve@^1.9.0:
1951 | version "1.10.0"
1952 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
1953 | integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
1954 | dependencies:
1955 | path-parse "^1.0.6"
1956 |
1957 | restore-cursor@^2.0.0:
1958 | version "2.0.0"
1959 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
1960 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
1961 | dependencies:
1962 | onetime "^2.0.0"
1963 | signal-exit "^3.0.2"
1964 |
1965 | ret@~0.1.10:
1966 | version "0.1.15"
1967 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
1968 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
1969 |
1970 | rimraf@^2.6.1, rimraf@~2.6.2:
1971 | version "2.6.3"
1972 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
1973 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
1974 | dependencies:
1975 | glob "^7.1.3"
1976 |
1977 | run-async@^2.2.0:
1978 | version "2.3.0"
1979 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
1980 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
1981 | dependencies:
1982 | is-promise "^2.1.0"
1983 |
1984 | rx-lite-aggregates@^4.0.8:
1985 | version "4.0.8"
1986 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
1987 | integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
1988 | dependencies:
1989 | rx-lite "*"
1990 |
1991 | rx-lite@*, rx-lite@^4.0.8:
1992 | version "4.0.8"
1993 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
1994 | integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
1995 |
1996 | safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1997 | version "5.1.2"
1998 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1999 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2000 |
2001 | safe-regex@^1.1.0:
2002 | version "1.1.0"
2003 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
2004 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
2005 | dependencies:
2006 | ret "~0.1.10"
2007 |
2008 | "safer-buffer@>= 2.1.2 < 3":
2009 | version "2.1.2"
2010 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2011 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2012 |
2013 | sax@^1.2.4:
2014 | version "1.2.4"
2015 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
2016 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
2017 |
2018 | "semver@2 || 3 || 4 || 5", semver@^5.3.0:
2019 | version "5.6.0"
2020 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
2021 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
2022 |
2023 | semver@5.3.0:
2024 | version "5.3.0"
2025 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
2026 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
2027 |
2028 | set-blocking@~2.0.0:
2029 | version "2.0.0"
2030 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2031 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
2032 |
2033 | set-value@^0.4.3:
2034 | version "0.4.3"
2035 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
2036 | integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
2037 | dependencies:
2038 | extend-shallow "^2.0.1"
2039 | is-extendable "^0.1.1"
2040 | is-plain-object "^2.0.1"
2041 | to-object-path "^0.3.0"
2042 |
2043 | set-value@^2.0.0:
2044 | version "2.0.0"
2045 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
2046 | integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
2047 | dependencies:
2048 | extend-shallow "^2.0.1"
2049 | is-extendable "^0.1.1"
2050 | is-plain-object "^2.0.3"
2051 | split-string "^3.0.1"
2052 |
2053 | shebang-command@^1.2.0:
2054 | version "1.2.0"
2055 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
2056 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
2057 | dependencies:
2058 | shebang-regex "^1.0.0"
2059 |
2060 | shebang-regex@^1.0.0:
2061 | version "1.0.0"
2062 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
2063 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
2064 |
2065 | signal-exit@^3.0.0, signal-exit@^3.0.2:
2066 | version "3.0.2"
2067 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
2068 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
2069 |
2070 | simple-plist@^1.0.0:
2071 | version "1.0.0"
2072 | resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.0.0.tgz#bed3085633b22f371e111f45d159a1ccf94b81eb"
2073 | integrity sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g==
2074 | dependencies:
2075 | bplist-creator "0.0.7"
2076 | bplist-parser "0.1.1"
2077 | plist "^3.0.1"
2078 |
2079 | slice-ansi@1.0.0:
2080 | version "1.0.0"
2081 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
2082 | integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
2083 | dependencies:
2084 | is-fullwidth-code-point "^2.0.0"
2085 |
2086 | snapdragon-node@^2.0.1:
2087 | version "2.1.1"
2088 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
2089 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
2090 | dependencies:
2091 | define-property "^1.0.0"
2092 | isobject "^3.0.0"
2093 | snapdragon-util "^3.0.1"
2094 |
2095 | snapdragon-util@^3.0.1:
2096 | version "3.0.1"
2097 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
2098 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
2099 | dependencies:
2100 | kind-of "^3.2.0"
2101 |
2102 | snapdragon@^0.8.1:
2103 | version "0.8.2"
2104 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
2105 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
2106 | dependencies:
2107 | base "^0.11.1"
2108 | debug "^2.2.0"
2109 | define-property "^0.2.5"
2110 | extend-shallow "^2.0.1"
2111 | map-cache "^0.2.2"
2112 | source-map "^0.5.6"
2113 | source-map-resolve "^0.5.0"
2114 | use "^3.1.0"
2115 |
2116 | source-map-resolve@^0.5.0:
2117 | version "0.5.2"
2118 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
2119 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
2120 | dependencies:
2121 | atob "^2.1.1"
2122 | decode-uri-component "^0.2.0"
2123 | resolve-url "^0.2.1"
2124 | source-map-url "^0.4.0"
2125 | urix "^0.1.0"
2126 |
2127 | source-map-support@^0.5.3:
2128 | version "0.5.11"
2129 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2"
2130 | integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==
2131 | dependencies:
2132 | buffer-from "^1.0.0"
2133 | source-map "^0.6.0"
2134 |
2135 | source-map-url@^0.4.0:
2136 | version "0.4.0"
2137 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
2138 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
2139 |
2140 | source-map@^0.5.6:
2141 | version "0.5.7"
2142 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2143 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
2144 |
2145 | source-map@^0.6.0:
2146 | version "0.6.1"
2147 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
2148 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
2149 |
2150 | spdx-correct@^3.0.0:
2151 | version "3.1.0"
2152 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
2153 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
2154 | dependencies:
2155 | spdx-expression-parse "^3.0.0"
2156 | spdx-license-ids "^3.0.0"
2157 |
2158 | spdx-exceptions@^2.1.0:
2159 | version "2.2.0"
2160 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
2161 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
2162 |
2163 | spdx-expression-parse@^3.0.0:
2164 | version "3.0.0"
2165 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
2166 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
2167 | dependencies:
2168 | spdx-exceptions "^2.1.0"
2169 | spdx-license-ids "^3.0.0"
2170 |
2171 | spdx-license-ids@^3.0.0:
2172 | version "3.0.3"
2173 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"
2174 | integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
2175 |
2176 | split-string@^3.0.1, split-string@^3.0.2:
2177 | version "3.1.0"
2178 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
2179 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
2180 | dependencies:
2181 | extend-shallow "^3.0.0"
2182 |
2183 | sprintf-js@~1.0.2:
2184 | version "1.0.3"
2185 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2186 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
2187 |
2188 | static-extend@^0.1.1:
2189 | version "0.1.2"
2190 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
2191 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
2192 | dependencies:
2193 | define-property "^0.2.5"
2194 | object-copy "^0.1.0"
2195 |
2196 | stream-buffers@~2.2.0:
2197 | version "2.2.0"
2198 | resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
2199 | integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=
2200 |
2201 | string-width@^1.0.1:
2202 | version "1.0.2"
2203 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
2204 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
2205 | dependencies:
2206 | code-point-at "^1.0.0"
2207 | is-fullwidth-code-point "^1.0.0"
2208 | strip-ansi "^3.0.0"
2209 |
2210 | "string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1:
2211 | version "2.1.1"
2212 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
2213 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
2214 | dependencies:
2215 | is-fullwidth-code-point "^2.0.0"
2216 | strip-ansi "^4.0.0"
2217 |
2218 | string_decoder@~1.1.1:
2219 | version "1.1.1"
2220 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
2221 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
2222 | dependencies:
2223 | safe-buffer "~5.1.0"
2224 |
2225 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2226 | version "3.0.1"
2227 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2228 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
2229 | dependencies:
2230 | ansi-regex "^2.0.0"
2231 |
2232 | strip-ansi@^4.0.0:
2233 | version "4.0.0"
2234 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
2235 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
2236 | dependencies:
2237 | ansi-regex "^3.0.0"
2238 |
2239 | strip-bom@^3.0.0:
2240 | version "3.0.0"
2241 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
2242 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
2243 |
2244 | strip-json-comments@~2.0.1:
2245 | version "2.0.1"
2246 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2247 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
2248 |
2249 | supports-color@3.1.2:
2250 | version "3.1.2"
2251 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
2252 | integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
2253 | dependencies:
2254 | has-flag "^1.0.0"
2255 |
2256 | supports-color@^2.0.0:
2257 | version "2.0.0"
2258 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
2259 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
2260 |
2261 | supports-color@^5.3.0:
2262 | version "5.5.0"
2263 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2264 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2265 | dependencies:
2266 | has-flag "^3.0.0"
2267 |
2268 | table@4.0.2:
2269 | version "4.0.2"
2270 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
2271 | integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
2272 | dependencies:
2273 | ajv "^5.2.3"
2274 | ajv-keywords "^2.1.0"
2275 | chalk "^2.1.0"
2276 | lodash "^4.17.4"
2277 | slice-ansi "1.0.0"
2278 | string-width "^2.1.1"
2279 |
2280 | tar@^4:
2281 | version "4.4.8"
2282 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
2283 | integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
2284 | dependencies:
2285 | chownr "^1.1.1"
2286 | fs-minipass "^1.2.5"
2287 | minipass "^2.3.4"
2288 | minizlib "^1.1.1"
2289 | mkdirp "^0.5.0"
2290 | safe-buffer "^5.1.2"
2291 | yallist "^3.0.2"
2292 |
2293 | text-table@^0.2.0, text-table@~0.2.0:
2294 | version "0.2.0"
2295 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2296 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
2297 |
2298 | through@^2.3.6:
2299 | version "2.3.8"
2300 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
2301 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
2302 |
2303 | tmp@^0.0.33:
2304 | version "0.0.33"
2305 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
2306 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
2307 | dependencies:
2308 | os-tmpdir "~1.0.2"
2309 |
2310 | to-object-path@^0.3.0:
2311 | version "0.3.0"
2312 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
2313 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
2314 | dependencies:
2315 | kind-of "^3.0.2"
2316 |
2317 | to-regex-range@^2.1.0:
2318 | version "2.1.1"
2319 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
2320 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
2321 | dependencies:
2322 | is-number "^3.0.0"
2323 | repeat-string "^1.6.1"
2324 |
2325 | to-regex@^3.0.1, to-regex@^3.0.2:
2326 | version "3.0.2"
2327 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
2328 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
2329 | dependencies:
2330 | define-property "^2.0.2"
2331 | extend-shallow "^3.0.2"
2332 | regex-not "^1.0.2"
2333 | safe-regex "^1.1.0"
2334 |
2335 | type-check@~0.3.2:
2336 | version "0.3.2"
2337 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
2338 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
2339 | dependencies:
2340 | prelude-ls "~1.1.2"
2341 |
2342 | typedarray@^0.0.6:
2343 | version "0.0.6"
2344 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
2345 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
2346 |
2347 | unicons@0.0.3:
2348 | version "0.0.3"
2349 | resolved "https://registry.yarnpkg.com/unicons/-/unicons-0.0.3.tgz#6e6a7a1a6eaebb01ca3d8b12ad9687279eaba524"
2350 | integrity sha1-bmp6Gm6uuwHKPYsSrZaHJ56rpSQ=
2351 |
2352 | union-value@^1.0.0:
2353 | version "1.0.0"
2354 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
2355 | integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
2356 | dependencies:
2357 | arr-union "^3.1.0"
2358 | get-value "^2.0.6"
2359 | is-extendable "^0.1.1"
2360 | set-value "^0.4.3"
2361 |
2362 | unset-value@^1.0.0:
2363 | version "1.0.0"
2364 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
2365 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
2366 | dependencies:
2367 | has-value "^0.3.1"
2368 | isobject "^3.0.0"
2369 |
2370 | upath@^1.1.0:
2371 | version "1.1.2"
2372 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
2373 | integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
2374 |
2375 | urix@^0.1.0:
2376 | version "0.1.0"
2377 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
2378 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
2379 |
2380 | use@^3.1.0:
2381 | version "3.1.1"
2382 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
2383 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
2384 |
2385 | util-deprecate@~1.0.1:
2386 | version "1.0.2"
2387 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2388 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2389 |
2390 | util@^0.10.3:
2391 | version "0.10.4"
2392 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
2393 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
2394 | dependencies:
2395 | inherits "2.0.3"
2396 |
2397 | utils-extend@^1.0.4, utils-extend@^1.0.6:
2398 | version "1.0.8"
2399 | resolved "https://registry.yarnpkg.com/utils-extend/-/utils-extend-1.0.8.tgz#ccfd7b64540f8e90ee21eec57769d0651cab8a5f"
2400 | integrity sha1-zP17ZFQPjpDuIe7Fd2nQZRyril8=
2401 |
2402 | uuid@^3.3.2:
2403 | version "3.3.2"
2404 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
2405 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
2406 |
2407 | validate-npm-package-license@^3.0.1:
2408 | version "3.0.4"
2409 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
2410 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
2411 | dependencies:
2412 | spdx-correct "^3.0.0"
2413 | spdx-expression-parse "^3.0.0"
2414 |
2415 | which@^1.2.9:
2416 | version "1.3.1"
2417 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
2418 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
2419 | dependencies:
2420 | isexe "^2.0.0"
2421 |
2422 | wide-align@^1.1.0:
2423 | version "1.1.3"
2424 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
2425 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
2426 | dependencies:
2427 | string-width "^1.0.2 || 2"
2428 |
2429 | wordwrap@~1.0.0:
2430 | version "1.0.0"
2431 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
2432 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
2433 |
2434 | wrappy@1:
2435 | version "1.0.2"
2436 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2437 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2438 |
2439 | write@^0.2.1:
2440 | version "0.2.1"
2441 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
2442 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
2443 | dependencies:
2444 | mkdirp "^0.5.1"
2445 |
2446 | xcode@2.0.0:
2447 | version "2.0.0"
2448 | resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2"
2449 | integrity sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==
2450 | dependencies:
2451 | simple-plist "^1.0.0"
2452 | uuid "^3.3.2"
2453 |
2454 | xmlbuilder@8.2.2:
2455 | version "8.2.2"
2456 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773"
2457 | integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=
2458 |
2459 | xmlbuilder@^9.0.7:
2460 | version "9.0.7"
2461 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
2462 | integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
2463 |
2464 | xmldom@0.1.x:
2465 | version "0.1.27"
2466 | resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"
2467 | integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk=
2468 |
2469 | yallist@^2.1.2:
2470 | version "2.1.2"
2471 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
2472 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
2473 |
2474 | yallist@^3.0.0, yallist@^3.0.2:
2475 | version "3.0.3"
2476 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
2477 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
2478 |
--------------------------------------------------------------------------------