@reckona/mreact-compiler 0.0.96 → 0.0.98
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/diagnostics.d.ts +1 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +8 -0
- package/dist/diagnostics.js.map +1 -1
- package/dist/emit-client.js +14 -9
- package/dist/emit-client.js.map +1 -1
- package/dist/emit-compat.js +5 -1
- package/dist/emit-compat.js.map +1 -1
- package/dist/emit-server-stream.d.ts.map +1 -1
- package/dist/emit-server-stream.js +70 -6
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.d.ts.map +1 -1
- package/dist/emit-server.js +69 -13
- package/dist/emit-server.js.map +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +7 -4
- package/dist/internal.js.map +1 -1
- package/dist/ir.d.ts +1 -0
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js.map +1 -1
- package/dist/oxc-child-analysis.d.ts.map +1 -1
- package/dist/oxc-child-analysis.js +44 -10
- package/dist/oxc-child-analysis.js.map +1 -1
- package/dist/oxc-component-detection.d.ts +5 -2
- package/dist/oxc-component-detection.d.ts.map +1 -1
- package/dist/oxc-component-detection.js +80 -3
- package/dist/oxc-component-detection.js.map +1 -1
- package/dist/oxc-component-props.d.ts +1 -1
- package/dist/oxc-component-props.d.ts.map +1 -1
- package/dist/oxc-component-props.js +1 -1
- package/dist/oxc-component-props.js.map +1 -1
- package/dist/oxc-component-references.d.ts.map +1 -1
- package/dist/oxc-component-references.js +247 -12
- package/dist/oxc-component-references.js.map +1 -1
- package/dist/oxc-runtime-emit.d.ts.map +1 -1
- package/dist/oxc-runtime-emit.js +10 -2
- package/dist/oxc-runtime-emit.js.map +1 -1
- package/dist/oxc.d.ts.map +1 -1
- package/dist/oxc.js +109 -20
- package/dist/oxc.js.map +1 -1
- package/dist/transform.js +29 -11
- package/dist/transform.js.map +1 -1
- package/package.json +2 -2
- package/src/diagnostics.ts +10 -0
- package/src/emit-client.ts +20 -10
- package/src/emit-compat.ts +6 -1
- package/src/emit-server-stream.ts +96 -6
- package/src/emit-server.ts +93 -29
- package/src/internal.ts +9 -4
- package/src/ir.ts +1 -0
- package/src/oxc-child-analysis.ts +66 -21
- package/src/oxc-component-detection.ts +145 -2
- package/src/oxc-component-props.ts +2 -1
- package/src/oxc-component-references.ts +366 -11
- package/src/oxc-runtime-emit.ts +12 -2
- package/src/oxc.ts +167 -5
- package/src/transform.ts +42 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-component-detection.js","sourceRoot":"","sources":["../src/oxc-component-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGlF,MAAM,UAAU,+BAA+B,CAAC,OAAgB;IAC9D,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC/C,MAAM,WAAW,GAAG,yCAAyC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9F,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEnD,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACtC,OAAO,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,iBAAiB,GAAG,mCAAmC,CAAC,WAAW,CAAC,CAAC;QAC3E,OAAO,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/D,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC/C,MAAM,WAAW,GAAG,yCAAyC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YAE9F,IAAI,WAAW,KAAK,SAAS,IAAI,iCAAiC,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChF,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEnD,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,IAAI,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACvF,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAEtC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,mCAAmC,CAAC,WAAW,CAAC,CAAC;QAE3E,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAEjD,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,WAAW,GACf,MAAM,CAAC,IAAI,KAAK,0BAA0B,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;YACpF,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC;QACb,MAAM,YAAY,GAChB,WAAW,CAAC,IAAI,KAAK,qBAAqB;YACxC,CAAC,CAAC,mCAAmC,CAAC,WAAW,CAAC,EAAE,WAAW;YAC/D,CAAC,CAAC,yCAAyC,CAAC,WAAW,CAAC,CAAC;QAE7D,IACE,YAAY,KAAK,SAAS;YAC1B,YAAY,CAAC,KAAK,KAAK,IAAI;YAC3B,CAAC,iCAAiC,CAAC,YAAY,CAAC,EAChD,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAEvC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAkB;IAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,yCAAyC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9F,OAAO,WAAW,KAAK,SAAS,IAAI,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,CACL,CAAC,WAAW,CAAC,IAAI,KAAK,qBAAqB,IAAI,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpF,mCAAmC,CAAC,WAAW,CAAC,KAAK,SAAS,CAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAkB;IAC3D,OAAO,yBAAyB,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAkB;IAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QAC/C,OAAO,yCAAyC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,SAAS,CAAC;IACjG,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnD,OAAO,CACL,WAAW,CAAC,IAAI,KAAK,qBAAqB;QAC1C,yCAAyC,CAAC,WAAW,CAAC,KAAK,SAAS,CACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,SAAkB,EAClB,OAA8B;IAE9B,IAAI,OAAO,EAAE,qBAAqB,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAEtC,OAAO,CACL,WAAW,CAAC,IAAI,KAAK,qBAAqB;QAC1C,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ;QAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACtB,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC;QACrC,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,WAAoC;IAEpC,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,yCAAyC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvF,IAAI,WAAW,KAAK,SAAS,IAAI,iCAAiC,CAAC,WAAW,CAAC,EAAE,CAAC;YAChF,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAkB;IAElB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IAED,OAAO,mCAAmC,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,yCAAyC,CACvD,UAAmC;IAEnC,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEnD,IACE,SAAS,CAAC,IAAI,KAAK,yBAAyB;QAC5C,SAAS,CAAC,IAAI,KAAK,oBAAoB;QACvC,SAAS,CAAC,IAAI,KAAK,qBAAqB,EACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;QAC7F,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,OAAO,yCAAyC,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,YAAqC;IAC/E,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,YAAqC;IACrF,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,IAAI,2BAA2B,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACtC,OAAO,wBAAwB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACtC,OAAO,4BAA4B,CAAC,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAkC;IAC5D,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACpD,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,CACL,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBACjC,wBAAwB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CACtD,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,CACL,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9C,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAkC;IACtE,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACpD,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,CACL,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBACjC,4BAA4B,CAAC,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,CACL,sBAAsB,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,sBAAsB,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CACxD,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAkC;IAChE,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACzC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO;YACL,GAAG,sBAAsB,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3D,GAAG,sBAAsB,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACvD,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7D,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAC1C,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAiC;IAC7D,OAAO,CACL,QAAQ,CAAC,IAAI,KAAK,aAAa;QAC/B,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAmC;IAC9E,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,CACL,MAAM,CAAC,IAAI,KAAK,YAAY;YAC5B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1B,QAAQ,CAAC,IAAI,KAAK,YAAY;YAC9B,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;YACjC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC7B,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,uBAAuB,CAAC;AAC7F,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAmC;IACnE,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEnD,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC3C,OAAO,CACL,SAAS,CAAC,QAAQ,KAAK,IAAI;YAC3B,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAClD,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QAC/C,OAAO,CACL,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtD,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAmC;IAC/D,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEnD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport type { AnalyzeModuleOptions } from \"./types.js\";\n\nexport function collectOxcExportedFunctionNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n const id = readObject(declaration?.id);\n return [typeof id.name === \"string\" ? id.name : \"DefaultExport\"];\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return [];\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\") {\n const id = readObject(declaration.id);\n return typeof id.name === \"string\" ? [id.name] : [];\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n return variableComponent === undefined ? [] : [variableComponent.name];\n });\n}\n\nexport function collectOxcPlainComponentNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const component = readOxcPlainComponent(statement);\n return component === undefined ? [] : [component.name];\n });\n}\n\nexport function collectOxcExportedComponents(program: unknown): string[] {\n const body = readArray(readObject(program).body);\n const components: string[] = [];\n\n for (const statement of body) {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n\n if (declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration)) {\n components.push(\"default\");\n }\n continue;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) {\n const id = readObject(declaration.id);\n\n if (typeof id.name === \"string\") {\n components.push(id.name);\n }\n continue;\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n\n if (variableComponent !== undefined) {\n components.push(variableComponent.name);\n }\n }\n\n return components;\n}\n\nexport function collectOxcAsyncComponentNames(program: unknown): Set<string> {\n const names = new Set<string>();\n const body = readArray(readObject(program).body);\n\n for (const statement of body) {\n const object = readObject(statement);\n const declaration =\n object.type === \"ExportDefaultDeclaration\" || object.type === \"ExportNamedDeclaration\"\n ? readObject(object.declaration)\n : object;\n const functionLike =\n declaration.type === \"VariableDeclaration\"\n ? readOxcVariableComponentDeclaration(declaration)?.initializer\n : unwrapOxcComponentFunctionLikeInitializer(declaration);\n\n if (\n functionLike === undefined ||\n functionLike.async !== true ||\n !hasOxcFunctionLikeComponentReturn(functionLike)\n ) {\n continue;\n }\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const id = readObject(functionLike.id);\n names.add(typeof id.name === \"string\" ? id.name : \"DefaultExport\");\n continue;\n }\n\n const id = readObject(functionLike.id);\n\n if (typeof id.name === \"string\") {\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function isOxcExportedJsxComponent(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n return declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration);\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n return (\n (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) ||\n readOxcVariableComponentDeclaration(declaration) !== undefined\n );\n}\n\nexport function isOxcJsxComponentStatement(statement: unknown): boolean {\n return isOxcExportedJsxComponent(statement) || readOxcPlainComponent(statement) !== undefined;\n}\n\nexport function isOxcExportedFunctionLike(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n return unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration)) !== undefined;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n\n return (\n declaration.type === \"FunctionDeclaration\" ||\n unwrapOxcComponentFunctionLikeInitializer(declaration) !== undefined\n );\n}\n\nexport function isOxcUnsupportedExportedFunction(\n statement: unknown,\n options?: AnalyzeModuleOptions,\n): boolean {\n if (options?.compatReactNodeReturn === true) {\n return false;\n }\n\n const object = readObject(statement);\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n const id = readObject(declaration.id);\n\n return (\n declaration.type === \"FunctionDeclaration\" &&\n typeof id.name === \"string\" &&\n /^[A-Z]/.test(id.name) &&\n !hasComponentReturn(declaration.body) &&\n !hasOnlyNullReturns(declaration.body)\n );\n}\n\nexport function readOxcVariableComponentDeclaration(\n declaration: Record<string, unknown>,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n if (declaration.type !== \"VariableDeclaration\") {\n return undefined;\n }\n\n for (const declarator of readArray(declaration.declarations)) {\n const object = readObject(declarator);\n const id = readObject(object.id);\n\n if (typeof id.name !== \"string\" || !/^[A-Z]/.test(id.name)) {\n continue;\n }\n\n const initializer = unwrapOxcComponentFunctionLikeInitializer(readObject(object.init));\n\n if (initializer !== undefined && hasOxcFunctionLikeComponentReturn(initializer)) {\n return { name: id.name, initializer };\n }\n }\n\n return undefined;\n}\n\nexport function readOxcPlainComponent(\n statement: unknown,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n const object = readObject(statement);\n\n if (object.type === \"FunctionDeclaration\" && hasComponentReturn(object.body)) {\n const id = readObject(object.id);\n return typeof id.name === \"string\" ? { name: id.name, initializer: object } : undefined;\n }\n\n return readOxcVariableComponentDeclaration(object);\n}\n\nexport function unwrapOxcComponentFunctionLikeInitializer(\n expression: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (\n unwrapped.type === \"ArrowFunctionExpression\" ||\n unwrapped.type === \"FunctionExpression\" ||\n unwrapped.type === \"FunctionDeclaration\"\n ) {\n return unwrapped;\n }\n\n if (unwrapped.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(unwrapped.callee);\n\n if (callee.type !== \"Identifier\" || (callee.name !== \"memo\" && callee.name !== \"forwardRef\")) {\n return undefined;\n }\n\n const firstArg = readObject(readArray(unwrapped.arguments)[0]);\n\n return unwrapOxcComponentFunctionLikeInitializer(firstArg);\n}\n\nexport function hasOxcFunctionLikeJsxReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (isOxcJsxReturnExpression(body)) {\n return true;\n }\n\n return hasJsxReturn(body);\n}\n\nexport function hasOxcFunctionLikeComponentReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (hasOxcFunctionLikeJsxReturn(functionLike)) {\n return true;\n }\n\n if (isOxcComponentCallExpression(body)) {\n return true;\n }\n\n return hasComponentCallReturn(body);\n}\n\nexport function hasJsxReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcJsxReturnExpression(readObject(object.argument));\n }\n\n return hasNestedJsxReturn(object);\n });\n}\n\nexport function hasComponentReturn(body: unknown): boolean {\n return hasJsxReturn(body) || hasComponentCallReturn(body);\n}\n\nexport function hasOnlyNullReturns(body: unknown): boolean {\n const returns = collectReturnArguments(readObject(body));\n return returns.length > 0 && returns.every(isNullReturnArgument);\n}\n\nexport function hasComponentCallReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)));\n }\n\n return hasNestedComponentCallReturn(object);\n });\n}\n\nfunction hasNestedJsxReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcJsxReturnExpression(readObject(object.argument))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasJsxReturn({ body: [statement.consequent] }) ||\n hasJsxReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasJsxReturn(statement);\n }\n\n return false;\n}\n\nfunction hasNestedComponentCallReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasComponentCallReturn({ body: [statement.consequent] }) ||\n hasComponentCallReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasComponentCallReturn(statement);\n }\n\n return false;\n}\n\nfunction collectReturnArguments(statement: Record<string, unknown>): Record<string, unknown>[] {\n if (statement.type === \"ReturnStatement\") {\n return [readObject(statement.argument)];\n }\n\n if (statement.type === \"BlockStatement\") {\n return readArray(statement.body).flatMap((child) => collectReturnArguments(readObject(child)));\n }\n\n if (statement.type === \"IfStatement\") {\n return [\n ...collectReturnArguments(readObject(statement.consequent)),\n ...collectReturnArguments(readObject(statement.alternate)),\n ];\n }\n\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).flatMap((switchCase) =>\n readArray(readObject(switchCase).consequent).flatMap((child) =>\n collectReturnArguments(readObject(child)),\n ),\n );\n }\n\n return [];\n}\n\nfunction isNullReturnArgument(argument: Record<string, unknown>): boolean {\n return (\n argument.type === \"NullLiteral\" ||\n (argument.type === \"Literal\" && argument.value === null)\n );\n}\n\nexport function isOxcComponentCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapOxcParentheses(readObject(expression.callee));\n\n if (callee.type === \"Identifier\") {\n return typeof callee.name === \"string\" && /^[A-Z]/.test(callee.name);\n }\n\n if (callee.type === \"MemberExpression\") {\n const object = readObject(callee.object);\n const property = readObject(callee.property);\n return (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n /^[A-Z]/.test(object.name) &&\n property.type === \"Identifier\" &&\n typeof property.name === \"string\" &&\n /^[A-Z]/.test(property.name)\n );\n }\n\n return false;\n}\n\nexport function isJsxRoot(type: unknown): boolean {\n return type === \"JSXElement\" || type === \"JSXFragment\" || type === \"JSXSelfClosingElement\";\n}\n\nfunction isOxcJsxReturnExpression(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (isJsxRoot(unwrapped.type)) {\n return true;\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n return (\n unwrapped.operator === \"&&\" &&\n isOxcJsxReturnBranch(readObject(unwrapped.right))\n );\n }\n\n if (unwrapped.type === \"ConditionalExpression\") {\n return (\n isOxcJsxReturnBranch(readObject(unwrapped.consequent)) &&\n isOxcJsxReturnBranch(readObject(unwrapped.alternate))\n );\n }\n\n return false;\n}\n\nfunction isOxcJsxReturnBranch(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return true;\n }\n\n return isOxcJsxReturnExpression(unwrapped);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-component-detection.js","sourceRoot":"","sources":["../src/oxc-component-detection.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport type { AnalyzeModuleOptions } from \"./types.js\";\n\nexport function collectOxcExportedFunctionNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n const id = readObject(declaration?.id);\n return [typeof id.name === \"string\" ? id.name : \"DefaultExport\"];\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return [];\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\") {\n const id = readObject(declaration.id);\n return typeof id.name === \"string\" ? [id.name] : [];\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n return variableComponent === undefined ? [] : [variableComponent.name];\n });\n}\n\nexport function collectOxcPlainComponentNames(program: unknown): string[] {\n return readArray(readObject(program).body).flatMap((statement) => {\n const component = readOxcPlainComponent(statement);\n return component === undefined ? [] : [component.name];\n });\n}\n\nexport function collectOxcLocalJsxReturnFunctionNames(program: unknown): Set<string> {\n const names = new Set<string>();\n\n for (const statement of readArray(readObject(program).body)) {\n const object = readObject(statement);\n\n if (object.type === \"FunctionDeclaration\" && hasOxcFunctionLikeJsxReturn(object)) {\n const id = readObject(object.id);\n if (typeof id.name === \"string\") {\n names.add(id.name);\n }\n continue;\n }\n\n if (object.type !== \"VariableDeclaration\") {\n continue;\n }\n\n for (const declarator of readArray(object.declarations)) {\n const declaratorObject = readObject(declarator);\n const id = readObject(declaratorObject.id);\n const initializer = unwrapOxcComponentFunctionLikeInitializer(\n readObject(declaratorObject.init),\n );\n\n if (\n typeof id.name === \"string\" &&\n initializer !== undefined &&\n hasOxcFunctionLikeJsxReturn(initializer)\n ) {\n names.add(id.name);\n }\n }\n }\n\n return names;\n}\n\nexport function collectOxcExportedComponents(program: unknown): string[] {\n const body = readArray(readObject(program).body);\n const components: string[] = [];\n\n for (const statement of body) {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n\n if (declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration)) {\n components.push(\"default\");\n }\n continue;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readObject(object.declaration);\n\n if (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) {\n const id = readObject(declaration.id);\n\n if (typeof id.name === \"string\") {\n components.push(id.name);\n }\n continue;\n }\n\n const variableComponent = readOxcVariableComponentDeclaration(declaration);\n\n if (variableComponent !== undefined) {\n components.push(variableComponent.name);\n }\n }\n\n return components;\n}\n\nexport function collectOxcAsyncComponentNames(program: unknown): Set<string> {\n const names = new Set<string>();\n const body = readArray(readObject(program).body);\n\n for (const statement of body) {\n const object = readObject(statement);\n const declaration =\n object.type === \"ExportDefaultDeclaration\" || object.type === \"ExportNamedDeclaration\"\n ? readObject(object.declaration)\n : object;\n const functionLike =\n declaration.type === \"VariableDeclaration\"\n ? readOxcVariableComponentDeclaration(declaration)?.initializer\n : unwrapOxcComponentFunctionLikeInitializer(declaration);\n\n if (\n functionLike === undefined ||\n functionLike.async !== true ||\n !hasOxcFunctionLikeComponentReturn(functionLike)\n ) {\n continue;\n }\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const id = readObject(functionLike.id);\n names.add(typeof id.name === \"string\" ? id.name : \"DefaultExport\");\n continue;\n }\n\n const id = readObject(functionLike.id);\n\n if (typeof id.name === \"string\") {\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function isOxcExportedJsxComponent(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n const declaration = unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration));\n return declaration !== undefined && hasOxcFunctionLikeComponentReturn(declaration);\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n return (\n (declaration.type === \"FunctionDeclaration\" && hasComponentReturn(declaration.body)) ||\n readOxcVariableComponentDeclaration(declaration) !== undefined\n );\n}\n\nexport function isOxcJsxComponentStatement(\n statement: unknown,\n localJsxReturnFunctionNames: ReadonlySet<string> = new Set(),\n): boolean {\n return (\n isOxcExportedJsxComponent(statement) ||\n isOxcExportedFunctionReturningLocalJsxHelper(statement, localJsxReturnFunctionNames) ||\n readOxcPlainComponent(statement) !== undefined\n );\n}\n\nexport function isOxcExportedFunctionLike(statement: unknown): boolean {\n const object = readObject(statement);\n\n if (object.type === \"ExportDefaultDeclaration\") {\n return unwrapOxcComponentFunctionLikeInitializer(readObject(object.declaration)) !== undefined;\n }\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n\n return (\n declaration.type === \"FunctionDeclaration\" ||\n unwrapOxcComponentFunctionLikeInitializer(declaration) !== undefined\n );\n}\n\nexport function isOxcUnsupportedExportedFunction(\n statement: unknown,\n options?: AnalyzeModuleOptions,\n localJsxReturnFunctionNames: ReadonlySet<string> = new Set(),\n): boolean {\n if (options?.compatReactNodeReturn === true) {\n return false;\n }\n\n const object = readObject(statement);\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n const id = readObject(declaration.id);\n\n return (\n declaration.type === \"FunctionDeclaration\" &&\n typeof id.name === \"string\" &&\n /^[A-Z]/.test(id.name) &&\n !hasComponentReturn(declaration.body) &&\n !hasLocalJsxHelperCallReturn(declaration.body, localJsxReturnFunctionNames) &&\n !hasOnlyNullReturns(declaration.body)\n );\n}\n\nfunction isOxcExportedFunctionReturningLocalJsxHelper(\n statement: unknown,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n const object = readObject(statement);\n\n if (object.type !== \"ExportNamedDeclaration\") {\n return false;\n }\n\n const declaration = readObject(object.declaration);\n\n return (\n declaration.type === \"FunctionDeclaration\" &&\n hasLocalJsxHelperCallReturn(declaration.body, localJsxReturnFunctionNames)\n );\n}\n\nexport function readOxcVariableComponentDeclaration(\n declaration: Record<string, unknown>,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n if (declaration.type !== \"VariableDeclaration\") {\n return undefined;\n }\n\n for (const declarator of readArray(declaration.declarations)) {\n const object = readObject(declarator);\n const id = readObject(object.id);\n\n if (typeof id.name !== \"string\" || !/^[A-Z]/.test(id.name)) {\n continue;\n }\n\n const initializer = unwrapOxcComponentFunctionLikeInitializer(readObject(object.init));\n\n if (initializer !== undefined && hasOxcFunctionLikeComponentReturn(initializer)) {\n return { name: id.name, initializer };\n }\n }\n\n return undefined;\n}\n\nexport function readOxcPlainComponent(\n statement: unknown,\n): { name: string; initializer: Record<string, unknown> } | undefined {\n const object = readObject(statement);\n\n if (object.type === \"FunctionDeclaration\" && hasComponentReturn(object.body)) {\n const id = readObject(object.id);\n return typeof id.name === \"string\" ? { name: id.name, initializer: object } : undefined;\n }\n\n return readOxcVariableComponentDeclaration(object);\n}\n\nexport function unwrapOxcComponentFunctionLikeInitializer(\n expression: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (\n unwrapped.type === \"ArrowFunctionExpression\" ||\n unwrapped.type === \"FunctionExpression\" ||\n unwrapped.type === \"FunctionDeclaration\"\n ) {\n return unwrapped;\n }\n\n if (unwrapped.type !== \"CallExpression\") {\n return undefined;\n }\n\n const callee = readObject(unwrapped.callee);\n\n if (callee.type !== \"Identifier\" || (callee.name !== \"memo\" && callee.name !== \"forwardRef\")) {\n return undefined;\n }\n\n const firstArg = readObject(readArray(unwrapped.arguments)[0]);\n\n return unwrapOxcComponentFunctionLikeInitializer(firstArg);\n}\n\nexport function hasOxcFunctionLikeJsxReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (isOxcJsxReturnExpression(body)) {\n return true;\n }\n\n return hasJsxReturn(body);\n}\n\nexport function hasOxcFunctionLikeComponentReturn(functionLike: Record<string, unknown>): boolean {\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (hasOxcFunctionLikeJsxReturn(functionLike)) {\n return true;\n }\n\n if (isOxcComponentCallExpression(body)) {\n return true;\n }\n\n return hasComponentCallReturn(body);\n}\n\nexport function hasJsxReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcJsxReturnExpression(readObject(object.argument));\n }\n\n return hasNestedJsxReturn(object);\n });\n}\n\nexport function hasComponentReturn(body: unknown): boolean {\n return hasJsxReturn(body) || hasComponentCallReturn(body);\n}\n\nexport function hasOnlyNullReturns(body: unknown): boolean {\n const returns = collectReturnArguments(readObject(body));\n return returns.length > 0 && returns.every(isNullReturnArgument);\n}\n\nexport function hasComponentCallReturn(body: unknown): boolean {\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)));\n }\n\n return hasNestedComponentCallReturn(object);\n });\n}\n\nexport function hasLocalJsxHelperCallReturn(\n body: unknown,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n if (localJsxReturnFunctionNames.size === 0) {\n return false;\n }\n\n return readArray(readObject(body).body).some((statement) => {\n const object = readObject(statement);\n\n if (object.type === \"ReturnStatement\") {\n return isOxcLocalJsxHelperCallExpression(\n unwrapOxcParentheses(readObject(object.argument)),\n localJsxReturnFunctionNames,\n );\n }\n\n return hasNestedLocalJsxHelperCallReturn(object, localJsxReturnFunctionNames);\n });\n}\n\nexport function isOxcLocalJsxHelperCallExpression(\n expression: Record<string, unknown>,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapOxcParentheses(readObject(expression.callee));\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n localJsxReturnFunctionNames.has(callee.name)\n );\n}\n\nfunction hasNestedJsxReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcJsxReturnExpression(readObject(object.argument))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasJsxReturn({ body: [statement.consequent] }) ||\n hasJsxReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasJsxReturn(statement);\n }\n\n return false;\n}\n\nfunction hasNestedComponentCallReturn(statement: Record<string, unknown>): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcComponentCallExpression(unwrapOxcParentheses(readObject(object.argument)))\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasComponentCallReturn({ body: [statement.consequent] }) ||\n hasComponentCallReturn({ body: [statement.alternate] })\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasComponentCallReturn(statement);\n }\n\n return false;\n}\n\nfunction hasNestedLocalJsxHelperCallReturn(\n statement: Record<string, unknown>,\n localJsxReturnFunctionNames: ReadonlySet<string>,\n): boolean {\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).some((switchCase) =>\n readArray(readObject(switchCase).consequent).some((child) => {\n const object = readObject(child);\n return (\n object.type === \"ReturnStatement\" &&\n isOxcLocalJsxHelperCallExpression(\n unwrapOxcParentheses(readObject(object.argument)),\n localJsxReturnFunctionNames,\n )\n );\n }),\n );\n }\n\n if (statement.type === \"IfStatement\") {\n return (\n hasLocalJsxHelperCallReturn(\n { body: [statement.consequent] },\n localJsxReturnFunctionNames,\n ) ||\n hasLocalJsxHelperCallReturn(\n { body: [statement.alternate] },\n localJsxReturnFunctionNames,\n )\n );\n }\n\n if (statement.type === \"BlockStatement\") {\n return hasLocalJsxHelperCallReturn(statement, localJsxReturnFunctionNames);\n }\n\n return false;\n}\n\nfunction collectReturnArguments(statement: Record<string, unknown>): Record<string, unknown>[] {\n if (statement.type === \"ReturnStatement\") {\n return [readObject(statement.argument)];\n }\n\n if (statement.type === \"BlockStatement\") {\n return readArray(statement.body).flatMap((child) => collectReturnArguments(readObject(child)));\n }\n\n if (statement.type === \"IfStatement\") {\n return [\n ...collectReturnArguments(readObject(statement.consequent)),\n ...collectReturnArguments(readObject(statement.alternate)),\n ];\n }\n\n if (statement.type === \"SwitchStatement\") {\n return readArray(statement.cases).flatMap((switchCase) =>\n readArray(readObject(switchCase).consequent).flatMap((child) =>\n collectReturnArguments(readObject(child)),\n ),\n );\n }\n\n return [];\n}\n\nfunction isNullReturnArgument(argument: Record<string, unknown>): boolean {\n return (\n argument.type === \"NullLiteral\" ||\n (argument.type === \"Literal\" && argument.value === null)\n );\n}\n\nexport function isOxcComponentCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapOxcParentheses(readObject(expression.callee));\n\n if (callee.type === \"Identifier\") {\n return typeof callee.name === \"string\" && /^[A-Z]/.test(callee.name);\n }\n\n if (callee.type === \"MemberExpression\") {\n const object = readObject(callee.object);\n const property = readObject(callee.property);\n return (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n /^[A-Z]/.test(object.name) &&\n property.type === \"Identifier\" &&\n typeof property.name === \"string\" &&\n /^[A-Z]/.test(property.name)\n );\n }\n\n return false;\n}\n\nexport function isJsxRoot(type: unknown): boolean {\n return type === \"JSXElement\" || type === \"JSXFragment\" || type === \"JSXSelfClosingElement\";\n}\n\nfunction isOxcJsxReturnExpression(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (isJsxRoot(unwrapped.type)) {\n return true;\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n return (\n unwrapped.operator === \"&&\" &&\n isOxcJsxReturnBranch(readObject(unwrapped.right))\n );\n }\n\n if (unwrapped.type === \"ConditionalExpression\") {\n return (\n isOxcJsxReturnBranch(readObject(unwrapped.consequent)) &&\n isOxcJsxReturnBranch(readObject(unwrapped.alternate))\n );\n }\n\n return false;\n}\n\nfunction isOxcJsxReturnBranch(expression: Record<string, unknown>): boolean {\n const unwrapped = unwrapOxcParentheses(expression);\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return true;\n }\n\n return isOxcJsxReturnExpression(unwrapped);\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ComponentPropIr, JsxNodeIr } from "./ir.js";
|
|
2
2
|
import type { OxcBodyStatementJsxMode } from "./oxc-analysis-types.js";
|
|
3
3
|
import type { Diagnostic } from "./types.js";
|
|
4
|
-
export type AnalyzeOxcJsxNodeCallback = (node: Record<string, unknown>, bodyStatementJsx?: OxcBodyStatementJsxMode) => JsxNodeIr;
|
|
4
|
+
export type AnalyzeOxcJsxNodeCallback = (node: Record<string, unknown>, bodyStatementJsx?: OxcBodyStatementJsxMode, shadowNames?: readonly string[]) => JsxNodeIr;
|
|
5
5
|
export declare function analyzeOxcComponentProp(code: string, attr: unknown, analyzeJsxNode: AnalyzeOxcJsxNodeCallback, diagnostics?: Pick<Diagnostic, "level" | "code" | "message" | "loc">[], options?: {
|
|
6
6
|
allowRef?: boolean;
|
|
7
7
|
resolveExpressionCode?: (expression: Record<string, unknown>) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-component-props.d.ts","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,gBAAgB,CAAC,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"oxc-component-props.d.ts","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,gBAAgB,CAAC,EAAE,uBAAuB,EAC1C,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,KAC5B,SAAS,CAAC;AAEf,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,yBAAyB,EACzC,WAAW,GAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,EAAO,EAC1E,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CACpE,GACL,eAAe,EAAE,CAgDnB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC,eAAe,GAAG,SAAS,CA8B7B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,CAmBA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,EAAE,yBAAyB,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,CAgBA"}
|
|
@@ -85,7 +85,7 @@ export function analyzeOxcArrowJsxRenderer(code, arrow, analyzeJsxNode, bodyStat
|
|
|
85
85
|
if (body.type === "JSXElement" || body.type === "JSXFragment") {
|
|
86
86
|
return {
|
|
87
87
|
valueName,
|
|
88
|
-
children: [analyzeJsxNode(body, bodyStatementJsx)],
|
|
88
|
+
children: [analyzeJsxNode(body, bodyStatementJsx, [valueName])],
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
91
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-component-props.js","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"oxc-component-props.js","sourceRoot":"","sources":["../src/oxc-component-props.ts"],"names":[],"mappings":"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","sourcesContent":["import { unsupportedRefAttributeDiagnostic } from \"./diagnostics.js\";\nimport type { ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport type { OxcBodyStatementJsxMode } from \"./oxc-analysis-types.js\";\nimport { stripOxcGeneratedImports } from \"./oxc-code-utils.js\";\nimport {\n getOxcLocation,\n readArray,\n readObject,\n readSource,\n unwrapOxcParentheses,\n} from \"./oxc-node-utils.js\";\nimport { containsOxcJsxSyntax } from \"./oxc-render-values.js\";\nimport { transformJsxWithOxc } from \"./oxc-transform.js\";\nimport type { Diagnostic } from \"./types.js\";\n\nexport type AnalyzeOxcJsxNodeCallback = (\n node: Record<string, unknown>,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n shadowNames?: readonly string[],\n) => JsxNodeIr;\n\nexport function analyzeOxcComponentProp(\n code: string,\n attr: unknown,\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n diagnostics: Pick<Diagnostic, \"level\" | \"code\" | \"message\" | \"loc\">[] = [],\n options: {\n allowRef?: boolean;\n resolveExpressionCode?: (expression: Record<string, unknown>) => string;\n } = {},\n): ComponentPropIr[] {\n const object = readObject(attr);\n\n if (object.type === \"JSXSpreadAttribute\") {\n return [{ kind: \"spread-prop\", code: readSource(code, readObject(object.argument)) }];\n }\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const value = readObject(object.value);\n\n if (name === \"ref\" && options.allowRef !== true) {\n diagnostics.push(unsupportedRefAttributeDiagnostic(getOxcLocation(code, object.name)));\n }\n\n if (value.type === \"Literal\") {\n return [{ kind: \"prop\", name, code: JSON.stringify(value.value) }];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n const expression = unwrapOxcParentheses(readObject(value.expression));\n\n if (expression.type === \"JSXElement\" || expression.type === \"JSXFragment\") {\n return [\n {\n kind: \"render-prop\",\n name,\n children: [analyzeJsxNode(expression)],\n },\n ];\n }\n\n return [\n {\n kind: \"prop\",\n name,\n code:\n expression.type === \"ArrowFunctionExpression\" && containsOxcJsxSyntax(expression)\n ? stripOxcGeneratedImports(transformJsxWithOxc(readSource(code, expression)))\n : (options.resolveExpressionCode?.(expression) ?? readSource(code, expression)),\n },\n ];\n }\n\n return [{ kind: \"prop\", name, code: \"true\" }];\n}\n\nexport function readOxcConsumerRenderProp(\n code: string,\n children: readonly unknown[],\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): ComponentPropIr | undefined {\n for (const child of children) {\n const object = readObject(child);\n\n if (object.type !== \"JSXExpressionContainer\") {\n continue;\n }\n\n const expression = unwrapOxcParentheses(readObject(object.expression));\n\n if (expression.type !== \"ArrowFunctionExpression\") {\n continue;\n }\n\n const renderer = analyzeOxcArrowJsxRenderer(\n code,\n expression,\n analyzeJsxNode,\n bodyStatementJsx,\n );\n\n return {\n kind: \"render-prop\",\n name: \"children\",\n valueName: renderer.valueName,\n children: renderer.children,\n };\n }\n\n return undefined;\n}\n\nexport function analyzeOxcSingleArrowJsxChild(\n code: string,\n children: readonly unknown[],\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): {\n valueName: string;\n children: JsxNodeIr[];\n} {\n for (const child of children) {\n const object = readObject(child);\n\n if (object.type !== \"JSXExpressionContainer\") {\n continue;\n }\n\n const expression = unwrapOxcParentheses(readObject(object.expression));\n\n if (expression.type === \"ArrowFunctionExpression\") {\n return analyzeOxcArrowJsxRenderer(code, expression, analyzeJsxNode, bodyStatementJsx);\n }\n }\n\n return {\n valueName: \"_value\",\n children: [],\n };\n}\n\nexport function analyzeOxcArrowJsxRenderer(\n code: string,\n arrow: Record<string, unknown>,\n analyzeJsxNode: AnalyzeOxcJsxNodeCallback,\n bodyStatementJsx?: OxcBodyStatementJsxMode,\n): {\n valueName: string;\n children: JsxNodeIr[];\n} {\n const firstParameter = readObject(readArray(arrow.params)[0]);\n const valueName = typeof firstParameter.name === \"string\" ? firstParameter.name : \"_value\";\n const body = unwrapOxcParentheses(readObject(arrow.body));\n\n if (body.type === \"JSXElement\" || body.type === \"JSXFragment\") {\n return {\n valueName,\n children: [analyzeJsxNode(body, bodyStatementJsx, [valueName])],\n };\n }\n\n return {\n valueName,\n children: [{ kind: \"expr\", code: readSource(code, body) }],\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-component-references.d.ts","sourceRoot":"","sources":["../src/oxc-component-references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"oxc-component-references.d.ts","sourceRoot":"","sources":["../src/oxc-component-references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAmB5D,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,OAAO,EAChB,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3C,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CA8ChC;AAED,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,OAAO,GACf,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAwDhC;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,OAAO,GACf,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAShC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,SAAS,EACf,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC/B,IAAI,CAMN;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,EACf,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC/C,IAAI,CAaN;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,SAAS,EACf,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACxD,IAAI,CAYN;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACjD,IAAI,CAUN"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readArray, readObject } from "./oxc-node-utils.js";
|
|
2
|
-
const routerEntryCompatRuntimeExports = new Set(
|
|
3
|
-
const routerLinkCompatRuntimeExports = new Set(
|
|
2
|
+
const routerEntryCompatRuntimeExports = new Set();
|
|
3
|
+
const routerLinkCompatRuntimeExports = new Set();
|
|
4
|
+
const unknownCompatReference = { moduleId: "", exportName: "default" };
|
|
4
5
|
export function collectOxcClientBoundaryImportComponents(program, inferredBoundaryImports) {
|
|
5
6
|
const names = new Map();
|
|
6
7
|
for (const statement of readArray(readObject(program).body)) {
|
|
@@ -78,6 +79,7 @@ export function collectOxcCompatRuntimeImportComponents(program) {
|
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
81
|
}
|
|
82
|
+
collectOxcClientReferenceAliases(program, names, { allowAmbiguousAliases: true });
|
|
81
83
|
return names;
|
|
82
84
|
}
|
|
83
85
|
export function collectOxcCompatReactNodeComponentReferences(program) {
|
|
@@ -212,11 +214,17 @@ function readOxcClassComponentName(node) {
|
|
|
212
214
|
}
|
|
213
215
|
return undefined;
|
|
214
216
|
}
|
|
215
|
-
function collectOxcClientReferenceAliases(node, references) {
|
|
217
|
+
function collectOxcClientReferenceAliases(node, references, options = {}) {
|
|
216
218
|
const state = {
|
|
219
|
+
allowAmbiguousAliases: options.allowAmbiguousAliases === true,
|
|
217
220
|
references,
|
|
218
221
|
stringConstants: new Map(),
|
|
219
222
|
objectMembers: new Map(),
|
|
223
|
+
objectMemberKeys: new Map(),
|
|
224
|
+
dynamicObjectMembers: new Map(),
|
|
225
|
+
dynamicObjectNestedMembers: new Map(),
|
|
226
|
+
globModuleMaps: new Set(),
|
|
227
|
+
objectEntryValueBindings: new Map(),
|
|
220
228
|
};
|
|
221
229
|
collectOxcClientReferenceAliasesFromNode(node, state);
|
|
222
230
|
}
|
|
@@ -250,6 +258,10 @@ function collectOxcClientReferenceAliasesFromNode(node, state) {
|
|
|
250
258
|
if (object.type === "CallExpression") {
|
|
251
259
|
collectOxcObjectAssignClientReferenceAliases(object, state);
|
|
252
260
|
}
|
|
261
|
+
if (object.type === "ForOfStatement") {
|
|
262
|
+
collectOxcForOfClientReferenceAliases(object, state);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
253
265
|
for (const [key, value] of Object.entries(object)) {
|
|
254
266
|
if (key === "type" || key === "start" || key === "end" || key === "loc") {
|
|
255
267
|
continue;
|
|
@@ -273,6 +285,9 @@ function collectOxcVariableClientReferenceAlias(node, state, constant) {
|
|
|
273
285
|
state.stringConstants.set(aliasName, stringValue);
|
|
274
286
|
}
|
|
275
287
|
}
|
|
288
|
+
if (isImportMetaGlobEagerCall(init)) {
|
|
289
|
+
state.globModuleMaps.add(aliasName);
|
|
290
|
+
}
|
|
276
291
|
collectOxcObjectLiteralClientReferenceAliases(aliasName, init, state);
|
|
277
292
|
const reference = expressionClientReference(init, state);
|
|
278
293
|
if (reference !== undefined) {
|
|
@@ -289,7 +304,14 @@ function collectOxcObjectLiteralClientReferenceAliases(objectName, init, state)
|
|
|
289
304
|
continue;
|
|
290
305
|
}
|
|
291
306
|
const keyName = propertyName(readOptionalObject(property.key), property.computed === true, state);
|
|
292
|
-
const
|
|
307
|
+
const value = readOptionalObject(property.value);
|
|
308
|
+
if (keyName !== undefined) {
|
|
309
|
+
addObjectMemberKey(state, objectName, keyName);
|
|
310
|
+
}
|
|
311
|
+
if (keyName !== undefined && value?.type === "ObjectExpression") {
|
|
312
|
+
collectOxcObjectLiteralClientReferenceAliases(`${objectName}.${keyName}`, value, state);
|
|
313
|
+
}
|
|
314
|
+
const reference = expressionClientReference(value, state);
|
|
293
315
|
if (keyName !== undefined && reference !== undefined) {
|
|
294
316
|
setObjectMemberReference(state, objectName, keyName, reference);
|
|
295
317
|
}
|
|
@@ -303,11 +325,42 @@ function collectOxcAssignmentClientReferenceAlias(node, state) {
|
|
|
303
325
|
if (left?.type !== "MemberExpression") {
|
|
304
326
|
return;
|
|
305
327
|
}
|
|
306
|
-
const objectName = expressionObjectName(readOptionalObject(left.object));
|
|
328
|
+
const objectName = expressionObjectName(readOptionalObject(left.object), state);
|
|
307
329
|
const memberName = propertyName(readOptionalObject(left.property), left.computed === true, state);
|
|
308
330
|
const reference = expressionClientReference(readOptionalObject(node.right), state);
|
|
309
|
-
if (objectName !== undefined && memberName !== undefined
|
|
310
|
-
|
|
331
|
+
if (objectName !== undefined && memberName !== undefined) {
|
|
332
|
+
addObjectMemberKey(state, objectName, memberName);
|
|
333
|
+
if (reference !== undefined) {
|
|
334
|
+
setObjectMemberReference(state, objectName, memberName, reference);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (objectName !== undefined && memberName === undefined) {
|
|
338
|
+
if (reference !== undefined) {
|
|
339
|
+
addDynamicObjectMemberReference(state, objectName, reference);
|
|
340
|
+
}
|
|
341
|
+
collectDynamicObjectNestedMemberReferences(objectName, readOptionalObject(node.right), state);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
function collectOxcForOfClientReferenceAliases(node, state) {
|
|
345
|
+
const sourceName = objectEntriesSourceName(readOptionalObject(node.right), state);
|
|
346
|
+
const valueName = forOfObjectEntriesValueBindingName(readOptionalObject(node.left));
|
|
347
|
+
if (sourceName === undefined || valueName === undefined) {
|
|
348
|
+
for (const [key, value] of Object.entries(node)) {
|
|
349
|
+
if (key === "type" || key === "start" || key === "end" || key === "loc") {
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
collectOxcClientReferenceAliasesFromNode(value, state);
|
|
353
|
+
}
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const previous = state.objectEntryValueBindings.get(valueName);
|
|
357
|
+
state.objectEntryValueBindings.set(valueName, sourceName);
|
|
358
|
+
collectOxcClientReferenceAliasesFromNode(node.body, state);
|
|
359
|
+
if (previous === undefined) {
|
|
360
|
+
state.objectEntryValueBindings.delete(valueName);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
state.objectEntryValueBindings.set(valueName, previous);
|
|
311
364
|
}
|
|
312
365
|
}
|
|
313
366
|
function collectOxcObjectAssignClientReferenceAliases(node, state) {
|
|
@@ -315,7 +368,7 @@ function collectOxcObjectAssignClientReferenceAliases(node, state) {
|
|
|
315
368
|
return;
|
|
316
369
|
}
|
|
317
370
|
const args = readArray(node.arguments).map(readOptionalObject);
|
|
318
|
-
const target = expressionObjectName(args[0]);
|
|
371
|
+
const target = expressionObjectName(args[0], state);
|
|
319
372
|
if (target === undefined) {
|
|
320
373
|
return;
|
|
321
374
|
}
|
|
@@ -331,7 +384,7 @@ function expressionClientReference(node, state) {
|
|
|
331
384
|
return state.references.get(node.name);
|
|
332
385
|
}
|
|
333
386
|
if (node.type === "MemberExpression") {
|
|
334
|
-
const objectName = expressionObjectName(readOptionalObject(node.object));
|
|
387
|
+
const objectName = expressionObjectName(readOptionalObject(node.object), state);
|
|
335
388
|
const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);
|
|
336
389
|
const objectReference = objectName === undefined ? undefined : state.references.get(objectName);
|
|
337
390
|
if (objectName !== undefined && memberName !== undefined) {
|
|
@@ -339,9 +392,25 @@ function expressionClientReference(node, state) {
|
|
|
339
392
|
if (objectMember !== undefined) {
|
|
340
393
|
return objectMember;
|
|
341
394
|
}
|
|
395
|
+
const dynamicObjectReference = selectClientReference(dynamicObjectMemberReferences(state, objectName), state.allowAmbiguousAliases);
|
|
396
|
+
if (dynamicObjectReference !== undefined) {
|
|
397
|
+
return dynamicObjectReference;
|
|
398
|
+
}
|
|
399
|
+
const objectEntryReference = objectEntryMemberReference(objectName, memberName, state);
|
|
400
|
+
if (objectEntryReference !== undefined) {
|
|
401
|
+
return objectEntryReference;
|
|
402
|
+
}
|
|
342
403
|
}
|
|
343
404
|
if (objectName !== undefined && memberName === undefined) {
|
|
344
|
-
return
|
|
405
|
+
return selectClientReference([...objectMemberReferences(state, objectName), ...dynamicObjectMemberReferences(state, objectName)], state.allowAmbiguousAliases);
|
|
406
|
+
}
|
|
407
|
+
if (objectName === undefined && memberName !== undefined) {
|
|
408
|
+
const references = [
|
|
409
|
+
...expressionObjectNameCandidates(readOptionalObject(node.object), state)
|
|
410
|
+
.map((candidate) => state.objectMembers.get(candidate)?.get(memberName)),
|
|
411
|
+
...expressionDynamicObjectNestedMemberReferences(readOptionalObject(node.object), memberName, state),
|
|
412
|
+
];
|
|
413
|
+
return selectClientReference(references, state.allowAmbiguousAliases);
|
|
345
414
|
}
|
|
346
415
|
if (objectReference?.exportName === "*" && memberName !== undefined) {
|
|
347
416
|
return {
|
|
@@ -365,8 +434,48 @@ function expressionClientReference(node, state) {
|
|
|
365
434
|
}
|
|
366
435
|
return undefined;
|
|
367
436
|
}
|
|
368
|
-
function
|
|
369
|
-
|
|
437
|
+
function objectEntryMemberReference(objectName, memberName, state) {
|
|
438
|
+
const sourceName = state.objectEntryValueBindings.get(objectName);
|
|
439
|
+
if (sourceName === undefined) {
|
|
440
|
+
return undefined;
|
|
441
|
+
}
|
|
442
|
+
if (state.allowAmbiguousAliases && state.globModuleMaps.has(sourceName) && memberName === "default") {
|
|
443
|
+
return unknownCompatReference;
|
|
444
|
+
}
|
|
445
|
+
const references = Array.from(state.objectMemberKeys.get(sourceName) ?? [])
|
|
446
|
+
.map((key) => state.objectMembers.get(`${sourceName}.${key}`)?.get(memberName));
|
|
447
|
+
return selectClientReference(references, state.allowAmbiguousAliases);
|
|
448
|
+
}
|
|
449
|
+
function expressionObjectNameCandidates(node, state) {
|
|
450
|
+
const exactName = expressionObjectName(node, state);
|
|
451
|
+
if (exactName !== undefined) {
|
|
452
|
+
return [exactName];
|
|
453
|
+
}
|
|
454
|
+
if (node?.type !== "MemberExpression") {
|
|
455
|
+
return [];
|
|
456
|
+
}
|
|
457
|
+
const objectName = expressionObjectName(readOptionalObject(node.object), state);
|
|
458
|
+
const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);
|
|
459
|
+
if (objectName !== undefined && memberName === undefined) {
|
|
460
|
+
return Array.from(state.objectMemberKeys.get(objectName) ?? []).map((key) => `${objectName}.${key}`);
|
|
461
|
+
}
|
|
462
|
+
if (memberName === undefined) {
|
|
463
|
+
return [];
|
|
464
|
+
}
|
|
465
|
+
return expressionObjectNameCandidates(readOptionalObject(node.object), state).map((candidate) => `${candidate}.${memberName}`);
|
|
466
|
+
}
|
|
467
|
+
function expressionObjectName(node, state) {
|
|
468
|
+
if (node?.type === "Identifier" && typeof node.name === "string") {
|
|
469
|
+
return node.name;
|
|
470
|
+
}
|
|
471
|
+
if (node?.type === "MemberExpression") {
|
|
472
|
+
const objectName = expressionObjectName(readOptionalObject(node.object), state);
|
|
473
|
+
const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);
|
|
474
|
+
return objectName !== undefined && memberName !== undefined
|
|
475
|
+
? `${objectName}.${memberName}`
|
|
476
|
+
: undefined;
|
|
477
|
+
}
|
|
478
|
+
return undefined;
|
|
370
479
|
}
|
|
371
480
|
function propertyName(node, computed, state) {
|
|
372
481
|
if (!computed && node?.type === "Identifier" && typeof node.name === "string") {
|
|
@@ -404,6 +513,40 @@ function setObjectMemberReference(state, objectName, memberName, reference) {
|
|
|
404
513
|
const members = state.objectMembers.get(objectName) ?? new Map();
|
|
405
514
|
members.set(memberName, reference);
|
|
406
515
|
state.objectMembers.set(objectName, members);
|
|
516
|
+
addObjectMemberKey(state, objectName, memberName);
|
|
517
|
+
}
|
|
518
|
+
function addDynamicObjectMemberReference(state, objectName, reference) {
|
|
519
|
+
const references = state.dynamicObjectMembers.get(objectName) ?? [];
|
|
520
|
+
references.push(reference);
|
|
521
|
+
state.dynamicObjectMembers.set(objectName, references);
|
|
522
|
+
}
|
|
523
|
+
function collectDynamicObjectNestedMemberReferences(objectName, node, state) {
|
|
524
|
+
if (node?.type !== "ObjectExpression") {
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
for (const propertyValue of readArray(node.properties)) {
|
|
528
|
+
const property = readOptionalObject(propertyValue);
|
|
529
|
+
if (property?.type !== "Property") {
|
|
530
|
+
continue;
|
|
531
|
+
}
|
|
532
|
+
const keyName = propertyName(readOptionalObject(property.key), property.computed === true, state);
|
|
533
|
+
const reference = expressionClientReference(readOptionalObject(property.value), state);
|
|
534
|
+
if (keyName !== undefined && reference !== undefined) {
|
|
535
|
+
addDynamicObjectNestedMemberReference(state, objectName, keyName, reference);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
function addDynamicObjectNestedMemberReference(state, objectName, memberName, reference) {
|
|
540
|
+
const members = state.dynamicObjectNestedMembers.get(objectName) ?? new Map();
|
|
541
|
+
const references = members.get(memberName) ?? [];
|
|
542
|
+
references.push(reference);
|
|
543
|
+
members.set(memberName, references);
|
|
544
|
+
state.dynamicObjectNestedMembers.set(objectName, members);
|
|
545
|
+
}
|
|
546
|
+
function addObjectMemberKey(state, objectName, memberName) {
|
|
547
|
+
const keys = state.objectMemberKeys.get(objectName) ?? new Set();
|
|
548
|
+
keys.add(memberName);
|
|
549
|
+
state.objectMemberKeys.set(objectName, keys);
|
|
407
550
|
}
|
|
408
551
|
function isObjectAssignCall(node) {
|
|
409
552
|
const callee = readOptionalObject(node.callee);
|
|
@@ -415,6 +558,49 @@ function isObjectAssignCall(node) {
|
|
|
415
558
|
return object?.type === "Identifier" && object.name === "Object" &&
|
|
416
559
|
property?.type === "Identifier" && property.name === "assign";
|
|
417
560
|
}
|
|
561
|
+
function isObjectEntriesCall(node) {
|
|
562
|
+
const callee = readOptionalObject(node?.callee);
|
|
563
|
+
if (callee?.type !== "MemberExpression" || callee.computed === true) {
|
|
564
|
+
return false;
|
|
565
|
+
}
|
|
566
|
+
const object = readOptionalObject(callee.object);
|
|
567
|
+
const property = readOptionalObject(callee.property);
|
|
568
|
+
return object?.type === "Identifier" && object.name === "Object" &&
|
|
569
|
+
property?.type === "Identifier" && property.name === "entries";
|
|
570
|
+
}
|
|
571
|
+
function isImportMetaGlobEagerCall(node) {
|
|
572
|
+
const callee = readOptionalObject(node?.callee);
|
|
573
|
+
if (node?.type !== "CallExpression" || callee?.type !== "MemberExpression") {
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
const property = readOptionalObject(callee.property);
|
|
577
|
+
if (callee.computed === true || property?.type !== "Identifier" || property.name !== "glob") {
|
|
578
|
+
return false;
|
|
579
|
+
}
|
|
580
|
+
const metaProperty = readOptionalObject(callee.object);
|
|
581
|
+
const meta = readOptionalObject(metaProperty?.meta);
|
|
582
|
+
const metaName = meta?.type === "Identifier" ? meta.name : undefined;
|
|
583
|
+
const propertyName = readOptionalObject(metaProperty?.property);
|
|
584
|
+
const importMetaPropertyName = propertyName?.type === "Identifier" ? propertyName.name : undefined;
|
|
585
|
+
if (metaProperty?.type !== "MetaProperty" || metaName !== "import" || importMetaPropertyName !== "meta") {
|
|
586
|
+
return false;
|
|
587
|
+
}
|
|
588
|
+
const options = readOptionalObject(readArray(node.arguments)[1]);
|
|
589
|
+
if (options?.type !== "ObjectExpression") {
|
|
590
|
+
return false;
|
|
591
|
+
}
|
|
592
|
+
return readArray(options.properties).some((propertyValue) => {
|
|
593
|
+
const property = readOptionalObject(propertyValue);
|
|
594
|
+
const key = readOptionalObject(property?.key);
|
|
595
|
+
const value = readOptionalObject(property?.value);
|
|
596
|
+
return property?.type === "Property" &&
|
|
597
|
+
property.computed !== true &&
|
|
598
|
+
key?.type === "Identifier" &&
|
|
599
|
+
key.name === "eager" &&
|
|
600
|
+
value?.type === "Literal" &&
|
|
601
|
+
value.value === true;
|
|
602
|
+
});
|
|
603
|
+
}
|
|
418
604
|
function uniqueClientReference(values) {
|
|
419
605
|
const refs = values.filter((value) => value !== undefined);
|
|
420
606
|
if (refs.length === 0) {
|
|
@@ -428,6 +614,55 @@ function uniqueClientReference(values) {
|
|
|
428
614
|
? first
|
|
429
615
|
: undefined;
|
|
430
616
|
}
|
|
617
|
+
function selectClientReference(values, allowAmbiguousAliases) {
|
|
618
|
+
if (!allowAmbiguousAliases) {
|
|
619
|
+
return uniqueClientReference(values);
|
|
620
|
+
}
|
|
621
|
+
if (values.length === 0 || values.some((value) => value === undefined)) {
|
|
622
|
+
return undefined;
|
|
623
|
+
}
|
|
624
|
+
return values[0];
|
|
625
|
+
}
|
|
626
|
+
function objectMemberReferences(state, objectName) {
|
|
627
|
+
const keys = Array.from(state.objectMemberKeys.get(objectName) ?? []);
|
|
628
|
+
return keys.map((key) => state.objectMembers.get(objectName)?.get(key));
|
|
629
|
+
}
|
|
630
|
+
function dynamicObjectMemberReferences(state, objectName) {
|
|
631
|
+
return state.dynamicObjectMembers.get(objectName) ?? [];
|
|
632
|
+
}
|
|
633
|
+
function expressionDynamicObjectNestedMemberReferences(node, memberName, state) {
|
|
634
|
+
if (node?.type !== "MemberExpression") {
|
|
635
|
+
return [];
|
|
636
|
+
}
|
|
637
|
+
const objectName = expressionObjectName(readOptionalObject(node.object), state);
|
|
638
|
+
const property = propertyName(readOptionalObject(node.property), node.computed === true, state);
|
|
639
|
+
if (objectName === undefined || property !== undefined) {
|
|
640
|
+
return [];
|
|
641
|
+
}
|
|
642
|
+
return state.dynamicObjectNestedMembers.get(objectName)?.get(memberName) ?? [];
|
|
643
|
+
}
|
|
644
|
+
function objectEntriesSourceName(node, state) {
|
|
645
|
+
if (!isObjectEntriesCall(node)) {
|
|
646
|
+
return undefined;
|
|
647
|
+
}
|
|
648
|
+
const args = readArray(node?.arguments).map(readOptionalObject);
|
|
649
|
+
return expressionObjectName(args[0], state);
|
|
650
|
+
}
|
|
651
|
+
function forOfObjectEntriesValueBindingName(node) {
|
|
652
|
+
const declaration = node?.type === "VariableDeclaration"
|
|
653
|
+
? readOptionalObject(readArray(node.declarations)[0])
|
|
654
|
+
: undefined;
|
|
655
|
+
const pattern = declaration?.type === "VariableDeclarator"
|
|
656
|
+
? readOptionalObject(declaration.id)
|
|
657
|
+
: node;
|
|
658
|
+
if (pattern?.type !== "ArrayPattern") {
|
|
659
|
+
return undefined;
|
|
660
|
+
}
|
|
661
|
+
const valueElement = readOptionalObject(readArray(pattern.elements)[1]);
|
|
662
|
+
return valueElement?.type === "Identifier" && typeof valueElement.name === "string"
|
|
663
|
+
? valueElement.name
|
|
664
|
+
: undefined;
|
|
665
|
+
}
|
|
431
666
|
function uniqueString(values) {
|
|
432
667
|
const unique = new Set(values.filter((value) => value !== undefined));
|
|
433
668
|
return unique.size === 1 ? Array.from(unique)[0] : undefined;
|