@mybricks/to-code-taro 1.0.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.
Files changed (181) hide show
  1. package/dist/cjs/abstractEventTypeDef.d.ts +11 -0
  2. package/dist/cjs/abstractEventTypeDef.js +93 -0
  3. package/dist/cjs/core/comlib/Index.js +45 -0
  4. package/dist/cjs/core/comlib/_ScanQrcode.js +60 -0
  5. package/dist/cjs/core/comlib/_SetStorage.js +76 -0
  6. package/dist/cjs/core/comlib/_ShowToast.js +96 -0
  7. package/dist/cjs/core/mybricks/MyBricksDescriptor.js +213 -0
  8. package/dist/cjs/core/mybricks/Subject.js +115 -0
  9. package/dist/cjs/core/mybricks/constant.js +70 -0
  10. package/dist/cjs/core/mybricks/context.js +33 -0
  11. package/dist/cjs/core/mybricks/createEnv.js +39 -0
  12. package/dist/cjs/core/mybricks/createJSHandle.js +150 -0
  13. package/dist/cjs/core/mybricks/createModuleEventsHandle.js +49 -0
  14. package/dist/cjs/core/mybricks/createReactiveInputHandler.js +63 -0
  15. package/dist/cjs/core/mybricks/event.js +70 -0
  16. package/dist/cjs/core/mybricks/index.js +871 -0
  17. package/dist/cjs/core/mybricks/log.js +38 -0
  18. package/dist/cjs/core/mybricks/utils.js +69 -0
  19. package/dist/cjs/core/mybricks/variables.js +217 -0
  20. package/dist/cjs/core/utils/ComContext.js +39 -0
  21. package/dist/cjs/core/utils/index.js +88 -0
  22. package/dist/cjs/core/utils/useContext.js +53 -0
  23. package/dist/cjs/core/utils/with.js +84 -0
  24. package/dist/cjs/generate/generateTaroProjectJson.d.ts +24 -0
  25. package/dist/cjs/generate/generateTaroProjectJson.js +101 -0
  26. package/dist/cjs/generate/generateTaroTempalteJson.d.ts +15 -0
  27. package/dist/cjs/generate/generateTaroTempalteJson.js +103 -0
  28. package/dist/cjs/generate/utils/appConfig.d.ts +21 -0
  29. package/dist/cjs/generate/utils/appConfig.js +47 -0
  30. package/dist/cjs/generate/utils/commonDir.d.ts +21 -0
  31. package/dist/cjs/generate/utils/commonDir.js +50 -0
  32. package/dist/cjs/generate/utils/fileNode.d.ts +17 -0
  33. package/dist/cjs/generate/utils/fileNode.js +57 -0
  34. package/dist/cjs/generate/utils/index.d.ts +7 -0
  35. package/dist/cjs/generate/utils/index.js +29 -0
  36. package/dist/cjs/generate/utils/tabBarImages.d.ts +14 -0
  37. package/dist/cjs/generate/utils/tabBarImages.js +36 -0
  38. package/dist/cjs/handleCom.d.ts +31 -0
  39. package/dist/cjs/handleCom.js +260 -0
  40. package/dist/cjs/handleDom.d.ts +19 -0
  41. package/dist/cjs/handleDom.js +86 -0
  42. package/dist/cjs/handleExtension.d.ts +10 -0
  43. package/dist/cjs/handleExtension.js +300 -0
  44. package/dist/cjs/handleGlobal.d.ts +21 -0
  45. package/dist/cjs/handleGlobal.js +155 -0
  46. package/dist/cjs/handleModule.d.ts +15 -0
  47. package/dist/cjs/handleModule.js +108 -0
  48. package/dist/cjs/handleSlot.d.ts +27 -0
  49. package/dist/cjs/handleSlot.js +197 -0
  50. package/dist/cjs/index.d.ts +3 -0
  51. package/dist/cjs/index.js +44 -0
  52. package/dist/cjs/taro-template.json +5370 -0
  53. package/dist/cjs/toCodeTaro.d.ts +130 -0
  54. package/dist/cjs/toCodeTaro.js +427 -0
  55. package/dist/cjs/utils/code/component.d.ts +19 -0
  56. package/dist/cjs/utils/code/component.js +85 -0
  57. package/dist/cjs/utils/code/index.d.ts +18 -0
  58. package/dist/cjs/utils/code/index.js +71 -0
  59. package/dist/cjs/utils/code/renderManager.d.ts +22 -0
  60. package/dist/cjs/utils/code/renderManager.js +80 -0
  61. package/dist/cjs/utils/code/scene.d.ts +19 -0
  62. package/dist/cjs/utils/code/scene.js +82 -0
  63. package/dist/cjs/utils/convertNamespace.d.ts +11 -0
  64. package/dist/cjs/utils/convertNamespace.js +43 -0
  65. package/dist/cjs/utils/genJSModules.d.ts +12 -0
  66. package/dist/cjs/utils/genJSModules.js +116 -0
  67. package/dist/cjs/utils/getComponentClassName.d.ts +16 -0
  68. package/dist/cjs/utils/getComponentClassName.js +47 -0
  69. package/dist/cjs/utils/handlePageConfig.d.ts +24 -0
  70. package/dist/cjs/utils/handlePageConfig.js +73 -0
  71. package/dist/cjs/utils/handleProcess.d.ts +9 -0
  72. package/dist/cjs/utils/handleProcess.js +370 -0
  73. package/dist/cjs/utils/index.d.ts +62 -0
  74. package/dist/cjs/utils/index.js +321 -0
  75. package/dist/cjs/utils/pageConfig/converter.d.ts +17 -0
  76. package/dist/cjs/utils/pageConfig/converter.js +83 -0
  77. package/dist/cjs/utils/pageConfig/index.d.ts +10 -0
  78. package/dist/cjs/utils/pageConfig/index.js +33 -0
  79. package/dist/cjs/utils/pageConfig/pageConfig.d.ts +10 -0
  80. package/dist/cjs/utils/pageConfig/pageConfig.js +87 -0
  81. package/dist/cjs/utils/pageConfig/saveBase64Image.d.ts +14 -0
  82. package/dist/cjs/utils/pageConfig/saveBase64Image.js +81 -0
  83. package/dist/cjs/utils/pageConfig/tabBarConfig.d.ts +13 -0
  84. package/dist/cjs/utils/pageConfig/tabBarConfig.js +74 -0
  85. package/dist/cjs/utils/pageConfig/types.d.ts +68 -0
  86. package/dist/cjs/utils/pageConfig/types.js +17 -0
  87. package/dist/cjs/utils/pageConfig/validator.d.ts +13 -0
  88. package/dist/cjs/utils/pageConfig/validator.js +67 -0
  89. package/dist/cjs/utils/pxtransform.d.ts +28 -0
  90. package/dist/cjs/utils/pxtransform.js +102 -0
  91. package/dist/esm/abstractEventTypeDef.d.ts +11 -0
  92. package/dist/esm/abstractEventTypeDef.js +63 -0
  93. package/dist/esm/core/comlib/Index.js +3 -0
  94. package/dist/esm/core/comlib/_ScanQrcode.js +27 -0
  95. package/dist/esm/core/comlib/_SetStorage.js +52 -0
  96. package/dist/esm/core/comlib/_ShowToast.js +68 -0
  97. package/dist/esm/core/mybricks/MyBricksDescriptor.js +232 -0
  98. package/dist/esm/core/mybricks/Subject.js +143 -0
  99. package/dist/esm/core/mybricks/constant.js +18 -0
  100. package/dist/esm/core/mybricks/context.js +5 -0
  101. package/dist/esm/core/mybricks/createEnv.js +9 -0
  102. package/dist/esm/core/mybricks/createJSHandle.js +138 -0
  103. package/dist/esm/core/mybricks/createModuleEventsHandle.js +26 -0
  104. package/dist/esm/core/mybricks/createReactiveInputHandler.js +40 -0
  105. package/dist/esm/core/mybricks/event.js +44 -0
  106. package/dist/esm/core/mybricks/index.js +952 -0
  107. package/dist/esm/core/mybricks/log.js +12 -0
  108. package/dist/esm/core/mybricks/utils.js +41 -0
  109. package/dist/esm/core/mybricks/variables.js +190 -0
  110. package/dist/esm/core/utils/ComContext.js +10 -0
  111. package/dist/esm/core/utils/index.js +57 -0
  112. package/dist/esm/core/utils/useContext.js +24 -0
  113. package/dist/esm/core/utils/with.js +67 -0
  114. package/dist/esm/generate/generateTaroProjectJson.d.ts +24 -0
  115. package/dist/esm/generate/generateTaroProjectJson.js +102 -0
  116. package/dist/esm/generate/generateTaroTempalteJson.d.ts +15 -0
  117. package/dist/esm/generate/generateTaroTempalteJson.js +94 -0
  118. package/dist/esm/generate/utils/appConfig.d.ts +21 -0
  119. package/dist/esm/generate/utils/appConfig.js +30 -0
  120. package/dist/esm/generate/utils/commonDir.d.ts +21 -0
  121. package/dist/esm/generate/utils/commonDir.js +36 -0
  122. package/dist/esm/generate/utils/fileNode.d.ts +17 -0
  123. package/dist/esm/generate/utils/fileNode.js +49 -0
  124. package/dist/esm/generate/utils/index.d.ts +7 -0
  125. package/dist/esm/generate/utils/index.js +8 -0
  126. package/dist/esm/generate/utils/tabBarImages.d.ts +14 -0
  127. package/dist/esm/generate/utils/tabBarImages.js +15 -0
  128. package/dist/esm/handleCom.d.ts +31 -0
  129. package/dist/esm/handleCom.js +297 -0
  130. package/dist/esm/handleDom.d.ts +19 -0
  131. package/dist/esm/handleDom.js +63 -0
  132. package/dist/esm/handleExtension.d.ts +10 -0
  133. package/dist/esm/handleExtension.js +243 -0
  134. package/dist/esm/handleGlobal.d.ts +21 -0
  135. package/dist/esm/handleGlobal.js +117 -0
  136. package/dist/esm/handleModule.d.ts +15 -0
  137. package/dist/esm/handleModule.js +78 -0
  138. package/dist/esm/handleSlot.d.ts +27 -0
  139. package/dist/esm/handleSlot.js +205 -0
  140. package/dist/esm/index.d.ts +3 -0
  141. package/dist/esm/index.js +3 -0
  142. package/dist/esm/taro-template.json +5370 -0
  143. package/dist/esm/toCodeTaro.d.ts +130 -0
  144. package/dist/esm/toCodeTaro.js +452 -0
  145. package/dist/esm/utils/code/component.d.ts +19 -0
  146. package/dist/esm/utils/code/component.js +54 -0
  147. package/dist/esm/utils/code/index.d.ts +18 -0
  148. package/dist/esm/utils/code/index.js +51 -0
  149. package/dist/esm/utils/code/renderManager.d.ts +22 -0
  150. package/dist/esm/utils/code/renderManager.js +62 -0
  151. package/dist/esm/utils/code/scene.d.ts +19 -0
  152. package/dist/esm/utils/code/scene.js +47 -0
  153. package/dist/esm/utils/convertNamespace.d.ts +11 -0
  154. package/dist/esm/utils/convertNamespace.js +27 -0
  155. package/dist/esm/utils/genJSModules.d.ts +12 -0
  156. package/dist/esm/utils/genJSModules.js +44 -0
  157. package/dist/esm/utils/getComponentClassName.d.ts +16 -0
  158. package/dist/esm/utils/getComponentClassName.js +37 -0
  159. package/dist/esm/utils/handlePageConfig.d.ts +24 -0
  160. package/dist/esm/utils/handlePageConfig.js +68 -0
  161. package/dist/esm/utils/handleProcess.d.ts +9 -0
  162. package/dist/esm/utils/handleProcess.js +379 -0
  163. package/dist/esm/utils/index.d.ts +62 -0
  164. package/dist/esm/utils/index.js +345 -0
  165. package/dist/esm/utils/pageConfig/converter.d.ts +17 -0
  166. package/dist/esm/utils/pageConfig/converter.js +105 -0
  167. package/dist/esm/utils/pageConfig/index.d.ts +10 -0
  168. package/dist/esm/utils/pageConfig/index.js +11 -0
  169. package/dist/esm/utils/pageConfig/pageConfig.d.ts +10 -0
  170. package/dist/esm/utils/pageConfig/pageConfig.js +60 -0
  171. package/dist/esm/utils/pageConfig/saveBase64Image.d.ts +14 -0
  172. package/dist/esm/utils/pageConfig/saveBase64Image.js +105 -0
  173. package/dist/esm/utils/pageConfig/tabBarConfig.d.ts +13 -0
  174. package/dist/esm/utils/pageConfig/tabBarConfig.js +82 -0
  175. package/dist/esm/utils/pageConfig/types.d.ts +68 -0
  176. package/dist/esm/utils/pageConfig/types.js +1 -0
  177. package/dist/esm/utils/pageConfig/validator.d.ts +13 -0
  178. package/dist/esm/utils/pageConfig/validator.js +64 -0
  179. package/dist/esm/utils/pxtransform.d.ts +28 -0
  180. package/dist/esm/utils/pxtransform.js +121 -0
  181. package/package.json +74 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TabBar 配置工具
3
+ * 负责从 tabBar 数据生成 app.config.ts 中的 tabBar 配置字符串
4
+ */
5
+ import type { ImageFileInfo } from './types';
6
+ /**
7
+ * 从 tabBar 数据生成 TabBar 配置字符串(用于 app.config.ts)
8
+ * @param tabBar tabBar 数据数组(来自 scenes[x].coms[id].model.data.tabBar)
9
+ * @param pageIdToPath 页面 ID 到路径的映射函数(默认使用 pages/${pageId}/index)
10
+ * @param imageFiles 用于收集需要保存的图片文件的数组(可选)
11
+ * @returns TabBar 配置字符串,如果验证失败则返回 null
12
+ */
13
+ export declare function generateTabBarConfigContent(tabBar: any[] | undefined, pageIdToPath?: (pageId: string) => string, imageFiles?: ImageFileInfo[]): string | null;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * TabBar 配置工具
3
+ * 负责从 tabBar 数据生成 app.config.ts 中的 tabBar 配置字符串
4
+ */
5
+
6
+ import { convertToTaroTabBarConfig } from "./converter";
7
+ import { processTabBarIcon } from "./saveBase64Image";
8
+
9
+ /**
10
+ * 从 tabBar 数据生成 TabBar 配置字符串(用于 app.config.ts)
11
+ * @param tabBar tabBar 数据数组(来自 scenes[x].coms[id].model.data.tabBar)
12
+ * @param pageIdToPath 页面 ID 到路径的映射函数(默认使用 pages/${pageId}/index)
13
+ * @param imageFiles 用于收集需要保存的图片文件的数组(可选)
14
+ * @returns TabBar 配置字符串,如果验证失败则返回 null
15
+ */
16
+ export function generateTabBarConfigContent(tabBar) {
17
+ var pageIdToPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (pageId) {
18
+ return "pages/".concat(pageId, "/index");
19
+ };
20
+ var imageFiles = arguments.length > 2 ? arguments[2] : undefined;
21
+ if (!tabBar || !Array.isArray(tabBar)) {
22
+ return null;
23
+ }
24
+
25
+ // 转换为 Taro 配置格式
26
+ // 如果启用 base64 处理,传入 processTabBarIcon 函数
27
+ var iconProcessor = imageFiles ? function (iconPath, index, type) {
28
+ return processTabBarIcon(iconPath, index, type, imageFiles);
29
+ } : undefined;
30
+ var config = convertToTaroTabBarConfig(tabBar, pageIdToPath, iconProcessor);
31
+ if (!config) {
32
+ return null;
33
+ }
34
+
35
+ // 转换为 app.config.ts 中的字符串格式
36
+ return formatTabBarConfigForAppConfig(config);
37
+ }
38
+
39
+ /**
40
+ * 将 TabBar 配置转换为 app.config.ts 中的字符串格式
41
+ * @param config TabBar 配置
42
+ * @param indent 缩进字符串,默认为 2 个空格
43
+ * @returns 配置字符串
44
+ */
45
+ function formatTabBarConfigForAppConfig(config) {
46
+ var indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' ';
47
+ var lines = [];
48
+ lines.push("".concat(indent, "tabBar: {"));
49
+
50
+ // 添加颜色配置(如果存在)
51
+ if (config.color) {
52
+ lines.push("".concat(indent, " color: '").concat(config.color, "',"));
53
+ }
54
+ if (config.selectedColor) {
55
+ lines.push("".concat(indent, " selectedColor: '").concat(config.selectedColor, "',"));
56
+ }
57
+ if (config.backgroundColor) {
58
+ lines.push("".concat(indent, " backgroundColor: '").concat(config.backgroundColor, "',"));
59
+ }
60
+ if (config.borderStyle) {
61
+ lines.push("".concat(indent, " borderStyle: '").concat(config.borderStyle, "',"));
62
+ }
63
+
64
+ // 添加 list 配置
65
+ lines.push("".concat(indent, " list: ["));
66
+ config.list.forEach(function (item, index) {
67
+ var isLast = index === config.list.length - 1;
68
+ lines.push("".concat(indent, " {"));
69
+ lines.push("".concat(indent, " pagePath: '").concat(item.pagePath, "',"));
70
+ lines.push("".concat(indent, " text: '").concat(item.text, "',"));
71
+ if (item.iconPath) {
72
+ lines.push("".concat(indent, " iconPath: '").concat(item.iconPath, "',"));
73
+ }
74
+ if (item.selectedIconPath) {
75
+ lines.push("".concat(indent, " selectedIconPath: '").concat(item.selectedIconPath, "',"));
76
+ }
77
+ lines.push("".concat(indent, " }").concat(isLast ? '' : ','));
78
+ });
79
+ lines.push("".concat(indent, " ]"));
80
+ lines.push("".concat(indent, "}"));
81
+ return lines.join('\n');
82
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * TabBar 相关类型定义
3
+ */
4
+ /// <reference types="node" />
5
+ /// <reference types="node" />
6
+ /**
7
+ * TabBar 项源数据(来自 toJson.tabbar)
8
+ */
9
+ export interface TabBarItemSource {
10
+ scene: {
11
+ id: string;
12
+ title?: string;
13
+ };
14
+ text?: string;
15
+ type?: string;
16
+ normalIconPath?: string;
17
+ selectedIconPath?: string;
18
+ normalTextStyle?: Record<string, any>;
19
+ selectedTextStyle?: Record<string, any>;
20
+ normalIconStyle?: Record<string, any>;
21
+ selectedIconStyle?: Record<string, any>;
22
+ normalBackgroundStyle?: Record<string, any>;
23
+ selectedBackgroundStyle?: Record<string, any>;
24
+ subMenu?: Array<{
25
+ scene: {
26
+ id: string;
27
+ title?: string;
28
+ };
29
+ normalIconPath?: string;
30
+ normalTextStyle?: Record<string, any>;
31
+ normalIconStyle?: Record<string, any>;
32
+ normalBackgroundStyle?: Record<string, any>;
33
+ }>;
34
+ }
35
+ /**
36
+ * Taro TabBar 项配置
37
+ */
38
+ export interface TaroTabBarItem {
39
+ pagePath: string;
40
+ text: string;
41
+ iconPath?: string;
42
+ selectedIconPath?: string;
43
+ }
44
+ /**
45
+ * Taro TabBar 配置
46
+ */
47
+ export interface TaroTabBarConfig {
48
+ color?: string;
49
+ selectedColor?: string;
50
+ backgroundColor?: string;
51
+ borderStyle?: string;
52
+ list: TaroTabBarItem[];
53
+ }
54
+ /**
55
+ * TabBar 验证结果
56
+ */
57
+ export interface TabBarValidationResult {
58
+ useTabBar: boolean;
59
+ validItems: TabBarItemSource[];
60
+ error?: string;
61
+ }
62
+ /**
63
+ * 图片文件信息
64
+ */
65
+ export interface ImageFileInfo {
66
+ filePath: string;
67
+ fileContent: Buffer;
68
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { TabBarItemSource, TabBarValidationResult } from './types';
2
+ /**
3
+ * 验证 TabBar 配置
4
+ * @param tabBar TabBar 项数组(来自 toJson.tabbar)
5
+ * @returns 验证结果
6
+ */
7
+ export declare function validateTabBar(tabBar: TabBarItemSource[] | undefined | null): TabBarValidationResult;
8
+ /**
9
+ * 判断是否启用 TabBar
10
+ * @param tabBar TabBar 项数组
11
+ * @returns 是否启用
12
+ */
13
+ export declare function shouldUseTabBar(tabBar: TabBarItemSource[] | undefined | null): boolean;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * TabBar 验证器
3
+ * 负责验证 TabBar 配置是否有效
4
+ */
5
+
6
+ /** TabBar 项的最小数量 */
7
+ var MIN_TAB_BAR_ITEMS = 2;
8
+
9
+ /** TabBar 项的最大数量 */
10
+ var MAX_TAB_BAR_ITEMS = 5;
11
+
12
+ /**
13
+ * 验证 TabBar 配置
14
+ * @param tabBar TabBar 项数组(来自 toJson.tabbar)
15
+ * @returns 验证结果
16
+ */
17
+ export function validateTabBar(tabBar) {
18
+ // 如果 tabBar 不存在或不是数组,返回不启用
19
+ if (!Array.isArray(tabBar)) {
20
+ return {
21
+ useTabBar: false,
22
+ validItems: [],
23
+ error: 'TabBar 配置不存在或格式错误'
24
+ };
25
+ }
26
+
27
+ // 过滤出有效的 TabBar 项(必须有 scene.id)
28
+ var validItems = tabBar.filter(function (item) {
29
+ var _item$scene;
30
+ return !!(item !== null && item !== void 0 && (_item$scene = item.scene) !== null && _item$scene !== void 0 && _item$scene.id);
31
+ });
32
+
33
+ // 检查数量是否在有效范围内
34
+ var itemCount = validItems.length;
35
+ if (itemCount < MIN_TAB_BAR_ITEMS) {
36
+ return {
37
+ useTabBar: false,
38
+ validItems: [],
39
+ error: "TabBar \u9879\u6570\u91CF\u4E0D\u8DB3\uFF0C\u9700\u8981\u81F3\u5C11 ".concat(MIN_TAB_BAR_ITEMS, " \u4E2A\uFF0C\u5F53\u524D ").concat(itemCount, " \u4E2A")
40
+ };
41
+ }
42
+ if (itemCount > MAX_TAB_BAR_ITEMS) {
43
+ return {
44
+ useTabBar: false,
45
+ validItems: [],
46
+ error: "TabBar \u9879\u6570\u91CF\u8FC7\u591A\uFF0C\u6700\u591A ".concat(MAX_TAB_BAR_ITEMS, " \u4E2A\uFF0C\u5F53\u524D ").concat(itemCount, " \u4E2A")
47
+ };
48
+ }
49
+
50
+ // 验证通过
51
+ return {
52
+ useTabBar: true,
53
+ validItems: validItems
54
+ };
55
+ }
56
+
57
+ /**
58
+ * 判断是否启用 TabBar
59
+ * @param tabBar TabBar 项数组
60
+ * @returns 是否启用
61
+ */
62
+ export function shouldUseTabBar(tabBar) {
63
+ return validateTabBar(tabBar).useTabBar;
64
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * px 转 rpx 适配方法
3
+ * 用于 Taro/小程序样式转换
4
+ *
5
+ * 转换规则:
6
+ * - 如果 px 值 <= MIN_PX_THRESHOLD,保持为 px(避免 1px 边框等问题)
7
+ * - 否则转换为 rpx(px * 2,基于 375px 设计稿)
8
+ *
9
+ * 注意:Taro 中 rpx 需要作为字符串使用,如 "20rpx"
10
+ */
11
+ /** 最小 px 阈值,小于等于此值的 px 不转换为 rpx */
12
+ export declare const MIN_PX_THRESHOLD = 1;
13
+ /** rem 基准值,默认 px = 1rem */
14
+ export declare const REM_BASE = 20;
15
+ /**
16
+ * 将 px 值转换为 rpx(用于 Taro 小程序)
17
+ * @param value - 样式值,可以是字符串(如 "10px")或数字(如 10)
18
+ * @returns 转换后的值,字符串类型(如 "20rpx")或数字(如 1,用于小于等于 MIN_PX_THRESHOLD 的情况)
19
+ */
20
+ export declare function pxToRpx(value: string | number): string | number;
21
+ /**
22
+ * 将 px 值转换为 rem(用于 H5/Web)
23
+ * @param value - 样式值,可以是字符串(如 "16px")或数字(如 16)
24
+ * @returns 转换后的值,字符串类型(如 "1rem")或数字(如 1,用于小于等于 MIN_PX_THRESHOLD 的情况)
25
+ */
26
+ export declare function pxToRem(value: string | number): string | number;
27
+ declare const pxtransform: (value: string | number, type?: "rpx" | "rem") => string | number;
28
+ export default pxtransform;
@@ -0,0 +1,121 @@
1
+ /**
2
+ * px 转 rpx 适配方法
3
+ * 用于 Taro/小程序样式转换
4
+ *
5
+ * 转换规则:
6
+ * - 如果 px 值 <= MIN_PX_THRESHOLD,保持为 px(避免 1px 边框等问题)
7
+ * - 否则转换为 rpx(px * 2,基于 375px 设计稿)
8
+ *
9
+ * 注意:Taro 中 rpx 需要作为字符串使用,如 "20rpx"
10
+ */
11
+
12
+ /** 最小 px 阈值,小于等于此值的 px 不转换为 rpx */
13
+ export var MIN_PX_THRESHOLD = 1;
14
+
15
+ /** rem 基准值,默认 px = 1rem */
16
+ export var REM_BASE = 20;
17
+
18
+ /**
19
+ * 检查值是否是 px 格式(数字+px 或纯数字)
20
+ * @param value - 样式值
21
+ * @returns 如果是 px 格式返回 true,否则返回 false
22
+ */
23
+ function isPxValue(value) {
24
+ if (typeof value === "number") {
25
+ return true; // 纯数字视为 px
26
+ }
27
+ if (typeof value === "string") {
28
+ // 匹配 "数字px" 格式
29
+ var regex = /^(\d*\.?\d+)px$/;
30
+ return regex.test(value);
31
+ }
32
+ return false;
33
+ }
34
+
35
+ /**
36
+ * 将 px 值转换为 rpx(用于 Taro 小程序)
37
+ * @param value - 样式值,可以是字符串(如 "10px")或数字(如 10)
38
+ * @returns 转换后的值,字符串类型(如 "20rpx")或数字(如 1,用于小于等于 MIN_PX_THRESHOLD 的情况)
39
+ */
40
+ export function pxToRpx(value) {
41
+ // 如果是数字
42
+ if (typeof value === "number") {
43
+ // 小于等于 MIN_PX_THRESHOLD 的保持原值(作为 px,返回数字)
44
+ if (value <= MIN_PX_THRESHOLD) {
45
+ return value;
46
+ }
47
+ // 其他值转换为 rpx 字符串
48
+ return "".concat(value * 2, "rpx");
49
+ }
50
+
51
+ // 如果是字符串
52
+ if (typeof value === "string") {
53
+ // 匹配 "数字px" 格式
54
+ var regex = /^(\d*\.?\d+)px$/;
55
+ var match = value.match(regex);
56
+ if (match) {
57
+ var pxValue = parseFloat(match[1]);
58
+ // 小于等于 MIN_PX_THRESHOLD 的保持为 px(返回数字,React 会自动添加 "px")
59
+ if (pxValue <= MIN_PX_THRESHOLD) {
60
+ return pxValue;
61
+ }
62
+ // 其他值转换为 rpx 字符串
63
+ return "".concat(pxValue * 2, "rpx");
64
+ }
65
+
66
+ // 如果不包含 px,可能是百分比或其他单位,保持原样
67
+ return value;
68
+ }
69
+ return value;
70
+ }
71
+
72
+ /**
73
+ * 将 px 值转换为 rem(用于 H5/Web)
74
+ * @param value - 样式值,可以是字符串(如 "16px")或数字(如 16)
75
+ * @returns 转换后的值,字符串类型(如 "1rem")或数字(如 1,用于小于等于 MIN_PX_THRESHOLD 的情况)
76
+ */
77
+ export function pxToRem(value) {
78
+ // 如果是数字
79
+ if (typeof value === "number") {
80
+ // 小于等于 MIN_PX_THRESHOLD 的保持原值(作为 px,返回数字)
81
+ if (value <= MIN_PX_THRESHOLD) {
82
+ return value;
83
+ }
84
+ // 其他值转换为 rem 字符串
85
+ var remValue = value / REM_BASE;
86
+ return "".concat(remValue, "rem");
87
+ }
88
+
89
+ // 如果是字符串
90
+ if (typeof value === "string") {
91
+ // 匹配 "数字px" 格式
92
+ var regex = /^(\d*\.?\d+)px$/;
93
+ var match = value.match(regex);
94
+ if (match) {
95
+ var pxValue = parseFloat(match[1]);
96
+ // 小于等于 MIN_PX_THRESHOLD 的保持为 px(返回数字,React 会自动添加 "px")
97
+ if (pxValue <= MIN_PX_THRESHOLD) {
98
+ return pxValue;
99
+ }
100
+ // 其他值转换为 rem 字符串
101
+ var _remValue = pxValue / REM_BASE;
102
+ return "".concat(_remValue, "rem");
103
+ }
104
+
105
+ // 如果不包含 px,可能是百分比或其他单位,保持原样
106
+ return value;
107
+ }
108
+ return value;
109
+ }
110
+ var pxtransform = function pxtransform(value) {
111
+ var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "rpx";
112
+ if (isPxValue(value)) {
113
+ if (type === "rpx") {
114
+ return pxToRpx(value);
115
+ } else if (type === "rem") {
116
+ return pxToRem(value);
117
+ }
118
+ }
119
+ return value;
120
+ };
121
+ export default pxtransform;
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@mybricks/to-code-taro",
3
+ "version": "1.0.0",
4
+ "description": "To code for Taro",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/esm/index.d.ts",
8
+ "scripts": {
9
+ "dev": "father dev",
10
+ "build": "father build",
11
+ "gen": "tsx src/generateFiles.ts",
12
+ "build:deps": "father prebundle",
13
+ "prepublishOnly": "father doctor && npm run build",
14
+ "test": "tsx test/index.ts",
15
+ "test:project": "tsx test/genProject.ts",
16
+ "test:template": "tsx test/genTemplate.ts",
17
+ "test:watch": "ts-node-dev --respawn test/index.ts",
18
+ "test:harmony": "tsx test/write-harmony-output.ts",
19
+ "test:taro": "tsx test/write-taro-output.ts"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/mybricks/to-code-taro"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public",
27
+ "registry": "https://registry.npmjs.org"
28
+ },
29
+ "author": "MyBricks Team",
30
+ "license": "ISC",
31
+ "keywords": [
32
+ "taro",
33
+ "code-generator",
34
+ "mybricks"
35
+ ],
36
+ "files": [
37
+ "dist",
38
+ "compiled"
39
+ ],
40
+ "dependencies": {
41
+ "@babel/runtime": "^7.26.0",
42
+ "@mybricks/to-code-react": "^0.0.5-next.160"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^20.0.0",
46
+ "@types/react": "^18.0.0",
47
+ "csstype": "^3.1.3",
48
+ "father": "^4.5.1",
49
+ "ts-node": "^10.9.2",
50
+ "ts-node-dev": "^2.0.0",
51
+ "tsx": "^4.21.0",
52
+ "typescript": "^5.0.0"
53
+ },
54
+ "peerDependencies": {
55
+ "@mybricks/code-next": "*",
56
+ "@tarojs/components": "*",
57
+ "@tarojs/taro": "*",
58
+ "react": "*"
59
+ },
60
+ "peerDependenciesMeta": {
61
+ "@mybricks/code-next": {
62
+ "optional": true
63
+ },
64
+ "@tarojs/components": {
65
+ "optional": true
66
+ },
67
+ "@tarojs/taro": {
68
+ "optional": true
69
+ },
70
+ "react": {
71
+ "optional": true
72
+ }
73
+ }
74
+ }