@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/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 };
@@ -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
+ }