Skip to content
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

chore(snc): fix two snc errors related to .typesDir #4815

Merged
merged 1 commit into from
Oct 9, 2023

Conversation

alicewriteswrongs
Copy link
Contributor

Just fixing two SNC errors.

What is the current behavior?

GitHub Issue Number: N/A

What is the new behavior?

Just dropping some SNC errors!

Does this introduce a breaking change?

  • Yes
  • No

Testing

This shouldn't break anything since I don't think the runtime behavior of anything will really be affected. Unit tests and whatnot should all be passing.

Other information

@github-actions
Copy link
Contributor

github-actions bot commented Sep 19, 2023

--strictNullChecks error report

Typechecking with --strictNullChecks resulted in 1399 errors on this branch.

That's 2 fewer than on main! 🎉🎉🎉

reports and statistics

Our most error-prone files
Path Error Count
src/dev-server/index.ts 37
src/mock-doc/serialize-node.ts 36
src/dev-server/server-process.ts 32
src/compiler/build/build-stats.ts 27
src/compiler/output-targets/dist-lazy/generate-lazy-module.ts 25
src/compiler/style/test/optimize-css.spec.ts 23
src/testing/puppeteer/puppeteer-element.ts 23
src/compiler/prerender/prerender-main.ts 22
src/runtime/vdom/vdom-render.ts 20
src/runtime/client-hydrate.ts 19
src/screenshot/connector-base.ts 19
src/compiler/config/test/validate-paths.spec.ts 16
src/dev-server/request-handler.ts 15
src/compiler/prerender/prerender-optimize.ts 14
src/compiler/sys/stencil-sys.ts 14
src/compiler/transpile/transpile-module.ts 14
src/runtime/vdom/vdom-annotations.ts 14
src/sys/node/node-sys.ts 14
src/compiler/build/build-finish.ts 13
src/compiler/prerender/prerender-queue.ts 13
Our most common errors
Typescript Error Code Count
TS2345 424
TS2322 398
TS18048 310
TS18047 100
TS2722 38
TS2532 34
TS2531 23
TS2454 14
TS2352 13
TS2769 10
TS2790 10
TS2538 8
TS2344 5
TS2416 4
TS2493 3
TS18046 2
TS2684 1
TS2488 1
TS2430 1

Unused exports report

There are 12 unused exports on this PR. That's the same number of errors on main, so at least we're not creating new ones!

Unused exports
File Line Identifier
src/runtime/bootstrap-lazy.ts 21 setNonce
src/screenshot/screenshot-fs.ts 18 readScreenshotData
src/testing/testing-utils.ts 198 withSilentWarn
src/utils/index.ts 140 CUSTOM
src/compiler/app-core/app-data.ts 25 BUILD
src/compiler/app-core/app-data.ts 114 Env
src/compiler/app-core/app-data.ts 116 NAMESPACE
src/compiler/fs-watch/fs-watch-rebuild.ts 123 updateCacheFromRebuild
src/compiler/types/validate-primary-package-output-target.ts 62 satisfies
src/compiler/types/validate-primary-package-output-target.ts 62 Record
src/testing/puppeteer/puppeteer-declarations.ts 485 WaitForEventOptions
src/compiler/sys/fetch/write-fetch-success.ts 7 writeFetchSuccessSync

Copy link
Contributor Author

@alicewriteswrongs alicewriteswrongs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

two notes

Comment on lines +30 to +34

const outputs: d.OutputTarget[] = [];

for (const outputTarget of distOutputTargets) {
const distOutputTarget = validateOutputTargetDist(config, outputTarget);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while I was in here I thought hey, this .reduce call is kind of weird, let's just for ... of instead

* @param outputTarget the output target of interest
* @returns a properly-formatted path
*/
export const getComponentsDtsTypesFilePath = (outputTarget: Required<d.OutputTargetDist> | d.OutputTargetDistTypes) =>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added the Required<> wrapper here to make sure the .typesDir is defined, and this is legit since getComponentsDtsTypesFilePath is only called in the validate-dist file above where the argument satisfies that type

Copy link
Contributor Author

@alicewriteswrongs alicewriteswrongs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one other question

@alicewriteswrongs alicewriteswrongs marked this pull request as ready for review September 19, 2023 19:04
@alicewriteswrongs alicewriteswrongs requested a review from a team as a code owner September 19, 2023 19:04
@rwaskiewicz
Copy link
Contributor

This code is very much in the same area as #4661 - would it be okay if we held off on this until I got to the bottom of that issue (est early next week)?

@@ -41,7 +41,7 @@ describe('validateDistOutputTarget', () => {
empty: false,
isBrowserBuild: true,
legacyLoaderFile: path.join(rootDir, 'my-dist', 'my-build', 'testing.js'),
polyfills: true,
polyfills: false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes from undefined to false here make sense to me, but the value changes from true to false less so. Can you help me understand why this is happening?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment gives some context, basically I changed it to ensure that the value on the generated output targets matches what it set on the "dist" output target (the logic was more confusing before, if .polyfills was undefined on the dist output target then it would end up always being true on the dist-lazy one, which doesn't seem right?)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah - I think that comment was marked outdated and I missed it. However, I'm not sure this is the behavior we want. I could be missing something here, so just to check my understanding, this is what I think was happening and what's happening now:

  1. In this PR, as a result of validating the dist output target invoked here, the value on the validated OutputTargetDist value could previously be set to true | false | undefined. However, now that can be true | false as of this change, and defaults to false.
  2. Previously, we checked if polyfills was undefined. If it was, we set this value to true.

Wouldn't this change the behavior of copying over some of our polyfills? Today, I believe folks are relying on the behavior of "if I didn't set polyfills, copy them anyway" (for dist). Or am I missing something?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree it seems like they should be in sync

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mm yeah it's a bit complicated, I guess previously we actually had three different states we treated, basically

  1. dist.polyfills is true, then dist-lazy should be true
  2. dist.polyfills is false, then dist-lazy should be false
  3. dist.polyfills is undefined, then dist-lazy should be true

I think the issue is that right now the undefined case isn't distinguished from the false case, I'll make the logic here check the original output target instead of the validated one (return value of validateOutputTargetDist)

@alicewriteswrongs alicewriteswrongs force-pushed the ap/dist-types-mini-snc branch 3 times, most recently from 687f7af to 8560c8c Compare October 2, 2023 14:51
Copy link
Contributor

@tanner-reits tanner-reits left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some opinions, but LGTM

@@ -41,7 +41,7 @@ describe('validateDistOutputTarget', () => {
empty: false,
isBrowserBuild: true,
legacyLoaderFile: path.join(rootDir, 'my-dist', 'my-build', 'testing.js'),
polyfills: true,
polyfills: false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree it seems like they should be in sync

@rwaskiewicz
Copy link
Contributor

Ugh, sorry @alicewriteswrongs - I thought I had submitted this like, last week 😭 It's a little lost in the GH UI, but #4815 (comment) is my review/question

Copy link
Contributor

@tanner-reits tanner-reits left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Lots of back-and-forth for 2 checks 😂

Copy link
Contributor

@rwaskiewicz rwaskiewicz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One last clarifying question!

@alicewriteswrongs
Copy link
Contributor Author

It won't let me reply with a normal comment (idk how to use github apparently haha) so RE:

Is there a reason we can't use the validated DIST OT here? That way, since the return of validateOutputTargetDist is Required<OutputTargetDist> and with this change in mind where we force the return value to false if polyfills isn't a bool, this could be simplified to:

Making that change will actually change the behavior. If we use the polyfills property on the validated version then we won't distinguish between the case where polyfills is set to false on the unvalidated dist OT and when it is undefined. The existing behavior is that if it is undefined we default to true on the other OTs generated here, while if it is false then it will be false on the other OTs.

Tried to clarify that behavior here: #4815 (comment)

It's a bit weird for sure, but lmk if you think that should change or if that's not clear

This fixes two snc errors related to the `.typesDir` property and then
additionally does a small refactor in `validate-dist.ts`.
@alicewriteswrongs alicewriteswrongs added this pull request to the merge queue Oct 9, 2023
Merged via the queue into main with commit cb8d9a3 Oct 9, 2023
@alicewriteswrongs alicewriteswrongs deleted the ap/dist-types-mini-snc branch October 9, 2023 19:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants