├── .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 | 
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 | 
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 | 
117 | ### 图标单色
118 | 单色图标,如果不指定颜色值,图标将渲染原本的颜色。如果你想设置为其他的颜色,那么设置一个你想要的颜色即可。
119 |
120 | **注意:如果你在props传入的color是字符串而不是数组,那么即使原本是多色彩的图标,也会变成单色图标。**
121 |
122 | ```typescript jsx
123 |
124 | ```
125 | 
126 |
127 | ### 图标多色彩
128 | 多色彩的图标,如果不指定颜色值,图标将渲染原本的多色彩。如果你想设置为其他的颜色,那么设置一组你想要的颜色即可
129 | ```typescript jsx
130 |
131 | ```
132 | 颜色组的数量以及排序,需要根据当前图标的信息来确定。您需要进入图标组件中查看并得出结论。
133 |
134 |
135 | 
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 |
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 |
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 |
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 |
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 |
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 |
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`;
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 |
--------------------------------------------------------------------------------