-
Notifications
You must be signed in to change notification settings - Fork 27.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Include submodules in exported type definition #28316
Conversation
'/// <reference types="next/types/global" />' + | ||
os.EOL + |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This one is included by /// <reference types="next" />'
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@@ -7,7 +7,7 @@ | |||
"repository": "vercel/next.js", | |||
"bugs": "https://github.com/vercel/next.js/issues", | |||
"homepage": "https://nextjs.org", | |||
"types": "types/index.d.ts", | |||
"types": "index.d.ts", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This needs to be added to the package.json
files array if we're moving it up.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ijjk It's added on line 45
, lmk if you're referring to something else
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there any benefit to moving this file? This will now be ignored while type-checking the project when it previously wouldn't be.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ijjk The current issue with types/index.d.ts
is that it's included in TS compilation, the references added in index.d.ts
will make TS fail when it's trying to build the files it's referencing, therefore by not importing index.d.ts
anywhere it's possible to still "export" references
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested this change locally and it does appear to provide much better autocomplete, could you resolve the conflicts with canary?
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Failing test suitesCommit: f6876f4 test/unit/write-app-declarations.test.ts
Expand output● find config › should preserve CRLF EOL
● find config › should preserve LF EOL
● find config › should use OS EOL by default
|
This comment has been minimized.
This comment has been minimized.
There's a lint error in |
@lfades The "find config" tests need to be updated in https://github.com/vercel/next.js/runs/4126934126?check_suite_focus=true#step:4:183 |
@styfle Updated! |
@@ -1,5 +1,4 @@ | |||
/// <reference types="next" /> | |||
/// <reference types="next/types/global" /> | |||
/// <reference types="next/image-types/global" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should next/image-types/global
be moved too?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That one is under a conditional so I decided not to include it because of that.
@@ -30,8 +30,6 @@ export async function writeAppTypeDeclarations( | |||
const content = | |||
'/// <reference types="next" />' + | |||
eol + | |||
'/// <reference types="next/types/global" />' + | |||
eol + | |||
(imageImportsEnabled | |||
? '/// <reference types="next/image-types/global" />' + eol |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about next/image-types/global
. Can we make that dynamic in the index.d.ts
file?
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Stats from current PRDefault Build (Decrease detected ✓)General Overall increase
|
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
buildDuration | 22.3s | 23.5s | |
buildDurationCached | 4.2s | 4.5s | |
nodeModulesSize | 345 MB | 345 MB |
Page Load Tests Overall decrease ⚠️
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
/ failed reqs | 0 | 0 | ✓ |
/ total time (seconds) | 3.902 | 3.86 | -0.04 |
/ avg req/sec | 640.76 | 647.75 | +6.99 |
/error-in-render failed reqs | 0 | 0 | ✓ |
/error-in-render total time (seconds) | 2.053 | 2.156 | |
/error-in-render avg req/sec | 1217.64 | 1159.8 |
Client Bundles (main, webpack, commons)
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
450.HASH.js gzip | 179 B | 179 B | ✓ |
framework-HASH.js gzip | 42.2 kB | 42.2 kB | ✓ |
main-HASH.js gzip | 28.4 kB | 28.4 kB | ✓ |
webpack-HASH.js gzip | 1.45 kB | 1.45 kB | ✓ |
Overall change | 72.2 kB | 72.2 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
_app-HASH.js gzip | 1.37 kB | 1.37 kB | ✓ |
_error-HASH.js gzip | 194 B | 194 B | ✓ |
amp-HASH.js gzip | 312 B | 312 B | ✓ |
css-HASH.js gzip | 327 B | 327 B | ✓ |
dynamic-HASH.js gzip | 2.38 kB | 2.38 kB | ✓ |
head-HASH.js gzip | 350 B | 350 B | ✓ |
hooks-HASH.js gzip | 635 B | 635 B | ✓ |
image-HASH.js gzip | 4.45 kB | 4.45 kB | ✓ |
index-HASH.js gzip | 263 B | 263 B | ✓ |
link-HASH.js gzip | 1.87 kB | 1.87 kB | ✓ |
routerDirect..HASH.js gzip | 321 B | 321 B | ✓ |
script-HASH.js gzip | 383 B | 383 B | ✓ |
withRouter-HASH.js gzip | 318 B | 318 B | ✓ |
85e02e95b279..7e3.css gzip | 107 B | 107 B | ✓ |
Overall change | 13.3 kB | 13.3 kB | ✓ |
Client Build Manifests
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
_buildManifest.js gzip | 460 B | 460 B | ✓ |
Overall change | 460 B | 460 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
index.html gzip | 531 B | 531 B | ✓ |
link.html gzip | 545 B | 545 B | ✓ |
withRouter.html gzip | 525 B | 525 B | ✓ |
Overall change | 1.6 kB | 1.6 kB | ✓ |
Default Build with SWC (Increase detected ⚠️ )
General Overall increase ⚠️
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
buildDuration | 24.2s | 24.4s | |
buildDurationCached | 4.3s | 4.2s | -95ms |
nodeModulesSize | 345 MB | 345 MB |
Page Load Tests Overall increase ✓
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
/ failed reqs | 0 | 0 | ✓ |
/ total time (seconds) | 3.996 | 3.91 | -0.09 |
/ avg req/sec | 625.64 | 639.37 | +13.73 |
/error-in-render failed reqs | 0 | 0 | ✓ |
/error-in-render total time (seconds) | 2.06 | 2.029 | -0.03 |
/error-in-render avg req/sec | 1213.53 | 1231.86 | +18.33 |
Client Bundles (main, webpack, commons)
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
450.HASH.js gzip | 179 B | 179 B | ✓ |
framework-HASH.js gzip | 42.3 kB | 42.3 kB | ✓ |
main-HASH.js gzip | 28.6 kB | 28.6 kB | ✓ |
webpack-HASH.js gzip | 1.44 kB | 1.44 kB | ✓ |
Overall change | 72.5 kB | 72.5 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
_app-HASH.js gzip | 1.35 kB | 1.35 kB | ✓ |
_error-HASH.js gzip | 180 B | 180 B | ✓ |
amp-HASH.js gzip | 305 B | 305 B | ✓ |
css-HASH.js gzip | 321 B | 321 B | ✓ |
dynamic-HASH.js gzip | 2.37 kB | 2.37 kB | ✓ |
head-HASH.js gzip | 342 B | 342 B | ✓ |
hooks-HASH.js gzip | 622 B | 622 B | ✓ |
image-HASH.js gzip | 4.47 kB | 4.47 kB | ✓ |
index-HASH.js gzip | 256 B | 256 B | ✓ |
link-HASH.js gzip | 1.91 kB | 1.91 kB | ✓ |
routerDirect..HASH.js gzip | 314 B | 314 B | ✓ |
script-HASH.js gzip | 375 B | 375 B | ✓ |
withRouter-HASH.js gzip | 309 B | 309 B | ✓ |
85e02e95b279..7e3.css gzip | 107 B | 107 B | ✓ |
Overall change | 13.2 kB | 13.2 kB | ✓ |
Client Build Manifests
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
_buildManifest.js gzip | 458 B | 458 B | ✓ |
Overall change | 458 B | 458 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | lfades/next.js ts-include-submodules | Change | |
---|---|---|---|
index.html gzip | 533 B | 533 B | ✓ |
link.html gzip | 546 B | 546 B | ✓ |
withRouter.html gzip | 527 B | 527 B | ✓ |
Overall change | 1.61 kB | 1.61 kB | ✓ |
Currently, it's not possible to autocomplete imports coming from submodules in the Next.js package, like
next/image
,next/script
,next/router
, etc.With this PR there's a new
index.d.ts
that adds a reference to most of the submodules, excludingbabel
,client
,constants
anddata
(which points to a non-existing file so maybe it should be removed?). Adding them to the currenttypes/index.d.ts
results in an error because these references are only valid afterdist
has the definitions inside.Adding tests here is not possible I believe, there are no real changes more than improved autocompletion
Note: It's possible to also get rid of
next-env.d.ts
for every Next.js app if wanted, by moving the references in there tofiles
intsconfig.json
instead of usingincludes
, or by adding a tsconfig in Next.js and then usingextends
.