@amaster.ai/vite-plugins 1.1.0-beta.9 → 1.1.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.cjs CHANGED
@@ -1,30 +1,11 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var crypto=require('crypto'),m=require('fs'),w=require('path'),url=require('url'),R=require('process');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var m__default=/*#__PURE__*/_interopDefault(m);var w__default=/*#__PURE__*/_interopDefault(w);var R__default=/*#__PURE__*/_interopDefault(R);function E(r,e){let t=`${r}:${e}`;return crypto.createHash("md5").update(t).digest("hex").substring(0,12)}var x=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]);function y(){let r=false;return {name:"vite-plugin-component-id",enforce:"pre",configResolved(e){r=e.command==="serve";},transform(e,t){if(!r||!/\.(tsx|jsx)$/.test(t)||t.includes("node_modules")||!/<[a-z]/.test(e))return null;try{let n=e,o=/<([a-z][\da-z]*)(?=[\s/>])/g,i,s=[];for(;(i=o.exec(e))!==null;){let a=i[1];if(!a)continue;let u=i.index,d=i.index+i[0].length;if(!x.has(a))continue;let c=d,p=!1,f=!1;for(;c<e.length&&!p;)e[c]===">"&&(p=!0,e.substring(u,c).includes("data-node-component-id")&&(f=!0)),c++;f||s.push({index:u,tag:a,tagEndIndex:d});}let l=e;for(let a=s.length-1;a>=0;a--){let u=s[a];if(!u)continue;let{index:d,tagEndIndex:c}=u,p=E(t,d),f=l.substring(0,c),v=l.substring(c);n=`${f} data-node-component-id="${p}"${v}`,l=n;}return {code:n,map:null}}catch{return null}}}}var L=`<script>
2
- document.addEventListener("click", (e) => {
3
- const element = e.target;
4
- const noJumpOut = document.body.classList.contains("forbid-jump-out")
5
- if (element.hasAttribute("data-link-href") && !noJumpOut) {
6
- const href = element.getAttribute("data-link-href");
7
- const target = element.getAttribute("data-link-target");
8
- if (href) {
9
- if (target === "_blank") {
10
- window.open(href, "_blank");
11
- } else {
12
- window.location.href = href;
13
- }
14
- }
15
- } else if(noJumpOut && element.tagName === "A") {
16
- e.preventDefault();
17
- }
18
- });
19
- </script>`;function C(){try{let r=url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),e=w.dirname(r),t=w.resolve(e,"../dist/bridge.bridge.js");return `<script>
20
- ${m.readFileSync(t,"utf-8")}
21
- </script>`}catch(r){return console.warn("Failed to read bridge script:",r),""}}function S(){let r=false,e="";return {name:"vite-plugin-editor-bridge",configResolved(t){r=t.command==="serve",r&&(e=C());},transformIndexHtml(t){let o=`${L}${r?e:""}</body>`;return t.replace("</body>",o)}}}function b(r){let e=false,t=r?.routesFilePath||"src/routes.tsx";return {name:"vite-plugin-routes-expose",enforce:"post",configResolved(n){e=n.command==="serve";},transform(n,o){if(!e||!o.endsWith(t))return null;try{return n.includes("window.__APP_ROUTES__")?null:{code:`${n}
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var y=require('fs'),d=require('path'),url=require('url'),A=require('process'),w=require('fs/promises'),k=require('@babel/generator'),parser=require('@babel/parser'),L=require('@babel/traverse');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var y__default=/*#__PURE__*/_interopDefault(y);var d__default=/*#__PURE__*/_interopDefault(d);var A__default=/*#__PURE__*/_interopDefault(A);var w__default=/*#__PURE__*/_interopDefault(w);var k__default=/*#__PURE__*/_interopDefault(k);var L__default=/*#__PURE__*/_interopDefault(L);var F=url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),U=d.dirname(F),P="@amaster/bridge-monitor",T="\0"+P,m=null;function z(){if(m)return m;try{let e=d.resolve(U,"../dist/bridge-module.global.js");return m=y.readFileSync(e,"utf-8"),m}catch(e){return console.warn("[editor-bridge] Failed to load pre-built bridge module:",e),""}}function W(){return '<script type="module" src="/@id/@amaster/bridge-monitor"></script>'}function X(e){return z().replace(/__SESSION_KEY__/g,e)+`
2
+ export default {};`}function C(){let e=false;return {name:"vite-plugin-editor-bridge",configResolved(n){e=n.command==="serve";},resolveId(n){if(n===P)return T},load(n){if(n===T){let r=process.env.VITE_AMASTER_KEY||"";return X(r)}},transformIndexHtml(n){if(!e)return n;let r=W();return n.replace("</body>",`${r}</body>`)}}}function I(e){let n=false,r=e?.routesFilePath||"src/routes.tsx";return {name:"vite-plugin-routes-expose",enforce:"post",configResolved(t){n=t.command==="serve";},transform(t,o){if(!n||!o.endsWith(r))return null;try{return t.includes("window.__APP_ROUTES__")?null:{code:`${t}
22
3
 
23
4
  // Development mode: Expose routes to window.__APP_ROUTES__
24
5
  if (typeof window !== 'undefined') {
25
6
  window.__APP_ROUTES__ = typeof routes !== 'undefined' && Array.isArray(routes) ? routes : [];
26
7
  }
27
- `,map:null}}catch{return null}}}}function T(){let r="",e=`
8
+ `,map:null}}catch{return null}}}}function j(){let e="",n=`
28
9
  <script>
29
10
  (function() {
30
11
  'use strict';
@@ -32,6 +13,9 @@ if (typeof window !== 'undefined') {
32
13
  // Log API path (provided by Vite dev server)
33
14
  var LOG_API_PATH = '/__browser__';
34
15
 
16
+ // Save original fetch before any interception, used exclusively for log writing
17
+ var __originalFetch__ = window.fetch.bind(window);
18
+
35
19
  // Write queue to ensure sequential writes
36
20
  var writeQueue = [];
37
21
  var isWriting = false;
@@ -44,7 +28,7 @@ if (typeof window !== 'undefined') {
44
28
  var entry = writeQueue.shift();
45
29
  var logText = JSON.stringify(entry);
46
30
 
47
- fetch(LOG_API_PATH, {
31
+ __originalFetch__(LOG_API_PATH, {
48
32
  method: 'POST',
49
33
  headers: { 'Content-Type': 'application/json' },
50
34
  body: logText
@@ -162,12 +146,19 @@ if (typeof window !== 'undefined') {
162
146
  };
163
147
  }
164
148
 
165
- // Check if message should be filtered (contains [vite] text)
149
+ // Keywords to filter from console log collection
150
+ var FILTERED_CONSOLE_KEYWORDS = ['[vite]', '[BrowserLogs]'];
151
+
152
+ // Check if message should be filtered
166
153
  function shouldFilterConsoleLog(args) {
167
154
  for (var i = 0; i < args.length; i++) {
168
155
  var arg = args[i];
169
- if (typeof arg === 'string' && arg.indexOf('[vite]') !== -1) {
170
- return true;
156
+ if (typeof arg === 'string') {
157
+ for (var j = 0; j < FILTERED_CONSOLE_KEYWORDS.length; j++) {
158
+ if (arg.indexOf(FILTERED_CONSOLE_KEYWORDS[j]) !== -1) {
159
+ return true;
160
+ }
161
+ }
171
162
  }
172
163
  }
173
164
  return false;
@@ -705,416 +696,234 @@ if (typeof window !== 'undefined') {
705
696
 
706
697
  originalConsole.log('[BrowserLogs] Log collection started');
707
698
  })();
708
- </script>`;return {name:"vite-plugin-browser-logs",configResolved(t){let n=t.root||R__default.default.cwd();r=w__default.default.join(n,"browser.log");},configureServer(t){t.middlewares.use((n,o,i)=>{if(n.url==="/__browser__"&&n.method==="POST"){let s=n.headers.origin||"*",l="";n.on("data",a=>{l+=a.toString();}),n.on("end",()=>{try{let a=w__default.default.dirname(r);m__default.default.existsSync(a)||m__default.default.mkdirSync(a,{recursive:!0}),m__default.default.appendFileSync(r,`${l}
709
- `,"utf-8"),o.writeHead(200,{"Content-Type":"application/json","Access-Control-Allow-Origin":s,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"}),o.end(JSON.stringify({success:!0}));}catch(a){console.error("[BrowserLogs] Write error:",a),o.writeHead(500,{"Content-Type":"application/json","Access-Control-Allow-Origin":s,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"}),o.end(JSON.stringify({success:false,error:String(a)}));}});}else if(n.url==="/__browser__"&&n.method==="OPTIONS"){let s=n.headers.origin||"*";o.writeHead(204,{"Access-Control-Allow-Origin":s,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type","Access-Control-Max-Age":"86400"}),o.end();}else if(n.url==="/__browser__"){let s=n.headers.origin||"*";o.writeHead(405,{"Content-Type":"application/json","Access-Control-Allow-Origin":s}),o.end(JSON.stringify({error:"Method not allowed"}));}else i();}),console.log("[BrowserLogs] Logs will be written to:",r);},transformIndexHtml(t){return t.replace(/<head([^>]*)>/i,`<head$1>${e}`)}}}function _(){let e=`
710
- <script>
711
- (function() {
712
- 'use strict';
713
-
714
- var PLUGIN_TAG = '[SmartReload]';
715
- // full-reload \u540E\u7B49\u5F85 WebSocket \u65AD\u5F00\u7684\u7A97\u53E3\u671F\uFF08ms\uFF09
716
- var DISCONNECT_DETECT_WINDOW = 300;
717
- // WebSocket \u65AD\u5F00\u540E\u7B49\u5F85\u91CD\u8FDE\u7684\u8D85\u65F6\u65F6\u95F4\uFF08ms\uFF09\uFF0C\u8D85\u65F6\u540E fallback \u5230 full-reload
718
- var RECONNECT_TIMEOUT = 5000;
719
- // \u91CD\u8FDE\u6210\u529F\u540E\uFF0C\u7B49\u5F85\u662F\u5426\u6709 full-reload/update \u6D88\u606F\u7684\u7A97\u53E3\u671F\uFF08ms\uFF09
720
- var POST_RECONNECT_WINDOW = 2000;
721
- // soft-reload \u5EF6\u8FDF\uFF08ms\uFF09
722
- var SOFT_RELOAD_DELAY = 300;
723
-
724
- // ============================================
725
- // \u72B6\u6001\u7BA1\u7406
726
- // ============================================
727
- var state = {
728
- // \u662F\u5426\u5DF2\u7ECF\u62E6\u622A\u4E86 Vite HMR WebSocket
729
- wsIntercepted: false,
730
- // \u662F\u5426\u6B63\u5728\u7B49\u5F85\u5224\u65AD full-reload \u7C7B\u578B\uFF08300ms \u7A97\u53E3\u671F\uFF09
731
- detectingReloadType: false,
732
- // \u5EF6\u8FDF\u6267\u884C full-reload \u7684\u5B9A\u65F6\u5668
733
- reloadTimer: null,
734
- // \u662F\u5426\u6B63\u5728\u7B49\u5F85\u670D\u52A1\u5668\u91CD\u8FDE
735
- waitingForReconnect: false,
736
- // \u662F\u5426\u662F\u670D\u52A1\u5668\u91CD\u542F\u573A\u666F
737
- isServerRestart: false,
738
- // \u91CD\u8FDE\u8D85\u65F6\u5B9A\u65F6\u5668
739
- reconnectTimeoutTimer: null,
740
- // \u91CD\u8FDE\u540E\u7B49\u5F85\u53D8\u66F4\u7684\u5B9A\u65F6\u5668
741
- postReconnectTimer: null,
742
- // \u662F\u5426\u6B63\u5728\u6291\u5236 fetch ping\uFF08\u963B\u6B62 Vite \u7684 HTTP ping \u89E6\u53D1 reload\uFF09
743
- suppressingReload: false,
744
- // \u5DF2\u62E6\u622A\u7684 fetch ping \u6B21\u6570\uFF08\u7528\u4E8E\u8C03\u8BD5\uFF09
745
- suppressedReloadCount: 0
746
- };
747
-
748
- // ============================================
749
- // \u65E5\u5FD7\u5DE5\u5177
750
- // ============================================
751
- function log() {
752
- var args = [PLUGIN_TAG];
753
- for (var i = 0; i < arguments.length; i++) {
754
- args.push(arguments[i]);
755
- }
756
- console.log.apply(console, args);
757
- }
699
+ </script>`;return {name:"vite-plugin-browser-logs",configResolved(r){let t=A__default.default.env.WORKSPACE_DIR;if(t)e=d__default.default.join(t,"browser.log");else {let o=r.root||A__default.default.cwd();for(;o!==d__default.default.dirname(o)&&!y__default.default.existsSync(d__default.default.join(o,"package.json"));)o=d__default.default.dirname(o);e=d__default.default.join(o,"browser.log");}},configureServer(r){r.middlewares.use((t,o,l)=>{if(t.url==="/__browser__"&&t.method==="POST"){let i=t.headers.origin||"*",c="";t.on("data",u=>{c+=u.toString();}),t.on("end",()=>{try{let u=d__default.default.dirname(e);y__default.default.existsSync(u)||y__default.default.mkdirSync(u,{recursive:!0}),y__default.default.appendFileSync(e,`${c}
700
+ `,"utf-8"),o.writeHead(200,{"Content-Type":"application/json","Access-Control-Allow-Origin":i,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"}),o.end(JSON.stringify({success:!0}));}catch(u){console.error("[BrowserLogs] Write error:",u),o.writeHead(500,{"Content-Type":"application/json","Access-Control-Allow-Origin":i,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"}),o.end(JSON.stringify({success:false,error:String(u)}));}});}else if(t.url==="/__browser__"&&t.method==="OPTIONS"){let i=t.headers.origin||"*";o.writeHead(204,{"Access-Control-Allow-Origin":i,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type","Access-Control-Max-Age":"86400"}),o.end();}else if(t.url==="/__browser__"){let i=t.headers.origin||"*";o.writeHead(405,{"Content-Type":"application/json","Access-Control-Allow-Origin":i}),o.end(JSON.stringify({error:"Method not allowed"}));}else l();}),console.log("[BrowserLogs] Logs will be written to:",e);},transformIndexHtml(r){return r.replace(/<head([^>]*)>/i,`<head$1>${n}`)}}}var J=`
701
+ import * as React from "react";
702
+ import * as ReactJSXDevRuntime from "react/jsx-dev-runtime";
758
703
 
759
- // ============================================
760
- // \u6E05\u9664\u6240\u6709\u5B9A\u65F6\u5668
761
- // ============================================
762
- function clearAllTimers() {
763
- if (state.reloadTimer) {
764
- clearTimeout(state.reloadTimer);
765
- state.reloadTimer = null;
766
- }
767
- if (state.reconnectTimeoutTimer) {
768
- clearTimeout(state.reconnectTimeoutTimer);
769
- state.reconnectTimeoutTimer = null;
770
- }
771
- if (state.postReconnectTimer) {
772
- clearTimeout(state.postReconnectTimer);
773
- state.postReconnectTimer = null;
774
- }
775
- }
704
+ const _jsxDEV = ReactJSXDevRuntime.jsxDEV;
705
+ export const Fragment = ReactJSXDevRuntime.Fragment;
776
706
 
777
- // ============================================
778
- // \u91CD\u7F6E\u72B6\u6001
779
- // ============================================
780
- function resetState() {
781
- state.detectingReloadType = false;
782
- state.isServerRestart = false;
783
- state.waitingForReconnect = false;
784
- state.suppressingReload = false;
785
- state.suppressedReloadCount = 0;
786
- clearAllTimers();
787
- }
707
+ const SOURCE_KEY = Symbol.for("__jsxSource__");
708
+ const PROJECT_ROOT = "";
788
709
 
789
- // ============================================
790
- // \u6267\u884C\u771F\u6B63\u7684 full-reload
791
- // ============================================
792
- function executeFullReload() {
793
- log('Executing full-reload');
794
- resetState();
795
- originalLocationReload.call(window.location);
710
+ const cleanFileName = (fileName) => {
711
+ if (!fileName) return "";
712
+ // Remove project root prefix to get relative path
713
+ if (PROJECT_ROOT && fileName.startsWith(PROJECT_ROOT)) {
714
+ const relative = fileName.slice(PROJECT_ROOT.length);
715
+ return relative.startsWith("/") ? relative.slice(1) : relative;
796
716
  }
717
+ return fileName;
718
+ };
797
719
 
798
- // ============================================
799
- // Soft-reload\uFF1A\u5EF6\u8FDF\u5237\u65B0\uFF0C\u6062\u590D HMR \u8FDE\u63A5
800
- // \u5728\u6291\u5236 reload \u540E\uFF0CVite \u5BA2\u6237\u7AEF\u7684 WebSocket \u5DF2\u6B7B\uFF0C
801
- // \u9700\u8981\u901A\u8FC7 reload \u6062\u590D HMR\u3002
802
- // ============================================
803
- function scheduleSoftReload() {
804
- log('Scheduling soft-reload to restore HMR connection');
805
- setTimeout(function() {
806
- resetState();
807
- originalLocationReload.call(window.location);
808
- }, SOFT_RELOAD_DELAY);
809
- }
720
+ // Global map to track elements by source location
721
+ const sourceElementMap = new Map();
722
+ window.sourceElementMap = sourceElementMap;
810
723
 
811
- // ============================================
812
- // \u62E6\u622A location.reload
813
- // \u6D4F\u89C8\u5668\u4E0D\u5141\u8BB8\u76F4\u63A5\u4FEE\u6539 location.reload\uFF08Cannot redefine property\uFF09\uFF0C
814
- // \u6240\u4EE5\u6211\u4EEC\u901A\u8FC7\u62E6\u622A fetch \u6765\u963B\u6B62 Vite \u7684 HTTP ping \u6210\u529F\uFF0C
815
- // \u4ECE\u800C\u963B\u6B62 Vite \u5BA2\u6237\u7AEF\u8C03\u7528 location.reload()\u3002
816
- //
817
- // Vite \u5BA2\u6237\u7AEF\u5728 WebSocket \u65AD\u5F00\u540E\u4F1A\u901A\u8FC7 fetch ping \u670D\u52A1\u5668\uFF0C
818
- // ping \u6210\u529F\u540E\u8C03\u7528 location.reload()\u3002
819
- // \u6211\u4EEC\u5728\u670D\u52A1\u5668\u91CD\u542F\u671F\u95F4\u8BA9 ping \u8BF7\u6C42\u8FD4\u56DE\u5931\u8D25\uFF0C
820
- // \u8FD9\u6837 Vite \u5BA2\u6237\u7AEF\u4F1A\u4E00\u76F4\u8F6E\u8BE2\u800C\u4E0D\u4F1A\u89E6\u53D1 reload\u3002
821
- // \u5F53\u6211\u4EEC\u7684 WebSocket \u91CD\u8FDE\u903B\u8F91\u68C0\u6D4B\u5230\u91CD\u8FDE\u6210\u529F\u540E\uFF0C
822
- // \u6062\u590D fetch \u5E76\u7531\u6211\u4EEC\u81EA\u5DF1\u63A7\u5236\u662F\u5426\u9700\u8981 reload\u3002
823
- // ============================================
824
- var originalLocationReload = window.location.reload.bind(window.location);
825
- var originalFetch = window.fetch.bind(window);
826
-
827
- window.fetch = function smartReloadInterceptedFetch(input, init) {
828
- var url = '';
829
- if (typeof input === 'string') {
830
- url = input;
831
- } else if (input instanceof Request) {
832
- url = input.url;
833
- } else if (input instanceof URL) {
834
- url = input.href;
835
- }
836
-
837
- // \u5728\u670D\u52A1\u5668\u91CD\u542F\u671F\u95F4\uFF0C\u8BB0\u5F55\u6240\u6709 fetch \u8BF7\u6C42\u5E76\u62E6\u622A Vite \u7684 ping
838
- if (state.suppressingReload || state.waitingForReconnect || state.isServerRestart) {
839
- log('fetch during restart:', url, 'mode:', init && init.mode);
840
-
841
- // Vite \u7684 ping \u8BF7\u6C42\u7279\u5F81\uFF1A
842
- // 1. mode: 'no-cors' \u2014 Vite 5.x \u4F7F\u7528 no-cors \u6A21\u5F0F ping
843
- // 2. \u8BF7\u6C42\u5F53\u524D\u9875\u9762 URL\u3001\u6839\u8DEF\u5F84\u3001\u6216 /__vite_ping
844
- var currentOrigin = window.location.origin;
845
- var isVitePing = false;
846
-
847
- // \u68C0\u67E5 mode: 'no-cors'\uFF08Vite ping \u7684\u7279\u5F81\uFF09
848
- if (init && init.mode === 'no-cors') {
849
- isVitePing = true;
850
- }
851
-
852
- // \u4E5F\u68C0\u67E5 URL \u7279\u5F81
853
- if (url === window.location.href ||
854
- url === currentOrigin + '/' ||
855
- url.indexOf('/__vite_ping') !== -1 ||
856
- url.indexOf('/__vite_hmr') !== -1) {
857
- isVitePing = true;
858
- }
724
+ function getSourceKey(sourceInfo) {
725
+ return \`\${cleanFileName(sourceInfo.fileName)}:\${sourceInfo.lineNumber}:\${sourceInfo.columnNumber}\`;
726
+ }
859
727
 
860
- if (isVitePing) {
861
- state.suppressedReloadCount++;
862
- log('Suppressed fetch ping during server restart: ' + url + ' (count: ' + state.suppressedReloadCount + ')');
863
- // \u8FD4\u56DE\u4E00\u4E2A\u5931\u8D25\u7684 response\uFF0C\u8BA9 Vite \u8BA4\u4E3A\u670D\u52A1\u5668\u8FD8\u6CA1\u6062\u590D
864
- return Promise.reject(new TypeError('SmartReload: fetch suppressed during server restart'));
728
+ function unregisterElement(node, sourceInfo) {
729
+ const key = getSourceKey(sourceInfo);
730
+ const refs = sourceElementMap.get(key);
731
+ if (refs) {
732
+ for (const ref of refs) {
733
+ if (ref.deref() === node) {
734
+ refs.delete(ref);
735
+ break;
865
736
  }
866
737
  }
867
- return originalFetch(input, init);
868
- };
869
- log('fetch intercepted for Vite ping suppression');
870
-
871
- // ============================================
872
- // \u8FDB\u5165\u670D\u52A1\u5668\u91CD\u542F\u7B49\u5F85\u6A21\u5F0F
873
- // ============================================
874
- function enterServerRestartMode(reason) {
875
- log('Entering server restart mode:', reason);
876
-
877
- state.isServerRestart = true;
878
- state.waitingForReconnect = true;
879
- state.suppressingReload = true;
880
- state.detectingReloadType = false;
881
-
882
- if (state.reloadTimer) {
883
- clearTimeout(state.reloadTimer);
884
- state.reloadTimer = null;
738
+ if (refs.size === 0) {
739
+ sourceElementMap.delete(key);
885
740
  }
886
-
887
- // \u8D85\u65F6\u4FDD\u62A4\uFF1A\u5982\u679C\u6307\u5B9A\u65F6\u95F4\u5185\u65E0\u6CD5\u91CD\u8FDE\uFF0C\u6267\u884C full-reload
888
- if (state.reconnectTimeoutTimer) {
889
- clearTimeout(state.reconnectTimeoutTimer);
890
- }
891
- state.reconnectTimeoutTimer = setTimeout(function() {
892
- if (state.waitingForReconnect || state.isServerRestart) {
893
- log('Reconnect timeout (' + RECONNECT_TIMEOUT + 'ms), performing full-reload as fallback');
894
- executeFullReload();
895
- }
896
- }, RECONNECT_TIMEOUT);
897
741
  }
742
+ }
898
743
 
899
- // ============================================
900
- // \u62E6\u622A WebSocket \u6784\u9020\u51FD\u6570
901
- // ============================================
902
- var OriginalWebSocket = window.WebSocket;
903
-
904
- function isViteHmrWebSocket(url) {
905
- if (typeof url !== 'string') return false;
906
- // \u53EA\u5339\u914D Vite HMR \u7279\u5F81\u7684 URL
907
- return url.includes('/__vite_hmr') || url.includes('?token=');
744
+ function registerElement(node, sourceInfo) {
745
+ const key = getSourceKey(sourceInfo);
746
+ if (!sourceElementMap.has(key)) {
747
+ sourceElementMap.set(key, new Set());
908
748
  }
749
+ sourceElementMap.get(key).add(new WeakRef(node));
750
+ }
909
751
 
910
- function createWsProxy(ws) {
911
- var originalAddEventListener = ws.addEventListener.bind(ws);
912
- var originalRemoveEventListener = ws.removeEventListener.bind(ws);
913
-
914
- ws.addEventListener = function(type, listener, options) {
915
- if (type === 'message') {
916
- var wrappedListener = function(event) {
917
- var intercepted = handleWsMessage(event);
918
- if (!intercepted) {
919
- listener.call(ws, event);
920
- }
921
- };
922
- listener.__smartReloadWrapped__ = wrappedListener;
923
- return originalAddEventListener(type, wrappedListener, options);
924
- }
925
- return originalAddEventListener(type, listener, options);
926
- };
752
+ function getTypeName(type) {
753
+ if (typeof type === "string") return type;
754
+ if (typeof type === "function") return type.displayName || type.name || "Unknown";
755
+ if (typeof type === "object" && type !== null) {
756
+ return type.displayName || type.render?.displayName || type.render?.name || "Unknown";
757
+ }
758
+ return "Unknown";
759
+ }
927
760
 
928
- ws.removeEventListener = function(type, listener, options) {
929
- if (type === 'message' && listener.__smartReloadWrapped__) {
930
- return originalRemoveEventListener(type, listener.__smartReloadWrapped__, options);
931
- }
932
- return originalRemoveEventListener(type, listener, options);
761
+ export function jsxDEV(type, props, key, isStatic, source, self) {
762
+ // For custom components, tag their rendered output
763
+ if (source?.fileName && typeof type !== "string" && type !== Fragment) {
764
+ const typeName = getTypeName(type);
765
+ const fileName = cleanFileName(source.fileName);
766
+
767
+ const jsxSourceInfo = {
768
+ fileName,
769
+ lineNumber: source.lineNumber,
770
+ columnNumber: source.columnNumber,
771
+ displayName: typeName,
772
+ isComponent: true,
933
773
  };
934
774
 
935
- var originalOnMessage = null;
936
- var onMessageDescriptor = Object.getOwnPropertyDescriptor(WebSocket.prototype, 'onmessage') ||
937
- Object.getOwnPropertyDescriptor(ws, 'onmessage');
938
-
939
- if (onMessageDescriptor) {
940
- Object.defineProperty(ws, 'onmessage', {
941
- get: function() {
942
- return originalOnMessage;
943
- },
944
- set: function(handler) {
945
- originalOnMessage = handler;
946
- var wrappedHandler = function(event) {
947
- var intercepted = handleWsMessage(event);
948
- if (!intercepted && handler) {
949
- handler.call(ws, event);
775
+ const originalRef = props?.ref;
776
+
777
+ // Check if component can safely receive refs
778
+ // - forwardRef components have $$typeof symbol
779
+ // - Class components have prototype.isReactComponent
780
+ // - If there's already a ref, the component expects it
781
+ const isForwardRef = type.$$typeof === Symbol.for('react.forward_ref');
782
+ const isClassComponent = typeof type === 'function' && type.prototype?.isReactComponent;
783
+ const hasExistingRef = originalRef !== undefined;
784
+
785
+ const canReceiveRef = isForwardRef || isClassComponent || hasExistingRef;
786
+
787
+ if (canReceiveRef) {
788
+ const enhancedProps = {
789
+ ...props,
790
+ ref: (node) => {
791
+ if (node) {
792
+ const existingSource = node[SOURCE_KEY];
793
+ if (existingSource) {
794
+ // \u7EC4\u4EF6\u7EA7\u7684 source \u603B\u662F\u8986\u76D6\u5143\u7D20\u7EA7\u7684 source
795
+ if (!existingSource.isComponent) {
796
+ unregisterElement(node, existingSource);
797
+ node[SOURCE_KEY] = jsxSourceInfo;
798
+ registerElement(node, jsxSourceInfo);
799
+ }
800
+ } else {
801
+ node[SOURCE_KEY] = jsxSourceInfo;
802
+ registerElement(node, jsxSourceInfo);
950
803
  }
951
- };
952
- if (onMessageDescriptor.set) {
953
- onMessageDescriptor.set.call(ws, wrappedHandler);
804
+ }
805
+ if (typeof originalRef === "function") {
806
+ originalRef(node);
807
+ } else if (originalRef && typeof originalRef === "object") {
808
+ originalRef.current = node;
954
809
  }
955
810
  },
956
- configurable: true
957
- });
811
+ };
812
+ return _jsxDEV(type, enhancedProps, key, isStatic, source, self);
958
813
  }
959
814
 
960
- originalAddEventListener('close', function(event) {
961
- handleWsClose(event);
962
- });
963
-
964
- originalAddEventListener('open', function() {
965
- handleWsOpen();
966
- });
967
-
968
- state.wsIntercepted = true;
969
- log('Vite HMR WebSocket intercepted');
970
-
971
- return ws;
815
+ return _jsxDEV(type, props, key, isStatic, source, self);
972
816
  }
973
817
 
974
- window.WebSocket = function SmartReloadWebSocket(url, protocols) {
975
- var ws;
976
- if (protocols !== undefined) {
977
- ws = new OriginalWebSocket(url, protocols);
978
- } else {
979
- ws = new OriginalWebSocket(url);
980
- }
981
-
982
- if (isViteHmrWebSocket(url)) {
983
- return createWsProxy(ws);
984
- }
985
-
986
- return ws;
987
- };
988
-
989
- window.WebSocket.prototype = OriginalWebSocket.prototype;
990
- window.WebSocket.CONNECTING = OriginalWebSocket.CONNECTING;
991
- window.WebSocket.OPEN = OriginalWebSocket.OPEN;
992
- window.WebSocket.CLOSING = OriginalWebSocket.CLOSING;
993
- window.WebSocket.CLOSED = OriginalWebSocket.CLOSED;
994
-
995
- // ============================================
996
- // WebSocket \u6D88\u606F\u5904\u7406
997
- // ============================================
998
- function handleWsMessage(event) {
999
- var data;
1000
- try {
1001
- data = JSON.parse(event.data);
1002
- } catch (e) {
1003
- // \u975E JSON \u6D88\u606F\uFF0C\u4E0D\u62E6\u622A
1004
- return false;
818
+ // For host elements (div, span, etc.), tag with source info
819
+ if (source?.fileName && typeof type === "string") {
820
+ const fileName = cleanFileName(source.fileName);
821
+
822
+ // \u5224\u65AD\u5F53\u524D\u5143\u7D20\u662F\u5426\u5728\u7EC4\u4EF6\u5E93\u4E2D\u5B9A\u4E49
823
+ const isInLibrary = fileName.includes('src/components/ui/') ||
824
+ fileName.includes('node_modules');
825
+
826
+ // \u7EC4\u4EF6\u5E93\u5185\u90E8\u7684\u5143\u7D20\u4E0D\u6807\u8BB0\uFF0C\u4E0D\u652F\u6301\u53EF\u89C6\u5316\u7F16\u8F91
827
+ if (isInLibrary) {
828
+ return _jsxDEV(type, props, key, isStatic, source, self);
1005
829
  }
830
+
831
+ const sourceInfo = {
832
+ fileName,
833
+ lineNumber: source.lineNumber,
834
+ columnNumber: source.columnNumber,
835
+ displayName: type,
836
+ isComponent: false, // \u6807\u8BB0\u8FD9\u662F\u5143\u7D20\u7EA7\u522B\u7684 source
837
+ };
1006
838
 
1007
- // \u5904\u7406 full-reload \u6D88\u606F
1008
- if (data.type === 'full-reload') {
1009
- // \u5982\u679C\u5DF2\u7ECF\u5728\u670D\u52A1\u5668\u91CD\u542F\u6A21\u5F0F\uFF0C\u62E6\u622A\u6240\u6709 full-reload
1010
- if (state.isServerRestart) {
1011
- log('Suppressed full-reload during server restart');
1012
- return true;
1013
- }
1014
-
1015
- log('Intercepted full-reload, path:', data.path || '(none)');
1016
-
1017
- // \u8FDB\u5165\u68C0\u6D4B\u6A21\u5F0F\uFF1A\u7B49\u5F85\u770B WebSocket \u662F\u5426\u65AD\u5F00
1018
- state.detectingReloadType = true;
1019
-
1020
- // \u8BBE\u7F6E\u5B9A\u65F6\u5668\uFF1A\u5982\u679C\u7A97\u53E3\u671F\u5185 WebSocket \u6CA1\u6709\u65AD\u5F00\uFF0C\u8BF4\u660E\u662F\u771F\u6B63\u7684\u6A21\u5757\u53D8\u66F4
1021
- state.reloadTimer = setTimeout(function() {
1022
- if (state.detectingReloadType && !state.isServerRestart) {
1023
- log('WebSocket still connected after ' + DISCONNECT_DETECT_WINDOW + 'ms - real module change, executing reload');
1024
- state.detectingReloadType = false;
1025
- executeFullReload();
839
+ const originalRef = props?.ref;
840
+
841
+ const enhancedProps = {
842
+ ...props,
843
+ ref: (node) => {
844
+ if (node) {
845
+ const existingSource = node[SOURCE_KEY];
846
+ // \u5982\u679C\u5DF2\u6709 source\uFF0C\u68C0\u67E5\u662F\u5426\u5E94\u8BE5\u4FDD\u7559\u5916\u5C42\u7684
847
+ if (existingSource) {
848
+ // \u5982\u679C\u5DF2\u6709\u7684\u662F\u7EC4\u4EF6\u7EA7\u522B\u7684 source\uFF08isComponent: true\uFF09\uFF0C\u4FDD\u7559\u5B83
849
+ if (existingSource.isComponent) {
850
+ // \u4E0D\u66F4\u65B0\uFF0C\u4FDD\u7559\u7EC4\u4EF6\u7EA7\u522B\u7684 source
851
+ if (typeof originalRef === "function") {
852
+ originalRef(node);
853
+ } else if (originalRef && typeof originalRef === "object") {
854
+ originalRef.current = node;
855
+ }
856
+ return;
857
+ }
858
+
859
+ // \u5426\u5219\u6309\u6B63\u5E38\u903B\u8F91\u66F4\u65B0
860
+ if (getSourceKey(existingSource) !== getSourceKey(sourceInfo)) {
861
+ unregisterElement(node, existingSource);
862
+ node[SOURCE_KEY] = sourceInfo;
863
+ registerElement(node, sourceInfo);
864
+ }
865
+ } else {
866
+ node[SOURCE_KEY] = sourceInfo;
867
+ registerElement(node, sourceInfo);
868
+ }
1026
869
  }
1027
- }, DISCONNECT_DETECT_WINDOW);
1028
-
1029
- // \u62E6\u622A\uFF0C\u4E0D\u4F20\u9012\u7ED9 Vite \u5BA2\u6237\u7AEF
1030
- return true;
1031
- }
1032
-
1033
- // \u5904\u7406 connected \u6D88\u606F\uFF08Vite \u670D\u52A1\u5668\u53D1\u9001\u7684\u9996\u6761\u6D88\u606F\uFF09
1034
- if (data.type === 'connected') {
1035
- if (state.isServerRestart) {
1036
- log('Reconnected to Vite server after restart');
1037
-
1038
- // \u6E05\u9664\u91CD\u8FDE\u8D85\u65F6
1039
- if (state.reconnectTimeoutTimer) {
1040
- clearTimeout(state.reconnectTimeoutTimer);
1041
- state.reconnectTimeoutTimer = null;
870
+ if (typeof originalRef === "function") {
871
+ originalRef(node);
872
+ } else if (originalRef && typeof originalRef === "object") {
873
+ originalRef.current = node;
1042
874
  }
1043
-
1044
- state.waitingForReconnect = false;
1045
-
1046
- // \u91CD\u8FDE\u540E\u7B49\u5F85\u4E00\u6BB5\u65F6\u95F4\uFF0C\u770B\u662F\u5426\u6709 full-reload \u6216 update \u6D88\u606F
1047
- // \u5982\u679C\u6CA1\u6709\uFF0C\u8BF4\u660E\u4E0D\u9700\u8981\u5237\u65B0\uFF0C\u4F46\u4ECD\u9700 soft-reload \u6062\u590D HMR
1048
- state.postReconnectTimer = setTimeout(function() {
1049
- if (state.isServerRestart) {
1050
- log('No changes detected after reconnect, performing soft-reload to restore HMR');
1051
- scheduleSoftReload();
1052
- }
1053
- }, POST_RECONNECT_WINDOW);
1054
- }
1055
- return false; // \u8BA9 connected \u6D88\u606F\u6B63\u5E38\u4F20\u9012
1056
- }
1057
-
1058
- // \u5904\u7406 update \u6D88\u606F\uFF08HMR \u70ED\u66F4\u65B0\uFF09
1059
- if (data.type === 'update' && state.isServerRestart) {
1060
- // \u91CD\u8FDE\u540E\u6536\u5230 HMR update\uFF0C\u8BF4\u660E\u6709\u6A21\u5757\u53D8\u66F4
1061
- // \u8BA9 HMR update \u6B63\u5E38\u5904\u7406
1062
- log('Received HMR update after reconnect, letting HMR handle it');
1063
- if (state.postReconnectTimer) {
1064
- clearTimeout(state.postReconnectTimer);
1065
- state.postReconnectTimer = null;
1066
- }
1067
- // \u6709 HMR update \u8BF4\u660E WebSocket \u662F\u6D3B\u7684\uFF0C\u53EF\u4EE5\u76F4\u63A5\u6062\u590D
1068
- resetState();
1069
- return false; // \u8BA9 update \u6D88\u606F\u6B63\u5E38\u4F20\u9012\u7ED9 Vite \u5BA2\u6237\u7AEF\u5904\u7406 HMR
1070
- }
1071
-
1072
- return false;
875
+ },
876
+ };
877
+ return _jsxDEV(type, enhancedProps, key, isStatic, source, self);
1073
878
  }
1074
879
 
1075
- // ============================================
1076
- // WebSocket \u8FDE\u63A5\u4E8B\u4EF6\u5904\u7406
1077
- // ============================================
1078
- function handleWsClose(event) {
1079
- log('WebSocket closed, code:', event.code, 'wasClean:', event.wasClean);
880
+ return _jsxDEV(type, props, key, isStatic, source, self);
881
+ }
882
+ `;function S(){let e=false,n="";return {name:"vite-plugin-jsx-source-tagger",enforce:"pre",configResolved(r){e=r.command==="serve",n=r.root;},resolveId(r,t){return e&&r==="react/jsx-dev-runtime"&&!t?.includes("\0jsx-source")?"\0jsx-source/jsx-dev-runtime":null},load(r){return e&&r==="\0jsx-source/jsx-dev-runtime"?J.replace('const PROJECT_ROOT = "";',`const PROJECT_ROOT = ${JSON.stringify(n)};`):null}}}function b(e){let n="",r=false,t=null,o=null,l=e?.configPath||"./tailwind.config.ts",i="@amaster/tailwind-config",c="\0"+i,u=async()=>{let a=d__default.default.resolve(n,l);try{return await w__default.default.access(a),a}catch{if(l.endsWith(".ts")){let s=a.replace(/\.ts$/,".js");try{return await w__default.default.access(s),s}catch{return null}}else if(l.endsWith(".js")){let s=a.replace(/\.js$/,".ts");try{return await w__default.default.access(s),s}catch{return null}}return null}},v=async a=>{try{let s=await u();if(!s)return null;if(a){let O=await a.ssrLoadModule(s);return t=O.default||O,t}let f=await import(`file://${s}?t=${Date.now()}`);return t=f.default||f,t}catch(s){return console.error("[tailwind-config-sync] Failed to generate config:",s),null}};return {name:"vite-plugin-tailwind-config-sync",configResolved(a){n=a.root,r=a.command==="serve";},async buildStart(){r&&await v();},resolveId(a){if(a===i)return c},async load(a){if(a===c)return await v(o),t?`
883
+ // Use global variable to persist callbacks and current config across HMR updates
884
+ if (!window.__tailwindConfigCallbacks) {
885
+ window.__tailwindConfigCallbacks = [];
886
+ }
1080
887
 
1081
- // \u573A\u666F1\uFF1A\u6536\u5230 full-reload \u540E WebSocket \u65AD\u5F00 \u2192 \u670D\u52A1\u5668\u91CD\u542F
1082
- if (state.detectingReloadType) {
1083
- enterServerRestartMode('full-reload followed by disconnect');
1084
- return;
1085
- }
888
+ // Always update current config with the latest from server
889
+ let tailwindConfigCurrent = ${JSON.stringify(t)};
1086
890
 
1087
- // \u573A\u666F2\uFF1A\u6CA1\u6709 full-reload \u6D88\u606F\uFF0CWebSocket \u76F4\u63A5\u65AD\u5F00
1088
- // \u53EA\u5728\u975E\u6B63\u5E38\u5173\u95ED\u65F6\u624D\u8FDB\u5165\u91CD\u542F\u6A21\u5F0F\uFF08wasClean === false \u8868\u793A\u975E\u6B63\u5E38\u65AD\u5F00\uFF09
1089
- if (!state.isServerRestart && !event.wasClean) {
1090
- enterServerRestartMode('unexpected disconnect (server process killed)');
891
+ if (import.meta.hot) {
892
+ // Accept self updates
893
+ import.meta.hot.accept((newModule) => {
894
+ if (newModule && newModule.default) {
895
+ // Call all update callbacks with the new config from window
896
+ window.__tailwindConfigCallbacks.forEach((callback) => {
897
+ try {
898
+ // Pass the actual config object, not the Proxy
899
+ callback(newModule.default);
900
+ } catch (e) {
901
+ console.error('[TailwindConfig] Callback error:', e);
902
+ }
903
+ });
1091
904
  }
1092
- }
1093
-
1094
- function handleWsOpen() {
1095
- log('WebSocket opened');
1096
- }
905
+ });
906
+ }
1097
907
 
1098
- // ============================================
1099
- // \u66B4\u9732 API \u4F9B\u8C03\u8BD5\u4F7F\u7528
1100
- // ============================================
1101
- window.__smartReloadState__ = state;
1102
- window.__smartReloadForceReload__ = function() {
1103
- log('Force reload triggered by user');
1104
- resetState();
1105
- originalLocationReload.call(window.location);
908
+ export function onUpdate(fn) {
909
+ window.__tailwindConfigCallbacks.push(fn);
910
+ return () => {
911
+ const index = window.__tailwindConfigCallbacks.indexOf(fn);
912
+ if (index > -1) {
913
+ window.__tailwindConfigCallbacks.splice(index, 1);
914
+ }
1106
915
  };
916
+ };
917
+ export default tailwindConfigCurrent;
1107
918
 
1108
- log('Smart Reload initialized');
1109
- })();
1110
- </script>`.replace(/^\s*<script>\s*/i,"").replace(/\s*<\/script>\s*$/i,"");return {name:"vite-plugin-smart-reload",apply:"serve",transformIndexHtml:{order:"pre",handler(){return [{tag:"script",injectTo:"head-prepend",children:e}]}}}}function h(r={}){let{designWidth:e=375,maxWidth:t=750,baseFontSize:n=12,minRootSize:o=12,maxRootSize:i=24}=r;return {name:"vite-plugin-taro-style-adapter",apply:"serve",transformIndexHtml(s){let l=`
919
+ `:"export default null;"},configureServer(a){r&&(o=a,(async()=>{try{let s=await u();s&&a.watcher.add(s);}catch{}})());},async handleHotUpdate({file:a,server:s}){let p=await u();if(!p||d__default.default.normalize(a)!==d__default.default.normalize(p))return;let f=s.moduleGraph.getModuleById(p);f&&s.moduleGraph.invalidateModule(f),await v(s);let g=s.moduleGraph.getModuleById(c);return g?(s.moduleGraph.invalidateModule(g),[g]):[]}}}function x(e={}){let{designWidth:n=375,maxWidth:r=750,baseFontSize:t=12,minRootSize:o=12,maxRootSize:l=24}=e;return {name:"vite-plugin-taro-style-adapter",apply:"serve",transformIndexHtml(i){let c=`
1111
920
  <script data-taro-flexible="true">
1112
921
  (function() {
1113
- var designWidth = ${e};
1114
- var maxWidth = ${t};
1115
- var baseFontSize = ${n};
922
+ var designWidth = ${n};
923
+ var maxWidth = ${r};
924
+ var baseFontSize = ${t};
1116
925
  var minRootSize = ${o};
1117
- var maxRootSize = ${i};
926
+ var maxRootSize = ${l};
1118
927
 
1119
928
  function setRootFontSize() {
1120
929
  var docEl = document.documentElement;
@@ -1148,7 +957,7 @@ if (typeof window !== 'undefined') {
1148
957
  document.addEventListener('DOMContentLoaded', setRootFontSize);
1149
958
  })();
1150
959
  </script>
1151
- `;return s.replace("</head>",`${l}
960
+ `;return i.replace("</head>",`${c}
1152
961
  <style data-taro-adapter="true">
1153
962
  /* \u4EC5 H5 \u751F\u6548\uFF1A\u9690\u85CF Taro \u9875\u9762\u5BB9\u5668\u6EDA\u52A8\u6761\uFF0C\u4F46\u4ECD\u53EF\u6EDA\u52A8 */
1154
963
  .taro_page {
@@ -1194,5 +1003,5 @@ if (typeof window !== 'undefined') {
1194
1003
  object-fit: contain;
1195
1004
  }
1196
1005
  </style>
1197
- </head>`)}}}function g(r={}){let{ratio:e=2}=r;return {postcssPlugin:"postcss-rpx2px",Declaration(t){t.value.includes("rpx")&&(t.value=t.value.replace(/(-?\d*\.?\d+)rpx/gi,(n,o)=>{let i=parseFloat(o)/e;return i===0?"0":`${i}px`}));}}}g.postcss=true;function W(r={}){let{additional:e=[],autoInjectTaroApp:t=true,autoInjectVite:n=true}=r,o={},i=new Set(e);return t&&Object.keys(process.env).forEach(s=>{s.startsWith("TARO_APP_")&&i.add(s);}),n&&Object.keys(process.env).forEach(s=>{s.startsWith("VITE_")&&i.add(s);}),i.forEach(s=>{let l=process.env[s]||"";o[`process.env.${s}`]=JSON.stringify(l);}),o}function q(){return {"process.env.TARO_APP_API_BASE_URL":JSON.stringify(process.env.TARO_APP_API_BASE_URL||""),"process.env.VITE_API_BASE_URL":JSON.stringify(process.env.VITE_API_BASE_URL||"")}}function D(r={}){let e=[h(r.styleAdapter),{name:"dev-postcss-rpx2px-plugin",apply:"serve",config(t){R__default.default.env.TARO_ENV==="h5"&&typeof t.css?.postcss=="object"&&t.css?.postcss.plugins?.unshift(g());}},y(),S(),b(),_()];return R__default.default.env.WORKSPACE_GIT_REPO&&e.push(T()),e}exports.componentIdPlugin=y;exports.default=D;exports.editorBridgePlugin=S;exports.injectAmasterEnv=q;exports.injectTaroEnv=W;exports.routesExposePlugin=b;exports.rpx2pxPlugin=g;exports.smartReloadPlugin=_;exports.taroStyleAdapterPlugin=h;//# sourceMappingURL=index.cjs.map
1006
+ </head>`)}}}function h(e={}){let{ratio:n=2}=e;return {postcssPlugin:"postcss-rpx2px",Declaration(r){r.value?.includes("rpx")&&(r.value=r.value.replace(/(-?\d*\.?\d+)rpx/gi,(t,o)=>{let l=parseFloat(o)/n;return l===0?"0":`${l}px`}));}}}h.postcss=true;var $=/(-?\d*\.?\d+)rpx/gi,K=k__default.default.default??k__default.default,Y=L__default.default.default??L__default.default;function E(e,n){return e.replace($,(r,t)=>{let o=Number.parseFloat(t)/n;return o===0?"0":`${o}px`})}function G(e,n){if(!e.value.includes("rpx"))return false;let r=E(e.value,n);return r===e.value?false:(e.value=r,e.extra?.raw&&(e.extra.rawValue=r,e.extra.raw=JSON.stringify(r)),true)}function Q(e,n){let r=e.value.raw;if(!r.includes("rpx"))return false;let t=E(r,n),o=e.value.cooked==null?void 0:E(e.value.cooked,n);return t===r&&o===e.value.cooked?false:(e.value.raw=t,e.value.cooked=o,true)}function Z(e){return e.name.type==="JSXIdentifier"&&e.name.name==="style"}function ee(e,n){let r=false;return e.traverse({StringLiteral(t){G(t.node,n)&&(r=true);},TemplateElement(t){Q(t.node,n)&&(r=true);}}),r}function D(e,n=2){let r=parser.parse(e,{sourceType:"module",plugins:["jsx","typescript"],errorRecovery:true}),t=false;return Y(r,{JSXAttribute(o){if(!Z(o.node)||o.node.value?.type!=="JSXExpressionContainer")return;let l=o.get("value");l.isJSXExpressionContainer()&&ee(l,n)&&(t=true);}}),t?{changed:true,code:K(r,{retainLines:true,decoratorsBeforeExport:true,jsescOption:{minimal:true}},e).code}:{changed:false,code:e}}function R(e={}){let{ratio:n=2}=e;return {name:"vite-plugin-jsx-inline-style-rpx",enforce:"pre",transform(r,t){if(process.env.TARO_ENV!=="h5"||!/\.[jt]sx($|\?)/.test(t))return null;let o=D(r,n);return o.changed?{code:o.code,map:null}:null}}}function re(e={}){let{additional:n=[],autoInjectTaroApp:r=true,autoInjectVite:t=true}=e,o={},l=new Set(n);return r&&Object.keys(process.env).forEach(i=>{i.startsWith("TARO_APP_")&&l.add(i);}),t&&Object.keys(process.env).forEach(i=>{i.startsWith("VITE_")&&l.add(i);}),l.forEach(i=>{let c=process.env[i]||"";o[`process.env.${i}`]=JSON.stringify(c);}),o}function te(){return {"process.env.TARO_APP_API_BASE_URL":JSON.stringify(process.env.TARO_APP_API_BASE_URL||""),"process.env.VITE_API_BASE_URL":JSON.stringify(process.env.VITE_API_BASE_URL||""),"process.env.API_BASE_URL":JSON.stringify(process.env.API_BASE_URL||"")}}function ne(e={}){let n=e.isTaro??A__default.default.env.TARO_ENV==="h5",r=[C(),I()];return e.jsxSourceTagger!==false&&r.push(S()),e.tailwindConfigSync!==false&&r.push(b({configPath:e.tailwindConfigPath})),n&&(r.unshift(R()),r.unshift(x(e.styleAdapter)),r.unshift({name:"dev-postcss-rpx2px-plugin",apply:"serve",config(t){typeof t.css?.postcss=="object"&&t.css?.postcss.plugins?.unshift(h());}})),A__default.default.env.WORKSPACE_GIT_REPO&&r.push(j()),r}exports.default=ne;exports.editorBridgePlugin=C;exports.injectAmasterEnv=te;exports.injectTaroEnv=re;exports.jsxInlineStyleRpxPlugin=R;exports.jsxSourceTaggerPlugin=S;exports.routesExposePlugin=I;exports.rpx2pxPlugin=h;exports.tailwindConfigSyncPlugin=b;exports.taroStyleAdapterPlugin=x;exports.transformJsxInlineStyleRpx=D;//# sourceMappingURL=index.cjs.map
1198
1007
  //# sourceMappingURL=index.cjs.map