@dongmingzhixiu/vuexir-compiler 0.4.4 → 0.4.5
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.
|
@@ -36,7 +36,7 @@ export declare function buildTheme(tokens: {
|
|
|
36
36
|
fontNames: Map<string, string>;
|
|
37
37
|
};
|
|
38
38
|
/** R42 生成 Theme.swift(颜色/字体去重常量) */
|
|
39
|
-
export declare const VRN_HELPERS_SWIFT = "import Foundation\n\n// vuexir \u8FD0\u884C\u65F6\u8F85\u52A9\uFF08R78 \u5BF9\u8C61\u5B57\u6BB5\u53D6\u503C\uFF09\n/// R78 \u5BF9\u8C61\u5B57\u6BB5\u53D6\u503C\uFF1A\u72B6\u6001\u91CC\u5B58 JSON \u5B57\u7B26\u4E32\u65F6\u6309 key \u53D6\u503C\uFF08\u975E JSON \u2192 \u8FD4\u56DE\u7A7A\u4E32\uFF09\n/// R85 \u70B9\u8DEF\u5F84\u53D6\u503C\uFF1Akey \u652F\u6301 \"a.b.c\" \u4E0E\u672B\u6BB5 \".length\"\uFF08\u6570\u7EC4/\u5B57\u5178/\u5B57\u7B26\u4E32\u957F\u5EA6\uFF09\n/// R110 \u5224\u771F\uFF1AJS \u91CC\u7684 truthiness \u8FD1\u4F3C\uFF08\u7A7A\u4E32/\"false\"/\"0\"/\"null\" \u4E3A\u5047\uFF09\nfunc vrnTruthy(_ v: String) -> Bool {\n if v.isEmpty { return false }\n if v == \"false\" || v == \"0\" || v == \"null\" || v == \"undefined\" { return false }\n return true\n}\n\nfunc vrnField(_ json: String, _ path: String, _ fallback: String = \"\") -> String {\n let raw = vrnFieldRaw(json, path)\n return raw.isEmpty ? fallback : raw\n}\n\n/// \u539F\u59CB\u53D6\u503C\uFF08\u4E0D\u5957\u515C\u5E95\uFF09\uFF1A\u70B9\u8DEF\u5F84\u4E0B\u94BB\uFF0C\u7F3A\u5931\u8FD4\u56DE\u7A7A\u4E32\nprivate func vrnFieldRaw(_ json: String, _ path: String) -> String {\n guard let data = json.data(using: .utf8),\n let root = try? JSONSerialization.jsonObject(with: data, options: [.fragmentsAllowed]) else { return \"\" }\n var cur: Any = root\n for seg in path.split(separator: \".\").map(String.init) {\n if seg == \"length\" || seg == \"size\" {\n if let a = cur as? [Any] { cur = a.count }\n else if let d = cur as? [String: Any] { cur = d.count }\n else if let s = cur as? String { cur = s.count }\n else { return \"\" }\n continue\n }\n if let d = cur as? [String: Any], let next = d[seg] { cur = next } else { return \"\" }\n }\n if let s = cur as? String { return s }\n if let b = cur as? Bool { return b ? \"true\" : \"false\" }\n if let n = cur as? NSNumber { return n.stringValue }\n return String(describing: cur)\n}\n";
|
|
39
|
+
export declare const VRN_HELPERS_SWIFT = "import Foundation\nimport SwiftUI\n\n// vuexir \u8FD0\u884C\u65F6\u8F85\u52A9\uFF08R78 \u5BF9\u8C61\u5B57\u6BB5\u53D6\u503C\uFF09\n/// R78 \u5BF9\u8C61\u5B57\u6BB5\u53D6\u503C\uFF1A\u72B6\u6001\u91CC\u5B58 JSON \u5B57\u7B26\u4E32\u65F6\u6309 key \u53D6\u503C\uFF08\u975E JSON \u2192 \u8FD4\u56DE\u7A7A\u4E32\uFF09\n/// R85 \u70B9\u8DEF\u5F84\u53D6\u503C\uFF1Akey \u652F\u6301 \"a.b.c\" \u4E0E\u672B\u6BB5 \".length\"\uFF08\u6570\u7EC4/\u5B57\u5178/\u5B57\u7B26\u4E32\u957F\u5EA6\uFF09\n/// R130\uFF1A\u72B6\u6001\u53EF\u80FD\u662F @State String \u6216 @Binding<String>\uFF0C\u7EDF\u4E00\u53D6\u503C\nfunc vrnStr(_ s: String) -> String { s }\nfunc vrnStr(_ b: SwiftUI.Binding<String>) -> String { b.wrappedValue }\n\n/// R110 \u5224\u771F\uFF1AJS \u91CC\u7684 truthiness \u8FD1\u4F3C\uFF08\u7A7A\u4E32/\"false\"/\"0\"/\"null\" \u4E3A\u5047\uFF09\nfunc vrnTruthy(_ v: String) -> Bool {\n if v.isEmpty { return false }\n if v == \"false\" || v == \"0\" || v == \"null\" || v == \"undefined\" { return false }\n return true\n}\n\nfunc vrnField(_ json: String, _ path: String, _ fallback: String = \"\") -> String {\n let raw = vrnFieldRaw(json, path)\n return raw.isEmpty ? fallback : raw\n}\n\n/// \u539F\u59CB\u53D6\u503C\uFF08\u4E0D\u5957\u515C\u5E95\uFF09\uFF1A\u70B9\u8DEF\u5F84\u4E0B\u94BB\uFF0C\u7F3A\u5931\u8FD4\u56DE\u7A7A\u4E32\nprivate func vrnFieldRaw(_ json: String, _ path: String) -> String {\n guard let data = json.data(using: .utf8),\n let root = try? JSONSerialization.jsonObject(with: data, options: [.fragmentsAllowed]) else { return \"\" }\n var cur: Any = root\n for seg in path.split(separator: \".\").map(String.init) {\n if seg == \"length\" || seg == \"size\" {\n if let a = cur as? [Any] { cur = a.count }\n else if let d = cur as? [String: Any] { cur = d.count }\n else if let s = cur as? String { cur = s.count }\n else { return \"\" }\n continue\n }\n if let d = cur as? [String: Any], let next = d[seg] { cur = next } else { return \"\" }\n }\n if let s = cur as? String { return s }\n if let b = cur as? Bool { return b ? \"true\" : \"false\" }\n if let n = cur as? NSNumber { return n.stringValue }\n return String(describing: cur)\n}\n";
|
|
40
40
|
export declare function generateThemeSource(palette: {
|
|
41
41
|
colorNames: Map<string, string>;
|
|
42
42
|
fontNames: Map<string, string>;
|
package/dist/codegen/swiftui.js
CHANGED
|
@@ -118,10 +118,15 @@ export function buildTheme(tokens) {
|
|
|
118
118
|
}
|
|
119
119
|
/** R42 生成 Theme.swift(颜色/字体去重常量) */
|
|
120
120
|
export const VRN_HELPERS_SWIFT = `import Foundation
|
|
121
|
+
import SwiftUI
|
|
121
122
|
|
|
122
123
|
// vuexir 运行时辅助(R78 对象字段取值)
|
|
123
124
|
/// R78 对象字段取值:状态里存 JSON 字符串时按 key 取值(非 JSON → 返回空串)
|
|
124
125
|
/// R85 点路径取值:key 支持 "a.b.c" 与末段 ".length"(数组/字典/字符串长度)
|
|
126
|
+
/// R130:状态可能是 @State String 或 @Binding<String>,统一取值
|
|
127
|
+
func vrnStr(_ s: String) -> String { s }
|
|
128
|
+
func vrnStr(_ b: SwiftUI.Binding<String>) -> String { b.wrappedValue }
|
|
129
|
+
|
|
125
130
|
/// R110 判真:JS 里的 truthiness 近似(空串/"false"/"0"/"null" 为假)
|
|
126
131
|
func vrnTruthy(_ v: String) -> Bool {
|
|
127
132
|
if v.isEmpty { return false }
|