Commit f053c5f1 authored by 余成's avatar 余成

init

parents
{
"id": "disk-turntable",
"name": "圆形转盘",
"type": 0,
"desc": "实现了圆形转盘",
"exports": []
}
{
"name": "@spark/disk-turntable",
"version": "1.0.27",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@spark/disk-turntable",
"version": "1.0.27",
"license": "MIT",
"dependencies": {
"db-react-helper": "^1.0.2"
},
"devDependencies": {
"@types/react": "^16.9.56",
"fs-extra": "^9.0.1",
"less": "^4.1.0",
"npm-run-all": "^4.1.5",
"tslib": "^2.0.1",
"typescript": "^4.1.3"
}
},
"node_modules/@types/prop-types": {
"version": "15.7.5",
"resolved": "http://npm.dui88.com:80/@types%2fprop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/react": {
"version": "16.14.28",
"resolved": "http://npm.dui88.com:80/@types%2freact/-/react-16.14.28.tgz",
"integrity": "sha512-83zBE6+XUVXsdL3iFzOyUewdauaU+KviKCHEGOgSW52coAuqW7tEKQM0E9+ZC0Zk6TELQ2/JgogPvp7FavzFwg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/scheduler": {
"version": "0.16.2",
"resolved": "http://npm.dui88.com:80/@types%2fscheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk=",
"dev": true,
"license": "MIT"
},
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "http://npm.dui88.com:80/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/at-least-node": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=",
"dev": true,
"license": "ISC",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=",
"dev": true,
"license": "MIT"
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "http://npm.dui88.com:80/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "http://npm.dui88.com:80/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "http://npm.dui88.com:80/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "http://npm.dui88.com:80/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true,
"license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "http://npm.dui88.com:80/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true,
"license": "MIT"
},
"node_modules/copy-anything": {
"version": "2.0.6",
"resolved": "http://npm.dui88.com:80/copy-anything/-/copy-anything-2.0.6.tgz",
"integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-what": "^3.14.1"
},
"funding": {
"url": "https://github.com/sponsors/mesqueeb"
}
},
"node_modules/cross-spawn": {
"version": "6.0.5",
"resolved": "http://npm.dui88.com:80/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
"dev": true,
"license": "MIT",
"dependencies": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
},
"engines": {
"node": ">=4.8"
}
},
"node_modules/csstype": {
"version": "3.1.0",
"resolved": "http://npm.dui88.com:80/csstype/-/csstype-3.1.0.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
"dev": true,
"license": "MIT"
},
"node_modules/db-react-helper": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/db-react-helper/-/db-react-helper-1.0.5.tgz",
"integrity": "sha512-J4+DXr/Ah7t+/j96m73WzJ26VUfHzE5MxWj7kS62SV7iKCb5LTTcngWvn4jmpQnF54WAkhOjBt8sY6B+RkDPPA==",
"license": "MIT"
},
"node_modules/debug": {
"version": "3.2.7",
"resolved": "http://npm.dui88.com:80/debug/-/debug-3.2.7.tgz",
"integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"ms": "^2.1.1"
}
},
"node_modules/define-properties": {
"version": "1.1.4",
"resolved": "http://npm.dui88.com:80/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/errno": {
"version": "0.1.8",
"resolved": "http://npm.dui88.com:80/errno/-/errno-0.1.8.tgz",
"integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"prr": "~1.0.1"
},
"bin": {
"errno": "cli.js"
}
},
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "http://npm.dui88.com:80/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
"dev": true,
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/es-abstract": {
"version": "1.20.1",
"resolved": "http://npm.dui88.com:80/es-abstract/-/es-abstract-1.20.1.tgz",
"integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
"get-intrinsic": "^1.1.1",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
"is-callable": "^1.2.4",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
"is-weakref": "^1.0.2",
"object-inspect": "^1.12.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
"regexp.prototype.flags": "^1.4.3",
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
"unbox-primitive": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/es-to-primitive": {
"version": "1.2.1",
"resolved": "http://npm.dui88.com:80/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
"dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
"is-symbol": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/fs-extra": {
"version": "9.1.0",
"resolved": "http://npm.dui88.com:80/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=",
"dev": true,
"license": "MIT",
"dependencies": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "http://npm.dui88.com:80/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
"dev": true,
"license": "MIT"
},
"node_modules/function.prototype.name": {
"version": "1.1.5",
"resolved": "http://npm.dui88.com:80/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
"integrity": "sha1-zOBQX+H/uAUD5vnkbMZORqEqliE=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.0",
"functions-have-names": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "http://npm.dui88.com:80/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-intrinsic": {
"version": "1.1.2",
"resolved": "http://npm.dui88.com:80/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
"integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-symbol-description": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
"integrity": "sha1-f9uByQAQH71WTdXxowr1qtweWNY=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/graceful-fs": {
"version": "4.2.10",
"resolved": "http://npm.dui88.com:80/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true,
"license": "ISC"
},
"node_modules/has": {
"version": "1.0.3",
"resolved": "http://npm.dui88.com:80/has/-/has-1.0.3.tgz",
"integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/has-bigints/-/has-bigints-1.0.2.tgz",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "http://npm.dui88.com:80/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-tostringtag": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=",
"dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "http://npm.dui88.com:80/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
"dev": true,
"license": "ISC"
},
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "http://npm.dui88.com:80/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/image-size": {
"version": "0.5.5",
"resolved": "http://npm.dui88.com:80/image-size/-/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"dev": true,
"license": "MIT",
"optional": true,
"bin": {
"image-size": "bin/image-size.js"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/internal-slot": {
"version": "1.0.3",
"resolved": "http://npm.dui88.com:80/internal-slot/-/internal-slot-1.0.3.tgz",
"integrity": "sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=",
"dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "http://npm.dui88.com:80/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true,
"license": "MIT"
},
"node_modules/is-bigint": {
"version": "1.0.4",
"resolved": "http://npm.dui88.com:80/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=",
"dev": true,
"license": "MIT",
"dependencies": {
"has-bigints": "^1.0.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-boolean-object": {
"version": "1.1.2",
"resolved": "http://npm.dui88.com:80/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-callable": {
"version": "1.2.4",
"resolved": "http://npm.dui88.com:80/is-callable/-/is-callable-1.2.4.tgz",
"integrity": "sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-core-module": {
"version": "2.9.0",
"resolved": "http://npm.dui88.com:80/is-core-module/-/is-core-module-2.9.0.tgz",
"integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"has": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-date-object": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=",
"dev": true,
"license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-negative-zero": {
"version": "2.0.2",
"resolved": "http://npm.dui88.com:80/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
"integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-number-object": {
"version": "1.0.7",
"resolved": "http://npm.dui88.com:80/is-number-object/-/is-number-object-1.0.7.tgz",
"integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-regex": {
"version": "1.1.4",
"resolved": "http://npm.dui88.com:80/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-shared-array-buffer": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
"integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-string": {
"version": "1.0.7",
"resolved": "http://npm.dui88.com:80/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=",
"dev": true,
"license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-symbol": {
"version": "1.0.4",
"resolved": "http://npm.dui88.com:80/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=",
"dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakref": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-what": {
"version": "3.14.1",
"resolved": "http://npm.dui88.com:80/is-what/-/is-what-3.14.1.tgz",
"integrity": "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=",
"dev": true,
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "http://npm.dui88.com:80/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true,
"license": "ISC"
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
"integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
"dev": true,
"license": "MIT"
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "http://npm.dui88.com:80/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=",
"dev": true,
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/less": {
"version": "4.1.3",
"resolved": "http://npm.dui88.com:80/less/-/less-4.1.3.tgz",
"integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"copy-anything": "^2.0.1",
"parse-node-version": "^1.0.1",
"tslib": "^2.3.0"
},
"bin": {
"lessc": "bin/lessc"
},
"engines": {
"node": ">=6"
},
"optionalDependencies": {
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"make-dir": "^2.1.0",
"mime": "^1.4.1",
"needle": "^3.1.0",
"source-map": "~0.6.0"
}
},
"node_modules/load-json-file": {
"version": "4.0.0",
"resolved": "http://npm.dui88.com:80/load-json-file/-/load-json-file-4.0.0.tgz",
"integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0",
"strip-bom": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/make-dir": {
"version": "2.1.0",
"resolved": "http://npm.dui88.com:80/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"pify": "^4.0.1",
"semver": "^5.6.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/make-dir/node_modules/pify": {
"version": "4.0.1",
"resolved": "http://npm.dui88.com:80/pify/-/pify-4.0.1.tgz",
"integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
"dev": true,
"license": "MIT",
"optional": true,
"engines": {
"node": ">=6"
}
},
"node_modules/memorystream": {
"version": "0.3.1",
"resolved": "http://npm.dui88.com:80/memorystream/-/memorystream-0.3.1.tgz",
"integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
"dev": true,
"engines": {
"node": ">= 0.10.0"
}
},
"node_modules/mime": {
"version": "1.6.0",
"resolved": "http://npm.dui88.com:80/mime/-/mime-1.6.0.tgz",
"integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
"dev": true,
"license": "MIT",
"optional": true,
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "http://npm.dui88.com:80/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/ms": {
"version": "2.1.3",
"resolved": "http://npm.dui88.com:80/ms/-/ms-2.1.3.tgz",
"integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/needle": {
"version": "3.1.0",
"resolved": "http://npm.dui88.com:80/needle/-/needle-3.1.0.tgz",
"integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"debug": "^3.2.6",
"iconv-lite": "^0.6.3",
"sax": "^1.2.4"
},
"bin": {
"needle": "bin/needle"
},
"engines": {
"node": ">= 4.4.x"
}
},
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
"dev": true,
"license": "MIT"
},
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "http://npm.dui88.com:80/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
"node_modules/npm-run-all": {
"version": "4.1.5",
"resolved": "http://npm.dui88.com:80/npm-run-all/-/npm-run-all-4.1.5.tgz",
"integrity": "sha1-BEdiAqFe4OLiFAgIYb/xKlHZj7o=",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"chalk": "^2.4.1",
"cross-spawn": "^6.0.5",
"memorystream": "^0.3.1",
"minimatch": "^3.0.4",
"pidtree": "^0.3.0",
"read-pkg": "^3.0.0",
"shell-quote": "^1.6.1",
"string.prototype.padend": "^3.0.0"
},
"bin": {
"npm-run-all": "bin/npm-run-all/index.js",
"run-p": "bin/run-p/index.js",
"run-s": "bin/run-s/index.js"
},
"engines": {
"node": ">= 4"
}
},
"node_modules/object-inspect": {
"version": "1.12.2",
"resolved": "http://npm.dui88.com:80/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
"resolved": "http://npm.dui88.com:80/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.assign": {
"version": "4.1.2",
"resolved": "http://npm.dui88.com:80/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"has-symbols": "^1.0.1",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/parse-json": {
"version": "4.0.0",
"resolved": "http://npm.dui88.com:80/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true,
"license": "MIT",
"dependencies": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/parse-node-version": {
"version": "1.0.1",
"resolved": "http://npm.dui88.com:80/parse-node-version/-/parse-node-version-1.0.1.tgz",
"integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/path-key": {
"version": "2.0.1",
"resolved": "http://npm.dui88.com:80/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "http://npm.dui88.com:80/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
"dev": true,
"license": "MIT"
},
"node_modules/path-type": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
"dev": true,
"license": "MIT",
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/pidtree": {
"version": "0.3.1",
"resolved": "http://npm.dui88.com:80/pidtree/-/pidtree-0.3.1.tgz",
"integrity": "sha1-7wmsLMBTPfHzJQzPLE02aw0SEUo=",
"dev": true,
"license": "MIT",
"bin": {
"pidtree": "bin/pidtree.js"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/pify": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/prr": {
"version": "1.0.1",
"resolved": "http://npm.dui88.com:80/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/read-pkg": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/read-pkg/-/read-pkg-3.0.0.tgz",
"integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
"dev": true,
"license": "MIT",
"dependencies": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/regexp.prototype.flags": {
"version": "1.4.3",
"resolved": "http://npm.dui88.com:80/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
"integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"functions-have-names": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve": {
"version": "1.22.1",
"resolved": "http://npm.dui88.com:80/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "http://npm.dui88.com:80/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/sax": {
"version": "1.2.4",
"resolved": "http://npm.dui88.com:80/sax/-/sax-1.2.4.tgz",
"integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
"dev": true,
"license": "ISC",
"optional": true
},
"node_modules/semver": {
"version": "5.7.1",
"resolved": "http://npm.dui88.com:80/semver/-/semver-5.7.1.tgz",
"integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "http://npm.dui88.com:80/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/shebang-regex": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/shell-quote": {
"version": "1.7.3",
"resolved": "http://npm.dui88.com:80/shell-quote/-/shell-quote-1.7.3.tgz",
"integrity": "sha1-qkDtrBcERbmkMeF7tiwLiBucQSM=",
"dev": true,
"license": "MIT"
},
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "http://npm.dui88.com:80/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "http://npm.dui88.com:80/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/spdx-correct": {
"version": "3.1.1",
"resolved": "http://npm.dui88.com:80/spdx-correct/-/spdx-correct-3.1.1.tgz",
"integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-exceptions": {
"version": "2.3.0",
"resolved": "http://npm.dui88.com:80/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
"dev": true,
"license": "CC-BY-3.0"
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "http://npm.dui88.com:80/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
"dev": true,
"license": "MIT",
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-license-ids": {
"version": "3.0.11",
"resolved": "http://npm.dui88.com:80/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
"integrity": "sha1-UMDYxAoU7Bv0Sbrmmg6kaFqdn5U=",
"dev": true,
"license": "CC0-1.0"
},
"node_modules/string.prototype.padend": {
"version": "3.1.3",
"resolved": "http://npm.dui88.com:80/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
"integrity": "sha1-mXpt4SySx8s03IogGmxT2b2IpfE=",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimend": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
"integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
"es-abstract": "^1.19.5"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
"integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
"es-abstract": "^1.19.5"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/strip-bom": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "http://npm.dui88.com:80/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/tslib": {
"version": "2.4.0",
"resolved": "http://npm.dui88.com:80/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
"dev": true,
"license": "0BSD"
},
"node_modules/typescript": {
"version": "4.7.4",
"resolved": "http://npm.dui88.com:80/typescript/-/typescript-4.7.4.tgz",
"integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
"has-symbols": "^1.0.3",
"which-boxed-primitive": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/universalify": {
"version": "2.0.0",
"resolved": "http://npm.dui88.com:80/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "http://npm.dui88.com:80/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
"node_modules/which": {
"version": "1.3.1",
"resolved": "http://npm.dui88.com:80/which/-/which-1.3.1.tgz",
"integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"which": "bin/which"
}
},
"node_modules/which-boxed-primitive": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=",
"dev": true,
"license": "MIT",
"dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
"is-number-object": "^1.0.4",
"is-string": "^1.0.5",
"is-symbol": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
}
},
"dependencies": {
"@types/prop-types": {
"version": "15.7.5",
"resolved": "http://npm.dui88.com:80/@types%2fprop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"dev": true
},
"@types/react": {
"version": "16.14.28",
"resolved": "http://npm.dui88.com:80/@types%2freact/-/react-16.14.28.tgz",
"integrity": "sha512-83zBE6+XUVXsdL3iFzOyUewdauaU+KviKCHEGOgSW52coAuqW7tEKQM0E9+ZC0Zk6TELQ2/JgogPvp7FavzFwg==",
"dev": true,
"requires": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"@types/scheduler": {
"version": "0.16.2",
"resolved": "http://npm.dui88.com:80/@types%2fscheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk=",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "http://npm.dui88.com:80/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"at-least-node": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=",
"dev": true
},
"balanced-match": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "http://npm.dui88.com:80/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"call-bind": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "http://npm.dui88.com:80/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "http://npm.dui88.com:80/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "http://npm.dui88.com:80/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "http://npm.dui88.com:80/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"copy-anything": {
"version": "2.0.6",
"resolved": "http://npm.dui88.com:80/copy-anything/-/copy-anything-2.0.6.tgz",
"integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
"dev": true,
"requires": {
"is-what": "^3.14.1"
}
},
"cross-spawn": {
"version": "6.0.5",
"resolved": "http://npm.dui88.com:80/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"csstype": {
"version": "3.1.0",
"resolved": "http://npm.dui88.com:80/csstype/-/csstype-3.1.0.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
"dev": true
},
"db-react-helper": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/db-react-helper/-/db-react-helper-1.0.5.tgz",
"integrity": "sha512-J4+DXr/Ah7t+/j96m73WzJ26VUfHzE5MxWj7kS62SV7iKCb5LTTcngWvn4jmpQnF54WAkhOjBt8sY6B+RkDPPA=="
},
"debug": {
"version": "3.2.7",
"resolved": "http://npm.dui88.com:80/debug/-/debug-3.2.7.tgz",
"integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
"dev": true,
"optional": true,
"requires": {
"ms": "^2.1.1"
}
},
"define-properties": {
"version": "1.1.4",
"resolved": "http://npm.dui88.com:80/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"requires": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
}
},
"errno": {
"version": "0.1.8",
"resolved": "http://npm.dui88.com:80/errno/-/errno-0.1.8.tgz",
"integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
"dev": true,
"optional": true,
"requires": {
"prr": "~1.0.1"
}
},
"error-ex": {
"version": "1.3.2",
"resolved": "http://npm.dui88.com:80/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
"dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
},
"es-abstract": {
"version": "1.20.1",
"resolved": "http://npm.dui88.com:80/es-abstract/-/es-abstract-1.20.1.tgz",
"integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
"get-intrinsic": "^1.1.1",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
"is-callable": "^1.2.4",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
"is-weakref": "^1.0.2",
"object-inspect": "^1.12.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
"regexp.prototype.flags": "^1.4.3",
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
"unbox-primitive": "^1.0.2"
}
},
"es-to-primitive": {
"version": "1.2.1",
"resolved": "http://npm.dui88.com:80/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
"dev": true,
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
"is-symbol": "^1.0.2"
}
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"fs-extra": {
"version": "9.1.0",
"resolved": "http://npm.dui88.com:80/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=",
"dev": true,
"requires": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "http://npm.dui88.com:80/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
"dev": true
},
"function.prototype.name": {
"version": "1.1.5",
"resolved": "http://npm.dui88.com:80/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
"integrity": "sha1-zOBQX+H/uAUD5vnkbMZORqEqliE=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.0",
"functions-have-names": "^1.2.2"
}
},
"functions-have-names": {
"version": "1.2.3",
"resolved": "http://npm.dui88.com:80/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true
},
"get-intrinsic": {
"version": "1.1.2",
"resolved": "http://npm.dui88.com:80/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
"integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"get-symbol-description": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
"integrity": "sha1-f9uByQAQH71WTdXxowr1qtweWNY=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
}
},
"graceful-fs": {
"version": "4.2.10",
"resolved": "http://npm.dui88.com:80/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true
},
"has": {
"version": "1.0.3",
"resolved": "http://npm.dui88.com:80/has/-/has-1.0.3.tgz",
"integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
},
"has-bigints": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/has-bigints/-/has-bigints-1.0.2.tgz",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"has-property-descriptors": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"requires": {
"get-intrinsic": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.3",
"resolved": "http://npm.dui88.com:80/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true
},
"has-tostringtag": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=",
"dev": true,
"requires": {
"has-symbols": "^1.0.2"
}
},
"hosted-git-info": {
"version": "2.8.9",
"resolved": "http://npm.dui88.com:80/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
"dev": true
},
"iconv-lite": {
"version": "0.6.3",
"resolved": "http://npm.dui88.com:80/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=",
"dev": true,
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
},
"image-size": {
"version": "0.5.5",
"resolved": "http://npm.dui88.com:80/image-size/-/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"dev": true,
"optional": true
},
"internal-slot": {
"version": "1.0.3",
"resolved": "http://npm.dui88.com:80/internal-slot/-/internal-slot-1.0.3.tgz",
"integrity": "sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=",
"dev": true,
"requires": {
"get-intrinsic": "^1.1.0",
"has": "^1.0.3",
"side-channel": "^1.0.4"
}
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "http://npm.dui88.com:80/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"is-bigint": {
"version": "1.0.4",
"resolved": "http://npm.dui88.com:80/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=",
"dev": true,
"requires": {
"has-bigints": "^1.0.1"
}
},
"is-boolean-object": {
"version": "1.1.2",
"resolved": "http://npm.dui88.com:80/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"is-callable": {
"version": "1.2.4",
"resolved": "http://npm.dui88.com:80/is-callable/-/is-callable-1.2.4.tgz",
"integrity": "sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU=",
"dev": true
},
"is-core-module": {
"version": "2.9.0",
"resolved": "http://npm.dui88.com:80/is-core-module/-/is-core-module-2.9.0.tgz",
"integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-date-object": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=",
"dev": true,
"requires": {
"has-tostringtag": "^1.0.0"
}
},
"is-negative-zero": {
"version": "2.0.2",
"resolved": "http://npm.dui88.com:80/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
"integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
"dev": true
},
"is-number-object": {
"version": "1.0.7",
"resolved": "http://npm.dui88.com:80/is-number-object/-/is-number-object-1.0.7.tgz",
"integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
"requires": {
"has-tostringtag": "^1.0.0"
}
},
"is-regex": {
"version": "1.1.4",
"resolved": "http://npm.dui88.com:80/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"is-shared-array-buffer": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
"integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2"
}
},
"is-string": {
"version": "1.0.7",
"resolved": "http://npm.dui88.com:80/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=",
"dev": true,
"requires": {
"has-tostringtag": "^1.0.0"
}
},
"is-symbol": {
"version": "1.0.4",
"resolved": "http://npm.dui88.com:80/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=",
"dev": true,
"requires": {
"has-symbols": "^1.0.2"
}
},
"is-weakref": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2"
}
},
"is-what": {
"version": "3.14.1",
"resolved": "http://npm.dui88.com:80/is-what/-/is-what-3.14.1.tgz",
"integrity": "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=",
"dev": true
},
"isexe": {
"version": "2.0.0",
"resolved": "http://npm.dui88.com:80/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
"integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
"dev": true
},
"jsonfile": {
"version": "6.1.0",
"resolved": "http://npm.dui88.com:80/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"less": {
"version": "4.1.3",
"resolved": "http://npm.dui88.com:80/less/-/less-4.1.3.tgz",
"integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==",
"dev": true,
"requires": {
"copy-anything": "^2.0.1",
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"make-dir": "^2.1.0",
"mime": "^1.4.1",
"needle": "^3.1.0",
"parse-node-version": "^1.0.1",
"source-map": "~0.6.0",
"tslib": "^2.3.0"
}
},
"load-json-file": {
"version": "4.0.0",
"resolved": "http://npm.dui88.com:80/load-json-file/-/load-json-file-4.0.0.tgz",
"integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0",
"strip-bom": "^3.0.0"
}
},
"make-dir": {
"version": "2.1.0",
"resolved": "http://npm.dui88.com:80/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
"dev": true,
"optional": true,
"requires": {
"pify": "^4.0.1",
"semver": "^5.6.0"
},
"dependencies": {
"pify": {
"version": "4.0.1",
"resolved": "http://npm.dui88.com:80/pify/-/pify-4.0.1.tgz",
"integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
"dev": true,
"optional": true
}
}
},
"memorystream": {
"version": "0.3.1",
"resolved": "http://npm.dui88.com:80/memorystream/-/memorystream-0.3.1.tgz",
"integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
"dev": true
},
"mime": {
"version": "1.6.0",
"resolved": "http://npm.dui88.com:80/mime/-/mime-1.6.0.tgz",
"integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.1.2",
"resolved": "http://npm.dui88.com:80/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"ms": {
"version": "2.1.3",
"resolved": "http://npm.dui88.com:80/ms/-/ms-2.1.3.tgz",
"integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=",
"dev": true,
"optional": true
},
"needle": {
"version": "3.1.0",
"resolved": "http://npm.dui88.com:80/needle/-/needle-3.1.0.tgz",
"integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
"dev": true,
"optional": true,
"requires": {
"debug": "^3.2.6",
"iconv-lite": "^0.6.3",
"sax": "^1.2.4"
}
},
"nice-try": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
"dev": true
},
"normalize-package-data": {
"version": "2.5.0",
"resolved": "http://npm.dui88.com:80/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
"npm-run-all": {
"version": "4.1.5",
"resolved": "http://npm.dui88.com:80/npm-run-all/-/npm-run-all-4.1.5.tgz",
"integrity": "sha1-BEdiAqFe4OLiFAgIYb/xKlHZj7o=",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"chalk": "^2.4.1",
"cross-spawn": "^6.0.5",
"memorystream": "^0.3.1",
"minimatch": "^3.0.4",
"pidtree": "^0.3.0",
"read-pkg": "^3.0.0",
"shell-quote": "^1.6.1",
"string.prototype.padend": "^3.0.0"
}
},
"object-inspect": {
"version": "1.12.2",
"resolved": "http://npm.dui88.com:80/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
"dev": true
},
"object-keys": {
"version": "1.1.1",
"resolved": "http://npm.dui88.com:80/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
"dev": true
},
"object.assign": {
"version": "4.1.2",
"resolved": "http://npm.dui88.com:80/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"has-symbols": "^1.0.1",
"object-keys": "^1.1.1"
}
},
"parse-json": {
"version": "4.0.0",
"resolved": "http://npm.dui88.com:80/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true,
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
},
"parse-node-version": {
"version": "1.0.1",
"resolved": "http://npm.dui88.com:80/parse-node-version/-/parse-node-version-1.0.1.tgz",
"integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=",
"dev": true
},
"path-key": {
"version": "2.0.1",
"resolved": "http://npm.dui88.com:80/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"path-parse": {
"version": "1.0.7",
"resolved": "http://npm.dui88.com:80/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
"dev": true
},
"path-type": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
"dev": true,
"requires": {
"pify": "^3.0.0"
}
},
"pidtree": {
"version": "0.3.1",
"resolved": "http://npm.dui88.com:80/pidtree/-/pidtree-0.3.1.tgz",
"integrity": "sha1-7wmsLMBTPfHzJQzPLE02aw0SEUo=",
"dev": true
},
"pify": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
},
"prr": {
"version": "1.0.1",
"resolved": "http://npm.dui88.com:80/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true,
"optional": true
},
"read-pkg": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/read-pkg/-/read-pkg-3.0.0.tgz",
"integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
"dev": true,
"requires": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^3.0.0"
}
},
"regexp.prototype.flags": {
"version": "1.4.3",
"resolved": "http://npm.dui88.com:80/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
"integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"functions-have-names": "^1.2.2"
}
},
"resolve": {
"version": "1.22.1",
"resolved": "http://npm.dui88.com:80/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"dev": true,
"requires": {
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "http://npm.dui88.com:80/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"resolved": "http://npm.dui88.com:80/sax/-/sax-1.2.4.tgz",
"integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
"dev": true,
"optional": true
},
"semver": {
"version": "5.7.1",
"resolved": "http://npm.dui88.com:80/semver/-/semver-5.7.1.tgz",
"integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
"dev": true
},
"shebang-command": {
"version": "1.2.0",
"resolved": "http://npm.dui88.com:80/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
"shell-quote": {
"version": "1.7.3",
"resolved": "http://npm.dui88.com:80/shell-quote/-/shell-quote-1.7.3.tgz",
"integrity": "sha1-qkDtrBcERbmkMeF7tiwLiBucQSM=",
"dev": true
},
"side-channel": {
"version": "1.0.4",
"resolved": "http://npm.dui88.com:80/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "http://npm.dui88.com:80/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
"dev": true,
"optional": true
},
"spdx-correct": {
"version": "3.1.1",
"resolved": "http://npm.dui88.com:80/spdx-correct/-/spdx-correct-3.1.1.tgz",
"integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
"version": "2.3.0",
"resolved": "http://npm.dui88.com:80/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
"dev": true
},
"spdx-expression-parse": {
"version": "3.0.1",
"resolved": "http://npm.dui88.com:80/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
"version": "3.0.11",
"resolved": "http://npm.dui88.com:80/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
"integrity": "sha1-UMDYxAoU7Bv0Sbrmmg6kaFqdn5U=",
"dev": true
},
"string.prototype.padend": {
"version": "3.1.3",
"resolved": "http://npm.dui88.com:80/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
"integrity": "sha1-mXpt4SySx8s03IogGmxT2b2IpfE=",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.19.1"
}
},
"string.prototype.trimend": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
"integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
"es-abstract": "^1.19.5"
}
},
"string.prototype.trimstart": {
"version": "1.0.5",
"resolved": "http://npm.dui88.com:80/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
"integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
"es-abstract": "^1.19.5"
}
},
"strip-bom": {
"version": "3.0.0",
"resolved": "http://npm.dui88.com:80/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "http://npm.dui88.com:80/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "http://npm.dui88.com:80/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"tslib": {
"version": "2.4.0",
"resolved": "http://npm.dui88.com:80/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
"dev": true
},
"typescript": {
"version": "4.7.4",
"resolved": "http://npm.dui88.com:80/typescript/-/typescript-4.7.4.tgz",
"integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"dev": true
},
"unbox-primitive": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
"has-symbols": "^1.0.3",
"which-boxed-primitive": "^1.0.2"
}
},
"universalify": {
"version": "2.0.0",
"resolved": "http://npm.dui88.com:80/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=",
"dev": true
},
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "http://npm.dui88.com:80/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
"dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
"which": {
"version": "1.3.1",
"resolved": "http://npm.dui88.com:80/which/-/which-1.3.1.tgz",
"integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"which-boxed-primitive": {
"version": "1.0.2",
"resolved": "http://npm.dui88.com:80/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=",
"dev": true,
"requires": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
"is-number-object": "^1.0.4",
"is-string": "^1.0.5",
"is-symbol": "^1.0.3"
}
}
}
}
{
"name": "@spark/disk-turntable",
"version": "1.0.27",
"main": "dist/bundle.js",
"types": "types/index.d.ts",
"license": "MIT",
"scripts": {
"dev": "npm-run-all -p -r dev:**",
"dev:me": "spark package pack -s src -o test/src/bundle.js -w",
"dev:test": "cd test && npm run dev",
"build": "gr && tsc --outDir 'src-js' -t es2017 -d --declarationDir 'types' --jsx preserve && node scripts/copy-others.js 'src-js'",
"pack": "spark package pack -s src -o dist/bundle.js -p",
"declare": "tsc -d --declarationDir 'types' --emitDeclarationOnly",
"pub": "npm run build && spark package publish -s src"
},
"dependencies": {
"db-react-helper": "^1.0.2"
},
"devDependencies": {
"@types/react": "^16.9.56",
"fs-extra": "^9.0.1",
"less": "^4.1.0",
"npm-run-all": "^4.1.5",
"tslib": "^2.0.1",
"typescript": "^4.1.3"
},
"meta": "{\"id\":\"disk-turntable\",\"name\":\"圆形转盘\",\"type\":0,\"desc\":\"实现了圆形转盘\",\"exports\":[]}"
}
# ${id}
${name}
${desc}
![转盘](http://yun.duiba.com.cn/aurora/assets/c5be7bd36b6c7a525c80ac20ee0fef9313f02277.png)
## Install
`yarn add @spark/${id}`
## Usage
```js
import {DiskTurntable, ${exportIds}} from '@spark/${id}'
```
${exports}
### DiskTurntable
```jsx
//方式一:动态属性渲染样式
<DiskTurntable className='turntable'
options={options}
angleOffset={30}
renderBackground={<span className="bg"/>}
renderStartButton={<span className="start-button" onClick={onClickStartButton}/>}
renderOption={(optionData, index) => {
return <div className="option">
<img className="option-icon" src={optionData.icon}/>
<span className="option-name">{optionData.name}</span>
</div>
}}
/>
//方式二:静态子节点渲染样式
<DiskTurntable className='turntable'
options={options}
angleOffset={30}
>
<span __slot="background" className="bg"/>
<span __slot="startButton" className="start-button" onClick={onClickStartButton}/>
<div __slot="option" className="option">
<img __bind_src="icon" className="option-icon"/>
<span __bind="name" className="option-name"/>
</div>
</DiskTurntable>
```
#### 方式二说明
方式二是将各渲染元素当做子节点传入的,且有`__slot`特殊属性:
* `background` 转盘背景
* `startButton` 开始按钮
* `option` 单个奖项
#### 属性
| 属性 | 类型 | 必填 | 默认 | 描述 |
| :---- |:---- | :---- |:----|:--------------------|
| children | React.ReactChildren | 否 | | 子节点 |
| angleOffset | number | 否 | `0` | 角度偏移量 |
| radian | number | 否 | `120` | 奖项半径 |
| options | any[] | 是 | true | 奖项数组 |
| renderBackground | React.ReactElement | (() => React.ReactElement) | 否 | | 渲染转盘背景 |
| renderStartButton | React.ReactElement | (() => React.ReactElement) | 否 | | 渲染开始按钮 |
| renderOption | React.ReactElement | ((optionData: any, index: number) => React.ReactElement) | 否 | | 渲染单个奖项 |
| didLaunched | () => void | 否 | | 启动时回调 |
| didStop | () => void | 否 | | 停止时回调 |
| className | string | 否 | | 设置样式类 |
| style | CSSProperties | 否 | | 设置内联样式 |
| launchDuration | number | 否 | `3000` | 转盘启动时间 |
| brakingDuration | number | 否 | `3000` | 转盘制动时间,如果不设置则使用启动时间 |
| maxSpeed | number | 否 | `20` | 转动最大角速度 |
#### 方法
`stopAt: (optionIndex: number)=>void`
转盘立刻停驻在指定奖项的索引
`launch: ()=>void`
转盘启动
`braking: (optionIndex: number, options?:{immediately?: boolean, randomOffset?: boolean})=>void`
转盘制动:
> optionIndex: 最终落在奖项的索引
> immediately: 是否立刻停止
> randomOffset: 是否模拟随机角度偏移(效果更加真实)
## Contribute
1. `yarn dev` to develop package
2. `cd test && yarn && yarn dev` to develop test
# disk-turntable
圆形转盘
实现了圆形转盘
![转盘](http://yun.duiba.com.cn/aurora/assets/c5be7bd36b6c7a525c80ac20ee0fef9313f02277.png)
## Install
`yarn add @spark/disk-turntable`
## Usage
```js
import {DiskTurntable, } from '@spark/disk-turntable'
```
### DiskTurntable
```jsx
//方式一:动态属性渲染样式
<DiskTurntable className='turntable'
options={options}
angleOffset={30}
renderBackground={<span className="bg"/>}
renderStartButton={<span className="start-button" onClick={onClickStartButton}/>}
renderOption={(optionData, index) => {
return <div className="option">
<img className="option-icon" src={optionData.icon}/>
<span className="option-name">{optionData.name}</span>
</div>
}}
/>
//方式二:静态子节点渲染样式
<DiskTurntable className='turntable'
options={options}
angleOffset={30}
>
<span __slot="background" className="bg"/>
<span __slot="startButton" className="start-button" onClick={onClickStartButton}/>
<div __slot="option" className="option">
<img __bind_src="icon" className="option-icon"/>
<span __bind="name" className="option-name"/>
</div>
</DiskTurntable>
```
#### 方式二说明
方式二是将各渲染元素当做子节点传入的,且有`__slot`特殊属性:
* `background` 转盘背景
* `startButton` 开始按钮
* `option` 单个奖项
#### 属性
| 属性 | 类型 | 必填 | 默认 | 描述 |
| :---- |:---- | :---- |:----|:--------------------|
| children | React.ReactChildren | 否 | | 子节点 |
| angleOffset | number | 否 | `0` | 角度偏移量 |
| radian | number | 否 | `120` | 奖项半径 |
| options | any[] | 是 | true | 奖项数组 |
| renderBackground | React.ReactElement | (() => React.ReactElement) | 否 | | 渲染转盘背景 |
| renderStartButton | React.ReactElement | (() => React.ReactElement) | 否 | | 渲染开始按钮 |
| renderOption | React.ReactElement | ((optionData: any, index: number) => React.ReactElement) | 否 | | 渲染单个奖项 |
| didLaunched | () => void | 否 | | 启动时回调 |
| didStop | () => void | 否 | | 停止时回调 |
| className | string | 否 | | 设置样式类 |
| style | CSSProperties | 否 | | 设置内联样式 |
| launchDuration | number | 否 | `3000` | 转盘启动时间 |
| brakingDuration | number | 否 | `3000` | 转盘制动时间,如果不设置则使用启动时间 |
| maxSpeed | number | 否 | `20` | 转动最大角速度 |
#### 方法
`stopAt: (optionIndex: number)=>void`
转盘立刻停驻在指定奖项的索引
`launch: ()=>void`
转盘启动
`braking: (optionIndex: number, options?:{immediately?: boolean, randomOffset?: boolean})=>void`
转盘制动:
> optionIndex: 最终落在奖项的索引
> immediately: 是否立刻停止
> randomOffset: 是否模拟随机角度偏移(效果更加真实)
## Contribute
1. `yarn dev` to develop package
2. `cd test && yarn && yarn dev` to develop test
/**
* Created by rockyl on 2021/1/18.
*/
const fs = require('fs-extra')
const path = require('path')
function filter(file) {
let extname = path.extname(file);
return !(extname === '.tsx' || extname === '.ts');
}
fs.copySync('src', process.argv[2], {filter})
/**
* Created by rockyl on 2021/9/10.
*/
const tickDelta = 1000 / 60;
export function useRotate(target, options = {}) {
let _rotating = false;
let _braking = false;
let _brakingPromise;
const [start, stop] = useTick(onTick, {
onStart: () => {
_rotating = true;
},
onStop: () => {
_rotating = false;
},
});
const { launchDuration = 3000, maxSpeed = 20, } = options;
const brakingDuration = options.brakingDuration || launchDuration;
let _stage = 0, _launchTime, _brakingTime, _speed = 0, _rotation, _nextBrakingR, _shouldBraking;
let _didStop;
function launch(force = false) {
if (force || !_rotating) {
_rotating = true;
_rotation = getRotation(target);
_shouldBraking = false;
_launchTime = 0;
_stage = 1;
//console.log('开始启动')
start();
}
}
function braking(toRotation, immediately = false, didStop) {
return new Promise(resolve => {
_didStop = didStop;
_brakingPromise = { resolve };
if (!_rotating || _braking) {
return;
}
if (immediately) {
_braking = false;
stop();
_didStop && _didStop();
}
else {
_braking = true;
_brakingTime = 0;
const t = brakingDuration / tickDelta;
const deltaR = maxSpeed * t + (-maxSpeed / t) / 2 * (t * t); //计算制动的总角度
_nextBrakingR = toRotation - deltaR % 360;
if (_nextBrakingR < 0) {
_nextBrakingR += 360;
}
//console.log(deltaR, _nextBrakingR, deltaR + _nextBrakingR)
_shouldBraking = true;
}
});
}
function stopAt(rotation) {
_rotation = rotation;
_speed = 0;
_stage = 0;
_applyRotation();
}
function onTick(delta, timestamp) {
delta = tickDelta;
switch (_stage) {
case 0: //静止状态
break;
case 1: //启动阶段
_launchTime += delta;
const percentLaunch = Math.min(_launchTime / launchDuration, 1);
if (percentLaunch == 1) {
_stage = 2;
//console.log('达到匀速')
}
_speed = maxSpeed * percentLaunch;
break;
case 2: //匀速阶段
if (_shouldBraking) { //开始制动
const r = _rotation % 360;
//console.log(r)
if (r == _nextBrakingR) {
_stage = 3;
//console.log('开始减速', _rotation)
}
else if (r < _nextBrakingR && r + _speed >= _nextBrakingR) {
_rotation = _nextBrakingR - maxSpeed / 2;
_stage = 3;
//console.log('开始减速', _rotation)
}
}
break;
case 3: //制动阶段
_brakingTime += delta;
const percentBraking = Math.min(_brakingTime / brakingDuration, 1);
if (percentBraking == 1) {
_stage = 0;
_braking = false;
stop();
_brakingPromise && _brakingPromise.resolve();
_brakingPromise = null;
//console.log('停止', _rotation)
_didStop && _didStop();
}
_speed = maxSpeed * (1 - percentBraking);
break;
}
_rotation += _speed;
_applyRotation();
}
function _applyRotation() {
target.style.transform = `rotate(${_rotation}deg)`;
target.style.webkitTransform = `rotate(${_rotation}deg)`;
}
return [launch, braking, stopAt];
}
export function useTick(callback, options = {}) {
let startTs, lastTs, shouldStop;
function start() {
shouldStop = false;
startTs = undefined;
lastTs = undefined;
const { onStart } = options;
onStart && onStart();
requestAnimationFrame(tick);
}
function stop() {
const { onStop } = options;
onStop && onStop();
shouldStop = true;
}
function tick(timestamp) {
if (startTs === undefined) {
startTs = timestamp;
}
const current = timestamp - startTs;
if (lastTs === undefined) {
lastTs = current;
}
const delta = current - lastTs;
lastTs = current;
callback(delta, current);
if (shouldStop) {
shouldStop = false;
}
else {
requestAnimationFrame(tick);
}
}
return [start, stop];
}
export function getRotation(target) {
const st = getComputedStyle(target, null);
const tr = st.getPropertyValue("-webkit-transform") ||
st.getPropertyValue("-moz-transform") ||
st.getPropertyValue("-ms-transform") ||
st.getPropertyValue("-o-transform") ||
st.getPropertyValue("transform") ||
"none";
if (tr === 'none') {
return 0;
}
const values = tr.substring(7, tr.length - 2).split(',');
const a = parseFloat(values[0]);
const b = parseFloat(values[1]);
return Math.round(Math.atan2(b, a) * (180 / Math.PI));
}
/**
* Created by rockyl on 2020/9/19.
*/
import React, { useState, useEffect, useRef, forwardRef, useImperativeHandle, } from "react";
import './index.less';
import { useRotate } from "./helper";
import { compileTemplate, getChildBySlot } from "db-react-helper";
function classes(...classes) {
return classes.join(' ');
}
/**
* 圆形转盘
* @desc 圆形转盘
* @ctype DOM_COMPONENT
*/
function DiskTurntableImpl(props, ref) {
let { renderBackground, renderOption, renderStartButton, } = props;
const { options, angleOffset = 0, radian = 120, className, style, children, launchDuration, brakingDuration, maxSpeed, beforeLaunch, didStop, } = props;
const fanRef = useRef();
const [ctrl, setCtrl] = useState(undefined);
useEffect(() => {
const [launch, braking, stopAt] = useRotate(fanRef.current, { launchDuration, brakingDuration, maxSpeed });
setCtrl({ launch, braking, stopAt });
return function () {
braking(0, true);
};
}, []);
if (!renderBackground) {
const child = getChildBySlot(children, 'background');
if (child) {
renderBackground = child;
}
else {
console.warn(`属性[renderBackground]为空`);
}
}
if (!renderStartButton) {
const child = getChildBySlot(children, 'startButton');
if (child) {
renderStartButton = child;
}
else {
console.warn(`属性[renderStartButton]为空`);
}
}
if (!renderOption) {
const child = getChildBySlot(children, 'option');
if (child) {
renderOption = child;
}
else {
console.warn(`属性[renderOption]为空`);
}
}
const optionCount = options.length;
const perDeg = 360 / optionCount;
useImperativeHandle(ref, () => ({
stopAt(optionIndex) {
let rotation = 360 - (optionIndex * perDeg);
ctrl.stopAt(rotation);
},
launch() {
beforeLaunch && beforeLaunch();
ctrl.launch();
},
async braking(optionIndex, options = {}) {
const { immediately, randomOffset } = options;
let rotation = 360 - (optionIndex * perDeg); // + perDeg / 2
if (randomOffset) {
rotation += (perDeg / 2 - 3) * Math.random() * (Math.random() > 0.5 ? 1 : -1);
}
await ctrl.braking(rotation, immediately, didStop);
},
}), [ctrl]);
function _renderBackground() {
return typeof renderBackground === 'function' ? renderBackground() : renderBackground;
}
function _renderStartButton() {
return typeof renderStartButton === 'function' ? renderStartButton() : renderStartButton;
}
function _renderOption(optionData, index) {
let optionNode;
if (typeof renderOption === 'function') {
optionNode = renderOption(optionData, index);
}
else {
optionNode = compileTemplate(renderOption, optionData, index);
}
return <div key={index} className="tt_option" style={{
transform: `rotate(${perDeg * index + angleOffset}deg)`,
transformOrigin: `center ${radian / 100}rem`
}}>
<div className="tt_option-wrapper">
{optionNode}
</div>
</div>;
}
return <div className={classes('disk-turntable', className)} style={style}>
<div className="tt_wrapper">
<div className={classes('tt_fan')} ref={fanRef}>
<div className={classes('tt_background')}>
{_renderBackground()}
</div>
<div className={classes('tt_options')} style={{ transform: `translateY(-${radian / 100}rem)` }}>
{options.map(_renderOption)}
</div>
</div>
<div className={classes('tt_start-button')}>
{_renderStartButton()}
</div>
</div>
</div>;
}
// @ts-ignore
export const DiskTurntable = forwardRef(DiskTurntableImpl);
.disk-turntable {
position: relative;
float: left;
.tt_wrapper {
position: relative;
.tt_fan {
position: relative;
.tt_background {
position: relative;
> :nth-child(1n) {
position: relative !important;
top: unset !important;
left: unset !important;
display: block !important;
}
}
.tt_options {
position: absolute;
left: 50%;
top: 50%;
.tt_option {
position: absolute;
bottom: 0;
left: 0;
.tt_option-wrapper {
transform: translateX(-50%);
position: absolute;
bottom: 0;
> :nth-child(1n) {
position: relative !important;
top: unset !important;
left: unset !important;
display: block !important;
}
}
}
}
}
.tt_start-button {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
> :nth-child(1n) {
position: relative !important;
top: unset !important;
left: unset !important;
display: block !important;
}
}
}
}
\ No newline at end of file
{
"id": "disk-turntable",
"name": "圆形转盘",
"desc": "实现了圆形转盘",
"externals": {
"db-react-helper": "db-react-helper"
}
}
declare function getMetaConfig(id: string);
declare const PROCESS = 1;
declare const DOM_COMPONENT = 2;
declare const CANVAS_WIDGET = 3;
/**
* Created by rockyl on 2021/9/10.
*/
export interface RotateOptions {
launchDuration?: number //启动时间
brakingDuration?: number //制动时间
maxSpeed?: number //最大角速度
}
const tickDelta = 1000 / 60
export function useRotate(target: HTMLElement, options: RotateOptions = {}): [
() => void,
(toRotation: number, immediately: boolean) => void,
(rotation: number) => void,
] {
let _rotating = false
let _braking = false
let _brakingPromise
const [start, stop] = useTick(onTick, {
onStart: () => {
_rotating = true
},
onStop: () => {
_rotating = false
},
})
const {launchDuration = 3000, maxSpeed = 20,} = options
const brakingDuration = options.brakingDuration || launchDuration
let _stage = 0, _launchTime, _brakingTime, _speed = 0, _rotation, _nextBrakingR, _shouldBraking
let _didStop
function launch(force: boolean = false) {
if (force || !_rotating) {
_rotating = true
_rotation = getRotation(target)
_shouldBraking = false
_launchTime = 0
_stage = 1
//console.log('开始启动')
start()
}
}
function braking(toRotation: number, immediately: boolean = false, didStop?) {
return new Promise(resolve => {
_didStop = didStop
_brakingPromise = {resolve}
if (!_rotating || _braking) {
return
}
if (immediately) {
_braking = false
stop()
_didStop && _didStop()
} else {
_braking = true
_brakingTime = 0
const t = brakingDuration / tickDelta
const deltaR = maxSpeed * t + (-maxSpeed / t) / 2 * (t * t) //计算制动的总角度
_nextBrakingR = toRotation - deltaR % 360
if (_nextBrakingR < 0) {
_nextBrakingR += 360
}
//console.log(deltaR, _nextBrakingR, deltaR + _nextBrakingR)
_shouldBraking = true
}
})
}
function stopAt(rotation) {
_rotation = rotation
_speed = 0
_stage = 0
_applyRotation()
}
function onTick(delta: number, timestamp: number) {
delta = tickDelta
switch (_stage) {
case 0: //静止状态
break
case 1: //启动阶段
_launchTime += delta
const percentLaunch = Math.min(_launchTime / launchDuration, 1)
if (percentLaunch == 1) {
_stage = 2
//console.log('达到匀速')
}
_speed = maxSpeed * percentLaunch
break
case 2: //匀速阶段
if (_shouldBraking) { //开始制动
const r = _rotation % 360
//console.log(r)
if (r == _nextBrakingR) {
_stage = 3
//console.log('开始减速', _rotation)
} else if (r < _nextBrakingR && r + _speed >= _nextBrakingR) {
_rotation = _nextBrakingR - maxSpeed / 2
_stage = 3
//console.log('开始减速', _rotation)
}
}
break
case 3: //制动阶段
_brakingTime += delta
const percentBraking = Math.min(_brakingTime / brakingDuration, 1)
if (percentBraking == 1) {
_stage = 0
_braking = false
stop()
_brakingPromise && _brakingPromise.resolve()
_brakingPromise = null
//console.log('停止', _rotation)
_didStop && _didStop()
}
_speed = maxSpeed * (1 - percentBraking)
break
}
_rotation += _speed
_applyRotation()
}
function _applyRotation() {
target.style.transform = `rotate(${_rotation}deg)`
target.style.webkitTransform = `rotate(${_rotation}deg)`
}
return [launch, braking, stopAt]
}
interface TickOptions {
onStart?: () => void
onStop?: () => void
}
export function useTick(callback: (delta: number, timestamp: number) => void, options: TickOptions = {}) {
let startTs, lastTs, shouldStop
function start() {
shouldStop = false
startTs = undefined
lastTs = undefined
const {onStart} = options
onStart && onStart()
requestAnimationFrame(tick)
}
function stop() {
const {onStop} = options
onStop && onStop()
shouldStop = true
}
function tick(timestamp) {
if (startTs === undefined) {
startTs = timestamp
}
const current = timestamp - startTs
if (lastTs === undefined) {
lastTs = current
}
const delta = current - lastTs
lastTs = current
callback(delta, current)
if (shouldStop) {
shouldStop = false
} else {
requestAnimationFrame(tick)
}
}
return [start, stop]
}
export function getRotation(target: HTMLElement) {
const st = getComputedStyle(target, null)
const tr = st.getPropertyValue("-webkit-transform") ||
st.getPropertyValue("-moz-transform") ||
st.getPropertyValue("-ms-transform") ||
st.getPropertyValue("-o-transform") ||
st.getPropertyValue("transform") ||
"none"
if (tr === 'none') {
return 0
}
const values = tr.substring(7, tr.length - 2).split(',')
const a = parseFloat(values[0])
const b = parseFloat(values[1])
return Math.round(Math.atan2(b, a) * (180 / Math.PI))
}
.disk-turntable {
position: relative;
float: left;
.tt_wrapper {
position: relative;
.tt_fan {
position: relative;
.tt_background {
position: relative;
> :nth-child(1n) {
position: relative !important;
top: unset !important;
left: unset !important;
display: block !important;
}
}
.tt_options {
position: absolute;
left: 50%;
top: 50%;
.tt_option {
position: absolute;
bottom: 0;
left: 0;
.tt_option-wrapper {
transform: translateX(-50%);
position: absolute;
bottom: 0;
> :nth-child(1n) {
position: relative !important;
top: unset !important;
left: unset !important;
display: block !important;
}
}
}
}
}
.tt_start-button {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
> :nth-child(1n) {
position: relative !important;
top: unset !important;
left: unset !important;
display: block !important;
}
}
}
}
\ No newline at end of file
/**
* Created by rockyl on 2020/9/19.
*/
import React, {
FC,
useState,
useEffect,
useRef,
forwardRef,
useImperativeHandle,
ReactElement,
CSSProperties,
} from "react"
import './index.less'
import {RotateOptions, useRotate} from "./helper";
import {compileTemplate, getChildBySlot} from "db-react-helper";
interface DiskTurntableProps extends RotateOptions {
children?: React.ReactElement //子节点
options: any[] //奖项数组
angleOffset?: number //角度偏移量
radian?: number //奖项半径
renderBackground?: React.ReactElement | (() => React.ReactElement) //渲染转盘背景
renderStartButton?: React.ReactElement | (() => React.ReactElement) //渲染开始按钮
renderOption?: React.ReactElement | ((optionData: any, index: number) => React.ReactElement) //渲染单个奖项
beforeLaunch?: () => void //启动时回调
didStop?: () => void //停止时回调
className?: string //设置样式类
style?: CSSProperties //设置内联样式
}
function classes(...classes) {
return classes.join(' ')
}
interface BrakingOptions {
immediately?: boolean
randomOffset?: boolean
}
/**
* 圆形转盘
* @desc 圆形转盘
* @ctype DOM_COMPONENT
*/
function DiskTurntableImpl(props: DiskTurntableProps, ref) {
let {renderBackground, renderOption, renderStartButton,} = props
const {
options, angleOffset = 0, radian = 120,
className,
style,
children,
launchDuration,
brakingDuration,
maxSpeed,
beforeLaunch, didStop,
} = props
const fanRef = useRef()
const [ctrl, setCtrl] = useState(undefined)
useEffect(() => {
const [launch, braking, stopAt] = useRotate(fanRef.current, {launchDuration, brakingDuration, maxSpeed})
setCtrl({launch, braking, stopAt})
return function () {
braking(0, true)
}
}, [])
// TODO 这里是对参入的参数进行兼容性处理
if (!renderBackground) {
const child = getChildBySlot(children, 'background')
if (child) {
renderBackground = child
} else {
console.warn(`属性[renderBackground]为空`)
}
}
if (!renderStartButton) {
const child = getChildBySlot(children, 'startButton')
if (child) {
renderStartButton = child
} else {
console.warn(`属性[renderStartButton]为空`)
}
}
if (!renderOption) {
const child = getChildBySlot(children, 'option')
if (child) {
renderOption = child
} else {
console.warn(`属性[renderOption]为空`)
}
}
const optionCount = options.length
const perDeg = 360 / optionCount // TODO 这里如果除不清 是无线小数改怎么处理
useImperativeHandle(ref, () => ({
stopAt(optionIndex: number) {
let rotation = 360 - (optionIndex * perDeg)
ctrl.stopAt(rotation)
},
launch() {
beforeLaunch && beforeLaunch()
ctrl.launch()
},
async braking(optionIndex: number, options: BrakingOptions = {}) {
const {immediately, randomOffset} = options
let rotation = 360 - (optionIndex * perDeg)// + perDeg / 2
if (randomOffset) {
rotation += (perDeg / 2 - 3) * Math.random() * (Math.random() > 0.5 ? 1 : -1)
}
await ctrl.braking(rotation, immediately, didStop)
},
}), [ctrl])
// TODO 进行函数方式支持
function _renderBackground() {
return typeof renderBackground === 'function' ? renderBackground() : renderBackground
}
function _renderStartButton() {
return typeof renderStartButton === 'function' ? renderStartButton() : renderStartButton
}
function _renderOption(optionData, index) {
let optionNode: ReactElement
if (typeof renderOption === 'function') {
optionNode = renderOption(optionData, index)
} else {
optionNode = compileTemplate(renderOption, optionData, index)
}
return <div key={index} className="tt_option" style={{
transform: `rotate(${perDeg * index + angleOffset}deg)`,
transformOrigin: `center ${radian / 100}rem`
}}>
<div className="tt_option-wrapper">
{optionNode}
</div>
</div>
}
return <div className={classes('disk-turntable', className)} style={style}>
<div className="tt_wrapper">
<div className={classes('tt_fan')} ref={fanRef}>
<div className={classes('tt_background')}>
{_renderBackground()}
</div>
<div className={classes('tt_options')} style={{transform: `translateY(-${radian / 100}rem)`}}>
{options.map(_renderOption)}
</div>
</div>
<div className={classes('tt_start-button')}>
{_renderStartButton()}
</div>
</div>
</div>
}
// @ts-ignore
export const DiskTurntable: FC<DiskTurntableProps> = forwardRef(DiskTurntableImpl)
{
"id": "disk-turntable",
"name": "圆形转盘",
"desc": "实现了圆形转盘",
"externals": {
"db-react-helper": "db-react-helper"
}
}
/src/bundle.js
/src/meta.json
/dist
import MD from 'spark-utils/out/md/index.js';
let appId = CFG.appID;
const dcm = '202.' + CFG.projectId + '.0.0';
const domain = '//embedlog.duiba.com.cn';
let MDList = [
{
ele: `.test-md1`,
data: {
dpm: `${appId}.110.5.1`,
dcm,
domain,
appId
},
once: false
}
];
export default () =>
MD({
show: MDList, // 曝光
click: MDList // 点击
});
const { assets } = require("spark-assets");
const args = process.argv.splice(2);
let argsObj = {
imgmin: false,
imgup: false
}
if (args.length == 1) {
argsObj.imgmin = 'imgmin' == args[0];
argsObj.imgup = 'imgup' == args[0];
} else if (args.length == 2) {
argsObj.imgmin = 'imgmin' == args[0];
argsObj.imgup = 'imgup' == args[1];
}
assets(argsObj)
\ No newline at end of file
exports.SPARK_CONFIG_DIR_KEY = ['OUTPUT_DIR', 'SOURCE_DIR', 'TEMP_DIR', 'ENTRY', 'TEMPLATE']
exports.SPARK_CONFIG = 'sparkrc.js'
//对应项目在线素材存储的cdn配置,用于迭代开发从线上拉取素材到本地
exports.SPARK_CDN_RES_CFG='sparkrescfg.json'
\ No newline at end of file
const loaderUtils = require('loader-utils');
module.exports = function (source) {
const options = loaderUtils.getOptions(this);
let result = source;
if (options.arr) {
options.arr.map(op => {
result = result.replace(op.replaceFrom, op.replaceTo);
})
} else {
result = source.replace(options.replaceFrom, options.replaceTo);
}
return result
};
// 端口是否被占用
exports.getProcessIdOnPort=function(port) {
try {
const execOptions = {
encoding: 'utf8',
stdio: [
'pipe',
'pipe',
'ignore',
],
};
return execSync('lsof -i:' + port + ' -P -t -sTCP:LISTEN', execOptions)
.split('\n')[0]
.trim();
} catch (e) {
return null;
}
}
const childProcessSync=async function(cmd, params, cwd, printLog = true) {
return new Promise((resolve, reject) => {
let proc = childProcess(cmd, params, cwd, printLog);
proc.on('close', (code) => {
if (code === 0) {
resolve(proc['logContent']);
} else {
reject(code);
}
});
});
}
const getGitBranch=async function(cwd) {
try {
const result = await childProcessSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], cwd, false);
if (!result.startsWith('fatal:')) {
return result.trim();
}
} catch (e) {
return undefined;
}
}
const getProjectNameByPackage=function() {
return require(`${process.cwd()}/package.json`).name
}
/**
* 理论上每个项目独一无二的文件夹名字-默认取分支名
* 如果当前未创建分支,取包名+日期
* (实际很多情况是直接clone老项目,包名相同,以防资源被替换,所以用日期加一下)
*/
exports.getCdnFolderName=async function() {
const branch = await getGitBranch(process.cwd());
const date = Date.now();
if (branch) {
return branch + "/" + date;
}
let foldername = getProjectNameByPackage() + "/" + date;
return foldername;
}
\ No newline at end of file
const path = require('path');
const fs = require("fs");
const { SPARK_CONFIG_DIR_KEY, SPARK_CONFIG } = require('./scripts/constant');
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const ProgressBarPlugin = require("progress-bar-webpack-plugin");
module.exports = function (isProd) {
const appPath = process.cwd();
const sparkConfig = require(path.join(appPath, SPARK_CONFIG));
const isEslint = fs.existsSync(`${appPath}/.eslintrc.js`);
const cssReg = /\.(css|less)$/;
// 处理相对路径
SPARK_CONFIG_DIR_KEY.map((key) => {
sparkConfig[key] = path.resolve(appPath, sparkConfig[key]);
});
const stylePlugins = [
require("autoprefixer")({
overrideBrowserslist: ["> 1%", "last 2 versions", "not ie <= 8"],
})
];
if (sparkConfig.PX2REM) {
stylePlugins.push(
require("postcss-px2rem-exclude")({
remUnit: 100, // 注意算法,这是750设计稿,html的font-size按照750比例
exclude: /node_modules/i,
})
);
}
const styleLoader = (cssOptions = {}) => {
return [
{
loader: "style-loader",
},
isProd && {
loader: MiniCssExtractPlugin.loader,
options: {
esModule: false,
},
},
{
loader: "css-loader",
options: {
...cssOptions,
importLoaders: 2, // 如果遇到css里面的 @import 执行后面两个loader。 不然如果import了less,css-loader是解析不了
},
},
{
loader: "postcss-loader",
options: {
sourceMap: isProd,
plugins: stylePlugins,
},
},
{
loader: require.resolve("less-loader"),
options: {
sourceMap: isProd,
},
},
].filter(Boolean);
};
return {
entry: sparkConfig.ENTRY,
mode: isProd ? 'production' : 'development',
devtool: isProd ? "none" : "cheap-module-source-map",
output: {
path: path.resolve(__dirname, sparkConfig.OUTPUT_DIR),
filename: "js/[name].js",
},
resolve: {
extensions: ['.js', '.jsx', '.json'],
alias: {
"@src": path.resolve(__dirname, sparkConfig.SOURCE_DIR),
},
},
module: {
rules: [
// 提前进行eslint, 默认从下往上,通过enforce pre提前
isEslint && {
test: /\.js|jsx$/,
enforce: "pre",
loader: "eslint-loader",
options: {
cache: true,
formatter: require("eslint-friendly-formatter"),
fix: true,
failOnError: true,
configFile: `${appPath}/.eslintrc.js`,
},
include: sparkConfig.SOURCE_DIR,
},
{
test: cssReg,
use: styleLoader(),
//include: sparkConfig.SOURCE_DIR,
},
{
test: /\.(js|jsx)$/,
loader: require.resolve("babel-loader"),
exclude: [path.resolve("node_modules")],
options: {
presets: [
require("@babel/preset-env").default,
require("@babel/preset-react").default
],
plugins: [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": false }],
require("@babel/plugin-transform-runtime").default,
],
sourceType: 'unambiguous'
},
},
{
test: [/\.(jpg|jpeg|png|svg|bmp)$/, /\.(eot|woff2?|ttf|svg)$/],
loader: require.resolve("url-loader"),
options: {
name: "[path][name].[ext]", // name默认是加上hash值。这里做了更改,不让加
outputPath: "images",
limit: 10240, // url-loader处理图片默认是转成base64, 这里配置如果小于10kb转base64,否则使用file-loader打包到images文件夹下
},
},
].filter(Boolean),
},
plugins: [
isProd &&
new MiniCssExtractPlugin({
filename: "styles/[name].[hash].css",
}),
new HtmlWebpackPlugin({
template: sparkConfig.TEMPLATE,
minify: !sparkConfig.UNMINIFY_INDEX && isProd,
}),
new CleanWebpackPlugin({
// cleanOnceBeforeBuildPatterns:['**/*', 'dist'] // 这里不用写 是默认的。 路径会根据output 输出的路径去清除
}),
new ProgressBarPlugin(),
].filter(Boolean),
optimization: {
minimize: false,
minimizer: [
// 替换的js压缩 因为uglifyjs不支持es6语法,
new TerserPlugin({
cache: true,
extractComments: false, // 提取注释
parallel: true, // 多线程
terserOptions: {
compress: {
pure_funcs: ["console.log"],
},
},
}),
// 压缩css
new OptimizeCSSAssetsPlugin({
assetNameRegExp: /\.optimize\.css$/g,
cssProcessor: require("cssnano"),
cssProcessorPluginOptions: {
preset: ["default", { discardComments: { removeAll: true } }],
},
canPrint: true,
}),
],
// 修改文件的ids的形成方式,避免单文件修改,会导致其他文件的hash值变化,影响缓存
moduleIds: "hashed",
splitChunks: {
chunks: "all",
minSize: 30000, //小于这个限制的会打包进Main.js
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10, // 优先级权重,层级 相当于z-index。 谁值越大权会按照谁的规则打包
name: "vendors",
},
},
},
// chunks 映射关系的 list单独从 app.js里提取出来
runtimeChunk: {
name: (entrypoint) => `runtime-${entrypoint.name}`,
},
},
};
}
const { SPARK_CONFIG } = require("./scripts/constant");
const Webpack = require("webpack");
const webpackBaseConfig = require("./webpack.common.config");
const WebpackMerge = require("webpack-merge");
const WebpackDevServer = require("webpack-dev-server");
const opn = require("opn");
const apiMocker = require('mocker-api');
const path = require('path');
const { getProcessIdOnPort } = require("./scripts/utils");
const sparkConfig = require(path.resolve(SPARK_CONFIG));
const webpackDevConfig = function () {
return {
devServer: {
useLocalIp: true,
open: false,
hot: true,
host: "0.0.0.0",
// hotOnly: true
before(app) {
if (sparkConfig.API_MOCK) {
apiMocker(app, path.resolve('./mock/index.js'), {
changeHost: true,
})
}
}
},
plugins: [
// new Webpack.WatchIgnorePlugin([/[\\/]mock[\\/]/]),
new Webpack.HotModuleReplacementPlugin()
]
};
};
const buildDev = async function (config) {
let { port } = config;
return new Promise((resolve, reject) => {
const config = WebpackMerge(webpackBaseConfig(false), webpackDevConfig());
const compiler = Webpack(config);
const devServerOptions = Object.assign({}, config.devServer);
console.log('devServerOptions', devServerOptions);
const server = new WebpackDevServer(compiler, devServerOptions);
if (getProcessIdOnPort(port)) {
reject(`端口 ${port} 已被使用`);
return;
} else {
server.listen(
port || 8088,
"0.0.0.0",
() => {
console.log(`Starting server on http://localhost:${port}`);
opn(`http://localhost:${port || 8088}`);
resolve();
},
(err) => {
if (err) console.error("server linsten err--", err);
reject();
}
);
}
});
};
const args = process.argv.splice(2);
const port = args[0] || 8088
buildDev({
port: Number(port)
})
const path = require("path");
const chalk = require("chalk");
const Webpack = require("webpack");
const WebpackMerge = require("webpack-merge");
const webpackBaseConfig = require("./webpack.common.config");
const { uploadFiles } = require("spark-assets");
const isProd = true;
const { getCdnFolderName } = require("./scripts/utils");
const { SPARK_CONFIG } = require("./scripts/constant");
const webpackProdConfig = function (cdnFolderName, resPathProd) {
return {
output: {
publicPath: `//yun.duiba.com.cn/spark/v2/${cdnFolderName}/`,
filename: isProd ? "js/[name].[contenthash:8].js" : "js/[name].[contenthash:4].js",
},
resolveLoader: {
modules: ['node_modules', path.resolve(__dirname, './scripts/loaders')]
},
module: {
rules: [
{
test: /sparkrc\.js$/,
exclude: [path.resolve("node_modules")],
use: [
{
loader: 'replaceLoader',
options: {
arr: [
{
replaceFrom: /(MOCK_STATUS: true)|(MOCK_STATUS:true)|("MOCK_STATUS": true)|("MOCK_STATUS":true)/,
replaceTo: '"MOCK_STATUS": false'
},
{
replaceFrom: /(RES_PATH:'\/src\/assets\/')|(RES_PATH: '\/src\/assets\/')|("RES_PATH":"\/src\/assets\/")|("RES_PATH": "\/src\/assets\/")/,
replaceTo: `"RES_PATH":"${resPathProd}/"`
}
]
}
}
]
}
]
},
plugins: [
new Webpack.IgnorePlugin(/[\\/]mock[\\/]/)
]
};
};
const buildProd = async function () {
const cdnFolderName = await getCdnFolderName();
const appPath = process.cwd();
const sparkConfig = require(path.join(appPath, SPARK_CONFIG));
const _webpackProdConfig = await webpackProdConfig(cdnFolderName, sparkConfig.RES_PATH_PROD || '');
return new Promise((resolve, reject) => {
const config = WebpackMerge(webpackBaseConfig(isProd), _webpackProdConfig);
const compiler = Webpack(config);
compiler.run(async (error, stats) => {
if (error) {
return reject(error);
}
console.log(
stats.toString({
chunks: false, // 使构建过程更静默无输出
colors: true, // 在控制台展示颜色
})
);
console.log(`${chalk.yellow("打包成功, 等待上传")}\n`);
await uploadFiles(config.output.path, '', cdnFolderName);
resolve();
});
});
};
buildProd();
\ No newline at end of file
/**
* Created by rockyl on 2021/4/19.
*/
module.exports = {
'/drawPrize_1/query.do': {
"code": null,
"data": {
"addLeftCount": 0,
"addTotalSize": 0,
"configFreeSize": 3,
"configJoinSpName": "sp_1",
"configJoinType": 2,
"configJoinValue": 3,
"configLimitSize": 9,
"endTimestamp": null,
"extra": null,
"freeLeftCount": 0,
"joinCount": 0,
"myCreditsOrSpValue": 2,
"options": [
{
"extra": null,
"optionId": "o693fc73e",
"optionImg": null,
"optionName": "游戏x1",
"position": 1,
"prizeId": "sp_1",
"prizeType": 1,
"ruleId": "ru_1",
"sendCount": null,
"url": null,
"userRecordId": null
}
],
"otherLeftCount": 6,
"ruleId": null,
"startTimestamp": null,
"timestamp": 1618828276590
},
"message": null,
"success": true
},
'POST /drawPrize_1/drawPrize.do': {
"code": null,
"data": {
"extra": null,
"options": [
{
"optionId": "o693fc73e",
"optionImg": null,
"optionName": "游戏x1",
"position": null,
"prizeId": "sp_1",
"prizeType": 1,
"ruleId": "ru_1",
"url": "null18519"
}
]
},
"message": null,
"success": true
}
}
const proxy = {
...require('./drawPrize'),
};
module.exports = proxy;
module.exports = {
region: 'oss-cn-hangzhou',
id: 'LTAI4Fw25WcfcGv7FvcHoiHK',
secret: 'NZk1NtT9J5HFaAolNbtQdzTzLLvLYm',
bucket: 'duiba',
output: '/spark/assets/test2',
entry: 'dist',
internal: true,
};
{
"name": "sparkproject-1615778539507",
"version": "1.0.0",
"private": true,
"scripts": {
"dev": "node ./config/webpack.dev.config.js 8090",
"imgmin": "node ./config/scripts/assets/index.js imgmin",
"imgup": "node ./config/scripts/assets/index.js imgup",
"imgminup": "node ./config/scripts/assets/index.js imgmin imgup",
"prod": "node ./config/webpack.prod.config.js",
"build": "node ./config/scripts/assets/index.js imgmin imgup && node ./config/webpack.prod.config.js",
"upload": "ali-oss-publish -c oss.config.js",
"pub-skin": "spark px publish",
"release": "yarn prod && yarn upload && yarn pub-skin"
},
"dependencies": {
"@spark/api-base": "^2.0.7",
"@spark/projectx": "^2.0.5",
"@spark/ui": "^2.0.28",
"@spark/utils": "^2.0.17",
"axios": "^0.19.2",
"css-loader": "^3.6.0",
"duiba-utils": "^1.0.2",
"history": "^4.10.1",
"mobx-react": "^7.1.0",
"moment": "^2.29.1",
"postcss-loader": "^3.0.0",
"prettier": "^2.0.5",
"qs": "^6.9.4",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-redux": "^5.0.7",
"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",
"redux": "^4.0.0",
"redux-thunk": "^2.3.0",
"spark-utils": "^0.0.12",
"style-loader": "^1.2.1"
},
"devDependencies": {
"@babel/core": "^7.12.10",
"@babel/plugin-proposal-decorators": "^7.13.5",
"@babel/plugin-transform-runtime": "^7.12.10",
"@babel/preset-env": "^7.12.11",
"@babel/preset-react": "^7.12.10",
"autoprefixer": "^9.8.6",
"babel-loader": "^8.2.2",
"chalk": "^4.1.0",
"clean-webpack-plugin": "^3.0.0",
"eslint-loader": "^4.0.2",
"fs-extra": "^9.0.1",
"html-webpack-plugin": "^4.5.1",
"less": "^4.1.0",
"less-loader": "^7.2.1",
"mini-css-extract-plugin": "^1.3.4",
"mocker-api": "^2.7.5",
"mockjs": "^1.1.0",
"optimize-css-assets-webpack-plugin": "^5.0.4",
"postcss-px2rem-exclude": "0.0.6",
"progress-bar-webpack-plugin": "^2.1.0",
"spark-assets": "^1.1.1",
"url-loader": "^4.1.1",
"webpack": "^4.43.0",
"webpack-cli": "^4.3.1",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^4.2.2"
}
}
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<title>抽奖玩法demo</title>
<script src="//yun.duiba.com.cn/js-libs/rem/1.1.3/rem.min.js"></script>
<script src="//yun.duiba.com.cn/h5/lib/zepto.min.js"></script>
<script>
function getApp() {
return {
cloud: {},
cloudName: "clientTemplate2C",
requestType: "mock"
}
}
var CFG = CFG || {};
CFG.projectId = location.pathname.split('/')[2] || '1';
function getUrlParam(name) {
var search = window.location.search;
var matched = search
.slice(1)
.match(new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'));
return search.length ? matched && matched[2] : null;
}
CFG.appID = '${APPID}';
if (!getUrlParam("appID")) {
//alert("【警告】检测到活动url中没有appID参数\n缺少该参数会导致埋点、分享、app信息获取错误。")
}
</script>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
{
"skinFile": "dist/index.html",
"skinName": "抽奖玩法预设测试",
"envs": {
"dev": {
"projectId": "pe6bda11c",
"skinId": "preset-drawPrize",
"skinType": "2"
}
}
}
module.exports ={
"OUTPUT_DIR": "dist",
"SOURCE_DIR": "src",
"TEMP_DIR": "./.temp",
"ENTRY": "src/app.jsx",
"TEMPLATE": "./public/index.html",
"API_MOCK": true,
"PX2REM": true,
"IMAGE_Q1": 0.6,
"IMAGE_Q2": 0.8,
"RES_PATH": "/src/assets/",
"RES_PATH_PROD": "//yun.duiba.com.cn/spark/v2/sparkproject-1615778539507/1655691357512"
}
\ No newline at end of file
{"assetsPathArr":[]}
\ No newline at end of file
import React, {Component} from "react";
import ReactDOM from "react-dom";
import "./App.less";
import Test from "./Test";
ReactDOM.render(<Test/>, document.getElementById("root"))
* {
margin: 0;
padding: 0;
}
html,
body {
font-size: 24px;
width: 100%;
height: 100%;
-webkit-text-size-adjust: 100% !important;
text-size-adjust: 100% !important;
-moz-text-size-adjust: 100% !important;
}
import React, {useState, useRef, useEffect} from 'react'
import './Test.less';
import {DiskTurntable} from "./bundle"
function Test() {
const options = [
{name: '奖项0', icon: '//yun.duiba.com.cn/aurora/assets/2e4adf3d8646ffbd027038cb2c6627a6bca44e44.jpg'},
{name: '奖项1', icon: '//yun.duiba.com.cn/aurora/assets/2e4adf3d8646ffbd027038cb2c6627a6bca44e44.jpg'},
{name: '奖项2', icon: '//yun.duiba.com.cn/aurora/assets/2e4adf3d8646ffbd027038cb2c6627a6bca44e44.jpg'},
{name: '奖项3', icon: '//yun.duiba.com.cn/aurora/assets/2e4adf3d8646ffbd027038cb2c6627a6bca44e44.jpg'},
{name: '奖项4', icon: '//yun.duiba.com.cn/aurora/assets/2e4adf3d8646ffbd027038cb2c6627a6bca44e44.jpg'},
{name: '奖项5', icon: '//yun.duiba.com.cn/aurora/assets/2e4adf3d8646ffbd027038cb2c6627a6bca44e44.jpg'},
]
const ttRef = useRef()
useEffect(()=>{
setTimeout(()=>{
//ttRef.current.stopAt(3)
}, 1000)
}, [])
async function onClickStartButton() {
ttRef.current.launch()
const index = await fetchApi()
ttRef.current.braking(index, {randomOffset: false})
}
function fetchApi() {
return new Promise(resolve => {
setTimeout(() => {
resolve(5)
}, 1000)
})
}
return (
<div className="App">
<DiskTurntable className='turntable'
ref={ttRef}
options={options}
angleOffset={0}
radian={120}
launchDuration={1000}
brakingDuration={1000}
maxSpeed={10}
renderBackground={<span className="bg"/>}
renderStartButton={<span className="start-button" onClick={onClickStartButton}/>}
renderOption={(optionData, index) => {
return <div className="option">
<img className="option-icon" src={optionData.icon}/>
<span className="option-name">{optionData.name}</span>
</div>
}}
>
{/*<span __slot="background" className="bg"/>
<span __slot="startButton" className="start-button" onClick={onClickStartButton}/>
<div __slot="option" className="option">
<img __bind_src="icon" className="option-icon"/>
<span __bind="name" className="option-name"/>
</div>*/}
</DiskTurntable>
</div>
)
}
export default Test;
.App {
.turntable {
.bg {
width: 628px;
height: 628px;
left: 0px;
top: 0px;
position: absolute;
transform: rotate(30deg);
background: url("//yun.duiba.com.cn/aurora/assets/55c62b3e0cd72a22853ceaf8e8cc0f1f194917d0.png") no-repeat top left / 100% 100%;
}
.start-button {
width: 166px;
height: 203px;
left: 232px;
top: 185px;
position: absolute;
background: url("//yun.duiba.com.cn/aurora/assets/ecf139095f2d389264440fcbbc7a167655e0819c.png") no-repeat top left / 100% 100%;
}
.option {
width: 120px;
height: 140px;
position: absolute;
top: 62px;
left: 254px;
.option-icon {
position: absolute;
left: 10px;
width: 80px;
height: 80px;
}
.option-name {
position: absolute;
left: 0;
top: 80px;
display: block;
width: 100px;
height: 20px;
text-align: center;
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"compilerOptions": {
"module": "ES6",
"target": "ES5",
"jsx": "react",
"allowJs": true,
"moduleResolution": "Node",
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"lib": [
"ES2015",
"DOM"
]
},
"include": ["src"]
}
/**
* Created by rockyl on 2021/9/10.
*/
export interface RotateOptions {
launchDuration?: number;
brakingDuration?: number;
maxSpeed?: number;
}
export declare function useRotate(target: HTMLElement, options?: RotateOptions): [
() => void,
(toRotation: number, immediately: boolean) => void,
(rotation: number) => void
];
interface TickOptions {
onStart?: () => void;
onStop?: () => void;
}
export declare function useTick(callback: (delta: number, timestamp: number) => void, options?: TickOptions): (() => void)[];
export declare function getRotation(target: HTMLElement): number;
export {};
/**
* Created by rockyl on 2020/9/19.
*/
import React, { FC, CSSProperties } from "react";
import './index.less';
import { RotateOptions } from "./helper";
interface DiskTurntableProps extends RotateOptions {
children?: React.ReactElement;
options: any[];
angleOffset?: number;
radian?: number;
renderBackground?: React.ReactElement | (() => React.ReactElement);
renderStartButton?: React.ReactElement | (() => React.ReactElement);
renderOption?: React.ReactElement | ((optionData: any, index: number) => React.ReactElement);
beforeLaunch?: () => void;
didStop?: () => void;
className?: string;
style?: CSSProperties;
}
export declare const DiskTurntable: FC<DiskTurntableProps>;
export {};
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@types/prop-types@*":
"integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
"resolved" "http://npm.dui88.com:80/@types%2fprop-types/-/prop-types-15.7.5.tgz"
"version" "15.7.5"
"@types/react@^16.9.56":
"integrity" "sha512-83zBE6+XUVXsdL3iFzOyUewdauaU+KviKCHEGOgSW52coAuqW7tEKQM0E9+ZC0Zk6TELQ2/JgogPvp7FavzFwg=="
"resolved" "http://npm.dui88.com:80/@types%2freact/-/react-16.14.28.tgz"
"version" "16.14.28"
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
"csstype" "^3.0.2"
"@types/scheduler@*":
"integrity" "sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk="
"resolved" "http://npm.dui88.com:80/@types%2fscheduler/-/scheduler-0.16.2.tgz"
"version" "0.16.2"
"ansi-styles@^3.2.1":
"integrity" "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0="
"resolved" "http://npm.dui88.com:80/ansi-styles/-/ansi-styles-3.2.1.tgz"
"version" "3.2.1"
dependencies:
"color-convert" "^1.9.0"
"at-least-node@^1.0.0":
"integrity" "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI="
"resolved" "http://npm.dui88.com:80/at-least-node/-/at-least-node-1.0.0.tgz"
"version" "1.0.0"
"balanced-match@^1.0.0":
"integrity" "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4="
"resolved" "http://npm.dui88.com:80/balanced-match/-/balanced-match-1.0.2.tgz"
"version" "1.0.2"
"brace-expansion@^1.1.7":
"integrity" "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0="
"resolved" "http://npm.dui88.com:80/brace-expansion/-/brace-expansion-1.1.11.tgz"
"version" "1.1.11"
dependencies:
"balanced-match" "^1.0.0"
"concat-map" "0.0.1"
"call-bind@^1.0.0", "call-bind@^1.0.2":
"integrity" "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw="
"resolved" "http://npm.dui88.com:80/call-bind/-/call-bind-1.0.2.tgz"
"version" "1.0.2"
dependencies:
"function-bind" "^1.1.1"
"get-intrinsic" "^1.0.2"
"chalk@^2.4.1":
"integrity" "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ="
"resolved" "http://npm.dui88.com:80/chalk/-/chalk-2.4.2.tgz"
"version" "2.4.2"
dependencies:
"ansi-styles" "^3.2.1"
"escape-string-regexp" "^1.0.5"
"supports-color" "^5.3.0"
"color-convert@^1.9.0":
"integrity" "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg="
"resolved" "http://npm.dui88.com:80/color-convert/-/color-convert-1.9.3.tgz"
"version" "1.9.3"
dependencies:
"color-name" "1.1.3"
"color-name@1.1.3":
"integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
"resolved" "http://npm.dui88.com:80/color-name/-/color-name-1.1.3.tgz"
"version" "1.1.3"
"concat-map@0.0.1":
"integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
"resolved" "http://npm.dui88.com:80/concat-map/-/concat-map-0.0.1.tgz"
"version" "0.0.1"
"copy-anything@^2.0.1":
"integrity" "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw=="
"resolved" "http://npm.dui88.com:80/copy-anything/-/copy-anything-2.0.6.tgz"
"version" "2.0.6"
dependencies:
"is-what" "^3.14.1"
"cross-spawn@^6.0.5":
"integrity" "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q="
"resolved" "http://npm.dui88.com:80/cross-spawn/-/cross-spawn-6.0.5.tgz"
"version" "6.0.5"
dependencies:
"nice-try" "^1.0.4"
"path-key" "^2.0.1"
"semver" "^5.5.0"
"shebang-command" "^1.2.0"
"which" "^1.2.9"
"csstype@^3.0.2":
"integrity" "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
"resolved" "http://npm.dui88.com:80/csstype/-/csstype-3.1.0.tgz"
"version" "3.1.0"
"db-react-helper@^1.0.2":
"integrity" "sha512-J4+DXr/Ah7t+/j96m73WzJ26VUfHzE5MxWj7kS62SV7iKCb5LTTcngWvn4jmpQnF54WAkhOjBt8sY6B+RkDPPA=="
"resolved" "http://npm.dui88.com:80/db-react-helper/-/db-react-helper-1.0.5.tgz"
"version" "1.0.5"
"debug@^3.2.6":
"integrity" "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o="
"resolved" "http://npm.dui88.com:80/debug/-/debug-3.2.7.tgz"
"version" "3.2.7"
dependencies:
"ms" "^2.1.1"
"define-properties@^1.1.3", "define-properties@^1.1.4":
"integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA=="
"resolved" "http://npm.dui88.com:80/define-properties/-/define-properties-1.1.4.tgz"
"version" "1.1.4"
dependencies:
"has-property-descriptors" "^1.0.0"
"object-keys" "^1.1.1"
"errno@^0.1.1":
"integrity" "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8="
"resolved" "http://npm.dui88.com:80/errno/-/errno-0.1.8.tgz"
"version" "0.1.8"
dependencies:
"prr" "~1.0.1"
"error-ex@^1.3.1":
"integrity" "sha1-tKxAZIEH/c3PriQvQovqihTU8b8="
"resolved" "http://npm.dui88.com:80/error-ex/-/error-ex-1.3.2.tgz"
"version" "1.3.2"
dependencies:
"is-arrayish" "^0.2.1"
"es-abstract@^1.19.0", "es-abstract@^1.19.1", "es-abstract@^1.19.5":
"integrity" "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA=="
"resolved" "http://npm.dui88.com:80/es-abstract/-/es-abstract-1.20.1.tgz"
"version" "1.20.1"
dependencies:
"call-bind" "^1.0.2"
"es-to-primitive" "^1.2.1"
"function-bind" "^1.1.1"
"function.prototype.name" "^1.1.5"
"get-intrinsic" "^1.1.1"
"get-symbol-description" "^1.0.0"
"has" "^1.0.3"
"has-property-descriptors" "^1.0.0"
"has-symbols" "^1.0.3"
"internal-slot" "^1.0.3"
"is-callable" "^1.2.4"
"is-negative-zero" "^2.0.2"
"is-regex" "^1.1.4"
"is-shared-array-buffer" "^1.0.2"
"is-string" "^1.0.7"
"is-weakref" "^1.0.2"
"object-inspect" "^1.12.0"
"object-keys" "^1.1.1"
"object.assign" "^4.1.2"
"regexp.prototype.flags" "^1.4.3"
"string.prototype.trimend" "^1.0.5"
"string.prototype.trimstart" "^1.0.5"
"unbox-primitive" "^1.0.2"
"es-to-primitive@^1.2.1":
"integrity" "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo="
"resolved" "http://npm.dui88.com:80/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
"version" "1.2.1"
dependencies:
"is-callable" "^1.1.4"
"is-date-object" "^1.0.1"
"is-symbol" "^1.0.2"
"escape-string-regexp@^1.0.5":
"integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
"resolved" "http://npm.dui88.com:80/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
"version" "1.0.5"
"fs-extra@^9.0.1":
"integrity" "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0="
"resolved" "http://npm.dui88.com:80/fs-extra/-/fs-extra-9.1.0.tgz"
"version" "9.1.0"
dependencies:
"at-least-node" "^1.0.0"
"graceful-fs" "^4.2.0"
"jsonfile" "^6.0.1"
"universalify" "^2.0.0"
"function-bind@^1.1.1":
"integrity" "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
"resolved" "http://npm.dui88.com:80/function-bind/-/function-bind-1.1.1.tgz"
"version" "1.1.1"
"function.prototype.name@^1.1.5":
"integrity" "sha1-zOBQX+H/uAUD5vnkbMZORqEqliE="
"resolved" "http://npm.dui88.com:80/function.prototype.name/-/function.prototype.name-1.1.5.tgz"
"version" "1.1.5"
dependencies:
"call-bind" "^1.0.2"
"define-properties" "^1.1.3"
"es-abstract" "^1.19.0"
"functions-have-names" "^1.2.2"
"functions-have-names@^1.2.2":
"integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
"resolved" "http://npm.dui88.com:80/functions-have-names/-/functions-have-names-1.2.3.tgz"
"version" "1.2.3"
"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1":
"integrity" "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA=="
"resolved" "http://npm.dui88.com:80/get-intrinsic/-/get-intrinsic-1.1.2.tgz"
"version" "1.1.2"
dependencies:
"function-bind" "^1.1.1"
"has" "^1.0.3"
"has-symbols" "^1.0.3"
"get-symbol-description@^1.0.0":
"integrity" "sha1-f9uByQAQH71WTdXxowr1qtweWNY="
"resolved" "http://npm.dui88.com:80/get-symbol-description/-/get-symbol-description-1.0.0.tgz"
"version" "1.0.0"
dependencies:
"call-bind" "^1.0.2"
"get-intrinsic" "^1.1.1"
"graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0":
"integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
"resolved" "http://npm.dui88.com:80/graceful-fs/-/graceful-fs-4.2.10.tgz"
"version" "4.2.10"
"has-bigints@^1.0.1", "has-bigints@^1.0.2":
"integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
"resolved" "http://npm.dui88.com:80/has-bigints/-/has-bigints-1.0.2.tgz"
"version" "1.0.2"
"has-flag@^3.0.0":
"integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
"resolved" "http://npm.dui88.com:80/has-flag/-/has-flag-3.0.0.tgz"
"version" "3.0.0"
"has-property-descriptors@^1.0.0":
"integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ=="
"resolved" "http://npm.dui88.com:80/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz"
"version" "1.0.0"
dependencies:
"get-intrinsic" "^1.1.1"
"has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3":
"integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
"resolved" "http://npm.dui88.com:80/has-symbols/-/has-symbols-1.0.3.tgz"
"version" "1.0.3"
"has-tostringtag@^1.0.0":
"integrity" "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU="
"resolved" "http://npm.dui88.com:80/has-tostringtag/-/has-tostringtag-1.0.0.tgz"
"version" "1.0.0"
dependencies:
"has-symbols" "^1.0.2"
"has@^1.0.3":
"integrity" "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y="
"resolved" "http://npm.dui88.com:80/has/-/has-1.0.3.tgz"
"version" "1.0.3"
dependencies:
"function-bind" "^1.1.1"
"hosted-git-info@^2.1.4":
"integrity" "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k="
"resolved" "http://npm.dui88.com:80/hosted-git-info/-/hosted-git-info-2.8.9.tgz"
"version" "2.8.9"
"iconv-lite@^0.6.3":
"integrity" "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE="
"resolved" "http://npm.dui88.com:80/iconv-lite/-/iconv-lite-0.6.3.tgz"
"version" "0.6.3"
dependencies:
"safer-buffer" ">= 2.1.2 < 3.0.0"
"image-size@~0.5.0":
"integrity" "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w="
"resolved" "http://npm.dui88.com:80/image-size/-/image-size-0.5.5.tgz"
"version" "0.5.5"
"internal-slot@^1.0.3":
"integrity" "sha1-c0fjB97uovqsKsYgXUvH00ln9Zw="
"resolved" "http://npm.dui88.com:80/internal-slot/-/internal-slot-1.0.3.tgz"
"version" "1.0.3"
dependencies:
"get-intrinsic" "^1.1.0"
"has" "^1.0.3"
"side-channel" "^1.0.4"
"is-arrayish@^0.2.1":
"integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
"resolved" "http://npm.dui88.com:80/is-arrayish/-/is-arrayish-0.2.1.tgz"
"version" "0.2.1"
"is-bigint@^1.0.1":
"integrity" "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM="
"resolved" "http://npm.dui88.com:80/is-bigint/-/is-bigint-1.0.4.tgz"
"version" "1.0.4"
dependencies:
"has-bigints" "^1.0.1"
"is-boolean-object@^1.1.0":
"integrity" "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk="
"resolved" "http://npm.dui88.com:80/is-boolean-object/-/is-boolean-object-1.1.2.tgz"
"version" "1.1.2"
dependencies:
"call-bind" "^1.0.2"
"has-tostringtag" "^1.0.0"
"is-callable@^1.1.4", "is-callable@^1.2.4":
"integrity" "sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU="
"resolved" "http://npm.dui88.com:80/is-callable/-/is-callable-1.2.4.tgz"
"version" "1.2.4"
"is-core-module@^2.9.0":
"integrity" "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A=="
"resolved" "http://npm.dui88.com:80/is-core-module/-/is-core-module-2.9.0.tgz"
"version" "2.9.0"
dependencies:
"has" "^1.0.3"
"is-date-object@^1.0.1":
"integrity" "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8="
"resolved" "http://npm.dui88.com:80/is-date-object/-/is-date-object-1.0.5.tgz"
"version" "1.0.5"
dependencies:
"has-tostringtag" "^1.0.0"
"is-negative-zero@^2.0.2":
"integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
"resolved" "http://npm.dui88.com:80/is-negative-zero/-/is-negative-zero-2.0.2.tgz"
"version" "2.0.2"
"is-number-object@^1.0.4":
"integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="
"resolved" "http://npm.dui88.com:80/is-number-object/-/is-number-object-1.0.7.tgz"
"version" "1.0.7"
dependencies:
"has-tostringtag" "^1.0.0"
"is-regex@^1.1.4":
"integrity" "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg="
"resolved" "http://npm.dui88.com:80/is-regex/-/is-regex-1.1.4.tgz"
"version" "1.1.4"
dependencies:
"call-bind" "^1.0.2"
"has-tostringtag" "^1.0.0"
"is-shared-array-buffer@^1.0.2":
"integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA=="
"resolved" "http://npm.dui88.com:80/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz"
"version" "1.0.2"
dependencies:
"call-bind" "^1.0.2"
"is-string@^1.0.5", "is-string@^1.0.7":
"integrity" "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0="
"resolved" "http://npm.dui88.com:80/is-string/-/is-string-1.0.7.tgz"
"version" "1.0.7"
dependencies:
"has-tostringtag" "^1.0.0"
"is-symbol@^1.0.2", "is-symbol@^1.0.3":
"integrity" "sha1-ptrJO2NbBjymhyI23oiRClevE5w="
"resolved" "http://npm.dui88.com:80/is-symbol/-/is-symbol-1.0.4.tgz"
"version" "1.0.4"
dependencies:
"has-symbols" "^1.0.2"
"is-weakref@^1.0.2":
"integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="
"resolved" "http://npm.dui88.com:80/is-weakref/-/is-weakref-1.0.2.tgz"
"version" "1.0.2"
dependencies:
"call-bind" "^1.0.2"
"is-what@^3.14.1":
"integrity" "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE="
"resolved" "http://npm.dui88.com:80/is-what/-/is-what-3.14.1.tgz"
"version" "3.14.1"
"isexe@^2.0.0":
"integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
"resolved" "http://npm.dui88.com:80/isexe/-/isexe-2.0.0.tgz"
"version" "2.0.0"
"json-parse-better-errors@^1.0.1":
"integrity" "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk="
"resolved" "http://npm.dui88.com:80/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"
"version" "1.0.2"
"jsonfile@^6.0.1":
"integrity" "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4="
"resolved" "http://npm.dui88.com:80/jsonfile/-/jsonfile-6.1.0.tgz"
"version" "6.1.0"
dependencies:
"universalify" "^2.0.0"
optionalDependencies:
"graceful-fs" "^4.1.6"
"less@^4.1.0":
"integrity" "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA=="
"resolved" "http://npm.dui88.com:80/less/-/less-4.1.3.tgz"
"version" "4.1.3"
dependencies:
"copy-anything" "^2.0.1"
"parse-node-version" "^1.0.1"
"tslib" "^2.3.0"
optionalDependencies:
"errno" "^0.1.1"
"graceful-fs" "^4.1.2"
"image-size" "~0.5.0"
"make-dir" "^2.1.0"
"mime" "^1.4.1"
"needle" "^3.1.0"
"source-map" "~0.6.0"
"load-json-file@^4.0.0":
"integrity" "sha1-L19Fq5HjMhYjT9U62rZo607AmTs="
"resolved" "http://npm.dui88.com:80/load-json-file/-/load-json-file-4.0.0.tgz"
"version" "4.0.0"
dependencies:
"graceful-fs" "^4.1.2"
"parse-json" "^4.0.0"
"pify" "^3.0.0"
"strip-bom" "^3.0.0"
"make-dir@^2.1.0":
"integrity" "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU="
"resolved" "http://npm.dui88.com:80/make-dir/-/make-dir-2.1.0.tgz"
"version" "2.1.0"
dependencies:
"pify" "^4.0.1"
"semver" "^5.6.0"
"memorystream@^0.3.1":
"integrity" "sha1-htcJCzDORV1j+64S3aUaR93K+bI="
"resolved" "http://npm.dui88.com:80/memorystream/-/memorystream-0.3.1.tgz"
"version" "0.3.1"
"mime@^1.4.1":
"integrity" "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE="
"resolved" "http://npm.dui88.com:80/mime/-/mime-1.6.0.tgz"
"version" "1.6.0"
"minimatch@^3.0.4":
"integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="
"resolved" "http://npm.dui88.com:80/minimatch/-/minimatch-3.1.2.tgz"
"version" "3.1.2"
dependencies:
"brace-expansion" "^1.1.7"
"ms@^2.1.1":
"integrity" "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI="
"resolved" "http://npm.dui88.com:80/ms/-/ms-2.1.3.tgz"
"version" "2.1.3"
"needle@^3.1.0":
"integrity" "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw=="
"resolved" "http://npm.dui88.com:80/needle/-/needle-3.1.0.tgz"
"version" "3.1.0"
dependencies:
"debug" "^3.2.6"
"iconv-lite" "^0.6.3"
"sax" "^1.2.4"
"nice-try@^1.0.4":
"integrity" "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y="
"resolved" "http://npm.dui88.com:80/nice-try/-/nice-try-1.0.5.tgz"
"version" "1.0.5"
"normalize-package-data@^2.3.2":
"integrity" "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg="
"resolved" "http://npm.dui88.com:80/normalize-package-data/-/normalize-package-data-2.5.0.tgz"
"version" "2.5.0"
dependencies:
"hosted-git-info" "^2.1.4"
"resolve" "^1.10.0"
"semver" "2 || 3 || 4 || 5"
"validate-npm-package-license" "^3.0.1"
"npm-run-all@^4.1.5":
"integrity" "sha1-BEdiAqFe4OLiFAgIYb/xKlHZj7o="
"resolved" "http://npm.dui88.com:80/npm-run-all/-/npm-run-all-4.1.5.tgz"
"version" "4.1.5"
dependencies:
"ansi-styles" "^3.2.1"
"chalk" "^2.4.1"
"cross-spawn" "^6.0.5"
"memorystream" "^0.3.1"
"minimatch" "^3.0.4"
"pidtree" "^0.3.0"
"read-pkg" "^3.0.0"
"shell-quote" "^1.6.1"
"string.prototype.padend" "^3.0.0"
"object-inspect@^1.12.0", "object-inspect@^1.9.0":
"integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
"resolved" "http://npm.dui88.com:80/object-inspect/-/object-inspect-1.12.2.tgz"
"version" "1.12.2"
"object-keys@^1.1.1":
"integrity" "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
"resolved" "http://npm.dui88.com:80/object-keys/-/object-keys-1.1.1.tgz"
"version" "1.1.1"
"object.assign@^4.1.2":
"integrity" "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA="
"resolved" "http://npm.dui88.com:80/object.assign/-/object.assign-4.1.2.tgz"
"version" "4.1.2"
dependencies:
"call-bind" "^1.0.0"
"define-properties" "^1.1.3"
"has-symbols" "^1.0.1"
"object-keys" "^1.1.1"
"parse-json@^4.0.0":
"integrity" "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA="
"resolved" "http://npm.dui88.com:80/parse-json/-/parse-json-4.0.0.tgz"
"version" "4.0.0"
dependencies:
"error-ex" "^1.3.1"
"json-parse-better-errors" "^1.0.1"
"parse-node-version@^1.0.1":
"integrity" "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs="
"resolved" "http://npm.dui88.com:80/parse-node-version/-/parse-node-version-1.0.1.tgz"
"version" "1.0.1"
"path-key@^2.0.1":
"integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
"resolved" "http://npm.dui88.com:80/path-key/-/path-key-2.0.1.tgz"
"version" "2.0.1"
"path-parse@^1.0.7":
"integrity" "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU="
"resolved" "http://npm.dui88.com:80/path-parse/-/path-parse-1.0.7.tgz"
"version" "1.0.7"
"path-type@^3.0.0":
"integrity" "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428="
"resolved" "http://npm.dui88.com:80/path-type/-/path-type-3.0.0.tgz"
"version" "3.0.0"
dependencies:
"pify" "^3.0.0"
"pidtree@^0.3.0":
"integrity" "sha1-7wmsLMBTPfHzJQzPLE02aw0SEUo="
"resolved" "http://npm.dui88.com:80/pidtree/-/pidtree-0.3.1.tgz"
"version" "0.3.1"
"pify@^3.0.0":
"integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
"resolved" "http://npm.dui88.com:80/pify/-/pify-3.0.0.tgz"
"version" "3.0.0"
"pify@^4.0.1":
"integrity" "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE="
"resolved" "http://npm.dui88.com:80/pify/-/pify-4.0.1.tgz"
"version" "4.0.1"
"prr@~1.0.1":
"integrity" "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
"resolved" "http://npm.dui88.com:80/prr/-/prr-1.0.1.tgz"
"version" "1.0.1"
"read-pkg@^3.0.0":
"integrity" "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k="
"resolved" "http://npm.dui88.com:80/read-pkg/-/read-pkg-3.0.0.tgz"
"version" "3.0.0"
dependencies:
"load-json-file" "^4.0.0"
"normalize-package-data" "^2.3.2"
"path-type" "^3.0.0"
"regexp.prototype.flags@^1.4.3":
"integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA=="
"resolved" "http://npm.dui88.com:80/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz"
"version" "1.4.3"
dependencies:
"call-bind" "^1.0.2"
"define-properties" "^1.1.3"
"functions-have-names" "^1.2.2"
"resolve@^1.10.0":
"integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw=="
"resolved" "http://npm.dui88.com:80/resolve/-/resolve-1.22.1.tgz"
"version" "1.22.1"
dependencies:
"is-core-module" "^2.9.0"
"path-parse" "^1.0.7"
"supports-preserve-symlinks-flag" "^1.0.0"
"safer-buffer@>= 2.1.2 < 3.0.0":
"integrity" "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
"resolved" "http://npm.dui88.com:80/safer-buffer/-/safer-buffer-2.1.2.tgz"
"version" "2.1.2"
"sax@^1.2.4":
"integrity" "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
"resolved" "http://npm.dui88.com:80/sax/-/sax-1.2.4.tgz"
"version" "1.2.4"
"semver@^5.5.0", "semver@^5.6.0", "semver@2 || 3 || 4 || 5":
"integrity" "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
"resolved" "http://npm.dui88.com:80/semver/-/semver-5.7.1.tgz"
"version" "5.7.1"
"shebang-command@^1.2.0":
"integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo="
"resolved" "http://npm.dui88.com:80/shebang-command/-/shebang-command-1.2.0.tgz"
"version" "1.2.0"
dependencies:
"shebang-regex" "^1.0.0"
"shebang-regex@^1.0.0":
"integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
"resolved" "http://npm.dui88.com:80/shebang-regex/-/shebang-regex-1.0.0.tgz"
"version" "1.0.0"
"shell-quote@^1.6.1":
"integrity" "sha1-qkDtrBcERbmkMeF7tiwLiBucQSM="
"resolved" "http://npm.dui88.com:80/shell-quote/-/shell-quote-1.7.3.tgz"
"version" "1.7.3"
"side-channel@^1.0.4":
"integrity" "sha1-785cj9wQTudRslxY1CkAEfpeos8="
"resolved" "http://npm.dui88.com:80/side-channel/-/side-channel-1.0.4.tgz"
"version" "1.0.4"
dependencies:
"call-bind" "^1.0.0"
"get-intrinsic" "^1.0.2"
"object-inspect" "^1.9.0"
"source-map@~0.6.0":
"integrity" "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
"resolved" "http://npm.dui88.com:80/source-map/-/source-map-0.6.1.tgz"
"version" "0.6.1"
"spdx-correct@^3.0.0":
"integrity" "sha1-3s6BrJweZxPl99G28X1Gj6U9iak="
"resolved" "http://npm.dui88.com:80/spdx-correct/-/spdx-correct-3.1.1.tgz"
"version" "3.1.1"
dependencies:
"spdx-expression-parse" "^3.0.0"
"spdx-license-ids" "^3.0.0"
"spdx-exceptions@^2.1.0":
"integrity" "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0="
"resolved" "http://npm.dui88.com:80/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz"
"version" "2.3.0"
"spdx-expression-parse@^3.0.0":
"integrity" "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk="
"resolved" "http://npm.dui88.com:80/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz"
"version" "3.0.1"
dependencies:
"spdx-exceptions" "^2.1.0"
"spdx-license-ids" "^3.0.0"
"spdx-license-ids@^3.0.0":
"integrity" "sha1-UMDYxAoU7Bv0Sbrmmg6kaFqdn5U="
"resolved" "http://npm.dui88.com:80/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz"
"version" "3.0.11"
"string.prototype.padend@^3.0.0":
"integrity" "sha1-mXpt4SySx8s03IogGmxT2b2IpfE="
"resolved" "http://npm.dui88.com:80/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz"
"version" "3.1.3"
dependencies:
"call-bind" "^1.0.2"
"define-properties" "^1.1.3"
"es-abstract" "^1.19.1"
"string.prototype.trimend@^1.0.5":
"integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog=="
"resolved" "http://npm.dui88.com:80/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz"
"version" "1.0.5"
dependencies:
"call-bind" "^1.0.2"
"define-properties" "^1.1.4"
"es-abstract" "^1.19.5"
"string.prototype.trimstart@^1.0.5":
"integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg=="
"resolved" "http://npm.dui88.com:80/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz"
"version" "1.0.5"
dependencies:
"call-bind" "^1.0.2"
"define-properties" "^1.1.4"
"es-abstract" "^1.19.5"
"strip-bom@^3.0.0":
"integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
"resolved" "http://npm.dui88.com:80/strip-bom/-/strip-bom-3.0.0.tgz"
"version" "3.0.0"
"supports-color@^5.3.0":
"integrity" "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8="
"resolved" "http://npm.dui88.com:80/supports-color/-/supports-color-5.5.0.tgz"
"version" "5.5.0"
dependencies:
"has-flag" "^3.0.0"
"supports-preserve-symlinks-flag@^1.0.0":
"integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
"resolved" "http://npm.dui88.com:80/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
"version" "1.0.0"
"tslib@^2.0.1", "tslib@^2.3.0":
"integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
"resolved" "http://npm.dui88.com:80/tslib/-/tslib-2.4.0.tgz"
"version" "2.4.0"
"typescript@^4.1.3":
"integrity" "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ=="
"resolved" "http://npm.dui88.com:80/typescript/-/typescript-4.7.4.tgz"
"version" "4.7.4"
"unbox-primitive@^1.0.2":
"integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="
"resolved" "http://npm.dui88.com:80/unbox-primitive/-/unbox-primitive-1.0.2.tgz"
"version" "1.0.2"
dependencies:
"call-bind" "^1.0.2"
"has-bigints" "^1.0.2"
"has-symbols" "^1.0.3"
"which-boxed-primitive" "^1.0.2"
"universalify@^2.0.0":
"integrity" "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc="
"resolved" "http://npm.dui88.com:80/universalify/-/universalify-2.0.0.tgz"
"version" "2.0.0"
"validate-npm-package-license@^3.0.1":
"integrity" "sha1-/JH2uce6FchX9MssXe/uw51PQQo="
"resolved" "http://npm.dui88.com:80/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"
"version" "3.0.4"
dependencies:
"spdx-correct" "^3.0.0"
"spdx-expression-parse" "^3.0.0"
"which-boxed-primitive@^1.0.2":
"integrity" "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY="
"resolved" "http://npm.dui88.com:80/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz"
"version" "1.0.2"
dependencies:
"is-bigint" "^1.0.1"
"is-boolean-object" "^1.1.0"
"is-number-object" "^1.0.4"
"is-string" "^1.0.5"
"is-symbol" "^1.0.3"
"which@^1.2.9":
"integrity" "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo="
"resolved" "http://npm.dui88.com:80/which/-/which-1.3.1.tgz"
"version" "1.3.1"
dependencies:
"isexe" "^2.0.0"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment