├── .gitignore ├── LICENSE ├── README.md ├── branding └── ui-labeller-branding-cover-1.png ├── docs └── example.png ├── figma ├── .gitignore ├── README.md ├── manifest.json ├── package.json ├── src │ ├── code.ts │ ├── ui.css │ ├── ui.css.d.ts │ ├── ui.html │ └── ui.tsx ├── tsconfig.json └── webpack.config.js ├── package-lock.json ├── package.json ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | .DS_Store 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 13 | 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | *.lcov 26 | 27 | # nyc test coverage 28 | .nyc_output 29 | 30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 31 | .grunt 32 | 33 | # Bower dependency directory (https://bower.io/) 34 | bower_components 35 | 36 | # node-waf configuration 37 | .lock-wscript 38 | 39 | # Compiled binary addons (https://nodejs.org/api/addons.html) 40 | build/Release 41 | build 42 | 43 | # Dependency directories 44 | node_modules/ 45 | jspm_packages/ 46 | 47 | # Snowpack dependency directory (https://snowpack.dev/) 48 | web_modules/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Microbundle cache 60 | .rpt2_cache/ 61 | .rts2_cache_cjs/ 62 | .rts2_cache_es/ 63 | .rts2_cache_umd/ 64 | 65 | # Optional REPL history 66 | .node_repl_history 67 | 68 | # Output of 'npm pack' 69 | *.tgz 70 | 71 | # Yarn Integrity file 72 | .yarn-integrity 73 | 74 | # dotenv environment variables file 75 | .env 76 | .env.test 77 | 78 | # parcel-bundler cache (https://parceljs.org/) 79 | .cache 80 | .parcel-cache 81 | 82 | # Next.js build output 83 | .next 84 | out 85 | 86 | # Nuxt.js build / generate output 87 | .nuxt 88 | dist 89 | 90 | # Gatsby files 91 | .cache/ 92 | # Comment in the public line in if your project uses Gatsby and not Next.js 93 | # https://nextjs.org/blog/next-9-1#public-directory-support 94 | # public 95 | 96 | # vuepress build output 97 | .vuepress/dist 98 | 99 | # Serverless directories 100 | .serverless/ 101 | 102 | # FuseBox cache 103 | .fusebox/ 104 | 105 | # DynamoDB Local files 106 | .dynamodb/ 107 | 108 | # TernJS port file 109 | .tern-port 110 | 111 | # Stores VSCode versions used for testing VSCode extensions 112 | .vscode-test 113 | 114 | # yarn v2 115 | .yarn/cache 116 | .yarn/unplugged 117 | .yarn/build-state.yml 118 | .yarn/install-state.gz 119 | .pnp.* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 bridged.xyz 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![](./branding/ui-labeller-branding-cover-1.png) 4 | 5 | # ui-labeller (plugin for figma / sketch) 6 | 7 | label your image dataset on figma for realtime collaboration and data centralization 8 | 9 | > there is powerful tool called figma. why use other tools just for data labelling? 10 | 11 | ## Installation 12 | figma - read [this guide](./figma/README.md) 13 | 14 | 15 | ## Design 16 | openned design file for ui-labeller available at [figma](https://www.figma.com/file/U0gKxMTiLgk6uB08qeTzoa/ui-labeller-plugin?node-id=0%3A1) 17 | 18 | 19 | ## Features 20 | - Load you data from S3 / GCP 21 | - Organize workspace (Makes Artboards for your loaded images, and make them as a user-friendly grid) 22 | - Make your own labelling preferences 23 | - Box / Ellipse / Custom shape labellings are supported 24 | - Multi tag in single label is supported 25 | 26 | 27 | 28 | ## Example 29 | 30 | ![](./docs/example.png) 31 | 32 | 33 | 34 | 35 | ## Why to use Bridged's Labeller instead of other labelling tools? 36 | - It's Live - Best collaboration experience. 37 | - It's Visual - You can see your work in one place. (You don't get lost. You know where you are.) 38 | - It's easy to edit your labels preferense. 39 | - It's easy to share 40 | - use built-in UI building experience 41 | - margin checking 42 | - moving in pixel-level 43 | - checking grid 44 | - It's all Open and Free 45 | - Add comments right above your design. 46 | - It just makes sense when your data is ui design. 47 | 48 | 49 | 50 | ## How to use 51 | 52 | *Example usage - [here](https://www.figma.com/file/01QCgPwNc7DLqmgNvVgJaF/?node-id=37%3A0)* 53 | 54 | 1. Make @labels page and make your labels as Components. 55 | 2. Make any page to load your dataset. 56 | 3. Load your data via providing S3 credentials, and wait for it to sync. 57 | 4. Label it via the plugin interface! 58 | 5. Download or sync the labelled data set. 59 | 6. Make awesome models. 60 | 61 | 62 | ## Contribution 63 | [contributing guideline](https://github.com/bridgedxyz/contributing-and-license) 64 | -------------------------------------------------------------------------------- /branding/ui-labeller-branding-cover-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gridaco/ui-labeller/53729192e35e9327b359ee55b2703b7337c41c7b/branding/ui-labeller-branding-cover-1.png -------------------------------------------------------------------------------- /docs/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gridaco/ui-labeller/53729192e35e9327b359ee55b2703b7337c41c7b/docs/example.png -------------------------------------------------------------------------------- /figma/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | build 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | 76 | # parcel-bundler cache (https://parceljs.org/) 77 | .cache 78 | .parcel-cache 79 | 80 | # Next.js build output 81 | .next 82 | out 83 | 84 | # Nuxt.js build / generate output 85 | .nuxt 86 | dist 87 | 88 | # Gatsby files 89 | .cache/ 90 | # Comment in the public line in if your project uses Gatsby and not Next.js 91 | # https://nextjs.org/blog/next-9-1#public-directory-support 92 | # public 93 | 94 | # vuepress build output 95 | .vuepress/dist 96 | 97 | # Serverless directories 98 | .serverless/ 99 | 100 | # FuseBox cache 101 | .fusebox/ 102 | 103 | # DynamoDB Local files 104 | .dynamodb/ 105 | 106 | # TernJS port file 107 | .tern-port 108 | 109 | # Stores VSCode versions used for testing VSCode extensions 110 | .vscode-test 111 | 112 | # yarn v2 113 | .yarn/cache 114 | .yarn/unplugged 115 | .yarn/build-state.yml 116 | .yarn/install-state.gz 117 | .pnp.* -------------------------------------------------------------------------------- /figma/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | # ui labeller figma plugin (label your design for ML where your designs are at) 6 | > a figma ui design labeller for humans 7 | 8 | ## Development guide 9 | 10 | 11 | ### Pre-requisites 12 | 13 | - [Node.js](https://nodejs.org/) 14 | - [Figma desktop app](https://figma.com/downloads/) 15 | 16 | ### Building the plugin 17 | 18 | First: 19 | 20 | ``` 21 | $ yarn install 22 | ``` 23 | 24 | ``` 25 | $ yarn run dev 26 | ``` 27 | 28 | ### Installing the plugin 29 | 30 | In the Figma desktop app: 31 | 32 | - Open a Figma document. 33 | - Go to `Plugins` → `Development` → `New Plugin…`. 34 | - Click the `Click to choose a manifest.json file` box, and select the `manifest.json` file that was generated. 35 | 36 | ### Debugging 37 | 38 | Use `console.log` statements to inspect values in your code. 39 | 40 | To open the developer console in the Figma desktop app, go to `Plugins` → `Development` → `Open Console`. 41 | 42 | ### Docs 43 | 44 | - [Create Figma Plugin docs](https://github.com/yuanqing/create-figma-plugin#docs) 45 | - [Figma plugin API docs](https://figma.com/plugin-docs/api/) 46 | - [React plugin](https://www.figma.com/plugin-docs/bundling-react/) 47 | - [Create Figma Plugin](https://github.com/yuanqing/create-figma-plugin) 48 | -------------------------------------------------------------------------------- /figma/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": "1.0.0", 3 | "id": "903855708086375422", 4 | "name": "labeller", 5 | "main": "dist/code.js", 6 | "ui": "dist/ui.html" 7 | } -------------------------------------------------------------------------------- /figma/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "figma", 3 | "version": "0.1.0", 4 | "keywords": [ 5 | "figma", 6 | "bridged", 7 | "reflect", 8 | "ML", 9 | "ui", 10 | "labelling" 11 | ], 12 | "license": "MIT", 13 | "author": "bridged.xyz by softmarshmallow ", 14 | "scripts": { 15 | "webpack:watch": "webpack --watch", 16 | "build": "webpack -p --mode=production", 17 | "dev": "webpack --watch" 18 | }, 19 | "dependencies": { 20 | "@material-ui/core": "^4.11.0", 21 | "css-loader": "^3.1.0", 22 | "dart-services": "^0.1.10", 23 | "dotenv": "^8.2.0", 24 | "firebase": "^7.23.0", 25 | "open": "^7.3.0", 26 | "react": "^16.13.1", 27 | "react-dom": "^16.13.1", 28 | "recoil": "^0.0.13", 29 | "style-loader": "^0.23.1", 30 | "ts-loader": "^6.0.4" 31 | }, 32 | "devDependencies": { 33 | "@figma/plugin-typings": "^1.17.1", 34 | "@types/node": "^14.11.8", 35 | "@types/react": "^16.9.49", 36 | "@types/react-dom": "^16.9.8", 37 | "dotenv-webpack": "^2.0.0", 38 | "html-webpack-inline-source-plugin": "0.0.10", 39 | "html-webpack-plugin": "^3.2.0", 40 | "terser-webpack-plugin": "^4.2.3", 41 | "typescript": "^4.0.3", 42 | "webpack": "^4.38.0", 43 | "webpack-cli": "^3.3.6" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /figma/src/code.ts: -------------------------------------------------------------------------------- 1 | async function showUI() { 2 | // load plugin with confugured w/h 3 | const rawWidth = await figma.clientStorage.getAsync("width") 4 | const rawHeight = await figma.clientStorage.getAsync("height") 5 | let width = 375 6 | if (rawWidth) { 7 | width = parseInt(rawWidth) 8 | } 9 | let height = 812 10 | if (rawHeight) { 11 | height = parseInt(rawHeight) 12 | } 13 | figma.showUI(__html__, { width: width, height: height }); 14 | } 15 | 16 | 17 | showUI() 18 | 19 | function run() { 20 | 21 | } 22 | 23 | figma.on("selectionchange", () => { 24 | run(); 25 | }); 26 | 27 | figma.ui.onmessage = (msg) => { 28 | 29 | }; -------------------------------------------------------------------------------- /figma/src/ui.css: -------------------------------------------------------------------------------- 1 | /* body { 2 | font: 12px; 3 | text-align: left; 4 | margin: 16; 5 | } */ 6 | button { 7 | border-radius: 4px; 8 | background: white; 9 | color: black; 10 | border: 2px; 11 | padding: 8px 15px; 12 | margin: 0 5px; 13 | box-shadow: inset 0 0 0 1px black; 14 | outline: none; 15 | } 16 | 17 | #create { 18 | box-shadow: none; 19 | background: #18A0FB; 20 | color: white; 21 | } 22 | 23 | input { 24 | border: none; 25 | outline: none; 26 | padding: 8px; 27 | } 28 | 29 | input:hover { 30 | box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); 31 | } 32 | 33 | button:focus { 34 | box-shadow: inset 0 0 0 2px #18A0FB; 35 | } 36 | 37 | #create:focus { 38 | box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.3); 39 | } 40 | 41 | input:focus { 42 | box-shadow: inset 0 0 0 2px #18A0FB; 43 | } 44 | 45 | h1, 46 | h2, 47 | h3, 48 | h4, 49 | h5, 50 | h6, 51 | sub, 52 | p { 53 | font-family: "Roboto"; 54 | } -------------------------------------------------------------------------------- /figma/src/ui.css.d.ts: -------------------------------------------------------------------------------- 1 | declare const styles: { 2 | readonly "create": string; 3 | }; 4 | export = styles; 5 | 6 | -------------------------------------------------------------------------------- /figma/src/ui.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /figma/src/ui.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import * as ReactDOM from 'react-dom' 3 | import './ui.css' 4 | 5 | function App() { 6 | return ( 7 |
8 | hi there 9 |
10 | ); 11 | } 12 | 13 | ReactDOM.render(, document.getElementById('react-page')) -------------------------------------------------------------------------------- /figma/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2016", 4 | "module": "commonjs", 5 | "lib": [ 6 | "es2017", 7 | "es7", 8 | "es6", 9 | "dom" 10 | ], 11 | "jsx": "react", 12 | "esModuleInterop": true, 13 | "outDir": "dist", 14 | "declaration": true, 15 | "allowSyntheticDefaultImports": true, 16 | "sourceMap": true, 17 | "experimentalDecorators": true, 18 | "noUnusedLocals": false, 19 | "typeRoots": [ 20 | "./node_modules/@types", 21 | "../node_modules/@types", 22 | "../node_modules/@figma", 23 | ] 24 | }, 25 | "exclude": [ 26 | "node_modules", 27 | "dist", 28 | "example", 29 | "tests" 30 | ] 31 | } -------------------------------------------------------------------------------- /figma/webpack.config.js: -------------------------------------------------------------------------------- 1 | const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin') 2 | const HtmlWebpackPlugin = require('html-webpack-plugin') 3 | const path = require('path') 4 | const Dotenv = require('dotenv-webpack'); 5 | const TerserPlugin = require('terser-webpack-plugin'); 6 | 7 | module.exports = (env, argv) => ({ 8 | mode: argv.mode === 'production' ? 'production' : 'development', 9 | 10 | // https://github.com/webpack-contrib/css-loader/issues/447#issuecomment-285598881 11 | node: { 12 | fs: 'empty', 13 | }, 14 | // This is necessary because Figma's 'eval' works differently than normal eval 15 | devtool: argv.mode === 'production' ? false : 'inline-source-map', 16 | 17 | entry: { 18 | ui: './src/ui.tsx', // The entry point for your UI code 19 | code: './src/code.ts', // The entry point for your plugin code 20 | }, 21 | 22 | module: { 23 | rules: [ 24 | // Converts TypeScript code to JavaScript 25 | { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/ }, 26 | 27 | // Enables including CSS by doing "import './file.css'" in your TypeScript code 28 | { test: /\.css$/, loader: [{ loader: 'style-loader' }, { loader: 'css-loader' }] }, 29 | 30 | // Allows you to use "<%= require('./file.svg') %>" in your HTML code to get a data URI 31 | { test: /\.(png|jpg|gif|webp|svg|zip)$/, loader: [{ loader: 'url-loader' }] }, 32 | 33 | { test: /\.pug$/, use: ["pug-loader"], } 34 | ], 35 | }, 36 | 37 | // Webpack tries these extensions for you if you omit the extension like "import './file'" 38 | resolve: { extensions: ['.tsx', '.ts', '.jsx', '.js'] }, 39 | 40 | output: { 41 | filename: '[name].js', 42 | path: path.resolve(__dirname, 'dist'), // Compile into a folder called "dist" 43 | }, 44 | 45 | // minimize 46 | optimization: { 47 | minimize: false, 48 | minimizer: [new TerserPlugin({ 49 | terserOptions: { 50 | sourceMap: true, 51 | compress: { 52 | keep_classnames: true, // keep class name cause, flutter-builder uses class name reflection. 53 | keep_fnames: true, 54 | drop_console: true, 55 | conditionals: true, 56 | unused: true, 57 | comparisons: true, 58 | dead_code: true, 59 | if_return: true, 60 | join_vars: true, 61 | warnings: false 62 | }, 63 | output: { 64 | comments: false 65 | } 66 | } 67 | })], 68 | }, 69 | 70 | // Tells Webpack to generate "ui.html" and to inline "ui.ts" into it 71 | plugins: [ 72 | new HtmlWebpackPlugin({ 73 | template: './src/ui.html', 74 | filename: 'ui.html', 75 | inlineSource: '.(js)$', 76 | chunks: ['ui'], 77 | }), 78 | new HtmlWebpackInlineSourcePlugin(), 79 | new Dotenv(), 80 | ], 81 | }) -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@bridged.xyz/ui-labeller", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@webpack-cli/info": { 8 | "version": "1.0.2", 9 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.0.2.tgz", 10 | "integrity": "sha512-FEfLQwmN4pXZSYSrtp+KC84rFanoCIxXFpS2wUvviDCE2fnajwxw2GXzbj83IlH4Dl8Wq8kJjavVwvxv3YJmnw==", 11 | "requires": { 12 | "envinfo": "^7.7.3" 13 | } 14 | }, 15 | "@webpack-cli/serve": { 16 | "version": "1.0.1", 17 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.0.1.tgz", 18 | "integrity": "sha512-WGMaTMTK6NOe29Hw1WBEok9vGLfKg5C6jWzNOS/6HH1YadR+RL+TRWRcSyc81Dzulljhk/Ree9mrDM4Np9GGOQ==" 19 | }, 20 | "ansi-colors": { 21 | "version": "4.1.1", 22 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 23 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 24 | }, 25 | "ansi-escapes": { 26 | "version": "4.3.1", 27 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 28 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 29 | "requires": { 30 | "type-fest": "^0.11.0" 31 | } 32 | }, 33 | "ansi-styles": { 34 | "version": "3.2.1", 35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 37 | "requires": { 38 | "color-convert": "^1.9.0" 39 | } 40 | }, 41 | "array-back": { 42 | "version": "4.0.1", 43 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", 44 | "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==" 45 | }, 46 | "chalk": { 47 | "version": "2.4.2", 48 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 49 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 50 | "requires": { 51 | "ansi-styles": "^3.2.1", 52 | "escape-string-regexp": "^1.0.5", 53 | "supports-color": "^5.3.0" 54 | } 55 | }, 56 | "color-convert": { 57 | "version": "1.9.3", 58 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 59 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 60 | "requires": { 61 | "color-name": "1.1.3" 62 | } 63 | }, 64 | "color-name": { 65 | "version": "1.1.3", 66 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 67 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 68 | }, 69 | "colorette": { 70 | "version": "1.2.1", 71 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", 72 | "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" 73 | }, 74 | "command-line-usage": { 75 | "version": "6.1.0", 76 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.0.tgz", 77 | "integrity": "sha512-Ew1clU4pkUeo6AFVDFxCbnN7GIZfXl48HIOQeFQnkO3oOqvpI7wdqtLRwv9iOCZ/7A+z4csVZeiDdEcj8g6Wiw==", 78 | "requires": { 79 | "array-back": "^4.0.0", 80 | "chalk": "^2.4.2", 81 | "table-layout": "^1.0.0", 82 | "typical": "^5.2.0" 83 | } 84 | }, 85 | "cross-spawn": { 86 | "version": "7.0.3", 87 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 88 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 89 | "requires": { 90 | "path-key": "^3.1.0", 91 | "shebang-command": "^2.0.0", 92 | "which": "^2.0.1" 93 | } 94 | }, 95 | "deep-extend": { 96 | "version": "0.6.0", 97 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 98 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 99 | }, 100 | "dom-walk": { 101 | "version": "0.1.2", 102 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 103 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 104 | }, 105 | "end-of-stream": { 106 | "version": "1.4.4", 107 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 108 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 109 | "requires": { 110 | "once": "^1.4.0" 111 | } 112 | }, 113 | "enquirer": { 114 | "version": "2.3.6", 115 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 116 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 117 | "requires": { 118 | "ansi-colors": "^4.1.1" 119 | } 120 | }, 121 | "envinfo": { 122 | "version": "7.7.3", 123 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", 124 | "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==" 125 | }, 126 | "escape-string-regexp": { 127 | "version": "1.0.5", 128 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 129 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 130 | }, 131 | "execa": { 132 | "version": "4.1.0", 133 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", 134 | "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", 135 | "requires": { 136 | "cross-spawn": "^7.0.0", 137 | "get-stream": "^5.0.0", 138 | "human-signals": "^1.1.1", 139 | "is-stream": "^2.0.0", 140 | "merge-stream": "^2.0.0", 141 | "npm-run-path": "^4.0.0", 142 | "onetime": "^5.1.0", 143 | "signal-exit": "^3.0.2", 144 | "strip-final-newline": "^2.0.0" 145 | } 146 | }, 147 | "find-up": { 148 | "version": "4.1.0", 149 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 150 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 151 | "requires": { 152 | "locate-path": "^5.0.0", 153 | "path-exists": "^4.0.0" 154 | } 155 | }, 156 | "function-bind": { 157 | "version": "1.1.1", 158 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 159 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 160 | }, 161 | "get-stream": { 162 | "version": "5.2.0", 163 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 164 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 165 | "requires": { 166 | "pump": "^3.0.0" 167 | } 168 | }, 169 | "global": { 170 | "version": "4.4.0", 171 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 172 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 173 | "requires": { 174 | "min-document": "^2.19.0", 175 | "process": "^0.11.10" 176 | } 177 | }, 178 | "has": { 179 | "version": "1.0.3", 180 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 181 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 182 | "requires": { 183 | "function-bind": "^1.1.1" 184 | } 185 | }, 186 | "has-flag": { 187 | "version": "3.0.0", 188 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 189 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 190 | }, 191 | "human-signals": { 192 | "version": "1.1.1", 193 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 194 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" 195 | }, 196 | "import-local": { 197 | "version": "3.0.2", 198 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", 199 | "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", 200 | "requires": { 201 | "pkg-dir": "^4.2.0", 202 | "resolve-cwd": "^3.0.0" 203 | } 204 | }, 205 | "interpret": { 206 | "version": "2.2.0", 207 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", 208 | "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" 209 | }, 210 | "is-core-module": { 211 | "version": "2.0.0", 212 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", 213 | "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", 214 | "requires": { 215 | "has": "^1.0.3" 216 | } 217 | }, 218 | "is-stream": { 219 | "version": "2.0.0", 220 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 221 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" 222 | }, 223 | "isexe": { 224 | "version": "2.0.0", 225 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 226 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 227 | }, 228 | "locate-path": { 229 | "version": "5.0.0", 230 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 231 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 232 | "requires": { 233 | "p-locate": "^4.1.0" 234 | } 235 | }, 236 | "lodash": { 237 | "version": "4.17.20", 238 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 239 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 240 | }, 241 | "merge-stream": { 242 | "version": "2.0.0", 243 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 244 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 245 | }, 246 | "mimic-fn": { 247 | "version": "2.1.0", 248 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 249 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 250 | }, 251 | "min-document": { 252 | "version": "2.19.0", 253 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 254 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", 255 | "requires": { 256 | "dom-walk": "^0.1.0" 257 | } 258 | }, 259 | "npm-run-path": { 260 | "version": "4.0.1", 261 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 262 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 263 | "requires": { 264 | "path-key": "^3.0.0" 265 | } 266 | }, 267 | "once": { 268 | "version": "1.4.0", 269 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 270 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 271 | "requires": { 272 | "wrappy": "1" 273 | } 274 | }, 275 | "onetime": { 276 | "version": "5.1.2", 277 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 278 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 279 | "requires": { 280 | "mimic-fn": "^2.1.0" 281 | } 282 | }, 283 | "p-limit": { 284 | "version": "2.3.0", 285 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 286 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 287 | "requires": { 288 | "p-try": "^2.0.0" 289 | } 290 | }, 291 | "p-locate": { 292 | "version": "4.1.0", 293 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 294 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 295 | "requires": { 296 | "p-limit": "^2.2.0" 297 | } 298 | }, 299 | "p-try": { 300 | "version": "2.2.0", 301 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 302 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 303 | }, 304 | "path-exists": { 305 | "version": "4.0.0", 306 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 307 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 308 | }, 309 | "path-key": { 310 | "version": "3.1.1", 311 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 312 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 313 | }, 314 | "path-parse": { 315 | "version": "1.0.6", 316 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 317 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 318 | }, 319 | "pkg-dir": { 320 | "version": "4.2.0", 321 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 322 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 323 | "requires": { 324 | "find-up": "^4.0.0" 325 | } 326 | }, 327 | "process": { 328 | "version": "0.11.10", 329 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 330 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" 331 | }, 332 | "pump": { 333 | "version": "3.0.0", 334 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 335 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 336 | "requires": { 337 | "end-of-stream": "^1.1.0", 338 | "once": "^1.3.1" 339 | } 340 | }, 341 | "rechoir": { 342 | "version": "0.7.0", 343 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", 344 | "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", 345 | "requires": { 346 | "resolve": "^1.9.0" 347 | } 348 | }, 349 | "reduce-flatten": { 350 | "version": "2.0.0", 351 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", 352 | "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" 353 | }, 354 | "resolve": { 355 | "version": "1.18.1", 356 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", 357 | "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", 358 | "requires": { 359 | "is-core-module": "^2.0.0", 360 | "path-parse": "^1.0.6" 361 | } 362 | }, 363 | "resolve-cwd": { 364 | "version": "3.0.0", 365 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 366 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 367 | "requires": { 368 | "resolve-from": "^5.0.0" 369 | } 370 | }, 371 | "resolve-from": { 372 | "version": "5.0.0", 373 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 374 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" 375 | }, 376 | "shebang-command": { 377 | "version": "2.0.0", 378 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 379 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 380 | "requires": { 381 | "shebang-regex": "^3.0.0" 382 | } 383 | }, 384 | "shebang-regex": { 385 | "version": "3.0.0", 386 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 387 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 388 | }, 389 | "signal-exit": { 390 | "version": "3.0.3", 391 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 392 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 393 | }, 394 | "strip-final-newline": { 395 | "version": "2.0.0", 396 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 397 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" 398 | }, 399 | "supports-color": { 400 | "version": "5.5.0", 401 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 402 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 403 | "requires": { 404 | "has-flag": "^3.0.0" 405 | } 406 | }, 407 | "table-layout": { 408 | "version": "1.0.1", 409 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", 410 | "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", 411 | "requires": { 412 | "array-back": "^4.0.1", 413 | "deep-extend": "~0.6.0", 414 | "typical": "^5.2.0", 415 | "wordwrapjs": "^4.0.0" 416 | } 417 | }, 418 | "type-fest": { 419 | "version": "0.11.0", 420 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 421 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" 422 | }, 423 | "typical": { 424 | "version": "5.2.0", 425 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 426 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" 427 | }, 428 | "v8-compile-cache": { 429 | "version": "2.2.0", 430 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", 431 | "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" 432 | }, 433 | "webpack-cli": { 434 | "version": "4.1.0", 435 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.1.0.tgz", 436 | "integrity": "sha512-NdhxXMZmoik62Y05t0h1y65LjBM7BwFPq311ihXuMM3RY6dlc4KkCTyHLzTuBEc+bqq6d3xh+CWmU0xRexNJBA==", 437 | "requires": { 438 | "@webpack-cli/info": "^1.0.2", 439 | "@webpack-cli/serve": "^1.0.1", 440 | "ansi-escapes": "^4.3.1", 441 | "colorette": "^1.2.1", 442 | "command-line-usage": "^6.1.0", 443 | "commander": "^6.0.0", 444 | "enquirer": "^2.3.4", 445 | "execa": "^4.0.0", 446 | "import-local": "^3.0.2", 447 | "interpret": "^2.0.0", 448 | "rechoir": "^0.7.0", 449 | "v8-compile-cache": "^2.1.0", 450 | "webpack-merge": "^4.2.2" 451 | }, 452 | "dependencies": { 453 | "commander": { 454 | "version": "6.2.0", 455 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", 456 | "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==" 457 | } 458 | } 459 | }, 460 | "webpack-merge": { 461 | "version": "4.2.2", 462 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", 463 | "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", 464 | "requires": { 465 | "lodash": "^4.17.15" 466 | } 467 | }, 468 | "which": { 469 | "version": "2.0.2", 470 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 471 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 472 | "requires": { 473 | "isexe": "^2.0.0" 474 | } 475 | }, 476 | "wordwrapjs": { 477 | "version": "4.0.0", 478 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", 479 | "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", 480 | "requires": { 481 | "reduce-flatten": "^2.0.0", 482 | "typical": "^5.0.0" 483 | } 484 | }, 485 | "wrappy": { 486 | "version": "1.0.2", 487 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 488 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 489 | } 490 | } 491 | } 492 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@bridged.xyz/ui-labeller", 3 | "version": "0.1.0", 4 | "private": true, 5 | "license": "MIT", 6 | "description": "Bridged's UI Labelling plugin for human on figma and sketch", 7 | "workspaces": [ 8 | "packages/*", 9 | "figma", 10 | "sketch" 11 | ], 12 | "repository": "https://github.com/bridgedxyz/ui-labeller", 13 | "author": "bridged.xyz softmarshmallow ", 14 | "scripts": { 15 | "figma": "yarn workspace figma run webpack:watch", 16 | "sketch": "yarn workspace sketch run render" 17 | }, 18 | "dependencies": { 19 | "global": "^4.4.0", 20 | "webpack-cli": "^4.1.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": ["es6", "dom", "es2017"], 5 | "outDir": "dist", 6 | "jsx": "react", 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "removeComments": true, 10 | "noImplicitAny": false, 11 | "moduleResolution": "node", 12 | "typeRoots": [ 13 | "./node_modules/@types", 14 | "./node_modules/@figma" 15 | ] 16 | } 17 | } --------------------------------------------------------------------------------