Skip to content

Commit a833972

Browse files
committed
client reference proxy should implement getOwnPropertyDescriptor. One practical place where this shows up is when consuming CJS module.exports in ESM modules. Node creates named exports it statically infers from the underlying source but it only sets the named export if the CJS exports hasOwnProperty. This trap will allow the proxy to respond affirmatively.
1 parent d23b8b5 commit a833972

File tree

6 files changed

+213
-127
lines changed

6 files changed

+213
-127
lines changed

fixtures/flight/src/App.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ const Counter3 = await(AsyncModule);
1010
import ShowMore from './ShowMore.js';
1111
import Button from './Button.js';
1212
import Form from './Form.js';
13+
import {Dynamic} from './Dynamic.js';
14+
import {Client} from './Client.js';
15+
16+
import {Note} from './cjs/Note.js';
1317

1418
import {like, greet} from './actions.js';
1519

@@ -43,6 +47,11 @@ export default async function App() {
4347
<div>
4448
<Button action={like}>Like</Button>
4549
</div>
50+
<div>
51+
loaded statically: <Dynamic />
52+
</div>
53+
<Client />
54+
<Note />
4655
</Container>
4756
</body>
4857
</html>

fixtures/flight/src/Client.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use client';
2+
3+
import * as React from 'react';
4+
5+
let LazyDynamic = React.lazy(() =>
6+
import('./Dynamic.js').then(exp => ({default: exp.Dynamic}))
7+
);
8+
9+
export function Client() {
10+
const [loaded, load] = React.useReducer(() => true, false);
11+
12+
return loaded ? (
13+
<div>
14+
loaded dynamically: <LazyDynamic />
15+
</div>
16+
) : (
17+
<div>
18+
<button onClick={load}>Load dynamic import Component</button>
19+
</div>
20+
);
21+
}

fixtures/flight/src/Dynamic.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use client';
2+
3+
import * as React from 'react';
4+
5+
export function Dynamic() {
6+
return (
7+
<div>
8+
This client component should be loaded in a single chunk even when it is
9+
used as both a client reference and as a dynamic import.
10+
</div>
11+
);
12+
}

fixtures/flight/src/cjs/Note.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
'use client';
2+
3+
var React = require('react');
4+
5+
function Note() {
6+
return 'This component was exported on a commonJS module and imported into ESM as a named import.';
7+
}
8+
9+
module.exports = {
10+
Note,
11+
};

fixtures/flight/yarn.lock

Lines changed: 48 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2690,17 +2690,17 @@
26902690
fastq "^1.6.0"
26912691

26922692
"@pmmmwh/react-refresh-webpack-plugin@^0.5.3":
2693-
version "0.5.7"
2694-
resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2"
2695-
integrity sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==
2693+
version "0.5.11"
2694+
resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a"
2695+
integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==
26962696
dependencies:
26972697
ansi-html-community "^0.0.8"
26982698
common-path-prefix "^3.0.0"
2699-
core-js-pure "^3.8.1"
2699+
core-js-pure "^3.23.3"
27002700
error-stack-parser "^2.0.6"
27012701
find-up "^5.0.0"
27022702
html-entities "^2.1.0"
2703-
loader-utils "^2.0.0"
2703+
loader-utils "^2.0.4"
27042704
schema-utils "^3.0.0"
27052705
source-map "^0.7.3"
27062706

@@ -3002,7 +3002,7 @@
30023002
expect "^28.0.0"
30033003
pretty-format "^28.0.0"
30043004

3005-
"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
3005+
"@types/json-schema@*", "@types/json-schema@^7.0.5":
30063006
version "7.0.6"
30073007
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
30083008
integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
@@ -4050,10 +4050,10 @@ core-js-compat@^3.30.1, core-js-compat@^3.30.2:
40504050
dependencies:
40514051
browserslist "^4.21.5"
40524052

4053-
core-js-pure@^3.8.1:
4054-
version "3.24.1"
4055-
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3"
4056-
integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==
4053+
core-js-pure@^3.23.3:
4054+
version "3.32.1"
4055+
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.1.tgz#5775b88f9062885f67b6d7edce59984e89d276f3"
4056+
integrity sha512-f52QZwkFVDPf7UEQZGHKx6NYxsxmVGJe5DIvbzOdRMJlmT6yv0KDjR8rmy3ngr/t5wU54c7Sp/qIJH0ppbhVpQ==
40574057

40584058
cosmiconfig@^6.0.0:
40594059
version "6.0.0"
@@ -4582,11 +4582,11 @@ error-ex@^1.3.1:
45824582
is-arrayish "^0.2.1"
45834583

45844584
error-stack-parser@^2.0.6:
4585-
version "2.0.6"
4586-
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
4587-
integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
4585+
version "2.1.4"
4586+
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
4587+
integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
45884588
dependencies:
4589-
stackframe "^1.1.1"
4589+
stackframe "^1.3.4"
45904590

45914591
es-abstract@^1.12.0:
45924592
version "1.16.0"
@@ -4751,8 +4751,9 @@ fast-glob@^3.2.11, fast-glob@^3.2.9:
47514751
micromatch "^4.0.4"
47524752

47534753
fast-json-stable-stringify@^2.0.0:
4754-
version "2.0.0"
4755-
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
4754+
version "2.1.0"
4755+
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
4756+
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
47564757

47574758
fast-levenshtein@~2.0.4:
47584759
version "2.0.6"
@@ -5074,9 +5075,9 @@ html-encoding-sniffer@^2.0.1:
50745075
whatwg-encoding "^1.0.5"
50755076

50765077
html-entities@^2.1.0:
5077-
version "2.3.3"
5078-
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
5079-
integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
5078+
version "2.4.0"
5079+
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
5080+
integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
50805081

50815082
html-escaper@^2.0.0:
50825083
version "2.0.2"
@@ -5958,17 +5959,23 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
59585959
json-schema-traverse@^0.4.1:
59595960
version "0.4.1"
59605961
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
5962+
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
59615963

59625964
json-schema-traverse@^1.0.0:
59635965
version "1.0.0"
59645966
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
59655967
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
59665968

5967-
json5@^2.1.0, json5@^2.1.2, json5@^2.2.1:
5969+
json5@^2.1.0, json5@^2.2.1:
59685970
version "2.2.1"
59695971
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
59705972
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
59715973

5974+
json5@^2.1.2:
5975+
version "2.2.3"
5976+
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
5977+
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
5978+
59725979
jsonfile@^6.0.1:
59735980
version "6.1.0"
59745981
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -6017,7 +6024,7 @@ loader-runner@^4.2.0:
60176024
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
60186025
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
60196026

6020-
loader-utils@^2.0.0:
6027+
loader-utils@^2.0.0, loader-utils@^2.0.4:
60216028
version "2.0.4"
60226029
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
60236030
integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
@@ -7260,7 +7267,12 @@ pstree.remy@^1.1.8:
72607267
resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
72617268
integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
72627269

7263-
punycode@^2.1.0, punycode@^2.1.1:
7270+
punycode@^2.1.0:
7271+
version "2.3.0"
7272+
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
7273+
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
7274+
7275+
punycode@^2.1.1:
72647276
version "2.1.1"
72657277
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
72667278

@@ -7688,11 +7700,11 @@ schema-utils@^2.6.5:
76887700
ajv-keywords "^3.5.2"
76897701

76907702
schema-utils@^3.0.0:
7691-
version "3.0.0"
7692-
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
7693-
integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
7703+
version "3.3.0"
7704+
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
7705+
integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
76947706
dependencies:
7695-
"@types/json-schema" "^7.0.6"
7707+
"@types/json-schema" "^7.0.8"
76967708
ajv "^6.12.5"
76977709
ajv-keywords "^3.5.2"
76987710

@@ -7862,9 +7874,9 @@ source-map@^0.5.0:
78627874
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
78637875

78647876
source-map@^0.7.3:
7865-
version "0.7.3"
7866-
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
7867-
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
7877+
version "0.7.4"
7878+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
7879+
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
78687880

78697881
spawn-command@^0.0.2-1:
78707882
version "0.0.2-1"
@@ -7886,10 +7898,10 @@ stack-utils@^2.0.3:
78867898
dependencies:
78877899
escape-string-regexp "^2.0.0"
78887900

7889-
stackframe@^1.1.1:
7890-
version "1.2.0"
7891-
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
7892-
integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
7901+
stackframe@^1.3.4:
7902+
version "1.3.4"
7903+
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
7904+
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
78937905

78947906
78957907
version "2.0.1"
@@ -8379,8 +8391,9 @@ update-browserslist-db@^1.0.5:
83798391
picocolors "^1.0.0"
83808392

83818393
uri-js@^4.2.2:
8382-
version "4.2.2"
8383-
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
8394+
version "4.4.1"
8395+
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
8396+
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
83848397
dependencies:
83858398
punycode "^2.1.0"
83868399

0 commit comments

Comments
 (0)