wevu 6.24.0 → 6.25.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/README.md CHANGED
@@ -101,6 +101,10 @@ counter.inc()
101
101
 
102
102
  在 `setup(props, ctx)` 中可使用 `ctx.emit(eventName, detail?, options?)`,底层直接调用小程序 `triggerEvent`。
103
103
 
104
+ 组件边界遵循 Vue 的大小写约定:camelCase prop 与事件会统一映射为小程序 kebab-case 宿主名称,例如 `maxQuantity` 映射为 `max-quantity`,`emit('quantityChange')` 可由父组件的 `@quantity-change` 监听。`update:modelValue` 等带冒号事件继续沿用既有的 `update-modelvalue` 映射。
105
+
106
+ 组件模板中的 tag、普通/函数/model prop 和监听器源码可使用 camelCase 或 kebab-case,两者会生成相同且唯一的 kebab-case 宿主名称,不会输出重复别名。运行时 `emit('quantityChange')` 与 `emit('quantity-change')` 每次都只派发一个 `quantity-change` 宿主事件。
107
+
104
108
  SFC 中静态可识别的组件函数 prop 绑定默认会进入 `setData` 快照,例如 `:callback="fn"`、`:on-save="handlers.save"`。动态绑定或手写组件无法被编译器精确标记时,可设置 `allowFunctionProps: true` 全量放行;需要恢复严格过滤时,可设置 `allowFunctionProps: false`。常规父子通信仍可优先使用 `emit` / 小程序事件。
105
109
 
106
110
  `options` 支持:
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1 @@
1
+ import{setupApiMock as e}from"@wevu/api/vitest";e([`@weapp-core/api`,`@wevu/api`,`wevu/api`]);export{};
@@ -0,0 +1 @@
1
+ export * from "@wevu/api/vitest";
@@ -0,0 +1 @@
1
+ export*from"@wevu/api/vitest";export{};
@@ -0,0 +1,12 @@
1
+ import { setupApiMock } from "@wevu/api/vitest";
2
+
3
+ //#region src/apiVitestSetup.ts
4
+ setupApiMock([
5
+ "@weapp-core/api",
6
+ "@wevu/api",
7
+ "wevu/api"
8
+ ]);
9
+
10
+ //#endregion
11
+ export { };
12
+ //# sourceMappingURL=setup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.mjs","names":[],"sources":["../../../../src/apiVitestSetup.ts"],"sourcesContent":["import { setupApiMock } from '@wevu/api/vitest'\n\nsetupApiMock(['@weapp-core/api', '@wevu/api', 'wevu/api'])\n"],"mappings":";;;AAEA,aAAa;CAAC;CAAmB;CAAa;AAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "@wevu/api/vitest"
2
+
3
+ export { };
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "6.24.0";
2
+ var version = "6.25.1";
3
3
 
4
4
  //#endregion
5
5
  export { version };
@@ -1,4 +1,4 @@
1
- import { hasOwn } from "../utils.mjs";
1
+ import { hasOwn, hyphenate } from "../utils.mjs";
2
2
 
3
3
  //#region src/runtime/emit.ts
4
4
  function isTriggerEventOptions(value) {
@@ -6,7 +6,7 @@ function isTriggerEventOptions(value) {
6
6
  return hasOwn(value, "bubbles") || hasOwn(value, "composed") || hasOwn(value, "capturePhase");
7
7
  }
8
8
  function normalizeEmitEventName(eventName) {
9
- return eventName.includes(":") ? eventName.replaceAll(":", "-").toLowerCase() : eventName;
9
+ return eventName.includes(":") ? eventName.replaceAll(":", "-").toLowerCase() : hyphenate(eventName);
10
10
  }
11
11
  function normalizeEmitPayload(args) {
12
12
  if (args.length === 0) return {
@@ -1 +1 @@
1
- {"version":3,"file":"emit.mjs","names":[],"sources":["../../../src/runtime/emit.ts"],"sourcesContent":["import type { TriggerEventOptions } from './types'\nimport { hasOwn } from '../utils'\n\nfunction isTriggerEventOptions(value: unknown): value is TriggerEventOptions {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false\n }\n return (\n hasOwn(value, 'bubbles')\n || hasOwn(value, 'composed')\n || hasOwn(value, 'capturePhase')\n )\n}\n\nexport function normalizeEmitEventName(eventName: string) {\n return eventName.includes(':') ? eventName.replaceAll(':', '-').toLowerCase() : eventName\n}\n\nexport function normalizeEmitPayload(args: any[]): { detail: any, options: TriggerEventOptions | undefined } {\n if (args.length === 0) {\n return {\n detail: undefined,\n options: undefined,\n }\n }\n\n if (args.length === 1) {\n return {\n detail: args[0],\n options: undefined,\n }\n }\n\n const maybeOptions = args[args.length - 1]\n if (isTriggerEventOptions(maybeOptions)) {\n const detailArgs = args.slice(0, -1)\n return {\n detail: detailArgs.length <= 1 ? detailArgs[0] : detailArgs,\n options: maybeOptions,\n }\n }\n\n return {\n detail: args,\n options: undefined,\n }\n}\n"],"mappings":";;;AAGA,SAAS,sBAAsB,OAA8C;CAC3E,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,OAAO;CAET,OACE,OAAO,OAAO,SAAS,KACpB,OAAO,OAAO,UAAU,KACxB,OAAO,OAAO,cAAc;AAEnC;AAEA,SAAgB,uBAAuB,WAAmB;CACxD,OAAO,UAAU,SAAS,GAAG,IAAI,UAAU,WAAW,KAAK,GAAG,CAAC,CAAC,YAAY,IAAI;AAClF;AAEA,SAAgB,qBAAqB,MAAwE;CAC3G,IAAI,KAAK,WAAW,GAClB,OAAO;EACL,QAAQ;EACR,SAAS;CACX;CAGF,IAAI,KAAK,WAAW,GAClB,OAAO;EACL,QAAQ,KAAK;EACb,SAAS;CACX;CAGF,MAAM,eAAe,KAAK,KAAK,SAAS;CACxC,IAAI,sBAAsB,YAAY,GAAG;EACvC,MAAM,aAAa,KAAK,MAAM,GAAG,EAAE;EACnC,OAAO;GACL,QAAQ,WAAW,UAAU,IAAI,WAAW,KAAK;GACjD,SAAS;EACX;CACF;CAEA,OAAO;EACL,QAAQ;EACR,SAAS;CACX;AACF"}
1
+ {"version":3,"file":"emit.mjs","names":[],"sources":["../../../src/runtime/emit.ts"],"sourcesContent":["import type { TriggerEventOptions } from './types'\nimport { hasOwn, hyphenate } from '../utils'\n\nfunction isTriggerEventOptions(value: unknown): value is TriggerEventOptions {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false\n }\n return (\n hasOwn(value, 'bubbles')\n || hasOwn(value, 'composed')\n || hasOwn(value, 'capturePhase')\n )\n}\n\nexport function normalizeEmitEventName(eventName: string) {\n return eventName.includes(':') ? eventName.replaceAll(':', '-').toLowerCase() : hyphenate(eventName)\n}\n\nexport function normalizeEmitPayload(args: any[]): { detail: any, options: TriggerEventOptions | undefined } {\n if (args.length === 0) {\n return {\n detail: undefined,\n options: undefined,\n }\n }\n\n if (args.length === 1) {\n return {\n detail: args[0],\n options: undefined,\n }\n }\n\n const maybeOptions = args[args.length - 1]\n if (isTriggerEventOptions(maybeOptions)) {\n const detailArgs = args.slice(0, -1)\n return {\n detail: detailArgs.length <= 1 ? detailArgs[0] : detailArgs,\n options: maybeOptions,\n }\n }\n\n return {\n detail: args,\n options: undefined,\n }\n}\n"],"mappings":";;;AAGA,SAAS,sBAAsB,OAA8C;CAC3E,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,OAAO;CAET,OACE,OAAO,OAAO,SAAS,KACpB,OAAO,OAAO,UAAU,KACxB,OAAO,OAAO,cAAc;AAEnC;AAEA,SAAgB,uBAAuB,WAAmB;CACxD,OAAO,UAAU,SAAS,GAAG,IAAI,UAAU,WAAW,KAAK,GAAG,CAAC,CAAC,YAAY,IAAI,UAAU,SAAS;AACrG;AAEA,SAAgB,qBAAqB,MAAwE;CAC3G,IAAI,KAAK,WAAW,GAClB,OAAO;EACL,QAAQ;EACR,SAAS;CACX;CAGF,IAAI,KAAK,WAAW,GAClB,OAAO;EACL,QAAQ,KAAK;EACb,SAAS;CACX;CAGF,MAAM,eAAe,KAAK,KAAK,SAAS;CACxC,IAAI,sBAAsB,YAAY,GAAG;EACvC,MAAM,aAAa,KAAK,MAAM,GAAG,EAAE;EACnC,OAAO;GACL,QAAQ,WAAW,UAAU,IAAI,WAAW,KAAK;GACjD,SAAS;EACX;CACF;CAEA,OAAO;EACL,QAAQ;EACR,SAAS;CACX;AACF"}
@@ -1,16 +1,11 @@
1
1
  import { unref } from "../reactivity/ref.mjs";
2
+ import { hyphenate } from "../utils.mjs";
2
3
  import { WEVU_SETUP_STATE_KEY } from "@weapp-core/constants";
3
4
 
4
5
  //#region src/runtime/template.ts
5
- const hyphenateRE = /\B([A-Z])/g;
6
6
  function hasOwnProperty(target, key) {
7
7
  return Object.prototype.hasOwnProperty.call(target, key);
8
8
  }
9
- function hyphenate(value) {
10
- if (!value) return "";
11
- if (value.startsWith("--")) return value;
12
- return value.replace(hyphenateRE, "-$1").toLowerCase();
13
- }
14
9
  function appendStyle(base, part) {
15
10
  if (!part) return base;
16
11
  if (!base) return part;
@@ -24,7 +19,7 @@ function stringifyStyle(value) {
24
19
  for (const key of Object.keys(value)) {
25
20
  const raw = unref(value[key]);
26
21
  if (raw == null) continue;
27
- const name = hyphenate(key);
22
+ const name = key.startsWith("--") ? key : hyphenate(key);
28
23
  if (Array.isArray(raw)) for (const itemValue of raw) {
29
24
  const item = unref(itemValue);
30
25
  if (item == null) continue;
@@ -1 +1 @@
1
- {"version":3,"file":"template.mjs","names":[],"sources":["../../../src/runtime/template.ts"],"sourcesContent":["import { WEVU_SETUP_STATE_KEY } from '@weapp-core/constants'\nimport { unref } from '../reactivity'\n\nconst hyphenateRE = /\\B([A-Z])/g\n\nfunction hasOwnProperty(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key)\n}\n\nfunction hyphenate(value: string) {\n if (!value) {\n return ''\n }\n if (value.startsWith('--')) {\n return value\n }\n return value.replace(hyphenateRE, '-$1').toLowerCase()\n}\n\nfunction appendStyle(base: string, part: string) {\n if (!part) {\n return base\n }\n if (!base) {\n return part\n }\n let next = base\n if (!next.endsWith(';')) {\n next += ';'\n }\n const normalized = part.startsWith(';') ? part.slice(1) : part\n return next + normalized\n}\n\nfunction stringifyStyle(value: Record<string, any>) {\n let res = ''\n for (const key of Object.keys(value)) {\n const raw = unref(value[key])\n if (raw == null) {\n continue\n }\n const name = hyphenate(key)\n if (Array.isArray(raw)) {\n for (const itemValue of raw) {\n const item = unref(itemValue)\n if (item == null) {\n continue\n }\n res = appendStyle(res, `${name}:${item}`)\n }\n }\n else {\n res = appendStyle(res, `${name}:${raw}`)\n }\n }\n return res\n}\n\nexport function normalizeStyle(value: any): string {\n const unwrapped = unref(value)\n if (unwrapped == null) {\n return ''\n }\n if (typeof unwrapped === 'string') {\n return unwrapped\n }\n if (Array.isArray(unwrapped)) {\n let res = ''\n for (const item of unwrapped) {\n const normalized = normalizeStyle(item)\n if (normalized) {\n res = appendStyle(res, normalized)\n }\n }\n return res\n }\n if (typeof unwrapped === 'object') {\n return stringifyStyle(unwrapped)\n }\n return ''\n}\n\nexport function normalizeClass(value: any): string {\n const unwrapped = unref(value)\n let res = ''\n if (!unwrapped) {\n return res\n }\n if (typeof unwrapped === 'string') {\n return unwrapped\n }\n if (Array.isArray(unwrapped)) {\n for (const item of unwrapped) {\n const normalized = normalizeClass(item)\n if (normalized) {\n res += `${normalized} `\n }\n }\n return res.trim()\n }\n if (typeof unwrapped === 'object') {\n for (const key of Object.keys(unwrapped)) {\n if (unref(unwrapped[key])) {\n res += `${key} `\n }\n }\n return res.trim()\n }\n return res\n}\n\nexport function resolvePropValue(target: any, key: string, fallback: any, preferProps = false) {\n if (target == null) {\n return fallback\n }\n const propsObject = unref(target.__wevuProps)\n if (key === 'data') {\n if (propsObject != null && (propsObject[key] !== undefined || hasOwnProperty(propsObject, key))) {\n return propsObject[key]\n }\n return key in target ? target[key] : fallback\n }\n const hasPropsValue = propsObject != null\n && (propsObject[key] !== undefined || hasOwnProperty(propsObject, key))\n if (preferProps) {\n if (hasPropsValue) {\n return propsObject[key]\n }\n if (key in target) {\n return target[key]\n }\n return fallback\n }\n const stateObject = unref(target.$state)\n const setupStateObject = stateObject?.[WEVU_SETUP_STATE_KEY]\n if (setupStateObject != null && hasOwnProperty(setupStateObject, key)) {\n return target[key]\n }\n if (stateObject != null && hasOwnProperty(stateObject, key)) {\n return stateObject[key]\n }\n if (hasPropsValue) {\n return propsObject[key]\n }\n if (!(key in target)) {\n return fallback\n }\n return target[key]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"template.mjs","names":[],"sources":["../../../src/runtime/template.ts"],"sourcesContent":["import { WEVU_SETUP_STATE_KEY } from '@weapp-core/constants'\nimport { unref } from '../reactivity'\nimport { hyphenate } from '../utils'\n\nfunction hasOwnProperty(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key)\n}\n\nfunction appendStyle(base: string, part: string) {\n if (!part) {\n return base\n }\n if (!base) {\n return part\n }\n let next = base\n if (!next.endsWith(';')) {\n next += ';'\n }\n const normalized = part.startsWith(';') ? part.slice(1) : part\n return next + normalized\n}\n\nfunction stringifyStyle(value: Record<string, any>) {\n let res = ''\n for (const key of Object.keys(value)) {\n const raw = unref(value[key])\n if (raw == null) {\n continue\n }\n const name = key.startsWith('--') ? key : hyphenate(key)\n if (Array.isArray(raw)) {\n for (const itemValue of raw) {\n const item = unref(itemValue)\n if (item == null) {\n continue\n }\n res = appendStyle(res, `${name}:${item}`)\n }\n }\n else {\n res = appendStyle(res, `${name}:${raw}`)\n }\n }\n return res\n}\n\nexport function normalizeStyle(value: any): string {\n const unwrapped = unref(value)\n if (unwrapped == null) {\n return ''\n }\n if (typeof unwrapped === 'string') {\n return unwrapped\n }\n if (Array.isArray(unwrapped)) {\n let res = ''\n for (const item of unwrapped) {\n const normalized = normalizeStyle(item)\n if (normalized) {\n res = appendStyle(res, normalized)\n }\n }\n return res\n }\n if (typeof unwrapped === 'object') {\n return stringifyStyle(unwrapped)\n }\n return ''\n}\n\nexport function normalizeClass(value: any): string {\n const unwrapped = unref(value)\n let res = ''\n if (!unwrapped) {\n return res\n }\n if (typeof unwrapped === 'string') {\n return unwrapped\n }\n if (Array.isArray(unwrapped)) {\n for (const item of unwrapped) {\n const normalized = normalizeClass(item)\n if (normalized) {\n res += `${normalized} `\n }\n }\n return res.trim()\n }\n if (typeof unwrapped === 'object') {\n for (const key of Object.keys(unwrapped)) {\n if (unref(unwrapped[key])) {\n res += `${key} `\n }\n }\n return res.trim()\n }\n return res\n}\n\nexport function resolvePropValue(target: any, key: string, fallback: any, preferProps = false) {\n if (target == null) {\n return fallback\n }\n const propsObject = unref(target.__wevuProps)\n if (key === 'data') {\n if (propsObject != null && (propsObject[key] !== undefined || hasOwnProperty(propsObject, key))) {\n return propsObject[key]\n }\n return key in target ? target[key] : fallback\n }\n const hasPropsValue = propsObject != null\n && (propsObject[key] !== undefined || hasOwnProperty(propsObject, key))\n if (preferProps) {\n if (hasPropsValue) {\n return propsObject[key]\n }\n if (key in target) {\n return target[key]\n }\n return fallback\n }\n const stateObject = unref(target.$state)\n const setupStateObject = stateObject?.[WEVU_SETUP_STATE_KEY]\n if (setupStateObject != null && hasOwnProperty(setupStateObject, key)) {\n return target[key]\n }\n if (stateObject != null && hasOwnProperty(stateObject, key)) {\n return stateObject[key]\n }\n if (hasPropsValue) {\n return propsObject[key]\n }\n if (!(key in target)) {\n return fallback\n }\n return target[key]\n}\n"],"mappings":"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"}
@@ -3,6 +3,11 @@ function capitalize(str) {
3
3
  if (!str) return "";
4
4
  return str.charAt(0).toUpperCase() + str.slice(1);
5
5
  }
6
+ const HYPHENATE_RE = /\B([A-Z])/g;
7
+ function hyphenate(str) {
8
+ if (!str) return str;
9
+ return str.replace(HYPHENATE_RE, "-$1").toLowerCase();
10
+ }
6
11
  function toPathSegments(path) {
7
12
  if (!path) return [];
8
13
  return path.split(".").map((segment) => segment.trim()).filter(Boolean);
@@ -12,5 +17,5 @@ function hasOwn(source, key) {
12
17
  }
13
18
 
14
19
  //#endregion
15
- export { capitalize, hasOwn, toPathSegments };
20
+ export { capitalize, hasOwn, hyphenate, toPathSegments };
16
21
  //# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","names":[],"sources":["../../src/utils.ts"],"sourcesContent":["export function capitalize(str: string): string {\n if (!str) {\n return ''\n }\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function toPathSegments(path: string): string[] {\n if (!path) {\n return []\n }\n return path\n .split('.')\n .map(segment => segment.trim())\n .filter(Boolean)\n}\n\nexport function hasOwn(source: object, key: PropertyKey) {\n return Object.prototype.hasOwnProperty.call(source, key)\n}\n"],"mappings":";AAAA,SAAgB,WAAW,KAAqB;CAC9C,IAAI,CAAC,KACH,OAAO;CAET,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAEA,SAAgB,eAAe,MAAwB;CACrD,IAAI,CAAC,MACH,OAAO,CAAC;CAEV,OAAO,KACJ,MAAM,GAAG,CAAC,CACV,KAAI,YAAW,QAAQ,KAAK,CAAC,CAAC,CAC9B,OAAO,OAAO;AACnB;AAEA,SAAgB,OAAO,QAAgB,KAAkB;CACvD,OAAO,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG;AACzD"}
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../../src/utils.ts"],"sourcesContent":["export function capitalize(str: string): string {\n if (!str) {\n return ''\n }\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nconst HYPHENATE_RE = /\\B([A-Z])/g\n\nexport function hyphenate(str: string): string {\n if (!str) {\n return str\n }\n return str.replace(HYPHENATE_RE, '-$1').toLowerCase()\n}\n\nexport function toPathSegments(path: string): string[] {\n if (!path) {\n return []\n }\n return path\n .split('.')\n .map(segment => segment.trim())\n .filter(Boolean)\n}\n\nexport function hasOwn(source: object, key: PropertyKey) {\n return Object.prototype.hasOwnProperty.call(source, key)\n}\n"],"mappings":";AAAA,SAAgB,WAAW,KAAqB;CAC9C,IAAI,CAAC,KACH,OAAO;CAET,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAEA,MAAM,eAAe;AAErB,SAAgB,UAAU,KAAqB;CAC7C,IAAI,CAAC,KACH,OAAO;CAET,OAAO,IAAI,QAAQ,cAAc,KAAK,CAAC,CAAC,YAAY;AACtD;AAEA,SAAgB,eAAe,MAAwB;CACrD,IAAI,CAAC,MACH,OAAO,CAAC;CAEV,OAAO,KACJ,MAAM,GAAG,CAAC,CACV,KAAI,YAAW,QAAQ,KAAK,CAAC,CAAC,CAC9B,OAAO,OAAO;AACnB;AAEA,SAAgB,OAAO,QAAgB,KAAkB;CACvD,OAAO,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG;AACzD"}
package/dist/package.mjs CHANGED
@@ -1 +1 @@
1
- var e=`6.24.0`;export{e as version};
1
+ var e=`6.25.1`;export{e as version};
@@ -1 +1 @@
1
- import{hasOwn as e}from"../utils.mjs";function t(t){return!t||typeof t!=`object`||Array.isArray(t)?!1:e(t,`bubbles`)||e(t,`composed`)||e(t,`capturePhase`)}function n(e){return e.includes(`:`)?e.replaceAll(`:`,`-`).toLowerCase():e}function r(e){if(e.length===0)return{detail:void 0,options:void 0};if(e.length===1)return{detail:e[0],options:void 0};let n=e[e.length-1];if(t(n)){let t=e.slice(0,-1);return{detail:t.length<=1?t[0]:t,options:n}}return{detail:e,options:void 0}}export{n as normalizeEmitEventName,r as normalizeEmitPayload};
1
+ import{hasOwn as e,hyphenate as t}from"../utils.mjs";function n(t){return!t||typeof t!=`object`||Array.isArray(t)?!1:e(t,`bubbles`)||e(t,`composed`)||e(t,`capturePhase`)}function r(e){return e.includes(`:`)?e.replaceAll(`:`,`-`).toLowerCase():t(e)}function i(e){if(e.length===0)return{detail:void 0,options:void 0};if(e.length===1)return{detail:e[0],options:void 0};let t=e[e.length-1];if(n(t)){let n=e.slice(0,-1);return{detail:n.length<=1?n[0]:n,options:t}}return{detail:e,options:void 0}}export{r as normalizeEmitEventName,i as normalizeEmitPayload};
@@ -1 +1 @@
1
- import{unref as e}from"../reactivity/ref.mjs";import{WEVU_SETUP_STATE_KEY as t}from"@weapp-core/constants";const n=/\B([A-Z])/g;function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function i(e){return e?e.startsWith(`--`)?e:e.replace(n,`-$1`).toLowerCase():``}function a(e,t){if(!t)return e;if(!e)return t;let n=e;n.endsWith(`;`)||(n+=`;`);let r=t.startsWith(`;`)?t.slice(1):t;return n+r}function o(t){let n=``;for(let r of Object.keys(t)){let o=e(t[r]);if(o==null)continue;let s=i(r);if(Array.isArray(o))for(let t of o){let r=e(t);r!=null&&(n=a(n,`${s}:${r}`))}else n=a(n,`${s}:${o}`)}return n}function s(t){let n=e(t);if(n==null)return``;if(typeof n==`string`)return n;if(Array.isArray(n)){let e=``;for(let t of n){let n=s(t);n&&(e=a(e,n))}return e}return typeof n==`object`?o(n):``}function c(t){let n=e(t),r=``;if(!n)return r;if(typeof n==`string`)return n;if(Array.isArray(n)){for(let e of n){let t=c(e);t&&(r+=`${t} `)}return r.trim()}if(typeof n==`object`){for(let t of Object.keys(n))e(n[t])&&(r+=`${t} `);return r.trim()}return r}function l(n,i,a,o=!1){if(n==null)return a;let s=e(n.__wevuProps);if(i===`data`)return s!=null&&(s[i]!==void 0||r(s,i))?s[i]:i in n?n[i]:a;let c=s!=null&&(s[i]!==void 0||r(s,i));if(o)return c?s[i]:i in n?n[i]:a;let l=e(n.$state),u=l==null?void 0:l[t];return u!=null&&r(u,i)?n[i]:l!=null&&r(l,i)?l[i]:c?s[i]:i in n?n[i]:a}export{c as normalizeClass,s as normalizeStyle,l as resolvePropValue};
1
+ import{unref as e}from"../reactivity/ref.mjs";import{hyphenate as t}from"../utils.mjs";import{WEVU_SETUP_STATE_KEY as n}from"@weapp-core/constants";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function i(e,t){if(!t)return e;if(!e)return t;let n=e;n.endsWith(`;`)||(n+=`;`);let r=t.startsWith(`;`)?t.slice(1):t;return n+r}function a(n){let r=``;for(let a of Object.keys(n)){let o=e(n[a]);if(o==null)continue;let s=a.startsWith(`--`)?a:t(a);if(Array.isArray(o))for(let t of o){let n=e(t);n!=null&&(r=i(r,`${s}:${n}`))}else r=i(r,`${s}:${o}`)}return r}function o(t){let n=e(t);if(n==null)return``;if(typeof n==`string`)return n;if(Array.isArray(n)){let e=``;for(let t of n){let n=o(t);n&&(e=i(e,n))}return e}return typeof n==`object`?a(n):``}function s(t){let n=e(t),r=``;if(!n)return r;if(typeof n==`string`)return n;if(Array.isArray(n)){for(let e of n){let t=s(e);t&&(r+=`${t} `)}return r.trim()}if(typeof n==`object`){for(let t of Object.keys(n))e(n[t])&&(r+=`${t} `);return r.trim()}return r}function c(t,i,a,o=!1){if(t==null)return a;let s=e(t.__wevuProps);if(i===`data`)return s!=null&&(s[i]!==void 0||r(s,i))?s[i]:i in t?t[i]:a;let c=s!=null&&(s[i]!==void 0||r(s,i));if(o)return c?s[i]:i in t?t[i]:a;let l=e(t.$state),u=l==null?void 0:l[n];return u!=null&&r(u,i)?t[i]:l!=null&&r(l,i)?l[i]:c?s[i]:i in t?t[i]:a}export{s as normalizeClass,o as normalizeStyle,c as resolvePropValue};
package/dist/utils.mjs CHANGED
@@ -1 +1 @@
1
- function e(e){return e?e.charAt(0).toUpperCase()+e.slice(1):``}function t(e){return e?e.split(`.`).map(e=>e.trim()).filter(Boolean):[]}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}export{e as capitalize,n as hasOwn,t as toPathSegments};
1
+ function e(e){return e?e.charAt(0).toUpperCase()+e.slice(1):``}const t=/\B([A-Z])/g;function n(e){return e&&e.replace(t,`-$1`).toLowerCase()}function r(e){return e?e.split(`.`).map(e=>e.trim()).filter(Boolean):[]}function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}export{e as capitalize,i as hasOwn,n as hyphenate,r as toPathSegments};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "wevu",
3
3
  "type": "module",
4
- "version": "6.24.0",
4
+ "version": "6.25.1",
5
5
  "description": "Vue 3 风格的小程序运行时,包含响应式、diff+setData 与轻量状态管理",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -25,7 +25,10 @@
25
25
  "pinia",
26
26
  "state-management"
27
27
  ],
28
- "sideEffects": false,
28
+ "sideEffects": [
29
+ "./dist/api/vitest/setup.mjs",
30
+ "./dist/dev/api/vitest/setup.mjs"
31
+ ],
29
32
  "exports": {
30
33
  ".": {
31
34
  "types": "./dist/index.d.mts",
@@ -91,6 +94,22 @@
91
94
  "default": "./dist/api.mjs"
92
95
  }
93
96
  },
97
+ "./api/vitest": {
98
+ "types": "./dist/api/vitest.d.mts",
99
+ "import": {
100
+ "types": "./dist/api/vitest.d.mts",
101
+ "development": "./dist/dev/api/vitest.mjs",
102
+ "default": "./dist/api/vitest.mjs"
103
+ }
104
+ },
105
+ "./api/vitest/setup": {
106
+ "types": "./dist/api/vitest/setup.d.mts",
107
+ "import": {
108
+ "types": "./dist/api/vitest/setup.d.mts",
109
+ "development": "./dist/dev/api/vitest/setup.mjs",
110
+ "default": "./dist/api/vitest/setup.mjs"
111
+ }
112
+ },
94
113
  "./fetch": {
95
114
  "types": "./dist/fetch.d.mts",
96
115
  "import": {
@@ -179,6 +198,20 @@
179
198
  "default": "./dist/dev/api.mjs"
180
199
  }
181
200
  },
201
+ "./dev/api/vitest": {
202
+ "types": "./dist/api/vitest.d.mts",
203
+ "import": {
204
+ "types": "./dist/api/vitest.d.mts",
205
+ "default": "./dist/dev/api/vitest.mjs"
206
+ }
207
+ },
208
+ "./dev/api/vitest/setup": {
209
+ "types": "./dist/api/vitest/setup.d.mts",
210
+ "import": {
211
+ "types": "./dist/api/vitest/setup.d.mts",
212
+ "default": "./dist/dev/api/vitest/setup.mjs"
213
+ }
214
+ },
182
215
  "./dev/fetch": {
183
216
  "types": "./dist/fetch.d.mts",
184
217
  "import": {
@@ -222,15 +255,28 @@
222
255
  "node": "^20.19.0 || >=22.12.0"
223
256
  },
224
257
  "peerDependencies": {
225
- "miniprogram-api-typings": "^5.0.0"
258
+ "miniprogram-api-typings": "^5.0.0",
259
+ "vitest": ">=4.0.0"
260
+ },
261
+ "peerDependenciesMeta": {
262
+ "vitest": {
263
+ "optional": true
264
+ }
265
+ },
266
+ "tsd": {
267
+ "compilerOptions": {
268
+ "module": "NodeNext",
269
+ "moduleResolution": "NodeNext",
270
+ "paths": {}
271
+ }
226
272
  },
227
273
  "dependencies": {
228
274
  "vue": "^3.5.42",
275
+ "@weapp-core/shared": "3.2.0",
276
+ "@wevu/api": "0.3.0",
229
277
  "@weapp-core/constants": "0.2.0",
230
- "@wevu/compiler": "6.24.0",
231
- "@wevu/api": "0.2.18",
232
- "@wevu/web-apis": "1.2.37",
233
- "@weapp-core/shared": "3.2.0"
278
+ "@wevu/compiler": "6.25.1",
279
+ "@wevu/web-apis": "1.2.38"
234
280
  },
235
281
  "scripts": {
236
282
  "dev": "tsdown -w",