From ee2cc9c2957c740c4b04ec9bc136139987192346 Mon Sep 17 00:00:00 2001 From: Sean Hamilton Date: Sat, 4 May 2019 15:55:34 +0100 Subject: [PATCH] chore(*): v1 cli release --- .eslintrc | 8 + .gitignore | 3 +- README.md | 94 +- bin/run | 3 + bin/run.cmd | 3 + config.json | 19 - index.mjs | 398 -- lib/enums/IconType.js | 10 + lib/index.js | 49 + lib/modals/Category.js | 42 + lib/modals/Icon.js | 85 + lib/parsers/FontAwesome.js | 190 + lib/static/aliases.json | 2389 ++++++++++ lib/static/categories.json | 77 + lib/static/corrections.json | 61 + lib/static/icon_sets.json | 27 + lib/tasks/BuildDist.js | 104 + lib/tasks/CleanUp.js | 33 + lib/tasks/DownloadAsset.js | 176 + lib/tasks/InitialPrompt.js | 181 + lib/util/Converter.js | 29 + lib/util/Logger.js | 14 + package-lock.json | 1818 ++++++++ package.json | 60 +- src/enums/IconType.ts | 8 + src/index.ts | 41 + src/libs/Util/Convert.mjs | 105 - src/libs/Util/Find.mjs | 32 - src/libs/Util/index.mjs | 12 - src/mapper/CategoryMap.mjs | 45 - src/mapper/IconMap.mjs | 94 - src/mapper/index.mjs | 8 - src/modals/Category.ts | 35 + src/modals/Icon.ts | 81 + src/models/Category.mjs | 67 - src/models/Icon.mjs | 126 - src/parsers/FontAwesome.ts | 266 ++ src/static/aliases.json | 2389 ++++++++++ .../static/categories.json | 31 +- {static => src/static}/corrections.json | 35 +- src/static/icon_sets.json | 27 + src/tasks/BuildDist.ts | 112 + src/tasks/CleanUp.ts | 28 + src/tasks/DownloadAsset.ts | 190 + src/tasks/InitialPrompt.ts | 224 + .../templates/icon.html.eco.liquid | 17 +- .../templates/icon.overrides.liquid | 92 +- src/templates/icon.variables.liquid | 112 + src/util/Converter.ts | 24 + src/util/Logger.ts | 11 + static/aliases.json | 4094 ----------------- templates/scripts/brandAliases.js | 20 - templates/scripts/outlineAliases.js | 20 - templates/scripts/solidAliases.js | 15 - tsconfig.json | 63 + types/global.d.ts | 1 + yarn.lock | 1502 ++++++ 57 files changed, 10654 insertions(+), 5146 deletions(-) create mode 100644 .eslintrc create mode 100644 bin/run create mode 100644 bin/run.cmd delete mode 100644 config.json delete mode 100644 index.mjs create mode 100644 lib/enums/IconType.js create mode 100644 lib/index.js create mode 100644 lib/modals/Category.js create mode 100644 lib/modals/Icon.js create mode 100644 lib/parsers/FontAwesome.js create mode 100644 lib/static/aliases.json create mode 100644 lib/static/categories.json create mode 100644 lib/static/corrections.json create mode 100644 lib/static/icon_sets.json create mode 100644 lib/tasks/BuildDist.js create mode 100644 lib/tasks/CleanUp.js create mode 100644 lib/tasks/DownloadAsset.js create mode 100644 lib/tasks/InitialPrompt.js create mode 100644 lib/util/Converter.js create mode 100644 lib/util/Logger.js create mode 100644 package-lock.json create mode 100644 src/enums/IconType.ts create mode 100644 src/index.ts delete mode 100644 src/libs/Util/Convert.mjs delete mode 100644 src/libs/Util/Find.mjs delete mode 100644 src/libs/Util/index.mjs delete mode 100644 src/mapper/CategoryMap.mjs delete mode 100644 src/mapper/IconMap.mjs delete mode 100644 src/mapper/index.mjs create mode 100644 src/modals/Category.ts create mode 100644 src/modals/Icon.ts delete mode 100644 src/models/Category.mjs delete mode 100644 src/models/Icon.mjs create mode 100644 src/parsers/FontAwesome.ts create mode 100644 src/static/aliases.json rename static/category-descriptions.json => src/static/categories.json (60%) rename {static => src/static}/corrections.json (54%) create mode 100644 src/static/icon_sets.json create mode 100644 src/tasks/BuildDist.ts create mode 100644 src/tasks/CleanUp.ts create mode 100644 src/tasks/DownloadAsset.ts create mode 100644 src/tasks/InitialPrompt.ts rename templates/icon.html.eco.crather => src/templates/icon.html.eco.liquid (92%) rename templates/icon.overrides.crather => src/templates/icon.overrides.liquid (51%) create mode 100644 src/templates/icon.variables.liquid create mode 100644 src/util/Converter.ts create mode 100644 src/util/Logger.ts delete mode 100644 static/aliases.json delete mode 100644 templates/scripts/brandAliases.js delete mode 100644 templates/scripts/outlineAliases.js delete mode 100644 templates/scripts/solidAliases.js create mode 100644 tsconfig.json create mode 100644 types/global.d.ts create mode 100644 yarn.lock diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..97aea8a --- /dev/null +++ b/.eslintrc @@ -0,0 +1,8 @@ +{ + "extends": [ + "airbnb-typescript/base" + ], + "env": { + "node": true + } +} diff --git a/.gitignore b/.gitignore index 9ad0c77..fc67a35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ # Project node_modules/ -dist/ -fontawesome* +fui-icons # OS or Editor folders .DS_Store diff --git a/README.md b/README.md index af11a53..08514b9 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,89 @@ -# [Fomantic-UI](https://github.com/fomantic/Fomantic-UI) Icon Generation Script +# [Fomantic-UI](https://github.com/fomantic/Fomantic-UI) Icon CLI Tool -Generate the `icons.overrides` and `icon.html.eco` files for Fomantic-UI and Semantic-UI. +Generate the `icon.overrides` and `icon.html.eco` files for Fomantic-UI (or Semantic-UI). You can use this script to generate the icons for free and pro versions of [FontAwesome](https://fontawesome.com). +## Requirements + - [nodejs](https://nodejs.org) + - [npm](https://npmjs.com) + - or [yarn](https://yarnpkg.com) ## Usage -First clone the repository and install the npm dependencies. +#### npm ```console -$ git clone git@github.com:fomantic/icon-script.git -$ cd icon-script -$ npm install +$ npx create-fomantic-icons ``` -Now download the latest version of FontAwesome from their website [fontawesome.com](https://fontawesome.com) (if you have a pro license you can use the pro version). +#### yarn +```console +$ yarn create fomantic-icons +``` + +Once downloaded you will be prompt with a few questions which will allow you to generate the specific icon set you want. -Once you have downloaded the latest `.zip` file extract it to the root directory of the repository. You should end up with a structure similar to the following. -```text -fontawesome-free-x.x.x-web.zip -fontawesome-free-x.x.x-web/ -node_modules/ -src/ -static/ -templates/ -index.mjs -config.json +Select which FontAweome icon set you want +```console +Which icons set would you like to generate? + > FontAwesome Free + FontAwesome Pro ``` +> NOTE: You need a license to generate the icons from FontAweome Pro -Once the FontAwesome `.zip` is extracted you can now generate the icon files, simply run `npm start` to start the generation. +Next select which version you want to use ```console -$ npm start +Which version of FontAwesome Free should we download? + > 5.8.1 + 5.8.0 + 5.7.2 + 5.7.1 + 5.7.0 ``` -Once the script has finished running you will see a new directory called `dist/` was created. This is where the `icon.overrides` and `icon.html.eco` files are created. These files are created in a directory structure the same as their main repositories, this can help transport them to the correct place. -```text -dist/ - server/ - src/ +Now you need to specify where to save your icons +```console +Where would you like the dist saved? [C:\Users\Username\Documents\fui-icons] ``` +> NOTE: The default location is `{pwd}/fui-icons`. When you specify your own location it is relative from your current pwd. +> For example if I enter `new-icons` my icons will be placed in `C:\Users\Username\Documents\new-icons`. -The `dist/server/` directory contains the `icon.html.eco` file used for the docs page. The `dist/src/` directory is the Fomantic-UI src code file. There is also another file created inside `dist/` called `icon-map.json` this is a simple JSON file containing a map of all the icons generated from the metadata. The font files are also inside `dist/src/` ready to drop into the FUI src with the correct names. -## Customization +Once you have answered all the prompts the icon set you picked will be downloaded from GitHub and will be parsed. +Once it is downloaded and parsed it will build the required files for the a FUI (or SUI) theme and the docs page in the location +you specified. +```console +i asset doesn't exist locally, starting download +√ downloaded (fontawesome-free-5.8.1-web.zip) +√ asset saved (C:\Users\Username\AppData\Local\Temp\fui-icon-script\fontawesome-free-5.8.1-web.zip) +√ asset extracted (C:\Users\Username\AppData\Local\Temp\fui-icon-script\fontawesome-free-5.8.1-web) +√ icons & categories parsed + + Results: + Solid: 936 + Outline: 151 + Thin: 0 + Brand: 426 + 1513 + +√ build all dist files + Files saved to C:\Users\Username\Documents\new-icons +``` +> NOTE: If the script detects you have already downloaded the icon set it will skip the download and use the local files. -To customize the script you can modify the files inside `templates/`, `static/` and the `config.json` file. These files can help you create custom output. The templates use [Crather](https://github.com/HamiStudios/crather) which is a simple render engine which is used to simply add the icon variables into the template files. +## Remove downloaded files + +If you want to delete the downloaded files its really simple. + +#### npm +```console +$ npx create-fomantic-icons --clean +``` + +#### yarn + +```console +$ yarn create fomantic-icons --clean +``` diff --git a/bin/run b/bin/run new file mode 100644 index 0000000..f8524a6 --- /dev/null +++ b/bin/run @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../lib/index.js').default(); diff --git a/bin/run.cmd b/bin/run.cmd new file mode 100644 index 0000000..968fc30 --- /dev/null +++ b/bin/run.cmd @@ -0,0 +1,3 @@ +@echo off + +node "%~dp0\run" %* diff --git a/config.json b/config.json deleted file mode 100644 index ce4d45e..0000000 --- a/config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "paths": { - "metadata": { - "icons": "/metadata/icons.json", - "categories": "/metadata/categories.yml" - }, - "fonts": "/webfonts/", - "templates": { - "src": "./templates/icon.overrides.crather", - "docs": "./templates/icon.html.eco.crather" - }, - "dist": { - "map": "./dist/icon-map.json", - "src": "./dist/src/themes/default/elements/icon.overrides", - "docs": "./dist/server/documents/elements/icon.html.eco", - "fonts": "./dist/src/themes/default/assets/fonts/" - } - } -} diff --git a/index.mjs b/index.mjs deleted file mode 100644 index f9dd0de..0000000 --- a/index.mjs +++ /dev/null @@ -1,398 +0,0 @@ -import fs from 'fs'; -import fse from 'fs-extra'; -import path from 'path'; -import Footstep from '@hamistudios/footstep'; -import Crather from '@hamistudios/crather'; -import inq from 'inquirer'; -import Config from './config.json'; -import Mapper from './src/mapper'; -import Icon from './src/models/Icon.mjs'; - - -const logger = new Footstep.Logger(); - -logger.clear(); - -fs.readdir('./', (err, files) => { - if (err) { - process.exit(1); - } else { - let fa = files.filter((file) => { - if (file.startsWith('fontawesome') && !file.endsWith('.zip')) { - return file; - } - return false; - }); - - let createMap = (root_path, callback) => { - fs.readFile(root_path + Config['paths']['metadata']['icons'], (err, iconContent) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - fs.readFile(root_path + Config['paths']['metadata']['categories'], (err, categoryContent) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - try { - callback(Mapper.icon( - JSON.parse(iconContent.toString()), - categoryContent.toString() - )); - } catch (err) { - logger.error(err); - process.exit(1); - } - } - }); - } - }); - }; - - let createDistFile = (data, templatePath, distPath, callback) => { - let crather = new Crather({ - data: data, - scripts: './templates/scripts' - }); - - crather.parse(templatePath, (err, result) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - let createFile = (callback) => { - fs.writeFile( - distPath, - result.getRendered(), - { encoding: 'utf8' }, - (err) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - logger.notice(`${path.basename(distPath)} file generated.`); - callback(); - } - } - ); - }; - - if (!fs.existsSync(path.dirname(distPath))) { - fse.mkdirs(path.dirname(distPath), null, (err) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - createFile(callback); - } - }); - } else { - createFile(callback); - } - } - }); - }; - - let createDistFonts = (filePath, files, distPath, callback) => { - let cpFiles = (filePath, files) => { - let rename = (file, newName) => { - fse.copySync(filePath + file, distPath + newName + path.extname(file)); - }; - - files.forEach((file) => { - if (file.startsWith('fa-brands')) { // brands - rename(file, 'brand-icons'); - } else if (file.startsWith('fa-regular')) { // outline - rename(file, 'outline-icons'); - } else if (file.startsWith('fa-solid')) { // solid - rename(file, 'icons'); - } - }); - - callback(); - }; - - if (!fs.existsSync(distPath)) { - fse.mkdirs(distPath, null, (err) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - cpFiles(filePath, files); - } - }); - } else { - cpFiles(filePath, files); - } - }; - - let generateSrc = (icons, version, callback) => { - logger.notice('Generating overrides file...'); - - let aliases = JSON.parse(fs.readFileSync('./static/aliases.json')).map((icon) => { - return new Icon( - icon.faName, - icon.fuiName, - icon.className, - icon.unicode, - icon.solid, - icon.outline, - icon.brand, - icon.categories, - [], - ); - }); - - let lists = { - solidDefinitions: [], - solidAliases: [], - outlineDefinitions: [], - outlineAliases: [], - brandsDefinitions: [], - brandAliases: [], - }; - - icons.forEach((icon) => { - if (icon.isSolid()) { - lists.solidDefinitions.push(icon); - } - - if (icon.isOutline()) { - lists.outlineDefinitions.push(icon); - } - - if (icon.isBrand()) { - lists.brandsDefinitions.push(icon); - } - }); - - aliases.forEach((icon) => { - if (icon.isSolid()) { - lists.solidAliases.push(icon); - } - - if (icon.isOutline()) { - lists.outlineAliases.push(icon); - } - - if (icon.isBrand()) { - lists.brandAliases.push(icon); - } - }); - - let totalIcons = 0; - - let addTotal = (amount) => { - totalIcons = totalIcons + amount; - - return amount; - }; - - logger - .info('Icon Count:') - .info(` Solid: ${addTotal(lists.solidDefinitions.length + lists.solidAliases.length)}`) - .info(` Outline: ${addTotal(lists.outlineDefinitions.length + lists.outlineAliases.length)}`) - .info(` Brands: ${addTotal(lists.brandsDefinitions.length + lists.brandAliases.length)}`) - .info(` ${totalIcons}`) - ; - - let css = { - solid: { - definitions: lists.solidDefinitions.map((icon) => { - return `i.icon.${icon.getClassName()}:before { content: "\\${icon.getUnicode()}"; }`; - }).join('\n'), - aliases: lists.solidAliases.map((icon) => { - return `i.icon.${icon.getClassName()}:before { content: "\\${icon.getUnicode()}"; }`; - }).join('\n'), - }, - outline: { - definitions: lists.outlineDefinitions.map((icon) => { - return `i.icon.${icon.getClassName()}:before { content: "\\${icon.getUnicode()}"; }`; - }).join('\n '), - aliases: { - font: lists.outlineAliases.map((icon) => { - return `i.icon.${icon.getClassName()}`; - }).join(',\n '), - definitions: lists.outlineAliases.map((icon) => { - return `i.icon.${icon.getClassName()}:before { content: "\\${icon.getUnicode()}"; }`; - }).join('\n '), - }, - }, - brand: { - font: lists.brandsDefinitions.map((icon) => { - return `i.icon.${icon.getClassName()}`; - }).join(',\n '), - definitions: lists.brandsDefinitions.map((icon) => { - return `i.icon.${icon.getClassName()}:before { content: "\\${icon.getUnicode()}"; }`; - }).join('\n '), - aliases: { - font: lists.brandAliases.map((icon) => { - return `i.icon.${icon.getClassName()}`; - }).join(',\n '), - definitions: lists.brandAliases.map((icon) => { - return `i.icon.${icon.getClassName()}:before { content: "\\${icon.getUnicode()}"; }`; - }).join('\n '), - }, - }, - }; - - createDistFile( - { - solid: { - definitions: css.solid.definitions, - aliases: css.solid.aliases, - }, - outline: { - definitions: css.outline.definitions, - aliases: { - font: css.outline.aliases.font, - definitions: css.outline.aliases.definitions, - }, - }, - brands: { - font: css.brand.font, - definitions: css.brand.definitions, - aliases: { - font: css.brand.aliases.font, - definitions: css.brand.aliases.definitions, - } - }, - version: version, - }, - Config['paths']['templates']['src'], - Config['paths']['dist']['src'], - callback - ); - }; - - let generateDocs = (icons, version, callback) => { - logger.notice('Generating docs page...'); - - let categories = Mapper.category(icons); - - let categoryHTML = categories.map((category) => { - let displayHTML = category.getIcons().map((icon) => { - return `
${icon.getFUIName()}
`; - }).join('\n '); - - let codeHTML = category.getIcons().map((icon) => { - return ``; - }).join('\n '); - - return `
-

${category.getFUIName()}

-

${category.getDescription()}

-
- ${displayHTML} -
-
- ${codeHTML} -
-
`; - }).join('\n\n '); - - createDistFile( - { - categories: categoryHTML, - version: version - }, - Config['paths']['templates']['docs'], - Config['paths']['dist']['docs'], - callback - ); - }; - - let start = (dir) => { - logger.notice(`Found FontAwesome directory '${dir}' gathering icon metadata...`); - - createMap(dir, (icons) => { - - if (!fs.existsSync(Config['paths']['dist']['map'])) { - fse.mkdirs(path.dirname(Config['paths']['dist']['map']), null, (err) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - fs.writeFileSync(Config['paths']['dist']['map'], JSON.stringify(icons, null, 2)); - } - }); - } else { - fs.writeFileSync(Config['paths']['dist']['map'], JSON.stringify(icons, null, 2)); - } - - logger.notice('Icon map generated.'); - - let version = dir.match(/\d+\.\d+\.\d+/)[0]; - - generateSrc(icons, version, () => { - generateDocs(icons, version, () => { - - logger.notice('Renaming font files...'); - - let fontPath = dir + Config['paths']['fonts']; - - fs.readdir( - fontPath, - null, - (err, files) => { - if (err) { - logger.error(err); - process.exit(1); - } else { - createDistFonts( - fontPath, - files, - Config['paths']['dist']['fonts'], - () => { - logger - .notice('Font files renamed.') - .notice('Script ran successfully.'.green) - ; - } - ); - } - } - ); - }); - }); - }); - }; - - if (fa.length === 1) { - let dir = fa[0]; - - start(dir); - } else if (fa.length > 1) { - fa = fa.reverse(); - - inq.prompt([ - { - type: 'list', - name: 'dir', - message: 'Choose which FontAwesome directory you want to use', - default: fa[0], - choices: fa, - } - ]) - .then((answers) => { - let dir = answers.dir; - - start(dir); - }) - .catch((err) => { - logger.error(err); - process.exit(1); - }); - } else { - logger.error('No FontAwesome directories found.'); - process.exit(1); - } - } -}); - - -// // execute icon map -// import Icons from './src/IconMap.mjs'; -// -// console.log(Icons); diff --git a/lib/enums/IconType.js b/lib/enums/IconType.js new file mode 100644 index 0000000..7684047 --- /dev/null +++ b/lib/enums/IconType.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var IconType; +(function (IconType) { + IconType["SOLID"] = "solid"; + IconType["OUTLINE"] = "outline"; + IconType["THIN"] = "thin"; + IconType["BRAND"] = "brand"; +})(IconType || (IconType = {})); +exports.default = IconType; diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..cf8f972 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,49 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// tasks +var InitialPrompt_1 = __importDefault(require("./tasks/InitialPrompt")); +var DownloadAsset_1 = __importDefault(require("./tasks/DownloadAsset")); +var BuildDist_1 = __importDefault(require("./tasks/BuildDist")); +var CleanUp_1 = __importDefault(require("./tasks/CleanUp")); +// utils +var Logger_1 = __importDefault(require("./util/Logger")); +function run() { + if (process.argv.includes('--clean')) { + CleanUp_1.default() + .then(function () { + process.exit(0); + }); + } + else { + InitialPrompt_1.default() + .then(function (results) { + DownloadAsset_1.default(results) + .then(function (paths) { + Promise.resolve().then(function () { return __importStar(require("./parsers/" + results.iconSet.parser)); }).then(function (Parser) { + Parser.default(results, paths) + .then(function (parseResults) { + BuildDist_1.default(results, parseResults) + .then(function () { + process.exit(0); + }); + }); + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + }); + }); + } +} +exports.default = run; diff --git a/lib/modals/Category.js b/lib/modals/Category.js new file mode 100644 index 0000000..960ff62 --- /dev/null +++ b/lib/modals/Category.js @@ -0,0 +1,42 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// static +var categories_json_1 = __importDefault(require("../static/categories.json")); +var Category = /** @class */ (function () { + function Category(data) { + this.data = data; + } + Object.defineProperty(Category.prototype, "rawName", { + get: function () { + return this.data.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Category.prototype, "name", { + get: function () { + return this.data.label; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Category.prototype, "description", { + get: function () { + return categories_json_1.default[this.rawName]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Category.prototype, "icons", { + get: function () { + return this.data.icons; + }, + enumerable: true, + configurable: true + }); + return Category; +}()); +exports.default = Category; diff --git a/lib/modals/Icon.js b/lib/modals/Icon.js new file mode 100644 index 0000000..25abce5 --- /dev/null +++ b/lib/modals/Icon.js @@ -0,0 +1,85 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// utils +var Converter_1 = __importDefault(require("../util/Converter")); +// enums +var IconType_1 = __importDefault(require("../enums/IconType")); +// static +var corrections_json_1 = __importDefault(require("../static/corrections.json")); +var Icon = /** @class */ (function () { + function Icon(data) { + this.data = data; + } + Icon.prototype.hasCorrection = function (field) { + var iconCorrection = corrections_json_1.default[this.rawName]; + if (iconCorrection !== undefined) { + return iconCorrection[field] !== undefined; + } + return false; + }; + Icon.prototype.correction = function (field) { + return this.hasCorrection(field) + ? corrections_json_1.default[this.rawName][field] + : ''; + }; + Object.defineProperty(Icon.prototype, "rawName", { + get: function () { + return this.data.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Icon.prototype, "name", { + get: function () { + var name = this.data.name; + if (this.type === IconType_1.default.OUTLINE) { + name += '-outline'; + } + if (this.type === IconType_1.default.THIN) { + name += '-thin'; + } + return this.hasCorrection('name') + ? this.correction('name') + : Converter_1.default.iconName(name); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Icon.prototype, "className", { + get: function () { + return this.hasCorrection('className') + ? this.correction('className') + : Converter_1.default.iconClassName(this.name); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Icon.prototype, "unicode", { + get: function () { + return this.hasCorrection('unicode') + ? this.correction('unicode') + : "\\" + this.data.unicode; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Icon.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Icon.prototype, "searchTerms", { + get: function () { + return this.data.searchTerms.join(', '); + }, + enumerable: true, + configurable: true + }); + return Icon; +}()); +exports.default = Icon; diff --git a/lib/parsers/FontAwesome.js b/lib/parsers/FontAwesome.js new file mode 100644 index 0000000..401d9f7 --- /dev/null +++ b/lib/parsers/FontAwesome.js @@ -0,0 +1,190 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// node +var path_1 = require("path"); +// npm +var fse = __importStar(require("fs-extra")); +var js_yaml_1 = require("js-yaml"); +var chalk_1 = __importDefault(require("chalk")); +// utils +var Logger_1 = __importStar(require("../util/Logger")); +// modals +var Icon_1 = __importDefault(require("../modals/Icon")); +var Category_1 = __importDefault(require("../modals/Category")); +// enums +var IconType_1 = __importDefault(require("../enums/IconType")); +// static +var aliases_json_1 = __importDefault(require("../static/aliases.json")); +function parse(results, paths) { + return new Promise(function (resolve) { + var asset = results.asset; + var parseSpinner = Logger_1.spinner() + .start('parsing icons'); + var fontAwesomeDirectoryName = results.iconSet.name.toLowerCase() + .replace(/\s/g, '-'); + var fontAwesomeDirectory = fontAwesomeDirectoryName + "-" + asset.version + "-web"; + var iconsMetadataFilePath = path_1.resolve(paths.assetDirectoryPath, fontAwesomeDirectory, 'metadata', 'icons.json'); + var categoriesFilePath = path_1.resolve(paths.assetDirectoryPath, fontAwesomeDirectory, 'metadata', 'categories.yml'); + fse.readFile(iconsMetadataFilePath, function (iconsErr, iconsData) { + if (!iconsErr) { + var iconMetadata_1 = JSON.parse(iconsData.toString()); + var iconNames = Object.keys(iconMetadata_1); + var icons_1 = []; + var categories_1 = []; + iconNames.forEach(function (iconName) { + var iconMeta = iconMetadata_1[iconName]; + if (!iconMeta.private) { + // solid + if (iconMeta.styles.includes('solid')) { + icons_1.push(new Icon_1.default({ + name: iconName, + type: IconType_1.default.SOLID, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + // outline + if (iconMeta.styles.includes('regular')) { + icons_1.push(new Icon_1.default({ + name: iconName, + type: IconType_1.default.OUTLINE, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + // thin + if (iconMeta.styles.includes('light')) { + icons_1.push(new Icon_1.default({ + name: iconName, + type: IconType_1.default.THIN, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + // brand + if (iconMeta.styles.includes('brands')) { + icons_1.push(new Icon_1.default({ + name: iconName, + type: IconType_1.default.BRAND, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + } + }); + var sortAz_1 = function (a, b) { + if (a.name < b.name) + return -1; + if (a.name > b.name) + return 1; + return 0; + }; + icons_1 = icons_1.sort(sortAz_1); + parseSpinner.text = 'parsing categories'; + fse.readFile(categoriesFilePath, function (categoriesErr, categoriesData) { + if (!categoriesErr) { + var categoriesMetadata_1 = js_yaml_1.safeLoad(categoriesData.toString()); + var categoryNames = Object.keys(categoriesMetadata_1); + categoryNames.forEach(function (categoryName) { + var categoryMeta = categoriesMetadata_1[categoryName]; + var categoryIcons = []; + categoryMeta.icons.forEach(function (iconName) { + icons_1.filter(function (i) { return i.rawName === iconName; }) + .forEach(function (icon) { + categoryIcons.push(icon); + }); + }); + categories_1.push(new Category_1.default({ + name: categoryName, + label: categoryMeta.label, + icons: categoryIcons.sort(sortAz_1), + })); + }); + categories_1 = categories_1 + .sort(sortAz_1); + categories_1.push(new Category_1.default({ + name: 'brands', + label: 'Brands', + icons: icons_1 + .filter(function (i) { return i.type === IconType_1.default.BRAND; }) + .sort(sortAz_1), + })); + var parseResults = { + icons: { + solid: icons_1.filter(function (i) { return i.type === IconType_1.default.SOLID; }), + outline: icons_1.filter(function (i) { return i.type === IconType_1.default.OUTLINE; }), + thin: icons_1.filter(function (i) { return i.type === IconType_1.default.THIN; }), + brand: icons_1.filter(function (i) { return i.type === IconType_1.default.BRAND; }), + }, + categories: categories_1, + }; + var _a = parseResults.icons, solidIcons = _a.solid, outlineIcons = _a.outline, thinIcons = _a.thin, brandIcons = _a.brand; + var totalIcons = solidIcons.length + outlineIcons.length + + thinIcons.length + brandIcons.length; + parseSpinner.succeed('icons & categories parsed'); + Logger_1.default.log(); + Logger_1.default.log(chalk_1.default.cyan(' Results:')); + Logger_1.default.log(" Solid: " + chalk_1.default.cyan(String(solidIcons.length))); + Logger_1.default.log(" Outline: " + chalk_1.default.cyan(String(outlineIcons.length))); + Logger_1.default.log(" Thin: " + chalk_1.default.cyan(String(thinIcons.length))); + Logger_1.default.log(" Brand: " + chalk_1.default.cyan(String(brandIcons.length))); + Logger_1.default.log(" " + chalk_1.default.cyan(String(totalIcons))); + resolve({ + icons: { + solid: { + icons: solidIcons, + aliases: aliases_json_1.default.filter(function (alias) { return alias.type === 'solid'; }) + .sort(sortAz_1), + }, + outline: { + icons: outlineIcons, + aliases: aliases_json_1.default.filter(function (alias) { return alias.type === 'outline'; }) + .sort(sortAz_1), + }, + thin: { + icons: thinIcons, + aliases: aliases_json_1.default.filter(function (alias) { return alias.type === 'thin'; }) + .sort(sortAz_1), + }, + brand: { + icons: brandIcons, + aliases: aliases_json_1.default.filter(function (alias) { return alias.type === 'brand'; }) + .sort(sortAz_1), + }, + }, + categories: categories_1, + fontAssetsDirectory: path_1.resolve(paths.assetDirectoryPath, fontAwesomeDirectory, 'webfonts'), + fontFileNames: { + 'fa-solid-900': 'icons', + 'fa-regular-400': 'outline-icons', + 'fa-light-300': 'thin-icons', + 'fa-brands-400': 'brand-icons', + }, + }); + } + else { + parseSpinner.stop(); + Logger_1.default.error(categoriesErr); + process.exit(1); + } + }); + } + else { + parseSpinner.stop(); + Logger_1.default.error(iconsErr); + process.exit(1); + } + }); + }); +} +exports.default = parse; diff --git a/lib/static/aliases.json b/lib/static/aliases.json new file mode 100644 index 0000000..609c072 --- /dev/null +++ b/lib/static/aliases.json @@ -0,0 +1,2389 @@ +[ + { + "rawName": "chess-rock", + "name": "chess rock", + "className": "chess.rock", + "unicode": "\\f447", + "type": "solid" + }, + { + "rawName": "ordered-list", + "name": "ordered list", + "className": "ordered.list", + "unicode": "\\f0cb", + "type": "solid" + }, + { + "rawName": "unordered-list", + "name": "unordered list", + "className": "unordered.list", + "unicode": "\\f0ca", + "type": "solid" + }, + { + "rawName": "user-doctor", + "name": "user doctor", + "className": "user.doctor", + "unicode": "\\f0f0", + "type": "solid" + }, + { + "rawName": "shield", + "name": "shield", + "className": "shield", + "unicode": "\\f3ed", + "type": "solid" + }, + { + "rawName": "puzzle", + "name": "puzzle", + "className": "puzzle", + "unicode": "\\f12e", + "type": "solid" + }, + { + "rawName": "credit-card-amazon-pay", + "name": "credit card amazon pay", + "className": "credit.card.amazon.pay", + "unicode": "\\f42d", + "type": "brand" + }, + { + "rawName": "credit-card-american-express", + "name": "credit card american express", + "className": "credit.card.american.express", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "credit-card-diners-club", + "name": "credit card diners club", + "className": "credit.card.diners.club", + "unicode": "\\f24c", + "type": "brand" + }, + { + "rawName": "credit-card-discover", + "name": "credit card discover", + "className": "credit.card.discover", + "unicode": "\\f1f2", + "type": "brand" + }, + { + "rawName": "credit-card-jcb", + "name": "credit card jcb", + "className": "credit.card.jcb", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "credit-card-mastercard", + "name": "credit card mastercard", + "className": "credit.card.mastercard", + "unicode": "\\f1f1", + "type": "brand" + }, + { + "rawName": "credit-card-paypal", + "name": "credit card paypal", + "className": "credit.card.paypal", + "unicode": "\\f1f4", + "type": "brand" + }, + { + "rawName": "credit-card-stripe", + "name": "credit card stripe", + "className": "credit.card.stripe", + "unicode": "\\f1f5", + "type": "brand" + }, + { + "rawName": "credit-card-visa", + "name": "credit card visa", + "className": "credit.card.visa", + "unicode": "\\f1f0", + "type": "brand" + }, + { + "rawName": "add-circle", + "name": "add circle", + "className": "add.circle", + "unicode": "\\f055", + "type": "solid" + }, + { + "rawName": "add-square", + "name": "add square", + "className": "add.square", + "unicode": "\\f0fe", + "type": "solid" + }, + { + "rawName": "add-to-calendar", + "name": "add to calendar", + "className": "add.to.calendar", + "unicode": "\\f271", + "type": "solid" + }, + { + "rawName": "add-to-cart", + "name": "add to cart", + "className": "add.to.cart", + "unicode": "\\f217", + "type": "solid" + }, + { + "rawName": "add-user", + "name": "add user", + "className": "add.user", + "unicode": "\\f234", + "type": "solid" + }, + { + "rawName": "add", + "name": "add", + "className": "add", + "unicode": "\\f067", + "type": "solid" + }, + { + "rawName": "alarm-mute", + "name": "alarm mute", + "className": "alarm.mute", + "unicode": "\\f1f6", + "type": "solid" + }, + { + "rawName": "alarm", + "name": "alarm", + "className": "alarm", + "unicode": "\\f0f3", + "type": "solid" + }, + { + "rawName": "ald", + "name": "ald", + "className": "ald", + "unicode": "\\f2a2", + "type": "solid" + }, + { + "rawName": "als", + "name": "als", + "className": "als", + "unicode": "\\f2a2", + "type": "solid" + }, + { + "rawName": "american-express-card", + "name": "american express card", + "className": "american.express.card", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "american-express", + "name": "american express", + "className": "american.express", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "amex", + "name": "amex", + "className": "amex", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "announcement", + "name": "announcement", + "className": "announcement", + "unicode": "\\f0a1", + "type": "solid" + }, + { + "rawName": "area-chart", + "name": "area chart", + "className": "area.chart", + "unicode": "\\f1fe", + "type": "solid" + }, + { + "rawName": "area-graph", + "name": "area graph", + "className": "area.graph", + "unicode": "\\f1fe", + "type": "solid" + }, + { + "rawName": "arrow-down-cart", + "name": "arrow down cart", + "className": "arrow.down.cart", + "unicode": "\\f218", + "type": "solid" + }, + { + "rawName": "asexual", + "name": "asexual", + "className": "asexual", + "unicode": "\\f22d", + "type": "solid" + }, + { + "rawName": "asl-interpreting", + "name": "asl interpreting", + "className": "asl.interpreting", + "unicode": "\\f2a3", + "type": "solid" + }, + { + "rawName": "asl", + "name": "asl", + "className": "asl", + "unicode": "\\f2a3", + "type": "solid" + }, + { + "rawName": "assistive-listening-devices", + "name": "assistive listening devices", + "className": "assistive.listening.devices", + "unicode": "\\f2a2", + "type": "solid" + }, + { + "rawName": "attach", + "name": "attach", + "className": "attach", + "unicode": "\\f0c6", + "type": "solid" + }, + { + "rawName": "attention", + "name": "attention", + "className": "attention", + "unicode": "\\f06a", + "type": "solid" + }, + { + "rawName": "balance", + "name": "balance", + "className": "balance", + "unicode": "\\f24e", + "type": "solid" + }, + { + "rawName": "bar", + "name": "bar", + "className": "bar", + "unicode": "\\f0fc", + "type": "solid" + }, + { + "rawName": "bathtub", + "name": "bathtub", + "className": "bathtub", + "unicode": "\\f2cd", + "type": "solid" + }, + { + "rawName": "battery-four", + "name": "battery four", + "className": "battery.four", + "unicode": "\\f240", + "type": "solid" + }, + { + "rawName": "battery-high", + "name": "battery high", + "className": "battery.high", + "unicode": "\\f241", + "type": "solid" + }, + { + "rawName": "battery-low", + "name": "battery low", + "className": "battery.low", + "unicode": "\\f243", + "type": "solid" + }, + { + "rawName": "battery-medium", + "name": "battery medium", + "className": "battery.medium", + "unicode": "\\f242", + "type": "solid" + }, + { + "rawName": "battery-one", + "name": "battery one", + "className": "battery.one", + "unicode": "\\f243", + "type": "solid" + }, + { + "rawName": "battery-three", + "name": "battery three", + "className": "battery.three", + "unicode": "\\f241", + "type": "solid" + }, + { + "rawName": "battery-two", + "name": "battery two", + "className": "battery.two", + "unicode": "\\f242", + "type": "solid" + }, + { + "rawName": "battery-zero", + "name": "battery zero", + "className": "battery.zero", + "unicode": "\\f244", + "type": "solid" + }, + { + "rawName": "birthday", + "name": "birthday", + "className": "birthday", + "unicode": "\\f1fd", + "type": "solid" + }, + { + "rawName": "block-layout", + "name": "block layout", + "className": "block.layout", + "unicode": "\\f009", + "type": "solid" + }, + { + "rawName": "bluetooth-alternative", + "name": "bluetooth alternative", + "className": "bluetooth.alternative", + "unicode": "\\f294", + "type": "brand" + }, + { + "rawName": "broken-chain", + "name": "broken chain", + "className": "broken.chain", + "unicode": "\\f127", + "type": "solid" + }, + { + "rawName": "browser", + "name": "browser", + "className": "browser", + "unicode": "\\f022", + "type": "solid" + }, + { + "rawName": "call-square", + "name": "call square", + "className": "call.square", + "unicode": "\\f098", + "type": "solid" + }, + { + "rawName": "call", + "name": "call", + "className": "call", + "unicode": "\\f095", + "type": "solid" + }, + { + "rawName": "cancel", + "name": "cancel", + "className": "cancel", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "cart", + "name": "cart", + "className": "cart", + "unicode": "\\f07a", + "type": "solid" + }, + { + "rawName": "cc", + "name": "cc", + "className": "cc", + "unicode": "\\f20a", + "type": "solid" + }, + { + "rawName": "chain", + "name": "chain", + "className": "chain", + "unicode": "\\f0c1", + "type": "solid" + }, + { + "rawName": "chat", + "name": "chat", + "className": "chat", + "unicode": "\\f075", + "type": "solid" + }, + { + "rawName": "checked-calendar", + "name": "checked calendar", + "className": "checked.calendar", + "unicode": "\\f274", + "type": "solid" + }, + { + "rawName": "checkmark", + "name": "checkmark", + "className": "checkmark", + "unicode": "\\f00c", + "type": "solid" + }, + { + "rawName": "circle-notched", + "name": "circle notched", + "className": "circle.notched", + "unicode": "\\f1ce", + "type": "solid" + }, + { + "rawName": "close", + "name": "close", + "className": "close", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "cny", + "name": "cny", + "className": "cny", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "cocktail", + "name": "cocktail", + "className": "cocktail", + "unicode": "\\f000", + "type": "solid" + }, + { + "rawName": "commenting", + "name": "commenting", + "className": "commenting", + "unicode": "\\f27a", + "type": "solid" + }, + { + "rawName": "computer", + "name": "computer", + "className": "computer", + "unicode": "\\f108", + "type": "solid" + }, + { + "rawName": "configure", + "name": "configure", + "className": "configure", + "unicode": "\\f0ad", + "type": "solid" + }, + { + "rawName": "content", + "name": "content", + "className": "content", + "unicode": "\\f0c9", + "type": "solid" + }, + { + "rawName": "deafness", + "name": "deafness", + "className": "deafness", + "unicode": "\\f2a4", + "type": "solid" + }, + { + "rawName": "delete-calendar", + "name": "delete calendar", + "className": "delete.calendar", + "unicode": "\\f273", + "type": "solid" + }, + { + "rawName": "delete", + "name": "delete", + "className": "delete", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "detective", + "name": "detective", + "className": "detective", + "unicode": "\\f21b", + "type": "solid" + }, + { + "rawName": "diners-club-card", + "name": "diners club card", + "className": "diners.club.card", + "unicode": "\\f24c", + "type": "brand" + }, + { + "rawName": "diners-club", + "name": "diners club", + "className": "diners.club", + "unicode": "\\f24c", + "type": "brand" + }, + { + "rawName": "discover-card", + "name": "discover card", + "className": "discover.card", + "unicode": "\\f1f2", + "type": "brand" + }, + { + "rawName": "discover", + "name": "discover", + "className": "discover", + "unicode": "\\f1f2", + "type": "brand" + }, + { + "rawName": "discussions", + "name": "discussions", + "className": "discussions", + "unicode": "\\f086", + "type": "solid" + }, + { + "rawName": "doctor", + "name": "doctor", + "className": "doctor", + "unicode": "\\f0f0", + "type": "solid" + }, + { + "rawName": "dollar", + "name": "dollar", + "className": "dollar", + "unicode": "\\f155", + "type": "solid" + }, + { + "rawName": "dont", + "name": "dont", + "className": "dont", + "unicode": "\\f05e", + "type": "solid" + }, + { + "rawName": "dribble", + "name": "dribble", + "className": "dribble", + "unicode": "\\f17d", + "type": "brand" + }, + { + "rawName": "drivers-license", + "name": "drivers license", + "className": "drivers.license", + "unicode": "\\f2c2", + "type": "solid" + }, + { + "rawName": "dropdown", + "name": "dropdown", + "className": "dropdown", + "unicode": "\\f0d7", + "type": "solid" + }, + { + "rawName": "eercast", + "name": "eercast", + "className": "eercast", + "unicode": "\\f2da", + "type": "brand" + }, + { + "rawName": "emergency", + "name": "emergency", + "className": "emergency", + "unicode": "\\f0f9", + "type": "solid" + }, + { + "rawName": "envira-gallery", + "name": "envira gallery", + "className": "envira.gallery", + "unicode": "\\f299", + "type": "brand" + }, + { + "rawName": "erase", + "name": "erase", + "className": "erase", + "unicode": "\\f12d", + "type": "solid" + }, + { + "rawName": "eur", + "name": "eur", + "className": "eur", + "unicode": "\\f153", + "type": "solid" + }, + { + "rawName": "euro", + "name": "euro", + "className": "euro", + "unicode": "\\f153", + "type": "solid" + }, + { + "rawName": "eyedropper", + "name": "eyedropper", + "className": "eyedropper", + "unicode": "\\f1fb", + "type": "solid" + }, + { + "rawName": "fa", + "name": "fa", + "className": "fa", + "unicode": "\\f2b4", + "type": "brand" + }, + { + "rawName": "factory", + "name": "factory", + "className": "factory", + "unicode": "\\f275", + "type": "solid" + }, + { + "rawName": "favorite", + "name": "favorite", + "className": "favorite", + "unicode": "\\f005", + "type": "solid" + }, + { + "rawName": "feed", + "name": "feed", + "className": "feed", + "unicode": "\\f09e", + "type": "solid" + }, + { + "rawName": "female-homosexual", + "name": "female homosexual", + "className": "female.homosexual", + "unicode": "\\f226", + "type": "solid" + }, + { + "rawName": "file-text", + "name": "file text", + "className": "file.text", + "unicode": "\\f15c", + "type": "solid" + }, + { + "rawName": "find", + "name": "find", + "className": "find", + "unicode": "\\f1e5", + "type": "solid" + }, + { + "rawName": "first-aid", + "name": "first aid", + "className": "first.aid", + "unicode": "\\f0fa", + "type": "solid" + }, + { + "rawName": "five-hundred-pixels", + "name": "five hundred pixels", + "className": "five.hundred.pixels", + "unicode": "\\f26e", + "type": "brand" + }, + { + "rawName": "fork", + "name": "fork", + "className": "fork", + "unicode": "\\f126", + "type": "solid" + }, + { + "rawName": "game", + "name": "game", + "className": "game", + "unicode": "\\f11b", + "type": "solid" + }, + { + "rawName": "gay", + "name": "gay", + "className": "gay", + "unicode": "\\f227", + "type": "solid" + }, + { + "rawName": "gbp", + "name": "gbp", + "className": "gbp", + "unicode": "\\f154", + "type": "solid" + }, + { + "rawName": "gittip", + "name": "gittip", + "className": "gittip", + "unicode": "\\f184", + "type": "brand" + }, + { + "rawName": "google-plus-circle", + "name": "google plus circle", + "className": "google.plus.circle", + "unicode": "\\f2b3", + "type": "brand" + }, + { + "rawName": "google-plus-official", + "name": "google plus official", + "className": "google.plus.official", + "unicode": "\\f2b3", + "type": "brand" + }, + { + "rawName": "grab", + "name": "grab", + "className": "grab", + "unicode": "\\f255", + "type": "solid" + }, + { + "rawName": "graduation", + "name": "graduation", + "className": "graduation", + "unicode": "\\f19d", + "type": "solid" + }, + { + "rawName": "grid-layout", + "name": "grid layout", + "className": "grid.layout", + "unicode": "\\f00a", + "type": "solid" + }, + { + "rawName": "group", + "name": "group", + "className": "group", + "unicode": "\\f0c0", + "type": "solid" + }, + { + "rawName": "h", + "name": "h", + "className": "h", + "unicode": "\\f0fd", + "type": "solid" + }, + { + "rawName": "hand-victory", + "name": "hand victory", + "className": "hand.victory", + "unicode": "\\f25b", + "type": "solid" + }, + { + "rawName": "handicap", + "name": "handicap", + "className": "handicap", + "unicode": "\\f193", + "type": "solid" + }, + { + "rawName": "hard-of-hearing", + "name": "hard of hearing", + "className": "hard.of.hearing", + "unicode": "\\f2a4", + "type": "solid" + }, + { + "rawName": "header", + "name": "header", + "className": "header", + "unicode": "\\f1dc", + "type": "solid" + }, + { + "rawName": "help-circle", + "name": "help circle", + "className": "help.circle", + "unicode": "\\f059", + "type": "solid" + }, + { + "rawName": "help", + "name": "help", + "className": "help", + "unicode": "\\f128", + "type": "solid" + }, + { + "rawName": "heterosexual", + "name": "heterosexual", + "className": "heterosexual", + "unicode": "\\f228", + "type": "solid" + }, + { + "rawName": "hide", + "name": "hide", + "className": "hide", + "unicode": "\\f070", + "type": "solid" + }, + { + "rawName": "hotel", + "name": "hotel", + "className": "hotel", + "unicode": "\\f236", + "type": "solid" + }, + { + "rawName": "hourglass-four", + "name": "hourglass four", + "className": "hourglass.four", + "unicode": "\\f254", + "type": "solid" + }, + { + "rawName": "hourglass-full", + "name": "hourglass full", + "className": "hourglass.full", + "unicode": "\\f254", + "type": "solid" + }, + { + "rawName": "hourglass-one", + "name": "hourglass one", + "className": "hourglass.one", + "unicode": "\\f251", + "type": "solid" + }, + { + "rawName": "hourglass-three", + "name": "hourglass three", + "className": "hourglass.three", + "unicode": "\\f253", + "type": "solid" + }, + { + "rawName": "hourglass-two", + "name": "hourglass two", + "className": "hourglass.two", + "unicode": "\\f252", + "type": "solid" + }, + { + "rawName": "idea", + "name": "idea", + "className": "idea", + "unicode": "\\f0eb", + "type": "solid" + }, + { + "rawName": "ils", + "name": "ils", + "className": "ils", + "unicode": "\\f20b", + "type": "solid" + }, + { + "rawName": "in-cart", + "name": "in cart", + "className": "in.cart", + "unicode": "\\f218", + "type": "solid" + }, + { + "rawName": "inr", + "name": "inr", + "className": "inr", + "unicode": "\\f156", + "type": "solid" + }, + { + "rawName": "intergender", + "name": "intergender", + "className": "intergender", + "unicode": "\\f224", + "type": "solid" + }, + { + "rawName": "intersex", + "name": "intersex", + "className": "intersex", + "unicode": "\\f224", + "type": "solid" + }, + { + "rawName": "japan-credit-bureau-card", + "name": "japan credit bureau card", + "className": "japan.credit.bureau.card", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "japan-credit-bureau", + "name": "japan credit bureau", + "className": "japan.credit.bureau", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "jcb", + "name": "jcb", + "className": "jcb", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "jpy", + "name": "jpy", + "className": "jpy", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "krw", + "name": "krw", + "className": "krw", + "unicode": "\\f159", + "type": "solid" + }, + { + "rawName": "lab", + "name": "lab", + "className": "lab", + "unicode": "\\f0c3", + "type": "solid" + }, + { + "rawName": "law", + "name": "law", + "className": "law", + "unicode": "\\f24e", + "type": "solid" + }, + { + "rawName": "legal", + "name": "legal", + "className": "legal", + "unicode": "\\f0e3", + "type": "solid" + }, + { + "rawName": "lesbian", + "name": "lesbian", + "className": "lesbian", + "unicode": "\\f226", + "type": "solid" + }, + { + "rawName": "lightning", + "name": "lightning", + "className": "lightning", + "unicode": "\\f0e7", + "type": "solid" + }, + { + "rawName": "like", + "name": "like", + "className": "like", + "unicode": "\\f004", + "type": "solid" + }, + { + "rawName": "line-graph", + "name": "line graph", + "className": "line.graph", + "unicode": "\\f201", + "type": "solid" + }, + { + "rawName": "linkedin-square", + "name": "linkedin square", + "className": "linkedin.square", + "unicode": "\\f08c", + "type": "brand" + }, + { + "rawName": "linkify", + "name": "linkify", + "className": "linkify", + "unicode": "\\f0c1", + "type": "solid" + }, + { + "rawName": "lira", + "name": "lira", + "className": "lira", + "unicode": "\\f195", + "type": "solid" + }, + { + "rawName": "list-layout", + "name": "list layout", + "className": "list.layout", + "unicode": "\\f00b", + "type": "solid" + }, + { + "rawName": "magnify", + "name": "magnify", + "className": "magnify", + "unicode": "\\f00e", + "type": "solid" + }, + { + "rawName": "mail-forward", + "name": "mail forward", + "className": "mail.forward", + "unicode": "\\f064", + "type": "solid" + }, + { + "rawName": "mail-square", + "name": "mail square", + "className": "mail.square", + "unicode": "\\f199", + "type": "solid" + }, + { + "rawName": "mail", + "name": "mail", + "className": "mail", + "unicode": "\\f0e0", + "type": "solid" + }, + { + "rawName": "male-homosexual", + "name": "male homosexual", + "className": "male.homosexual", + "unicode": "\\f227", + "type": "solid" + }, + { + "rawName": "man", + "name": "man", + "className": "man", + "unicode": "\\f222", + "type": "solid" + }, + { + "rawName": "marker", + "name": "marker", + "className": "marker", + "unicode": "\\f041", + "type": "solid" + }, + { + "rawName": "mars-alternate", + "name": "mars alternate", + "className": "mars.alternate", + "unicode": "\\f229", + "type": "solid" + }, + { + "rawName": "mars-horizontal", + "name": "mars horizontal", + "className": "mars.horizontal", + "unicode": "\\f22b", + "type": "solid" + }, + { + "rawName": "mars-vertical", + "name": "mars vertical", + "className": "mars.vertical", + "unicode": "\\f22a", + "type": "solid" + }, + { + "rawName": "mastercard-card", + "name": "mastercard card", + "className": "mastercard.card", + "unicode": "\\f1f1", + "type": "brand" + }, + { + "rawName": "mastercard", + "name": "mastercard", + "className": "mastercard", + "unicode": "\\f1f1", + "type": "brand" + }, + { + "rawName": "microsoft-edge", + "name": "microsoft edge", + "className": "microsoft.edge", + "unicode": "\\f282", + "type": "brand" + }, + { + "rawName": "military", + "name": "military", + "className": "military", + "unicode": "\\f0fb", + "type": "solid" + }, + { + "rawName": "ms-edge", + "name": "ms edge", + "className": "ms.edge", + "unicode": "\\f282", + "type": "brand" + }, + { + "rawName": "mute", + "name": "mute", + "className": "mute", + "unicode": "\\f131", + "type": "solid" + }, + { + "rawName": "new-pied-piper", + "name": "new pied piper", + "className": "new.pied.piper", + "unicode": "\\f2ae", + "type": "brand" + }, + { + "rawName": "non-binary-transgender", + "name": "non binary transgender", + "className": "non.binary.transgender", + "unicode": "\\f223", + "type": "solid" + }, + { + "rawName": "numbered-list", + "name": "numbered list", + "className": "numbered.list", + "unicode": "\\f0cb", + "type": "solid" + }, + { + "rawName": "optinmonster", + "name": "optinmonster", + "className": "optinmonster", + "unicode": "\\f23c", + "type": "brand" + }, + { + "rawName": "options", + "name": "options", + "className": "options", + "unicode": "\\f1de", + "type": "solid" + }, + { + "rawName": "other-gender-horizontal", + "name": "other gender horizontal", + "className": "other.gender.horizontal", + "unicode": "\\f22b", + "type": "solid" + }, + { + "rawName": "other-gender-vertical", + "name": "other gender vertical", + "className": "other.gender.vertical", + "unicode": "\\f22a", + "type": "solid" + }, + { + "rawName": "other-gender", + "name": "other gender", + "className": "other.gender", + "unicode": "\\f229", + "type": "solid" + }, + { + "rawName": "payment", + "name": "payment", + "className": "payment", + "unicode": "\\f09d", + "type": "solid" + }, + { + "rawName": "paypal-card", + "name": "paypal card", + "className": "paypal.card", + "unicode": "\\f1f4", + "type": "brand" + }, + { + "rawName": "pencil-square", + "name": "pencil square", + "className": "pencil.square", + "unicode": "\\f14b", + "type": "solid" + }, + { + "rawName": "photo", + "name": "photo", + "className": "photo", + "unicode": "\\f030", + "type": "solid" + }, + { + "rawName": "picture", + "name": "picture", + "className": "picture", + "unicode": "\\f03e", + "type": "solid" + }, + { + "rawName": "pie-chart", + "name": "pie chart", + "className": "pie.chart", + "unicode": "\\f200", + "type": "solid" + }, + { + "rawName": "pie-graph", + "name": "pie graph", + "className": "pie.graph", + "unicode": "\\f200", + "type": "solid" + }, + { + "rawName": "pied-piper-hat", + "name": "pied piper hat", + "className": "pied.piper.hat", + "unicode": "\\f2ae", + "type": "brand" + }, + { + "rawName": "pin", + "name": "pin", + "className": "pin", + "unicode": "\\f08d", + "type": "solid" + }, + { + "rawName": "plus-cart", + "name": "plus cart", + "className": "plus.cart", + "unicode": "\\f217", + "type": "solid" + }, + { + "rawName": "pocket", + "name": "pocket", + "className": "pocket", + "unicode": "\\f265", + "type": "brand" + }, + { + "rawName": "point", + "name": "point", + "className": "point", + "unicode": "\\f041", + "type": "solid" + }, + { + "rawName": "pointing-down", + "name": "pointing down", + "className": "pointing.down", + "unicode": "\\f0a7", + "type": "solid" + }, + { + "rawName": "pointing-left", + "name": "pointing left", + "className": "pointing.left", + "unicode": "\\f0a5", + "type": "solid" + }, + { + "rawName": "pointing-right", + "name": "pointing right", + "className": "pointing.right", + "unicode": "\\f0a4", + "type": "solid" + }, + { + "rawName": "pointing-up", + "name": "pointing up", + "className": "pointing.up", + "unicode": "\\f0a6", + "type": "solid" + }, + { + "rawName": "pound", + "name": "pound", + "className": "pound", + "unicode": "\\f154", + "type": "solid" + }, + { + "rawName": "power-cord", + "name": "power cord", + "className": "power.cord", + "unicode": "\\f1e6", + "type": "solid" + }, + { + "rawName": "power", + "name": "power", + "className": "power", + "unicode": "\\f011", + "type": "solid" + }, + { + "rawName": "privacy", + "name": "privacy", + "className": "privacy", + "unicode": "\\f084", + "type": "solid" + }, + { + "rawName": "r-circle", + "name": "r circle", + "className": "r.circle", + "unicode": "\\f25d", + "type": "solid" + }, + { + "rawName": "rain", + "name": "rain", + "className": "rain", + "unicode": "\\f0e9", + "type": "solid" + }, + { + "rawName": "record", + "name": "record", + "className": "record", + "unicode": "\\f03d", + "type": "solid" + }, + { + "rawName": "refresh", + "name": "refresh", + "className": "refresh", + "unicode": "\\f021", + "type": "solid" + }, + { + "rawName": "remove-circle", + "name": "remove circle", + "className": "remove.circle", + "unicode": "\\f057", + "type": "solid" + }, + { + "rawName": "remove-from-calendar", + "name": "remove from calendar", + "className": "remove.from.calendar", + "unicode": "\\f272", + "type": "solid" + }, + { + "rawName": "remove-user", + "name": "remove user", + "className": "remove.user", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "remove", + "name": "remove", + "className": "remove", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "repeat", + "name": "repeat", + "className": "repeat", + "unicode": "\\f01e", + "type": "solid" + }, + { + "rawName": "rmb", + "name": "rmb", + "className": "rmb", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "rouble", + "name": "rouble", + "className": "rouble", + "unicode": "\\f158", + "type": "solid" + }, + { + "rawName": "rub", + "name": "rub", + "className": "rub", + "unicode": "\\f158", + "type": "solid" + }, + { + "rawName": "ruble", + "name": "ruble", + "className": "ruble", + "unicode": "\\f158", + "type": "solid" + }, + { + "rawName": "rupee", + "name": "rupee", + "className": "rupee", + "unicode": "\\f156", + "type": "solid" + }, + { + "rawName": "s15", + "name": "s15", + "className": "s15", + "unicode": "\\f2cd", + "type": "solid" + }, + { + "rawName": "selected-radio", + "name": "selected radio", + "className": "selected.radio", + "unicode": "\\f192", + "type": "solid" + }, + { + "rawName": "send", + "name": "send", + "className": "send", + "unicode": "\\f1d8", + "type": "solid" + }, + { + "rawName": "setting", + "name": "setting", + "className": "setting", + "unicode": "\\f013", + "type": "solid" + }, + { + "rawName": "settings", + "name": "settings", + "className": "settings", + "unicode": "\\f085", + "type": "solid" + }, + { + "rawName": "shekel", + "name": "shekel", + "className": "shekel", + "unicode": "\\f20b", + "type": "solid" + }, + { + "rawName": "sheqel", + "name": "sheqel", + "className": "sheqel", + "unicode": "\\f20b", + "type": "solid" + }, + { + "rawName": "shipping", + "name": "shipping", + "className": "shipping", + "unicode": "\\f0d1", + "type": "solid" + }, + { + "rawName": "shop", + "name": "shop", + "className": "shop", + "unicode": "\\f07a", + "type": "solid" + }, + { + "rawName": "shuffle", + "name": "shuffle", + "className": "shuffle", + "unicode": "\\f074", + "type": "solid" + }, + { + "rawName": "shutdown", + "name": "shutdown", + "className": "shutdown", + "unicode": "\\f011", + "type": "solid" + }, + { + "rawName": "sidebar", + "name": "sidebar", + "className": "sidebar", + "unicode": "\\f0c9", + "type": "solid" + }, + { + "rawName": "signing", + "name": "signing", + "className": "signing", + "unicode": "\\f2a7", + "type": "solid" + }, + { + "rawName": "signup", + "name": "signup", + "className": "signup", + "unicode": "\\f044", + "type": "solid" + }, + { + "rawName": "sliders", + "name": "sliders", + "className": "sliders", + "unicode": "\\f1de", + "type": "solid" + }, + { + "rawName": "soccer", + "name": "soccer", + "className": "soccer", + "unicode": "\\f1e3", + "type": "solid" + }, + { + "rawName": "sort-alphabet-ascending", + "name": "sort alphabet ascending", + "className": "sort.alphabet.ascending", + "unicode": "\\f15d", + "type": "solid" + }, + { + "rawName": "sort-alphabet-descending", + "name": "sort alphabet descending", + "className": "sort.alphabet.descending", + "unicode": "\\f15e", + "type": "solid" + }, + { + "rawName": "sort-ascending", + "name": "sort ascending", + "className": "sort.ascending", + "unicode": "\\f0de", + "type": "solid" + }, + { + "rawName": "sort-content-ascending", + "name": "sort content ascending", + "className": "sort.content.ascending", + "unicode": "\\f160", + "type": "solid" + }, + { + "rawName": "sort-content-descending", + "name": "sort content descending", + "className": "sort.content.descending", + "unicode": "\\f161", + "type": "solid" + }, + { + "rawName": "sort-descending", + "name": "sort descending", + "className": "sort.descending", + "unicode": "\\f0dd", + "type": "solid" + }, + { + "rawName": "sort-numeric-ascending", + "name": "sort numeric ascending", + "className": "sort.numeric.ascending", + "unicode": "\\f162", + "type": "solid" + }, + { + "rawName": "sort-numeric-descending", + "name": "sort numeric descending", + "className": "sort.numeric.descending", + "unicode": "\\f163", + "type": "solid" + }, + { + "rawName": "sound", + "name": "sound", + "className": "sound", + "unicode": "\\f025", + "type": "solid" + }, + { + "rawName": "spy", + "name": "spy", + "className": "spy", + "unicode": "\\f21b", + "type": "solid" + }, + { + "rawName": "stripe-card", + "name": "stripe card", + "className": "stripe.card", + "unicode": "\\f1f5", + "type": "brand" + }, + { + "rawName": "student", + "name": "student", + "className": "student", + "unicode": "\\f19d", + "type": "solid" + }, + { + "rawName": "talk", + "name": "talk", + "className": "talk", + "unicode": "\\f27a", + "type": "solid" + }, + { + "rawName": "target", + "name": "target", + "className": "target", + "unicode": "\\f140", + "type": "solid" + }, + { + "rawName": "teletype", + "name": "teletype", + "className": "teletype", + "unicode": "\\f1e4", + "type": "solid" + }, + { + "rawName": "television", + "name": "television", + "className": "television", + "unicode": "\\f26c", + "type": "solid" + }, + { + "rawName": "text-cursor", + "name": "text cursor", + "className": "text.cursor", + "unicode": "\\f246", + "type": "solid" + }, + { + "rawName": "text-telephone", + "name": "text telephone", + "className": "text.telephone", + "unicode": "\\f1e4", + "type": "solid" + }, + { + "rawName": "theme-isle", + "name": "theme isle", + "className": "theme.isle", + "unicode": "\\f2b2", + "type": "brand" + }, + { + "rawName": "theme", + "name": "theme", + "className": "theme", + "unicode": "\\f043", + "type": "solid" + }, + { + "rawName": "thermometer", + "name": "thermometer", + "className": "thermometer", + "unicode": "\\f2c7", + "type": "solid" + }, + { + "rawName": "thumb-tack", + "name": "thumb tack", + "className": "thumb.tack", + "unicode": "\\f08d", + "type": "solid" + }, + { + "rawName": "time", + "name": "time", + "className": "time", + "unicode": "\\f017", + "type": "solid" + }, + { + "rawName": "tm", + "name": "tm", + "className": "tm", + "unicode": "\\f25c", + "type": "solid" + }, + { + "rawName": "toggle-down", + "name": "toggle down", + "className": "toggle.down", + "unicode": "\\f150", + "type": "solid" + }, + { + "rawName": "toggle-left", + "name": "toggle left", + "className": "toggle.left", + "unicode": "\\f191", + "type": "solid" + }, + { + "rawName": "toggle-right", + "name": "toggle right", + "className": "toggle.right", + "unicode": "\\f152", + "type": "solid" + }, + { + "rawName": "toggle-up", + "name": "toggle up", + "className": "toggle.up", + "unicode": "\\f151", + "type": "solid" + }, + { + "rawName": "translate", + "name": "translate", + "className": "translate", + "unicode": "\\f1ab", + "type": "solid" + }, + { + "rawName": "travel", + "name": "travel", + "className": "travel", + "unicode": "\\f0b1", + "type": "solid" + }, + { + "rawName": "treatment", + "name": "treatment", + "className": "treatment", + "unicode": "\\f0f1", + "type": "solid" + }, + { + "rawName": "triangle-down", + "name": "triangle down", + "className": "triangle.down", + "unicode": "\\f0d7", + "type": "solid" + }, + { + "rawName": "triangle-left", + "name": "triangle left", + "className": "triangle.left", + "unicode": "\\f0d9", + "type": "solid" + }, + { + "rawName": "triangle-right", + "name": "triangle right", + "className": "triangle.right", + "unicode": "\\f0da", + "type": "solid" + }, + { + "rawName": "triangle-up", + "name": "triangle up", + "className": "triangle.up", + "unicode": "\\f0d8", + "type": "solid" + }, + { + "rawName": "try", + "name": "try", + "className": "try", + "unicode": "\\f195", + "type": "solid" + }, + { + "rawName": "unhide", + "name": "unhide", + "className": "unhide", + "unicode": "\\f06e", + "type": "solid" + }, + { + "rawName": "unlinkify", + "name": "unlinkify", + "className": "unlinkify", + "unicode": "\\f127", + "type": "solid" + }, + { + "rawName": "unmute", + "name": "unmute", + "className": "unmute", + "unicode": "\\f130", + "type": "solid" + }, + { + "rawName": "usd", + "name": "usd", + "className": "usd", + "unicode": "\\f155", + "type": "solid" + }, + { + "rawName": "user-cancel", + "name": "user cancel", + "className": "user.cancel", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "user-close", + "name": "user close", + "className": "user.close", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "user-delete", + "name": "user delete", + "className": "user.delete", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "user-x", + "name": "user x", + "className": "user.x", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "vcard", + "name": "vcard", + "className": "vcard", + "unicode": "\\f2bb", + "type": "solid" + }, + { + "rawName": "video-camera", + "name": "video camera", + "className": "video.camera", + "unicode": "\\f03d", + "type": "solid" + }, + { + "rawName": "video-play", + "name": "video play", + "className": "video.play", + "unicode": "\\f144", + "type": "solid" + }, + { + "rawName": "visa-card", + "name": "visa card", + "className": "visa.card", + "unicode": "\\f1f0", + "type": "brand" + }, + { + "rawName": "visa", + "name": "visa", + "className": "visa", + "unicode": "\\f1f0", + "type": "brand" + }, + { + "rawName": "volume-control-phone", + "name": "volume control phone", + "className": "volume.control.phone", + "unicode": "\\f2a0", + "type": "solid" + }, + { + "rawName": "wait", + "name": "wait", + "className": "wait", + "unicode": "\\f017", + "type": "solid" + }, + { + "rawName": "warning-circle", + "name": "warning circle", + "className": "warning.circle", + "unicode": "\\f06a", + "type": "solid" + }, + { + "rawName": "warning-sign", + "name": "warning sign", + "className": "warning.sign", + "unicode": "\\f071", + "type": "solid" + }, + { + "rawName": "warning", + "name": "warning", + "className": "warning", + "unicode": "\\f12a", + "type": "solid" + }, + { + "rawName": "wechat", + "name": "wechat", + "className": "wechat", + "unicode": "\\f1d7", + "type": "brand" + }, + { + "rawName": "wi-fi", + "name": "wi fi", + "className": "wi.fi", + "unicode": "\\f1eb", + "type": "solid" + }, + { + "rawName": "wikipedia", + "name": "wikipedia", + "className": "wikipedia", + "unicode": "\\f266", + "type": "brand" + }, + { + "rawName": "winner", + "name": "winner", + "className": "winner", + "unicode": "\\f091", + "type": "solid" + }, + { + "rawName": "wizard", + "name": "wizard", + "className": "wizard", + "unicode": "\\f0d0", + "type": "solid" + }, + { + "rawName": "woman", + "name": "woman", + "className": "woman", + "unicode": "\\f221", + "type": "solid" + }, + { + "rawName": "won", + "name": "won", + "className": "won", + "unicode": "\\f159", + "type": "solid" + }, + { + "rawName": "wordpress-beginner", + "name": "wordpress beginner", + "className": "wordpress.beginner", + "unicode": "\\f297", + "type": "brand" + }, + { + "rawName": "wordpress-forms", + "name": "wordpress forms", + "className": "wordpress.forms", + "unicode": "\\f298", + "type": "brand" + }, + { + "rawName": "world", + "name": "world", + "className": "world", + "unicode": "\\f0ac", + "type": "solid" + }, + { + "rawName": "write-square", + "name": "write square", + "className": "write.square", + "unicode": "\\f14b", + "type": "solid" + }, + { + "rawName": "x", + "name": "x", + "className": "x", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "yc", + "name": "yc", + "className": "yc", + "unicode": "\\f23b", + "type": "brand" + }, + { + "rawName": "ycombinator", + "name": "ycombinator", + "className": "ycombinator", + "unicode": "\\f23b", + "type": "brand" + }, + { + "rawName": "yen", + "name": "yen", + "className": "yen", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "zip", + "name": "zip", + "className": "zip", + "unicode": "\\f187", + "type": "solid" + }, + { + "rawName": "zoom-in", + "name": "zoom in", + "className": "zoom.in", + "unicode": "\\f00e", + "type": "solid" + }, + { + "rawName": "zoom-out", + "name": "zoom out", + "className": "zoom.out", + "unicode": "\\f010", + "type": "solid" + }, + { + "rawName": "zoom", + "name": "zoom", + "className": "zoom", + "unicode": "\\f00e", + "type": "solid" + }, + { + "rawName": "bitbucket-square", + "name": "bitbucket square", + "className": "bitbucket.square", + "unicode": "\\f171", + "type": "brand" + }, + { + "rawName": "checkmark-box", + "name": "checkmark box", + "className": "checkmark.box", + "unicode": "\\f14a", + "type": "solid" + }, + { + "rawName": "circle-thin", + "name": "circle thin", + "className": "circle.thin", + "unicode": "\\f111", + "type": "solid" + }, + { + "rawName": "cloud-download", + "name": "cloud download", + "className": "cloud.download", + "unicode": "\\f381", + "type": "solid" + }, + { + "rawName": "cloud-upload", + "name": "cloud upload", + "className": "cloud.upload", + "unicode": "\\f382", + "type": "solid" + }, + { + "rawName": "compose", + "name": "compose", + "className": "compose", + "unicode": "\\f303", + "type": "solid" + }, + { + "rawName": "conversation", + "name": "conversation", + "className": "conversation", + "unicode": "\\f086", + "type": "solid" + }, + { + "rawName": "credit-card-alternative", + "name": "credit card alternative", + "className": "credit.card.alternative", + "unicode": "\\f09d", + "type": "solid" + }, + { + "rawName": "currency", + "name": "currency", + "className": "currency", + "unicode": "\\f3d1", + "type": "solid" + }, + { + "rawName": "dashboard", + "name": "dashboard", + "className": "dashboard", + "unicode": "\\f3fd", + "type": "solid" + }, + { + "rawName": "diamond", + "name": "diamond", + "className": "diamond", + "unicode": "\\f3a5", + "type": "solid" + }, + { + "rawName": "disk-outline", + "name": "disk outline", + "className": "disk.outline", + "unicode": "\\f369", + "type": "brand" + }, + { + "rawName": "disk", + "name": "disk", + "className": "disk", + "unicode": "\\f0a0", + "type": "solid" + }, + { + "rawName": "exchange", + "name": "exchange", + "className": "exchange", + "unicode": "\\f362", + "type": "solid" + }, + { + "rawName": "external-share", + "name": "external share", + "className": "external.share", + "unicode": "\\f14d", + "type": "solid" + }, + { + "rawName": "external-square", + "name": "external square", + "className": "external.square", + "unicode": "\\f360", + "type": "solid" + }, + { + "rawName": "external", + "name": "external", + "className": "external", + "unicode": "\\f35d", + "type": "solid" + }, + { + "rawName": "facebook-official", + "name": "facebook official", + "className": "facebook.official", + "unicode": "\\f082", + "type": "brand" + }, + { + "rawName": "food", + "name": "food", + "className": "food", + "unicode": "\\f2e7", + "type": "solid" + }, + { + "rawName": "heart-empty", + "name": "heart empty", + "className": "heart.empty", + "unicode": "\\f004", + "type": "solid" + }, + { + "rawName": "hourglass-zero", + "name": "hourglass zero", + "className": "hourglass.zero", + "unicode": "\\f253", + "type": "solid" + }, + { + "rawName": "level-down", + "name": "level down", + "className": "level.down", + "unicode": "\\f3be", + "type": "solid" + }, + { + "rawName": "level-up", + "name": "level up", + "className": "level.up", + "unicode": "\\f3bf", + "type": "solid" + }, + { + "rawName": "log-out", + "name": "log out", + "className": "log.out", + "unicode": "\\f2f5", + "type": "solid" + }, + { + "rawName": "meanpath", + "name": "meanpath", + "className": "meanpath", + "unicode": "\\f0c8", + "type": "solid" + }, + { + "rawName": "money", + "name": "money", + "className": "money", + "unicode": "\\f3d1", + "type": "solid" + }, + { + "rawName": "move", + "name": "move", + "className": "move", + "unicode": "\\f0b2", + "type": "solid" + }, + { + "rawName": "pencil", + "name": "pencil", + "className": "pencil", + "unicode": "\\f303", + "type": "solid" + }, + { + "rawName": "protect", + "name": "protect", + "className": "protect", + "unicode": "\\f023", + "type": "solid" + }, + { + "rawName": "radio", + "name": "radio", + "className": "radio", + "unicode": "\\f192", + "type": "solid" + }, + { + "rawName": "remove-bookmark", + "name": "remove bookmark", + "className": "remove.bookmark", + "unicode": "\\f02e", + "type": "solid" + }, + { + "rawName": "resize-horizontal", + "name": "resize horizontal", + "className": "resize.horizontal", + "unicode": "\\f337", + "type": "solid" + }, + { + "rawName": "resize-vertical", + "name": "resize vertical", + "className": "resize.vertical", + "unicode": "\\f338", + "type": "solid" + }, + { + "rawName": "sign-in", + "name": "sign in", + "className": "sign.in", + "unicode": "\\f2f6", + "type": "solid" + }, + { + "rawName": "sign-out", + "name": "sign out", + "className": "sign.out", + "unicode": "\\f2f5", + "type": "solid" + }, + { + "rawName": "spoon", + "name": "spoon", + "className": "spoon", + "unicode": "\\f2e5", + "type": "solid" + }, + { + "rawName": "star-empty", + "name": "star empty", + "className": "star.empty", + "unicode": "\\f005", + "type": "solid" + }, + { + "rawName": "star-half-empty", + "name": "star half empty", + "className": "star.half.empty", + "unicode": "\\f089", + "type": "solid" + }, + { + "rawName": "star-half-full", + "name": "star half full", + "className": "star.half.full", + "unicode": "\\f089", + "type": "solid" + }, + { + "rawName": "ticket", + "name": "ticket", + "className": "ticket", + "unicode": "\\f3ff", + "type": "solid" + }, + { + "rawName": "times-rectangle", + "name": "times rectangle", + "className": "times.rectangle", + "unicode": "\\f410", + "type": "solid" + }, + { + "rawName": "write", + "name": "write", + "className": "write", + "unicode": "\\f303", + "type": "solid" + }, + { + "rawName": "youtube-play", + "name": "youtube play", + "className": "youtube.play", + "unicode": "\\f167", + "type": "brand" + }, + { + "rawName": "bars", + "name": "hamburger", + "className": "hamburger", + "unicode": "\\f0c9", + "type": "solid" + } +] diff --git a/lib/static/categories.json b/lib/static/categories.json new file mode 100644 index 0000000..aec37b5 --- /dev/null +++ b/lib/static/categories.json @@ -0,0 +1,77 @@ +{ + "accessibility": "Icons can represent accessibility standards", + "alert": "Icons which can alert users to an action or information", + "animals": "Icons can represent animals", + "arrows": "Icons can be used to indicate a direction", + "audio-video": "Icons can be used to represent common ways to interact with audio and video", + "automotive": "Icons can represent vehicles and automotive activities", + "autumn": "Icons which represent the Autumn season", + "beverage": "Icons which represent types of beverages", + "buildings": "Icons can represent common building types", + "business": "Icons can be used to represent business and common business actions", + "camping": "Icons which represent camping activities and equipment", + "charity": "Icons can represent common charity activities", + "chat": "Icons can represent common chat symbols and actions", + "chess": "Icons which represent the game chess", + "childhood": "Icons which represent childhood activities", + "clothing": "Icons which represent types of clothing", + "code": "Icons can represent programming and programming tools", + "communication": "Icons which represent common ways of communication", + "computers": "Icons can represent computing devices, or types of content found on a computer", + "construction": "Icons which represent construction activities", + "currency": "Icons can represent units of currency", + "date-time": "Icons that represent common ways of showing date and time", + "design": "Icons can represent common design related symbols or techniques", + "editors": "Icons can represent text editors and common editor actions", + "education": "Icons can represent education types and activities", + "emoji": "Icons which represent emoji's", + "energy": "Icons which represent energy equipment, types and status", + "files": "Icons can represent elements of a computer and its file system", + "finance": "Icons which represent financial activities", + "fitness": "Icons which represent fitness activities", + "food": "Icons which represent food", + "fruit-vegetable": "Icons which represent fruit and vegetables", + "games": "Icons which represent gaming equipment and platforms", + "gender": "Icons can represent genders or types of sexuality", + "halloween": "Icons which represent Halloween", + "hands": "Icons can represent hand signals and gestures", + "health": "Icons which represent common health symbols", + "holiday": "Icons which represent holiday items", + "hotel": "Icons which represent hotel items and utilities", + "household": "Icons which represent household items and utilities", + "images": "Icons that represent common image symbols and actions", + "interfaces": "Icons can represent common actions a user can take or use", + "logistics": "Icons can represent common logistic activity", + "maps": "Icons can be used to represent elements on a map", + "maritime": "Icons which represent maritime tools and activities", + "marketing": "Icons can represent marketing materials and symbols", + "mathematics": "Icons which represent common mathematic symbols", + "medical": "Icons can represent common medical actions", + "moving": "Icons can represent moving activities", + "music": "Icons which represent musical instruments, items and platforms", + "objects": "Icons can be used to represent common objects", + "payments-shopping": "Icons can represent common forms of payment and shopping actions", + "pharmacy": "Icons which represent pharmaceutical items and activities", + "political": "Icons which represent political activities and actions", + "religion": "Icons which represent religious activities and symbols", + "science": "Icons which represent science activities and items", + "science-fiction": "Icons which represent science fiction story items", + "security": "Icons which represent security items and activities", + "shapes": "Icons can be used to create shapes", + "shopping": "Icons which represent shopping activities and actions", + "social": "Icons which represent social actions", + "spinners": "Icons can represent loading", + "sports": "Icons which represent sports", + "spring": "Icons which represent spring activities", + "status": "Icons can represent different states", + "summer": "Icons which represent summer activities", + "gaming-tabletop": "Icons which represent table-top games", + "toggle": "Icons which represent toggling an action", + "travel": "Icons which represent traveling activities", + "users-people": "Icons can represent users or people", + "vehicles": "Icons can represent vehicles or transport", + "weather": "Icons which represent the weather", + "winter": "Icons which represent winter activities", + "writing": "Icons can represent writing and editing", + "brands": "Icons can represent logos to common brands" +} diff --git a/lib/static/corrections.json b/lib/static/corrections.json new file mode 100644 index 0000000..46b72f9 --- /dev/null +++ b/lib/static/corrections.json @@ -0,0 +1,61 @@ +{ + "accessible-icon": { + "name": "accessible", + "className": "accessible" + }, + "500px": { + "className": "\\35 00px" + }, + "vimeo-v": { + "name": "vimeo v", + "className": "vimeo.v" + }, + "red-river": { + "name": "redriver", + "className": "redriver" + }, + "external-link-alt": { + "name": "external alternate", + "className": "external.alternate" + }, + "link": { + "name": "linkify", + "className": "linkify" + }, + "line": { + "name": "linechat", + "className": "linechat" + }, + "apple-alt": { + "name": "fruit-apple", + "className": "fruit-apple" + }, + "less": { + "name": "lesscss", + "className": "lesscss" + }, + "truck-loading": { + "name": "truck packing", + "className": "truck.packing" + }, + "tablet-android": { + "name": "android-tablet", + "className": "android-tablet" + }, + "tablet-android-alt": { + "name": "android-tablet alternate", + "className": "android-tablet.alternate" + }, + "mobile-android": { + "name": "android-mobile", + "className": "android-mobile" + }, + "mobile-android-alt": { + "name": "android-mobile alternate", + "className": "android-mobile.alternate" + }, + "the-red-yeti": { + "name": "redyeti", + "className": "redyeti" + } +} diff --git a/lib/static/icon_sets.json b/lib/static/icon_sets.json new file mode 100644 index 0000000..00cf7f8 --- /dev/null +++ b/lib/static/icon_sets.json @@ -0,0 +1,27 @@ +[ + { + "name": "FontAwesome Free", + "repo": "FortAwesome/Font-Awesome", + "requiresAuth": false, + "assetMatch": "fontawesome-free-\\d+\\.\\d+\\.\\d+-web\\.zip", + "parser": "FontAwesome", + "types": [ + "solid", + "outline", + "brand" + ] + }, + { + "name": "FontAwesome Pro", + "repo": "FortAwesome/Font-Awesome-Pro", + "requiresAuth": true, + "assetMatch": "fontawesome-pro-\\d+\\.\\d+\\.\\d+-web\\.zip", + "parser": "FontAwesome", + "types": [ + "solid", + "outline", + "light", + "brand" + ] + } +] diff --git a/lib/tasks/BuildDist.js b/lib/tasks/BuildDist.js new file mode 100644 index 0000000..86ad31d --- /dev/null +++ b/lib/tasks/BuildDist.js @@ -0,0 +1,104 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// node +var path_1 = require("path"); +// npm +var liquidjs_1 = __importDefault(require("liquidjs")); +var fse = __importStar(require("fs-extra")); +// utils +var Logger_1 = __importStar(require("../util/Logger")); +function run(results, parseResults) { + return new Promise(function (resolve) { + Logger_1.default.log(); + var distSpinner = Logger_1.spinner() + .start('building dist'); + var engine = new liquidjs_1.default({ + root: path_1.resolve(__dirname, '../../src/templates'), + extname: '.liquid', + }); + var ctx = parseResults; + ctx.version = results.asset.version; + var distFiles = { + 'icon.html.eco': 'docs/server/documents/elements/', + 'icon.overrides': 'ui/src/themes/default/elements/', + 'icon.variables': 'ui/src/themes/default/elements/', + }; + var templateFileRenderFuncs = Object.keys(distFiles) + .map(function (filename) { return new Promise(function (resolveRender, rejectRender) { + engine.renderFile(filename + ".liquid", ctx) + .then(function (renderResult) { + var fileOutputDirectory = path_1.resolve(results.distPath, distFiles[filename]); + fse.mkdirp(fileOutputDirectory) + .then(function () { + fse.writeFile(path_1.resolve(fileOutputDirectory, filename), renderResult) + .then(function () { return resolveRender(); }) + .catch(rejectRender); + }) + .catch(rejectRender); + }) + .catch(rejectRender); + }); }); + var copyAssetsFunc = new Promise(function (resolveAssetCopy, rejectAssetCopy) { + fse.readdir(parseResults.fontAssetsDirectory) + .then(function (files) { + var copiedFiles = 0; + var copied = function () { + copiedFiles += 1; + if (copiedFiles >= files.length) { + resolveAssetCopy(); + } + }; + var distPath = path_1.resolve(results.distPath, 'ui/src/themes/default/assets/fonts'); + fse.mkdirp(distPath) + .then(function () { + files.forEach(function (file) { + var filenameSplit = file.split('.'); + var newFileName = parseResults.fontFileNames[filenameSplit[0]] + "." + filenameSplit[1]; + var assetFilePath = path_1.resolve(parseResults.fontAssetsDirectory, file); + var assetDistPath = path_1.resolve(distPath, newFileName); + fse.copyFile(assetFilePath, assetDistPath) + .then(function () { + copied(); + }) + .catch(rejectAssetCopy); + }); + }) + .catch(rejectAssetCopy); + }) + .catch(rejectAssetCopy); + }); + fse.mkdirp(results.distPath) + .then(function () { + Promise + .all(templateFileRenderFuncs.concat([ + copyAssetsFunc, + ])) + .then(function () { + distSpinner.succeed('build all dist files'); + Logger_1.default.log(" Files saved to " + results.distPath); + resolve(); + }) + .catch(function (err) { + distSpinner.stop(); + Logger_1.default.error(err); + process.exit(1); + }); + }) + .catch(function (err) { + distSpinner.stop(); + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.default = run; diff --git a/lib/tasks/CleanUp.js b/lib/tasks/CleanUp.js new file mode 100644 index 0000000..bbb55a1 --- /dev/null +++ b/lib/tasks/CleanUp.js @@ -0,0 +1,33 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// node +var path_1 = require("path"); +var os_1 = require("os"); +// npm +var fse = __importStar(require("fs-extra")); +// utils +var Logger_1 = __importStar(require("../util/Logger")); +function run() { + return new Promise(function (resolve) { + Logger_1.default.log(); + var cleanUpSpinner = Logger_1.spinner() + .start('cleaning up asset files'); + fse.remove(path_1.resolve(os_1.tmpdir(), 'fui-icon-script')) + .then(function () { + cleanUpSpinner.succeed('all assets cleaned up'); + resolve(); + }) + .catch(function (err) { + cleanUpSpinner.stop(); + Logger_1.default.error(err); + }); + }); +} +exports.default = run; diff --git a/lib/tasks/DownloadAsset.js b/lib/tasks/DownloadAsset.js new file mode 100644 index 0000000..0ee044c --- /dev/null +++ b/lib/tasks/DownloadAsset.js @@ -0,0 +1,176 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// node +var path_1 = require("path"); +var os_1 = require("os"); +// npm +var axios_1 = __importDefault(require("axios")); +var fse = __importStar(require("fs-extra")); +var unzipper_1 = require("unzipper"); +// utils +var Logger_1 = __importStar(require("../util/Logger")); +function extractAsset(asset, filePath) { + return new Promise(function (resolve) { + var extractSpinner = Logger_1.spinner() + .start("extracting asset zip (" + asset.name + ")"); + var assetDirectory = path_1.resolve(os_1.tmpdir(), 'fui-icon-script', asset.name + .split('.').slice(0, -1).join('.')); + var assetReadStream = fse.createReadStream(filePath); + assetReadStream + .pipe(unzipper_1.Extract({ + path: assetDirectory, + })); + assetReadStream + .once('error', function (err) { + extractSpinner.stop(); + Logger_1.default.error(err); + process.exit(1); + }); + assetReadStream + .once('close', function () { + extractSpinner.succeed("asset extracted (" + assetDirectory + ")"); + resolve(assetDirectory); + }); + }); +} +exports.extractAsset = extractAsset; +function saveAssetFile(asset, data) { + return new Promise(function (resolve) { + var saveSpinner = Logger_1.spinner() + .start("saving asset (" + asset.name + ")"); + var filePath = path_1.resolve(os_1.tmpdir(), 'fui-icon-script', asset.name); + fse.outputFile(filePath, data, function (saveErr) { + if (!saveErr) { + saveSpinner.succeed("asset saved (" + filePath + ")"); + resolve(filePath); + } + else { + saveSpinner.stop(); + Logger_1.default.error(saveErr); + process.exit(1); + } + }); + }); +} +exports.saveAssetFile = saveAssetFile; +function downloadAsset(results) { + return new Promise(function (resolve) { + var asset = results.asset; + var downloadSpinner = Logger_1.spinner() + .start("downloading (" + asset.name + ")"); + var axiosConfig = { + responseType: 'arraybuffer', + headers: { + Accept: 'application/octet-stream', + 'User-Agent': 'request-module', + }, + encoding: null, + }; + if (results.iconSet.requiresAuth) { + axiosConfig.headers.Authorization = "token " + results.accessToken; + } + var apiDownloadUrl = "https://" + results.accessToken + ":@api.github.com/repos/" + results.iconSet.repo + "/releases/assets/" + results.asset.id; + var isDownloading = true; + var downloadTextTimer = setTimeout(function () { + if (isDownloading) { + downloadSpinner.text = downloadSpinner.text + " [still downloading, hold on]"; + } + }, 1000 * 120 /* 2mins */); + axios_1.default + .get(apiDownloadUrl, axiosConfig) + .then(function (_a) { + var data = _a.data, status = _a.status; + isDownloading = false; + clearTimeout(downloadTextTimer); + if (status === 200) { + downloadSpinner.succeed("downloaded (" + asset.name + ")"); + resolve(data); + } + else { + downloadSpinner.stop(); + Logger_1.default.error(new Error('Failed to download asset file.')); + process.exit(1); + } + }) + .catch(function (err) { + downloadSpinner.stop(); + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.downloadAsset = downloadAsset; +function startDownload(results) { + return new Promise(function (resolve) { + downloadAsset(results) + .then(function (downloadData) { + saveAssetFile(results.asset, downloadData) + .then(function (assetFilePath) { + extractAsset(results.asset, assetFilePath) + .then(function (assetDirectoryPath) { + resolve({ + assetFilePath: assetFilePath, + assetDirectoryPath: assetDirectoryPath, + }); + }); + }); + }); + }); +} +exports.startDownload = startDownload; +function run(results) { + return new Promise(function (resolve) { + Logger_1.default.log(); + var assetCheckSpinner = Logger_1.spinner() + .start('checking if asset already exists'); + var assetFilePath = path_1.resolve(os_1.tmpdir(), 'fui-icon-script', results.asset.name); + var assetDirectoryPath = path_1.resolve(os_1.tmpdir(), 'fui-icon-script', results.asset.name + .split('.').slice(0, -1).join('.')); + fse.pathExists(assetFilePath) + .then(function (assetExists) { + if (assetExists) { + fse.pathExists(assetFilePath) + .then(function (directoryExists) { + if (directoryExists) { + assetCheckSpinner.succeed('asset already exists'); + resolve({ + assetFilePath: assetFilePath, + assetDirectoryPath: assetDirectoryPath, + }); + } + else { + assetCheckSpinner.info('asset doesn\'t exist locally, starting download') + .stop(); + startDownload(results) + .then(resolve); + } + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + } + else { + assetCheckSpinner.info('asset doesn\'t exist locally, starting download') + .stop(); + startDownload(results) + .then(resolve); + } + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.default = run; diff --git a/lib/tasks/InitialPrompt.js b/lib/tasks/InitialPrompt.js new file mode 100644 index 0000000..c0e48fc --- /dev/null +++ b/lib/tasks/InitialPrompt.js @@ -0,0 +1,181 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// node +var path_1 = require("path"); +// npm +var qoa_1 = __importDefault(require("qoa")); +var chalk_1 = __importDefault(require("chalk")); +var axios_1 = __importDefault(require("axios")); +// utils +var Logger_1 = __importDefault(require("../util/Logger")); +// icon sets +var icon_sets_json_1 = __importDefault(require("../static/icon_sets.json")); +function askForAccessToken() { + Logger_1.default.log(); + return new Promise(function (resolve) { + qoa_1.default + .secure({ + query: 'Enter your GitHub personal access token:', + handle: 'accessToken', + }) + .then(function (_a) { + var accessToken = _a.accessToken; + if (!accessToken || accessToken.length === 0) { + Logger_1.default.warn('You must enter an access token to proceed.'); + askForAccessToken() + .then(resolve); + } + else { + resolve(accessToken); + } + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.askForAccessToken = askForAccessToken; +function askWhichIconSet() { + Logger_1.default.log(); + return new Promise(function (resolve) { + qoa_1.default + .interactive({ + handle: 'iconSetName', + query: 'Which icons set would you like to generate?', + menu: icon_sets_json_1.default.map(function (s) { return s.name; }), + }) + .then(function (_a) { + var iconSetName = _a.iconSetName; + resolve(icon_sets_json_1.default.find(function (s) { return s.name === iconSetName; })); + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.askWhichIconSet = askWhichIconSet; +function selectIconSetVersion(iconSet, accessToken) { + Logger_1.default.log(); + var axiosConfig = accessToken === undefined ? {} : { + headers: { + Authorization: "token " + accessToken, + }, + }; + return new Promise(function (resolve) { + axios_1.default + .get("https://api.github.com/repos/" + iconSet.repo + "/releases?page=1&per_page=5", axiosConfig) + .then(function (_a) { + var status = _a.status, data = _a.data; + if (status === 200) { + var versions_1 = []; + data + .filter(function (release) { return release.assets + .some(function (asset) { + var regex = new RegExp(iconSet.assetMatch); + return regex.test(asset.name); + }); }) + .forEach(function (release) { + var asset = release.assets + .filter(function (a) { + var regex = new RegExp(iconSet.assetMatch); + return regex.test(a.name); + })[0]; + versions_1.push({ + name: asset.name, + id: asset.id, + version: release.tag_name, + downloadUrl: asset.browser_download_url, + }); + }); + qoa_1.default + .interactive({ + handle: 'setVersion', + query: "Which version of " + iconSet.name + " should we download?", + menu: versions_1.map(function (v) { return v.version; }), + }) + .then(function (_a) { + var setVersion = _a.setVersion; + resolve(versions_1.find(function (v) { return v.version === setVersion; })); + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + } + else { + Logger_1.default.error(new Error('Failed to fetch releases from git repository.')); + process.exit(1); + } + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.selectIconSetVersion = selectIconSetVersion; +function askForDistPath() { + return new Promise(function (resolve) { + Logger_1.default.log(); + var cwd = process.cwd(); + var defaultPath = path_1.resolve(cwd, 'fui-icons'); + qoa_1.default + .input({ + type: 'input', + query: "Where would you like the dist saved? [" + defaultPath + "]", + handle: 'distPath', + }) + .then(function (_a) { + var distPath = _a.distPath; + resolve(distPath === '' + ? defaultPath : path_1.resolve(distPath)); + }) + .catch(function (err) { + Logger_1.default.error(err); + process.exit(1); + }); + }); +} +exports.askForDistPath = askForDistPath; +function run() { + return new Promise(function (resolve) { + qoa_1.default.clearScreen(); + Logger_1.default.log(chalk_1.default.cyan('Fomantic-UI Icon Script')); + askWhichIconSet() + .then(function (iconSet) { + var selectVersion = function (accessToken) { + selectIconSetVersion(iconSet, accessToken) + .then(function (asset) { + askForDistPath() + .then(function (distPath) { + resolve({ + iconSet: iconSet, + accessToken: accessToken, + asset: asset, + distPath: distPath, + }); + }); + }); + }; + if (iconSet.requiresAuth) { + Logger_1.default.log(); + Logger_1.default.note('The icon set you selected requires authentication to download.'); + Logger_1.default.note('Generate a personal access token here: https://github.com/settings/tokens'); + Logger_1.default.note('Your token must allow private repository viewing.'); + askForAccessToken() + .then(function (accessToken) { + selectVersion(accessToken); + }); + } + else { + selectVersion(); + } + }); + }); +} +exports.default = run; diff --git a/lib/util/Converter.js b/lib/util/Converter.js new file mode 100644 index 0000000..d185086 --- /dev/null +++ b/lib/util/Converter.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Converter = /** @class */ (function () { + function Converter() { + } + Converter.iconClassName = function (name) { + return name + .replace(/-alt$/, '-alternate') + .replace(/-alt-/, '-alternate-') + .replace(/-h$/, '-horizontal') + .replace(/-h-/, '-horizontal-') + .replace(/-V$/, '-vertical') + .replace(/-V-/, '-vertical-') + .replace(/-alpha$/, '-alphabet') + .replace(/-alpha-/, '-alphabet-') + .replace(/-asc$/, '-ascending') + .replace(/-asc-/, '-ascending-') + .replace(/-desc$/, '-descending') + .replace(/-desc-/, '-descending-') + .replace(/-/g, '.') + .replace(/\s/g, '.'); + }; + Converter.iconName = function (name) { + return Converter.iconClassName(name) + .replace(/\./g, ' '); + }; + return Converter; +}()); +exports.default = Converter; diff --git a/lib/util/Logger.js b/lib/util/Logger.js new file mode 100644 index 0000000..e19e5dd --- /dev/null +++ b/lib/util/Logger.js @@ -0,0 +1,14 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// npm +var signale_1 = require("signale"); +var ora_1 = __importDefault(require("ora")); +exports.LoggerInstance = signale_1.Signale; +function spinner(options) { + return ora_1.default(options); +} +exports.spinner = spinner; +exports.default = new signale_1.Signale(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..133ea95 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1818 @@ +{ + "name": "create-fomantic-icons", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@types/chalk": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-2.2.0.tgz", + "integrity": "sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw==", + "dev": true, + "requires": { + "chalk": "*" + } + }, + "@types/fs-extra": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", + "integrity": "sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/js-yaml": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==", + "dev": true + }, + "@types/node": { + "version": "11.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.4.tgz", + "integrity": "sha512-+rabAZZ3Yn7tF/XPGHupKIL5EcAbrLxnTr/hgQICxbeuAfWtT0UZSfULE+ndusckBItcv4o6ZeOJplQikVcLvQ==", + "dev": true + }, + "@types/signale": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/signale/-/signale-1.2.1.tgz", + "integrity": "sha512-mV6s2VgcBC16Jb+1EwulgRrrZBT93V4JCILkNPg31rvvSK6LRQQGU8R/SUivgHjDZ5LJZu/yL2kMF8j85YQTnA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/unzipper": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.9.2.tgz", + "integrity": "sha512-9K8sLpn1dxIzbXMDgUerkyO1z0deg5RqN/F6df8waAM94aPnS7x7V0l12kkUYoUlM8r4xWgvlcXLdWQvt6KdUA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.7.0.tgz", + "integrity": "sha512-NUSz1aTlIzzTjFFVFyzrbo8oFjHg3K/M9MzYByqbMCxeFdErhLAcGITVfXzSz+Yvp5OOpMu3HkIttB0NyKl54Q==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "1.7.0", + "@typescript-eslint/typescript-estree": "1.7.0", + "eslint-utils": "^1.3.1", + "regexpp": "^2.0.1", + "requireindex": "^1.2.0", + "tsutils": "^3.7.0" + } + }, + "@typescript-eslint/parser": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.7.0.tgz", + "integrity": "sha512-1QFKxs2V940372srm12ovSE683afqc1jB6zF/f8iKhgLz1yoSjYeGHipasao33VXKI+0a/ob9okeogGdKGvvlg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "1.7.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.7.0.tgz", + "integrity": "sha512-K5uedUxVmlYrVkFbyV3htDipvLqTE3QMOUQEHYJaKtgzxj6r7c5Ca/DG1tGgFxX+fsbi9nDIrf4arq7Ib7H/Yw==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + } + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "big-integer": { + "version": "1.6.43", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.43.tgz", + "integrity": "sha512-9dULc9jsKmXl0Aeunug8wbF+58n+hQoFjqClN7WeZwGLh0XJUWyJJ9Ee+Ep+Ql/J9fRsTVaeThp8MhiCCrY0Jg==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-indexof-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", + "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", + "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==" + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-config-airbnb": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz", + "integrity": "sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^13.1.0", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" + } + }, + "eslint-config-airbnb-base": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", + "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", + "dev": true, + "requires": { + "eslint-restricted-globals": "^0.1.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" + } + }, + "eslint-config-airbnb-typescript": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-3.0.0.tgz", + "integrity": "sha512-Q4Xfgfsj3gRQJARcM3skQL7SDSqRc47Z9iAwjyrv94RWHLgvarlpc0fqLeVuEUMBqdmx8OVRLqBZqVJpBnO3cQ==", + "dev": true, + "requires": { + "eslint-config-airbnb": "^17.1.0", + "eslint-config-airbnb-base": "^13.1.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", + "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz", + "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "read-pkg-up": "^2.0.0", + "resolve": "^1.10.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "requires": { + "debug": "^3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "liquidjs": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-8.2.1.tgz", + "integrity": "sha512-oKRcCDOn0LMECGdNzWNOQE0/grWQsacSSFSZyVLhBXIs80dFSDzMaRbWAiOGeV9NK0lUBnm8HqCwNo4ZV9a+tA==" + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qoa": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/qoa/-/qoa-0.2.0.tgz", + "integrity": "sha512-svEO3uevNU354fUBWgMxGJH0spF29EZRe140YL20PP+5C25V+u0eMeFforSIiop2879uXgxI+IFwibHBGcseEA==" + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true + }, + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.1.tgz", + "integrity": "sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "dev": true, + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tsutils": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.10.0.tgz", + "integrity": "sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typescript": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", + "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unzipper": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.11.tgz", + "integrity": "sha512-G0z5zv8LYv4/XwpOiXgTGTcN4jyxgyg3P1DfdIeCN2QGOd6ZBl49BSbOe9JsIEvKh3tG7/b0bdJvz+UmwA+BRg==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "~1.0.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } +} diff --git a/package.json b/package.json index bf2d208..0792c9a 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,51 @@ { - "name": "icon-script", - "version": "0.2.2", - "description": "Script to generate icon.overrides and icon.html.eco files for FUI", - "main": "index.js", + "name": "create-fomantic-icons", + "version": "1.0.0", + "description": "A simple CLI to generate the icon.overrides and icon.html.eco files for FUI", + "author": "Sean Hamilton ", + "license": "MIT", + "homepage": "https://github.com/fomantic/create-fomantic-icons#readme", + "keywords": [ + "fomantic-ui", + "fomantic", + "semantic-ui", + "generator", + "icons", + "cli" + ], "scripts": { - "start": "node --experimental-modules index.mjs" + "build": "tsc" }, + "bin": "./bin/run", "repository": { "type": "git", - "url": "git+ssh://git@github.com/fomantic/fomantic-ui-icon-script.git" + "url": "git+ssh://git@github.com/fomantic/create-fomantic-icons.git" }, - "keywords": [ - "fomantic-ui", - "icons" - ], - "author": "hammy2899", - "license": "MIT", "bugs": { - "url": "https://github.com/fomantic/fomantic-ui-icon-script/issues" + "url": "https://github.com/fomantic/create-fomantic-icons/issues" }, - "homepage": "https://github.com/fomantic/fomantic-ui-icon-script#readme", "dependencies": { - "@hamistudios/crather": "^2.0.2", - "@hamistudios/footstep": "^2.2.1", - "circle-assign": "^1.0.4", - "fs-extra": "^7.0.0", - "inquirer": "^6.0.0", - "yamljs": "^0.3.0" + "axios": "^0.18.0", + "chalk": "^2.4.2", + "fs-extra": "^7.0.1", + "js-yaml": "^3.13.1", + "liquidjs": "^8.2.1", + "ora": "^3.4.0", + "qoa": "^0.2.0", + "signale": "^1.4.0", + "unzipper": "^0.9.11" + }, + "devDependencies": { + "@types/chalk": "^2.2.0", + "@types/fs-extra": "^5.0.5", + "@types/js-yaml": "^3.12.1", + "@types/node": "^11.13.4", + "@types/signale": "^1.2.1", + "@types/unzipper": "^0.9.2", + "@typescript-eslint/eslint-plugin": "^1.7.0", + "eslint": "^5.16.0", + "eslint-config-airbnb-typescript": "^3.0.0", + "eslint-plugin-import": "^2.17.2", + "typescript": "^3.4.3" } } diff --git a/src/enums/IconType.ts b/src/enums/IconType.ts new file mode 100644 index 0000000..63719b9 --- /dev/null +++ b/src/enums/IconType.ts @@ -0,0 +1,8 @@ +enum IconType { + SOLID = 'solid', + OUTLINE = 'outline', + THIN = 'thin', + BRAND = 'brand', +} + +export default IconType; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..b413463 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,41 @@ +// tasks +import InitialPrompt from './tasks/InitialPrompt'; +import DownloadAsset from './tasks/DownloadAsset'; +import BuildDist from './tasks/BuildDist'; +import CleanUp from './tasks/CleanUp'; + +// utils +import Logger from './util/Logger'; + +// parses +import { ParseResults } from './parsers/FontAwesome'; + +export default function run() { + if (process.argv.includes('--clean')) { + CleanUp() + .then(() => { + process.exit(0); + }); + } else { + InitialPrompt() + .then((results) => { + DownloadAsset(results) + .then((paths) => { + import(`./parsers/${results.iconSet.parser}`) + .then((Parser) => { + Parser.default(results, paths) + .then((parseResults: ParseResults) => { + BuildDist(results, parseResults) + .then(() => { + process.exit(0); + }); + }); + }) + .catch((err) => { + Logger.error(err); + process.exit(1); + }); + }); + }); + } +} diff --git a/src/libs/Util/Convert.mjs b/src/libs/Util/Convert.mjs deleted file mode 100644 index 2e2452f..0000000 --- a/src/libs/Util/Convert.mjs +++ /dev/null @@ -1,105 +0,0 @@ -/* - Convert functions - */ - -class Convert { - /** - * Convert an FontAwesome icon name to the Fomantic UI equivalent class name - * - * @param {string} faName The FontAwesome icon name - * - * @return {string} - */ - static fuiClassName(faName) { - let newName = faName; - - // alternate transformation - if (newName.endsWith('-alt')) { - newName = newName.substring(0, newName.length - 4) + '-alternate'; - } - - if (newName.includes('-alt-')) { - newName = newName.replace('-alt-', '-alternate-'); - } - - // horizontal transformation - if (newName.endsWith('-h')) { - newName = newName.substring(0, newName.length - 2) + '-horizontal'; - } - - if (newName.includes('-h-')) { - newName = newName.replace('-h-', '-horizontal-'); - } - - // vertical transformation - if (newName.endsWith('-v')) { - newName = newName.substring(0, newName.length - 2) + '-vertical'; - } - - if (newName.includes('-v-')) { - newName = newName.replace('-v-', '-vertical-'); - } - - // alphabet transformation - if (newName.endsWith('-alpha')) { - newName = newName.substring(0, newName.length - 6) + '-alphabet'; - } - - if (newName.includes('-alpha-')) { - newName = newName.replace('-alpha-', '-alphabet-'); - } - - // ascending transformation - if (newName.endsWith('-asc')) { - newName = newName.substring(0, newName.length - 4) + '-ascending'; - } - - if (newName.includes('-asc-')) { - newName = newName.replace('-asc-', '-ascending-'); - } - - // descending transformation - if (newName.endsWith('-desc')) { - newName = newName.substring(0, newName.length - 5) + '-descending'; - } - - if (newName.includes('-desc-')) { - newName = newName.replace('-desc-', '-descending-'); - } - - return String(newName.replace(/-/g, '.')); - } - - /** - * Convert an FontAwesome icon name to the Fomantic UI equivalent - * - * @param {string} faName The FontAwesome icon name - * - * @return {string} - */ - static fuiName(faName) { - faName = this.fuiClassName(faName); - - return String(faName.replace(/\./g, ' ')); - } - - /** - * Convert an FontAwesome category name to the Fomantic UI equivalent - * - * @param {string} faName The FontAwesome category name - * - * @return {string} - */ - static categoryName(faName) { - let words = faName.replace('-', ' & ').split(' '); - - words = words.map((word) => { - return word.charAt(0).toUpperCase() + word.slice(1); - }); - - return words.join(' '); - } -} - - -export default Convert; diff --git a/src/libs/Util/Find.mjs b/src/libs/Util/Find.mjs deleted file mode 100644 index e0c9de7..0000000 --- a/src/libs/Util/Find.mjs +++ /dev/null @@ -1,32 +0,0 @@ -/* - Find functions - */ -import YAML from 'yamljs'; - - -class Find { - /** - * Get the category for the specified icon - * - * @param {string} faName The FontAwesome icon name - * @param {string} categoryData The category yaml file content - */ - static categories(faName, categoryData) { - let categories = YAML.parse(categoryData); - let names = Object.keys(categories); - let iconCategories = []; - - names.forEach((name, index) => { - let category = categories[name]; - - if(category['icons'].includes(faName)) { - iconCategories.push(names[index]); - } - }); - - return iconCategories; - } -} - - -export default Find; diff --git a/src/libs/Util/index.mjs b/src/libs/Util/index.mjs deleted file mode 100644 index e092c51..0000000 --- a/src/libs/Util/index.mjs +++ /dev/null @@ -1,12 +0,0 @@ -/* - Utility functions - */ - -import Convert from './Convert.mjs'; -import Find from './Find.mjs'; - - -export { - Convert, - Find -}; diff --git a/src/mapper/CategoryMap.mjs b/src/mapper/CategoryMap.mjs deleted file mode 100644 index cefe5ac..0000000 --- a/src/mapper/CategoryMap.mjs +++ /dev/null @@ -1,45 +0,0 @@ -import { Convert } from './../libs/Util'; -import CategoryDescriptions from './../../static/category-descriptions.json'; -import Category from './../models/Category.mjs'; - - -function map(icons) { - let categories = {}; - - icons.forEach((icon) => { - icon.getCategories().forEach((category) => { - if (categories[category] === undefined) { - categories[category] = []; - } - - categories[category].push(icon); - }); - }); - - let categoryKeys = Object.keys(categories); - let brandIcons = categories['brands']; - let sortedCategories = []; - - categoryKeys.sort().map((categoryName) => { - if (categoryName !== 'brands') { - sortedCategories.push(new Category( - categoryName, - Convert.categoryName(categoryName), - CategoryDescriptions[categoryName], - categories[categoryName] - )); - } - }); - - sortedCategories.push(new Category( - 'brands', - Convert.categoryName('brands'), - CategoryDescriptions['brands'], - brandIcons - )); - - return sortedCategories; -} - - -export default map; diff --git a/src/mapper/IconMap.mjs b/src/mapper/IconMap.mjs deleted file mode 100644 index e81fc60..0000000 --- a/src/mapper/IconMap.mjs +++ /dev/null @@ -1,94 +0,0 @@ -import assign from 'circle-assign'; -import Icon from './../models/Icon.mjs'; -import { Convert, Find } from './../libs/Util'; -import Corrections from './../../static/corrections'; - - -function map(iconMetadata, categoryData) { - - const iconKeys = Object.keys(iconMetadata); - let icons = []; - - iconKeys.forEach((faName) => { - let icon = iconMetadata[faName]; - - if (icon['private'] !== undefined && icon['private'] === true) { - return; - } - - let isSolid = icon['styles'].includes('solid'); - let isOutline = icon['styles'].includes('regular'); - let isBrand = icon['styles'].includes('brands'); - let categories = Find.categories(faName, categoryData); - let searchTerms = icon['search']['terms'] || []; - let iconInfo = { - faName: faName, - fuiName: Convert.fuiName(faName), - className: Convert.fuiClassName(faName), - unicode: icon['unicode'], - categories: categories, - searchTerms: searchTerms - }; - - iconInfo = assign(iconInfo, Corrections[faName] || {}); - - // need to do ifs because an icon can't be multiple types (each icon type has its own entry) - // e.g. users and users.outline will both have an icon entry - - if (isSolid) { - icons.push(new Icon( - iconInfo.faName, - iconInfo.fuiName, - iconInfo.className, - iconInfo.unicode, - true, // solid - false, // outline - false, // brand - iconInfo.categories, - iconInfo.searchTerms - )); - } - - if (isOutline) { - icons.push(new Icon( - iconInfo.faName, - `${iconInfo.fuiName} outline`, - `${iconInfo.className}.outline`, - iconInfo.unicode, - false, // solid - true, // outline - false, // brand - iconInfo.categories, - iconInfo.searchTerms - )); - } - - if (isBrand) { - icons.push(new Icon( - iconInfo.faName, - iconInfo.fuiName, - iconInfo.className, - iconInfo.unicode, - false, // solid - false, // outline - true, // brand - [...categories, 'brands'], - iconInfo.searchTerms - )); - } - - }); - - // sort icon names A-Z - icons.sort((a, b) => { - if (a.getClassName() < b.getClassName()) return -1; - if (a.getClassName() > b.getClassName()) return 1; - return 0; - }); - - return icons; - -} - - -export default map; diff --git a/src/mapper/index.mjs b/src/mapper/index.mjs deleted file mode 100644 index dc24f63..0000000 --- a/src/mapper/index.mjs +++ /dev/null @@ -1,8 +0,0 @@ -import IconMap from './IconMap.mjs'; -import CategoryMap from './CategoryMap.mjs'; - - -export default { - icon: IconMap, - category: CategoryMap -}; diff --git a/src/modals/Category.ts b/src/modals/Category.ts new file mode 100644 index 0000000..5da6e4e --- /dev/null +++ b/src/modals/Category.ts @@ -0,0 +1,35 @@ +// static +import categories from '../static/categories.json'; + +// modals +import Icon from './Icon'; + +export interface CategoryData { + name: string; + label: string; + icons: Icon[]; +} + +export default class Category { + private readonly data: CategoryData; + + constructor(data: CategoryData) { + this.data = data; + } + + get rawName(): string { + return this.data.name; + } + + get name(): string { + return this.data.label; + } + + get description(): string { + return (categories as any)[this.rawName]; + } + + get icons(): Icon[] { + return this.data.icons; + } +} diff --git a/src/modals/Icon.ts b/src/modals/Icon.ts new file mode 100644 index 0000000..2000d54 --- /dev/null +++ b/src/modals/Icon.ts @@ -0,0 +1,81 @@ +// utils +import Converter from '../util/Converter'; + +// enums +import IconType from '../enums/IconType'; + +// static +import corrections from '../static/corrections.json'; + +export interface IconData { + name: string; + unicode: string; + type: IconType; + searchTerms: string[]; +} + +export default class Icon { + private readonly data: IconData; + + constructor(data: IconData) { + this.data = data; + } + + private hasCorrection(field: string): boolean { + const iconCorrection = (corrections as any)[this.rawName]; + + if (iconCorrection !== undefined) { + return iconCorrection[field] !== undefined; + } + + return false; + } + + private correction(field: string): string { + return this.hasCorrection(field) + ? (corrections as any)[this.rawName][field] + : ''; + } + + get rawName(): string { + return this.data.name; + } + + get name(): string { + let { + name, + } = this.data; + + if (this.type === IconType.OUTLINE) { + name += '-outline'; + } + + if (this.type === IconType.THIN) { + name += '-thin'; + } + + return this.hasCorrection('name') + ? this.correction('name') + : Converter.iconName(name); + } + + get className(): string { + return this.hasCorrection('className') + ? this.correction('className') + : Converter.iconClassName(this.name); + } + + get unicode(): string { + return this.hasCorrection('unicode') + ? this.correction('unicode') + : `\\${this.data.unicode}`; + } + + get type(): IconType { + return this.data.type; + } + + get searchTerms(): string { + return this.data.searchTerms.join(', '); + } +} diff --git a/src/models/Category.mjs b/src/models/Category.mjs deleted file mode 100644 index 00468e4..0000000 --- a/src/models/Category.mjs +++ /dev/null @@ -1,67 +0,0 @@ -/* - Category Model - */ - - -class Category { - /** - * Create a new Icon - * - * @param {string} faName The name used by FontAwesome - * @param {string} fuiName The name used by Fomantic UI - * @param {string} description The category description - * @param {Icon[]} icons The category icons - * - * @returns {Category} - */ - constructor( - faName, - fuiName, - description, - icons - ) { - this.faName = faName; - this.fuiName = fuiName; - this.description = description; - this.icons = icons; - } - - /** - * Get the FontAwesome category name - * - * @return {string} - */ - getFAName() { - return String(this.faName); - } - - /** - * Get the Fomantic UI name - * - * @return {string} - */ - getFUIName() { - return String(this.fuiName); - } - - /** - * Get the category icons - * - * @return {Icon[]} - */ - getIcons() { - return this.icons || []; - } - - /** - * Get the category description - * - * @return {string} - */ - getDescription() { - return this.description; - } -} - - -export default Category; diff --git a/src/models/Icon.mjs b/src/models/Icon.mjs deleted file mode 100644 index 23991a7..0000000 --- a/src/models/Icon.mjs +++ /dev/null @@ -1,126 +0,0 @@ -/* - Icon Model - */ - - -class Icon { - /** - * Create a new Icon - * - * @param {string} faName The name used by FontAwesome - * @param {string} fuiName The name used by Fomantic UI - * @param {string} className The class which will be used by Fomantic UI - * @param {string} unicode The icon unicode - * @param {boolean} isSolid Whether the icon is a solid icon - * @param {boolean} isOutline Whether the icon is an outline icon - * @param {boolean} isBrand Whether the icon is a brand icon - * @param {string[]} categories The icon categories - * @param {string[]} searchTerms The keywords fo for icon alias search - * - * @returns {Icon} - */ - constructor( - faName, - fuiName, - className, - unicode, - isSolid, - isOutline, - isBrand, - categories, - searchTerms - ) { - this.faName = faName; - this.fuiName = fuiName; - this.className = className; - this.unicode = unicode; - this.solid = isSolid; - this.outline = isOutline; - this.brand = isBrand; - this.categories = categories; - this.searchTerms = searchTerms; - } - - /** - * Get the FontAwesome name - * - * @return {string} - */ - getFAName() { - return String(this.faName); - } - - /** - * Get the Fomantic UI name - * - * @return {string} - */ - getFUIName() { - return String(this.fuiName); - } - - /** - * Get the Fomantic UI class name - * - * @return {string} - */ - getClassName() { - return String(this.className); - } - - /** - * Get the unicode - * - * @return {string} - */ - getUnicode() { - return String(this.unicode); - } - - /** - * Check whether the icon is a solid icon - * - * @return {boolean} - */ - isSolid() { - return this.solid === true; - } - - /** - * Check whether the icon is an outline icon - * - * @return {boolean} - */ - isOutline() { - return this.outline === true; - } - - /** - * Check whether the icon is a brand icon - * - * @return {boolean} - */ - isBrand() { - return this.brand === true; - } - - /** - * Get the icon categories - * - * @return {string[]} - */ - getCategories() { - return this.categories; - } - - /** - * Get the search terms - * @returns {string} - */ - getSearchTerms() { - return this.searchTerms; - } -} - - -export default Icon; diff --git a/src/parsers/FontAwesome.ts b/src/parsers/FontAwesome.ts new file mode 100644 index 0000000..f730d3a --- /dev/null +++ b/src/parsers/FontAwesome.ts @@ -0,0 +1,266 @@ +// node +import { resolve as resolvePath } from 'path'; + +// npm +import * as fse from 'fs-extra'; +import { safeLoad as parseYAML } from 'js-yaml'; +import chalk from 'chalk'; + +// tasks +import { PromptResults } from '../tasks/InitialPrompt'; +import { PathResults } from '../tasks/DownloadAsset'; + +// utils +import Logger, { spinner } from '../util/Logger'; + +// modals +import Icon from '../modals/Icon'; +import Category from '../modals/Category'; + +// enums +import IconType from '../enums/IconType'; + +// static +import aliases from '../static/aliases.json'; + +export interface IconMeta { + search: { + terms: string[]; + } + styles: string[]; + unicode: string; + private: boolean; +} + +export interface CategoryMeta { + icons: string[]; + label: string; +} + +export interface ParseResults { + icons: { + solid: { + icons:Icon[]; + aliases: object[]; + }; + outline: { + icons: Icon[]; + aliases: object[]; + } + thin: { + icons: Icon[]; + aliases: object[]; + } + brand: { + icons: Icon[]; + aliases: object[]; + } + }; + categories: Category[]; + fontAssetsDirectory: string; + fontFileNames: { [key: string]: string }; +} + +export default function parse(results: PromptResults, paths: PathResults): Promise { + return new Promise((resolve) => { + const { + asset, + } = results; + + const parseSpinner = spinner() + .start('parsing icons'); + + const fontAwesomeDirectoryName = results.iconSet.name.toLowerCase() + .replace(/\s/g, '-'); + const fontAwesomeDirectory = `${fontAwesomeDirectoryName}-${asset.version}-web`; + + const iconsMetadataFilePath = resolvePath( + paths.assetDirectoryPath, + fontAwesomeDirectory, + 'metadata', + 'icons.json', + ); + const categoriesFilePath = resolvePath( + paths.assetDirectoryPath, + fontAwesomeDirectory, + 'metadata', + 'categories.yml', + ); + + fse.readFile(iconsMetadataFilePath, (iconsErr, iconsData) => { + if (!iconsErr) { + const iconMetadata = JSON.parse(iconsData.toString()); + const iconNames = Object.keys(iconMetadata); + let icons: Icon[] = []; + let categories: Category[] = []; + + iconNames.forEach((iconName) => { + const iconMeta: IconMeta = iconMetadata[iconName]; + + if (!iconMeta.private) { + // solid + if (iconMeta.styles.includes('solid')) { + icons.push(new Icon({ + name: iconName, + type: IconType.SOLID, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + + // outline + if (iconMeta.styles.includes('regular')) { + icons.push(new Icon({ + name: iconName, + type: IconType.OUTLINE, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + + // thin + if (iconMeta.styles.includes('light')) { + icons.push(new Icon({ + name: iconName, + type: IconType.THIN, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + + // brand + if (iconMeta.styles.includes('brands')) { + icons.push(new Icon({ + name: iconName, + type: IconType.BRAND, + unicode: iconMeta.unicode, + searchTerms: iconMeta.search.terms, + })); + } + } + }); + + const sortAz = (a: {[key: string]: any}, b: {[key: string]: any}) => { + if (a.name < b.name) return -1; + if (a.name > b.name) return 1; + return 0; + }; + + icons = icons.sort(sortAz); + + parseSpinner.text = 'parsing categories'; + + fse.readFile(categoriesFilePath, (categoriesErr, categoriesData) => { + if (!categoriesErr) { + const categoriesMetadata = parseYAML(categoriesData.toString()); + const categoryNames = Object.keys(categoriesMetadata); + + categoryNames.forEach((categoryName) => { + const categoryMeta: CategoryMeta = categoriesMetadata[categoryName]; + + const categoryIcons: Icon[] = []; + + categoryMeta.icons.forEach((iconName) => { + icons.filter(i => i.rawName === iconName) + .forEach((icon) => { + categoryIcons.push(icon); + }); + }); + + categories.push(new Category({ + name: categoryName, + label: categoryMeta.label, + icons: categoryIcons.sort(sortAz), + })); + }); + + categories = categories + .sort(sortAz); + + categories.push(new Category({ + name: 'brands', + label: 'Brands', + icons: icons + .filter(i => i.type === IconType.BRAND) + .sort(sortAz), + })); + + const parseResults = { + icons: { + solid: icons.filter(i => i.type === IconType.SOLID), + outline: icons.filter(i => i.type === IconType.OUTLINE), + thin: icons.filter(i => i.type === IconType.THIN), + brand: icons.filter(i => i.type === IconType.BRAND), + }, + categories, + }; + + const { + solid: solidIcons, + outline: outlineIcons, + thin: thinIcons, + brand: brandIcons, + } = parseResults.icons; + + const totalIcons = solidIcons.length + outlineIcons.length + + thinIcons.length + brandIcons.length; + + parseSpinner.succeed('icons & categories parsed'); + Logger.log(); + Logger.log(chalk.cyan(' Results:')); + Logger.log(` Solid: ${chalk.cyan(String(solidIcons.length))}`); + Logger.log(` Outline: ${chalk.cyan(String(outlineIcons.length))}`); + Logger.log(` Thin: ${chalk.cyan(String(thinIcons.length))}`); + Logger.log(` Brand: ${chalk.cyan(String(brandIcons.length))}`); + Logger.log(` ${chalk.cyan(String(totalIcons))}`); + + resolve({ + icons: { + solid: { + icons: solidIcons, + aliases: aliases.filter(alias => alias.type === 'solid') + .sort(sortAz), + }, + outline: { + icons: outlineIcons, + aliases: aliases.filter(alias => alias.type === 'outline') + .sort(sortAz), + }, + thin: { + icons: thinIcons, + aliases: aliases.filter(alias => alias.type === 'thin') + .sort(sortAz), + }, + brand: { + icons: brandIcons, + aliases: aliases.filter(alias => alias.type === 'brand') + .sort(sortAz), + }, + }, + categories, + fontAssetsDirectory: resolvePath( + paths.assetDirectoryPath, + fontAwesomeDirectory, + 'webfonts', + ), + fontFileNames: { + 'fa-solid-900': 'icons', + 'fa-regular-400': 'outline-icons', + 'fa-light-300': 'thin-icons', + 'fa-brands-400': 'brand-icons', + }, + }); + } else { + parseSpinner.stop(); + Logger.error(categoriesErr); + process.exit(1); + } + }); + } else { + parseSpinner.stop(); + Logger.error(iconsErr); + process.exit(1); + } + }); + }); +} diff --git a/src/static/aliases.json b/src/static/aliases.json new file mode 100644 index 0000000..a5d5f9f --- /dev/null +++ b/src/static/aliases.json @@ -0,0 +1,2389 @@ +[ + { + "rawName": "chess-rock", + "name": "chess rock", + "className": "chess.rock", + "unicode": "\\f447", + "type": "solid" + }, + { + "rawName": "ordered-list", + "name": "ordered list", + "className": "ordered.list", + "unicode": "\\f0cb", + "type": "solid" + }, + { + "rawName": "unordered-list", + "name": "unordered list", + "className": "unordered.list", + "unicode": "\\f0ca", + "type": "solid" + }, + { + "rawName": "user-doctor", + "name": "user doctor", + "className": "user.doctor", + "unicode": "\\f0f0", + "type": "solid" + }, + { + "rawName": "shield", + "name": "shield", + "className": "shield", + "unicode": "\\f3ed", + "type": "solid" + }, + { + "rawName": "puzzle", + "name": "puzzle", + "className": "puzzle", + "unicode": "\\f12e", + "type": "solid" + }, + { + "rawName": "credit-card-amazon-pay", + "name": "credit card amazon pay", + "className": "credit.card.amazon.pay", + "unicode": "\\f42d", + "type": "brand" + }, + { + "rawName": "credit-card-american-express", + "name": "credit card american express", + "className": "credit.card.american.express", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "credit-card-diners-club", + "name": "credit card diners club", + "className": "credit.card.diners.club", + "unicode": "\\f24c", + "type": "brand" + }, + { + "rawName": "credit-card-discover", + "name": "credit card discover", + "className": "credit.card.discover", + "unicode": "\\f1f2", + "type": "brand" + }, + { + "rawName": "credit-card-jcb", + "name": "credit card jcb", + "className": "credit.card.jcb", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "credit-card-mastercard", + "name": "credit card mastercard", + "className": "credit.card.mastercard", + "unicode": "\\f1f1", + "type": "brand" + }, + { + "rawName": "credit-card-paypal", + "name": "credit card paypal", + "className": "credit.card.paypal", + "unicode": "\\f1f4", + "type": "brand" + }, + { + "rawName": "credit-card-stripe", + "name": "credit card stripe", + "className": "credit.card.stripe", + "unicode": "\\f1f5", + "type": "brand" + }, + { + "rawName": "credit-card-visa", + "name": "credit card visa", + "className": "credit.card.visa", + "unicode": "\\f1f0", + "type": "brand" + }, + { + "rawName": "add-circle", + "name": "add circle", + "className": "add.circle", + "unicode": "\\f055", + "type": "solid" + }, + { + "rawName": "add-square", + "name": "add square", + "className": "add.square", + "unicode": "\\f0fe", + "type": "solid" + }, + { + "rawName": "add-to-calendar", + "name": "add to calendar", + "className": "add.to.calendar", + "unicode": "\\f271", + "type": "solid" + }, + { + "rawName": "add-to-cart", + "name": "add to cart", + "className": "add.to.cart", + "unicode": "\\f217", + "type": "solid" + }, + { + "rawName": "add-user", + "name": "add user", + "className": "add.user", + "unicode": "\\f234", + "type": "solid" + }, + { + "rawName": "add", + "name": "add", + "className": "add", + "unicode": "\\f067", + "type": "solid" + }, + { + "rawName": "alarm-mute", + "name": "alarm mute", + "className": "alarm.mute", + "unicode": "\\f1f6", + "type": "solid" + }, + { + "rawName": "alarm", + "name": "alarm", + "className": "alarm", + "unicode": "\\f0f3", + "type": "solid" + }, + { + "rawName": "ald", + "name": "ald", + "className": "ald", + "unicode": "\\f2a2", + "type": "solid" + }, + { + "rawName": "als", + "name": "als", + "className": "als", + "unicode": "\\f2a2", + "type": "solid" + }, + { + "rawName": "american-express-card", + "name": "american express card", + "className": "american.express.card", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "american-express", + "name": "american express", + "className": "american.express", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "amex", + "name": "amex", + "className": "amex", + "unicode": "\\f1f3", + "type": "brand" + }, + { + "rawName": "announcement", + "name": "announcement", + "className": "announcement", + "unicode": "\\f0a1", + "type": "solid" + }, + { + "rawName": "area-chart", + "name": "area chart", + "className": "area.chart", + "unicode": "\\f1fe", + "type": "solid" + }, + { + "rawName": "area-graph", + "name": "area graph", + "className": "area.graph", + "unicode": "\\f1fe", + "type": "solid" + }, + { + "rawName": "arrow-down-cart", + "name": "arrow down cart", + "className": "arrow.down.cart", + "unicode": "\\f218", + "type": "solid" + }, + { + "rawName": "asexual", + "name": "asexual", + "className": "asexual", + "unicode": "\\f22d", + "type": "solid" + }, + { + "rawName": "asl-interpreting", + "name": "asl interpreting", + "className": "asl.interpreting", + "unicode": "\\f2a3", + "type": "solid" + }, + { + "rawName": "asl", + "name": "asl", + "className": "asl", + "unicode": "\\f2a3", + "type": "solid" + }, + { + "rawName": "assistive-listening-devices", + "name": "assistive listening devices", + "className": "assistive.listening.devices", + "unicode": "\\f2a2", + "type": "solid" + }, + { + "rawName": "attach", + "name": "attach", + "className": "attach", + "unicode": "\\f0c6", + "type": "solid" + }, + { + "rawName": "attention", + "name": "attention", + "className": "attention", + "unicode": "\\f06a", + "type": "solid" + }, + { + "rawName": "balance", + "name": "balance", + "className": "balance", + "unicode": "\\f24e", + "type": "solid" + }, + { + "rawName": "bar", + "name": "bar", + "className": "bar", + "unicode": "\\f0fc", + "type": "solid" + }, + { + "rawName": "bathtub", + "name": "bathtub", + "className": "bathtub", + "unicode": "\\f2cd", + "type": "solid" + }, + { + "rawName": "battery-four", + "name": "battery four", + "className": "battery.four", + "unicode": "\\f240", + "type": "solid" + }, + { + "rawName": "battery-high", + "name": "battery high", + "className": "battery.high", + "unicode": "\\f241", + "type": "solid" + }, + { + "rawName": "battery-low", + "name": "battery low", + "className": "battery.low", + "unicode": "\\f243", + "type": "solid" + }, + { + "rawName": "battery-medium", + "name": "battery medium", + "className": "battery.medium", + "unicode": "\\f242", + "type": "solid" + }, + { + "rawName": "battery-one", + "name": "battery one", + "className": "battery.one", + "unicode": "\\f243", + "type": "solid" + }, + { + "rawName": "battery-three", + "name": "battery three", + "className": "battery.three", + "unicode": "\\f241", + "type": "solid" + }, + { + "rawName": "battery-two", + "name": "battery two", + "className": "battery.two", + "unicode": "\\f242", + "type": "solid" + }, + { + "rawName": "battery-zero", + "name": "battery zero", + "className": "battery.zero", + "unicode": "\\f244", + "type": "solid" + }, + { + "rawName": "birthday", + "name": "birthday", + "className": "birthday", + "unicode": "\\f1fd", + "type": "solid" + }, + { + "rawName": "block-layout", + "name": "block layout", + "className": "block.layout", + "unicode": "\\f009", + "type": "solid" + }, + { + "rawName": "bluetooth-alternative", + "name": "bluetooth alternative", + "className": "bluetooth.alternative", + "unicode": "\\f294", + "type": "brand" + }, + { + "rawName": "broken-chain", + "name": "broken chain", + "className": "broken.chain", + "unicode": "\\f127", + "type": "solid" + }, + { + "rawName": "browser", + "name": "browser", + "className": "browser", + "unicode": "\\f022", + "type": "solid" + }, + { + "rawName": "call-square", + "name": "call square", + "className": "call.square", + "unicode": "\\f098", + "type": "solid" + }, + { + "rawName": "call", + "name": "call", + "className": "call", + "unicode": "\\f095", + "type": "solid" + }, + { + "rawName": "cancel", + "name": "cancel", + "className": "cancel", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "cart", + "name": "cart", + "className": "cart", + "unicode": "\\f07a", + "type": "solid" + }, + { + "rawName": "cc", + "name": "cc", + "className": "cc", + "unicode": "\\f20a", + "type": "solid" + }, + { + "rawName": "chain", + "name": "chain", + "className": "chain", + "unicode": "\\f0c1", + "type": "solid" + }, + { + "rawName": "chat", + "name": "chat", + "className": "chat", + "unicode": "\\f075", + "type": "solid" + }, + { + "rawName": "checked-calendar", + "name": "checked calendar", + "className": "checked.calendar", + "unicode": "\\f274", + "type": "solid" + }, + { + "rawName": "checkmark", + "name": "checkmark", + "className": "checkmark", + "unicode": "\\f00c", + "type": "solid" + }, + { + "rawName": "circle-notched", + "name": "circle notched", + "className": "circle.notched", + "unicode": "\\f1ce", + "type": "solid" + }, + { + "rawName": "close", + "name": "close", + "className": "close", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "cny", + "name": "cny", + "className": "cny", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "cocktail", + "name": "cocktail", + "className": "cocktail", + "unicode": "\\f000", + "type": "solid" + }, + { + "rawName": "commenting", + "name": "commenting", + "className": "commenting", + "unicode": "\\f27a", + "type": "solid" + }, + { + "rawName": "computer", + "name": "computer", + "className": "computer", + "unicode": "\\f108", + "type": "solid" + }, + { + "rawName": "configure", + "name": "configure", + "className": "configure", + "unicode": "\\f0ad", + "type": "solid" + }, + { + "rawName": "content", + "name": "content", + "className": "content", + "unicode": "\\f0c9", + "type": "solid" + }, + { + "rawName": "deafness", + "name": "deafness", + "className": "deafness", + "unicode": "\\f2a4", + "type": "solid" + }, + { + "rawName": "delete-calendar", + "name": "delete calendar", + "className": "delete.calendar", + "unicode": "\\f273", + "type": "solid" + }, + { + "rawName": "delete", + "name": "delete", + "className": "delete", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "detective", + "name": "detective", + "className": "detective", + "unicode": "\\f21b", + "type": "solid" + }, + { + "rawName": "diners-club-card", + "name": "diners club card", + "className": "diners.club.card", + "unicode": "\\f24c", + "type": "brand" + }, + { + "rawName": "diners-club", + "name": "diners club", + "className": "diners.club", + "unicode": "\\f24c", + "type": "brand" + }, + { + "rawName": "discover-card", + "name": "discover card", + "className": "discover.card", + "unicode": "\\f1f2", + "type": "brand" + }, + { + "rawName": "discover", + "name": "discover", + "className": "discover", + "unicode": "\\f1f2", + "type": "brand" + }, + { + "rawName": "discussions", + "name": "discussions", + "className": "discussions", + "unicode": "\\f086", + "type": "solid" + }, + { + "rawName": "doctor", + "name": "doctor", + "className": "doctor", + "unicode": "\\f0f0", + "type": "solid" + }, + { + "rawName": "dollar", + "name": "dollar", + "className": "dollar", + "unicode": "\\f155", + "type": "solid" + }, + { + "rawName": "dont", + "name": "dont", + "className": "dont", + "unicode": "\\f05e", + "type": "solid" + }, + { + "rawName": "dribble", + "name": "dribble", + "className": "dribble", + "unicode": "\\f17d", + "type": "brand" + }, + { + "rawName": "drivers-license", + "name": "drivers license", + "className": "drivers.license", + "unicode": "\\f2c2", + "type": "solid" + }, + { + "rawName": "dropdown", + "name": "dropdown", + "className": "dropdown", + "unicode": "\\f0d7", + "type": "solid" + }, + { + "rawName": "eercast", + "name": "eercast", + "className": "eercast", + "unicode": "\\f2da", + "type": "brand" + }, + { + "rawName": "emergency", + "name": "emergency", + "className": "emergency", + "unicode": "\\f0f9", + "type": "solid" + }, + { + "rawName": "envira-gallery", + "name": "envira gallery", + "className": "envira.gallery", + "unicode": "\\f299", + "type": "brand" + }, + { + "rawName": "erase", + "name": "erase", + "className": "erase", + "unicode": "\\f12d", + "type": "solid" + }, + { + "rawName": "eur", + "name": "eur", + "className": "eur", + "unicode": "\\f153", + "type": "solid" + }, + { + "rawName": "euro", + "name": "euro", + "className": "euro", + "unicode": "\\f153", + "type": "solid" + }, + { + "rawName": "eyedropper", + "name": "eyedropper", + "className": "eyedropper", + "unicode": "\\f1fb", + "type": "solid" + }, + { + "rawName": "fa", + "name": "fa", + "className": "fa", + "unicode": "\\f2b4", + "type": "brand" + }, + { + "rawName": "factory", + "name": "factory", + "className": "factory", + "unicode": "\\f275", + "type": "solid" + }, + { + "rawName": "favorite", + "name": "favorite", + "className": "favorite", + "unicode": "\\f005", + "type": "solid" + }, + { + "rawName": "feed", + "name": "feed", + "className": "feed", + "unicode": "\\f09e", + "type": "solid" + }, + { + "rawName": "female-homosexual", + "name": "female homosexual", + "className": "female.homosexual", + "unicode": "\\f226", + "type": "solid" + }, + { + "rawName": "file-text", + "name": "file text", + "className": "file.text", + "unicode": "\\f15c", + "type": "solid" + }, + { + "rawName": "find", + "name": "find", + "className": "find", + "unicode": "\\f1e5", + "type": "solid" + }, + { + "rawName": "first-aid", + "name": "first aid", + "className": "first.aid", + "unicode": "\\f0fa", + "type": "solid" + }, + { + "rawName": "five-hundred-pixels", + "name": "five hundred pixels", + "className": "five.hundred.pixels", + "unicode": "\\f26e", + "type": "brand" + }, + { + "rawName": "fork", + "name": "fork", + "className": "fork", + "unicode": "\\f126", + "type": "solid" + }, + { + "rawName": "game", + "name": "game", + "className": "game", + "unicode": "\\f11b", + "type": "solid" + }, + { + "rawName": "gay", + "name": "gay", + "className": "gay", + "unicode": "\\f227", + "type": "solid" + }, + { + "rawName": "gbp", + "name": "gbp", + "className": "gbp", + "unicode": "\\f154", + "type": "solid" + }, + { + "rawName": "gittip", + "name": "gittip", + "className": "gittip", + "unicode": "\\f184", + "type": "brand" + }, + { + "rawName": "google-plus-circle", + "name": "google plus circle", + "className": "google.plus.circle", + "unicode": "\\f2b3", + "type": "brand" + }, + { + "rawName": "google-plus-official", + "name": "google plus official", + "className": "google.plus.official", + "unicode": "\\f2b3", + "type": "brand" + }, + { + "rawName": "grab", + "name": "grab", + "className": "grab", + "unicode": "\\f255", + "type": "solid" + }, + { + "rawName": "graduation", + "name": "graduation", + "className": "graduation", + "unicode": "\\f19d", + "type": "solid" + }, + { + "rawName": "grid-layout", + "name": "grid layout", + "className": "grid.layout", + "unicode": "\\f00a", + "type": "solid" + }, + { + "rawName": "group", + "name": "group", + "className": "group", + "unicode": "\\f0c0", + "type": "solid" + }, + { + "rawName": "h", + "name": "h", + "className": "h", + "unicode": "\\f0fd", + "type": "solid" + }, + { + "rawName": "hand-victory", + "name": "hand victory", + "className": "hand.victory", + "unicode": "\\f25b", + "type": "solid" + }, + { + "rawName": "handicap", + "name": "handicap", + "className": "handicap", + "unicode": "\\f193", + "type": "solid" + }, + { + "rawName": "hard-of-hearing", + "name": "hard of hearing", + "className": "hard.of.hearing", + "unicode": "\\f2a4", + "type": "solid" + }, + { + "rawName": "header", + "name": "header", + "className": "header", + "unicode": "\\f1dc", + "type": "solid" + }, + { + "rawName": "help-circle", + "name": "help circle", + "className": "help.circle", + "unicode": "\\f059", + "type": "solid" + }, + { + "rawName": "help", + "name": "help", + "className": "help", + "unicode": "\\f128", + "type": "solid" + }, + { + "rawName": "heterosexual", + "name": "heterosexual", + "className": "heterosexual", + "unicode": "\\f228", + "type": "solid" + }, + { + "rawName": "hide", + "name": "hide", + "className": "hide", + "unicode": "\\f070", + "type": "solid" + }, + { + "rawName": "hotel", + "name": "hotel", + "className": "hotel", + "unicode": "\\f236", + "type": "solid" + }, + { + "rawName": "hourglass-four", + "name": "hourglass four", + "className": "hourglass.four", + "unicode": "\\f254", + "type": "solid" + }, + { + "rawName": "hourglass-full", + "name": "hourglass full", + "className": "hourglass.full", + "unicode": "\\f254", + "type": "solid" + }, + { + "rawName": "hourglass-one", + "name": "hourglass one", + "className": "hourglass.one", + "unicode": "\\f251", + "type": "solid" + }, + { + "rawName": "hourglass-three", + "name": "hourglass three", + "className": "hourglass.three", + "unicode": "\\f253", + "type": "solid" + }, + { + "rawName": "hourglass-two", + "name": "hourglass two", + "className": "hourglass.two", + "unicode": "\\f252", + "type": "solid" + }, + { + "rawName": "idea", + "name": "idea", + "className": "idea", + "unicode": "\\f0eb", + "type": "solid" + }, + { + "rawName": "ils", + "name": "ils", + "className": "ils", + "unicode": "\\f20b", + "type": "solid" + }, + { + "rawName": "in-cart", + "name": "in cart", + "className": "in.cart", + "unicode": "\\f218", + "type": "solid" + }, + { + "rawName": "inr", + "name": "inr", + "className": "inr", + "unicode": "\\f156", + "type": "solid" + }, + { + "rawName": "intergender", + "name": "intergender", + "className": "intergender", + "unicode": "\\f224", + "type": "solid" + }, + { + "rawName": "intersex", + "name": "intersex", + "className": "intersex", + "unicode": "\\f224", + "type": "solid" + }, + { + "rawName": "japan-credit-bureau-card", + "name": "japan credit bureau card", + "className": "japan.credit.bureau.card", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "japan-credit-bureau", + "name": "japan credit bureau", + "className": "japan.credit.bureau", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "jcb", + "name": "jcb", + "className": "jcb", + "unicode": "\\f24b", + "type": "brand" + }, + { + "rawName": "jpy", + "name": "jpy", + "className": "jpy", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "krw", + "name": "krw", + "className": "krw", + "unicode": "\\f159", + "type": "solid" + }, + { + "rawName": "lab", + "name": "lab", + "className": "lab", + "unicode": "\\f0c3", + "type": "solid" + }, + { + "rawName": "law", + "name": "law", + "className": "law", + "unicode": "\\f24e", + "type": "solid" + }, + { + "rawName": "legal", + "name": "legal", + "className": "legal", + "unicode": "\\f0e3", + "type": "solid" + }, + { + "rawName": "lesbian", + "name": "lesbian", + "className": "lesbian", + "unicode": "\\f226", + "type": "solid" + }, + { + "rawName": "lightning", + "name": "lightning", + "className": "lightning", + "unicode": "\\f0e7", + "type": "solid" + }, + { + "rawName": "like", + "name": "like", + "className": "like", + "unicode": "\\f004", + "type": "solid" + }, + { + "rawName": "line-graph", + "name": "line graph", + "className": "line.graph", + "unicode": "\\f201", + "type": "solid" + }, + { + "rawName": "linkedin-square", + "name": "linkedin square", + "className": "linkedin.square", + "unicode": "\\f08c", + "type": "brand" + }, + { + "rawName": "linkify", + "name": "linkify", + "className": "linkify", + "unicode": "\\f0c1", + "type": "solid" + }, + { + "rawName": "lira", + "name": "lira", + "className": "lira", + "unicode": "\\f195", + "type": "solid" + }, + { + "rawName": "list-layout", + "name": "list layout", + "className": "list.layout", + "unicode": "\\f00b", + "type": "solid" + }, + { + "rawName": "magnify", + "name": "magnify", + "className": "magnify", + "unicode": "\\f00e", + "type": "solid" + }, + { + "rawName": "mail-forward", + "name": "mail forward", + "className": "mail.forward", + "unicode": "\\f064", + "type": "solid" + }, + { + "rawName": "mail-square", + "name": "mail square", + "className": "mail.square", + "unicode": "\\f199", + "type": "solid" + }, + { + "rawName": "mail", + "name": "mail", + "className": "mail", + "unicode": "\\f0e0", + "type": "solid" + }, + { + "rawName": "male-homosexual", + "name": "male homosexual", + "className": "male.homosexual", + "unicode": "\\f227", + "type": "solid" + }, + { + "rawName": "man", + "name": "man", + "className": "man", + "unicode": "\\f222", + "type": "solid" + }, + { + "rawName": "marker", + "name": "marker", + "className": "marker", + "unicode": "\\f041", + "type": "solid" + }, + { + "rawName": "mars-alternate", + "name": "mars alternate", + "className": "mars.alternate", + "unicode": "\\f229", + "type": "solid" + }, + { + "rawName": "mars-horizontal", + "name": "mars horizontal", + "className": "mars.horizontal", + "unicode": "\\f22b", + "type": "solid" + }, + { + "rawName": "mars-vertical", + "name": "mars vertical", + "className": "mars.vertical", + "unicode": "\\f22a", + "type": "solid" + }, + { + "rawName": "mastercard-card", + "name": "mastercard card", + "className": "mastercard.card", + "unicode": "\\f1f1", + "type": "brand" + }, + { + "rawName": "mastercard", + "name": "mastercard", + "className": "mastercard", + "unicode": "\\f1f1", + "type": "brand" + }, + { + "rawName": "microsoft-edge", + "name": "microsoft edge", + "className": "microsoft.edge", + "unicode": "\\f282", + "type": "brand" + }, + { + "rawName": "military", + "name": "military", + "className": "military", + "unicode": "\\f0fb", + "type": "solid" + }, + { + "rawName": "ms-edge", + "name": "ms edge", + "className": "ms.edge", + "unicode": "\\f282", + "type": "brand" + }, + { + "rawName": "mute", + "name": "mute", + "className": "mute", + "unicode": "\\f131", + "type": "solid" + }, + { + "rawName": "new-pied-piper", + "name": "new pied piper", + "className": "new.pied.piper", + "unicode": "\\f2ae", + "type": "brand" + }, + { + "rawName": "non-binary-transgender", + "name": "non binary transgender", + "className": "non.binary.transgender", + "unicode": "\\f223", + "type": "solid" + }, + { + "rawName": "numbered-list", + "name": "numbered list", + "className": "numbered.list", + "unicode": "\\f0cb", + "type": "solid" + }, + { + "rawName": "optinmonster", + "name": "optinmonster", + "className": "optinmonster", + "unicode": "\\f23c", + "type": "brand" + }, + { + "rawName": "options", + "name": "options", + "className": "options", + "unicode": "\\f1de", + "type": "solid" + }, + { + "rawName": "other-gender-horizontal", + "name": "other gender horizontal", + "className": "other.gender.horizontal", + "unicode": "\\f22b", + "type": "solid" + }, + { + "rawName": "other-gender-vertical", + "name": "other gender vertical", + "className": "other.gender.vertical", + "unicode": "\\f22a", + "type": "solid" + }, + { + "rawName": "other-gender", + "name": "other gender", + "className": "other.gender", + "unicode": "\\f229", + "type": "solid" + }, + { + "rawName": "payment", + "name": "payment", + "className": "payment", + "unicode": "\\f09d", + "type": "solid" + }, + { + "rawName": "paypal-card", + "name": "paypal card", + "className": "paypal.card", + "unicode": "\\f1f4", + "type": "brand" + }, + { + "rawName": "pencil-square", + "name": "pencil square", + "className": "pencil.square", + "unicode": "\\f14b", + "type": "solid" + }, + { + "rawName": "photo", + "name": "photo", + "className": "photo", + "unicode": "\\f030", + "type": "solid" + }, + { + "rawName": "picture", + "name": "picture", + "className": "picture", + "unicode": "\\f03e", + "type": "solid" + }, + { + "rawName": "pie-chart", + "name": "pie chart", + "className": "pie.chart", + "unicode": "\\f200", + "type": "solid" + }, + { + "rawName": "pie-graph", + "name": "pie graph", + "className": "pie.graph", + "unicode": "\\f200", + "type": "solid" + }, + { + "rawName": "pied-piper-hat", + "name": "pied piper hat", + "className": "pied.piper.hat", + "unicode": "\\f2ae", + "type": "brand" + }, + { + "rawName": "pin", + "name": "pin", + "className": "pin", + "unicode": "\\f08d", + "type": "solid" + }, + { + "rawName": "plus-cart", + "name": "plus cart", + "className": "plus.cart", + "unicode": "\\f217", + "type": "solid" + }, + { + "rawName": "pocket", + "name": "pocket", + "className": "pocket", + "unicode": "\\f265", + "type": "brand" + }, + { + "rawName": "point", + "name": "point", + "className": "point", + "unicode": "\\f041", + "type": "solid" + }, + { + "rawName": "pointing-down", + "name": "pointing down", + "className": "pointing.down", + "unicode": "\\f0a7", + "type": "solid" + }, + { + "rawName": "pointing-left", + "name": "pointing left", + "className": "pointing.left", + "unicode": "\\f0a5", + "type": "solid" + }, + { + "rawName": "pointing-right", + "name": "pointing right", + "className": "pointing.right", + "unicode": "\\f0a4", + "type": "solid" + }, + { + "rawName": "pointing-up", + "name": "pointing up", + "className": "pointing.up", + "unicode": "\\f0a6", + "type": "solid" + }, + { + "rawName": "pound", + "name": "pound", + "className": "pound", + "unicode": "\\f154", + "type": "solid" + }, + { + "rawName": "power-cord", + "name": "power cord", + "className": "power.cord", + "unicode": "\\f1e6", + "type": "solid" + }, + { + "rawName": "power", + "name": "power", + "className": "power", + "unicode": "\\f011", + "type": "solid" + }, + { + "rawName": "privacy", + "name": "privacy", + "className": "privacy", + "unicode": "\\f084", + "type": "solid" + }, + { + "rawName": "r-circle", + "name": "r circle", + "className": "r.circle", + "unicode": "\\f25d", + "type": "solid" + }, + { + "rawName": "rain", + "name": "rain", + "className": "rain", + "unicode": "\\f0e9", + "type": "solid" + }, + { + "rawName": "record", + "name": "record", + "className": "record", + "unicode": "\\f03d", + "type": "solid" + }, + { + "rawName": "refresh", + "name": "refresh", + "className": "refresh", + "unicode": "\\f021", + "type": "solid" + }, + { + "rawName": "remove-circle", + "name": "remove circle", + "className": "remove.circle", + "unicode": "\\f057", + "type": "solid" + }, + { + "rawName": "remove-from-calendar", + "name": "remove from calendar", + "className": "remove.from.calendar", + "unicode": "\\f272", + "type": "solid" + }, + { + "rawName": "remove-user", + "name": "remove user", + "className": "remove.user", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "remove", + "name": "remove", + "className": "remove", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "repeat", + "name": "repeat", + "className": "repeat", + "unicode": "\\f01e", + "type": "solid" + }, + { + "rawName": "rmb", + "name": "rmb", + "className": "rmb", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "rouble", + "name": "rouble", + "className": "rouble", + "unicode": "\\f158", + "type": "solid" + }, + { + "rawName": "rub", + "name": "rub", + "className": "rub", + "unicode": "\\f158", + "type": "solid" + }, + { + "rawName": "ruble", + "name": "ruble", + "className": "ruble", + "unicode": "\\f158", + "type": "solid" + }, + { + "rawName": "rupee", + "name": "rupee", + "className": "rupee", + "unicode": "\\f156", + "type": "solid" + }, + { + "rawName": "s15", + "name": "s15", + "className": "s15", + "unicode": "\\f2cd", + "type": "solid" + }, + { + "rawName": "selected-radio", + "name": "selected radio", + "className": "selected.radio", + "unicode": "\\f192", + "type": "solid" + }, + { + "rawName": "send", + "name": "send", + "className": "send", + "unicode": "\\f1d8", + "type": "solid" + }, + { + "rawName": "setting", + "name": "setting", + "className": "setting", + "unicode": "\\f013", + "type": "solid" + }, + { + "rawName": "settings", + "name": "settings", + "className": "settings", + "unicode": "\\f085", + "type": "solid" + }, + { + "rawName": "shekel", + "name": "shekel", + "className": "shekel", + "unicode": "\\f20b", + "type": "solid" + }, + { + "rawName": "sheqel", + "name": "sheqel", + "className": "sheqel", + "unicode": "\\f20b", + "type": "solid" + }, + { + "rawName": "shipping", + "name": "shipping", + "className": "shipping", + "unicode": "\\f0d1", + "type": "solid" + }, + { + "rawName": "shop", + "name": "shop", + "className": "shop", + "unicode": "\\f07a", + "type": "solid" + }, + { + "rawName": "shuffle", + "name": "shuffle", + "className": "shuffle", + "unicode": "\\f074", + "type": "solid" + }, + { + "rawName": "shutdown", + "name": "shutdown", + "className": "shutdown", + "unicode": "\\f011", + "type": "solid" + }, + { + "rawName": "sidebar", + "name": "sidebar", + "className": "sidebar", + "unicode": "\\f0c9", + "type": "solid" + }, + { + "rawName": "signing", + "name": "signing", + "className": "signing", + "unicode": "\\f2a7", + "type": "solid" + }, + { + "rawName": "signup", + "name": "signup", + "className": "signup", + "unicode": "\\f044", + "type": "solid" + }, + { + "rawName": "sliders", + "name": "sliders", + "className": "sliders", + "unicode": "\\f1de", + "type": "solid" + }, + { + "rawName": "soccer", + "name": "soccer", + "className": "soccer", + "unicode": "\\f1e3", + "type": "solid" + }, + { + "rawName": "sort-alphabet-ascending", + "name": "sort alphabet ascending", + "className": "sort.alphabet.ascending", + "unicode": "\\f15d", + "type": "solid" + }, + { + "rawName": "sort-alphabet-descending", + "name": "sort alphabet descending", + "className": "sort.alphabet.descending", + "unicode": "\\f15e", + "type": "solid" + }, + { + "rawName": "sort-ascending", + "name": "sort ascending", + "className": "sort.ascending", + "unicode": "\\f0de", + "type": "solid" + }, + { + "rawName": "sort-content-ascending", + "name": "sort content ascending", + "className": "sort.content.ascending", + "unicode": "\\f160", + "type": "solid" + }, + { + "rawName": "sort-content-descending", + "name": "sort content descending", + "className": "sort.content.descending", + "unicode": "\\f161", + "type": "solid" + }, + { + "rawName": "sort-descending", + "name": "sort descending", + "className": "sort.descending", + "unicode": "\\f0dd", + "type": "solid" + }, + { + "rawName": "sort-numeric-ascending", + "name": "sort numeric ascending", + "className": "sort.numeric.ascending", + "unicode": "\\f162", + "type": "solid" + }, + { + "rawName": "sort-numeric-descending", + "name": "sort numeric descending", + "className": "sort.numeric.descending", + "unicode": "\\f163", + "type": "solid" + }, + { + "rawName": "sound", + "name": "sound", + "className": "sound", + "unicode": "\\f025", + "type": "solid" + }, + { + "rawName": "spy", + "name": "spy", + "className": "spy", + "unicode": "\\f21b", + "type": "solid" + }, + { + "rawName": "stripe-card", + "name": "stripe card", + "className": "stripe.card", + "unicode": "\\f1f5", + "type": "brand" + }, + { + "rawName": "student", + "name": "student", + "className": "student", + "unicode": "\\f19d", + "type": "solid" + }, + { + "rawName": "talk", + "name": "talk", + "className": "talk", + "unicode": "\\f27a", + "type": "solid" + }, + { + "rawName": "target", + "name": "target", + "className": "target", + "unicode": "\\f140", + "type": "solid" + }, + { + "rawName": "teletype", + "name": "teletype", + "className": "teletype", + "unicode": "\\f1e4", + "type": "solid" + }, + { + "rawName": "television", + "name": "television", + "className": "television", + "unicode": "\\f26c", + "type": "solid" + }, + { + "rawName": "text-cursor", + "name": "text cursor", + "className": "text.cursor", + "unicode": "\\f246", + "type": "solid" + }, + { + "rawName": "text-telephone", + "name": "text telephone", + "className": "text.telephone", + "unicode": "\\f1e4", + "type": "solid" + }, + { + "rawName": "theme-isle", + "name": "theme isle", + "className": "theme.isle", + "unicode": "\\f2b2", + "type": "brand" + }, + { + "rawName": "theme", + "name": "theme", + "className": "theme", + "unicode": "\\f043", + "type": "solid" + }, + { + "rawName": "thermometer", + "name": "thermometer", + "className": "thermometer", + "unicode": "\\f2c7", + "type": "solid" + }, + { + "rawName": "thumb-tack", + "name": "thumb tack", + "className": "thumb.tack", + "unicode": "\\f08d", + "type": "solid" + }, + { + "rawName": "time", + "name": "time", + "className": "time", + "unicode": "\\f017", + "type": "solid" + }, + { + "rawName": "tm", + "name": "tm", + "className": "tm", + "unicode": "\\f25c", + "type": "solid" + }, + { + "rawName": "toggle-down", + "name": "toggle down", + "className": "toggle.down", + "unicode": "\\f150", + "type": "solid" + }, + { + "rawName": "toggle-left", + "name": "toggle left", + "className": "toggle.left", + "unicode": "\\f191", + "type": "solid" + }, + { + "rawName": "toggle-right", + "name": "toggle right", + "className": "toggle.right", + "unicode": "\\f152", + "type": "solid" + }, + { + "rawName": "toggle-up", + "name": "toggle up", + "className": "toggle.up", + "unicode": "\\f151", + "type": "solid" + }, + { + "rawName": "translate", + "name": "translate", + "className": "translate", + "unicode": "\\f1ab", + "type": "solid" + }, + { + "rawName": "travel", + "name": "travel", + "className": "travel", + "unicode": "\\f0b1", + "type": "solid" + }, + { + "rawName": "treatment", + "name": "treatment", + "className": "treatment", + "unicode": "\\f0f1", + "type": "solid" + }, + { + "rawName": "triangle-down", + "name": "triangle down", + "className": "triangle.down", + "unicode": "\\f0d7", + "type": "solid" + }, + { + "rawName": "triangle-left", + "name": "triangle left", + "className": "triangle.left", + "unicode": "\\f0d9", + "type": "solid" + }, + { + "rawName": "triangle-right", + "name": "triangle right", + "className": "triangle.right", + "unicode": "\\f0da", + "type": "solid" + }, + { + "rawName": "triangle-up", + "name": "triangle up", + "className": "triangle.up", + "unicode": "\\f0d8", + "type": "solid" + }, + { + "rawName": "try", + "name": "try", + "className": "try", + "unicode": "\\f195", + "type": "solid" + }, + { + "rawName": "unhide", + "name": "unhide", + "className": "unhide", + "unicode": "\\f06e", + "type": "solid" + }, + { + "rawName": "unlinkify", + "name": "unlinkify", + "className": "unlinkify", + "unicode": "\\f127", + "type": "solid" + }, + { + "rawName": "unmute", + "name": "unmute", + "className": "unmute", + "unicode": "\\f130", + "type": "solid" + }, + { + "rawName": "usd", + "name": "usd", + "className": "usd", + "unicode": "\\f155", + "type": "solid" + }, + { + "rawName": "user-cancel", + "name": "user cancel", + "className": "user.cancel", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "user-close", + "name": "user close", + "className": "user.close", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "user-delete", + "name": "user delete", + "className": "user.delete", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "user-x", + "name": "user x", + "className": "user.x", + "unicode": "\\f235", + "type": "solid" + }, + { + "rawName": "vcard", + "name": "vcard", + "className": "vcard", + "unicode": "\\f2bb", + "type": "solid" + }, + { + "rawName": "video-camera", + "name": "video camera", + "className": "video.camera", + "unicode": "\\f03d", + "type": "solid" + }, + { + "rawName": "video-play", + "name": "video play", + "className": "video.play", + "unicode": "\\f144", + "type": "solid" + }, + { + "rawName": "visa-card", + "name": "visa card", + "className": "visa.card", + "unicode": "\\f1f0", + "type": "brand" + }, + { + "rawName": "visa", + "name": "visa", + "className": "visa", + "unicode": "\\f1f0", + "type": "brand" + }, + { + "rawName": "volume-control-phone", + "name": "volume control phone", + "className": "volume.control.phone", + "unicode": "\\f2a0", + "type": "solid" + }, + { + "rawName": "wait", + "name": "wait", + "className": "wait", + "unicode": "\\f017", + "type": "solid" + }, + { + "rawName": "warning-circle", + "name": "warning circle", + "className": "warning.circle", + "unicode": "\\f06a", + "type": "solid" + }, + { + "rawName": "warning-sign", + "name": "warning sign", + "className": "warning.sign", + "unicode": "\\f071", + "type": "solid" + }, + { + "rawName": "warning", + "name": "warning", + "className": "warning", + "unicode": "\\f12a", + "type": "solid" + }, + { + "rawName": "wechat", + "name": "wechat", + "className": "wechat", + "unicode": "\\f1d7", + "type": "brand" + }, + { + "rawName": "wi-fi", + "name": "wi fi", + "className": "wi.fi", + "unicode": "\\f1eb", + "type": "solid" + }, + { + "rawName": "wikipedia", + "name": "wikipedia", + "className": "wikipedia", + "unicode": "\\f266", + "type": "brand" + }, + { + "rawName": "winner", + "name": "winner", + "className": "winner", + "unicode": "\\f091", + "type": "solid" + }, + { + "rawName": "wizard", + "name": "wizard", + "className": "wizard", + "unicode": "\\f0d0", + "type": "solid" + }, + { + "rawName": "woman", + "name": "woman", + "className": "woman", + "unicode": "\\f221", + "type": "solid" + }, + { + "rawName": "won", + "name": "won", + "className": "won", + "unicode": "\\f159", + "type": "solid" + }, + { + "rawName": "wordpress-beginner", + "name": "wordpress beginner", + "className": "wordpress.beginner", + "unicode": "\\f297", + "type": "brand" + }, + { + "rawName": "wordpress-forms", + "name": "wordpress forms", + "className": "wordpress.forms", + "unicode": "\\f298", + "type": "brand" + }, + { + "rawName": "world", + "name": "world", + "className": "world", + "unicode": "\\f0ac", + "type": "solid" + }, + { + "rawName": "write-square", + "name": "write square", + "className": "write.square", + "unicode": "\\f14b", + "type": "solid" + }, + { + "rawName": "x", + "name": "x", + "className": "x", + "unicode": "\\f00d", + "type": "solid" + }, + { + "rawName": "yc", + "name": "yc", + "className": "yc", + "unicode": "\\f23b", + "type": "brand" + }, + { + "rawName": "ycombinator", + "name": "ycombinator", + "className": "ycombinator", + "unicode": "\\f23b", + "type": "brand" + }, + { + "rawName": "yen", + "name": "yen", + "className": "yen", + "unicode": "\\f157", + "type": "solid" + }, + { + "rawName": "zip", + "name": "zip", + "className": "zip", + "unicode": "\\f187", + "type": "solid" + }, + { + "rawName": "zoom-in", + "name": "zoom in", + "className": "zoom.in", + "unicode": "\\f00e", + "type": "solid" + }, + { + "rawName": "zoom-out", + "name": "zoom out", + "className": "zoom.out", + "unicode": "\\f010", + "type": "solid" + }, + { + "rawName": "zoom", + "name": "zoom", + "className": "zoom", + "unicode": "\\f00e", + "type": "solid" + }, + { + "rawName": "bitbucket-square", + "name": "bitbucket square", + "className": "bitbucket.square", + "unicode": "\\f171", + "type": "brand" + }, + { + "rawName": "checkmark-box", + "name": "checkmark box", + "className": "checkmark.box", + "unicode": "\\f14a", + "type": "solid" + }, + { + "rawName": "circle-thin", + "name": "circle thin", + "className": "circle.thin", + "unicode": "\\f111", + "type": "solid" + }, + { + "rawName": "cloud-download", + "name": "cloud download", + "className": "cloud.download", + "unicode": "\\f381", + "type": "solid" + }, + { + "rawName": "cloud-upload", + "name": "cloud upload", + "className": "cloud.upload", + "unicode": "\\f382", + "type": "solid" + }, + { + "rawName": "compose", + "name": "compose", + "className": "compose", + "unicode": "\\f303", + "type": "solid" + }, + { + "rawName": "conversation", + "name": "conversation", + "className": "conversation", + "unicode": "\\f086", + "type": "solid" + }, + { + "rawName": "credit-card-alternative", + "name": "credit card alternative", + "className": "credit.card.alternative", + "unicode": "\\f09d", + "type": "solid" + }, + { + "rawName": "currency", + "name": "currency", + "className": "currency", + "unicode": "\\f3d1", + "type": "solid" + }, + { + "rawName": "dashboard", + "name": "dashboard", + "className": "dashboard", + "unicode": "\\f3fd", + "type": "solid" + }, + { + "rawName": "diamond", + "name": "diamond", + "className": "diamond", + "unicode": "\\f3a5", + "type": "solid" + }, + { + "rawName": "disk-outline", + "name": "disk outline", + "className": "disk.outline", + "unicode": "\\f369", + "type": "brand" + }, + { + "rawName": "disk", + "name": "disk", + "className": "disk", + "unicode": "\\f0a0", + "type": "solid" + }, + { + "rawName": "exchange", + "name": "exchange", + "className": "exchange", + "unicode": "\\f362", + "type": "solid" + }, + { + "rawName": "external-share", + "name": "external share", + "className": "external.share", + "unicode": "\\f14d", + "type": "solid" + }, + { + "rawName": "external-square", + "name": "external square", + "className": "external.square", + "unicode": "\\f360", + "type": "solid" + }, + { + "rawName": "external", + "name": "external", + "className": "external", + "unicode": "\\f35d", + "type": "solid" + }, + { + "rawName": "facebook-official", + "name": "facebook official", + "className": "facebook.official", + "unicode": "\\f082", + "type": "brand" + }, + { + "rawName": "food", + "name": "food", + "className": "food", + "unicode": "\\f2e7", + "type": "solid" + }, + { + "rawName": "heart-empty", + "name": "heart empty", + "className": "heart.empty", + "unicode": "\\f004", + "type": "solid" + }, + { + "rawName": "hourglass-zero", + "name": "hourglass zero", + "className": "hourglass.zero", + "unicode": "\\f253", + "type": "solid" + }, + { + "rawName": "level-down", + "name": "level down", + "className": "level.down", + "unicode": "\\f3be", + "type": "solid" + }, + { + "rawName": "level-up", + "name": "level up", + "className": "level.up", + "unicode": "\\f3bf", + "type": "solid" + }, + { + "rawName": "log-out", + "name": "log out", + "className": "log.out", + "unicode": "\\f2f5", + "type": "solid" + }, + { + "rawName": "meanpath", + "name": "meanpath", + "className": "meanpath", + "unicode": "\\f0c8", + "type": "solid" + }, + { + "rawName": "money", + "name": "money", + "className": "money", + "unicode": "\\f3d1", + "type": "solid" + }, + { + "rawName": "move", + "name": "move", + "className": "move", + "unicode": "\\f0b2", + "type": "solid" + }, + { + "rawName": "pencil", + "name": "pencil", + "className": "pencil", + "unicode": "\\f303", + "type": "solid" + }, + { + "rawName": "protect", + "name": "protect", + "className": "protect", + "unicode": "\\f023", + "type": "solid" + }, + { + "rawName": "radio", + "name": "radio", + "className": "radio", + "unicode": "\\f192", + "type": "solid" + }, + { + "rawName": "remove-bookmark", + "name": "remove bookmark", + "className": "remove.bookmark", + "unicode": "\\f02e", + "type": "solid" + }, + { + "rawName": "resize-horizontal", + "name": "resize horizontal", + "className": "resize.horizontal", + "unicode": "\\f337", + "type": "solid" + }, + { + "rawName": "resize-vertical", + "name": "resize vertical", + "className": "resize.vertical", + "unicode": "\\f338", + "type": "solid" + }, + { + "rawName": "sign-in", + "name": "sign in", + "className": "sign.in", + "unicode": "\\f2f6", + "type": "solid" + }, + { + "rawName": "sign-out", + "name": "sign out", + "className": "sign.out", + "unicode": "\\f2f5", + "type": "solid" + }, + { + "rawName": "spoon", + "name": "spoon", + "className": "spoon", + "unicode": "\\f2e5", + "type": "solid" + }, + { + "rawName": "star-empty", + "name": "star empty", + "className": "star.empty", + "unicode": "\\f005", + "type": "solid" + }, + { + "rawName": "star-half-empty", + "name": "star half empty", + "className": "star.half.empty", + "unicode": "\\f089", + "type": "solid" + }, + { + "rawName": "star-half-full", + "name": "star half full", + "className": "star.half.full", + "unicode": "\\f089", + "type": "solid" + }, + { + "rawName": "ticket", + "name": "ticket", + "className": "ticket", + "unicode": "\\f3ff", + "type": "solid" + }, + { + "rawName": "times-rectangle", + "name": "times rectangle", + "className": "times.rectangle", + "unicode": "\\f410", + "type": "solid" + }, + { + "rawName": "write", + "name": "write", + "className": "write", + "unicode": "\\f303", + "type": "solid" + }, + { + "rawName": "youtube-play", + "name": "youtube play", + "className": "youtube.play", + "unicode": "\\f167", + "type": "brand" + }, + { + "rawName": "bars", + "name": "hamburger", + "className": "hamburger", + "unicode": "\\f0c9", + "type": "solid" + } +] diff --git a/static/category-descriptions.json b/src/static/categories.json similarity index 60% rename from static/category-descriptions.json rename to src/static/categories.json index 93a4cd1..90f751d 100644 --- a/static/category-descriptions.json +++ b/src/static/categories.json @@ -1,48 +1,77 @@ { "accessibility": "Icons can represent accessibility standards", + "alert": "Icons which can alert users to an action or information", "animals": "Icons can represent animals", "arrows": "Icons can be used to indicate a direction", "audio-video": "Icons can be used to represent common ways to interact with audio and video", "automotive": "Icons can represent vehicles and automotive activities", "autumn": "Icons which represent the Autumn season", + "beverage": "Icons which represent types of beverages", "buildings": "Icons can represent common building types", "business": "Icons can be used to represent business and common business actions", + "camping": "Icons which represent camping activities and equipment", "charity": "Icons can represent common charity activities", "chat": "Icons can represent common chat symbols and actions", "chess": "Icons which represent the game chess", + "childhood": "Icons which represent childhood activities", + "clothing": "Icons which represent types of clothing", "code": "Icons can represent programming and programming tools", "communication": "Icons which represent common ways of communication", "computers": "Icons can represent computing devices, or types of content found on a computer", + "construction": "Icons which represent construction activities", "currency": "Icons can represent units of currency", "date-time": "Icons that represent common ways of showing date and time", "design": "Icons can represent common design related symbols or techniques", "editors": "Icons can represent text editors and common editor actions", "education": "Icons can represent education types and activities", - "emoji": "Icons whcih represent emoji's", + "emoji": "Icons which represent emoji's", + "energy": "Icons which represent energy equipment, types and status", "files": "Icons can represent elements of a computer and its file system", + "finance": "Icons which represent financial activities", + "fitness": "Icons which represent fitness activities", + "food": "Icons which represent food", + "fruit-vegetable": "Icons which represent fruit and vegetables", + "games": "Icons which represent gaming equipment and platforms", "gender": "Icons can represent genders or types of sexuality", "halloween": "Icons which represent Halloween", "hands": "Icons can represent hand signals and gestures", "health": "Icons which represent common health symbols", + "holiday": "Icons which represent holiday items", + "hotel": "Icons which represent hotel items and utilities", + "household": "Icons which represent household items and utilities", "images": "Icons that represent common image symbols and actions", "interfaces": "Icons can represent common actions a user can take or use", "logistics": "Icons can represent common logistic activity", "maps": "Icons can be used to represent elements on a map", + "maritime": "Icons which represent maritime tools and activities", "marketing": "Icons can represent marketing materials and symbols", "mathematics": "Icons which represent common mathematic symbols", "medical": "Icons can represent common medical actions", "moving": "Icons can represent moving activities", + "music": "Icons which represent musical instruments, items and platforms", "objects": "Icons can be used to represent common objects", "payments-shopping": "Icons can represent common forms of payment and shopping actions", + "pharmacy": "Icons which represent pharmaceutical items and activities", + "political": "Icons which represent political activities and actions", "religion": "Icons which represent religious activities and symbols", + "science": "Icons which represent science activities and items", + "science-fiction": "Icons which represent science fiction story items", + "security": "Icons which represent security items and activities", "shapes": "Icons can be used to create shapes", + "shopping": "Icons which represent shopping activities and actions", + "social": "Icons which represent social actions", "spinners": "Icons can represent loading", "sports": "Icons which represent sports", + "spring": "Icons which represent spring activities", "status": "Icons can represent different states", + "summer": "Icons which represent summer activities", "gaming-tabletop": "Icons which represent table-top games", + "toggle": "Icons which represent toggling an action", "travel": "Icons which represent traveling activities", "users-people": "Icons can represent users or people", "vehicles": "Icons can represent vehicles or transport", + "weather": "Icons which represent the weather", + "winter": "Icons which represent winter activities", "writing": "Icons can represent writing and editing", "brands": "Icons can represent logos to common brands" } diff --git a/static/corrections.json b/src/static/corrections.json similarity index 54% rename from static/corrections.json rename to src/static/corrections.json index 027d449..73af463 100644 --- a/static/corrections.json +++ b/src/static/corrections.json @@ -1,68 +1,61 @@ { - "blank-demo-template": { - "faName": "you-shouldnt-change-this-but-you-can", - "fuiName": "the name used by FUI", - "className": "the class name used by FUI", - "unicode": "the icon unicode", - "categories": "an array of categories the icon should be in" - }, "accessible-icon": { - "fuiName": "accessible", + "name": "accessible", "className": "accessible" }, "500px": { "className": "\\35 00px" }, "vimeo-v": { - "fuiName": "vimeo v", + "name": "vimeo v", "className": "vimeo.v" }, "red-river": { - "fuiName": "redriver", + "name": "redriver", "className": "redriver" }, "external-link-alt": { - "fuiName": "external alternate", + "name": "external alternate", "className": "external.alternate" }, "link": { - "fuiName": "linkify", + "name": "linkify", "className": "linkify" }, "line": { - "fuiName": "linechat", + "name": "linechat", "className": "linechat" }, "apple-alt": { - "fuiName": "fruit-apple", + "name": "fruit-apple", "className": "fruit-apple" }, "less": { - "fuiName": "lesscss", + "name": "lesscss", "className": "lesscss" }, "truck-loading": { - "fuiName": "truck packing", + "name": "truck packing", "className": "truck.packing" }, "tablet-android": { - "fuiName": "android-tablet", + "name": "android-tablet", "className": "android-tablet" }, "tablet-android-alt": { - "fuiName": "android-tablet alternate", + "name": "android-tablet alternate", "className": "android-tablet.alternate" }, "mobile-android": { - "fuiName": "android-mobile", + "name": "android-mobile", "className": "android-mobile" }, "mobile-android-alt": { - "fuiName": "android-mobile alternate", + "name": "android-mobile alternate", "className": "android-mobile.alternate" }, "the-red-yeti": { - "fuiName": "redyeti", + "name": "redyeti", "className": "redyeti" } } diff --git a/src/static/icon_sets.json b/src/static/icon_sets.json new file mode 100644 index 0000000..ec896f6 --- /dev/null +++ b/src/static/icon_sets.json @@ -0,0 +1,27 @@ +[ + { + "name": "FontAwesome Free", + "repo": "FortAwesome/Font-Awesome", + "requiresAuth": false, + "assetMatch": "fontawesome-free-\\d+\\.\\d+\\.\\d+-web\\.zip", + "parser": "FontAwesome", + "types": [ + "solid", + "outline", + "brand" + ] + }, + { + "name": "FontAwesome Pro", + "repo": "FortAwesome/Font-Awesome-Pro", + "requiresAuth": true, + "assetMatch": "fontawesome-pro-\\d+\\.\\d+\\.\\d+-web\\.zip", + "parser": "FontAwesome", + "types": [ + "solid", + "outline", + "light", + "brand" + ] + } +] diff --git a/src/tasks/BuildDist.ts b/src/tasks/BuildDist.ts new file mode 100644 index 0000000..aee889e --- /dev/null +++ b/src/tasks/BuildDist.ts @@ -0,0 +1,112 @@ +// node +import { resolve as resolvePath } from 'path'; + +// npm +import Liquid from 'liquidjs'; +import * as fse from 'fs-extra'; + +// tasks +import { PromptResults } from './InitialPrompt'; +import { ParseResults } from '../parsers/FontAwesome'; + +// utils +import Logger, { spinner } from '../util/Logger'; + +export default function run(results: PromptResults, parseResults: ParseResults): Promise { + return new Promise((resolve) => { + Logger.log(); + const distSpinner = spinner() + .start('building dist'); + + const engine = new Liquid({ + root: resolvePath(__dirname, '../../src/ templates'), + extname: '.liquid', + }); + + const ctx: { [key: string]: any } = parseResults; + ctx.version = results.asset.version; + + const distFiles: { [key: string]: string } = { + 'icon.html.eco': 'docs/server/documents/elements/', + 'icon.overrides': 'ui/src/themes/default/elements/', + 'icon.variables': 'ui/src/themes/default/elements/', + }; + + const templateFileRenderFuncs = Object.keys(distFiles) + .map(filename => new Promise((resolveRender, rejectRender) => { + engine.renderFile(`${filename}.liquid`, ctx) + .then((renderResult) => { + const fileOutputDirectory = resolvePath(results.distPath, distFiles[filename]); + fse.mkdirp(fileOutputDirectory) + .then(() => { + fse.writeFile( + resolvePath(fileOutputDirectory, filename), + renderResult, + ) + .then(() => resolveRender()) + .catch(rejectRender); + }) + .catch(rejectRender); + }) + .catch(rejectRender); + })); + + const copyAssetsFunc = new Promise((resolveAssetCopy, rejectAssetCopy) => { + fse.readdir(parseResults.fontAssetsDirectory) + .then((files) => { + let copiedFiles = 0; + const copied = () => { + copiedFiles += 1; + if (copiedFiles >= files.length) { + resolveAssetCopy(); + } + }; + + const distPath = resolvePath(results.distPath, 'ui/src/themes/default/assets/fonts'); + fse.mkdirp(distPath) + .then(() => { + files.forEach((file) => { + const filenameSplit = file.split('.'); + const newFileName = `${parseResults.fontFileNames[filenameSplit[0]]}.${filenameSplit[1]}`; + const assetFilePath = resolvePath( + parseResults.fontAssetsDirectory, + file, + ); + const assetDistPath = resolvePath(distPath, newFileName); + fse.copyFile(assetFilePath, assetDistPath) + .then(() => { + copied(); + }) + .catch(rejectAssetCopy); + }); + }) + .catch(rejectAssetCopy); + }) + .catch(rejectAssetCopy); + }); + + fse.mkdirp(results.distPath) + .then(() => { + Promise + .all([ + ...templateFileRenderFuncs, + copyAssetsFunc, + ]) + .then(() => { + distSpinner.succeed('build all dist files'); + Logger.log(` Files saved to ${results.distPath}`); + resolve(); + }) + .catch((err) => { + distSpinner.stop(); + Logger.error(err); + process.exit(1); + }); + }) + .catch((err) => { + distSpinner.stop(); + Logger.error(err); + process.exit(1); + }); + }); +} diff --git a/src/tasks/CleanUp.ts b/src/tasks/CleanUp.ts new file mode 100644 index 0000000..cd744f9 --- /dev/null +++ b/src/tasks/CleanUp.ts @@ -0,0 +1,28 @@ +// node +import { resolve as resolvePath } from 'path'; +import { tmpdir } from 'os'; + +// npm +import * as fse from 'fs-extra'; + +// utils +import Logger, { spinner } from '../util/Logger'; + +export default function run() { + return new Promise((resolve) => { + Logger.log(); + + const cleanUpSpinner = spinner() + .start('cleaning up asset files'); + + fse.remove(resolvePath(tmpdir(), 'fui-icon-script')) + .then(() => { + cleanUpSpinner.succeed('all assets cleaned up'); + resolve(); + }) + .catch((err) => { + cleanUpSpinner.stop(); + Logger.error(err); + }); + }); +} diff --git a/src/tasks/DownloadAsset.ts b/src/tasks/DownloadAsset.ts new file mode 100644 index 0000000..eac6c86 --- /dev/null +++ b/src/tasks/DownloadAsset.ts @@ -0,0 +1,190 @@ +// node +import { resolve as resolvePath } from 'path'; +import { tmpdir } from 'os'; + +// npm +import axios from 'axios'; +import * as fse from 'fs-extra'; +import { Extract as extractZip } from 'unzipper'; + +// tasks +import { PromptResults, Asset } from './InitialPrompt'; + +// utils +import Logger, { spinner } from '../util/Logger'; + +export interface PathResults { + assetFilePath: string; + assetDirectoryPath: string; +} + +export function extractAsset(asset: Asset, filePath: string): Promise { + return new Promise((resolve) => { + const extractSpinner = spinner() + .start(`extracting asset zip (${asset.name})`); + + const assetDirectory = resolvePath(tmpdir(), 'fui-icon-script', asset.name + .split('.').slice(0, -1).join('.')); + + const assetReadStream = fse.createReadStream(filePath); + + assetReadStream + .pipe(extractZip({ + path: assetDirectory, + })); + + assetReadStream + .once('error', (err) => { + extractSpinner.stop(); + Logger.error(err); + process.exit(1); + }); + + assetReadStream + .once('close', () => { + extractSpinner.succeed(`asset extracted (${assetDirectory})`); + resolve(assetDirectory); + }); + }); +} + +export function saveAssetFile(asset: Asset, data: ArrayBuffer): Promise { + return new Promise((resolve) => { + const saveSpinner = spinner() + .start(`saving asset (${asset.name})`); + + const filePath = resolvePath(tmpdir(), 'fui-icon-script', asset.name); + + fse.outputFile(filePath, data, (saveErr) => { + if (!saveErr) { + saveSpinner.succeed(`asset saved (${filePath})`); + resolve(filePath); + } else { + saveSpinner.stop(); + Logger.error(saveErr); + process.exit(1); + } + }); + }); +} + +export function downloadAsset(results: PromptResults): Promise { + return new Promise((resolve) => { + const { + asset, + } = results; + + const downloadSpinner = spinner() + .start(`downloading (${asset.name})`); + + const axiosConfig: { [key: string]: any; } = { + responseType: 'arraybuffer', + headers: { + Accept: 'application/octet-stream', + 'User-Agent': 'request-module', + }, + encoding: null, + }; + + if (results.iconSet.requiresAuth) { + axiosConfig.headers.Authorization = `token ${results.accessToken}`; + } + + const apiDownloadUrl = `https://${results.accessToken}:@api.github.com/repos/${results.iconSet.repo}/releases/assets/${results.asset.id}`; + let isDownloading = true; + const downloadTextTimer = setTimeout(() => { + if (isDownloading) { + downloadSpinner.text = `${downloadSpinner.text} [still downloading, hold on]`; + } + }, 1000 * 120 /* 2mins */); + + axios + .get(apiDownloadUrl, axiosConfig) + .then(({ data, status }) => { + isDownloading = false; + clearTimeout(downloadTextTimer); + + if (status === 200) { + downloadSpinner.succeed(`downloaded (${asset.name})`); + resolve(data); + } else { + downloadSpinner.stop(); + Logger.error(new Error('Failed to download asset file.')); + process.exit(1); + } + }) + .catch((err: Error) => { + downloadSpinner.stop(); + Logger.error(err); + process.exit(1); + }); + }); +} + +export function startDownload(results: PromptResults): Promise { + return new Promise((resolve) => { + downloadAsset(results) + .then((downloadData) => { + saveAssetFile(results.asset, downloadData) + .then((assetFilePath) => { + extractAsset(results.asset, assetFilePath) + .then((assetDirectoryPath) => { + resolve({ + assetFilePath, + assetDirectoryPath, + }); + }); + }); + }); + }); +} + +export default function run(results: PromptResults): Promise { + return new Promise((resolve) => { + Logger.log(); + + const assetCheckSpinner = spinner() + .start('checking if asset already exists'); + + const assetFilePath = resolvePath(tmpdir(), 'fui-icon-script', results.asset.name); + const assetDirectoryPath = resolvePath(tmpdir(), 'fui-icon-script', results.asset.name + .split('.').slice(0, -1).join('.')); + + fse.pathExists(assetFilePath) + .then((assetExists) => { + if (assetExists) { + fse.pathExists(assetFilePath) + .then((directoryExists) => { + if (directoryExists) { + assetCheckSpinner.succeed('asset already exists'); + + resolve({ + assetFilePath, + assetDirectoryPath, + }); + } else { + assetCheckSpinner.info('asset doesn\'t exist locally, starting download') + .stop(); + + startDownload(results) + .then(resolve); + } + }) + .catch((err) => { + Logger.error(err); + process.exit(1); + }); + } else { + assetCheckSpinner.info('asset doesn\'t exist locally, starting download') + .stop(); + + startDownload(results) + .then(resolve); + } + }) + .catch((err) => { + Logger.error(err); + process.exit(1); + }); + }); +} diff --git a/src/tasks/InitialPrompt.ts b/src/tasks/InitialPrompt.ts new file mode 100644 index 0000000..038fe8b --- /dev/null +++ b/src/tasks/InitialPrompt.ts @@ -0,0 +1,224 @@ +// node +import { resolve as resolvePath } from 'path'; + +// npm +import qoa from 'qoa'; +import chalk from 'chalk'; +import axios from 'axios'; + +// utils +import Logger from '../util/Logger'; + +// icon sets +import IconSets from '../static/icon_sets.json'; + +export interface IconSet { + name: string; + repo: string; + requiresAuth: boolean; + assetMatch: string; + parser: string; +} + +export interface PromptResults { + iconSet: IconSet; + accessToken?: string; + asset: Asset; + distPath: string; +} + +export interface PromptAnswers { + [key: string]: string +} + +export interface GitHubReleaseAsset { + name: string; + id: number; + browser_download_url: string; +} + +export interface GitHubRelease { + tag_name: string; + assets: GitHubReleaseAsset[]; +} + +export interface Asset { + name: string; + id: number; + version: string; + downloadUrl: string; +} + +export function askForAccessToken(): Promise { + Logger.log(); + + return new Promise((resolve) => { + qoa + .secure({ + query: 'Enter your GitHub personal access token:', + handle: 'accessToken', + }) + .then(({ accessToken }: PromptAnswers) => { + if (!accessToken || accessToken.length === 0) { + Logger.warn('You must enter an access token to proceed.'); + + askForAccessToken() + .then(resolve); + } else { + resolve(accessToken); + } + }) + .catch((err: Error) => { + Logger.error(err); + process.exit(1); + }); + }); +} + +export function askWhichIconSet(): Promise { + Logger.log(); + + return new Promise((resolve) => { + qoa + .interactive({ + handle: 'iconSetName', + query: 'Which icons set would you like to generate?', + menu: IconSets.map(s => s.name), + }) + .then(({ iconSetName }: PromptAnswers) => { + resolve(IconSets.find(s => s.name === iconSetName)); + }) + .catch((err: Error) => { + Logger.error(err); + process.exit(1); + }); + }); +} + +export function selectIconSetVersion(iconSet: IconSet, accessToken?: string): Promise { + Logger.log(); + + const axiosConfig = accessToken === undefined ? {} : { + headers: { + Authorization: `token ${accessToken}`, + }, + }; + + return new Promise((resolve) => { + axios + .get( + `https://api.github.com/repos/${iconSet.repo}/releases?page=1&per_page=5`, + axiosConfig, + ) + .then(({ status, data }) => { + if (status === 200) { + const versions: Asset[] = []; + + data + .filter((release: GitHubRelease) => release.assets + .some((asset: GitHubReleaseAsset) => { + const regex = new RegExp(iconSet.assetMatch); + return regex.test(asset.name); + })) + .forEach((release: GitHubRelease) => { + const asset: GitHubReleaseAsset = release.assets + .filter((a) => { + const regex = new RegExp(iconSet.assetMatch); + return regex.test(a.name); + })[0]; + + versions.push({ + name: asset.name, + id: asset.id, + version: release.tag_name, + downloadUrl: asset.browser_download_url, + }); + }); + + qoa + .interactive({ + handle: 'setVersion', + query: `Which version of ${iconSet.name} should we download?`, + menu: versions.map(v => v.version), + }) + .then(({ setVersion }: PromptAnswers) => { + resolve(versions.find(v => v.version === setVersion)); + }) + .catch((err: Error) => { + Logger.error(err); + process.exit(1); + }); + } else { + Logger.error(new Error('Failed to fetch releases from git repository.')); + process.exit(1); + } + }) + .catch((err: Error) => { + Logger.error(err); + process.exit(1); + }); + }); +} + +export function askForDistPath(): Promise { + return new Promise((resolve) => { + Logger.log(); + + const cwd = process.cwd(); + const defaultPath = resolvePath(cwd, 'fui-icons'); + + qoa + .input({ + type: 'input', + query: `Where would you like the dist saved? [${defaultPath}]`, + handle: 'distPath', + }) + .then(({ distPath }: PromptAnswers) => { + resolve(distPath === '' + ? defaultPath : resolvePath(distPath)); + }) + .catch((err: Error) => { + Logger.error(err); + process.exit(1); + }); + }); +} + +export default function run(): Promise { + return new Promise((resolve) => { + qoa.clearScreen(); + Logger.log(chalk.cyan('Fomantic-UI Icon CLI')); + + askWhichIconSet() + .then((iconSet) => { + const selectVersion = (accessToken?: string) => { + selectIconSetVersion(iconSet, accessToken) + .then((asset) => { + askForDistPath() + .then((distPath) => { + resolve({ + iconSet, + accessToken, + asset, + distPath, + }); + }); + }); + }; + + if (iconSet.requiresAuth) { + Logger.log(); + Logger.note('The icon set you selected requires authentication to download.'); + Logger.note('Generate a personal access token here: https://github.com/settings/tokens'); + Logger.note('Your token must allow private repository viewing.'); + + askForAccessToken() + .then((accessToken) => { + selectVersion(accessToken); + }); + } else { + selectVersion(); + } + }); + }); +} diff --git a/templates/icon.html.eco.crather b/src/templates/icon.html.eco.liquid similarity index 92% rename from templates/icon.html.eco.crather rename to src/templates/icon.html.eco.liquid index 35afbbf..7b7c993 100644 --- a/templates/icon.html.eco.crather +++ b/src/templates/icon.html.eco.liquid @@ -37,7 +37,22 @@ themes : ['Default']
Semantic includes a complete port of Font Awesome {{ version }} designed by the FontAwesome team for its standard icon set.
- {{ categories }} + {% for category in categories -%} +
+

{{ category.name }}

+

{{ category.description }}

+
+ {%- for icon in category.icons %} +
{{ icon.name }}
+ {%- endfor %} +
+
+ {%- for icon in category.icons %} + + {%- endfor %} +
+
+ {% endfor %}
diff --git a/templates/icon.overrides.crather b/src/templates/icon.overrides.liquid similarity index 51% rename from templates/icon.overrides.crather rename to src/templates/icon.overrides.liquid index 9ea24ca..ecd1e37 100644 --- a/templates/icon.overrides.crather +++ b/src/templates/icon.overrides.liquid @@ -40,19 +40,30 @@ i.icon.in.cart:before { content: "\f218"; } i.icon.log.out:before { content: "\f2f5"; } i.icon.sign.out:before { content: "\f2f5"; } -/* Icons */ -{{ solid.definitions }} - -{{; solidAliases }} +{% if icons.solid.icons.length > 0 -%} +/******************************* + Solid Icons +*******************************/ +/* Icons */ +{% for icon in icons.solid.icons -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; } +{% endfor %} +{% if icons.solid.aliases.length > 0 -%} +/* Aliases */ +{% for icon in icons.solid.aliases -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; } +{% endfor %} +{%- endif %}{%- endif %} + +{%- if icons.outline.icons.length > 0 %} /******************************* Outline Icons *******************************/ /* Outline Icon */ .loadOutlineIcons() when (@importOutlineIcons) { - /* Load & Define Icon Font */ @font-face { font-family: @outlineFontName; @@ -69,21 +80,63 @@ i.icon.sign.out:before { content: "\f2f5"; } font-family: @outlineFontName; } - /* Icon Definitions */ - {{ outline.definitions }} - - {{; outlineAliases }} + /* Icons */ + {% for icon in icons.outline.icons -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; } + {% endfor %} + {% if icons.outline.aliases.length > 0 -%} + /* Aliases */ + {% for icon in icons.outline.aliases -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; } + {% endfor %}{%- endif %} } .loadOutlineIcons(); +{%- endif %} + +{% if icons.thin.icons.length > 0 -%} +/******************************* + Thin Icons +*******************************/ + +/* Thin Icon */ +.loadThinIcons() when (@importThinIcons) { + /* Load & Define Icon Font */ + @font-face { + font-family: @thinFontName; + src: @thinFallbackSRC; + src: @thinSrc; + font-style: normal; + font-weight: @normal; + font-variant: normal; + text-decoration: inherit; + text-transform: none; + } + + i.icon.thin { + font-family: @thinFontName; + } + /* Icons */ + {% for icon in icons.thin.icons -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; } + {% endfor %} + {% if icons.thin.aliases.length > 0 -%} + /* Aliases */ + {% for icon in icons.thin.aliases -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; } + {% endfor %}{%- endif %} +} +.loadThinIcons(); +{%- endif %} + +{% if icons.brand.icons.length > 0 -%} /******************************* Brand Icons *******************************/ .loadBrandIcons() when (@importBrandIcons) { - /* Load & Define Brand Font */ @font-face { font-family: @brandFontName; @@ -96,15 +149,16 @@ i.icon.sign.out:before { content: "\f2f5"; } text-transform: none; } - /* Brand Icon Font Family */ - {{ brands.font }} { - font-family: @brandFontName; - } - - /* Icon Definitions */ - {{ brands.definitions }} - - {{; brandAliases }} + /* Icons */ + {% for icon in icons.brand.icons -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; font-family: @brandFontName; } + {% endfor %} + {% if icons.brand.aliases.length > 0 -%} + /* Aliases */ + {% for icon in icons.brand.aliases -%} + i.icon.{{ icon.className }}:before { content: "{{ icon.unicode }}"; font-family: @brandFontName; } + {% endfor %}{%- endif %} } .loadBrandIcons(); +{%- endif %} diff --git a/src/templates/icon.variables.liquid b/src/templates/icon.variables.liquid new file mode 100644 index 0000000..5309319 --- /dev/null +++ b/src/templates/icon.variables.liquid @@ -0,0 +1,112 @@ +/******************************* + Icon +*******************************/ + +/*-------------- + Font Files +---------------*/ + +{% if icons.solid.icons.length > 0 -%} +/* Solid Icons */ +@fontName: 'icons'; +@src: + url("@{fontPath}/@{fontName}.eot?#iefix") format('embedded-opentype'), + url("@{fontPath}/@{fontName}.woff2") format('woff2'), + url("@{fontPath}/@{fontName}.woff") format('woff'), + url("@{fontPath}/@{fontName}.ttf") format('truetype'), + url("@{fontPath}/@{fontName}.svg#icons") format('svg') +; +@fallbackSRC: url("@{fontPath}/@{fontName}.eot"); +{%- endif %} + +{% if icons.outline.icons.length > 0 -%} +/* Outline Icons */ +@importOutlineIcons: true; +@outlineFontName: 'outline-icons'; +@outlineSrc: + url("@{fontPath}/@{outlineFontName}.eot?#iefix") format('embedded-opentype'), + url("@{fontPath}/@{outlineFontName}.woff2") format('woff2'), + url("@{fontPath}/@{outlineFontName}.woff") format('woff'), + url("@{fontPath}/@{outlineFontName}.ttf") format('truetype'), + url("@{fontPath}/@{outlineFontName}.svg#icons") format('svg') +; +@outlineFallbackSRC: url("@{fontPath}/@{outlineFontName}.eot"); +{%- endif %} + +{% if icons.thin.icons.length > 0 -%} +/* Thin Icons */ +@importThinIcons: true; +@thinFontName: 'thin-icons'; +@thinSrc: + url("@{fontPath}/@{thinFontName}.eot?#iefix") format('embedded-opentype'), + url("@{fontPath}/@{thinFontName}.woff2") format('woff2'), + url("@{fontPath}/@{thinFontName}.woff") format('woff'), + url("@{fontPath}/@{thinFontName}.ttf") format('truetype'), + url("@{fontPath}/@{thinFontName}.svg#icons") format('svg') +; +@thinFallbackSRC: url("@{fontPath}/@{thinFontName}.eot"); +{%- endif %} + +{% if icons.brand.icons.length > 0 -%} +/* Brand Icons */ +@importBrandIcons: true; +@brandFontName: 'brand-icons'; +@brandSrc: + url("@{fontPath}/@{brandFontName}.eot?#iefix") format('embedded-opentype'), + url("@{fontPath}/@{brandFontName}.woff2") format('woff2'), + url("@{fontPath}/@{brandFontName}.woff") format('woff'), + url("@{fontPath}/@{brandFontName}.ttf") format('truetype'), + url("@{fontPath}/@{brandFontName}.svg#icons") format('svg') +; +@brandFallbackSRC: url("@{fontPath}/@{brandFontName}.eot"); +{%- endif %} + + +/*-------------- + Definition +---------------*/ + +/* Icon Variables */ +@opacity: 1; +@width: @iconWidth; +@height: 1em; +@distanceFromText: 0.25rem; + + +/* Variations */ +@linkOpacity: 0.8; +@linkDuration: 0.3s; +@loadingDuration: 2s; + +@circularSize: 2em; +@circularPadding: 0.5em 0; +@circularShadow: 0 0 0 0.1em rgba(0, 0, 0, 0.1) inset; + +@borderedSize: 2em; +@borderedVerticalPadding: ((@borderedSize - @height) / 2); +@borderedHorizontalPadding: 0; +@borderedShadow: 0 0 0 0.1em rgba(0, 0, 0, 0.1) inset; + +@cornerIconSize: 0.45em; +@cornerIconStroke: 1px; +@cornerIconShadow: + -@cornerIconStroke -@cornerIconStroke 0 @white, + @cornerIconStroke -@cornerIconStroke 0 @white, + -@cornerIconStroke @cornerIconStroke 0 @white, + @cornerIconStroke @cornerIconStroke 0 @white +; +@cornerIconInvertedShadow: + -@cornerIconStroke -@cornerIconStroke 0 @black, + @cornerIconStroke -@cornerIconStroke 0 @black, + -@cornerIconStroke @cornerIconStroke 0 @black, + @cornerIconStroke @cornerIconStroke 0 @black +; + +@mini: 0.4em; +@tiny: 0.5em; +@small: 0.75em; +@medium: 1em; +@large: 1.5em; +@big: 2em; +@huge: 4em; +@massive: 8em; diff --git a/src/util/Converter.ts b/src/util/Converter.ts new file mode 100644 index 0000000..77d3c04 --- /dev/null +++ b/src/util/Converter.ts @@ -0,0 +1,24 @@ +export default class Converter { + public static iconClassName(name: string): string { + return name + .replace(/-alt$/, '-alternate') + .replace(/-alt-/, '-alternate-') + .replace(/-h$/, '-horizontal') + .replace(/-h-/, '-horizontal-') + .replace(/-V$/, '-vertical') + .replace(/-V-/, '-vertical-') + .replace(/-alpha$/, '-alphabet') + .replace(/-alpha-/, '-alphabet-') + .replace(/-asc$/, '-ascending') + .replace(/-asc-/, '-ascending-') + .replace(/-desc$/, '-descending') + .replace(/-desc-/, '-descending-') + .replace(/-/g, '.') + .replace(/\s/g, '.'); + } + + public static iconName(name: string): string { + return Converter.iconClassName(name) + .replace(/\./g, ' '); + } +} diff --git a/src/util/Logger.ts b/src/util/Logger.ts new file mode 100644 index 0000000..e321d05 --- /dev/null +++ b/src/util/Logger.ts @@ -0,0 +1,11 @@ +// npm +import { Signale } from 'signale'; +import ora, { Options as oraOptions } from 'ora'; + +export const LoggerInstance = Signale; + +export function spinner(options?: oraOptions) { + return ora(options); +} + +export default new Signale(); diff --git a/static/aliases.json b/static/aliases.json deleted file mode 100644 index ca5fd0f..0000000 --- a/static/aliases.json +++ /dev/null @@ -1,4094 +0,0 @@ -[ - { - "faName": "chess-rock", - "fuiName": "chess rock", - "className": "chess.rock", - "unicode": "f447", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "chess" - ] - }, - { - "faName": "ordered-list", - "fuiName": "ordered list", - "className": "ordered.list", - "unicode": "f0cb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "unordered-list", - "fuiName": "unordered list", - "className": "unordered.list", - "unicode": "f0ca", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "user-doctor", - "fuiName": "user doctor", - "className": "user.doctor", - "unicode": "f0f0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "shield", - "fuiName": "shield", - "className": "shield", - "unicode": "f3ed", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "puzzle", - "fuiName": "puzzle", - "className": "puzzle", - "unicode": "f12e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "credit-card-amazon-pay", - "fuiName": "credit card amazon pay", - "className": "credit.card.amazon.pay", - "unicode": "f42d", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-american-express", - "fuiName": "credit card american express", - "className": "credit.card.american.express", - "unicode": "f1f3", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-diners-club", - "fuiName": "credit card diners club", - "className": "credit.card.diners.club", - "unicode": "f24c", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-discover", - "fuiName": "credit card discover", - "className": "credit.card.discover", - "unicode": "f1f2", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-jcb", - "fuiName": "credit card jcb", - "className": "credit.card.jcb", - "unicode": "f24b", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-mastercard", - "fuiName": "credit card mastercard", - "className": "credit.card.mastercard", - "unicode": "f1f1", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-paypal", - "fuiName": "credit card paypal", - "className": "credit.card.paypal", - "unicode": "f1f4", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-stripe", - "fuiName": "credit card stripe", - "className": "credit.card.stripe", - "unicode": "f1f5", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "credit-card-visa", - "fuiName": "credit card visa", - "className": "credit.card.visa", - "unicode": "f1f0", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "add-circle", - "fuiName": "add circle", - "className": "add.circle", - "unicode": "f055", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "add-square", - "fuiName": "add square", - "className": "add.square", - "unicode": "f0fe", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "add-to-calendar", - "fuiName": "add to calendar", - "className": "add.to.calendar", - "unicode": "f271", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "add-to-cart", - "fuiName": "add to cart", - "className": "add.to.cart", - "unicode": "f217", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "add-user", - "fuiName": "add user", - "className": "add.user", - "unicode": "f234", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "add", - "fuiName": "add", - "className": "add", - "unicode": "f067", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "alarm-mute", - "fuiName": "alarm mute", - "className": "alarm.mute", - "unicode": "f1f6", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "alarm", - "fuiName": "alarm", - "className": "alarm", - "unicode": "f0f3", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "ald", - "fuiName": "ald", - "className": "ald", - "unicode": "f2a2", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "als", - "fuiName": "als", - "className": "als", - "unicode": "f2a2", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "american-express-card", - "fuiName": "american express card", - "className": "american.express.card", - "unicode": "f1f3", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "american-express", - "fuiName": "american express", - "className": "american.express", - "unicode": "f1f3", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "amex", - "fuiName": "amex", - "className": "amex", - "unicode": "f1f3", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "announcement", - "fuiName": "announcement", - "className": "announcement", - "unicode": "f0a1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "area-chart", - "fuiName": "area chart", - "className": "area.chart", - "unicode": "f1fe", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "area-graph", - "fuiName": "area graph", - "className": "area.graph", - "unicode": "f1fe", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "arrow-down-cart", - "fuiName": "arrow down cart", - "className": "arrow.down.cart", - "unicode": "f218", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "asexual", - "fuiName": "asexual", - "className": "asexual", - "unicode": "f22d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "asl-interpreting", - "fuiName": "asl interpreting", - "className": "asl.interpreting", - "unicode": "f2a3", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "asl", - "fuiName": "asl", - "className": "asl", - "unicode": "f2a3", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "assistive-listening-devices", - "fuiName": "assistive listening devices", - "className": "assistive.listening.devices", - "unicode": "f2a2", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "attach", - "fuiName": "attach", - "className": "attach", - "unicode": "f0c6", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "attention", - "fuiName": "attention", - "className": "attention", - "unicode": "f06a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "balance", - "fuiName": "balance", - "className": "balance", - "unicode": "f24e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "bar", - "fuiName": "bar", - "className": "bar", - "unicode": "f0fc", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "bathtub", - "fuiName": "bathtub", - "className": "bathtub", - "unicode": "f2cd", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "battery-four", - "fuiName": "battery four", - "className": "battery.four", - "unicode": "f240", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-high", - "fuiName": "battery high", - "className": "battery.high", - "unicode": "f241", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-low", - "fuiName": "battery low", - "className": "battery.low", - "unicode": "f243", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-medium", - "fuiName": "battery medium", - "className": "battery.medium", - "unicode": "f242", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-one", - "fuiName": "battery one", - "className": "battery.one", - "unicode": "f243", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-three", - "fuiName": "battery three", - "className": "battery.three", - "unicode": "f241", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-two", - "fuiName": "battery two", - "className": "battery.two", - "unicode": "f242", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "battery-zero", - "fuiName": "battery zero", - "className": "battery.zero", - "unicode": "f244", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "birthday", - "fuiName": "birthday", - "className": "birthday", - "unicode": "f1fd", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "block-layout", - "fuiName": "block layout", - "className": "block.layout", - "unicode": "f009", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "bluetooth-alternative", - "fuiName": "bluetooth alternative", - "className": "bluetooth.alternative", - "unicode": "f294", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "broken-chain", - "fuiName": "broken chain", - "className": "broken.chain", - "unicode": "f127", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "browser", - "fuiName": "browser", - "className": "browser", - "unicode": "f022", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "call-square", - "fuiName": "call square", - "className": "call.square", - "unicode": "f098", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "call", - "fuiName": "call", - "className": "call", - "unicode": "f095", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "cancel", - "fuiName": "cancel", - "className": "cancel", - "unicode": "f00d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "cart", - "fuiName": "cart", - "className": "cart", - "unicode": "f07a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "vehicles" - ] - }, - { - "faName": "cc", - "fuiName": "cc", - "className": "cc", - "unicode": "f20a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "audio-video" - ] - }, - { - "faName": "chain", - "fuiName": "chain", - "className": "chain", - "unicode": "f0c1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "chat", - "fuiName": "chat", - "className": "chat", - "unicode": "f075", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "checked-calendar", - "fuiName": "checked calendar", - "className": "checked.calendar", - "unicode": "f274", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "checkmark", - "fuiName": "checkmark", - "className": "checkmark", - "unicode": "f00c", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "circle-notched", - "fuiName": "circle notched", - "className": "circle.notched", - "unicode": "f1ce", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "spinners" - ] - }, - { - "faName": "close", - "fuiName": "close", - "className": "close", - "unicode": "f00d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "cny", - "fuiName": "cny", - "className": "cny", - "unicode": "f157", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "cocktail", - "fuiName": "cocktail", - "className": "cocktail", - "unicode": "f000", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "commenting", - "fuiName": "commenting", - "className": "commenting", - "unicode": "f27a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "computer", - "fuiName": "computer", - "className": "computer", - "unicode": "f108", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "computers" - ] - }, - { - "faName": "configure", - "fuiName": "configure", - "className": "configure", - "unicode": "f0ad", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "content", - "fuiName": "content", - "className": "content", - "unicode": "f0c9", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "deafness", - "fuiName": "deafness", - "className": "deafness", - "unicode": "f2a4", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "accessibility" - ] - }, - { - "faName": "delete-calendar", - "fuiName": "delete calendar", - "className": "delete.calendar", - "unicode": "f273", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "delete", - "fuiName": "delete", - "className": "delete", - "unicode": "f00d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "detective", - "fuiName": "detective", - "className": "detective", - "unicode": "f21b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "diners-club-card", - "fuiName": "diners club card", - "className": "diners.club.card", - "unicode": "f24c", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "diners-club", - "fuiName": "diners club", - "className": "diners.club", - "unicode": "f24c", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "discover-card", - "fuiName": "discover card", - "className": "discover.card", - "unicode": "f1f2", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "discover", - "fuiName": "discover", - "className": "discover", - "unicode": "f1f2", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "discussions", - "fuiName": "discussions", - "className": "discussions", - "unicode": "f086", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "doctor", - "fuiName": "doctor", - "className": "doctor", - "unicode": "f0f0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "dollar", - "fuiName": "dollar", - "className": "dollar", - "unicode": "f155", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "dont", - "fuiName": "dont", - "className": "dont", - "unicode": "f05e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "dribble", - "fuiName": "dribble", - "className": "dribble", - "unicode": "f17d", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "drivers-license", - "fuiName": "drivers license", - "className": "drivers.license", - "unicode": "f2c2", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "dropdown", - "fuiName": "dropdown", - "className": "dropdown", - "unicode": "f0d7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "eercast", - "fuiName": "eercast", - "className": "eercast", - "unicode": "f2da", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "emergency", - "fuiName": "emergency", - "className": "emergency", - "unicode": "f0f9", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "vehicles" - ] - }, - { - "faName": "envira-gallery", - "fuiName": "envira gallery", - "className": "envira.gallery", - "unicode": "f299", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "erase", - "fuiName": "erase", - "className": "erase", - "unicode": "f12d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "eur", - "fuiName": "eur", - "className": "eur", - "unicode": "f153", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "euro", - "fuiName": "euro", - "className": "euro", - "unicode": "f153", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "eyedropper", - "fuiName": "eyedropper", - "className": "eyedropper", - "unicode": "f1fb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "fa", - "fuiName": "fa", - "className": "fa", - "unicode": "f2b4", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "factory", - "fuiName": "factory", - "className": "factory", - "unicode": "f275", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "favorite", - "fuiName": "favorite", - "className": "favorite", - "unicode": "f005", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "feed", - "fuiName": "feed", - "className": "feed", - "unicode": "f09e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "female-homosexual", - "fuiName": "female homosexual", - "className": "female.homosexual", - "unicode": "f226", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "file-text", - "fuiName": "file text", - "className": "file.text", - "unicode": "f15c", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "find", - "fuiName": "find", - "className": "find", - "unicode": "f1e5", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "first-aid", - "fuiName": "first aid", - "className": "first.aid", - "unicode": "f0fa", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "five-hundred-pixels", - "fuiName": "five hundred pixels", - "className": "five.hundred.pixels", - "unicode": "f26e", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "fork", - "fuiName": "fork", - "className": "fork", - "unicode": "f126", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "code" - ] - }, - { - "faName": "game", - "fuiName": "game", - "className": "game", - "unicode": "f11b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "gay", - "fuiName": "gay", - "className": "gay", - "unicode": "f227", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "gbp", - "fuiName": "gbp", - "className": "gbp", - "unicode": "f154", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "gittip", - "fuiName": "gittip", - "className": "gittip", - "unicode": "f184", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "google-plus-circle", - "fuiName": "google plus circle", - "className": "google.plus.circle", - "unicode": "f2b3", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "google-plus-official", - "fuiName": "google plus official", - "className": "google.plus.official", - "unicode": "f2b3", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "grab", - "fuiName": "grab", - "className": "grab", - "unicode": "f255", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "hands" - ] - }, - { - "faName": "graduation", - "fuiName": "graduation", - "className": "graduation", - "unicode": "f19d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "grid-layout", - "fuiName": "grid layout", - "className": "grid.layout", - "unicode": "f00a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "group", - "fuiName": "group", - "className": "group", - "unicode": "f0c0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "h", - "fuiName": "h", - "className": "h", - "unicode": "f0fd", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "hand-victory", - "fuiName": "hand victory", - "className": "hand.victory", - "unicode": "f25b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "hands" - ] - }, - { - "faName": "handicap", - "fuiName": "handicap", - "className": "handicap", - "unicode": "f193", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "vehicles" - ] - }, - { - "faName": "hard-of-hearing", - "fuiName": "hard of hearing", - "className": "hard.of.hearing", - "unicode": "f2a4", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "accessibility" - ] - }, - { - "faName": "header", - "fuiName": "header", - "className": "header", - "unicode": "f1dc", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "help-circle", - "fuiName": "help circle", - "className": "help.circle", - "unicode": "f059", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "help", - "fuiName": "help", - "className": "help", - "unicode": "f128", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "heterosexual", - "fuiName": "heterosexual", - "className": "heterosexual", - "unicode": "f228", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "hide", - "fuiName": "hide", - "className": "hide", - "unicode": "f070", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "hotel", - "fuiName": "hotel", - "className": "hotel", - "unicode": "f236", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "hourglass-four", - "fuiName": "hourglass four", - "className": "hourglass.four", - "unicode": "f254", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "hourglass-full", - "fuiName": "hourglass full", - "className": "hourglass.full", - "unicode": "f254", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "hourglass-one", - "fuiName": "hourglass one", - "className": "hourglass.one", - "unicode": "f251", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "date-time" - ] - }, - { - "faName": "hourglass-three", - "fuiName": "hourglass three", - "className": "hourglass.three", - "unicode": "f253", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "date-time" - ] - }, - { - "faName": "hourglass-two", - "fuiName": "hourglass two", - "className": "hourglass.two", - "unicode": "f252", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "date-time" - ] - }, - { - "faName": "idea", - "fuiName": "idea", - "className": "idea", - "unicode": "f0eb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "ils", - "fuiName": "ils", - "className": "ils", - "unicode": "f20b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "in-cart", - "fuiName": "in cart", - "className": "in.cart", - "unicode": "f218", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "inr", - "fuiName": "inr", - "className": "inr", - "unicode": "f156", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "intergender", - "fuiName": "intergender", - "className": "intergender", - "unicode": "f224", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "intersex", - "fuiName": "intersex", - "className": "intersex", - "unicode": "f224", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "japan-credit-bureau-card", - "fuiName": "japan credit bureau card", - "className": "japan.credit.bureau.card", - "unicode": "f24b", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "japan-credit-bureau", - "fuiName": "japan credit bureau", - "className": "japan.credit.bureau", - "unicode": "f24b", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "jcb", - "fuiName": "jcb", - "className": "jcb", - "unicode": "f24b", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "jpy", - "fuiName": "jpy", - "className": "jpy", - "unicode": "f157", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "krw", - "fuiName": "krw", - "className": "krw", - "unicode": "f159", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "lab", - "fuiName": "lab", - "className": "lab", - "unicode": "f0c3", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "law", - "fuiName": "law", - "className": "law", - "unicode": "f24e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "legal", - "fuiName": "legal", - "className": "legal", - "unicode": "f0e3", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "lesbian", - "fuiName": "lesbian", - "className": "lesbian", - "unicode": "f226", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "lightning", - "fuiName": "lightning", - "className": "lightning", - "unicode": "f0e7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "images" - ] - }, - { - "faName": "like", - "fuiName": "like", - "className": "like", - "unicode": "f004", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "line-graph", - "fuiName": "line graph", - "className": "line.graph", - "unicode": "f201", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "linkedin-square", - "fuiName": "linkedin square", - "className": "linkedin.square", - "unicode": "f08c", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "linkify", - "fuiName": "linkify", - "className": "linkify", - "unicode": "f0c1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "lira", - "fuiName": "lira", - "className": "lira", - "unicode": "f195", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "list-layout", - "fuiName": "list layout", - "className": "list.layout", - "unicode": "f00b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "magnify", - "fuiName": "magnify", - "className": "magnify", - "unicode": "f00e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "mail-forward", - "fuiName": "mail forward", - "className": "mail.forward", - "unicode": "f064", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "mail-square", - "fuiName": "mail square", - "className": "mail.square", - "unicode": "f199", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "mail", - "fuiName": "mail", - "className": "mail", - "unicode": "f0e0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "male-homosexual", - "fuiName": "male homosexual", - "className": "male.homosexual", - "unicode": "f227", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "man", - "fuiName": "man", - "className": "man", - "unicode": "f222", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "marker", - "fuiName": "marker", - "className": "marker", - "unicode": "f041", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "mars-alternate", - "fuiName": "mars alternate", - "className": "mars.alternate", - "unicode": "f229", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "mars-horizontal", - "fuiName": "mars horizontal", - "className": "mars.horizontal", - "unicode": "f22b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "mars-vertical", - "fuiName": "mars vertical", - "className": "mars.vertical", - "unicode": "f22a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "mastercard-card", - "fuiName": "mastercard card", - "className": "mastercard.card", - "unicode": "f1f1", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "mastercard", - "fuiName": "mastercard", - "className": "mastercard", - "unicode": "f1f1", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "microsoft-edge", - "fuiName": "microsoft edge", - "className": "microsoft.edge", - "unicode": "f282", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "military", - "fuiName": "military", - "className": "military", - "unicode": "f0fb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "vehicles" - ] - }, - { - "faName": "ms-edge", - "fuiName": "ms edge", - "className": "ms.edge", - "unicode": "f282", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "mute", - "fuiName": "mute", - "className": "mute", - "unicode": "f131", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "new-pied-piper", - "fuiName": "new pied piper", - "className": "new.pied.piper", - "unicode": "f2ae", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "non-binary-transgender", - "fuiName": "non binary transgender", - "className": "non.binary.transgender", - "unicode": "f223", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "numbered-list", - "fuiName": "numbered list", - "className": "numbered.list", - "unicode": "f0cb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "optinmonster", - "fuiName": "optinmonster", - "className": "optinmonster", - "unicode": "f23c", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "options", - "fuiName": "options", - "className": "options", - "unicode": "f1de", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "other-gender-horizontal", - "fuiName": "other gender horizontal", - "className": "other.gender.horizontal", - "unicode": "f22b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "other-gender-vertical", - "fuiName": "other gender vertical", - "className": "other.gender.vertical", - "unicode": "f22a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "other-gender", - "fuiName": "other gender", - "className": "other.gender", - "unicode": "f229", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "payment", - "fuiName": "payment", - "className": "payment", - "unicode": "f09d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "paypal-card", - "fuiName": "paypal card", - "className": "paypal.card", - "unicode": "f1f4", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "pencil-square", - "fuiName": "pencil square", - "className": "pencil.square", - "unicode": "f14b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "photo", - "fuiName": "photo", - "className": "photo", - "unicode": "f030", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "picture", - "fuiName": "picture", - "className": "picture", - "unicode": "f03e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "pie-chart", - "fuiName": "pie chart", - "className": "pie.chart", - "unicode": "f200", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "pie-graph", - "fuiName": "pie graph", - "className": "pie.graph", - "unicode": "f200", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "pied-piper-hat", - "fuiName": "pied piper hat", - "className": "pied.piper.hat", - "unicode": "f2ae", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "pin", - "fuiName": "pin", - "className": "pin", - "unicode": "f08d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "plus-cart", - "fuiName": "plus cart", - "className": "plus.cart", - "unicode": "f217", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "pocket", - "fuiName": "pocket", - "className": "pocket", - "unicode": "f265", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "point", - "fuiName": "point", - "className": "point", - "unicode": "f041", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "pointing-down", - "fuiName": "pointing down", - "className": "pointing.down", - "unicode": "f0a7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "hands" - ] - }, - { - "faName": "pointing-left", - "fuiName": "pointing left", - "className": "pointing.left", - "unicode": "f0a5", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "hands" - ] - }, - { - "faName": "pointing-right", - "fuiName": "pointing right", - "className": "pointing.right", - "unicode": "f0a4", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "hands" - ] - }, - { - "faName": "pointing-up", - "fuiName": "pointing up", - "className": "pointing.up", - "unicode": "f0a6", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "hands" - ] - }, - { - "faName": "pound", - "fuiName": "pound", - "className": "pound", - "unicode": "f154", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "power-cord", - "fuiName": "power cord", - "className": "power.cord", - "unicode": "f1e6", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "power", - "fuiName": "power", - "className": "power", - "unicode": "f011", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "privacy", - "fuiName": "privacy", - "className": "privacy", - "unicode": "f084", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "r-circle", - "fuiName": "r circle", - "className": "r.circle", - "unicode": "f25d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "rain", - "fuiName": "rain", - "className": "rain", - "unicode": "f0e9", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "record", - "fuiName": "record", - "className": "record", - "unicode": "f03d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "audio-video" - ] - }, - { - "faName": "refresh", - "fuiName": "refresh", - "className": "refresh", - "unicode": "f021", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "spinners" - ] - }, - { - "faName": "remove-circle", - "fuiName": "remove circle", - "className": "remove.circle", - "unicode": "f057", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "remove-from-calendar", - "fuiName": "remove from calendar", - "className": "remove.from.calendar", - "unicode": "f272", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "remove-user", - "fuiName": "remove user", - "className": "remove.user", - "unicode": "f235", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "remove", - "fuiName": "remove", - "className": "remove", - "unicode": "f00d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "repeat", - "fuiName": "repeat", - "className": "repeat", - "unicode": "f01e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "rmb", - "fuiName": "rmb", - "className": "rmb", - "unicode": "f157", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "rouble", - "fuiName": "rouble", - "className": "rouble", - "unicode": "f158", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "rub", - "fuiName": "rub", - "className": "rub", - "unicode": "f158", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "ruble", - "fuiName": "ruble", - "className": "ruble", - "unicode": "f158", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "rupee", - "fuiName": "rupee", - "className": "rupee", - "unicode": "f156", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "s15", - "fuiName": "s15", - "className": "s15", - "unicode": "f2cd", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "selected-radio", - "fuiName": "selected radio", - "className": "selected.radio", - "unicode": "f192", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "send", - "fuiName": "send", - "className": "send", - "unicode": "f1d8", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "setting", - "fuiName": "setting", - "className": "setting", - "unicode": "f013", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "spinners" - ] - }, - { - "faName": "settings", - "fuiName": "settings", - "className": "settings", - "unicode": "f085", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "shekel", - "fuiName": "shekel", - "className": "shekel", - "unicode": "f20b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "sheqel", - "fuiName": "sheqel", - "className": "sheqel", - "unicode": "f20b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "shipping", - "fuiName": "shipping", - "className": "shipping", - "unicode": "f0d1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "vehicles" - ] - }, - { - "faName": "shop", - "fuiName": "shop", - "className": "shop", - "unicode": "f07a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "vehicles" - ] - }, - { - "faName": "shuffle", - "fuiName": "shuffle", - "className": "shuffle", - "unicode": "f074", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "audio-video" - ] - }, - { - "faName": "shutdown", - "fuiName": "shutdown", - "className": "shutdown", - "unicode": "f011", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "sidebar", - "fuiName": "sidebar", - "className": "sidebar", - "unicode": "f0c9", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "signing", - "fuiName": "signing", - "className": "signing", - "unicode": "f2a7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "accessibility" - ] - }, - { - "faName": "signup", - "fuiName": "signup", - "className": "signup", - "unicode": "f044", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "sliders", - "fuiName": "sliders", - "className": "sliders", - "unicode": "f1de", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "soccer", - "fuiName": "soccer", - "className": "soccer", - "unicode": "f1e3", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "sports" - ] - }, - { - "faName": "sort-alphabet-ascending", - "fuiName": "sort alphabet ascending", - "className": "sort.alphabet.ascending", - "unicode": "f15d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-alphabet-descending", - "fuiName": "sort alphabet descending", - "className": "sort.alphabet.descending", - "unicode": "f15e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-ascending", - "fuiName": "sort ascending", - "className": "sort.ascending", - "unicode": "f0de", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-content-ascending", - "fuiName": "sort content ascending", - "className": "sort.content.ascending", - "unicode": "f160", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-content-descending", - "fuiName": "sort content descending", - "className": "sort.content.descending", - "unicode": "f161", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-descending", - "fuiName": "sort descending", - "className": "sort.descending", - "unicode": "f0dd", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-numeric-ascending", - "fuiName": "sort numeric ascending", - "className": "sort.numeric.ascending", - "unicode": "f162", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sort-numeric-descending", - "fuiName": "sort numeric descending", - "className": "sort.numeric.descending", - "unicode": "f163", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "sound", - "fuiName": "sound", - "className": "sound", - "unicode": "f025", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "spy", - "fuiName": "spy", - "className": "spy", - "unicode": "f21b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "stripe-card", - "fuiName": "stripe card", - "className": "stripe.card", - "unicode": "f1f5", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "student", - "fuiName": "student", - "className": "student", - "unicode": "f19d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "talk", - "fuiName": "talk", - "className": "talk", - "unicode": "f27a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "target", - "fuiName": "target", - "className": "target", - "unicode": "f140", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "teletype", - "fuiName": "teletype", - "className": "teletype", - "unicode": "f1e4", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "television", - "fuiName": "television", - "className": "television", - "unicode": "f26c", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "text-cursor", - "fuiName": "text cursor", - "className": "text.cursor", - "unicode": "f246", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "text-telephone", - "fuiName": "text telephone", - "className": "text.telephone", - "unicode": "f1e4", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "theme-isle", - "fuiName": "theme isle", - "className": "theme.isle", - "unicode": "f2b2", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "theme", - "fuiName": "theme", - "className": "theme", - "unicode": "f043", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "thermometer", - "fuiName": "thermometer", - "className": "thermometer", - "unicode": "f2c7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "thumb-tack", - "fuiName": "thumb tack", - "className": "thumb.tack", - "unicode": "f08d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "time", - "fuiName": "time", - "className": "time", - "unicode": "f017", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "date-time" - ] - }, - { - "faName": "tm", - "fuiName": "tm", - "className": "tm", - "unicode": "f25c", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "business" - ] - }, - { - "faName": "toggle-down", - "fuiName": "toggle down", - "className": "toggle.down", - "unicode": "f150", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "toggle-left", - "fuiName": "toggle left", - "className": "toggle.left", - "unicode": "f191", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "toggle-right", - "fuiName": "toggle right", - "className": "toggle.right", - "unicode": "f152", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "toggle-up", - "fuiName": "toggle up", - "className": "toggle.up", - "unicode": "f151", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "translate", - "fuiName": "translate", - "className": "translate", - "unicode": "f1ab", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "travel", - "fuiName": "travel", - "className": "travel", - "unicode": "f0b1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "treatment", - "fuiName": "treatment", - "className": "treatment", - "unicode": "f0f1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "health" - ] - }, - { - "faName": "triangle-down", - "fuiName": "triangle down", - "className": "triangle.down", - "unicode": "f0d7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "triangle-left", - "fuiName": "triangle left", - "className": "triangle.left", - "unicode": "f0d9", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "triangle-right", - "fuiName": "triangle right", - "className": "triangle.right", - "unicode": "f0da", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "triangle-up", - "fuiName": "triangle up", - "className": "triangle.up", - "unicode": "f0d8", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "try", - "fuiName": "try", - "className": "try", - "unicode": "f195", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "unhide", - "fuiName": "unhide", - "className": "unhide", - "unicode": "f06e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "unlinkify", - "fuiName": "unlinkify", - "className": "unlinkify", - "unicode": "f127", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "editors" - ] - }, - { - "faName": "unmute", - "fuiName": "unmute", - "className": "unmute", - "unicode": "f130", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "usd", - "fuiName": "usd", - "className": "usd", - "unicode": "f155", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "user-cancel", - "fuiName": "user cancel", - "className": "user.cancel", - "unicode": "f235", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "user-close", - "fuiName": "user close", - "className": "user.close", - "unicode": "f235", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "user-delete", - "fuiName": "user delete", - "className": "user.delete", - "unicode": "f235", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "user-x", - "fuiName": "user x", - "className": "user.x", - "unicode": "f235", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "vcard", - "fuiName": "vcard", - "className": "vcard", - "unicode": "f2bb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "users-people" - ] - }, - { - "faName": "video-camera", - "fuiName": "video camera", - "className": "video.camera", - "unicode": "f03d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "audio-video" - ] - }, - { - "faName": "video-play", - "fuiName": "video play", - "className": "video.play", - "unicode": "f144", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "audio-video" - ] - }, - { - "faName": "visa-card", - "fuiName": "visa card", - "className": "visa.card", - "unicode": "f1f0", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "visa", - "fuiName": "visa", - "className": "visa", - "unicode": "f1f0", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "volume-control-phone", - "fuiName": "volume control phone", - "className": "volume.control.phone", - "unicode": "f2a0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "wait", - "fuiName": "wait", - "className": "wait", - "unicode": "f017", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "date-time" - ] - }, - { - "faName": "warning-circle", - "fuiName": "warning circle", - "className": "warning.circle", - "unicode": "f06a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "warning-sign", - "fuiName": "warning sign", - "className": "warning.sign", - "unicode": "f071", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "warning", - "fuiName": "warning", - "className": "warning", - "unicode": "f12a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "wechat", - "fuiName": "wechat", - "className": "wechat", - "unicode": "f1d7", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "wi-fi", - "fuiName": "wi fi", - "className": "wi.fi", - "unicode": "f1eb", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "wikipedia", - "fuiName": "wikipedia", - "className": "wikipedia", - "unicode": "f266", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "winner", - "fuiName": "winner", - "className": "winner", - "unicode": "f091", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "wizard", - "fuiName": "wizard", - "className": "wizard", - "unicode": "f0d0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "woman", - "fuiName": "woman", - "className": "woman", - "unicode": "f221", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "gender" - ] - }, - { - "faName": "won", - "fuiName": "won", - "className": "won", - "unicode": "f159", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "wordpress-beginner", - "fuiName": "wordpress beginner", - "className": "wordpress.beginner", - "unicode": "f297", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "wordpress-forms", - "fuiName": "wordpress forms", - "className": "wordpress.forms", - "unicode": "f298", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "world", - "fuiName": "world", - "className": "world", - "unicode": "f0ac", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "write-square", - "fuiName": "write square", - "className": "write.square", - "unicode": "f14b", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "x", - "fuiName": "x", - "className": "x", - "unicode": "f00d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "yc", - "fuiName": "yc", - "className": "yc", - "unicode": "f23b", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "ycombinator", - "fuiName": "ycombinator", - "className": "ycombinator", - "unicode": "f23b", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "yen", - "fuiName": "yen", - "className": "yen", - "unicode": "f157", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "currency" - ] - }, - { - "faName": "zip", - "fuiName": "zip", - "className": "zip", - "unicode": "f187", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "zoom-in", - "fuiName": "zoom in", - "className": "zoom.in", - "unicode": "f00e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "zoom-out", - "fuiName": "zoom out", - "className": "zoom.out", - "unicode": "f010", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "zoom", - "fuiName": "zoom", - "className": "zoom", - "unicode": "f00e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "maps" - ] - }, - { - "faName": "bitbucket-square", - "fuiName": "bitbucket square", - "className": "bitbucket.square", - "unicode": "f171", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "checkmark-box", - "fuiName": "checkmark box", - "className": "checkmark.box", - "unicode": "f14a", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "circle-thin", - "fuiName": "circle thin", - "className": "circle.thin", - "unicode": "f111", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "cloud-download", - "fuiName": "cloud download", - "className": "cloud.download", - "unicode": "f381", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "cloud-upload", - "fuiName": "cloud upload", - "className": "cloud.upload", - "unicode": "f382", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "compose", - "fuiName": "compose", - "className": "compose", - "unicode": "f303", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "conversation", - "fuiName": "conversation", - "className": "conversation", - "unicode": "f086", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "communication" - ] - }, - { - "faName": "credit-card-alternative", - "fuiName": "credit card alternative", - "className": "credit.card.alternative", - "unicode": "f09d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "currency", - "fuiName": "currency", - "className": "currency", - "unicode": "f3d1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "dashboard", - "fuiName": "dashboard", - "className": "dashboard", - "unicode": "f3fd", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "diamond", - "fuiName": "diamond", - "className": "diamond", - "unicode": "f3a5", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "payments-shopping" - ] - }, - { - "faName": "disk-outline", - "fuiName": "disk outline", - "className": "disk.outline", - "unicode": "f369", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "disk", - "fuiName": "disk", - "className": "disk", - "unicode": "f0a0", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "exchange", - "fuiName": "exchange", - "className": "exchange", - "unicode": "f362", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "external-share", - "fuiName": "external share", - "className": "external.share", - "unicode": "f14d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "external-square", - "fuiName": "external square", - "className": "external.square", - "unicode": "f360", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "external", - "fuiName": "external", - "className": "external", - "unicode": "f35d", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "facebook-official", - "fuiName": "facebook official", - "className": "facebook.official", - "unicode": "f082", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "food", - "fuiName": "food", - "className": "food", - "unicode": "f2e7", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "heart-empty", - "fuiName": "heart empty", - "className": "heart.empty", - "unicode": "f004", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "hourglass-zero", - "fuiName": "hourglass zero", - "className": "hourglass.zero", - "unicode": "f253", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "date-time" - ] - }, - { - "faName": "level-down", - "fuiName": "level down", - "className": "level.down", - "unicode": "f3be", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "level-up", - "fuiName": "level up", - "className": "level.up", - "unicode": "f3bf", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "log-out", - "fuiName": "log out", - "className": "log.out", - "unicode": "f2f5", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "meanpath", - "fuiName": "meanpath", - "className": "meanpath", - "unicode": "f0c8", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "shapes" - ] - }, - { - "faName": "money", - "fuiName": "money", - "className": "money", - "unicode": "f3d1", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "move", - "fuiName": "move", - "className": "move", - "unicode": "f0b2", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "pencil", - "fuiName": "pencil", - "className": "pencil", - "unicode": "f303", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "protect", - "fuiName": "protect", - "className": "protect", - "unicode": "f023", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "radio", - "fuiName": "radio", - "className": "radio", - "unicode": "f192", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "remove-bookmark", - "fuiName": "remove bookmark", - "className": "remove.bookmark", - "unicode": "f02e", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "resize-horizontal", - "fuiName": "resize horizontal", - "className": "resize.horizontal", - "unicode": "f337", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "resize-vertical", - "fuiName": "resize vertical", - "className": "resize.vertical", - "unicode": "f338", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "arrows" - ] - }, - { - "faName": "sign-in", - "fuiName": "sign in", - "className": "sign.in", - "unicode": "f2f6", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "sign-out", - "fuiName": "sign out", - "className": "sign.out", - "unicode": "f2f5", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "status" - ] - }, - { - "faName": "spoon", - "fuiName": "spoon", - "className": "spoon", - "unicode": "f2e5", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "star-empty", - "fuiName": "star empty", - "className": "star.empty", - "unicode": "f005", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "star-half-empty", - "fuiName": "star half empty", - "className": "star.half.empty", - "unicode": "f089", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "star-half-full", - "fuiName": "star half full", - "className": "star.half.full", - "unicode": "f089", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - }, - { - "faName": "ticket", - "fuiName": "ticket", - "className": "ticket", - "unicode": "f3ff", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "objects" - ] - }, - { - "faName": "times-rectangle", - "fuiName": "times rectangle", - "className": "times.rectangle", - "unicode": "f410", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "code" - ] - }, - { - "faName": "write", - "fuiName": "write", - "className": "write", - "unicode": "f303", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "writing" - ] - }, - { - "faName": "youtube-play", - "fuiName": "youtube play", - "className": "youtube.play", - "unicode": "f167", - "solid": false, - "outline": false, - "brand": true, - "categories": [ - "brands" - ] - }, - { - "faName": "bars", - "fuiName": "hamburger", - "className": "hamburger", - "unicode": "f0c9", - "solid": true, - "outline": false, - "brand": false, - "categories": [ - "interfaces" - ] - } -] diff --git a/templates/scripts/brandAliases.js b/templates/scripts/brandAliases.js deleted file mode 100644 index 9f22e58..0000000 --- a/templates/scripts/brandAliases.js +++ /dev/null @@ -1,20 +0,0 @@ -const Crather = require('@hamistudios/crather'); - -module.exports = Crather.script(function() { - - if(this.getData()['brands']['aliases']['font'] !== '') { - - this.setRender(` - /* Brands Aliases */ - {{ brands.aliases.font }} { - font-family: @brandFontName; - } - - /* Brands Alias Definitions */ - {{ brands.aliases.definitions }}`); - - } - - this.finished(); - -}); diff --git a/templates/scripts/outlineAliases.js b/templates/scripts/outlineAliases.js deleted file mode 100644 index a129888..0000000 --- a/templates/scripts/outlineAliases.js +++ /dev/null @@ -1,20 +0,0 @@ -const Crather = require('@hamistudios/crather'); - -module.exports = Crather.script(function() { - - if(this.getData()['outline']['aliases']['font'] !== '') { - - this.setRender(` - /* Outline Aliases */ - {{ outline.aliases.font }} { - font-family: @outlineFontName; - } - - /* Outline Alias Definitions */ - {{ outline.aliases.definitions }}`); - - } - - this.finished(); - -}); diff --git a/templates/scripts/solidAliases.js b/templates/scripts/solidAliases.js deleted file mode 100644 index 5dd2b80..0000000 --- a/templates/scripts/solidAliases.js +++ /dev/null @@ -1,15 +0,0 @@ -const Crather = require('@hamistudios/crather'); - -module.exports = Crather.script(function() { - - if(this.getData()['solid']['aliases'] !== '') { - - this.setRender(` -/* Aliases */ -{{ solid.aliases }}`); - - } - - this.finished(); - -}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..448fbbf --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,63 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "lib": ["es6", "es7"], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./lib", /* Redirect output structure to the directory. */ + "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "incremental": true, /* Enable incremental compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "resolveJsonModule": true + } +} diff --git a/types/global.d.ts b/types/global.d.ts new file mode 100644 index 0000000..2e766be --- /dev/null +++ b/types/global.d.ts @@ -0,0 +1 @@ +declare module 'qoa'; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..c32d16d --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1502 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@types/chalk@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-2.2.0.tgz#b7f6e446f4511029ee8e3f43075fb5b73fbaa0ba" + integrity sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw== + dependencies: + chalk "*" + +"@types/fs-extra@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.5.tgz#080d90a792f3fa2c5559eb44bd8ef840aae9104b" + integrity sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A== + dependencies: + "@types/node" "*" + +"@types/js-yaml@^3.12.1": + version "3.12.1" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" + integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== + +"@types/node@*", "@types/node@^11.13.4": + version "11.13.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.4.tgz#f83ec3c3e05b174b7241fadeb6688267fe5b22ca" + integrity sha512-+rabAZZ3Yn7tF/XPGHupKIL5EcAbrLxnTr/hgQICxbeuAfWtT0UZSfULE+ndusckBItcv4o6ZeOJplQikVcLvQ== + +"@types/signale@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/signale/-/signale-1.2.1.tgz#7ff3d477e8d5983b7ecef544f5830c3cb271d1a8" + integrity sha512-mV6s2VgcBC16Jb+1EwulgRrrZBT93V4JCILkNPg31rvvSK6LRQQGU8R/SUivgHjDZ5LJZu/yL2kMF8j85YQTnA== + dependencies: + "@types/node" "*" + +"@types/unzipper@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@types/unzipper/-/unzipper-0.9.2.tgz#852f7db5b1656c3c7e93549d8fc31d490111352e" + integrity sha512-9K8sLpn1dxIzbXMDgUerkyO1z0deg5RqN/F6df8waAM94aPnS7x7V0l12kkUYoUlM8r4xWgvlcXLdWQvt6KdUA== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.7.0.tgz#570e45dc84fb97852e363f1e00f47e604a0b8bcc" + integrity sha512-NUSz1aTlIzzTjFFVFyzrbo8oFjHg3K/M9MzYByqbMCxeFdErhLAcGITVfXzSz+Yvp5OOpMu3HkIttB0NyKl54Q== + dependencies: + "@typescript-eslint/parser" "1.7.0" + "@typescript-eslint/typescript-estree" "1.7.0" + eslint-utils "^1.3.1" + regexpp "^2.0.1" + requireindex "^1.2.0" + tsutils "^3.7.0" + +"@typescript-eslint/parser@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.7.0.tgz#c3ea0d158349ceefbb6da95b5b09924b75357851" + integrity sha512-1QFKxs2V940372srm12ovSE683afqc1jB6zF/f8iKhgLz1yoSjYeGHipasao33VXKI+0a/ob9okeogGdKGvvlg== + dependencies: + "@typescript-eslint/typescript-estree" "1.7.0" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" + +"@typescript-eslint/typescript-estree@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.7.0.tgz#59ec02f5371964da1cc679dba7b878a417bc8c60" + integrity sha512-K5uedUxVmlYrVkFbyV3htDipvLqTE3QMOUQEHYJaKtgzxj6r7c5Ca/DG1tGgFxX+fsbi9nDIrf4arq7Ib7H/Yw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + +acorn@^6.0.7: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + +ajv@^6.9.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + integrity sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI= + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +big-integer@^1.6.17: + version "1.6.43" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.43.tgz#8ac15bf13e93e509500859061233e19d8d0d99d1" + integrity sha512-9dULc9jsKmXl0Aeunug8wbF+58n+hQoFjqClN7WeZwGLh0XJUWyJJ9Ee+Ep+Ql/J9fRsTVaeThp8MhiCCrY0Jg== + +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@*, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-spinners@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7" + integrity sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA== + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.12.0, es-abstract@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-airbnb-base@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" + integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== + dependencies: + eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-airbnb-typescript@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-3.0.0.tgz#5176af082142f4887c96994768c0b7aa9d6338ea" + integrity sha512-Q4Xfgfsj3gRQJARcM3skQL7SDSqRc47Z9iAwjyrv94RWHLgvarlpc0fqLeVuEUMBqdmx8OVRLqBZqVJpBnO3cQ== + dependencies: + eslint-config-airbnb "^17.1.0" + eslint-config-airbnb-base "^13.1.0" + +eslint-config-airbnb@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz#3964ed4bc198240315ff52030bf8636f42bc4732" + integrity sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw== + dependencies: + eslint-config-airbnb-base "^13.1.0" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" + integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.17.2: + version "2.17.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz#d227d5c6dc67eca71eb590d2bb62fb38d86e9fcb" + integrity sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g== + dependencies: + array-includes "^3.0.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" + read-pkg-up "^2.0.0" + resolve "^1.10.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= + +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + +follow-redirects@^1.3.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + dependencies: + debug "^3.2.6" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fstream@~1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.7.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.0, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^6.2.2: + version "6.3.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" + integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.11" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +liquidjs@^8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/liquidjs/-/liquidjs-8.2.1.tgz#ffb76df13d1b826e411a928812d1fe780e808840" + integrity sha512-oKRcCDOn0LMECGdNzWNOQE0/grWQsacSSFSZyVLhBXIs80dFSDzMaRbWAiOGeV9NK0lUBnm8HqCwNo4ZV9a+tA== + +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +"mkdirp@>=0.5 0", mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qoa@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/qoa/-/qoa-0.2.0.tgz#2e4ea56a388982da570bf2025733b72e2f857aab" + integrity sha512-svEO3uevNU354fUBWgMxGJH0spF29EZRe140YL20PP+5C25V+u0eMeFforSIiop2879uXgxI+IFwibHBGcseEA== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.2, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.5.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" + integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@2, rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rxjs@^6.4.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" + integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg== + dependencies: + tslib "^1.9.0" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +signale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-json-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" + integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== + dependencies: + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + +tslib@^1.8.1, tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tsutils@^3.7.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.10.0.tgz#6f1c95c94606e098592b0dff06590cf9659227d6" + integrity sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q== + dependencies: + tslib "^1.8.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typescript@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.3.tgz#0eb320e4ace9b10eadf5bc6103286b0f8b7c224f" + integrity sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unzipper@^0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.9.11.tgz#9577d9b85e5974abd6e23a30dbc9dc187940fc47" + integrity sha512-G0z5zv8LYv4/XwpOiXgTGTcN4jyxgyg3P1DfdIeCN2QGOd6ZBl49BSbOe9JsIEvKh3tG7/b0bdJvz+UmwA+BRg== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "~1.0.10" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1"