├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── images ├── default-color-icon.png ├── icons.png ├── multi-color-icon.png ├── one-color-icon.png └── symbol-url.png ├── package.json ├── publish.sh ├── scripts ├── config │ ├── demo-js.json │ └── demo-ts.json └── update-snapshot.sh ├── snapshots ├── demo-js │ ├── IconAlipay.d.ts │ ├── IconAlipay.js │ ├── IconSetup.d.ts │ ├── IconSetup.js │ ├── IconUser.d.ts │ ├── IconUser.js │ ├── helper.d.ts │ ├── helper.js │ ├── index.d.ts │ └── index.js └── demo-ts │ ├── IconAlipay.tsx │ ├── IconSetup.tsx │ ├── IconUser.tsx │ ├── helper.ts │ └── index.tsx ├── src ├── commands │ ├── createIcon.ts │ ├── createJson.ts │ └── help.ts ├── libs │ ├── copyTemplate.ts │ ├── generateComponent.ts │ ├── getConfig.ts │ ├── getTemplate.ts │ ├── iconfont.json │ ├── replace.ts │ └── whitespace.ts └── templates │ ├── Icon.d.ts.template │ ├── Icon.js.template │ ├── Icon.tsx.template │ ├── SingleIcon.d.ts.template │ ├── SingleIcon.js.template │ ├── SingleIcon.tsx.template │ ├── helper.d.ts.template │ ├── helper.js.template │ └── helper.ts.template ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [.*] 12 | insert_final_newline = false 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | *.log 3 | .idea/ 4 | build/ 5 | /iconfont.json 6 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 原罪 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## react-iconfont-cli 2 | 用纯JS把iconfont.cn的图标转换成React组件,不依赖字体,支持多色彩 3 | 4 | ![](https://github.com/fwh1990/react-iconfont-cli/blob/master/images/icons.png?raw=true) 5 | 6 | ## 特性 7 | 8 | 1、纯组件,不依赖字体,体积小 9 |
10 | 2、支持渲染多色彩图标,支持自定义颜色 11 |
12 | 3、自动化生成图标组件,支持es6和typescript两种文件格式 13 | 14 | ## Step 1 15 | 安装插件 16 | ```bash 17 | # Yarn 18 | yarn add react-iconfont-cli --dev 19 | 20 | # Npm 21 | npm install react-iconfont-cli --save-dev 22 | ``` 23 | 24 | # Step 2 25 | 生成配置文件 26 | ```bash 27 | npx iconfont-init 28 | ``` 29 | 此时项目根目录会生成一个`iconfont.json`的文件,内容如下: 30 | ```json 31 | { 32 | "symbol_url": "请参考README.md,复制官网提供的JS链接", 33 | "use_typescript": false, 34 | "save_dir": "./src/components/iconfont", 35 | "trim_icon_prefix": "icon", 36 | "unit": "px", 37 | "default_icon_size": 18 38 | } 39 | ``` 40 | ### 配置参数说明: 41 | ### symbol_url 42 | 请直接复制[iconfont](http://iconfont.cn)官网提供的项目链接。请务必看清是`.js`后缀而不是.css后缀。如果你现在还没有创建iconfont的仓库,那么可以填入这个链接去测试:`http://at.alicdn.com/t/font_1373348_ghk94ooopqr.js` 43 | 44 |
45 | 46 | ![](https://github.com/fwh1990/react-iconfont-cli/blob/master/images/symbol-url.png?raw=true) 47 | 48 | ### use_typescript 49 | 如果您的项目使用Typescript编写,请设置为true。这个选项将决定生成的图标组件是`.tsx`还是`.js`后缀。 50 | 51 | 当该值为false时,我们会为您的图标生成`.js`和`.d.ts`两个文件,以便您能享受到最好的开发体验。 52 | 53 | ### save_dir 54 | 根据iconfont图标生成的组件存放的位置。每次生成组件之前,该文件夹都会被清空。 55 | 56 | ### trim_icon_prefix 57 | 如果你的图标有通用的前缀,而你在使用的时候又不想重复去写,那么可以通过这种配置这个选项把前缀统一去掉。 58 | 59 | 注意,这个选项只针对 `` 组件有效 60 | 61 | ### unit 62 | 图标的单位,默认是网页常用单位`px`即像素,也推荐您在手机网页中使用自适应的`rem`单位。 63 | 64 | ### default_icon_size 65 | 我们将为每个生成的图标组件加入默认的字体大小,当然,你也可以通过传入props的方式改变这个size值。 66 | 67 | # Step 3 68 | 开始生成React标准组件 69 | ```bash 70 | npx iconfont-h5 71 | ``` 72 | 73 | 生成后查看您设置的保存目录中是否含有所有的图标,你可以参考[snapshots目录](https://github.com/iconfont-cli/react-iconfont-cli/tree/master/snapshots)的快照文件,以区分不同模式下的图标结构。 74 | 75 | # 使用 76 | 77 | 现在我们提供了两种引入方式供您选择: 78 | 79 | 1、使用汇总`Icon`组件: 80 | ```typescript jsx 81 | import React from 'react'; 82 | import IconFont from '../src/iconfont'; 83 | 84 | export const App = () => { 85 | return ( 86 |
87 | 88 | 89 |
90 | ); 91 | }; 92 | ``` 93 | 94 | 2、使用单个图标。这样可以避免没用到的图标也打包进App: 95 | 96 | ```typescript jsx 97 | import React from 'react'; 98 | import IconAlipay from '../src/iconfont/IconAlipay'; 99 | import IconWechat from '../src/iconfont/IconWechat'; 100 | 101 | export const App = () => { 102 | return ( 103 |
104 | 105 | 106 |
107 | ); 108 | }; 109 | ``` 110 | 111 | ### 图标尺寸 112 | 根据配置`default_icon_size`,每个图标都会有一个默认的尺寸,你可以随时覆盖。 113 | ```typescript jsx 114 | 115 | ``` 116 | ![](https://github.com/fwh1990/react-iconfont-cli/blob/master/images/default-color-icon.png?raw=true) 117 | ### 图标单色 118 | 单色图标,如果不指定颜色值,图标将渲染原本的颜色。如果你想设置为其他的颜色,那么设置一个你想要的颜色即可。 119 | 120 | **注意:如果你在props传入的color是字符串而不是数组,那么即使原本是多色彩的图标,也会变成单色图标。** 121 | 122 | ```typescript jsx 123 | 124 | ``` 125 | ![](https://github.com/fwh1990/react-iconfont-cli/blob/master/images/one-color-icon.png?raw=true) 126 | 127 | ### 图标多色彩 128 | 多色彩的图标,如果不指定颜色值,图标将渲染原本的多色彩。如果你想设置为其他的颜色,那么设置一组你想要的颜色即可 129 | ```typescript jsx 130 | 131 | ``` 132 | 颜色组的数量以及排序,需要根据当前图标的信息来确定。您需要进入图标组件中查看并得出结论。 133 | 134 | 135 | ![](https://github.com/fwh1990/react-iconfont-cli/blob/master/images/multi-color-icon.png?raw=true) 136 | 137 | ### 与文字并排 138 | 图标是块状的容器,如果您想与文字并排混合,请使用`flex`布局以保证文字和图标能对齐 139 | ```jsx harmony 140 |
141 | Hello 142 | 143 |
144 | ``` 145 | 146 | # 更新图标 147 | 当您在iconfont.cn中的图标有变更时,只需更改配置`symbol_url`,然后再次执行`Step 3`即可生成最新的图标组件 148 | ```bash 149 | # 修改 symbol_url 配置后执行: 150 | npx iconfont-h5 151 | ``` 152 | 153 | # 扩展 154 | |平台|库| 155 | |----|---| 156 | |小程序|[mini-program-iconfont-cli](https://github.com/iconfont-cli/mini-program-iconfont-cli)| 157 | |Taro|[taro-iconfont-cli](https://github.com/iconfont-cli/taro-iconfont-cli)| 158 | |React Native|[react-native-iconfont-cli](https://github.com/iconfont-cli/react-native-iconfont-cli)| 159 | |Flutter|[flutter-iconfont-cli](https://github.com/iconfont-cli/flutter-iconfont-cli) 160 | |Remax|[remax-iconfont-cli](https://github.com/iconfont-cli/remax-iconfont-cli) 161 | 162 | 163 | -------- 164 | 165 | 欢迎使用,并给我一些反馈和建议,让这个库做的更好 166 | -------------------------------------------------------------------------------- /images/default-color-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iconfont-cli/react-iconfont-cli/8300cc518c3d3868a45ab08f06f9f33f68ace8ce/images/default-color-icon.png -------------------------------------------------------------------------------- /images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iconfont-cli/react-iconfont-cli/8300cc518c3d3868a45ab08f06f9f33f68ace8ce/images/icons.png -------------------------------------------------------------------------------- /images/multi-color-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iconfont-cli/react-iconfont-cli/8300cc518c3d3868a45ab08f06f9f33f68ace8ce/images/multi-color-icon.png -------------------------------------------------------------------------------- /images/one-color-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iconfont-cli/react-iconfont-cli/8300cc518c3d3868a45ab08f06f9f33f68ace8ce/images/one-color-icon.png -------------------------------------------------------------------------------- /images/symbol-url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iconfont-cli/react-iconfont-cli/8300cc518c3d3868a45ab08f06f9f33f68ace8ce/images/symbol-url.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-iconfont-cli", 3 | "version": "2.0.2", 4 | "main": "index.js", 5 | "keywords": [ 6 | "iconfont", 7 | "react", 8 | "react-iconfont", 9 | "icon", 10 | "icons", 11 | "iconfont.cn" 12 | ], 13 | "repository": "git@github.com:iconfont-cli/react-iconfont-cli.git", 14 | "author": "范文华 <531362022@qq.com>", 15 | "license": "MIT", 16 | "bin": { 17 | "iconfont": "./commands/help.js", 18 | "iconfont-init": "./commands/createJson.js", 19 | "iconfont-h5": "./commands/createIcon.js" 20 | }, 21 | "peerDependencies": { 22 | "react": "*" 23 | }, 24 | "dependencies": { 25 | "colors": "^1.3.3", 26 | "glob": "^7.1.4", 27 | "iconfont-parser": "^1.0.0", 28 | "lodash": "^4.17.15", 29 | "minimist": "^1.2.5", 30 | "mkdirp": "^0.5.1", 31 | "tslib": "^1.10.0" 32 | }, 33 | "devDependencies": { 34 | "@types/fs-extra": "^8.0.0", 35 | "@types/glob": "^7.1.1", 36 | "@types/lodash": "^4.14.137", 37 | "@types/minimist": "^1.2.0", 38 | "@types/mkdirp": "^0.5.2", 39 | "@types/node": "^12.7.2", 40 | "@types/react": "^16.9.2", 41 | "react": "^16.9.0", 42 | "ts-node": "^8.3.0", 43 | "typescript": "^3.5.3" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /publish.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | rm -rf ./build 4 | rm -rf ./src/iconfont 5 | 6 | ./node_modules/.bin/tsc 7 | 8 | mv ./build/src/* ./build 9 | rm -rf ./build/src ./build/snapshots 10 | cp README.md package.json LICENSE ./build 11 | cp -rf src/templates ./build/templates 12 | 13 | old_registry=$(npm config get registry) 14 | npm config set registry https://registry.npmjs.org 15 | set +e 16 | whoami=$(npm whoami 2>/dev/null) 17 | set -e 18 | 19 | if [ -z "$whoami" ] 20 | then 21 | echo "login plz..." 22 | npm login 23 | fi 24 | echo "I am: $(npm whoami)" 25 | 26 | sleep 1 27 | echo "Begin publish..." 28 | npm publish ./build/ --access=public "$@" 29 | 30 | npm config set registry ${old_registry} 31 | -------------------------------------------------------------------------------- /scripts/config/demo-js.json: -------------------------------------------------------------------------------- 1 | { 2 | "symbol_url": "http://at.alicdn.com/t/font_1373348_ghk94ooopqr.js", 3 | "use_typescript": false, 4 | "save_dir": "./snapshots/demo-js", 5 | "trim_icon_prefix": "icon", 6 | "unit": "px", 7 | "default_icon_size": 14 8 | } 9 | -------------------------------------------------------------------------------- /scripts/config/demo-ts.json: -------------------------------------------------------------------------------- 1 | { 2 | "symbol_url": "http://at.alicdn.com/t/font_1373348_ghk94ooopqr.js", 3 | "use_typescript": true, 4 | "save_dir": "./snapshots/demo-ts", 5 | "trim_icon_prefix": "icon", 6 | "unit": "rem", 7 | "default_icon_size": 16 8 | } 9 | -------------------------------------------------------------------------------- /scripts/update-snapshot.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | rm -rf snapshots/* 4 | 5 | cp -f ./scripts/config/demo-js.json ./iconfont.json 6 | npx ts-node src/commands/createIcon.ts 7 | 8 | cp -f ./scripts/config/demo-ts.json ./iconfont.json 9 | npx ts-node src/commands/createIcon.ts 10 | -------------------------------------------------------------------------------- /snapshots/demo-js/IconAlipay.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { SVGAttributes, FunctionComponent } from 'react'; 4 | 5 | interface Props extends Omit, 'color'> { 6 | size?: number; 7 | color?: string | string[]; 8 | } 9 | 10 | declare const IconAlipay: FunctionComponent; 11 | 12 | export default IconAlipay; 13 | -------------------------------------------------------------------------------- /snapshots/demo-js/IconAlipay.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import React from 'react'; 4 | import { getIconColor } from './helper'; 5 | 6 | const DEFAULT_STYLE = { 7 | display: 'block', 8 | }; 9 | 10 | const IconAlipay = ({ size, color, style: _style, ...rest }) => { 11 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 12 | 13 | return ( 14 | 15 | 19 | 23 | 24 | ); 25 | }; 26 | 27 | IconAlipay.defaultProps = { 28 | size: 14, 29 | }; 30 | 31 | export default IconAlipay; 32 | -------------------------------------------------------------------------------- /snapshots/demo-js/IconSetup.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { SVGAttributes, FunctionComponent } from 'react'; 4 | 5 | interface Props extends Omit, 'color'> { 6 | size?: number; 7 | color?: string | string[]; 8 | } 9 | 10 | declare const IconSetup: FunctionComponent; 11 | 12 | export default IconSetup; 13 | -------------------------------------------------------------------------------- /snapshots/demo-js/IconSetup.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import React from 'react'; 4 | import { getIconColor } from './helper'; 5 | 6 | const DEFAULT_STYLE = { 7 | display: 'block', 8 | }; 9 | 10 | const IconSetup = ({ size, color, style: _style, ...rest }) => { 11 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 12 | 13 | return ( 14 | 15 | 19 | 23 | 28 | 32 | 36 | 41 | 45 | 50 | 54 | 59 | 60 | ); 61 | }; 62 | 63 | IconSetup.defaultProps = { 64 | size: 14, 65 | }; 66 | 67 | export default IconSetup; 68 | -------------------------------------------------------------------------------- /snapshots/demo-js/IconUser.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { SVGAttributes, FunctionComponent } from 'react'; 4 | 5 | interface Props extends Omit, 'color'> { 6 | size?: number; 7 | color?: string | string[]; 8 | } 9 | 10 | declare const IconUser: FunctionComponent; 11 | 12 | export default IconUser; 13 | -------------------------------------------------------------------------------- /snapshots/demo-js/IconUser.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import React from 'react'; 4 | import { getIconColor } from './helper'; 5 | 6 | const DEFAULT_STYLE = { 7 | display: 'block', 8 | }; 9 | 10 | const IconUser = ({ size, color, style: _style, ...rest }) => { 11 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 12 | 13 | return ( 14 | 15 | 19 | 23 | 24 | ); 25 | }; 26 | 27 | IconUser.defaultProps = { 28 | size: 14, 29 | }; 30 | 31 | export default IconUser; 32 | -------------------------------------------------------------------------------- /snapshots/demo-js/helper.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | export declare const getIconColor: (color: string | string[] | undefined, index: number, defaultColor: string) => string; 4 | -------------------------------------------------------------------------------- /snapshots/demo-js/helper.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | /** 4 | * @param {string | string[] | undefined} color 5 | * @param {number} index 6 | * @param {string} defaultColor 7 | * @return {string} 8 | */ 9 | export const getIconColor = (color, index, defaultColor) => { 10 | return color 11 | ? ( 12 | typeof color === 'string' 13 | ? color 14 | : color[index] || defaultColor 15 | ) 16 | : defaultColor; 17 | }; 18 | -------------------------------------------------------------------------------- /snapshots/demo-js/index.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { SVGAttributes, FunctionComponent } from 'react'; 4 | export { default as IconAlipay } from './IconAlipay'; 5 | export { default as IconUser } from './IconUser'; 6 | export { default as IconSetup } from './IconSetup'; 7 | 8 | interface Props extends Omit, 'color'> { 9 | name: 'alipay' | 'user' | 'setup'; 10 | size?: number; 11 | color?: string | string[]; 12 | } 13 | 14 | declare const IconFont: FunctionComponent; 15 | 16 | export default IconFont; 17 | -------------------------------------------------------------------------------- /snapshots/demo-js/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import React from 'react'; 4 | import IconAlipay from './IconAlipay'; 5 | import IconUser from './IconUser'; 6 | import IconSetup from './IconSetup'; 7 | export { default as IconAlipay } from './IconAlipay'; 8 | export { default as IconUser } from './IconUser'; 9 | export { default as IconSetup } from './IconSetup'; 10 | 11 | const IconFont = ({ name, ...rest }) => { 12 | switch (name) { 13 | case 'alipay': 14 | return ; 15 | case 'user': 16 | return ; 17 | case 'setup': 18 | return ; 19 | 20 | } 21 | 22 | return null; 23 | }; 24 | 25 | export default IconFont; 26 | -------------------------------------------------------------------------------- /snapshots/demo-ts/IconAlipay.tsx: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | import React, { CSSProperties, SVGAttributes, FunctionComponent } from 'react'; 5 | import { getIconColor } from './helper'; 6 | 7 | interface Props extends Omit, 'color'> { 8 | size?: number; 9 | color?: string | string[]; 10 | } 11 | 12 | const DEFAULT_STYLE: CSSProperties = { 13 | display: 'block', 14 | }; 15 | 16 | const IconAlipay: FunctionComponent = ({ size, color, style: _style, ...rest }) => { 17 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 18 | 19 | return ( 20 | 21 | 25 | 29 | 30 | ); 31 | }; 32 | 33 | IconAlipay.defaultProps = { 34 | size: 16, 35 | }; 36 | 37 | export default IconAlipay; 38 | -------------------------------------------------------------------------------- /snapshots/demo-ts/IconSetup.tsx: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | import React, { CSSProperties, SVGAttributes, FunctionComponent } from 'react'; 5 | import { getIconColor } from './helper'; 6 | 7 | interface Props extends Omit, 'color'> { 8 | size?: number; 9 | color?: string | string[]; 10 | } 11 | 12 | const DEFAULT_STYLE: CSSProperties = { 13 | display: 'block', 14 | }; 15 | 16 | const IconSetup: FunctionComponent = ({ size, color, style: _style, ...rest }) => { 17 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 18 | 19 | return ( 20 | 21 | 25 | 29 | 34 | 38 | 42 | 47 | 51 | 56 | 60 | 65 | 66 | ); 67 | }; 68 | 69 | IconSetup.defaultProps = { 70 | size: 16, 71 | }; 72 | 73 | export default IconSetup; 74 | -------------------------------------------------------------------------------- /snapshots/demo-ts/IconUser.tsx: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | import React, { CSSProperties, SVGAttributes, FunctionComponent } from 'react'; 5 | import { getIconColor } from './helper'; 6 | 7 | interface Props extends Omit, 'color'> { 8 | size?: number; 9 | color?: string | string[]; 10 | } 11 | 12 | const DEFAULT_STYLE: CSSProperties = { 13 | display: 'block', 14 | }; 15 | 16 | const IconUser: FunctionComponent = ({ size, color, style: _style, ...rest }) => { 17 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 18 | 19 | return ( 20 | 21 | 25 | 29 | 30 | ); 31 | }; 32 | 33 | IconUser.defaultProps = { 34 | size: 16, 35 | }; 36 | 37 | export default IconUser; 38 | -------------------------------------------------------------------------------- /snapshots/demo-ts/helper.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | export const getIconColor = (color: string | string[] | undefined, index: number, defaultColor: string) => { 5 | return color 6 | ? ( 7 | typeof color === 'string' 8 | ? color 9 | : color[index] || defaultColor 10 | ) 11 | : defaultColor; 12 | }; 13 | -------------------------------------------------------------------------------- /snapshots/demo-ts/index.tsx: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | import React, { SVGAttributes, FunctionComponent } from 'react'; 5 | import IconAlipay from './IconAlipay'; 6 | import IconUser from './IconUser'; 7 | import IconSetup from './IconSetup'; 8 | export { default as IconAlipay } from './IconAlipay'; 9 | export { default as IconUser } from './IconUser'; 10 | export { default as IconSetup } from './IconSetup'; 11 | 12 | export type IconNames = 'alipay' | 'user' | 'setup'; 13 | 14 | interface Props extends Omit, 'color'> { 15 | name: IconNames; 16 | size?: number; 17 | color?: string | string[]; 18 | } 19 | 20 | const IconFont: FunctionComponent = ({ name, ...rest }) => { 21 | switch (name) { 22 | case 'alipay': 23 | return ; 24 | case 'user': 25 | return ; 26 | case 'setup': 27 | return ; 28 | 29 | } 30 | 31 | return null; 32 | }; 33 | 34 | export default IconFont; 35 | -------------------------------------------------------------------------------- /src/commands/createIcon.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import colors from 'colors'; 4 | import { getConfig } from '../libs/getConfig'; 5 | import { fetchXml } from 'iconfont-parser'; 6 | import { generateComponent } from '../libs/generateComponent'; 7 | 8 | const config = getConfig(); 9 | 10 | fetchXml(config.symbol_url).then((result) => { 11 | generateComponent(result, config); 12 | }).catch((e) => { 13 | console.error(colors.red(e.message || 'Unknown Error')); 14 | process.exit(1); 15 | }); 16 | -------------------------------------------------------------------------------- /src/commands/createJson.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import path from 'path'; 4 | import fs from 'fs'; 5 | import fse from 'fs-extra'; 6 | import colors from 'colors'; 7 | 8 | const targetFile = path.resolve('iconfont.json'); 9 | 10 | if (fs.existsSync(targetFile)) { 11 | console.error(colors.red('File "iconfont.json" was created before.')); 12 | } else { 13 | // fs.copyFileSync only can be used above node v8.5.0+ 14 | fse.copySync(path.join(__dirname, '../libs/iconfont.json'), targetFile); 15 | console.log(colors.green('File "iconfont.json" is created now. We recommend you add it to version control.')); 16 | } 17 | -------------------------------------------------------------------------------- /src/commands/help.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import colors from 'colors'; 4 | 5 | console.log([ 6 | '', 7 | 'Usage:', 8 | '', 9 | ' ' + colors.yellow('npx iconfont-init') + ' : generate config file', 10 | ' ' + colors.yellow('npx iconfont-h5') + ' : generate icon components', 11 | '', 12 | ].join('\n')); 13 | -------------------------------------------------------------------------------- /src/libs/copyTemplate.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | export const copyTemplate = (fromFile: string, toFile: string) => { 5 | return fs.copyFileSync( 6 | path.join(__dirname, `../templates/${fromFile}.template`), 7 | toFile, 8 | ); 9 | }; 10 | -------------------------------------------------------------------------------- /src/libs/generateComponent.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import mkdirp from 'mkdirp'; 4 | import glob from 'glob'; 5 | import colors from 'colors'; 6 | import { camelCase, upperFirst } from 'lodash'; 7 | import { XmlData } from 'iconfont-parser'; 8 | import { Config } from './getConfig'; 9 | import { getTemplate } from './getTemplate'; 10 | import { 11 | replaceCases, 12 | replaceComponentName, 13 | replaceExports, 14 | replaceImports, 15 | replaceNames, 16 | replaceNamesArray, 17 | replaceSingleIconContent, 18 | replaceSize, 19 | replaceSizeUnit, 20 | } from './replace'; 21 | import { whitespace } from './whitespace'; 22 | import { copyTemplate } from './copyTemplate'; 23 | 24 | const ATTRIBUTE_FILL_MAP = ['path']; 25 | 26 | export const generateComponent = (data: XmlData, config: Config) => { 27 | const names: string[] = []; 28 | const imports: string[] = []; 29 | const saveDir = path.resolve(config.save_dir); 30 | const jsxExtension = config.use_typescript ? '.tsx' : '.js'; 31 | const jsExtension = config.use_typescript ? '.ts' : '.js'; 32 | let cases: string = ''; 33 | 34 | mkdirp.sync(saveDir); 35 | glob.sync(path.join(saveDir, '*')).forEach((file) => fs.unlinkSync(file)); 36 | 37 | copyTemplate(`helper${jsExtension}`, path.join(saveDir, `helper${jsExtension}`)); 38 | if (!config.use_typescript) { 39 | copyTemplate('helper.d.ts', path.join(saveDir, 'helper.d.ts')); 40 | } 41 | 42 | data.svg.symbol.forEach((item) => { 43 | let singleFile: string; 44 | const iconId = item.$.id; 45 | const iconIdAfterTrim = config.trim_icon_prefix 46 | ? iconId.replace( 47 | new RegExp(`^${config.trim_icon_prefix}(.+?)$`), 48 | (_, value) => value.replace(/^[-_.=+#@!~*]+(.+?)$/, '$1') 49 | ) 50 | : iconId; 51 | const componentName = upperFirst(camelCase(iconId)); 52 | 53 | names.push(iconIdAfterTrim); 54 | 55 | cases += `${whitespace(4)}case '${iconIdAfterTrim}':\n`; 56 | 57 | imports.push(componentName); 58 | cases += `${whitespace(6)}return <${componentName} {...rest} />;\n`; 59 | 60 | singleFile = getTemplate('SingleIcon' + jsxExtension); 61 | singleFile = replaceSize(singleFile, config.default_icon_size); 62 | singleFile = replaceComponentName(singleFile, componentName); 63 | singleFile = replaceSingleIconContent(singleFile, generateCase(item, 4)); 64 | singleFile = replaceSizeUnit(singleFile, config.unit); 65 | 66 | fs.writeFileSync(path.join(saveDir, componentName + jsxExtension), singleFile); 67 | 68 | if (!config.use_typescript) { 69 | let typeDefinitionFile = getTemplate('SingleIcon.d.ts'); 70 | 71 | typeDefinitionFile = replaceComponentName(typeDefinitionFile, componentName); 72 | fs.writeFileSync(path.join(saveDir, componentName + '.d.ts'), typeDefinitionFile); 73 | } 74 | 75 | console.log(`${colors.green('√')} Generated icon "${colors.yellow(iconId)}"`); 76 | }); 77 | 78 | let iconFile = getTemplate('Icon' + jsxExtension); 79 | 80 | iconFile = replaceCases(iconFile, cases); 81 | iconFile = replaceImports(iconFile, imports); 82 | iconFile = replaceExports(iconFile, imports); 83 | 84 | if (config.use_typescript) { 85 | iconFile = replaceNames(iconFile, names); 86 | } else { 87 | iconFile = replaceNamesArray(iconFile, names); 88 | 89 | let typeDefinitionFile = getTemplate(`Icon.d.ts`); 90 | 91 | typeDefinitionFile = replaceExports(typeDefinitionFile, imports); 92 | typeDefinitionFile = replaceNames(typeDefinitionFile, names); 93 | fs.writeFileSync(path.join(saveDir, 'index.d.ts'), typeDefinitionFile); 94 | } 95 | 96 | fs.writeFileSync(path.join(saveDir, 'index' + jsxExtension), iconFile); 97 | 98 | console.log(`\n${colors.green('√')} All icons have putted into dir: ${colors.green(config.save_dir)}\n`); 99 | }; 100 | 101 | const generateCase = (data: XmlData['svg']['symbol'][number], baseIdent: number) => { 102 | let template = `\n${whitespace(baseIdent)}\n`; 103 | 104 | for (const domName of Object.keys(data)) { 105 | if (domName === '$') { 106 | continue; 107 | } 108 | 109 | if (!domName) { 110 | console.error(colors.red(`Unable to transform dom "${domName}"`)); 111 | process.exit(1); 112 | } 113 | 114 | const counter = { 115 | colorIndex: 0, 116 | baseIdent, 117 | }; 118 | 119 | if (data[domName].$) { 120 | template += `${whitespace(baseIdent + 2)}<${domName}${addAttribute(domName, data[domName], counter)}\n${whitespace(baseIdent + 2)}/>\n`; 121 | } else if (Array.isArray(data[domName])) { 122 | data[domName].forEach((sub) => { 123 | template += `${whitespace(baseIdent + 2)}<${domName}${addAttribute(domName, sub, counter)}\n${whitespace(baseIdent + 2)}/>\n`; 124 | }); 125 | } 126 | } 127 | 128 | template += `${whitespace(baseIdent)}\n`; 129 | 130 | return template; 131 | }; 132 | 133 | const addAttribute = (domName: string, sub: XmlData['svg']['symbol'][number]['path'][number], counter: { colorIndex: number, baseIdent: number }) => { 134 | let template = ''; 135 | 136 | if (sub && sub.$) { 137 | if (ATTRIBUTE_FILL_MAP.includes(domName)) { 138 | // Set default color same as in iconfont.cn 139 | // And create placeholder to inject color by user's behavior 140 | sub.$.fill = sub.$.fill || '#333333'; 141 | } 142 | 143 | for (const attributeName of Object.keys(sub.$)) { 144 | if (attributeName === 'fill') { 145 | template += `\n${whitespace(counter.baseIdent + 4)}${camelCase(attributeName)}={getIconColor(color, ${counter.colorIndex}, '${sub.$[attributeName]}')}`; 146 | counter.colorIndex += 1; 147 | } else { 148 | template += `\n${whitespace(counter.baseIdent + 4)}${camelCase(attributeName)}="${sub.$[attributeName]}"`; 149 | } 150 | } 151 | } 152 | 153 | return template; 154 | }; 155 | -------------------------------------------------------------------------------- /src/libs/getConfig.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import fs from 'fs'; 3 | import colors from 'colors'; 4 | import defaultConfig from './iconfont.json'; 5 | 6 | export interface Config { 7 | symbol_url: string; 8 | use_typescript: boolean; 9 | save_dir: string; 10 | trim_icon_prefix: string; 11 | unit: string; 12 | default_icon_size: number; 13 | } 14 | 15 | let cacheConfig: Config; 16 | 17 | export const getConfig = () => { 18 | if (cacheConfig) { 19 | return cacheConfig; 20 | } 21 | 22 | const targetFile = path.resolve('iconfont.json'); 23 | 24 | if (!fs.existsSync(targetFile)) { 25 | console.warn(colors.red('File "iconfont.json" doesn\'t exist, did you forget to generate it?')); 26 | process.exit(1); 27 | } 28 | 29 | const config = require(targetFile) as Config; 30 | 31 | if (!config.symbol_url || !/^(https?:)?\/\//.test(config.symbol_url)) { 32 | console.warn(colors.red('You are required to provide symbol_url')); 33 | process.exit(1); 34 | } 35 | 36 | if (config.symbol_url.indexOf('//') === 0) { 37 | config.symbol_url = 'http:' + config.symbol_url; 38 | } 39 | 40 | config.save_dir = config.save_dir || defaultConfig.save_dir; 41 | config.default_icon_size = config.default_icon_size || defaultConfig.default_icon_size; 42 | config.unit = config.unit || defaultConfig.unit; 43 | 44 | cacheConfig = config; 45 | 46 | return config; 47 | }; 48 | -------------------------------------------------------------------------------- /src/libs/getTemplate.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | export const getTemplate = (fileName: string) => { 5 | return fs.readFileSync(path.join(__dirname, `../templates/${fileName}.template`)).toString(); 6 | }; 7 | -------------------------------------------------------------------------------- /src/libs/iconfont.json: -------------------------------------------------------------------------------- 1 | { 2 | "symbol_url": "请参考README.md,复制官网提供的JS链接", 3 | "use_typescript": false, 4 | "save_dir": "./src/components/iconfont", 5 | "trim_icon_prefix": "icon", 6 | "unit": "px", 7 | "default_icon_size": 18 8 | } 9 | -------------------------------------------------------------------------------- /src/libs/replace.ts: -------------------------------------------------------------------------------- 1 | export const replaceSize = (content: string, size: number) => { 2 | return content.replace(/#size#/g, String(size)); 3 | }; 4 | 5 | export const replaceCases = (content: string, cases: string) => { 6 | return content.replace(/#cases#/g, cases); 7 | }; 8 | 9 | export const replaceNames = (content: string, names: string[]) => { 10 | return content.replace(/#names#/g, names.join(`' | '`)); 11 | }; 12 | 13 | export const replaceNamesArray = (content: string, names: string[]) => { 14 | return content.replace( 15 | /#namesArray#/g, 16 | JSON.stringify(names) 17 | .replace(/"/g, '\'') 18 | .replace(/','/g, '\', \'') 19 | ); 20 | }; 21 | 22 | export const replaceComponentName = (content: string, name: string) => { 23 | return content.replace(/#componentName#/g, name); 24 | }; 25 | 26 | export const replaceSingleIconContent = (content: string, render: string) => { 27 | return content.replace(/#iconContent#/g, render); 28 | }; 29 | 30 | export const replaceImports = (content: string, imports: string[]) => { 31 | return content.replace(/#imports#/g, imports.map((item) => `import ${item} from './${item}';`).join('\n')); 32 | }; 33 | 34 | export const replaceSizeUnit = (content: string, unit: string) => { 35 | return content.replace(/\{size\}/g, `{size + '${unit}'}`); 36 | }; 37 | 38 | export const replaceExports = (content: string, exports: string[]) => { 39 | return content.replace(/#exports#/g, exports.map( 40 | (item) => `export { default as ${item} } from './${item}';`).join('\n') 41 | ); 42 | } -------------------------------------------------------------------------------- /src/libs/whitespace.ts: -------------------------------------------------------------------------------- 1 | export const whitespace = (repeat: number) => { 2 | return ' '.repeat(repeat); 3 | }; 4 | -------------------------------------------------------------------------------- /src/templates/Icon.d.ts.template: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { SVGAttributes, FunctionComponent } from 'react'; 4 | #exports# 5 | 6 | interface Props extends Omit, 'color'> { 7 | name: '#names#'; 8 | size?: number; 9 | color?: string | string[]; 10 | } 11 | 12 | declare const IconFont: FunctionComponent; 13 | 14 | export default IconFont; 15 | -------------------------------------------------------------------------------- /src/templates/Icon.js.template: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import React from 'react'; 4 | #imports# 5 | #exports# 6 | 7 | const IconFont = ({ name, ...rest }) => { 8 | switch (name) { 9 | #cases# 10 | } 11 | 12 | return null; 13 | }; 14 | 15 | export default IconFont; 16 | -------------------------------------------------------------------------------- /src/templates/Icon.tsx.template: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | import React, { SVGAttributes, FunctionComponent } from 'react'; 5 | #imports# 6 | #exports# 7 | 8 | export type IconNames = '#names#'; 9 | 10 | interface Props extends Omit, 'color'> { 11 | name: IconNames; 12 | size?: number; 13 | color?: string | string[]; 14 | } 15 | 16 | const IconFont: FunctionComponent = ({ name, ...rest }) => { 17 | switch (name) { 18 | #cases# 19 | } 20 | 21 | return null; 22 | }; 23 | 24 | export default IconFont; 25 | -------------------------------------------------------------------------------- /src/templates/SingleIcon.d.ts.template: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import { SVGAttributes, FunctionComponent } from 'react'; 4 | 5 | interface Props extends Omit, 'color'> { 6 | size?: number; 7 | color?: string | string[]; 8 | } 9 | 10 | declare const #componentName#: FunctionComponent; 11 | 12 | export default #componentName#; 13 | -------------------------------------------------------------------------------- /src/templates/SingleIcon.js.template: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import React from 'react'; 4 | import { getIconColor } from './helper'; 5 | 6 | const DEFAULT_STYLE = { 7 | display: 'block', 8 | }; 9 | 10 | const #componentName# = ({ size, color, style: _style, ...rest }) => { 11 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 12 | 13 | return (#iconContent# ); 14 | }; 15 | 16 | #componentName#.defaultProps = { 17 | size: #size#, 18 | }; 19 | 20 | export default #componentName#; 21 | -------------------------------------------------------------------------------- /src/templates/SingleIcon.tsx.template: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | import React, { CSSProperties, SVGAttributes, FunctionComponent } from 'react'; 5 | import { getIconColor } from './helper'; 6 | 7 | interface Props extends Omit, 'color'> { 8 | size?: number; 9 | color?: string | string[]; 10 | } 11 | 12 | const DEFAULT_STYLE: CSSProperties = { 13 | display: 'block', 14 | }; 15 | 16 | const #componentName#: FunctionComponent = ({ size, color, style: _style, ...rest }) => { 17 | const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; 18 | 19 | return (#iconContent# ); 20 | }; 21 | 22 | #componentName#.defaultProps = { 23 | size: #size#, 24 | }; 25 | 26 | export default #componentName#; 27 | -------------------------------------------------------------------------------- /src/templates/helper.d.ts.template: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | export declare const getIconColor: (color: string | string[] | undefined, index: number, defaultColor: string) => string; 4 | -------------------------------------------------------------------------------- /src/templates/helper.js.template: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | /** 4 | * @param {string | string[] | undefined} color 5 | * @param {number} index 6 | * @param {string} defaultColor 7 | * @return {string} 8 | */ 9 | export const getIconColor = (color, index, defaultColor) => { 10 | return color 11 | ? ( 12 | typeof color === 'string' 13 | ? color 14 | : color[index] || defaultColor 15 | ) 16 | : defaultColor; 17 | }; 18 | -------------------------------------------------------------------------------- /src/templates/helper.ts.template: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | 4 | export const getIconColor = (color: string | string[] | undefined, index: number, defaultColor: string) => { 5 | return color 6 | ? ( 7 | typeof color === 'string' 8 | ? color 9 | : color[index] || defaultColor 10 | ) 11 | : defaultColor; 12 | }; 13 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "lib": ["esnext"], 6 | "allowJs": false, 7 | "declaration": true, 8 | "removeComments": false, 9 | "outDir": "./build", 10 | "rootDir": "./", 11 | "jsx": "react", 12 | "importHelpers": true, 13 | "downlevelIteration": true, 14 | "strict": true, 15 | "noImplicitAny": false, 16 | "strictNullChecks": true, 17 | "strictFunctionTypes": true, 18 | "strictBindCallApply": true, 19 | "strictPropertyInitialization": true, 20 | "noImplicitThis": true, 21 | "alwaysStrict": true, 22 | 23 | "noUnusedLocals": true, 24 | "noUnusedParameters": true, 25 | "noImplicitReturns": true, 26 | "noFallthroughCasesInSwitch": true, 27 | "moduleResolution": "node", 28 | "allowSyntheticDefaultImports": true, 29 | "esModuleInterop": true, 30 | "resolveJsonModule": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/events@*": 6 | version "3.0.0" 7 | resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 8 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 9 | 10 | "@types/fs-extra@^8.0.0": 11 | version "8.0.0" 12 | resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz#d3e2c313ca29f95059f198dd60d1f774642d4b25" 13 | integrity sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q== 14 | dependencies: 15 | "@types/node" "*" 16 | 17 | "@types/glob@^7.1.1": 18 | version "7.1.1" 19 | resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" 20 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 21 | dependencies: 22 | "@types/events" "*" 23 | "@types/minimatch" "*" 24 | "@types/node" "*" 25 | 26 | "@types/lodash@^4.14.137": 27 | version "4.14.137" 28 | resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.137.tgz#8a4804937dc6462274ffcc088df8f14fc1b368e2" 29 | integrity sha512-g4rNK5SRKloO+sUGbuO7aPtwbwzMgjK+bm9BBhLD7jGUiGR7zhwYEhSln/ihgYQBeIJ5j7xjyaYzrWTcu3UotQ== 30 | 31 | "@types/minimatch@*": 32 | version "3.0.3" 33 | resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 34 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 35 | 36 | "@types/minimist@^1.2.0": 37 | version "1.2.0" 38 | resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" 39 | integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= 40 | 41 | "@types/mkdirp@^0.5.2": 42 | version "0.5.2" 43 | resolved "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" 44 | integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== 45 | dependencies: 46 | "@types/node" "*" 47 | 48 | "@types/node@*", "@types/node@^12.7.2": 49 | version "12.7.2" 50 | resolved "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz#c4e63af5e8823ce9cc3f0b34f7b998c2171f0c44" 51 | integrity sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg== 52 | 53 | "@types/prop-types@*": 54 | version "15.7.1" 55 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" 56 | integrity sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg== 57 | 58 | "@types/react@^16.9.2": 59 | version "16.9.2" 60 | resolved "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz#6d1765431a1ad1877979013906731aae373de268" 61 | integrity sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg== 62 | dependencies: 63 | "@types/prop-types" "*" 64 | csstype "^2.2.0" 65 | 66 | arg@^4.1.0: 67 | version "4.1.1" 68 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" 69 | integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== 70 | 71 | axios@^0.19.0: 72 | version "0.19.0" 73 | resolved "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" 74 | integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== 75 | dependencies: 76 | follow-redirects "1.5.10" 77 | is-buffer "^2.0.2" 78 | 79 | balanced-match@^1.0.0: 80 | version "1.0.0" 81 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 82 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 83 | 84 | brace-expansion@^1.1.7: 85 | version "1.1.11" 86 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 87 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 88 | dependencies: 89 | balanced-match "^1.0.0" 90 | concat-map "0.0.1" 91 | 92 | buffer-from@^1.0.0: 93 | version "1.1.1" 94 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 95 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 96 | 97 | colors@^1.3.3: 98 | version "1.3.3" 99 | resolved "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" 100 | integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== 101 | 102 | colors@^1.4.0: 103 | version "1.4.0" 104 | resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 105 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 106 | 107 | concat-map@0.0.1: 108 | version "0.0.1" 109 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 110 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 111 | 112 | csstype@^2.2.0: 113 | version "2.6.6" 114 | resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41" 115 | integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg== 116 | 117 | debug@=3.1.0: 118 | version "3.1.0" 119 | resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 120 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 121 | dependencies: 122 | ms "2.0.0" 123 | 124 | define-properties@^1.1.2, define-properties@^1.1.3: 125 | version "1.1.3" 126 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 127 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 128 | dependencies: 129 | object-keys "^1.0.12" 130 | 131 | diff@^4.0.1: 132 | version "4.0.1" 133 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 134 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 135 | 136 | es-abstract@^1.5.1: 137 | version "1.16.2" 138 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" 139 | integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== 140 | dependencies: 141 | es-to-primitive "^1.2.1" 142 | function-bind "^1.1.1" 143 | has "^1.0.3" 144 | has-symbols "^1.0.1" 145 | is-callable "^1.1.4" 146 | is-regex "^1.0.4" 147 | object-inspect "^1.7.0" 148 | object-keys "^1.1.1" 149 | string.prototype.trimleft "^2.1.0" 150 | string.prototype.trimright "^2.1.0" 151 | 152 | es-to-primitive@^1.2.1: 153 | version "1.2.1" 154 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 155 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 156 | dependencies: 157 | is-callable "^1.1.4" 158 | is-date-object "^1.0.1" 159 | is-symbol "^1.0.2" 160 | 161 | follow-redirects@1.5.10: 162 | version "1.5.10" 163 | resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" 164 | integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== 165 | dependencies: 166 | debug "=3.1.0" 167 | 168 | fs.realpath@^1.0.0: 169 | version "1.0.0" 170 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 171 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 172 | 173 | function-bind@^1.1.1: 174 | version "1.1.1" 175 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 176 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 177 | 178 | glob@^7.1.4: 179 | version "7.1.4" 180 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 181 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 182 | dependencies: 183 | fs.realpath "^1.0.0" 184 | inflight "^1.0.4" 185 | inherits "2" 186 | minimatch "^3.0.4" 187 | once "^1.3.0" 188 | path-is-absolute "^1.0.0" 189 | 190 | has-symbols@^1.0.1: 191 | version "1.0.1" 192 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 193 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 194 | 195 | has@^1.0.1, has@^1.0.3: 196 | version "1.0.3" 197 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 198 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 199 | dependencies: 200 | function-bind "^1.1.1" 201 | 202 | iconfont-parser@^1.0.0: 203 | version "1.0.0" 204 | resolved "https://registry.npmjs.org/iconfont-parser/-/iconfont-parser-1.0.0.tgz#1fa61be02677005a9a014653ef2eeb7503c3538a" 205 | integrity sha512-3RJceYHEjaqYyeDdfSAb1vP1x1Eb7ZtC9Xwetj+axm85sBlJU7HMvdNLVpwm/3g5eghYOdkQK+epUITZGAIqKQ== 206 | dependencies: 207 | axios "^0.19.0" 208 | colors "^1.4.0" 209 | tslib "^1.10.0" 210 | xml2js "^0.4.22" 211 | 212 | inflight@^1.0.4: 213 | version "1.0.6" 214 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 215 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 216 | dependencies: 217 | once "^1.3.0" 218 | wrappy "1" 219 | 220 | inherits@2: 221 | version "2.0.4" 222 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 223 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 224 | 225 | is-buffer@^2.0.2: 226 | version "2.0.4" 227 | resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 228 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 229 | 230 | is-callable@^1.1.4: 231 | version "1.1.4" 232 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 233 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 234 | 235 | is-date-object@^1.0.1: 236 | version "1.0.1" 237 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 238 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 239 | 240 | is-regex@^1.0.4: 241 | version "1.0.4" 242 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 243 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 244 | dependencies: 245 | has "^1.0.1" 246 | 247 | is-symbol@^1.0.2: 248 | version "1.0.3" 249 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 250 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 251 | dependencies: 252 | has-symbols "^1.0.1" 253 | 254 | "js-tokens@^3.0.0 || ^4.0.0": 255 | version "4.0.0" 256 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 257 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 258 | 259 | lodash@^4.17.15: 260 | version "4.17.15" 261 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 262 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 263 | 264 | loose-envify@^1.1.0, loose-envify@^1.4.0: 265 | version "1.4.0" 266 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 267 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 268 | dependencies: 269 | js-tokens "^3.0.0 || ^4.0.0" 270 | 271 | make-error@^1.1.1: 272 | version "1.3.5" 273 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 274 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 275 | 276 | minimatch@^3.0.4: 277 | version "3.0.4" 278 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 279 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 280 | dependencies: 281 | brace-expansion "^1.1.7" 282 | 283 | minimist@0.0.8: 284 | version "0.0.8" 285 | resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 286 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 287 | 288 | minimist@^1.2.5: 289 | version "1.2.5" 290 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 291 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 292 | 293 | mkdirp@^0.5.1: 294 | version "0.5.1" 295 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 296 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 297 | dependencies: 298 | minimist "0.0.8" 299 | 300 | ms@2.0.0: 301 | version "2.0.0" 302 | resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 303 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 304 | 305 | object-assign@^4.1.1: 306 | version "4.1.1" 307 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 308 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 309 | 310 | object-inspect@^1.7.0: 311 | version "1.7.0" 312 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 313 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 314 | 315 | object-keys@^1.0.12, object-keys@^1.1.1: 316 | version "1.1.1" 317 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 318 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 319 | 320 | object.getownpropertydescriptors@^2.0.3: 321 | version "2.0.3" 322 | resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 323 | integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 324 | dependencies: 325 | define-properties "^1.1.2" 326 | es-abstract "^1.5.1" 327 | 328 | once@^1.3.0: 329 | version "1.4.0" 330 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 331 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 332 | dependencies: 333 | wrappy "1" 334 | 335 | path-is-absolute@^1.0.0: 336 | version "1.0.1" 337 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 338 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 339 | 340 | prop-types@^15.6.2: 341 | version "15.7.2" 342 | resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 343 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 344 | dependencies: 345 | loose-envify "^1.4.0" 346 | object-assign "^4.1.1" 347 | react-is "^16.8.1" 348 | 349 | react-is@^16.8.1: 350 | version "16.9.0" 351 | resolved "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" 352 | integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== 353 | 354 | react@^16.9.0: 355 | version "16.9.0" 356 | resolved "https://registry.npmjs.org/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" 357 | integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== 358 | dependencies: 359 | loose-envify "^1.1.0" 360 | object-assign "^4.1.1" 361 | prop-types "^15.6.2" 362 | 363 | sax@>=0.6.0: 364 | version "1.2.4" 365 | resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 366 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 367 | 368 | source-map-support@^0.5.6: 369 | version "0.5.13" 370 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 371 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 372 | dependencies: 373 | buffer-from "^1.0.0" 374 | source-map "^0.6.0" 375 | 376 | source-map@^0.6.0: 377 | version "0.6.1" 378 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 379 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 380 | 381 | string.prototype.trimleft@^2.1.0: 382 | version "2.1.0" 383 | resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" 384 | integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== 385 | dependencies: 386 | define-properties "^1.1.3" 387 | function-bind "^1.1.1" 388 | 389 | string.prototype.trimright@^2.1.0: 390 | version "2.1.0" 391 | resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" 392 | integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== 393 | dependencies: 394 | define-properties "^1.1.3" 395 | function-bind "^1.1.1" 396 | 397 | ts-node@^8.3.0: 398 | version "8.3.0" 399 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" 400 | integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== 401 | dependencies: 402 | arg "^4.1.0" 403 | diff "^4.0.1" 404 | make-error "^1.1.1" 405 | source-map-support "^0.5.6" 406 | yn "^3.0.0" 407 | 408 | tslib@^1.10.0: 409 | version "1.10.0" 410 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 411 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 412 | 413 | typescript@^3.5.3: 414 | version "3.5.3" 415 | resolved "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" 416 | integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== 417 | 418 | util.promisify@~1.0.0: 419 | version "1.0.0" 420 | resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" 421 | integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== 422 | dependencies: 423 | define-properties "^1.1.2" 424 | object.getownpropertydescriptors "^2.0.3" 425 | 426 | wrappy@1: 427 | version "1.0.2" 428 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 429 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 430 | 431 | xml2js@^0.4.22: 432 | version "0.4.22" 433 | resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" 434 | integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== 435 | dependencies: 436 | sax ">=0.6.0" 437 | util.promisify "~1.0.0" 438 | xmlbuilder "~11.0.0" 439 | 440 | xmlbuilder@~11.0.0: 441 | version "11.0.1" 442 | resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" 443 | integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== 444 | 445 | yn@^3.0.0: 446 | version "3.1.1" 447 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 448 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 449 | --------------------------------------------------------------------------------