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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Small cleanups: fix peer-dep warnings, yarn-deduplicate, use Flow's exact_by_default. #83

Merged
merged 9 commits into from
May 27, 2021

Commits on May 26, 2021

  1. deps: Add yarn-deduplicate as a dev dependency.

    Done with this command, using Yarn 1.22.10:
    
      yarn add --dev yarn-deduplicate
    
    This will help us trim out some dependencies that were installed
    multiple times, at different versions, when version-range
    constraints would actually allow having one installation at a
    particular version:
      https://www.npmjs.com/package/yarn-deduplicate
      https://github.com/atlassian/yarn-deduplicate
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    6bded2d View commit details
    Browse the repository at this point in the history
  2. deps: Run yarn yarn-deduplicate && yarn.

    yarn-deduplicate, which we added to `devDependencies` in the
    previous commit, cleans up `yarn.lock` by removing duplicates:
      https://www.npmjs.com/package/yarn-deduplicate
      https://github.com/atlassian/yarn-deduplicate
    
    Done using Yarn 1.22.10. Note that the package's docs (linked just
    above) report that the package is obsolete when using Yarn v2
    because Yarn v2 supports package deduplication natively. Since this
    command found something to do, I assume we haven't been using Yarn
    v2. We could go to the trouble of upgrading, but it looks like
    there's some nontrivial work involved, and some packages might not
    yet work well with v2, and I have no experience with v2:
      https://yarnpkg.com/getting-started/qa#why-should-you-upgrade-to-yarn-modern
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    a59caff View commit details
    Browse the repository at this point in the history
  3. deps: Resolve peer-dependency warnings.

    Done with the following commands, using Yarn 1.22.10:
    
      yarn add @types/react --latest
      yarn add @babel/core postcss --dev --latest
      yarn yarn-deduplicate && yarn
    
    after seeing the warnings below, on an initial run of `yarn` (i.e.,
    one that starts with `node_modules` not existing).
    
    (The `yarn-deduplicate` command is a routine cleanup command we
    added in a recent commit. It found something to do after running the
    other two commands.)
    
    Each line in the output below represents an assertion from one of
    our project's dependencies that our project must add a direct
    dependency on { @types/react, @babel/core, postcss } at a version in
    a specific range:
      https://docs.npmjs.com/cli/v7/configuring-npm/package-json#peerdependencies
      https://nodejs.org/es/blog/npm/peer-dependencies/
    
    Luckily, all the ranges for each of those three packages are wide
    enough that they intersect at at least one specific version. Even
    better: for all three packages, the intersection isn't just *one*
    specific version -- it includes the default range that gets
    specified when you just `yarn add ... --latest` the package. So, do
    that, for all three.
    
    From the output, it looks like the @types/react warning stems from
    our top-level dependency react-markdown, and that's under
    `dependencies`. So, install @types/react under `dependencies`.
    
    From the output, it looks like all the @babel/core and postcss
    warnings stem from parcel, which is under `devDependencies`. So,
    install @babel/core and postcss under `devDependencies`.
    
    warning " > react-markdown@6.0.1" has unmet peer dependency "@types/react@>=16".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel@2.0.0-beta.2" has unmet peer dependency "@babel/core@^7.12.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-postcss@2.0.0-beta.2" has unmet peer dependency "postcss@^8.2.1".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/helper-compilation-targets@7.13.16" has unmet peer dependency "@babel/core@^7.0.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/plugin-transform-flow-strip-types@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/plugin-transform-typescript@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env@7.13.15" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-react@7.13.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @parcel/babel-preset-env@2.0.0-beta.2" has unmet peer dependency "@babel/core@^7.12.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/plugin-transform-flow-strip-types > @babel/plugin-syntax-flow@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/plugin-transform-typescript > @babel/helper-create-class-features-plugin@7.13.11" has unmet peer dependency "@babel/core@^7.0.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/plugin-transform-typescript > @babel/plugin-syntax-typescript@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.13.12" has unmet peer dependency "@babel/core@^7.13.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-async-generator-functions@7.13.15" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-class-properties@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-dynamic-import@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-export-namespace-from@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-json-strings@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-logical-assignment-operators@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-nullish-coalescing-operator@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-numeric-separator@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-object-rest-spread@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-optional-catch-binding@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-optional-chaining@7.13.12" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-private-methods@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-unicode-property-regex@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-async-generators@7.8.4" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-class-properties@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-dynamic-import@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-export-namespace-from@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-json-strings@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-logical-assignment-operators@7.10.4" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-nullish-coalescing-operator@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-numeric-separator@7.10.4" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-object-rest-spread@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-optional-catch-binding@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-optional-chaining@7.8.3" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-syntax-top-level-await@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-arrow-functions@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-async-to-generator@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-block-scoped-functions@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-block-scoping@7.13.16" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-classes@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-computed-properties@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-destructuring@7.13.17" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-dotall-regex@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-duplicate-keys@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-exponentiation-operator@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-for-of@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-function-name@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-literals@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-member-expression-literals@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-modules-amd@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-modules-commonjs@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-modules-systemjs@7.13.8" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-modules-umd@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-named-capturing-groups-regex@7.12.13" has unmet peer dependency "@babel/core@^7.0.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-new-target@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-object-super@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-parameters@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-property-literals@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-regenerator@7.13.15" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-reserved-words@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-shorthand-properties@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-spread@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-sticky-regex@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-template-literals@7.13.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-typeof-symbol@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-unicode-escapes@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-transform-unicode-regex@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/preset-modules@0.1.4" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > babel-plugin-polyfill-corejs2@0.2.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > babel-plugin-polyfill-corejs3@0.2.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > babel-plugin-polyfill-regenerator@0.2.0" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-react > @babel/plugin-transform-react-display-name@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-react > @babel/plugin-transform-react-jsx@7.13.12" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-react > @babel/plugin-transform-react-jsx-development@7.12.17" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-react > @babel/plugin-transform-react-pure-annotations@7.12.1" has unmet peer dependency "@babel/core@^7.0.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > @babel/plugin-proposal-unicode-property-regex > @babel/helper-create-regexp-features-plugin@7.12.17" has unmet peer dependency "@babel/core@^7.0.0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-env > babel-plugin-polyfill-corejs2 > @babel/helper-define-polyfill-provider@0.2.0" has unmet peer dependency "@babel/core@^7.4.0-0".
    warning "parcel > @parcel/config-default > @parcel/transformer-babel > @babel/preset-react > @babel/plugin-transform-react-jsx > @babel/plugin-syntax-jsx@7.12.13" has unmet peer dependency "@babel/core@^7.0.0-0".
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    e71f090 View commit details
    Browse the repository at this point in the history
  4. types: Use number type instead of Number.

    `Number` is for the wrapper object, i.e., the result of calling
    `new Number(...)`, so it's rarely quite the right thing to use. The
    lowercase form is for literal values [1] . Unfortunately, code
    editors will sometimes suggest the capitalized type in autocomplete,
    which is unhelpful.
    
    [1] https://flow.org/en/docs/types/primitives/
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    4c50a1e View commit details
    Browse the repository at this point in the history
  5. Cards: Stop passing hospitalId to Card, which doesn't ask for it.

    This small error would be caught when we make more of our object
    types exact, in the next commit.
    
    Passing the prop wasn't intentional [1], so stop passing it.
    
    [1] g0v#83 (comment)
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    f69da8c View commit details
    Browse the repository at this point in the history
  6. flow: Make implicitly inexact object types explicitly exact.

    It looks like all these object types would benefit from being exact;
    so, make them exact. These were using the implicitly inexact syntax
    (`{foo: number}`), not the explicitly inexact syntax
    (`{foo: number, ...}`), but they were still inexact.
    
    We know we've caught all implicitly inexact object types because the
    `implicit-inexact-object` [1] lint is set to `error`, and Flow
    doesn't report any errors at this commit.
    
    We're about to turn on `exact_by_default` [2], which will change the
    meaning of the `{foo: number}` syntax to implicitly *exact*, leaving
    the option of `{| foo: number |}` for explicitly exact, and
    `{foo: number, ...}` for explicitly inexact.
    
    That'll make it easier to get tighter type checking on object types
    in general, since most of the time we want them to be exact.
    
    [1] https://flow.org/en/docs/linting/rule-reference/#toc-implicit-inexact-object
    [2] https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    7efd9f8 View commit details
    Browse the repository at this point in the history
  7. flow: Enable exact_by_default.

    This was a much-anticipated feature [1] that's available in recent
    versions of Flow.
    
    We'll still be able to make object types inexact, but we'll have to
    do it explicitly, with a marked syntax. That seems appropriate:
    since we don't want to use them as often, it makes sense for them to
    be marked, and for exact object types to be unmarked.
    
    As explained in the docs [2],
    
    ````
    Set this to `true` to indicate that Flow should interpret
    object types as exact by default. When this flag is `false`, Flow
    has the following behavior:
    
    ```js
    {foo: number} // inexact
    {| foo: number |} // exact
    {foo: number, ...} // inexact
    ```
    
    When this flag is `true`, Flow has the following behavior:
    
    ```js
    {foo: number} // exact
    {| foo: number |} // exact
    {foo: number, ...} // inexact
    ```
    
    The default value is `false`.
    ````
    
    [1] https://medium.com/flow-type/on-the-roadmap-exact-objects-by-default-16b72933c5cf
    [2] https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    8ba86cd View commit details
    Browse the repository at this point in the history
  8. flow: Use implicitly *exact* object types, now that we can!

    In the previous commit, we enabled the `exact_by_default`
    option [1].
    
    Now, we can make our exact object types unmarked. Since we expect to
    use exact object types more often than inexact ones, it makes sense
    for the exact ones to be unmarked, and to require the inexact ones
    to be marked (with `, ...` as in `{foo: number, ...}`).
    
    To confirm that this works, try adding a `nonsense="123"` prop to
    the `Card` callsite in frontend/Components/VaccineInfo/Cards.jsx.
    
    [1] https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    e071f5e View commit details
    Browse the repository at this point in the history
  9. VaccineInfo: Rename exported function, from VaccineDataGrid.

    Continuing the refactor in a760f75.
    chrisbobbe committed May 26, 2021
    Configuration menu
    Copy the full SHA
    fa31fbf View commit details
    Browse the repository at this point in the history