@qqi/check-version 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -2
- package/README.md +1 -1
- package/THIRD-PARTY-LICENSES.txt +198 -0
- package/bin.js +2 -0
- package/package.json +19 -17
- package/bin.mjs +0 -79
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) <2025> <
|
|
3
|
+
Copyright (c) <2025> <Mr.MudBean>
|
|
4
4
|
|
|
5
5
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
6
|
purpose with or without fee is hereby granted, provided that the above
|
|
@@ -16,7 +16,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
16
16
|
|
|
17
17
|
# MIT 许可证
|
|
18
18
|
|
|
19
|
-
版权所有 (c) [2025] [
|
|
19
|
+
版权所有 (c) [2025] [泥豆君]
|
|
20
20
|
|
|
21
21
|
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
22
22
|
|
package/README.md
CHANGED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
THIRD-PARTY LICENSE
|
|
2
|
+
==================================================
|
|
3
|
+
|
|
4
|
+
a-type-of-js (2.0.0)
|
|
5
|
+
------------------------------
|
|
6
|
+
# MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) <2025> <Mr.MudBean>
|
|
9
|
+
|
|
10
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
11
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
12
|
+
copyright notice and this permission notice appear in all copies.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
15
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
17
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
18
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
19
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
20
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
21
|
+
|
|
22
|
+
# MIT 许可证
|
|
23
|
+
|
|
24
|
+
版权所有 (c) [2025] [花生亻]
|
|
25
|
+
|
|
26
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
27
|
+
|
|
28
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
29
|
+
|
|
30
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
|
31
|
+
|
|
32
|
+
a-js-tools (2.0.1)
|
|
33
|
+
------------------------------
|
|
34
|
+
# MIT License
|
|
35
|
+
|
|
36
|
+
Copyright (c) <2024> <Mr.MudBean>
|
|
37
|
+
|
|
38
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
39
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
40
|
+
copyright notice and this permission notice appear in all copies.
|
|
41
|
+
|
|
42
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
43
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
44
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
45
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
46
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
47
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
48
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
49
|
+
|
|
50
|
+
# MIT 许可证
|
|
51
|
+
|
|
52
|
+
版权所有 (c) [2024] [泥豆君]
|
|
53
|
+
|
|
54
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
55
|
+
|
|
56
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
57
|
+
|
|
58
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
|
59
|
+
|
|
60
|
+
a-node-tools (4.4.1)
|
|
61
|
+
------------------------------
|
|
62
|
+
# MIT License
|
|
63
|
+
|
|
64
|
+
Copyright (c) <2024> <Mr.MudBean>
|
|
65
|
+
|
|
66
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
67
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
68
|
+
copyright notice and this permission notice appear in all copies.
|
|
69
|
+
|
|
70
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
71
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
72
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
73
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
74
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
75
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
76
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
77
|
+
|
|
78
|
+
# MIT 许可证
|
|
79
|
+
|
|
80
|
+
版权所有 (c) [2024] [泥豆君]
|
|
81
|
+
|
|
82
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
83
|
+
|
|
84
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
85
|
+
|
|
86
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
|
87
|
+
|
|
88
|
+
@qqi/log (1.0.0)
|
|
89
|
+
------------------------------
|
|
90
|
+
# MIT License
|
|
91
|
+
|
|
92
|
+
Copyright (c) <2025> <Mr.MudBean>
|
|
93
|
+
|
|
94
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
95
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
96
|
+
copyright notice and this permission notice appear in all copies.
|
|
97
|
+
|
|
98
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
99
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
100
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
101
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
102
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
103
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
104
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
105
|
+
|
|
106
|
+
# MIT 许可证
|
|
107
|
+
|
|
108
|
+
版权所有 (c) [2025] [泥豆君]
|
|
109
|
+
|
|
110
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
111
|
+
|
|
112
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
113
|
+
|
|
114
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
|
115
|
+
|
|
116
|
+
@color-pen/static (1.1.1)
|
|
117
|
+
------------------------------
|
|
118
|
+
# MIT License
|
|
119
|
+
|
|
120
|
+
Copyright (c) <2025> <Mr.MudBean>
|
|
121
|
+
|
|
122
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
123
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
124
|
+
copyright notice and this permission notice appear in all copies.
|
|
125
|
+
|
|
126
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
127
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
128
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
129
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
130
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
131
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
132
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
133
|
+
|
|
134
|
+
# MIT 许可证
|
|
135
|
+
|
|
136
|
+
版权所有 (c) [2025] [泥豆君]
|
|
137
|
+
|
|
138
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
139
|
+
|
|
140
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
141
|
+
|
|
142
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
|
143
|
+
|
|
144
|
+
color-pen (3.0.0)
|
|
145
|
+
------------------------------
|
|
146
|
+
# MIT License
|
|
147
|
+
|
|
148
|
+
Copyright (c) <2025> <Mr.MudBean>
|
|
149
|
+
|
|
150
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
151
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
152
|
+
copyright notice and this permission notice appear in all copies.
|
|
153
|
+
|
|
154
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
155
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
156
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
157
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
158
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
159
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
160
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
161
|
+
|
|
162
|
+
# MIT 许可证
|
|
163
|
+
|
|
164
|
+
版权所有 (c) [2025] [泥豆君]
|
|
165
|
+
|
|
166
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
167
|
+
|
|
168
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
169
|
+
|
|
170
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
|
171
|
+
|
|
172
|
+
a-command (3.0.0)
|
|
173
|
+
------------------------------
|
|
174
|
+
# MIT License
|
|
175
|
+
|
|
176
|
+
Copyright (c) <2024> <MrMudBean>
|
|
177
|
+
|
|
178
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
179
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
180
|
+
copyright notice and this permission notice appear in all copies.
|
|
181
|
+
|
|
182
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
183
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
184
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
185
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
186
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
187
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
188
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
189
|
+
|
|
190
|
+
# MIT 许可证
|
|
191
|
+
|
|
192
|
+
版权所有 (c) [2024] [泥豆君]
|
|
193
|
+
|
|
194
|
+
特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
|
|
195
|
+
|
|
196
|
+
上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。
|
|
197
|
+
|
|
198
|
+
软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他方式引起的任何索赔、损害或其他责任负责,无论是在与软件或软件的使用或其他交易有关的任何诉讼中。
|
package/bin.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{arch as e}from"node:os";import{dirname as t,normalize as r,join as n,resolve as o}from"node:path";import{fileURLToPath as i}from"node:url";import{statSync as s,readFileSync as a}from"node:fs";import"node:fs/promises";import c from"node:https";function l(e){const t=typeof e;if("object"!==t&&"function"!==t)return t;const r=Reflect.apply(Object.prototype.toString,e,[]).replace(/^.*\s(.*)]$/,"$1").toLowerCase();return"error"!==r?r:e instanceof SyntaxError?"syntaxerror":e instanceof TypeError?"typeerror":e instanceof URIError?"urierror":e instanceof ReferenceError?"referenceerror":e instanceof AggregateError?"aggregateerror":e instanceof RangeError?"rangeerror":e instanceof EvalError?"evalerror":"error"}function u(e){return"string"===l(e)}function g(e){return u(e)&&""===e.valueOf().trim()}function f(e){return"number"===l(e)}function h(e){return Number.isNaN(e)}function b(e){return 0===e}function p(e){return"boolean"===l(e)}function d(e){return!0===e}function m(e){return!1===e}function w(e){return null===e}function $(e){return void 0===e}function y(e){return Array.isArray(e)}function v(e){if(y(e))return 0===e.length;throw new TypeError("参数必须为数组")}function x(e){return"object"===l(e)}function E(e){return x(e)&&0===Reflect.ownKeys(e).length}function S(e,t){return void 0===t||("function"==typeof t?t(e):t)}function I(e){return e.prototype.apply=Function.apply,e.prototype.bind=Function.bind,e.prototype.call=Function.call,e.prototype.length=Function.length,e.prototype.name=Function.name,e.prototype.toString=Function.toString,e}function j(e,t){return Object.keys(t).forEach(r=>e[r]=t[r]),e}function B(e=1,t=0){if(!isFinite(e)||!isFinite(t)||h(e)||h(t)||!f(e)||!f(t))throw new TypeError("getRandomInt: max or min is NaN or is not a number");let r=Math.ceil(Number(t)),n=Math.floor(Number(e));return n===r?n:(r>n&&([n,r]=[r,n]),Math.round(Math.random()*(n-r)+r))}function O(e){if(!x(e)&&!f(e)||f(e)&&h(e)||f(e)&&!isFinite(e)||f(e)&&!Number.isInteger(e)||f(e)&&Number.isInteger(e)&&e<1||f(e)&&e<1||x(e)&&(!f(e.length)||e.length<1||!Number.isInteger(e.length)))throw new TypeError("参数类型错误 ❌ (getRandomString)");const t={length:32,chars:"abcdefghijklmnopqrstuvwxyz",chars2:"0123456789",chars3:"!@#$%^&*()_+~`|}{[]:;?><,./-=",type:"string",includeUppercaseLetters:!1,includeNumbers:!1,includeSpecial:!1};if("uuid"===t.type)return crypto.randomUUID();f(e)&&Number.isInteger(e)&&e>0&&j(t,{length:e}),x(e)&&(j(t,e),t.length=t.length<1?32:t.length);const r=t.chars.split("");t.includeUppercaseLetters&&s(r,t.chars.toUpperCase()),t.includeNumbers&&s(r,t.chars2),t.includeSpecial&&s(r,t.chars3);let n="";const o=r.join(""),i=o.length;if(globalThis&&globalThis.crypto&&globalThis.crypto.getRandomValues){globalThis.crypto.getRandomValues(new Uint8Array(t.length)).forEach(e=>n+=o[e%i])}else for(let e=0;e<t.length;e++)n+=o[B(i-1)];function s(e,t){const r=e.length,n=t.length,o=Math.max(r,n);for(let i=0;i<o;i++)i<r&&!$(t[i])?e[i]+=t[i]:i<n&&(e[i]=t[i])}if(!/[a-zA-Z]/.test(n))return String.fromCharCode(B(97,122)).concat(n.slice(1));for(;!/^[a-zA-Z]$/.test(n[0]);)n=n.slice(1)+n[0];return n}function N(){return!$(globalThis&&globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node||void 0)}const R=N()&&"win32"===process.platform||!N()&&window.navigator.userAgent.includes("Windows"),k=[!1,!0,"all","info","error","warn"];function C(e){return!!k.includes(e)&&e}function T(...e){}function M(){this.error=this.info=this.warn=T}const W=N()?"node":"browser",F="[";function _(e,t=!0){if(d(t)){if(!u(e))throw new TypeError("`color` must be a string or number but not number[] when isHex is true");if(e.startsWith("0x"))e=e.replace(/0x/,"#");else if(!e.startsWith("#"))throw new TypeError("`color` must be a string or number but not number[] when isHex is true")}else{if(!m(t))throw new TypeError("The second variable `isHex` must be boolean");if(y(e)){if(e.some(e=>!isFinite(e))||3!==e.length)throw new TypeError("If the `color` is an array, it must be 3 in length and be of numeric type");e=`rgb(${e.join(",")})`}else{if(f(e))throw new TypeError("If the `color` is not number when isHex is false");if(u(e)){if(!e.startsWith("rgb(")||!e.endsWith(")"))throw new TypeError("If the `color` is a string, it must be rgb(r, g, b)");{const t=e.replace(/.*\((.*)\).*/,"$1").split(",");if(3!==t.length||t.some(e=>!isFinite(Number(e))||Number(e)<0||Number(e)>255))throw new TypeError("If the `color` is a string, it must be rgb(r, g, b)")}}}}let r=0,n=0,o=0;if(e.startsWith("#"))if(6==(e=e.slice(1)).length)r=A(parseInt(e.slice(0,2),16)),n=A(parseInt(e.slice(2,4),16)),o=A(parseInt(e.slice(4,6),16));else{if(3!=e.length)return B(255);r=A(parseInt(e.slice(0,1).repeat(2),16)),n=A(parseInt(e.slice(1,2).repeat(2),16)),o=A(parseInt(e.slice(2,3).repeat(2),16))}else if(e.startsWith("rgb")){const t=e.replace(/.*\((.*)\).*/,"$1").split(",");r=A(Number(t[0])),n=A(Number(t[1])),o=A(Number(t[2]))}return 16+36*r+6*n+o}function A(e){const t=isFinite(e)?Math.floor(6*e/256):B(6);return Math.min(5,Math.max(0,t))}function D(e,t,r,n=!0){const o=n?"38":"48";if(f(e)&&f(t)&&f(r))return`${o};5;${_([e,t,r],!1)}`;if(u(e)&&$(t)&&$(r)){if(e.startsWith("rgb"))return`${o};5;${_(e,!1)}`;if(e.startsWith("#")||e.startsWith("0x"))return`${o};5;${_(e,!0)}`;H()}else{if(f(e)&&$(t)&&$(r))return`${o};5;${_(e,!0)}`;H()}}function H(){throw new TypeError(' 使用 color() 或 bgColor() 时,可使用三整数 `r , g , b` 或单字符串 `"rgb(r , g, b)"` 或十六进制数值 `0xrgb`、`0xrrggbb` 或十六进制字符串表达 `"#rgb"`、`"#rrggbb"` ,不接受其他格式的参数')}function J(e,t,r,n=!0){try{return D(e,t,r,n)}catch(e){throw console.error(e),new TypeError('使用 rgb() 或 bgRgb() 时,参数可以为单字符串 `"rgb(r, g, b)"` 或三个数值 `r , g ,b`。不接受其他格式')}}function U(e,t=!0){try{return D(e,void 0,void 0,t)}catch(e){throw console.error(e),new TypeError('使用 hex() 或 bgHex() 时,参数可以为单字符串 `"0xnnnnnn"`、`"#rgb"` 、`"#rrggbb"` 或一个数值 `0xrrggbb`。不接受其他格式')}}function V(e,t=!1){return e<0&&(e=0),e>255&&(e=255),e=isFinite(e)?Math.round(e):B(255),`${[48,38][Number(t)]};5;${e}`}const G={black:"38;5;0",red:"38;5;1",green:"38;5;2",yellow:"38;5;3",blue:"38;5;4",magenta:"38;5;5",cyan:"38;5;6",white:"38;5;7",brightBlack:"38;5;8",brightRed:"38;5;9",brightGreen:"38;5;10",brightYellow:"38;5;11",brightBlue:"38;5;12",brightMagenta:"38;5;13",brightCyan:"38;5;14",brightWhite:"38;5;15",bgBlack:"48;5;0",bgRed:"48;5;1",bgGreen:"48;5;2",bgYellow:"48;5;3",bgBlue:"48;5;4",bgMagenta:"48;5;5",bgCyan:"48;5;6",bgWhite:"48;5;7",bgBrightBlack:"48;5;8",bgBrightRed:"48;5;9",bgBrightGreen:"48;5;10",bgBrightYellow:"48;5;11",bgBrightBlue:"48;5;12",bgBrightMagenta:"48;5;13",bgBrightCyan:"48;5;14",bgBrightWhite:"48;5;15",bold:"1",dim:"2",italic:"3",underline:"4",blink:"5",reversed:"7",hide:"8",random:"random",bgRandom:"bgRandom",rgb:(e,t,r)=>J(e,t,r),hex:e=>U(e),color:(e,t,r)=>D(e,t,r),number:e=>V(e,!0),bgRgb:(e,t,r)=>J(e,t,r,!1),bgHex:e=>U(e,!1),bgColor:(e,t,r)=>D(e,t,r,!1),bgNumber:e=>V(e)};Object.freeze(G);const K=["#000000","#c23621","#25bc24","#adad29","#492ee1","#dd38dd","#33bbc8","#cbcccd","#818383","#fc391f","#31e722","#eaec23","#5833ff","#f93578","#14f0f0","#ebeded"];function P(e){let t=Number(e);if(!isFinite(t))throw new TypeError("色值反向解析出错");if(t<16){return K[t]}const r=e=>Math.floor(256*e/6+B(42)).toString(16).padStart(2,"0");t-=16;const n=t%36;return`#${r(Math.floor(t/36))}${r(Math.floor(n/6))}${r(n%6)}`}function z(e){e=e.replace(new RegExp("\\\\[0m","g"),"[m");const t=new RegExp(`(\\x1b\\[(${["([1-4]?[0-9])(;([1-4]?[0-9]+))*m","[m]","\\?(25|7)[hl]","\\d*;?\\d*[HFr]","6n","\\d{0,4}[A-DTS]","[0-3]?[JKg]","[0-6]?W"].map(e=>`(${e})`).join("|")}))`.concat("|(\\x1b[78DMc])"),"g"),r=[""];let n;let o=0,i="";const s=()=>{const t=e.substring(o,n?.index??e.length);r[0]+="%c".concat(t),r.push(i)};for(;!w(n=t.exec(e));)s(),i=$(n[7])?new Y(n[3].slice(0,-1)).str:"",o=t.lastIndex;return s(),r}class Y{constructor(e){this.parse(e),this.build()}build(){this.hide&&(this.color="transparent"),this.reversed&&([this.color,this.bgColor]=[this.bgColor,this.color]),$(this.color)||(this.str+=`color: ${this.color};`),$(this.bgColor)||(this.str+=`background: ${this.bgColor};`),0!==this.bold&&(this.str+=`font-weight: ${1===this.bold?800:200};`),this.italic&&(this.str+="font-style: italic;"),this.underline&&(this.str+="border-bottom: 1px #666 solid;")}color=void 0;bgColor=void 0;bold=0;italic=!1;underline=!1;reversed=!1;hide=!1;str="";parse(e){e.replace(/38;5;(\d+)/g,"c-$1").replace(/48;5;(\d+)/g,"b-$1").split(";").reverse().forEach(e=>{0===this.bold&&e===G.bold?this.bold=1:0===this.bold&&e===G.dim?this.bold=-1:e===G.italic?this.italic=!0:e===G.underline?this.underline=!0:e===G.reversed?this.reversed=!0:e===G.hide?this.hide=!0:$(this.color)&&e.startsWith("c")?this.color=P(e.split("-")[1]):$(this.bgColor)&&e.startsWith("b")&&(this.bgColor=P(e.split("-")[1]))})}}function L(e,t){if(function(e){return u(e)&&""===e.valueOf()}(e=w(e)||$(e)?"":e.toString()))return"";if(v(t))return e;const r=e.indexOf(F),n=e.indexOf(`${F}0m`);return t=function(e){return e.map(e=>"random"===e?`38;5;${B(255)}`:"bgRandom"===e?`48;5;${B(255)}`:e)}(t),r>-1&&n>-1?L(e.substring(0,r),t).concat(e.substring(r,n+4)).concat(L(e.substring(n+4),t)):e.endsWith("\r\n")?(e=e.substring(0,e.length-2),`${F}${t.join(";")}m${e}${F}0m\r\n`):e.endsWith("\n")?(e=e.substring(0,e.length-1),`${F}${t.join(";")}m${e}${F}0m\n`):`${F}${t.join(";")}m${e}${F}0m`}function q(e,t){const r=parseInt(t);if(r>10){const n=d(38===r)?"38;5;":"48;5;",o=e.findIndex(e=>e.startsWith(n));return o>-1?e.toSpliced(o,1,t):[...e,t]}return e.includes(t)?[...e]:[...e,t]}const Z=I(function(e=[]){const t=(t,...r)=>{if(S(t,()=>y(t)&&t.every(e=>u(e)))){let n="";for(let o=0;o<t.length;o++)n+=L(t[o],e),o<r.length&&(n+=L(r[o],e));return n}if(v(r))return L(t,e);throw new Error("pen: 缺少参数")},r=Object.keys(G).map(t=>[t,{get:()=>function(e,t){let r=[];if(S(e,u(G[e])))return r=q(t,G[e]),new Z(r);if("hex"===e||"bgHex"===e)return n=>(r=q(t,G[e](n)),new Z(r));if("rgb"===e||"bgRgb"===e)return(n,o,i)=>{if(u(n)&&$(o)&&$(i))r=q(t,G[e](n));else{if(!(f(n)&&f(o)&&f(i)))throw new Error(`${e} 的参数类型不正确,请使用 'rgb' 或 'hex' 函数`);r=q(t,G[e](n,o,i))}return new Z(r)};if("color"===e||"bgColor"===e)return(n,o,i)=>{if(u(n)&&$(o)&&$(i))r=q(t,G[e](n));else{if(!(f(n)&&f(o)&&f(i)))throw new Error(`${e} 的参数类型不正确,请使用 'rgb' 或 'hex' 函数`);r=q(t,G[e](n,o,i))}return new Z(r)};if("number"===e||"bgNumber"===e)return n=>{if(f(n))return r=q(t,G[e](n)),new Z(r);throw new TypeError(`${e} 的参数应为有效正整数数值,范围 0 - 255`)};throw new Error(`${e} 函数不存在`)}(t,e)}]),n=Object.fromEntries(r);return Object.defineProperties(t,n),t});const X=new Z([]);new Z([G.red]);const Q=new Z([G.green]),ee=new Z([G.yellow]);new Z([G.blue]);const te=new Z([G.magenta]),re=new Z([G.cyan]);new Z([G.white]),new Z([G.brightBlack]);const ne=new Z([G.brightRed]);function oe(e){try{throw new Error}catch(t){const r=(t.stack?.split("\n")||[]).map(e=>{const t=/at\s(.*)\s\((.*):(\d*):(\d*)\)/.exec(e);return t?{name:t[1],path:t[2],line:t[3],column:t[4]}:{name:""}}),n=r.filter(e=>""!==e.name&&void 0!==e.path),o=n[3]??n[2]??n[1]??n[0],i=` ${"info"===e?"💡":"error"===e?"❌":"⚠️ "} ${(new Date).toLocaleString()} `,s=("info"===e?X.bgCyan.brightWhite:"error"===e?X.bgBlack.red:X.bgBrightYellow.brightGreen)(i);console.log(`${s} ${o?.name??""} ${o?.line?.concat(" 行")} ${o?.column?.concat(" 列")}`)}}function ie(...e){oe("error"),console.error(...e)}function se(...e){oe("warn"),console.warn(...e)}function ae(...e){oe("info"),console.info(...e)}function ce(e,t,r){if("node"===W){const n=globalThis?.process.env[r.toUpperCase().concat("_DEV")]||globalThis?.process.env[r.toLowerCase().concat("_dev")];if(!1===e||$(n)||"false"===n)return Reflect.apply(M,t,[]);[...k,"true","false"].includes(n)&&(e="true"===n?"all":n),t.info=["all","info",!0].includes(e)?ae:T,t.error=["all","error",!0].includes(e)?ie:T,t.warn=["all","warn",!0].includes(e)?se:T}else{if(!1===e)return Reflect.apply(M,t,[]);t.info=["all","info",!0].includes(e)?ae:T,t.error=["all","error",!0].includes(e)?ie:T,t.warn=["all","warn",!0].includes(e)?se:T}}function le(e){$(e)&&(e={name:O(10),type:!1}),p(e)&&(e={name:O(10),type:e}),u(e)&&(e={name:e,type:!1});let{name:t="",type:r=!1}=e;t=t.trim().replace(/\s+/g,"_");const n="node"===W&&(globalThis?.process.env[t.toUpperCase().concat("_DEV")]??globalThis?.process.env[t.toLowerCase().concat("_dev")])||!1;r="node"!==W||C(("false"!==n&&("true"===n||n))??r);const o={error:T,warn:T,info:T};ce(r,o,t);const i=(...e)=>{Reflect.apply(o.info,this,e)};return Object.setPrototypeOf(i,this),Object.defineProperties(this,{type:{get:()=>r||!1,set(e){const n=C(e);n!==r&&(r=n,ce(r,o,t))}},error:{value:(...e)=>Reflect.apply(o.error,this,e),configurable:!1,enumerable:!1,writable:!1},warn:{value:(...e)=>Reflect.apply(o.warn,this,e),configurable:!1,enumerable:!1,writable:!1}}),i}new Z([G.brightGreen]),new Z([G.brightYellow]),new Z([G.brightBlue]),new Z([G.brightMagenta]),new Z([G.brightCyan]),new Z([G.brightWhite]),new Z([G.bgBlack]),new Z([G.bgRed]),new Z([G.bgGreen]),new Z([G.bgYellow]),new Z([G.bgBlue]),new Z([G.bgMagenta]),new Z([G.bgCyan]),new Z([G.bgWhite]),new Z([G.bgBrightBlack]),new Z([G.bgBrightRed]),new Z([G.bgBrightGreen]),new Z([G.bgBrightYellow]),new Z([G.bgBrightBlue]),new Z([G.bgBrightMagenta]),new Z([G.bgBrightCyan]),new Z([G.bgBrightWhite]),new Z([G.bold]),new Z([G.italic]),new Z([G.underline]),new Z([G.hide]),new Z([G.dim]),new Z([G.blink]),new Z([G.reversed]),X.rgb,X.hex,X.color,X.bgRgb,X.bgHex,X.bgColor,X.random,X.bgRandom,X.number,X.bgNumber,le.prototype.clear=()=>{"browser"===W?console.clear():console.log("".concat("c"))};const ue=I(le),ge=new ue({type:"error",name:"a node tools"});function fe(...e){return r(n(...e))}function he(e){return s(e,{throwIfNoEntry:!1})}function be(e,r="file",...n){n=n.filter(e=>u(e));let i=o(...n);const s=he(i);if(ge("当前工作目录",i),!s)return ge("🎯 工作目录不存在"),"";if(s.isFile())i=t(i);else if(!s.isDirectory())return;let a=20;const c=()=>{const t=he(fe(i,e));if(t&&("file"==r&&t.isFile()||"directory"==r&&t.isDirectory()))return i;if(b(a))return;a--,ge("♻️ 查找中...",i);const n=fe(i,"..");return n!==i?(i=n,c()):void 0};return c()}function pe(e){if(!/.json^/.test(e)&&!s(e,{throwIfNoEntry:!1}))return null;try{const t=a(e,{encoding:"utf-8"});return JSON.parse(t||"null")}catch(e){return ge.error(e),null}}function de(e){const t=new RegExp(e);let r;try{throw new Error}catch(e){r=e}const n=(r.stack?.replace(/\\/gm,"/").split("\n")).reverse(),o=n.findIndex((e,r,n)=>!t.test(e)&&t.test(n[r+1]));if(-1==o)return{name:"",line:0,row:0,originArr:n};let i=n[o];return/\(.*\)/.test(i)&&(i=i.replace(/^.*\((.*)\).*/,"$1")),/file:\/*/.test(i)&&(i=i.replace(/^.*file:\/*(.*)/,"$1")),R||i.startsWith("/")||(i="/"+i),{name:i.replace(/^(.*):\d+:\d+$/,"$1"),line:Number(i.replace(/^.*:(\d+):\d+$/,"$")),row:Number(i.replace(/^.*:\d+:(\d+)$/,"$1")),originArr:n}}function me(){let e;try{new Function('import("")'),e=i(import.meta.url)}catch(t){ge.error(t),e=__filename}R&&(e=e.replace(/\\/gm,"/")),e=de(e).name;return[e,t(e)]}function we(e="",t=!0){let r="";const n=l(e);if(!p(t))throw ge.error(""),new TypeError("lineFeed 的类型必须是 boolean ");if("bigint"===n){const n=e.toString().concat("n");r=t?`${n}\n`:`${n}`}else if(["string","number","boolean","function","null"].includes(n))r=t?`${e}\n`:`${e}`;else{const n=JSON.stringify(e,(e,t)=>function(e){return"function"===l(e)}(t)?`${t}`:null==t?"undefined":t,2);r=t?`${n}\n`:`${n}`}var o;N()?process.stdout.write(r):console.log(...(o=r.replace(/\n$/,""),N()?[o]:z(o)))}const $e=process.argv.slice(2);Object.freeze($e);class ye{originalArg=$e.slice();name="";__filename="";get state(){return this._state}set state(e){this._state=[void 0,{code:1,text:"start"},{code:2,text:"bind over"},{code:3,text:"run over"},{code:4,text:"over",overCode:e}][f(e)?e:4]}_state={code:1,text:"start"};args=new ve;abbr={};helpInfo="";hasShowVersion=!1;originalBind={};values=[]}class ve extends Array{get $nomatch(){return[]}get $map(){return{}}get $arrMap(){return[]}get $only(){return[]}get $original(){return[]}get $isVoid(){return!1}}const xe={},Ee=new ue({name:"a command"});function Se(e){return[e.replace(/^(.*?)\s.*/gm,"$1")||"",/<.+>/.test(e)&&e.replace(/.*<(.+)>.*/,"$1")||"",e.replace(/.*?\((.*)\).*?/,"$1")||""]}function Ie(e,t){switch(t.state.code){case 3:return void Ee.warn("执行绑定","但是已经执行过 `run`");case 4:return void Ee.warn("执行绑定,但是 command 已完成全部应做动作");default:t.state=2}if(u(e)){const[r,n,o]=Se(e);return Ie({name:r,abbr:n,info:o},t)}if(y(e))return e.forEach(e=>Ie(e,t));if(!$(e)&&!e.name&&!e.info)return function(e,t){const r={name:"",info:"",abbr:"",options:[]},n=Object.keys(e),o=Object.keys(r);return n.forEach(r=>{if(!o.includes(r)){const[n,o,i]=Se(r);return Ie({name:n,info:i,abbr:o,options:e[r]},t)}})}(e,t);const r=e;r.abbr&&(t.abbr[r.abbr]=r.name),r.options?r.options=function(e,t,r){y(e)||(e=[e]);const n={};return e.forEach(e=>{let o={name:"",abbr:"",info:""};u(e)?[o.name,o.abbr,o.info]=Se(e):o=Object.assign(o,e),o.abbr&&(r.abbr[`${t}^${o.abbr}`]=o.name),n[o.name]=o}),n}(r.options,r.name,t):r.options={},t.originalBind[r.name]={abbr:"",...r}}function je(){return new Proxy(new ye,{get(e,t,r){if("args"===t){const t=JSON.parse(JSON.stringify(e[Symbol.for("_args")]||[]));return new Proxy(t,{get(r,n,o){return"$nomatch"===n?e.values.slice():"$map"===n?function(e){if(v(e))return{};const t=new Object;return e.forEach(e=>{const r=t[e.name]||{};r.value=[...r.value||[],...e.value||[]],e.options&&e.options.forEach(e=>{r[e.name]=[...r[e.name]||[],...e.value||[]]}),t[e.name]=r}),t}(t):"$arrMap"===n?v(i=t)?[]:i.map(e=>{const t={},r=t[e.name]||{};return e.value&&!v(e.value)&&(r.value=e.value),$(e)||$(e.options)||v(e.options)||(r.options=[],e.options.forEach(e=>{r.options?.push(Object.fromEntries([[e.name,e.value]]))})),t[e.name]=r,t}):"$only"===n?[...new Set(t.map(e=>e.name))]:"$original"===n?$e.slice():"$isVoid"===n?0==$e.slice().length:Reflect.get(r,n,o);var i},set:(e,t,r,n)=>(Reflect.set(e,t,r,n),!0)})}return Reflect.get(e,t,r)},set:(e,t,r,n)=>("args"===t?e[Symbol.for("_args")]=r:Reflect.set(e,t,r,n),!0)})}m(Ee.type);const Be=" ".repeat(4);function Oe(e){return e.state="help",u(e.helpInfo)&&"help"!==e.helpInfo?function(e,t){const r=e.originalBind[t];if(we(`${Be}${r.name}${Be}${te(r.info)}\n`),r.options&&!E(r.options)){we(`${ee(`${Be}使用:`)} ${e.name} ${t} [subOptions/subAbbr [value]]\n`),we(`${re(`${Be}subOptions:`)} \n`),Ne(r.options||{})}else{we(`${Q(`${Be}使用:`)} ${e.name} ${t} [value]\n`)}}(e,e.helpInfo):y(e.helpInfo)&&2==e.helpInfo.length?function(e){const t=e.name,r=e.helpInfo.join(" "),n=e.originalBind[e.helpInfo[0]].options[e.helpInfo[1]].info;we(`${re(" 可使用:")} ${t} ${r} [value]\n${Q(" 描述:")} ${n}`)}(e):function(e){we(`${ne(" 可使用:")} ${e.name} options/abbr [subOptions/subAbbr [value]]\n\n选项:\n`);const t=Ne(e.originalBind);!function(e){["version -v 版本描述","help -h 帮助查看"].forEach(t=>{const[r,n,o]=t.split(" ");we(Re({len:e,name:r,info:o,abbr:n})),we("")})}(t)}(e)}function Ne(e){const t=Object.keys(e).sort();let r=8;t.forEach(e=>r=Math.max(r,e.length));const n=Math.min(15,r+1);return we(Re({len:n,name:"子命令",info:"描述",abbr:"缩写",color:!1})),we(""),t.forEach(t=>{const{name:r,abbr:o,info:i}=e[t];let s=!1;"options"in e[t]&&!E(e[t].options)&&(s=!0),we(Re({len:n,name:r,info:i,abbr:o,textDecoration:s})),we("")}),n}function Re(e){const t=Object.assign({name:"",info:"",abbr:"",len:15,color:!0,textDecoration:!1},e);let r=X[t.color?"green":"black"](Be);return r+=X[t.textDecoration?"blue":"black"](t.name.slice(0,t.len)),r+=" ".repeat(t.len+1-ke(t.name,t.len)),r+=X[t.color?"yellow":"black"]`${t.abbr?.slice(0,6)||""}${" ".repeat(7-ke(t.abbr||"",6))}`,r+=t.color?te(t.info):t.info,r}function ke(e,t){return Math.min(e.replace(/[^\x00-\x7f]/,"11").length,t)}const Ce="";function Te(e){const{name:t,object:r,item:n,result:o}=e;g(t)||(n.name&&r.options?.push(n),o.push(JSON.parse(JSON.stringify(r))))}function Me(e,t){"true"==e?e=!0:"false"==e?e=!1:e==Number(e)&&(e=Number(e)),g(t.name)?t.values.push(e):t[t.item.name?"item":"object"].value.push(e)}function We(e,t){const r=[];let n="";const o=(e,t)=>$(t)||g(t)?r.push(e):r.push(e,t);function i(e,s){if(!g(n)){if(t.originalBind[n].options[e])return o(e,s);const r=t.abbr[`${n}^${e}`];if(!$(r))return o(r,s)}if(t.originalBind[e])return n=e,o(e,s);if(t.abbr[e])return e=t.abbr[e],n=e,o(e,s);if(e.includes("=")){const t=e.indexOf("=");if(0===t||t===e.length-1)return r.push(e);const[n,o]=[e.slice(0,t),e.slice(t+1)||"true"];return i(n,o)}return $(s)||g(s)?r.push(e):r.push(`${e}=${s}`)}return e.forEach(e=>i(e)),r}function Fe(e,t,r){r.init(),e=We(e.filter(e=>""!==e),t),e.forEach(e=>{const{name:n}=r;return e=e.trim(),/^([a-z]|[A-Z]|-|\$|_)/.test(e)?!g(n)&&t.originalBind[n].options&&t.originalBind[n].options[e]?function(e,t){const{item:r,object:n}=t;r.name&&n.options.push(r),t.resetItem(e)}(e,r):t.originalBind[e]?function(e,t){g(t.name)||(Te(t),t.resetItem("")),t.resetObject(e)}(e,r):Me(e,r):Me(e,r)}),Te(r)}function _e(e){switch(e.state.code){case 3:return void we("已经执行过 `run`");case 4:return void we("已完成全部");default:e.state=3}!function(e){if(2==process.argv.length)return;const t=e.originalArg,r=`${Ce}${t.join(Ce)}${Ce}`,n=t.findIndex(e=>/^(-h|help)$/.test(e));if(new RegExp(`${Ce}(-v|version)${Ce}`,"i").test(r))return void(e.hasShowVersion=!0);if(b(n))return void(e.helpInfo="help");let o=[];const i=function(){const e={result:[],values:[],name:"",object:{name:"",value:[],options:[]},item:{name:"",value:[]},resetObject(e){this.name=e,this.object={name:e,value:[],options:[]}},resetItem(e){this.item={name:e,value:[]}},init(){this.result=[],this.values=[],this.resetItem(""),this.resetObject("")}};return e}();n>0?(Fe(t.slice(0,n+1),e,i),e.values=i.values,e.args=i.result,o=e.args,v(o)?e.helpInfo="help":[$,v].some(e=>e(o[0].options))?e.helpInfo=o[0].name:e.helpInfo=[o[0].name,o[0].options[0].name]):(Fe(t,e,i),e.values=i.values,e.args=i.result)}(e),function(e){["name","originBind","abbr"].forEach(t=>{const r=t;e[r]&&(Object.freeze(e[r]),Object.defineProperty(e,t,{value:e[r],writable:!1,enumerable:!0,configurable:!1}))})}(e)}function Ae(t){t.state="version";const r=be("package.json","file",de(t.__filename).name);if($(r))return De();const n=fe(r,"package.json");if(!he(n))return De();const o=pe(n);if(w(o))return De();const{platform:i}=process,s=X.brightCyan(o.name),a=o.version,c="win32"==i?"Windows":"darwin"==i?"mac":i,l=X.brightMagenta(e());we(`${s} 版本 ${X.brightRed(a)} (${c} ${l})`)}function De(){we("抱歉,未找到版本定义说明")}const He=e=>{const t=e.split("-");return 1===t.length?"latest":t[1].includes(".")?t[1].split(".")[0]:"latest"},Je=new class{#e;#t;constructor(e=""){if(u(e)||(e=`${e}`),this.#e=Symbol(e),xe[this.#e])throw new Error(`${e} 已经存在,请更换初始化命令名称,若仍想在原命令上操作,请抽离为单独的文件做数据共享`);this.#t=xe[this.#e]=je(),[this.#t.__filename]=me(),this.#t.name=e||u(process.argv[1])&&process.argv.slice(1,2)[0].replace(/.*\/.*?$/,"$1")||"",Object.defineProperty(this,"#uniKey",{value:this.#e,writable:!1,enumerable:!1,configurable:!1})}get name(){return this.#t.name}get state(){return this.#t.state}isEnd(e=!1){const t=4===this.#t.state.code;return t&&d(e)&&this.end(),t}end(){return this.#t.state="end",process.exit()}error(){return this.#t.state="error",process.exit(1)}bind(e){return Ie(e,this.#t),this}run(){const e=this.#t;return _e(e),g(e.helpInfo)||Oe(e),e.hasShowVersion&&Ae(e),this}get args(){return this.#t.args}get values(){return this.#t.values.slice()}help(e,t){const r=this.#t;u(e)&&r.originalBind[e]?u(t)&&r.originalBind[e].options&&r.originalBind[e].options[t]?r.helpInfo=[e,t]:r.helpInfo=e:r.helpInfo="help",Oe(this.#t)}version(){Ae(this.#t)}}("@qqi/check-version");Je.bind(["cwd <c> (检测的工作文件夹的位置路径,缺省值为当前跟路径的 packages)","skip <s> (跳过线上包版本检测, 默认值为 false)","name <n> (检测的子包名,默认值为 .)"]),Je.run().isEnd(!0);const Ue=Je.args.$map,Ve=Ue.cwd?.value?.[0].toString()??"packages",Ge=Ue.name?.value?.[0].toString()??".",Ke=!1!==Ue.skip?.value?.[0];($(Ge)||""===Ge)&&(we("未检测到输入的包名",!1),process.exit(1));let Pe=fe(process.cwd(),Ve,Ge);const ze=be("package.json","file",Pe);$(ze)&&(we(`文件 ${Pe} 路径不存在`,!1),process.exit(1)),Pe=fe(ze,"package.json");$(he(Pe))&&(we(`${Pe} 文件不存在`,!1),process.exit(1));const Ye=pe(Pe);w(Ye)&&(we(`读取 ${Pe} 文件出错`,!1),process.exit(1)),Ye.name&&Ye.version||(we(`未找到 ${Pe} 文件包名或版本号`,!1),process.exit(1));const Le=await async function(e,t="官方",r=5e3){const n={"淘宝":"registry.npmmirror.com","官方":"registry.npmjs.org","腾讯":"mirrors.tencent.com","中科大":"npmreg.proxy.ustclug.org",yarn:"registry.yarnpkg.com"},o=n[t]||n["官方"];return ge("get npm pkg info 开始执行"),new Promise(n=>{(()=>{let i="";const s=function(e){if(!e||!u(e))return null;if(e.includes("@")){const t=e.replace(/\/+/g,"/").replace(/@+/g,"@").replace(/\/$/,"").split("@").map(e=>e.trim().replace(/^\/*/,"")),r=t.length;return""===t[0]?3===r||2===r&&""!==t[1]?`@${t[1]}`:null:2===r?`${t[0]}`:null}return e}(e)||"a-node-tools";ge("解析后的 pkg 名称",s);const a=("腾讯"===t?"/npm":"").concat(`/${s}`),l={hostname:o,path:a,port:443,method:"GET",timeout:r,headers:{"sec-fetch-dest":"empty","X-Spiferacl":"1"}};ge("请求参数",l);const g=c.get(l,e=>{e.on("data",e=>{$(e)||(i+=e.toString())}),e.on("end",()=>{if(200==e.statusCode)try{const e=JSON.parse(i);e.version=e["dist-tags"].latest,n({data:e,success:!0,status:"success",error:null})}catch(e){ge.error("转化错误",e),n({data:null,success:!0,status:"parseJsonError",error:e,message:i})}else 404==e.statusCode?n({data:null,success:!0,status:"notFound",error:null,message:"npm 中没有该包"}):n({data:null,success:!0,status:"otherCode",error:null,message:`请求的返回请求码: ${e.statusCode}`})})});g.on("error",e=>{ge.error("请求错误",e),n({data:null,success:!1,status:"error",error:e})}),g.on("timeout",()=>{ge.error("请求超时"),g.destroy(),n({data:null,success:!1,status:"timeout",error:null})}),g.end(),ge("结束方法")})()})}(Ye.name);w(Le.data)&&("notFound"!==Le.status||!Ke&&"0.0.0"!==Ye.version||(we(He(Ye.version),!1),process.exit(0)),we(`${Ye.name} 包未找到线上信息`,!1),process.exit(1)),Le.data.time[Ye.version]&&(we(`${Ye.name} 包版本号已存在`,!1),process.exit(1)),we(He(Ye.version),!1),process.exit(0);
|
package/package.json
CHANGED
|
@@ -1,41 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qqi/check-version",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0
|
|
5
|
-
"description": "一个检测工作目录下 packages 文件夹下子 npm 包版本是否存在的模块",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"a-command": "^2.3.13",
|
|
9
|
-
"a-js-tools": "^1.0.10",
|
|
10
|
-
"a-node-tools": "^4.2.19",
|
|
11
|
-
"a-type-of-js": "^1.0.7"
|
|
12
|
-
},
|
|
4
|
+
"version": "1.1.0",
|
|
13
5
|
"author": {
|
|
14
|
-
"name": "
|
|
15
|
-
"email": "
|
|
6
|
+
"name": "泥豆君",
|
|
7
|
+
"email": "Mr.MudBean@outlook.com",
|
|
16
8
|
"url": "https://earthnut.dev"
|
|
17
9
|
},
|
|
10
|
+
"description": "一个检测工作目录下 packages 文件夹下子 npm 包版本是否存在的模块",
|
|
11
|
+
"license": "MIT",
|
|
18
12
|
"files": [
|
|
19
|
-
"bin.
|
|
13
|
+
"bin.js",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"README.md",
|
|
16
|
+
"THIRD-PARTY-LICENSES.txt"
|
|
20
17
|
],
|
|
21
18
|
"keywords": [
|
|
22
19
|
"@qqi/check-version",
|
|
23
|
-
"@qqi"
|
|
20
|
+
"@qqi",
|
|
21
|
+
"版本检测"
|
|
24
22
|
],
|
|
25
23
|
"homepage": "https://earthnut.dev/npm/qqi/check-version",
|
|
26
24
|
"bugs": {
|
|
27
|
-
"url": "https://github.com/
|
|
28
|
-
"email": "
|
|
25
|
+
"url": "https://github.com/MrMudBean/qqi/issues",
|
|
26
|
+
"email": "Mr.MudBean@outlook.com"
|
|
29
27
|
},
|
|
30
28
|
"repository": {
|
|
31
29
|
"type": "git",
|
|
32
|
-
"url": "git+https://github.com/
|
|
30
|
+
"url": "git+https://github.com/MrMudBean/qqi.git",
|
|
31
|
+
"directory": "packages/check-version"
|
|
33
32
|
},
|
|
34
33
|
"publishConfig": {
|
|
35
34
|
"access": "public",
|
|
36
35
|
"registry": "https://registry.npmjs.org/"
|
|
37
36
|
},
|
|
38
37
|
"bin": {
|
|
39
|
-
"@qqi/check-version": "./bin.
|
|
38
|
+
"@qqi/check-version": "./bin.js"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18.0.0"
|
|
40
42
|
}
|
|
41
43
|
}
|
package/bin.mjs
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { _p, pathJoin, getDirectoryBy, fileExist, readFileToJsonSync, getNpmPkgInfo } from 'a-node-tools';
|
|
3
|
-
import { isUndefined, isNull } from 'a-type-of-js';
|
|
4
|
-
import { Command } from 'a-command';
|
|
5
|
-
|
|
6
|
-
/** 从版本号中解析到 dist tag */
|
|
7
|
-
const getTag = (version) => {
|
|
8
|
-
const versionList = version.split('-');
|
|
9
|
-
if (versionList.length === 1) {
|
|
10
|
-
return 'latest';
|
|
11
|
-
}
|
|
12
|
-
else if (versionList[1].includes('.')) {
|
|
13
|
-
return versionList[1].split('.')[0];
|
|
14
|
-
}
|
|
15
|
-
return 'latest';
|
|
16
|
-
};
|
|
17
|
-
const command = new Command('@qqi/check-version');
|
|
18
|
-
command.bind([
|
|
19
|
-
'cwd <c> (检测的工作文件夹的位置路径,缺省值为当前跟路径的 packages)',
|
|
20
|
-
'skip <s> (跳过线上包版本检测, 默认值为 false)',
|
|
21
|
-
'name <n> (检测的子包名,默认值为 .)',
|
|
22
|
-
]);
|
|
23
|
-
command.run().isEnd(true);
|
|
24
|
-
const args = command.args.$map;
|
|
25
|
-
/** 工作的相对路径 */
|
|
26
|
-
const cwd = args.cwd?.value?.[0].toString() ?? 'packages';
|
|
27
|
-
/** 获取输入的包名 */
|
|
28
|
-
const name = args.name?.value?.[0].toString() ?? '.';
|
|
29
|
-
/** 是否跳过检测 */
|
|
30
|
-
const skip = args.skip?.value?.[0] !== false ? true : false;
|
|
31
|
-
/** 未检测到输入的包名,则返回 false */
|
|
32
|
-
if (isUndefined(name) || name === '') {
|
|
33
|
-
_p('未检测到输入的包名', false);
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
/** 文件路径 */
|
|
37
|
-
let filePath = pathJoin(process.cwd(), cwd, name);
|
|
38
|
-
/// 下面是冗余步骤,有助于在非根目录下查找 package.json 文件
|
|
39
|
-
const dirPath = getDirectoryBy('package.json', 'file', filePath);
|
|
40
|
-
if (isUndefined(dirPath)) {
|
|
41
|
-
_p(`文件 ${filePath} 路径不存在`, false);
|
|
42
|
-
process.exit(1);
|
|
43
|
-
}
|
|
44
|
-
filePath = pathJoin(dirPath, 'package.json');
|
|
45
|
-
/** 文件路径 */
|
|
46
|
-
const fileIsExist = fileExist(filePath);
|
|
47
|
-
if (isUndefined(fileIsExist)) {
|
|
48
|
-
_p(`${filePath} 文件不存在`, false);
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
/** package.json 文件内容 */
|
|
52
|
-
const fileContent = readFileToJsonSync(filePath);
|
|
53
|
-
if (isNull(fileContent)) {
|
|
54
|
-
_p(`读取 ${filePath} 文件出错`, false);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
if (!fileContent.name || !fileContent.version) {
|
|
58
|
-
_p(`未找到 ${filePath} 文件包名或版本号`, false);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
/** 线上同名包内容 */
|
|
62
|
-
const pkgInfo = await getNpmPkgInfo(fileContent.name);
|
|
63
|
-
// 包数据未找到或是版本号已存在则返回
|
|
64
|
-
if (isNull(pkgInfo.data)) {
|
|
65
|
-
if (pkgInfo.status === 'notFound' &&
|
|
66
|
-
(skip || fileContent.version === '0.0.0')) {
|
|
67
|
-
_p(getTag(fileContent.version), false);
|
|
68
|
-
process.exit(0);
|
|
69
|
-
}
|
|
70
|
-
_p(`${fileContent.name} 包未找到线上信息`, false);
|
|
71
|
-
process.exit(1);
|
|
72
|
-
}
|
|
73
|
-
// 包数据未找到或是版本号已存在则返回
|
|
74
|
-
if (pkgInfo.data.time[fileContent.version]) {
|
|
75
|
-
_p(`${fileContent.name} 包版本号已存在`, false);
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
_p(getTag(fileContent.version), false);
|
|
79
|
-
process.exit(0);
|