@unmagic/vms 0.0.1
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 +21 -0
- package/README.md +152 -0
- package/bin/index.js +27 -0
- package/dist/cli-BbBKrAPm.js +5872 -0
- package/dist/index.js +14 -0
- package/dist/macro.d.ts +22 -0
- package/dist/polyfill/wxsUtils.wxs +322 -0
- package/package.json +101 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import dotenv from 'dotenv-flow';
|
|
2
|
+
|
|
3
|
+
async function runVMS(options) {
|
|
4
|
+
dotenv.config({ node_env: options.mode });
|
|
5
|
+
const { dev, prod } = await import('./cli-BbBKrAPm.js');
|
|
6
|
+
if (options.mode === 'production') {
|
|
7
|
+
return prod(options);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return dev();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { runVMS };
|
package/dist/macro.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ComponentContext, ShallowRef } from '@vue-mini/core'
|
|
2
|
+
|
|
3
|
+
type TemplateRef<T = unknown> = Readonly<ShallowRef<T | null>>
|
|
4
|
+
|
|
5
|
+
export {}
|
|
6
|
+
|
|
7
|
+
declare global {
|
|
8
|
+
/**
|
|
9
|
+
* 定义组件上下文
|
|
10
|
+
* @returns ComponentContext 组件上下文对象
|
|
11
|
+
*/
|
|
12
|
+
function defineContext(): ComponentContext
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 定义@vue-mini/core缺少的组件上下文
|
|
16
|
+
* @param key
|
|
17
|
+
*/
|
|
18
|
+
function useTemplateRef<T = unknown, Keys extends string = string>(key: Keys): TemplateRef<T>
|
|
19
|
+
const process: {
|
|
20
|
+
env: Record<string, string>
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
// 提供 WXS 中可用的数组方法
|
|
2
|
+
module.exports = {
|
|
3
|
+
/**
|
|
4
|
+
* 查找数组中满足条件的第一个元素
|
|
5
|
+
*/
|
|
6
|
+
find: function(array, predicate) {
|
|
7
|
+
if (!array || 'Array' !== array.constructor) return undefined
|
|
8
|
+
var len = array.length;
|
|
9
|
+
for (var i = 0; i < len; i++) {
|
|
10
|
+
if (predicate(array[i], i, array)) {
|
|
11
|
+
return array[i]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return undefined
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 反向迭代数组,查找数组中满足条件的第一个元素
|
|
19
|
+
*/
|
|
20
|
+
findLast: function(array, predicate) {
|
|
21
|
+
if (!array || 'Array' !== array.constructor) return undefined
|
|
22
|
+
for (var i = array.length - 1; i >= 0; i--) {
|
|
23
|
+
if (predicate(array[i], i, array)) {
|
|
24
|
+
return array[i]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 查找数组中满足条件的第一个元素的索引
|
|
32
|
+
*/
|
|
33
|
+
findIndex: function(array, predicate) {
|
|
34
|
+
if (!array || 'Array' !== array.constructor) return -1
|
|
35
|
+
var len = array.length;
|
|
36
|
+
for (var i = 0; i < len; i++) {
|
|
37
|
+
if (predicate(array[i], i, array)) {
|
|
38
|
+
return i
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return -1
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 反向迭代数组,查找数组中满足条件的第一个元素的索引
|
|
46
|
+
*/
|
|
47
|
+
findLastIndex: function(array, predicate) {
|
|
48
|
+
if (!array || 'Array' !== array.constructor) return -1
|
|
49
|
+
for (var i = array.length - 1; i >= 0; i--) {
|
|
50
|
+
if (predicate(array[i], i, array)) {
|
|
51
|
+
return i
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return -1
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 将样式对象转换为内联样式字符串
|
|
59
|
+
*/
|
|
60
|
+
styleToString: function(style) {
|
|
61
|
+
if (!style) return ''
|
|
62
|
+
if (typeof style === 'string') return style
|
|
63
|
+
var result = []
|
|
64
|
+
var keys = Object.keys(style)
|
|
65
|
+
for (var i = 0; i < keys.length; i++) {
|
|
66
|
+
var key = keys[i]
|
|
67
|
+
var val = style[key]
|
|
68
|
+
if (val !== undefined && val !== null && val !== '') {
|
|
69
|
+
// camelCase 转 kebab-case(WXS 不支持正则字面量,手动处理)
|
|
70
|
+
var kebabKey = ''
|
|
71
|
+
for (var ci = 0; ci < key.length; ci++) {
|
|
72
|
+
var ch = key[ci]
|
|
73
|
+
if (ch >= 'A' && ch <= 'Z') {
|
|
74
|
+
kebabKey += '-' + ch.toLowerCase()
|
|
75
|
+
} else {
|
|
76
|
+
kebabKey += ch
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
result.push(kebabKey + ':' + val)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return result.join(';')
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* 检查数组或字符串中是否包含指定元素
|
|
87
|
+
*/
|
|
88
|
+
includes: function(target, value, fromIndex) {
|
|
89
|
+
if (typeof target === 'string') {
|
|
90
|
+
if (fromIndex) {
|
|
91
|
+
return target.indexOf(value, fromIndex) > -1
|
|
92
|
+
}
|
|
93
|
+
return target.indexOf(value) > -1
|
|
94
|
+
} else if (!target || 'Array' !== target.constructor) {
|
|
95
|
+
return false
|
|
96
|
+
}
|
|
97
|
+
var len = target.length;
|
|
98
|
+
for (var i = (fromIndex || 0); i < len; i++) {
|
|
99
|
+
if (target[i] === value) {
|
|
100
|
+
return true
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return false
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
// ─── Array methods ───────────────────────────────────────────────────────────
|
|
107
|
+
|
|
108
|
+
filter: function(array, predicate) {
|
|
109
|
+
if (!array || 'Array' !== array.constructor) return []
|
|
110
|
+
var result = []
|
|
111
|
+
var len = array.length
|
|
112
|
+
for (var i = 0; i < len; i++) {
|
|
113
|
+
if (predicate(array[i], i, array)) {
|
|
114
|
+
result.push(array[i])
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
map: function(array, transform) {
|
|
121
|
+
if (!array || 'Array' !== array.constructor) return []
|
|
122
|
+
var result = []
|
|
123
|
+
var len = array.length
|
|
124
|
+
for (var i = 0; i < len; i++) {
|
|
125
|
+
result.push(transform(array[i], i, array))
|
|
126
|
+
}
|
|
127
|
+
return result
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
reduce: function(array, reducer, initialValue) {
|
|
131
|
+
if (!array || 'Array' !== array.constructor) return initialValue
|
|
132
|
+
var acc = initialValue
|
|
133
|
+
var len = array.length
|
|
134
|
+
for (var i = 0; i < len; i++) {
|
|
135
|
+
acc = reducer(acc, array[i], i, array)
|
|
136
|
+
}
|
|
137
|
+
return acc
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
reduceRight: function(array, reducer, initialValue) {
|
|
141
|
+
if (!array || 'Array' !== array.constructor) return initialValue
|
|
142
|
+
var acc = initialValue
|
|
143
|
+
for (var i = array.length - 1; i >= 0; i--) {
|
|
144
|
+
acc = reducer(acc, array[i], i, array)
|
|
145
|
+
}
|
|
146
|
+
return acc
|
|
147
|
+
},
|
|
148
|
+
|
|
149
|
+
some: function(array, predicate) {
|
|
150
|
+
if (!array || 'Array' !== array.constructor) return false
|
|
151
|
+
var len = array.length
|
|
152
|
+
for (var i = 0; i < len; i++) {
|
|
153
|
+
if (predicate(array[i], i, array)) {
|
|
154
|
+
return true
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return false
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
every: function(array, predicate) {
|
|
161
|
+
if (!array || 'Array' !== array.constructor) return true
|
|
162
|
+
var len = array.length
|
|
163
|
+
for (var i = 0; i < len; i++) {
|
|
164
|
+
if (!predicate(array[i], i, array)) {
|
|
165
|
+
return false
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return true
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
flat: function(array, depth) {
|
|
172
|
+
if (!array || 'Array' !== array.constructor) return []
|
|
173
|
+
var d = (depth === undefined || depth === null) ? 1 : depth
|
|
174
|
+
function flatHelper(arr, remaining) {
|
|
175
|
+
var result = []
|
|
176
|
+
var len = arr.length
|
|
177
|
+
for (var i = 0; i < len; i++) {
|
|
178
|
+
var item = arr[i]
|
|
179
|
+
if (remaining > 0 && item && 'Array' === item.constructor) {
|
|
180
|
+
var inner = flatHelper(item, remaining - 1)
|
|
181
|
+
for (var j = 0; j < inner.length; j++) {
|
|
182
|
+
result.push(inner[j])
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
result.push(item)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return result
|
|
189
|
+
}
|
|
190
|
+
return flatHelper(array, d)
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
flatMap: function(array, transform) {
|
|
194
|
+
if (!array || 'Array' !== array.constructor) return []
|
|
195
|
+
var mapped = []
|
|
196
|
+
var len = array.length
|
|
197
|
+
for (var i = 0; i < len; i++) {
|
|
198
|
+
mapped.push(transform(array[i], i, array))
|
|
199
|
+
}
|
|
200
|
+
var result = []
|
|
201
|
+
for (var k = 0; k < mapped.length; k++) {
|
|
202
|
+
var item = mapped[k]
|
|
203
|
+
if (item && 'Array' === item.constructor) {
|
|
204
|
+
for (var j = 0; j < item.length; j++) {
|
|
205
|
+
result.push(item[j])
|
|
206
|
+
}
|
|
207
|
+
} else {
|
|
208
|
+
result.push(item)
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return result
|
|
212
|
+
},
|
|
213
|
+
|
|
214
|
+
at: function(array, index) {
|
|
215
|
+
if (!array || 'Array' !== array.constructor) return undefined
|
|
216
|
+
var len = array.length
|
|
217
|
+
var i = index < 0 ? len + index : index
|
|
218
|
+
if (i < 0 || i >= len) return undefined
|
|
219
|
+
return array[i]
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
// ─── String methods ──────────────────────────────────────────────────────────
|
|
223
|
+
|
|
224
|
+
padStart: function(str, targetLength, padString) {
|
|
225
|
+
if (typeof str !== 'string') return ''
|
|
226
|
+
var pad = (padString === undefined || padString === null) ? ' ' : String(padString)
|
|
227
|
+
if (pad === '' || str.length >= targetLength) return str
|
|
228
|
+
var result = str
|
|
229
|
+
while (result.length < targetLength) {
|
|
230
|
+
result = pad + result
|
|
231
|
+
}
|
|
232
|
+
return result.slice(result.length - targetLength)
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
padEnd: function(str, targetLength, padString) {
|
|
236
|
+
if (typeof str !== 'string') return ''
|
|
237
|
+
var pad = (padString === undefined || padString === null) ? ' ' : String(padString)
|
|
238
|
+
if (pad === '' || str.length >= targetLength) return str
|
|
239
|
+
var result = str
|
|
240
|
+
while (result.length < targetLength) {
|
|
241
|
+
result = result + pad
|
|
242
|
+
}
|
|
243
|
+
return result.slice(0, targetLength)
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* 移除字符串开头的空白字符(WXS 不支持正则字面量,手动处理)
|
|
248
|
+
*/
|
|
249
|
+
trimStart: function(str) {
|
|
250
|
+
if (typeof str !== 'string') return ''
|
|
251
|
+
var start = 0
|
|
252
|
+
while (start < str.length && (str[start] === ' ' || str[start] === '\t' || str[start] === '\n' || str[start] === '\r')) {
|
|
253
|
+
start++
|
|
254
|
+
}
|
|
255
|
+
return str.slice(start)
|
|
256
|
+
},
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* 移除字符串末尾的空白字符(WXS 不支持正则字面量,手动处理)
|
|
260
|
+
*/
|
|
261
|
+
trimEnd: function(str) {
|
|
262
|
+
if (typeof str !== 'string') return ''
|
|
263
|
+
var end = str.length - 1
|
|
264
|
+
while (end >= 0 && (str[end] === ' ' || str[end] === '\t' || str[end] === '\n' || str[end] === '\r')) {
|
|
265
|
+
end--
|
|
266
|
+
}
|
|
267
|
+
return str.slice(0, end + 1)
|
|
268
|
+
},
|
|
269
|
+
|
|
270
|
+
replaceAll: function(str, searchValue, replaceValue) {
|
|
271
|
+
if (typeof str !== 'string') return ''
|
|
272
|
+
return str.split(searchValue).join(replaceValue)
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
// ─── Object static methods ───────────────────────────────────────────────────
|
|
276
|
+
|
|
277
|
+
objectEntries: function(obj) {
|
|
278
|
+
if (obj === null || obj === undefined) return []
|
|
279
|
+
var keys = Object.keys(obj)
|
|
280
|
+
var result = []
|
|
281
|
+
for (var i = 0; i < keys.length; i++) {
|
|
282
|
+
result.push([keys[i], obj[keys[i]]])
|
|
283
|
+
}
|
|
284
|
+
return result
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
objectFromEntries: function(entries) {
|
|
288
|
+
if (!entries || !entries.length) return {}
|
|
289
|
+
var result = {}
|
|
290
|
+
for (var i = 0; i < entries.length; i++) {
|
|
291
|
+
result[entries[i][0]] = entries[i][1]
|
|
292
|
+
}
|
|
293
|
+
return result
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
objectAssign: function(target) {
|
|
297
|
+
for (var s = 1; s < arguments.length; s++) {
|
|
298
|
+
var source = arguments[s]
|
|
299
|
+
if (source === null || source === undefined) continue
|
|
300
|
+
var keys = Object.keys(source)
|
|
301
|
+
for (var i = 0; i < keys.length; i++) {
|
|
302
|
+
target[keys[i]] = source[keys[i]]
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return target
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
// ─── Number static methods ───────────────────────────────────────────────────
|
|
309
|
+
|
|
310
|
+
numberIsNaN: function(value) {
|
|
311
|
+
return value !== value
|
|
312
|
+
},
|
|
313
|
+
|
|
314
|
+
numberIsFinite: function(value) {
|
|
315
|
+
return typeof value === 'number' && isFinite(value)
|
|
316
|
+
},
|
|
317
|
+
|
|
318
|
+
numberIsInteger: function(value) {
|
|
319
|
+
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value
|
|
320
|
+
},
|
|
321
|
+
|
|
322
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@unmagic/vms",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "基于 @unmagic/vue-mini 的Vue3 单文件组件构建工具",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22.17.1"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"vms",
|
|
12
|
+
"WeChat",
|
|
13
|
+
"mini-program",
|
|
14
|
+
"@vue-mini",
|
|
15
|
+
"SFC"
|
|
16
|
+
],
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/unmagic/vms.git"
|
|
20
|
+
},
|
|
21
|
+
"bin": {
|
|
22
|
+
"vms": "bin/index.js"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"bin"
|
|
27
|
+
],
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@unmagic/vue-mini": ">=1.0.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@rollup/plugin-alias": "^6.0.0",
|
|
33
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
34
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
35
|
+
"@types/babel__code-frame": "^7.27.0",
|
|
36
|
+
"@types/babel__core": "^7.20.5",
|
|
37
|
+
"@types/babel__generator": "^7.27.0",
|
|
38
|
+
"@types/babel__traverse": "^7.28.0",
|
|
39
|
+
"@types/fs-extra": "^11.0.4",
|
|
40
|
+
"@types/node": "^25.5.0",
|
|
41
|
+
"fast-check": "^4.7.0",
|
|
42
|
+
"oxfmt": "^0.46.0",
|
|
43
|
+
"oxlint": "^1.61.0",
|
|
44
|
+
"oxlint-tsgolint": "^0.21.1",
|
|
45
|
+
"typescript": "~6.0.3",
|
|
46
|
+
"lint-staged": "^16.4.0",
|
|
47
|
+
"tsx": "^4.21.0",
|
|
48
|
+
"husky": "^9.1.7",
|
|
49
|
+
"execa": "^9.6.1",
|
|
50
|
+
"vitest": "^4.1.5"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@babel/code-frame": "^7.29.0",
|
|
54
|
+
"@babel/core": "^7.29.0",
|
|
55
|
+
"@babel/generator": "^7.29.1",
|
|
56
|
+
"@babel/parser": "^7.29.2",
|
|
57
|
+
"@babel/plugin-transform-arrow-functions": "^7.27.1",
|
|
58
|
+
"@babel/plugin-transform-runtime": "^7.29.0",
|
|
59
|
+
"@babel/plugin-transform-template-literals": "^7.27.1",
|
|
60
|
+
"@babel/preset-env": "^7.29.2",
|
|
61
|
+
"@babel/preset-typescript": "^7.28.5",
|
|
62
|
+
"@babel/runtime": "^7.29.2",
|
|
63
|
+
"@babel/traverse": "^7.29.0",
|
|
64
|
+
"@babel/types": "^7.29.0",
|
|
65
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
66
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
67
|
+
"@rollup/plugin-replace": "^6.0.3",
|
|
68
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
69
|
+
"@vue/compiler-core": "3.5.32",
|
|
70
|
+
"@vue/compiler-dom": "3.5.32",
|
|
71
|
+
"@vue/compiler-sfc": "3.5.32",
|
|
72
|
+
"babel-plugin-autocomplete-index": "^0.2.0",
|
|
73
|
+
"babel-plugin-module-resolver": "^5.0.3",
|
|
74
|
+
"babel-plugin-transform-inline-environment-variables": "^0.4.4",
|
|
75
|
+
"chokidar": "^5.0.0",
|
|
76
|
+
"commander": "^14.0.3",
|
|
77
|
+
"cross-env": "^10.1.0",
|
|
78
|
+
"dotenv-flow": "^4.1.0",
|
|
79
|
+
"fs-extra": "^11.3.4",
|
|
80
|
+
"kolorist": "^1.8.0",
|
|
81
|
+
"local-pkg": "^1.1.2",
|
|
82
|
+
"miniprogram-ci": "^2.1.31",
|
|
83
|
+
"rollup": "^4.60.2",
|
|
84
|
+
"terser": "^5.46.2",
|
|
85
|
+
"tinycolor2": "^1.6.0"
|
|
86
|
+
},
|
|
87
|
+
"scripts": {
|
|
88
|
+
"example:dev": "npm run vms:build && cd example && npm run dev",
|
|
89
|
+
"example:build": "cd example && npm run build",
|
|
90
|
+
"example:inspect": "cd example && npm run inspect:vms",
|
|
91
|
+
"vms:build": "rollup --config rollup.config.js",
|
|
92
|
+
"test": "vitest",
|
|
93
|
+
"test:run": "vitest run",
|
|
94
|
+
"test:ui": "vitest --ui",
|
|
95
|
+
"publish:ci": "npm publish",
|
|
96
|
+
"link": "pnpm link --global",
|
|
97
|
+
"lint": "oxlint ./src",
|
|
98
|
+
"format": "oxfmt --check \"**/*.{js,cjs,ts,json,md}\"",
|
|
99
|
+
"release": "tsx release.ts"
|
|
100
|
+
}
|
|
101
|
+
}
|