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

fix: deep_merge should stop recursing at class instances #1698

Merged
merged 1 commit into from
Jun 17, 2021
Merged

fix: deep_merge should stop recursing at class instances #1698

merged 1 commit into from
Jun 17, 2021

Conversation

johnnysprinkles
Copy link
Contributor

In #1662 @JBusillo notes that my #1572 is causing an issue when you pass key and cert values in kit.vite.server.https.

I see that he's passing buffers like this:

const config = {
  kit: {
    // hydrate the <div id="svelte"> element in src/app.html
    target: "#svelte",
    vite: {
      server: {
        https: {
          key: fs.readFileSync("example.key"),
          cert: fs.readFileSync("example.crt"),
        },
      },
    },
  },
};

which my deep_merge function tries to deeply clone. Those Buffer objects have a ton of methods on them. Not sure why this doesn't work (need to look more deeply into it), but it seems like we'd want to not clone those rich object and only clone "plain old JS objects" who's constructor is Object. Things that aren't class instances or built-ins.

This is a quick fix. I need to add tests but I'm on the road, won't get to it until this weekend.

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

Tests

  • Run the tests with pnpm test and lint the project with pnpm lint and pnpm check

Changesets

  • If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running pnpx changeset and following the prompts

@changeset-bot
Copy link

changeset-bot bot commented Jun 17, 2021

⚠️ No Changeset found

Latest commit: 2b6cc8e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@johnnysprinkles
Copy link
Contributor Author

Oh I see what's going on, those two methods toString and toLocaleString, those are enumerable properties of Buffer, but aren't enumerable properties of a plain object. This is an issue I didn't forsee. This fix will fix that though, treating Buffer as opaque.

@benmccann benmccann merged commit b145096 into sveltejs:master Jun 17, 2021
@johnnysprinkles
Copy link
Contributor Author

Thanks for merging Ben... note that there is still a minor issue that if you had a config like:

vite: {
  server: {
    toString: () => {}
  }
}

It would still fail due to that conflicting with the Object's own method. I'll have another small fix for that later.

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.

2 participants