@mybricks/to-code-taro 1.0.8 → 1.1.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 (120) hide show
  1. package/dist/cjs/core/comlib/_Modal.js +68 -0
  2. package/dist/cjs/core/comlib/_TimerDelay.js +55 -30
  3. package/dist/cjs/core/comlib/index.js +3 -0
  4. package/dist/cjs/core/mybricks/log.js +0 -1
  5. package/dist/cjs/core/utils/hooks.js +3 -2
  6. package/dist/cjs/core/utils/slots.js +11 -5
  7. package/dist/cjs/core/utils/useContext.js +5 -3
  8. package/dist/cjs/core/utils/with.js +5 -6
  9. package/dist/cjs/generate/generateTaroProjectJson.js +18 -1
  10. package/dist/cjs/handleCom.js +47 -73
  11. package/dist/cjs/handleSlot.js +5 -3
  12. package/dist/cjs/processors/processComEvents.js +2 -3
  13. package/dist/cjs/processors/processModule.js +23 -0
  14. package/dist/cjs/processors/processScene.js +23 -0
  15. package/dist/cjs/processors/processSceneLogic.d.ts +4 -1
  16. package/dist/cjs/processors/processSceneLogic.js +72 -12
  17. package/dist/cjs/taro-template.json +68 -42
  18. package/dist/cjs/toCodeTaro.d.ts +14 -1
  19. package/dist/cjs/toCodeTaro.js +1 -0
  20. package/dist/cjs/utils/builder/buildResult.d.ts +1 -0
  21. package/dist/cjs/utils/builder/buildResult.js +8 -1
  22. package/dist/cjs/utils/common/helper.d.ts +10 -0
  23. package/dist/cjs/utils/common/helper.js +21 -0
  24. package/dist/cjs/utils/common/string.d.ts +10 -0
  25. package/dist/cjs/utils/common/string.js +13 -0
  26. package/dist/cjs/utils/config/content/converter.js +1 -0
  27. package/dist/cjs/utils/config/content/tabBarConfig.d.ts +19 -4
  28. package/dist/cjs/utils/config/content/tabBarConfig.js +18 -1
  29. package/dist/cjs/utils/config/content/types.d.ts +15 -10
  30. package/dist/cjs/utils/config/handlePageConfig.d.ts +6 -0
  31. package/dist/cjs/utils/config/handlePageConfig.js +13 -1
  32. package/dist/cjs/utils/logic/handleProcess.js +50 -33
  33. package/dist/cjs/utils/style/converter.js +1 -6
  34. package/dist/cjs/utils/templates/index.d.ts +1 -0
  35. package/dist/cjs/utils/templates/index.js +11 -4
  36. package/dist/cjs/utils/templates/renderManager.js +4 -2
  37. package/dist/cjs/utils/templates/scene.d.ts +2 -1
  38. package/dist/cjs/utils/templates/scene.js +4 -3
  39. package/dist/esm/abstractEventTypeDef.d.ts.map +1 -0
  40. package/dist/esm/core/comlib/_Modal.js +51 -0
  41. package/dist/esm/core/comlib/_TimerDelay.js +46 -14
  42. package/dist/esm/core/comlib/index.js +2 -0
  43. package/dist/esm/core/mybricks/log.js +1 -5
  44. package/dist/esm/core/utils/hooks.js +7 -2
  45. package/dist/esm/core/utils/slots.js +28 -10
  46. package/dist/esm/core/utils/useContext.js +9 -3
  47. package/dist/esm/core/utils/with.js +5 -9
  48. package/dist/esm/generate/generateTaroProjectJson.d.ts.map +1 -0
  49. package/dist/esm/generate/generateTaroProjectJson.js +22 -0
  50. package/dist/esm/generate/generateTaroTempalteJson.d.ts.map +1 -0
  51. package/dist/esm/generate/utils/appConfig.d.ts.map +1 -0
  52. package/dist/esm/generate/utils/commonDir.d.ts.map +1 -0
  53. package/dist/esm/generate/utils/fileNode.d.ts.map +1 -0
  54. package/dist/esm/generate/utils/index.d.ts.map +1 -0
  55. package/dist/esm/generate/utils/tabBarImages.d.ts.map +1 -0
  56. package/dist/esm/handleCom.js +60 -95
  57. package/dist/esm/handleDom.d.ts.map +1 -0
  58. package/dist/esm/handleExtension.d.ts.map +1 -0
  59. package/dist/esm/handleGlobal.d.ts.map +1 -0
  60. package/dist/esm/handleModule.d.ts.map +1 -0
  61. package/dist/esm/handleSlot.js +9 -4
  62. package/dist/esm/index.d.ts.map +1 -0
  63. package/dist/esm/processors/processComEvents.js +6 -3
  64. package/dist/esm/processors/processModule.d.ts.map +1 -0
  65. package/dist/esm/processors/processModule.js +35 -0
  66. package/dist/esm/processors/processScene.d.ts.map +1 -0
  67. package/dist/esm/processors/processScene.js +35 -0
  68. package/dist/esm/processors/processSceneLogic.d.ts +4 -1
  69. package/dist/esm/processors/processSceneLogic.js +90 -15
  70. package/dist/esm/taro-template.json +68 -42
  71. package/dist/esm/toCodeTaro.d.ts +14 -1
  72. package/dist/esm/toCodeTaro.d.ts.map +1 -0
  73. package/dist/esm/toCodeTaro.js +1 -0
  74. package/dist/esm/utils/builder/buildResult.d.ts +1 -0
  75. package/dist/esm/utils/builder/buildResult.d.ts.map +1 -0
  76. package/dist/esm/utils/builder/buildResult.js +8 -1
  77. package/dist/esm/utils/common/ImportManager.d.ts.map +1 -0
  78. package/dist/esm/utils/common/helper.d.ts +10 -0
  79. package/dist/esm/utils/common/helper.js +29 -0
  80. package/dist/esm/utils/common/object.d.ts.map +1 -0
  81. package/dist/esm/utils/common/string.d.ts +10 -0
  82. package/dist/esm/utils/common/string.d.ts.map +1 -0
  83. package/dist/esm/utils/common/string.js +16 -0
  84. package/dist/esm/utils/config/content/converter.d.ts.map +1 -0
  85. package/dist/esm/utils/config/content/converter.js +1 -0
  86. package/dist/esm/utils/config/content/index.d.ts.map +1 -0
  87. package/dist/esm/utils/config/content/pageConfig.d.ts.map +1 -0
  88. package/dist/esm/utils/config/content/saveBase64Image.d.ts.map +1 -0
  89. package/dist/esm/utils/config/content/tabBarConfig.d.ts +19 -4
  90. package/dist/esm/utils/config/content/tabBarConfig.d.ts.map +1 -0
  91. package/dist/esm/utils/config/content/tabBarConfig.js +28 -4
  92. package/dist/esm/utils/config/content/types.d.ts +15 -10
  93. package/dist/esm/utils/config/content/types.d.ts.map +1 -0
  94. package/dist/esm/utils/config/content/validator.d.ts.map +1 -0
  95. package/dist/esm/utils/config/handlePageConfig.d.ts +6 -0
  96. package/dist/esm/utils/config/handlePageConfig.d.ts.map +1 -0
  97. package/dist/esm/utils/config/handlePageConfig.js +17 -2
  98. package/dist/esm/utils/context/buildContext.d.ts.map +1 -0
  99. package/dist/esm/utils/context/buildFrameMap.d.ts.map +1 -0
  100. package/dist/esm/utils/context/buildGlobalData.d.ts.map +1 -0
  101. package/dist/esm/utils/context/collectJSModules.d.ts.map +1 -0
  102. package/dist/esm/utils/context/createEventQueries.d.ts.map +1 -0
  103. package/dist/esm/utils/context/createProvider.d.ts.map +1 -0
  104. package/dist/esm/utils/index.d.ts.map +1 -0
  105. package/dist/esm/utils/logic/convertNamespace.d.ts.map +1 -0
  106. package/dist/esm/utils/logic/genJSModules.d.ts.map +1 -0
  107. package/dist/esm/utils/logic/handleProcess.js +66 -40
  108. package/dist/esm/utils/logic/processChildren.d.ts.map +1 -0
  109. package/dist/esm/utils/style/color.d.ts.map +1 -0
  110. package/dist/esm/utils/style/converter.js +11 -8
  111. package/dist/esm/utils/style/getComponentClassName.d.ts.map +1 -0
  112. package/dist/esm/utils/style/pxtransform.d.ts.map +1 -0
  113. package/dist/esm/utils/style/types.d.ts.map +1 -0
  114. package/dist/esm/utils/templates/component.d.ts.map +1 -0
  115. package/dist/esm/utils/templates/index.d.ts +1 -0
  116. package/dist/esm/utils/templates/index.js +20 -10
  117. package/dist/esm/utils/templates/renderManager.js +5 -2
  118. package/dist/esm/utils/templates/scene.d.ts +2 -1
  119. package/dist/esm/utils/templates/scene.js +7 -6
  120. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleModule.d.ts","sourceRoot":"","sources":["handleModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAiG,MAAM,SAAS,CAAC;AAGvI,KAAK,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAE7D,UAAU,kBAAmB,SAAQ,UAAU;IAC7C,yBAAyB,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5E,WAAW,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,KAAK,IAAI,CAAC;IAC9E,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,QAAA,MAAM,YAAY,WAAY,MAAM,UAAU,kBAAkB;;;CAqG/D,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -49,12 +49,14 @@ var handleSlot = function handleSlot(ui, config) {
49
49
  currentSlotId: isRoot ? undefined : config.slotKey || slotId
50
50
  }));
51
51
 
52
- // 3. 处理场景逻辑 (Start, Inputs 等)
53
- var effectCode = processSceneLogic(ui, config, addDependencyImport);
52
+ // 3. 处理场景逻辑 (变量/FX 初始化 + Start/Inputs 等)
53
+ var _processSceneLogic = processSceneLogic(ui, config, addDependencyImport),
54
+ initCode = _processSceneLogic.initCode,
55
+ effectCode = _processSceneLogic.effectCode;
54
56
 
55
57
  // 4. 合并样式与代码
56
58
  var cssContent = (convertStyleAryToCss((_props$style = props.style) === null || _props$style === void 0 ? void 0 : _props$style.styleAry, slotId) || "") + (childResults.cssContent ? "\n" + childResults.cssContent : "");
57
- var combinedJsCode = "".concat(envDefineCode).concat(childResults.js).concat(wrapInEffect(indent2, effectCode));
59
+ var combinedJsCode = "".concat(envDefineCode).concat(childResults.js).concat(initCode).concat(wrapInEffect(indent2, effectCode));
58
60
 
59
61
  // 5. 生成 UI 结构
60
62
  var uiResult = generateSlotUi(ui, props, childResults.ui, config);
@@ -133,8 +135,10 @@ var generateSlotUi = function generateSlotUi(ui, props, childrenUi, config) {
133
135
  width: "100%",
134
136
  height: "100%"
135
137
  }, ui.style || {}), props.style || {});
138
+ // 鸿蒙化:优先使用 config 中传递的 layout(来自父容器 data.layout),否则使用 slot 自身的 layout
139
+ var layout = config.layout || ui.layout || mergedStyle.layout;
136
140
  var styleCode = JSON.stringify(convertRootStyle(_objectSpread(_objectSpread({}, mergedStyle), {}, {
137
- layout: ui.layout || mergedStyle.layout
141
+ layout: layout
138
142
  })));
139
143
  var rootClassName = getRootComponentClassName(config.getCurrentScene(), config.checkIsRoot());
140
144
  var classNameAttr = rootClassName ? " className='".concat(rootClassName, "'") : "";
@@ -150,6 +154,7 @@ var finalizeRootComponent = function finalizeRootComponent(ui, config, importMan
150
154
  var componentId = ((_ui$meta = ui.meta) === null || _ui$meta === void 0 ? void 0 : _ui$meta.id) || ui.id || ((_ui$meta2 = ui.meta) === null || _ui$meta2 === void 0 ? void 0 : _ui$meta2.slotId) || "Index";
151
155
  var componentName = "I".concat(String(componentId).replace(/[^a-zA-Z0-9]/g, "_"));
152
156
  var componentCode = genComponentTemplate({
157
+ componentId: componentId,
153
158
  componentName: componentName,
154
159
  combinedJsCode: combinedJsCode,
155
160
  renderDefinitions: renderDefinitions,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,qCAAqC,CAAC"}
@@ -58,7 +58,7 @@ export var processComEvents = function processComEvents(com, config) {
58
58
  getParams: function getParams() {
59
59
  return _defineProperty({}, eventId, paramName);
60
60
  }
61
- })).replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
61
+ })).replace(/this\.\$vars\./g, "$vars.current.").replace(/this\.\$fxs\./g, "$fxs.current.").replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
62
62
  if (process.includes("pageParams")) {
63
63
  var importParams = {
64
64
  isPopup: config.isPopup
@@ -78,8 +78,11 @@ export var processComEvents = function processComEvents(com, config) {
78
78
  if (!outputsConfig[meta.id]) {
79
79
  outputsConfig[meta.id] = {};
80
80
  }
81
- var onEventName = eventId.startsWith("on") ? eventId : "on".concat(eventId.charAt(0).toUpperCase()).concat(eventId.slice(1));
82
- outputsConfig[meta.id][onEventName] = handlerCode;
81
+
82
+ // 事件名必须与组件 runtime 的 outputs pin id 保持一致:
83
+ // - 例如 tabs2 的输出是 `changeTab`(不是 `onChangeTab`)
84
+ // - searchBar 的输出是 `onSearch`(本身就以 on 开头)
85
+ outputsConfig[meta.id][eventId] = handlerCode;
83
86
  eventConfig[eventId] = {
84
87
  connected: true
85
88
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processModule.d.ts","sourceRoot":"","sources":["processModule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,MAAM,MAAM,yCAAyC,CAAC;AAC7D,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AAC9C,KAAK,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzC,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,YAAY,EAAE,YAAY,CAAC;IAC3B,qBAAqB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;IAC3C,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;IACnC,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,WAAY,mBAAmB,KAAG,IA8G3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,YAChB,MAAM,EAAE,UACT,KAAK,mBAAmB,EAAE,QAAQ,CAAC,KAC1C,IAOF,CAAC"}
@@ -107,6 +107,41 @@ export var processModule = function processModule(params) {
107
107
  }
108
108
  abstractEventTypeDefMap[comId].eventIdMap[eventId] = schema;
109
109
  },
110
+ getCallTemplate: function getCallTemplate(params) {
111
+ var com = params.com,
112
+ pinId = params.pinId,
113
+ args = params.args;
114
+ // 优先通过 sceneId 查找,如果找不到再通过 id 查找
115
+ var targetScene = getSceneById(com.sceneId || com.id);
116
+ if (targetScene || com.isScene) {
117
+ var _targetScene$deps, _targetScene$inputs, _targetScene$outputs;
118
+ var sceneId = (targetScene === null || targetScene === void 0 ? void 0 : targetScene.id) || com.sceneId || com.id;
119
+ var isTargetPopup = (targetScene === null || targetScene === void 0 ? void 0 : targetScene.type) === 'popup' || (targetScene === null || targetScene === void 0 || (_targetScene$deps = targetScene.deps) === null || _targetScene$deps === void 0 ? void 0 : _targetScene$deps.some(function (dep) {
120
+ return dep.namespace === 'mybricks.taro.popup';
121
+ }));
122
+ var routerName = isTargetPopup ? "popupRouter" : "pageRouter";
123
+
124
+ // 动态判断 pinId 是否属于该场景的输入或输出
125
+ var isInput = targetScene === null || targetScene === void 0 || (_targetScene$inputs = targetScene.inputs) === null || _targetScene$inputs === void 0 ? void 0 : _targetScene$inputs.some(function (pin) {
126
+ return pin.id === pinId;
127
+ });
128
+ var isOutput = targetScene === null || targetScene === void 0 || (_targetScene$outputs = targetScene.outputs) === null || _targetScene$outputs === void 0 ? void 0 : _targetScene$outputs.some(function (pin) {
129
+ return pin.id === pinId;
130
+ });
131
+ if (isInput || isOutput) {
132
+ var _config$getPageId;
133
+ return {
134
+ code: "".concat(routerName, ".").concat(pinId, "(\"").concat(((_config$getPageId = config.getPageId) === null || _config$getPageId === void 0 ? void 0 : _config$getPageId.call(config, sceneId)) || sceneId, "\"").concat(args ? ", ".concat(args) : "", ")"),
135
+ import: {
136
+ packageName: config.getComponentPackageName(),
137
+ dependencyNames: [routerName],
138
+ importType: "named"
139
+ }
140
+ };
141
+ }
142
+ }
143
+ return undefined;
144
+ },
110
145
  getComponentController: function getComponentController(_ref) {
111
146
  var com = _ref.com;
112
147
  return com.id;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processScene.d.ts","sourceRoot":"","sources":["processScene.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,MAAM,MAAM,yCAAyC,CAAC;AAC7D,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AAC9C,KAAK,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvC,UAAU,kBAAkB;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,YAAY,EAAE,YAAY,CAAC;IAC3B,qBAAqB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;IAC3C,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;IACnC,iBAAiB,EAAE,GAAG,CAAC;IACvB,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,WAAY,kBAAkB,KAAG,IAkJzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,WAChB,KAAK,EAAE,UACP,KAAK,kBAAkB,EAAE,OAAO,CAAC,KACxC,IAOF,CAAC"}
@@ -93,6 +93,41 @@ export var processScene = function processScene(params) {
93
93
  // 显式传入 renderManager
94
94
  isPopup: isPopup,
95
95
  // 标记当前场景是否为弹窗
96
+ getCallTemplate: function getCallTemplate(params) {
97
+ var com = params.com,
98
+ pinId = params.pinId,
99
+ args = params.args;
100
+ // 优先通过 sceneId 查找,如果找不到再通过 id 查找
101
+ var targetScene = getSceneById(com.sceneId || com.id);
102
+ if (targetScene || com.isScene) {
103
+ var _targetScene$deps, _targetScene$inputs, _targetScene$outputs;
104
+ var sceneId = (targetScene === null || targetScene === void 0 ? void 0 : targetScene.id) || com.sceneId || com.id;
105
+ var isTargetPopup = (targetScene === null || targetScene === void 0 ? void 0 : targetScene.type) === 'popup' || (targetScene === null || targetScene === void 0 || (_targetScene$deps = targetScene.deps) === null || _targetScene$deps === void 0 ? void 0 : _targetScene$deps.some(function (dep) {
106
+ return dep.namespace === 'mybricks.taro.popup';
107
+ }));
108
+ var routerName = isTargetPopup ? "popupRouter" : "pageRouter";
109
+
110
+ // 动态判断 pinId 是否属于该场景的输入或输出
111
+ var isInput = targetScene === null || targetScene === void 0 || (_targetScene$inputs = targetScene.inputs) === null || _targetScene$inputs === void 0 ? void 0 : _targetScene$inputs.some(function (pin) {
112
+ return pin.id === pinId;
113
+ });
114
+ var isOutput = targetScene === null || targetScene === void 0 || (_targetScene$outputs = targetScene.outputs) === null || _targetScene$outputs === void 0 ? void 0 : _targetScene$outputs.some(function (pin) {
115
+ return pin.id === pinId;
116
+ });
117
+ if (isInput || isOutput) {
118
+ var _config$getPageId;
119
+ return {
120
+ code: "".concat(routerName, ".").concat(pinId, "(\"").concat(((_config$getPageId = config.getPageId) === null || _config$getPageId === void 0 ? void 0 : _config$getPageId.call(config, sceneId)) || sceneId, "\"").concat(args ? ", ".concat(args) : "", ")"),
121
+ import: {
122
+ packageName: config.getComponentPackageName(),
123
+ dependencyNames: [routerName],
124
+ importType: "named"
125
+ }
126
+ };
127
+ }
128
+ }
129
+ return undefined;
130
+ },
96
131
  getDslComNameById: function getDslComNameById(id) {
97
132
  return dslComIdToNameMap[id];
98
133
  },
@@ -1,4 +1,7 @@
1
1
  /**
2
2
  * 处理场景/插槽的逻辑(事件流、输入项等)
3
3
  */
4
- export declare const processSceneLogic: (ui: any, config: any, addDependencyImport: any) => string;
4
+ export declare const processSceneLogic: (ui: any, config: any, addDependencyImport: any) => {
5
+ initCode: string;
6
+ effectCode: string;
7
+ };
@@ -1,29 +1,99 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
- import { indentation } from "../utils";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
4
+ import { indentation, getSafeVarName, getInitValueBySchema } from "../utils";
5
5
  import { handleProcess } from "../utils/logic/handleProcess";
6
+ function sanitizeBlockComment(text) {
7
+ var s = String(text !== null && text !== void 0 ? text : "").trim();
8
+ if (!s) return "";
9
+ // 避免 title 中出现 */ 破坏注释
10
+ return s.replace(/\*\//g, "* /");
11
+ }
12
+
6
13
  /**
7
14
  * 处理场景/插槽的逻辑(事件流、输入项等)
8
15
  */
9
16
  export var processSceneLogic = function processSceneLogic(ui, config, addDependencyImport) {
17
+ var initCode = "";
10
18
  var effectCode = "";
11
19
  var indent2 = indentation(config.codeStyle.indent);
12
20
  var currentScene = config.getCurrentScene();
13
21
  var providerName = config.getCurrentProvider().name;
14
22
 
15
- // 1. 初始化变量和 FX (非 root 也要初始化,因为子场景也有自己的变量)
16
- effectCode += processLogicalInit(currentScene, config, addDependencyImport, indent2, providerName);
23
+ // 1. 初始化变量和 FX:放在 render 阶段(useEffect 之前),避免用户在首帧触发事件时 $vars/$fxs 仍未初始化
24
+ initCode += processLogicalInit(currentScene, config, addDependencyImport, indent2, providerName);
17
25
 
18
26
  // 如果不是 root,目前只处理初始化逻辑
19
- if (!config.checkIsRoot()) return effectCode;
27
+ if (!config.checkIsRoot()) return {
28
+ initCode: initCode,
29
+ effectCode: effectCode
30
+ };
20
31
 
21
32
  // 2. 处理场景级事件(如 Start 节点)
22
33
  effectCode += processSceneEvents(ui, currentScene, config, addDependencyImport, indent2);
23
34
 
24
35
  // 3. 处理场景级输入(如 open)
25
36
  effectCode += processSceneInputs(currentScene, config, addDependencyImport, indent2);
26
- return effectCode;
37
+
38
+ // 4. 处理变量监听事件(starter.type === 'var',例如 changed)
39
+ effectCode += processVarEvents(currentScene, config, addDependencyImport, indent2);
40
+ return {
41
+ initCode: initCode,
42
+ effectCode: effectCode
43
+ };
44
+ };
45
+
46
+ /**
47
+ * 处理变量监听事件(例如变量 changed -> 驱动一条 diagram)
48
+ * 关键点:更新 UI 不是靠 React state,而是靠 runtime inputs(例如 Text.value)
49
+ */
50
+ var processVarEvents = function processVarEvents(currentScene, config, addDependencyImport, indent) {
51
+ var _config$getVarEvents;
52
+ var code = "";
53
+ var varEvents = ((_config$getVarEvents = config.getVarEvents) === null || _config$getVarEvents === void 0 ? void 0 : _config$getVarEvents.call(config)) || [];
54
+ if (!Array.isArray(varEvents) || varEvents.length === 0) return code;
55
+
56
+ // 用于订阅 variable.changed() 结果
57
+ var importParams = {
58
+ isPopup: config.isPopup
59
+ };
60
+ addDependencyImport({
61
+ packageName: config.getUtilsPackageName(importParams),
62
+ dependencyNames: ["SUBJECT_SUBSCRIBE", "SUBJECT_VALUE"],
63
+ importType: "named"
64
+ });
65
+ varEvents.forEach(function (varEvent) {
66
+ if ((varEvent === null || varEvent === void 0 ? void 0 : varEvent.type) !== "var") return;
67
+ // toCode-react 的 var event 自带 meta(变量组件)+ paramId(输出 pin,如 changed/return)
68
+ var com = varEvent === null || varEvent === void 0 ? void 0 : varEvent.meta;
69
+ if (!(com !== null && com !== void 0 && com.id)) return;
70
+ var pinId = (varEvent === null || varEvent === void 0 ? void 0 : varEvent.paramId) || "changed";
71
+ var varName = getSafeVarName(com);
72
+
73
+ // params 映射:toCode-react 会用 paramSource: [{type:'params', id:'changed'}]
74
+ // 这里用 Proxy 保证任何 params.xxx 都能落到 value 上(避免强依赖 paramPins)
75
+ var paramsProxy = new Proxy({}, {
76
+ get: function get() {
77
+ return "value";
78
+ }
79
+ });
80
+ var process = handleProcess(varEvent, _objectSpread(_objectSpread({}, config), {}, {
81
+ target: "comRefs.current",
82
+ depth: 3,
83
+ addParentDependencyImport: addDependencyImport,
84
+ getParams: function getParams() {
85
+ return paramsProxy;
86
+ }
87
+ })).replace(/this\.\$vars\./g, "$vars.current.").replace(/this\.\$fxs\./g, "$fxs.current.").replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
88
+ if (!process.trim()) return;
89
+ code += "\n".concat(indent, " /** \u53D8\u91CF ").concat(sanitizeBlockComment(com.title || varName), " \u7684 ").concat(pinId, " */");
90
+ // 统一逻辑函数:changed 触发 + 首次 get() 回放(解决“set 早于订阅”的丢事件)
91
+ code += "\n".concat(indent, " const run_").concat(varName, "_").concat(pinId, " = (value: any) => {\n").concat(process, "\n").concat(indent, " };");
92
+ code += "\n".concat(indent, " $vars.current.").concat(varName, ".").concat(pinId, "?.()[SUBJECT_SUBSCRIBE](run_").concat(varName, "_").concat(pinId, ");");
93
+ code += "\n".concat(indent, " const init_").concat(varName, "_").concat(pinId, " = $vars.current.").concat(varName, ".get?.();");
94
+ code += "\n".concat(indent, " run_").concat(varName, "_").concat(pinId, "(init_").concat(varName, "_").concat(pinId, "?.[SUBJECT_VALUE]);");
95
+ });
96
+ return code;
27
97
  };
28
98
 
29
99
  /**
@@ -47,14 +117,18 @@ var processLogicalInit = function processLogicalInit(scene, config, addDependenc
47
117
  dependencyNames: ["createVariable"],
48
118
  importType: "named"
49
119
  });
50
- code += "\n".concat(indent, "const vars = comRefs.current.").concat(providerName, "_Vars;");
120
+ // $vars 是页面级共享注册表(与 comRefs 同级)
121
+ code += "\n".concat(indent, "const vars = ($vars.current ||= {});");
51
122
  vars.forEach(function (_ref3) {
52
- var _com$model;
123
+ var _com$model, _com$model2, _com$model3;
53
124
  var _ref4 = _slicedToArray(_ref3, 2),
54
125
  comId = _ref4[0],
55
126
  com = _ref4[1];
56
- var initValue = JSON.stringify(((_com$model = com.model) === null || _com$model === void 0 || (_com$model = _com$model.data) === null || _com$model === void 0 ? void 0 : _com$model.initValue) || {});
57
- code += "\n".concat(indent, "if (!vars.").concat(com.title, ".get) vars.").concat(com.title, " = createVariable(").concat(initValue, ");");
127
+ var varName = getSafeVarName(com);
128
+ var varTitle = sanitizeBlockComment((com === null || com === void 0 ? void 0 : com.title) || (com === null || com === void 0 || (_com$model = com.model) === null || _com$model === void 0 ? void 0 : _com$model.title) || (com === null || com === void 0 || (_com$model2 = com.model) === null || _com$model2 === void 0 || (_com$model2 = _com$model2.data) === null || _com$model2 === void 0 ? void 0 : _com$model2.title) || varName);
129
+ var initValue = JSON.stringify(getInitValueBySchema(com.schema, (_com$model3 = com.model) === null || _com$model3 === void 0 || (_com$model3 = _com$model3.data) === null || _com$model3 === void 0 ? void 0 : _com$model3.initValue));
130
+ code += "\n".concat(indent, "/** \u521D\u59CB\u5316 \u53D8\u91CF ").concat(varTitle, " */");
131
+ code += "\n".concat(indent, "if (!vars.").concat(varName, ") vars.").concat(varName, " = createVariable(").concat(initValue, ");");
58
132
  });
59
133
  }
60
134
 
@@ -69,7 +143,8 @@ var processLogicalInit = function processLogicalInit(scene, config, addDependenc
69
143
  dependencyNames: ["createFx"],
70
144
  importType: "named"
71
145
  });
72
- code += "\n".concat(indent, "const fxs = comRefs.current.").concat(providerName, "_Fxs;");
146
+ // $fxs 是页面级共享注册表(与 comRefs 同级)
147
+ code += "\n".concat(indent, "const fxs = ($fxs.current ||= {});");
73
148
  fxEvents.forEach(function (fxEvent) {
74
149
  var res = handleProcess(fxEvent, _objectSpread(_objectSpread({}, config), {}, {
75
150
  depth: 3,
@@ -85,7 +160,7 @@ var processLogicalInit = function processLogicalInit(scene, config, addDependenc
85
160
  return pre;
86
161
  }, {});
87
162
  }
88
- })).replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
163
+ })).replace(/this\.\$vars\./g, "$vars.current.").replace(/this\.\$fxs\./g, "$fxs.current.").replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
89
164
  var values = (fxEvent.paramPins || []).map(function (paramPin, index) {
90
165
  if (paramPin.type === "config") {
91
166
  var _fxEvent$initValues;
@@ -93,7 +168,7 @@ var processLogicalInit = function processLogicalInit(scene, config, addDependenc
93
168
  }
94
169
  return "value".concat(index, ": any");
95
170
  }).join(", ");
96
- code += "\n".concat(indent, "if (!fxs.").concat(fxEvent.frameId, ".call) fxs.").concat(fxEvent.frameId, " = createFx((").concat(values, ") => {\n").concat(res, "\n").concat(indent, "});");
171
+ code += "\n".concat(indent, "if (!fxs.").concat(fxEvent.frameId, ") fxs.").concat(fxEvent.frameId, " = createFx((").concat(values, ") => {\n").concat(res, "\n").concat(indent, "});");
97
172
  });
98
173
  }
99
174
  return code;
@@ -120,7 +195,7 @@ var processSceneEvents = function processSceneEvents(ui, currentScene, config, a
120
195
  getParams: function getParams() {
121
196
  return {};
122
197
  }
123
- })).replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
198
+ })).replace(/this\.\$vars\./g, "$vars.current.").replace(/this\.\$fxs\./g, "$fxs.current.").replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
124
199
  if (process.trim()) {
125
200
  code += "\n".concat(indent, " ").concat(process.trim());
126
201
  }
@@ -150,7 +225,7 @@ var processSceneInputs = function processSceneInputs(currentScene, config, addDe
150
225
  getParams: function getParams() {
151
226
  return _defineProperty({}, input.id, "data");
152
227
  }
153
- })).replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
228
+ })).replace(/this\.\$vars\./g, "$vars.current.").replace(/this\.\$fxs\./g, "$fxs.current.").replace(/this\./g, "comRefs.current.").replace(/comRefs\.current\.([a-zA-Z0-9_]+)\.controller_/g, "comRefs.current.$1.").replace(/comRefs\.current\.slot_Index\./g, "comRefs.current.");
154
229
  if (process.trim()) {
155
230
  code += "\n".concat(indent, " inputs.").concat(input.id, " = (data: any) => {\n").concat(process, "\n").concat(indent, " };");
156
231
  if (input.id === "open") {