Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
taobao-mini-template
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
2
Issues
2
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qinhaitao
taobao-mini-template
Commits
6a697143
Commit
6a697143
authored
Jan 20, 2021
by
王波
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
养成类模板提交
parent
c10278bb
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
1970 additions
and
8 deletions
+1970
-8
package-lock.json
v2.0/package-lock.json
+1286
-0
growShare.controller.ts
v2.0/src/controller/growShare.controller.ts
+34
-0
growTask.controller.ts
v2.0/src/controller/growTask.controller.ts
+101
-0
db.ts
v2.0/src/db.ts
+3
-0
registeInfos.ts
v2.0/src/decorator/common/registeInfos.ts
+8
-2
growTask.service.ts
v2.0/src/service/common/growTask.service.ts
+184
-0
index.ts
v2.0/src/service/common/index.ts
+6
-2
index.d.ts
v2.0/src/typings/index.d.ts
+10
-0
checkGrowTaskLimit.ts
v2.0/src/utils/common/check/checkGrowTaskLimit.ts
+53
-0
index.ts
v2.0/src/utils/common/check/index.ts
+5
-2
task.ts
v2.0/src/utils/common/task.ts
+97
-0
index.ts
v2.0/src/utils/common/update/index.ts
+10
-2
updateGrowOrderGoods.ts
v2.0/src/utils/common/update/updateGrowOrderGoods.ts
+146
-0
updateSignGrowTask.ts
v2.0/src/utils/common/update/updateSignGrowTask.ts
+25
-0
index.ts
v2.0/src/utils/index.ts
+2
-0
No files found.
v2.0/package-lock.json
0 → 100644
View file @
6a697143
{
"name"
:
"cloudfn"
,
"version"
:
"1.0.0"
,
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
"@babel/code-frame"
:
{
"version"
:
"7.12.11"
,
"resolved"
:
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz"
,
"integrity"
:
"sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw=="
,
"optional"
:
true
,
"requires"
:
{
"@babel/highlight"
:
"^7.10.4"
}
},
"@babel/helper-validator-identifier"
:
{
"version"
:
"7.12.11"
,
"resolved"
:
"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz"
,
"integrity"
:
"sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
,
"optional"
:
true
},
"@babel/highlight"
:
{
"version"
:
"7.10.4"
,
"resolved"
:
"https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz"
,
"integrity"
:
"sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA=="
,
"optional"
:
true
,
"requires"
:
{
"@babel/helper-validator-identifier"
:
"^7.10.4"
,
"chalk"
:
"^2.0.0"
,
"js-tokens"
:
"^4.0.0"
},
"dependencies"
:
{
"chalk"
:
{
"version"
:
"2.4.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
,
"integrity"
:
"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
,
"optional"
:
true
,
"requires"
:
{
"ansi-styles"
:
"^3.2.1"
,
"escape-string-regexp"
:
"^1.0.5"
,
"supports-color"
:
"^5.3.0"
}
}
}
},
"@eslint/eslintrc"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz"
,
"integrity"
:
"sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg=="
,
"optional"
:
true
,
"requires"
:
{
"ajv"
:
"^6.12.4"
,
"debug"
:
"^4.1.1"
,
"espree"
:
"^7.3.0"
,
"globals"
:
"^12.1.0"
,
"ignore"
:
"^4.0.6"
,
"import-fresh"
:
"^3.2.1"
,
"js-yaml"
:
"^3.13.1"
,
"lodash"
:
"^4.17.20"
,
"minimatch"
:
"^3.0.4"
,
"strip-json-comments"
:
"^3.1.1"
}
},
"@types/bson"
:
{
"version"
:
"4.0.3"
,
"resolved"
:
"https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz"
,
"integrity"
:
"sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw=="
,
"requires"
:
{
"@types/node"
:
"*"
}
},
"@types/eslint-visitor-keys"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz"
,
"integrity"
:
"sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag=="
,
"optional"
:
true
},
"@types/json-schema"
:
{
"version"
:
"7.0.6"
,
"resolved"
:
"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz"
,
"integrity"
:
"sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw=="
,
"optional"
:
true
},
"@types/lodash"
:
{
"version"
:
"4.14.167"
,
"resolved"
:
"https://registry.npmjs.org/@types/lodash/-/lodash-4.14.167.tgz"
,
"integrity"
:
"sha512-w7tQPjARrvdeBkX/Rwg95S592JwxqOjmms3zWQ0XZgSyxSLdzWaYH3vErBhdVS/lRBX7F8aBYcYJYTr5TMGOzw=="
,
"optional"
:
true
},
"@types/mongodb"
:
{
"version"
:
"3.6.3"
,
"resolved"
:
"https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz"
,
"integrity"
:
"sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q=="
,
"requires"
:
{
"@types/bson"
:
"*"
,
"@types/node"
:
"*"
}
},
"@types/node"
:
{
"version"
:
"14.14.21"
,
"resolved"
:
"https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz"
,
"integrity"
:
"sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A=="
},
"@typescript-eslint/eslint-plugin"
:
{
"version"
:
"3.10.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz"
,
"integrity"
:
"sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ=="
,
"optional"
:
true
,
"requires"
:
{
"@typescript-eslint/experimental-utils"
:
"3.10.1"
,
"debug"
:
"^4.1.1"
,
"functional-red-black-tree"
:
"^1.0.1"
,
"regexpp"
:
"^3.0.0"
,
"semver"
:
"^7.3.2"
,
"tsutils"
:
"^3.17.1"
}
},
"@typescript-eslint/experimental-utils"
:
{
"version"
:
"3.10.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz"
,
"integrity"
:
"sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw=="
,
"optional"
:
true
,
"requires"
:
{
"@types/json-schema"
:
"^7.0.3"
,
"@typescript-eslint/types"
:
"3.10.1"
,
"@typescript-eslint/typescript-estree"
:
"3.10.1"
,
"eslint-scope"
:
"^5.0.0"
,
"eslint-utils"
:
"^2.0.0"
}
},
"@typescript-eslint/parser"
:
{
"version"
:
"3.10.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz"
,
"integrity"
:
"sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw=="
,
"optional"
:
true
,
"requires"
:
{
"@types/eslint-visitor-keys"
:
"^1.0.0"
,
"@typescript-eslint/experimental-utils"
:
"3.10.1"
,
"@typescript-eslint/types"
:
"3.10.1"
,
"@typescript-eslint/typescript-estree"
:
"3.10.1"
,
"eslint-visitor-keys"
:
"^1.1.0"
}
},
"@typescript-eslint/types"
:
{
"version"
:
"3.10.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz"
,
"integrity"
:
"sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ=="
,
"optional"
:
true
},
"@typescript-eslint/typescript-estree"
:
{
"version"
:
"3.10.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz"
,
"integrity"
:
"sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w=="
,
"optional"
:
true
,
"requires"
:
{
"@typescript-eslint/types"
:
"3.10.1"
,
"@typescript-eslint/visitor-keys"
:
"3.10.1"
,
"debug"
:
"^4.1.1"
,
"glob"
:
"^7.1.6"
,
"is-glob"
:
"^4.0.1"
,
"lodash"
:
"^4.17.15"
,
"semver"
:
"^7.3.2"
,
"tsutils"
:
"^3.17.1"
}
},
"@typescript-eslint/visitor-keys"
:
{
"version"
:
"3.10.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz"
,
"integrity"
:
"sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ=="
,
"optional"
:
true
,
"requires"
:
{
"eslint-visitor-keys"
:
"^1.1.0"
}
},
"acorn"
:
{
"version"
:
"7.4.1"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
,
"integrity"
:
"sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
,
"optional"
:
true
},
"acorn-jsx"
:
{
"version"
:
"5.3.1"
,
"resolved"
:
"https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz"
,
"integrity"
:
"sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng=="
,
"optional"
:
true
},
"adler-32"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz"
,
"integrity"
:
"sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU="
,
"requires"
:
{
"exit-on-epipe"
:
"~1.0.1"
,
"printj"
:
"~1.1.0"
}
},
"ajv"
:
{
"version"
:
"6.12.6"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
,
"integrity"
:
"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
,
"optional"
:
true
,
"requires"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"fast-json-stable-stringify"
:
"^2.0.0"
,
"json-schema-traverse"
:
"^0.4.1"
,
"uri-js"
:
"^4.2.2"
}
},
"ansi-colors"
:
{
"version"
:
"4.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"
,
"integrity"
:
"sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
,
"optional"
:
true
},
"ansi-regex"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz"
,
"integrity"
:
"sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
,
"optional"
:
true
},
"ansi-styles"
:
{
"version"
:
"3.2.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
,
"integrity"
:
"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
,
"optional"
:
true
,
"requires"
:
{
"color-convert"
:
"^1.9.0"
}
},
"arg"
:
{
"version"
:
"4.1.3"
,
"resolved"
:
"https://registry.npmjs.org/arg/-/arg-4.1.3.tgz"
,
"integrity"
:
"sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
,
"optional"
:
true
},
"argparse"
:
{
"version"
:
"1.0.10"
,
"resolved"
:
"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
,
"integrity"
:
"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="
,
"optional"
:
true
,
"requires"
:
{
"sprintf-js"
:
"~1.0.2"
}
},
"astral-regex"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz"
,
"integrity"
:
"sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
,
"optional"
:
true
},
"balanced-match"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
,
"integrity"
:
"sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
,
"optional"
:
true
},
"brace-expansion"
:
{
"version"
:
"1.1.11"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
,
"integrity"
:
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
,
"optional"
:
true
,
"requires"
:
{
"balanced-match"
:
"^1.0.0"
,
"concat-map"
:
"0.0.1"
}
},
"buffer-from"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"
,
"integrity"
:
"sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"callsites"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
,
"integrity"
:
"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
,
"optional"
:
true
},
"cfb"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz"
,
"integrity"
:
"sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ=="
,
"requires"
:
{
"adler-32"
:
"~1.2.0"
,
"crc-32"
:
"~1.2.0"
,
"printj"
:
"~1.1.2"
}
},
"chalk"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz"
,
"integrity"
:
"sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A=="
,
"optional"
:
true
,
"requires"
:
{
"ansi-styles"
:
"^4.1.0"
,
"supports-color"
:
"^7.1.0"
},
"dependencies"
:
{
"ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"optional"
:
true
,
"requires"
:
{
"color-convert"
:
"^2.0.1"
}
},
"color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"optional"
:
true
,
"requires"
:
{
"color-name"
:
"~1.1.4"
}
},
"color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
,
"optional"
:
true
},
"has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
,
"optional"
:
true
},
"supports-color"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
,
"integrity"
:
"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
,
"optional"
:
true
,
"requires"
:
{
"has-flag"
:
"^4.0.0"
}
}
}
},
"codepage"
:
{
"version"
:
"1.14.0"
,
"resolved"
:
"https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz"
,
"integrity"
:
"sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k="
,
"requires"
:
{
"commander"
:
"~2.14.1"
,
"exit-on-epipe"
:
"~1.0.1"
},
"dependencies"
:
{
"commander"
:
{
"version"
:
"2.14.1"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.14.1.tgz"
,
"integrity"
:
"sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
}
}
},
"color-convert"
:
{
"version"
:
"1.9.3"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
,
"integrity"
:
"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
,
"optional"
:
true
,
"requires"
:
{
"color-name"
:
"1.1.3"
}
},
"color-name"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
,
"integrity"
:
"sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
,
"optional"
:
true
},
"commander"
:
{
"version"
:
"2.17.1"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.17.1.tgz"
,
"integrity"
:
"sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
},
"concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
"integrity"
:
"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
,
"optional"
:
true
},
"crc-32"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz"
,
"integrity"
:
"sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA=="
,
"requires"
:
{
"exit-on-epipe"
:
"~1.0.1"
,
"printj"
:
"~1.1.0"
}
},
"create-require"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz"
,
"integrity"
:
"sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
,
"optional"
:
true
},
"cross-spawn"
:
{
"version"
:
"7.0.3"
,
"resolved"
:
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
,
"integrity"
:
"sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
,
"optional"
:
true
,
"requires"
:
{
"path-key"
:
"^3.1.0"
,
"shebang-command"
:
"^2.0.0"
,
"which"
:
"^2.0.1"
}
},
"dayjs"
:
{
"version"
:
"1.10.3"
,
"resolved"
:
"https://registry.npmjs.org/dayjs/-/dayjs-1.10.3.tgz"
,
"integrity"
:
"sha512-/2fdLN987N8Ki7Id8BUN2nhuiRyxTLumQnSQf9CNncFCyqFsSKb9TNhzRYcC8K8eJSJOKvbvkImo/MKKhNi4iw=="
},
"debug"
:
{
"version"
:
"4.3.1"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"
,
"integrity"
:
"sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="
,
"optional"
:
true
,
"requires"
:
{
"ms"
:
"2.1.2"
}
},
"deep-is"
:
{
"version"
:
"0.1.3"
,
"resolved"
:
"https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
,
"integrity"
:
"sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
,
"optional"
:
true
},
"diff"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
,
"integrity"
:
"sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
,
"optional"
:
true
},
"doctrine"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
,
"integrity"
:
"sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
,
"optional"
:
true
,
"requires"
:
{
"esutils"
:
"^2.0.2"
}
},
"emoji-regex"
:
{
"version"
:
"8.0.0"
,
"resolved"
:
"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
,
"integrity"
:
"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
,
"optional"
:
true
},
"enquirer"
:
{
"version"
:
"2.3.6"
,
"resolved"
:
"https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz"
,
"integrity"
:
"sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="
,
"optional"
:
true
,
"requires"
:
{
"ansi-colors"
:
"^4.1.1"
}
},
"escape-string-regexp"
:
{
"version"
:
"1.0.5"
,
"resolved"
:
"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
,
"integrity"
:
"sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
,
"optional"
:
true
},
"eslint"
:
{
"version"
:
"7.18.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz"
,
"integrity"
:
"sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ=="
,
"optional"
:
true
,
"requires"
:
{
"@babel/code-frame"
:
"^7.0.0"
,
"@eslint/eslintrc"
:
"^0.3.0"
,
"ajv"
:
"^6.10.0"
,
"chalk"
:
"^4.0.0"
,
"cross-spawn"
:
"^7.0.2"
,
"debug"
:
"^4.0.1"
,
"doctrine"
:
"^3.0.0"
,
"enquirer"
:
"^2.3.5"
,
"eslint-scope"
:
"^5.1.1"
,
"eslint-utils"
:
"^2.1.0"
,
"eslint-visitor-keys"
:
"^2.0.0"
,
"espree"
:
"^7.3.1"
,
"esquery"
:
"^1.2.0"
,
"esutils"
:
"^2.0.2"
,
"file-entry-cache"
:
"^6.0.0"
,
"functional-red-black-tree"
:
"^1.0.1"
,
"glob-parent"
:
"^5.0.0"
,
"globals"
:
"^12.1.0"
,
"ignore"
:
"^4.0.6"
,
"import-fresh"
:
"^3.0.0"
,
"imurmurhash"
:
"^0.1.4"
,
"is-glob"
:
"^4.0.0"
,
"js-yaml"
:
"^3.13.1"
,
"json-stable-stringify-without-jsonify"
:
"^1.0.1"
,
"levn"
:
"^0.4.1"
,
"lodash"
:
"^4.17.20"
,
"minimatch"
:
"^3.0.4"
,
"natural-compare"
:
"^1.4.0"
,
"optionator"
:
"^0.9.1"
,
"progress"
:
"^2.0.0"
,
"regexpp"
:
"^3.1.0"
,
"semver"
:
"^7.2.1"
,
"strip-ansi"
:
"^6.0.0"
,
"strip-json-comments"
:
"^3.1.0"
,
"table"
:
"^6.0.4"
,
"text-table"
:
"^0.2.0"
,
"v8-compile-cache"
:
"^2.0.3"
},
"dependencies"
:
{
"eslint-visitor-keys"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz"
,
"integrity"
:
"sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ=="
,
"optional"
:
true
}
}
},
"eslint-config-prettier"
:
{
"version"
:
"6.15.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz"
,
"integrity"
:
"sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw=="
,
"optional"
:
true
,
"requires"
:
{
"get-stdin"
:
"^6.0.0"
}
},
"eslint-plugin-prettier"
:
{
"version"
:
"3.3.1"
,
"resolved"
:
"https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz"
,
"integrity"
:
"sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ=="
,
"optional"
:
true
,
"requires"
:
{
"prettier-linter-helpers"
:
"^1.0.0"
}
},
"eslint-scope"
:
{
"version"
:
"5.1.1"
,
"resolved"
:
"https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz"
,
"integrity"
:
"sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="
,
"optional"
:
true
,
"requires"
:
{
"esrecurse"
:
"^4.3.0"
,
"estraverse"
:
"^4.1.1"
}
},
"eslint-utils"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz"
,
"integrity"
:
"sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="
,
"optional"
:
true
,
"requires"
:
{
"eslint-visitor-keys"
:
"^1.1.0"
}
},
"eslint-visitor-keys"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
,
"integrity"
:
"sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
,
"optional"
:
true
},
"espree"
:
{
"version"
:
"7.3.1"
,
"resolved"
:
"https://registry.npmjs.org/espree/-/espree-7.3.1.tgz"
,
"integrity"
:
"sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g=="
,
"optional"
:
true
,
"requires"
:
{
"acorn"
:
"^7.4.0"
,
"acorn-jsx"
:
"^5.3.1"
,
"eslint-visitor-keys"
:
"^1.3.0"
}
},
"esprima"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
,
"integrity"
:
"sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
,
"optional"
:
true
},
"esquery"
:
{
"version"
:
"1.3.1"
,
"resolved"
:
"https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz"
,
"integrity"
:
"sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ=="
,
"optional"
:
true
,
"requires"
:
{
"estraverse"
:
"^5.1.0"
},
"dependencies"
:
{
"estraverse"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz"
,
"integrity"
:
"sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
,
"optional"
:
true
}
}
},
"esrecurse"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
,
"integrity"
:
"sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
,
"optional"
:
true
,
"requires"
:
{
"estraverse"
:
"^5.2.0"
},
"dependencies"
:
{
"estraverse"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz"
,
"integrity"
:
"sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
,
"optional"
:
true
}
}
},
"estraverse"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
,
"integrity"
:
"sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
,
"optional"
:
true
},
"esutils"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
,
"integrity"
:
"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
,
"optional"
:
true
},
"exit-on-epipe"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz"
,
"integrity"
:
"sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"fast-deep-equal"
:
{
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
,
"integrity"
:
"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
,
"optional"
:
true
},
"fast-diff"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
,
"integrity"
:
"sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w=="
,
"optional"
:
true
},
"fast-json-stable-stringify"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
,
"integrity"
:
"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
,
"optional"
:
true
},
"fast-levenshtein"
:
{
"version"
:
"2.0.6"
,
"resolved"
:
"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
,
"integrity"
:
"sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
,
"optional"
:
true
},
"file-entry-cache"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz"
,
"integrity"
:
"sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA=="
,
"optional"
:
true
,
"requires"
:
{
"flat-cache"
:
"^3.0.4"
}
},
"flat-cache"
:
{
"version"
:
"3.0.4"
,
"resolved"
:
"https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz"
,
"integrity"
:
"sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg=="
,
"optional"
:
true
,
"requires"
:
{
"flatted"
:
"^3.1.0"
,
"rimraf"
:
"^3.0.2"
}
},
"flatted"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz"
,
"integrity"
:
"sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA=="
,
"optional"
:
true
},
"frac"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/frac/-/frac-1.1.2.tgz"
,
"integrity"
:
"sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fs.realpath"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
,
"integrity"
:
"sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
,
"optional"
:
true
},
"functional-red-black-tree"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"
,
"integrity"
:
"sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
,
"optional"
:
true
},
"get-stdin"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz"
,
"integrity"
:
"sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g=="
,
"optional"
:
true
},
"glob"
:
{
"version"
:
"7.1.6"
,
"resolved"
:
"https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"
,
"integrity"
:
"sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA=="
,
"optional"
:
true
,
"requires"
:
{
"fs.realpath"
:
"^1.0.0"
,
"inflight"
:
"^1.0.4"
,
"inherits"
:
"2"
,
"minimatch"
:
"^3.0.4"
,
"once"
:
"^1.3.0"
,
"path-is-absolute"
:
"^1.0.0"
}
},
"glob-parent"
:
{
"version"
:
"5.1.1"
,
"resolved"
:
"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz"
,
"integrity"
:
"sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ=="
,
"optional"
:
true
,
"requires"
:
{
"is-glob"
:
"^4.0.1"
}
},
"globals"
:
{
"version"
:
"12.4.0"
,
"resolved"
:
"https://registry.npmjs.org/globals/-/globals-12.4.0.tgz"
,
"integrity"
:
"sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg=="
,
"optional"
:
true
,
"requires"
:
{
"type-fest"
:
"^0.8.1"
}
},
"has-flag"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
,
"integrity"
:
"sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
,
"optional"
:
true
},
"ignore"
:
{
"version"
:
"4.0.6"
,
"resolved"
:
"https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
,
"integrity"
:
"sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
,
"optional"
:
true
},
"import-fresh"
:
{
"version"
:
"3.3.0"
,
"resolved"
:
"https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
,
"integrity"
:
"sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
,
"optional"
:
true
,
"requires"
:
{
"parent-module"
:
"^1.0.0"
,
"resolve-from"
:
"^4.0.0"
}
},
"imurmurhash"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
,
"integrity"
:
"sha1-khi5srkoojixPcT7a21XbyMUU+o="
,
"optional"
:
true
},
"inflight"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
,
"integrity"
:
"sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
,
"optional"
:
true
,
"requires"
:
{
"once"
:
"^1.3.0"
,
"wrappy"
:
"1"
}
},
"inherits"
:
{
"version"
:
"2.0.4"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
,
"integrity"
:
"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
,
"optional"
:
true
},
"is-extglob"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
,
"integrity"
:
"sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
,
"optional"
:
true
},
"is-fullwidth-code-point"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
,
"integrity"
:
"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
,
"optional"
:
true
},
"is-glob"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz"
,
"integrity"
:
"sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg=="
,
"optional"
:
true
,
"requires"
:
{
"is-extglob"
:
"^2.1.1"
}
},
"isexe"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
,
"integrity"
:
"sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
,
"optional"
:
true
},
"js-tokens"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
,
"integrity"
:
"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
,
"optional"
:
true
},
"js-yaml"
:
{
"version"
:
"3.14.1"
,
"resolved"
:
"https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz"
,
"integrity"
:
"sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="
,
"optional"
:
true
,
"requires"
:
{
"argparse"
:
"^1.0.7"
,
"esprima"
:
"^4.0.0"
}
},
"json-schema-traverse"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
,
"integrity"
:
"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
,
"optional"
:
true
},
"json-stable-stringify-without-jsonify"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
,
"integrity"
:
"sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
,
"optional"
:
true
},
"levn"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
,
"integrity"
:
"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="
,
"optional"
:
true
,
"requires"
:
{
"prelude-ls"
:
"^1.2.1"
,
"type-check"
:
"~0.4.0"
}
},
"lodash"
:
{
"version"
:
"4.17.20"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz"
,
"integrity"
:
"sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
},
"lru-cache"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
"integrity"
:
"sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
,
"optional"
:
true
,
"requires"
:
{
"yallist"
:
"^4.0.0"
}
},
"make-error"
:
{
"version"
:
"1.3.6"
,
"resolved"
:
"https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
,
"integrity"
:
"sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
,
"optional"
:
true
},
"minimatch"
:
{
"version"
:
"3.0.4"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"
,
"integrity"
:
"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="
,
"optional"
:
true
,
"requires"
:
{
"brace-expansion"
:
"^1.1.7"
}
},
"mpath"
:
{
"version"
:
"0.7.0"
,
"resolved"
:
"https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz"
,
"integrity"
:
"sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg=="
},
"ms"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
,
"integrity"
:
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
,
"optional"
:
true
},
"natural-compare"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
,
"integrity"
:
"sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
,
"optional"
:
true
},
"node-xlsx"
:
{
"version"
:
"0.15.0"
,
"resolved"
:
"https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.15.0.tgz"
,
"integrity"
:
"sha512-rQyhWDJ/k60wQemov7a8MlToastWTidrAVFRwTWV+s53LN/SRwU4lnmc5xuFXx/ay+uaLAsAQBp6BkVob5OjOA=="
,
"requires"
:
{
"buffer-from"
:
"^1.1.0"
,
"xlsx"
:
"^0.14.1"
}
},
"once"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/once/-/once-1.4.0.tgz"
,
"integrity"
:
"sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
,
"optional"
:
true
,
"requires"
:
{
"wrappy"
:
"1"
}
},
"optionator"
:
{
"version"
:
"0.9.1"
,
"resolved"
:
"https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz"
,
"integrity"
:
"sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw=="
,
"optional"
:
true
,
"requires"
:
{
"deep-is"
:
"^0.1.3"
,
"fast-levenshtein"
:
"^2.0.6"
,
"levn"
:
"^0.4.1"
,
"prelude-ls"
:
"^1.2.1"
,
"type-check"
:
"^0.4.0"
,
"word-wrap"
:
"^1.2.3"
}
},
"parent-module"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
,
"integrity"
:
"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
,
"optional"
:
true
,
"requires"
:
{
"callsites"
:
"^3.0.0"
}
},
"path-is-absolute"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
,
"integrity"
:
"sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
,
"optional"
:
true
},
"path-key"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
,
"integrity"
:
"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
,
"optional"
:
true
},
"prelude-ls"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
,
"integrity"
:
"sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
,
"optional"
:
true
},
"prettier"
:
{
"version"
:
"2.2.1"
,
"resolved"
:
"https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz"
,
"integrity"
:
"sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q=="
,
"optional"
:
true
},
"prettier-linter-helpers"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz"
,
"integrity"
:
"sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="
,
"optional"
:
true
,
"requires"
:
{
"fast-diff"
:
"^1.1.2"
}
},
"printj"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/printj/-/printj-1.1.2.tgz"
,
"integrity"
:
"sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
},
"progress"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/progress/-/progress-2.0.3.tgz"
,
"integrity"
:
"sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
,
"optional"
:
true
},
"punycode"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
,
"integrity"
:
"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
,
"optional"
:
true
},
"regexpp"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz"
,
"integrity"
:
"sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q=="
,
"optional"
:
true
},
"require-from-string"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"
,
"integrity"
:
"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
,
"optional"
:
true
},
"resolve-from"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
,
"integrity"
:
"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
,
"optional"
:
true
},
"rimraf"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
,
"integrity"
:
"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
,
"optional"
:
true
,
"requires"
:
{
"glob"
:
"^7.1.3"
}
},
"semver"
:
{
"version"
:
"7.3.4"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-7.3.4.tgz"
,
"integrity"
:
"sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw=="
,
"optional"
:
true
,
"requires"
:
{
"lru-cache"
:
"^6.0.0"
}
},
"shebang-command"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
,
"integrity"
:
"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
,
"optional"
:
true
,
"requires"
:
{
"shebang-regex"
:
"^3.0.0"
}
},
"shebang-regex"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
,
"integrity"
:
"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
,
"optional"
:
true
},
"slice-ansi"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz"
,
"integrity"
:
"sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="
,
"optional"
:
true
,
"requires"
:
{
"ansi-styles"
:
"^4.0.0"
,
"astral-regex"
:
"^2.0.0"
,
"is-fullwidth-code-point"
:
"^3.0.0"
},
"dependencies"
:
{
"ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"optional"
:
true
,
"requires"
:
{
"color-convert"
:
"^2.0.1"
}
},
"color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"optional"
:
true
,
"requires"
:
{
"color-name"
:
"~1.1.4"
}
},
"color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
,
"optional"
:
true
}
}
},
"source-map"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
,
"integrity"
:
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-support"
:
{
"version"
:
"0.5.19"
,
"resolved"
:
"https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"
,
"integrity"
:
"sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="
,
"requires"
:
{
"buffer-from"
:
"^1.0.0"
,
"source-map"
:
"^0.6.0"
}
},
"sprintf-js"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
,
"integrity"
:
"sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
,
"optional"
:
true
},
"ssf"
:
{
"version"
:
"0.10.3"
,
"resolved"
:
"https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz"
,
"integrity"
:
"sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w=="
,
"requires"
:
{
"frac"
:
"~1.1.2"
}
},
"string-width"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz"
,
"integrity"
:
"sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg=="
,
"optional"
:
true
,
"requires"
:
{
"emoji-regex"
:
"^8.0.0"
,
"is-fullwidth-code-point"
:
"^3.0.0"
,
"strip-ansi"
:
"^6.0.0"
}
},
"strip-ansi"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz"
,
"integrity"
:
"sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w=="
,
"optional"
:
true
,
"requires"
:
{
"ansi-regex"
:
"^5.0.0"
}
},
"strip-json-comments"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
,
"integrity"
:
"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
,
"optional"
:
true
},
"supports-color"
:
{
"version"
:
"5.5.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
,
"integrity"
:
"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
,
"optional"
:
true
,
"requires"
:
{
"has-flag"
:
"^3.0.0"
}
},
"table"
:
{
"version"
:
"6.0.7"
,
"resolved"
:
"https://registry.npmjs.org/table/-/table-6.0.7.tgz"
,
"integrity"
:
"sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g=="
,
"optional"
:
true
,
"requires"
:
{
"ajv"
:
"^7.0.2"
,
"lodash"
:
"^4.17.20"
,
"slice-ansi"
:
"^4.0.0"
,
"string-width"
:
"^4.2.0"
},
"dependencies"
:
{
"ajv"
:
{
"version"
:
"7.0.3"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz"
,
"integrity"
:
"sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ=="
,
"optional"
:
true
,
"requires"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"json-schema-traverse"
:
"^1.0.0"
,
"require-from-string"
:
"^2.0.2"
,
"uri-js"
:
"^4.2.2"
}
},
"json-schema-traverse"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
,
"integrity"
:
"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
,
"optional"
:
true
}
}
},
"taobao-mini-sdk"
:
{
"version"
:
"0.2.4"
,
"resolved"
:
"https://registry.npmjs.org/taobao-mini-sdk/-/taobao-mini-sdk-0.2.4.tgz"
,
"integrity"
:
"sha512-hl0grgq5Jtw6DB0zl5fVDAO+5dZmtd0ogRed02d5CT2615A8VbKu0yR/EtrEoguzB6Or8Tjd84+H025Y5j7Alg=="
,
"requires"
:
{
"@types/mongodb"
:
"^3.5.26"
}
},
"text-table"
:
{
"version"
:
"0.2.0"
,
"resolved"
:
"https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
,
"integrity"
:
"sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
,
"optional"
:
true
},
"ts-node"
:
{
"version"
:
"9.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz"
,
"integrity"
:
"sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg=="
,
"optional"
:
true
,
"requires"
:
{
"arg"
:
"^4.1.0"
,
"create-require"
:
"^1.1.0"
,
"diff"
:
"^4.0.1"
,
"make-error"
:
"^1.1.1"
,
"source-map-support"
:
"^0.5.17"
,
"yn"
:
"3.1.1"
}
},
"tslib"
:
{
"version"
:
"1.14.1"
,
"resolved"
:
"https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
,
"integrity"
:
"sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
,
"optional"
:
true
},
"tsutils"
:
{
"version"
:
"3.19.1"
,
"resolved"
:
"https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz"
,
"integrity"
:
"sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw=="
,
"optional"
:
true
,
"requires"
:
{
"tslib"
:
"^1.8.1"
}
},
"type-check"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
,
"integrity"
:
"sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="
,
"optional"
:
true
,
"requires"
:
{
"prelude-ls"
:
"^1.2.1"
}
},
"type-fest"
:
{
"version"
:
"0.8.1"
,
"resolved"
:
"https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"
,
"integrity"
:
"sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
,
"optional"
:
true
},
"typescript"
:
{
"version"
:
"3.9.7"
,
"resolved"
:
"https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz"
,
"integrity"
:
"sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw=="
,
"optional"
:
true
},
"uri-js"
:
{
"version"
:
"4.4.1"
,
"resolved"
:
"https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
,
"integrity"
:
"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
,
"optional"
:
true
,
"requires"
:
{
"punycode"
:
"^2.1.0"
}
},
"v8-compile-cache"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz"
,
"integrity"
:
"sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q=="
,
"optional"
:
true
},
"which"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/which/-/which-2.0.2.tgz"
,
"integrity"
:
"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
,
"optional"
:
true
,
"requires"
:
{
"isexe"
:
"^2.0.0"
}
},
"word-wrap"
:
{
"version"
:
"1.2.3"
,
"resolved"
:
"https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
,
"integrity"
:
"sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
,
"optional"
:
true
},
"wrappy"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
,
"integrity"
:
"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
,
"optional"
:
true
},
"xlsx"
:
{
"version"
:
"0.14.5"
,
"resolved"
:
"https://registry.npmjs.org/xlsx/-/xlsx-0.14.5.tgz"
,
"integrity"
:
"sha512-s/5f4/mjeWREmIWZ+HtDfh/rnz51ar+dZ4LWKZU3u9VBx2zLdSIWTdXgoa52/pnZ9Oe/Vu1W1qzcKzLVe+lq4w=="
,
"requires"
:
{
"adler-32"
:
"~1.2.0"
,
"cfb"
:
"^1.1.2"
,
"codepage"
:
"~1.14.0"
,
"commander"
:
"~2.17.1"
,
"crc-32"
:
"~1.2.0"
,
"exit-on-epipe"
:
"~1.0.1"
,
"ssf"
:
"~0.10.2"
}
},
"yallist"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
,
"integrity"
:
"sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
,
"optional"
:
true
},
"yn"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/yn/-/yn-3.1.1.tgz"
,
"integrity"
:
"sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="
,
"optional"
:
true
}
}
}
v2.0/src/controller/growShare.controller.ts
0 → 100644
View file @
6a697143
/** @format */
import
{
services
,
preCheck
,
registeInfos
,
preUpdate
,
checkParams
}
from
'../decorator/common'
import
{
resultsModel
}
from
'../sdk'
import
{
CommonUserService
,
CommonStatService
,
CommonTaskService
,
CommonGrowTaskService
}
from
'../service/common'
import
{
STAT_TYPE
}
from
'../constants'
import
{
checkActivityTime
,
checkInviteId
,
checkHelpRecord
,
checkNewVip
}
from
'../utils/common/check'
import
{
updateHelpRecord
,
updateVip
}
from
'../utils/common/update'
import
{
getTask
}
from
'../utils'
export
default
class
Share
{
/**
* 完成分享
*/
@
checkParams
([
'activityId'
,
'inviteId'
])
@
registeInfos
([
'vipInfo'
])
@
services
([
CommonGrowTaskService
,
CommonStatService
])
@
preCheck
([
checkActivityTime
,
checkInviteId
,
checkNewVip
,
checkHelpRecord
])
@
preUpdate
([
updateVip
,
updateHelpRecord
])
async
doHelp
(
context
:
IContext
<
IParams
>
,
{
userInfo
,
activityInfo
}:
IControllerInfos
,
[
growTaskService
,
statService
]:
[
CommonGrowTaskService
,
CommonStatService
],
{
inviteUserInfo
}:
IPreCheckData
)
{
// 如果邀请任务是每日的,则需要请求每日任务信息
const
task
=
await
getTask
(
context
,
inviteUserInfo
.
openId
)
const
result
=
await
growTaskService
.
completeTask
(
'invites'
,
activityInfo
,
inviteUserInfo
,
task
)
statService
.
addStat
(
STAT_TYPE
.
INITE_SUCCESS
,
userInfo
)
return
resultsModel
.
success
(
result
)
}
}
v2.0/src/controller/growTask.controller.ts
0 → 100644
View file @
6a697143
/** @format */
import
{
checkParams
,
services
,
registeInfos
,
preCheck
}
from
'../decorator/common'
import
{
resultsModel
}
from
'../sdk'
import
{
CommonGrowTaskService
,
CommonBaseService
}
from
'../service/common'
import
{
ITaskInfo
}
from
'../service/common/task.service'
import
{
checkActivityTime
,
checkGrowTaskLimit
,
checkExchangeCreditsTask
,
checkRemainTimes
,
checkInviteId
}
from
'../utils/common/check'
import
{
preUpdate
}
from
'../decorator/common'
import
{
updateVip
,
updateSignGrowTask
,
updateGrowOrderGoods
}
from
'../utils/common/update'
export
default
class
Task
{
/**
* 任务列表
*/
@
checkParams
([
'activityId'
])
@
registeInfos
([
'vipInfo'
,
'task'
])
@
services
([
CommonGrowTaskService
])
@
preCheck
([
checkActivityTime
])
@
preUpdate
([
updateVip
,
updateSignGrowTask
,
updateGrowOrderGoods
])
async
getTaskList
(
context
:
IContext
<
IParams
>
,
{
userInfo
,
activityInfo
}:
IControllerInfos
,
[
growTaskService
]:
[
CommonGrowTaskService
]
):
Promise
<
IResult
<
{
list
:
ITaskInfo
[]
}
>>
{
// 读取B端 tasks字段配置自动生成任务列表
const
result
=
await
growTaskService
.
initTaskList
(
userInfo
,
activityInfo
)
return
resultsModel
.
success
({
...
result
})
}
/**
* 完成任务
*
* 商品相关任务 需要传itemId参数
* 积分兑换任务 需要传credits参数
*/
@
checkParams
([
'activityId'
,
'taskType'
,
'itemId?'
,
'credits?'
])
@
registeInfos
([
'session'
,
'task'
])
@
services
([
CommonGrowTaskService
])
@
preCheck
([
checkActivityTime
,
checkGrowTaskLimit
,
checkExchangeCreditsTask
])
async
doCompleteTask
(
context
:
IContext
<
IParams
>
,
{
userInfo
,
activityInfo
,
task
}:
IControllerInfos
,
[
growTaskService
]:
[
CommonGrowTaskService
]
)
{
const
{
taskType
}
=
context
.
data
// 更新user表
const
result
=
await
growTaskService
.
completeTask
(
taskType
,
activityInfo
,
userInfo
,
task
)
return
resultsModel
.
success
(
result
)
}
/**
* 领取任务奖励
* 领取的奖励增加的key值 如: gameTimes 前端传入
*/
@
checkParams
([
'activityId'
,
'taskType'
,
'rewardsKey'
])
@
services
([
CommonGrowTaskService
])
@
preCheck
([
checkActivityTime
,
checkRemainTimes
])
async
receiveTaskRewards
(
context
:
IContext
<
IParams
>
,
{
userInfo
}:
IControllerInfos
,
[
growTaskService
]:
[
CommonGrowTaskService
]
):
Promise
<
IResult
<
{
rewards
:
number
}
>>
{
const
{
rewardsKey
}
=
context
.
data
const
{
taskType
}
=
context
.
data
const
rewardsResult
=
await
growTaskService
.
receiveTaskRewards
(
taskType
,
rewardsKey
,
userInfo
)
return
resultsModel
.
success
(
rewardsResult
)
}
/**
* 获取收藏商品列表
*/
@
checkParams
([
'activityId'
,
'itemIds'
])
@
registeInfos
([
'session'
])
@
services
([
CommonBaseService
,
CommonGrowTaskService
])
async
getCollectGoodsList
(
context
:
IContext
<
IParams
>
,
{
session
,
userInfo
}:
IControllerInfos
,
[
commonBaseService
,
growTaskService
]:
[
CommonBaseService
,
CommonGrowTaskService
]
)
{
const
{
itemIds
}
=
context
.
data
const
list
=
await
commonBaseService
.
getItemListByIds
(
itemIds
,
session
)
const
listWithCollectStatus
=
await
growTaskService
.
getItemListWithCollectStatus
(
list
,
userInfo
)
return
resultsModel
.
success
(
listWithCollectStatus
)
}
}
v2.0/src/db.ts
View file @
6a697143
...
...
@@ -10,6 +10,8 @@ export const JOIN_DB_NAME = 'c_user_join'
export
const
SIGN_DB_NAME
=
'c_user_sign'
export
const
TASK_DB_NAME
=
'c_user_tasks'
export
const
STAT_DB_NAME
=
'c_stats'
export
const
ERROR_LOG_DB_NAME
=
'error_log'
...
...
@@ -19,3 +21,4 @@ export const SELLER_INFO_DB_NAME = 'a_seller_info'
export
const
PRIZE_CONFIG_DB_NAME
=
'b_prize_config'
export
const
ACTIVITY_CONFIG_DB_NAME
=
'b_activity_config'
v2.0/src/decorator/common/registeInfos.ts
View file @
6a697143
/** @format */
import
{
CommonUserService
,
CommonBaseService
}
from
'../../service/common'
import
{
getSellerSession
,
getUserOrderlist
}
from
'../../utils'
import
{
getSellerSession
,
getUserOrderlist
,
getTask
}
from
'../../utils'
import
{
formatVipCbUrl
,
getShopVip
}
from
'../../utils/common/vip'
import
{
CODE_TYPES
}
from
'../../errorCode'
import
{
resultsModel
,
TBAPIS
}
from
'../../sdk'
export
type
IInfo
=
'session'
|
'vipInfo'
|
'taobaoOrderist'
|
'credits'
export
type
IInfo
=
'session'
|
'vipInfo'
|
'taobaoOrderist'
|
'credits'
|
'task'
async
function
initBaseInfo
(
context
:
IContext
<
IParams
>
,
baseInfos
:
ICheckControllerInfos
,
needInfos
:
IInfo
[])
{
const
handler
=
context
?.
cloud
?.
dataspace
?.
context
?.
handler
...
...
@@ -54,6 +54,12 @@ async function initBaseInfo(context: IContext<IParams>, baseInfos: ICheckControl
baseInfos
.
credits
=
credits
}
if
(
needInfos
.
includes
(
'task'
)
&&
!
baseInfos
.
credits
)
{
const
task
=
await
getTask
(
context
)
if
(
!
task
.
_id
)
return
CODE_TYPES
.
ERROR_UPDATE_RETRY
baseInfos
.
task
=
task
}
return
baseInfos
}
...
...
v2.0/src/service/common/growTask.service.ts
0 → 100644
View file @
6a697143
/**
* 任务相关方法
*
* @format
*/
import
UserService
from
'./user.service'
import
{
getToday
,
getUserOrderlist
,
generateVipUrl
,
formatVipCbUrl
,
setNewFollowUserData
}
from
'../../utils'
import
{
TASK_RATE_TYPE
,
TASK_STATUS
}
from
'../../constants'
import
{
getTodayCompleteTask
,
getTotalCompleteTask
,
setTaskStatus
,
updateTaskInfo
}
from
'../../utils/common/task'
import
{
CODE_TYPES
}
from
'../../errorCode'
export
interface
ITaskInfo
{
taskType
?:
string
// 任务类型
url
?:
string
// 链接地址
rewards
:
number
// 任务奖励
itemIds
?:
string
// 商品配置ids 商品相关任务返回
todayCompleteTimes
?:
number
// 今日完成次数
completeTimes
?:
number
// 总共完成次数
taskRateType
:
number
// 任务频率
times
?:
number
// 任务每日限制次数
waitReceive
?:
number
// 待领取次数
title
:
string
// 任务文案
status
:
number
// 任务状态 1未完成 2 待领取 3 已完成
}
export
default
class
TaskService
extends
UserService
{
constructor
(
context
:
IContext
<
IParams
>
)
{
super
(
context
)
}
// 根据活动tasks字段渲染任务
async
initTaskList
(
userInfo
:
IUserInfo
,
activityInfo
:
IActivityInfo
)
{
return
{
list
:
Object
.
keys
(
activityInfo
?.
tasks
||
{}).
map
((
task
:
ITaskType
)
=>
{
return
this
.
initTask
(
task
,
activityInfo
?.
tasks
?.[
task
]?.
title
,
userInfo
,
activityInfo
)
})
}
}
/**
* 根据任务类型初始化 b端 tasks字段必须有相应的配置
*
* @param {ITaskType} taskType 任务类型
* @param {string} title 任务标题
* @param {IActivityInfo} activityInfo 任务配置
* @param {IUserInfo} userInfo 用户信息
* @return {ITaskInfo} {ITaskInfo} 任务信息
* @memberof TaskService
*/
initTask
(
taskType
:
ITaskType
,
title
:
string
,
userInfo
:
IUserInfo
,
activityInfo
:
IActivityInfo
):
ITaskInfo
{
if
(
!
activityInfo
?.
tasks
?.[
taskType
])
{
console
.
error
(
`活动缺少
${
taskType
}
任务配置项`
)
}
const
{
value
,
itemIds
=
''
,
taskRateType
,
times
=
1
,
link
=
''
}
=
activityInfo
?.
tasks
?.[
taskType
]
||
{}
const
{
remainTimes
}
=
userInfo
const
{
todayCompleteTimes
}
=
getTodayCompleteTask
(
taskType
,
userInfo
)
const
{
completeTimes
}
=
getTotalCompleteTask
(
taskType
,
userInfo
)
return
{
taskType
,
title
,
itemIds
,
rewards
:
value
,
taskRateType
,
times
,
url
:
taskType
===
'member'
?
generateVipUrl
(
formatVipCbUrl
(
this
.
context
))
:
link
,
todayCompleteTimes
,
completeTimes
,
status
:
setTaskStatus
(
userInfo
,
taskType
,
taskRateType
,
times
),
waitReceive
:
remainTimes
?.[
taskType
]
}
}
/**
*
* 领取任务奖励
*
* @param {ITaskType} taskType
* @param {string} awardsTargetKey
* @param {IUserInfo} userInfo
* @return {number} rewards
* @memberof TaskService
*/
async
receiveTaskRewards
(
taskType
:
ITaskType
,
awardsTargetKey
:
string
,
userInfo
:
IUserInfo
):
Promise
<
{
rewards
:
number
}
>
{
const
waitReceiveTimes
=
userInfo
?.
remainTimes
?.[
taskType
]
await
this
.
updateUser
(
userInfo
.
_id
,
{
$set
:
{
[
`remainTimes.
${
taskType
}
`
]:
0
},
$inc
:
{
[
awardsTargetKey
]:
waitReceiveTimes
}
})
return
{
rewards
:
waitReceiveTimes
}
}
/**
*根据任务类型更新任务待领取次数和任务记录
*
* @param {string} taskType
* @param {number} activityInfo
* @param {IActivityInfo} userInfo
* @returns {boolean}
* @memberof TaskService
*/
async
completeTask
(
taskType
:
ITaskType
,
activityInfo
:
IActivityInfo
,
userInfo
:
IUserInfo
,
task
:
ITask
=
{},
customRecord
:
Object
=
{}
)
{
const
today
=
getToday
()
const
rewards
=
activityInfo
?.
tasks
?.[
taskType
]?.
value
||
0
const
{
tasks
}
=
activityInfo
const
{
[
taskType
]:
{
taskRateType
}
}
=
tasks
const
{
openId
,
data
:
{
itemId
}
}
=
this
.
context
const
record
=
{
itemId
,
openId
:
taskType
===
'invites'
?
openId
:
undefined
,
createTime
:
Date
.
now
(),
...
customRecord
}
if
(
taskRateType
===
TASK_RATE_TYPE
.
EVERYDAY
)
{
//如果是每日任务,则更新每日任务表
const
result
=
await
updateTaskInfo
(
this
.
context
,
task
.
_id
,
taskType
,
record
)
if
(
result
===
1
)
{
const
updateResult
=
await
this
.
updateUser
(
userInfo
.
_id
,
{
$inc
:
{
[
`remainTimes.
${
taskType
}
`
]:
+
rewards
}
})
return
updateResult
===
1
?
{
ok
:
1
}
:
CODE_TYPES
.
ERROR_DO_TASK
}
return
CODE_TYPES
.
ERROR_DO_TASK
}
else
{
//永久任务就更新永久任务表
let
updateQuery
:
IUpdateQuery
=
{
$inc
:
{
[
`remainTimes.
${
taskType
}
`
]:
+
rewards
},
$push
:
{
[
`taskInfo.
${
today
}
.
${
taskType
}
`
]:
{
...
record
,
createTime
:
Date
.
now
()
}
}
}
if
(
taskType
===
'follow'
)
{
updateQuery
.
$set
=
{
follow
:
setNewFollowUserData
(
userInfo
.
follow
)
}
}
const
result
=
await
this
.
updateUser
(
userInfo
.
_id
,
updateQuery
)
return
result
===
1
?
{
ok
:
1
}
:
CODE_TYPES
.
ERROR_DO_TASK
}
}
async
getItemListWithCollectStatus
(
list
:
{
list
:
ITaoBaoItems
[]
},
userInfo
:
IUserInfo
)
{
const
{
taskInfo
}
=
getTotalCompleteTask
(
'collectGoods'
,
userInfo
)
return
{
list
:
list
.
list
.
map
(
v
=>
{
return
{
...
v
,
// 完成列表是否含有itemId
collected
:
taskInfo
.
some
(
completeItem
=>
completeItem
.
itemId
===
v
.
itemId
)
}
})
}
}
}
v2.0/src/service/common/index.ts
View file @
6a697143
...
...
@@ -8,6 +8,8 @@ import CommonTaskService from './task.service'
import
CommonStatService
from
'./stat.service'
import
CommonGameService
from
'./game.service'
import
CommonSignService
from
'./sign.service'
import
CommonGrowTaskService
from
'./growTask.service'
const
common
=
{
CommonAccessService
,
...
...
@@ -17,7 +19,8 @@ const common = {
CommonTaskService
,
CommonStatService
,
CommonGameService
,
CommonSignService
CommonSignService
,
CommonGrowTaskService
}
export
default
common
...
...
@@ -30,5 +33,6 @@ export {
CommonTaskService
,
CommonStatService
,
CommonGameService
,
CommonSignService
CommonSignService
,
CommonGrowTaskService
}
v2.0/src/typings/index.d.ts
View file @
6a697143
...
...
@@ -30,6 +30,7 @@ interface IControllerInfos {
session
?:
string
credits
?:
number
taobaoOrderist
?:
ITaoBaoOrders
[]
task
:
ITask
}
interface
ICheckControllerInfos
extends
IControllerInfos
{
...
...
@@ -51,6 +52,15 @@ interface IVipInfo {
url
?:
string
}
interface
ITask
{
_id
?:
string
openId
?:
string
activityId
?:
string
taskInfo
?:
any
createDay
?:
string
createTime
?:
number
}
type
IFunction
=
(...
args
:
any
[])
=>
any
type
ValueOf
<
T
>
=
T
extends
any
[]
?
T
[
number
]
:
T
[
keyof
T
]
v2.0/src/utils/common/check/checkGrowTaskLimit.ts
0 → 100644
View file @
6a697143
/** @format */
import
{
resultsModel
}
from
'../../../sdk'
import
{
CODE_TYPES
}
from
'../../../errorCode'
import
{
getTotalCompleteTask
,
getTodayCompleteGrowTask
}
from
'../task'
import
{
TASK_RATE_TYPE
}
from
'../../../constants'
export
default
async
function
checkTaskLimit
(
context
:
IContext
<
{
activityId
:
string
;
taskType
:
ITaskType
;
itemId
?:
string
}
>
,
{
userInfo
,
activityInfo
,
task
}:
IControllerInfos
)
{
const
{
taskType
,
itemId
}
=
context
.
data
const
{
itemIds
}
=
activityInfo
?.
tasks
?.[
taskType
]
||
{}
if
(
!
taskType
)
{
console
.
error
(
'使用checkTaskLimit, 云函数必须传入taskType参数'
)
return
}
if
(
!
activityInfo
?.
tasks
?.[
taskType
])
{
return
resultsModel
.
error
(
CODE_TYPES
.
SYSTEM_ERROR
,
`该活动缺少
${
taskType
}
配置项`
)
}
if
(
itemId
&&
!
itemIds
)
{
return
resultsModel
.
error
(
CODE_TYPES
.
SYSTEM_ERROR
,
`该任务缺少商品配置项`
)
}
// B端配置商品ids不匹配正确
if
(
itemId
&&
itemIds
)
{
const
itemIdArray
:
number
[]
=
Array
.
isArray
(
itemIds
)
?
itemIds
:
itemIds
.
split
(
','
).
map
(
v
=>
+
v
)
if
(
!
itemIdArray
.
includes
(
+
itemId
))
return
resultsModel
.
error
(
CODE_TYPES
.
PARAMS_ERROR
,
'商品id不匹配'
)
}
const
{
taskRateType
,
times
=
1
}
=
activityInfo
?.
tasks
?.[
taskType
]
// 永久任务已经完成
const
{
completeTimes
}
=
getTotalCompleteTask
(
taskType
,
userInfo
)
const
hasComplete
=
completeTimes
>=
times
&&
taskRateType
===
TASK_RATE_TYPE
.
FOREVER
if
(
hasComplete
)
return
resultsModel
.
error
(
CODE_TYPES
.
ERROR_TASK_LIMIT
,
`该任务已完成,去看看其它任务吧~`
)
// 每日任务今天已经完成
const
{
todayCompleteTimes
,
todayTaskInfo
}
=
getTodayCompleteGrowTask
(
taskType
,
task
)
const
hasCompleteToday
=
times
&&
todayCompleteTimes
===
times
&&
taskRateType
===
TASK_RATE_TYPE
.
EVERYDAY
if
(
hasCompleteToday
)
{
return
resultsModel
.
error
(
CODE_TYPES
.
ERROR_TASK_LIMIT
,
`该任务今天已完成,明天再来吧~`
)
}
// 今日任务该商品已经完成
const
itemHasCompleteToday
=
todayTaskInfo
.
find
(
v
=>
v
.
itemId
&&
v
.
itemId
===
itemId
)
&&
taskRateType
===
TASK_RATE_TYPE
.
EVERYDAY
if
(
itemHasCompleteToday
)
{
return
resultsModel
.
error
(
CODE_TYPES
.
PARAMS_ERROR
,
'今日该商品任务已完成'
)
}
}
v2.0/src/utils/common/check/index.ts
View file @
6a697143
...
...
@@ -13,6 +13,7 @@ import checkUserInfo, { checkGameTimes } from './checkUserInfo'
import
checkJoinId
from
'./checkJoinId'
import
checkOpenPrizeStatus
from
'./checkOpenPrizeStatus'
import
checkSign
from
'./checkSign'
import
checkGrowTaskLimit
from
'./checkGrowTaskLimit'
const
check
=
{
checkActivityTime
,
...
...
@@ -31,7 +32,8 @@ const check = {
checkJoinId
,
checkGameTimes
,
checkOpenPrizeStatus
,
checkSign
checkSign
,
checkGrowTaskLimit
}
export
default
check
...
...
@@ -53,5 +55,6 @@ export {
checkJoinId
,
checkGameTimes
,
checkOpenPrizeStatus
,
checkSign
checkSign
,
checkGrowTaskLimit
}
v2.0/src/utils/common/task.ts
View file @
6a697143
...
...
@@ -2,6 +2,9 @@
import
{
getToday
}
from
'./getToday'
import
{
TASK_STATUS
,
TASK_RATE_TYPE
}
from
'../../constants'
import
{
TASK_DB_NAME
}
from
'../../db'
import
{
BaseDao
}
from
'../../sdk'
import
Task
from
'../../controller/task.controller'
/**
* 根据任务类型获取任务完成情况
...
...
@@ -97,3 +100,97 @@ export function setTaskStatus(
break
}
}
/**
* 获取用户任务参与信息
* @param context
* @param openId
* @param activityId
*/
export
const
getTask
=
async
(
context
:
IContext
<
IParams
>
,
openId
:
string
=
''
,
activityId
?:
string
):
Promise
<
ITask
>
=>
{
activityId
=
activityId
?
activityId
:
context
.
data
.
activityId
openId
=
openId
?
openId
:
context
.
openId
const
taskInfodao
:
IBaseDao
=
new
BaseDao
(
context
,
TASK_DB_NAME
)
const
createDay
=
getToday
()
//查询每日任务完成记录
const
result
:
ITask
=
await
taskInfodao
.
findOne
({
openId
,
activityId
,
createDay
})
//如果还没有今天的任务数据,则新增一条用户任务数据
if
(
!
result
)
{
const
insertObj
=
{
openId
,
activityId
,
taskInfo
:
{},
createTime
:
Date
.
now
(),
createDay
:
createDay
}
const
insertResult
=
await
taskInfodao
.
insertOne
(
insertObj
)
return
{
...
insertObj
,
_id
:
insertResult
}
}
return
result
}
/**
* 获取养成类每日任务信息
* @param taskType
* @param task
*/
export
function
getTodayCompleteGrowTask
(
taskType
:
string
,
task
:
ITask
):
{
todayCompleteTimes
:
number
todayTaskInfo
:
ITaskDetail
[]
}
{
const
today
=
getToday
()
return
{
todayCompleteTimes
:
task
?.
taskInfo
?.[
today
]?.[
taskType
]?.
length
||
0
,
todayTaskInfo
:
task
?.
taskInfo
?.[
today
]?.[
taskType
]
||
[]
}
}
/**
* 更新每日任务,适用于购买商品每日任务
* @param context
* @param activityId
*/
export
async
function
updateTaskInfo
(
context
:
IContext
<
IParams
>
,
_id
:
string
,
taskType
:
string
,
value
)
{
let
taskInfodao
:
IBaseDao
=
new
BaseDao
(
context
,
TASK_DB_NAME
)
const
today
=
getToday
()
return
await
taskInfodao
.
update
(
{
_id
},
{
$push
:
{
[
`taskInfo.
${
today
}
.
${
taskType
}
`
]:
value
}
}
)
}
/**
* 增加每日任务每日任务,适用于普通每日任务
* @param context
* @param activityId
*/
export
async
function
updateGoodsTaskInfo
(
context
:
IContext
<
IParams
>
,
_id
:
string
,
taskType
:
string
,
value
)
{
let
taskInfodao
:
IBaseDao
=
new
BaseDao
(
context
,
TASK_DB_NAME
)
const
today
=
getToday
()
return
await
taskInfodao
.
update
(
{
_id
},
{
$set
:
{
[
`taskInfo.
${
today
}
.
${
taskType
}
`
]:
value
}
}
)
}
v2.0/src/utils/common/update/index.ts
View file @
6a697143
...
...
@@ -4,6 +4,10 @@ import updateSignTask from './updateSignTask'
import
updateOrderGoods
from
'./updateOrderGoods'
import
updateFirstLoginToday
from
'./updateFirstLoginToday'
import
updateUserInfo
,
{
reduceGameTimes
,
updateHelpRecord
}
from
'./updateUserInfo'
import
updateSignGrowTask
from
'./updateSignGrowTask'
import
updateGrowOrderGoods
from
'./updateGrowOrderGoods'
const
update
=
{
updateVip
,
...
...
@@ -12,7 +16,9 @@ const update = {
updateFirstLoginToday
,
updateUserInfo
,
reduceGameTimes
,
updateHelpRecord
updateHelpRecord
,
updateSignGrowTask
,
updateGrowOrderGoods
}
export
default
update
...
...
@@ -24,5 +30,7 @@ export {
updateFirstLoginToday
,
updateUserInfo
,
reduceGameTimes
,
updateHelpRecord
updateHelpRecord
,
updateSignGrowTask
,
updateGrowOrderGoods
}
v2.0/src/utils/common/update/updateGrowOrderGoods.ts
0 → 100644
View file @
6a697143
/** @format */
import
{
getToday
}
from
'../getToday'
import
{
getTotalCompleteTask
,
getTodayCompleteGrowTask
,
updateGoodsTaskInfo
}
from
'../task'
import
{
TASK_RATE_TYPE
}
from
'../../../constants'
import
{
getUserOrderlist
}
from
'../getUserOrderlist'
import
{
resultsModel
}
from
'../../../sdk'
import
{
CODE_TYPES
}
from
'../../../errorCode'
export
default
async
function
updateOrderGoods
(
context
:
IContext
<
IParams
>
,
{
userInfo
,
activityInfo
,
task
}:
IControllerInfos
):
Promise
<
IPreUpdateQuery
>
{
const
taskType
=
'orderGoods'
const
{
value
,
itemIds
,
taskRateType
,
times
}
=
activityInfo
?.
tasks
?.[
taskType
]
||
{}
const
{
completeTimes
,
taskInfo
}
=
getTotalCompleteTask
(
taskType
,
userInfo
)
const
{
todayCompleteTimes
}
=
getTodayCompleteGrowTask
(
taskType
,
task
)
if
(
!
activityInfo
?.
tasks
?.[
taskType
])
return
{}
// 永久任务且已完成
if
(
taskRateType
===
TASK_RATE_TYPE
.
FOREVER
&&
completeTimes
>=
times
)
{
return
{}
}
// 每日限制完成且完成次数达到限制
if
(
taskRateType
===
TASK_RATE_TYPE
.
EVERYDAY
&&
todayCompleteTimes
>=
times
)
{
return
{}
}
return
taskRateType
===
TASK_RATE_TYPE
.
EVERYDAY
?
await
getEverydayGoods
(
context
,
taskType
,
itemIds
,
task
,
times
,
value
,
userInfo
)
:
await
getOrderGoods
(
taskType
,
itemIds
,
times
,
value
,
userInfo
,
taskInfo
)
}
/**
* 更新永久订单信息
* @param taskType
* @param itemIds
* @param times
* @param value
* @param userInfo
*/
async
function
getOrderGoods
(
taskType
:
string
,
itemIds
:
string
,
times
:
number
,
value
:
number
,
userInfo
:
IUserInfo
,
taskInfo
:
ITaskDetail
[]):
Promise
<
IPreUpdateQuery
>
{
const
today
=
getToday
()
const
orderResult
=
await
getUserOrderlist
(
this
.
context
,
//@ts-ignore
userInfo
.
createTime
||
activityInfo
?.
startTime
||
Date
.
now
(),
Date
.
now
()
)
const
itemIdsArr
=
itemIds
.
split
(
','
).
map
(
v
=>
+
v
)
let
projection
=
{
$inc
:
{
[
`remainTimes.
${
taskType
}
`
]:
0
},
$set
:
{}
}
let
targetOrders
=
userInfo
?.
taskInfo
?.[
today
]?.[
taskType
]
||
[]
orderResult
.
forEach
(
v
=>
{
// @ts-ignore
// 商品订单包含目标商品 且orderId为新订单
if
(
itemIdsArr
.
includes
(
v
.
itemId
)
&&
!
taskInfo
.
some
(
order
=>
order
.
orderId
===
v
.
orderId
))
{
if
(
targetOrders
.
length
>=
times
)
{
return
}
projection
.
$inc
[
`remainTimes.
${
taskType
}
`
]
+=
+
value
targetOrders
.
push
({
itemId
:
v
.
itemId
,
orderId
:
v
.
orderId
,
payTime
:
v
.
payTime
,
tId
:
v
.
tId
,
createTime
:
Date
.
now
()
})
}
if
(
targetOrders
?.
length
)
{
projection
.
$set
[
`taskInfo.
${
today
}
.
${
taskType
}
`
]
=
targetOrders
}
})
return
projection
}
/**
* 更新每日订单信息,仅适用于下单,如果是每日确认收货,需要单独处理
* @param context
* @param taskType
* @param itemIds
* @param task
* @param times
* @param value
* @param userInfo
*/
async
function
getEverydayGoods
(
context
:
IContext
<
IParams
>
,
taskType
:
string
,
itemIds
:
string
,
task
:
ITask
,
times
:
number
,
value
:
number
,
userInfo
:
IUserInfo
):
Promise
<
IPreUpdateQuery
>
{
const
today
=
getToday
()
const
TodayTime
=
new
Date
(
today
).
getTime
()
let
startTime
=
TodayTime
>
userInfo
.
createTime
?
TodayTime
:
userInfo
.
createTime
const
orderResult
=
await
getUserOrderlist
(
context
,
//@ts-ignore
startTime
,
Date
.
now
()
)
const
itemIdsArr
=
itemIds
.
split
(
','
).
map
(
v
=>
+
v
)
let
projection
=
{
$inc
:
{
[
`remainTimes.
${
taskType
}
`
]:
0
},
$set
:
{}
}
let
targetOrders
=
task
?.
taskInfo
?.[
today
]?.[
taskType
]
||
[]
let
targetLength
=
targetOrders
.
length
orderResult
.
forEach
(
v
=>
{
// @ts-ignore
// 商品订单包含目标商品 且orderId为新订单
if
(
itemIdsArr
.
includes
(
v
.
itemId
)
&&
!
task
?.
taskInfo
.
some
(
order
=>
order
.
orderId
===
v
.
orderId
))
{
if
(
targetOrders
.
length
>=
times
)
{
return
}
projection
.
$inc
[
`remainTimes.
${
taskType
}
`
]
+=
+
value
targetOrders
.
push
({
itemId
:
v
.
itemId
,
orderId
:
v
.
orderId
,
payTime
:
v
.
payTime
,
tId
:
v
.
tId
,
createTime
:
Date
.
now
()
})
}
})
if
(
targetOrders
?.
length
&&
targetLength
!==
targetOrders
?.
length
)
{
const
result
=
await
updateGoodsTaskInfo
(
context
,
today
,
taskType
,
targetOrders
)
if
(
result
!==
1
)
{
// @ts-ignore
return
resultsModel
.
error
(
CODE_TYPES
.
SYSTEM_ERROR
,
'订单任务更新失败'
)
}
}
return
projection
}
v2.0/src/utils/common/update/updateSignGrowTask.ts
0 → 100644
View file @
6a697143
/** @format */
import
{
getToday
}
from
'../getToday'
import
{
getTodayCompleteGrowTask
,
updateTaskInfo
}
from
'../task'
export
default
async
function
updateSignTask
(
context
:
IContext
<
IParams
>
,
{
activityInfo
,
task
}:
IControllerInfos
):
Promise
<
IPreUpdateQuery
|
undefined
>
{
if
(
!
activityInfo
?.
tasks
?.
sign
)
return
// 获取签到奖励
const
{
value
}
=
activityInfo
?.
tasks
?.
sign
||
{}
const
{
todayCompleteTimes
}
=
getTodayCompleteGrowTask
(
'sign'
,
task
)
if
(
todayCompleteTimes
===
0
)
{
const
result
=
await
updateTaskInfo
(
context
,
task
.
_id
,
'sign'
,
{
createTime
:
Date
.
now
()
})
return
result
===
1
?
{
$inc
:
{
'remainTimes.sign'
:
value
||
0
},
}
:
{}
}
return
{}
}
v2.0/src/utils/index.ts
View file @
6a697143
...
...
@@ -27,3 +27,5 @@ export * from './common/userUpdate'
export
*
from
'./common/format'
export
*
from
'./common/doHandler'
export
*
from
'./common/task'
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment