Skip to content
Snippets Groups Projects
  • Dalton's avatar
    3a7c3987
    Upgrade babel to 7.x.x and jest to 27.x.x (#17137) · 3a7c3987
    Dalton authored
    * Update babel dependencies to latest
    
    * Remove some old babel dependencies
    
    The dependencies in this commit include dependencies that have been
    renamed, such as babel-cli which is now @babel/cli. It also includes
    dependencies that have been replaced, such as babel-preset-stage-0 and
    its ilk, which have been replaced with @babel/preset-env.
    
    * Remove babel-register dependency
    
    This is referenced in our webpack.config.js file. I don't think we need
    Babel in our Node envionment, but I could be wrong, so leaving this as a
    separate commit.
    
    * Remove @babel/standalone and dependent code
    
    We're using @babel/standalone to support the writing of JSX in our
    internal-only ScratchApp editor. Unfortunately, this dependency is
    large--1.5mb not gzipped--and our current build does not intelligently
    split bundles, meaning our users our burdened by the size of this
    dependency whenever they must redownload the Metabase JS bundle.
    
    I'm removing it. We should still be able to write JS in the ScratchApp,
    but JSX no longer.
    
    * Add @babel/node to dev deps
    
    Needed by a cypress command
    
    * Add browserslist config
    
    Babel's preset-env dep needs this config to determine how to transform
    our JavaScript. By default I believe it ends up defaulting to
    "defaults."
    
    "defaults" is equivalent to the following rules:
    > 0.5%, last 2 versions, Firefox ESR, not dead
    
    A comma between rules represents a UNION operator.
    
    Per
    https://www.metabase.com/docs/latest/faq/general/supported-browsers.html
    
    
    we have deprecated IE 11 so I am including that explicitly in our
    browserslist.
    
    * Update babelrc plugins and presets
    
    - Replaced presets with preset-env and preset-react
    - Updated the names of some plugins, like transform-decorators-legacy,
      which is now @babel/plugin-proposal-decorators with an explicit
      "legacy: true" passed in the config.
    - Removed add-react-displayname because it is included in preset-react
    - Removed transform-builtin-extend because it is included in preset-env*
    - Removed syntax-trailing-function-commas because it is supported by
      all browsers we support
    
    * note: There is a "loose" config option for handling the extension of builtin
    classes. We may need it, but I am not sure.
    
    * Update babel cli args
    
    Replace -q with --quiet because -q no longer exists
    
    * Fix circular dep in auth.js by making it async
    
    Our app unfortunately contains MANY circular dependencies. Some, like
    this one, caused problems when the app instantiates because the
    "refreshCurrentUser" method is undefined when auth.js is initially run.
    
    While we should in the future avoid having circular deps in the first
    place, making them run async by requiring the dep and function run-time
    fixes this particular issue.
    
    * Fix circular dependency in metabase/redux/requests.js
    
    The handleActions and createAction methods imported from
    "metabase/lib/redux" are actually just methods from the "redux-actions"
    dependency... so importing those methods directly from that dep fixes
    this circular dependency problem.
    
    * Remove references to global.services and exports in metabase/services
    
    This line breaks the build. Git blame says the line is 5 years old, and
    I wouldn't expect such code to be used with how our app now requires
    deps.
    
    * Fix MBQLArrayClause problem caused by Array extension
    
    * Explicitly pass args from flatMap to function via anonymous cb
    
    I think the old Array.prototype.flatMap prototype must've had different
    args. They are now "currentValue, index, array" so when we passed it
    "enumeratePaths" as a callback, the second arg of enumeratePaths gets
    set to a number. This breaks the logic of enumeratePaths because it is a
    recursive function that depends on that second arg getting initialized
    as an empty array by default.
    
    * Remove code that spreads non-iterable value in array
    
    New Babel is stricter about handling this sort of code that doesn't
    match the JS spec. You can't spread an undefined value inside of an
    iterator.
    
    * Update jest and babel-jest to latest
    
    Updating Babel breaks our unit tests. Updating nothing causes every test
    to fail due to a Babel version mismatch. Updating only babel-jest causes
    the following error:
    
    TypeError: Jest: a transform must export a `process` function
    
    There may be a way around updating Jest, but updating it does not appear
    to be too difficult.
    
    * Set the testEnvironment to jsdom
    
    This was the default testEnvironment in our old version of jest. At some
    point the default was changed to node.
    
    * Remove unfinished "pending" unit tests
    
    I'm unfamiliar with this pending function, but the function no longer
    exists, causing the tests to fail.
    
    * don't pass async callback to describe
    
    * Update name of runTimersToTime to advanceTimersByTime
    
    * Fix incorrectly nested unit test
    
    * mock SVGElement.prototype.getBBox method
    
    * Don't return values in describe callback
    
    * Move variable declaration to above usage
    
    * Fix prettier error
    
    * Upgrade `documentation` library to the latest version (13.x.x)
    
    This library was the only one left that was still using Babel 6.
    
    * Return an MBQLClause instance after using Array methods
    
    * remove 'not IE 11' from browserslist
    
    * Remove mock that breaks unit test
    
    Co-authored-by: default avatarNemanja <31325167+nemanjaglumac@users.noreply.github.com>
    Upgrade babel to 7.x.x and jest to 27.x.x (#17137)
    Dalton authored
    * Update babel dependencies to latest
    
    * Remove some old babel dependencies
    
    The dependencies in this commit include dependencies that have been
    renamed, such as babel-cli which is now @babel/cli. It also includes
    dependencies that have been replaced, such as babel-preset-stage-0 and
    its ilk, which have been replaced with @babel/preset-env.
    
    * Remove babel-register dependency
    
    This is referenced in our webpack.config.js file. I don't think we need
    Babel in our Node envionment, but I could be wrong, so leaving this as a
    separate commit.
    
    * Remove @babel/standalone and dependent code
    
    We're using @babel/standalone to support the writing of JSX in our
    internal-only ScratchApp editor. Unfortunately, this dependency is
    large--1.5mb not gzipped--and our current build does not intelligently
    split bundles, meaning our users our burdened by the size of this
    dependency whenever they must redownload the Metabase JS bundle.
    
    I'm removing it. We should still be able to write JS in the ScratchApp,
    but JSX no longer.
    
    * Add @babel/node to dev deps
    
    Needed by a cypress command
    
    * Add browserslist config
    
    Babel's preset-env dep needs this config to determine how to transform
    our JavaScript. By default I believe it ends up defaulting to
    "defaults."
    
    "defaults" is equivalent to the following rules:
    > 0.5%, last 2 versions, Firefox ESR, not dead
    
    A comma between rules represents a UNION operator.
    
    Per
    https://www.metabase.com/docs/latest/faq/general/supported-browsers.html
    
    
    we have deprecated IE 11 so I am including that explicitly in our
    browserslist.
    
    * Update babelrc plugins and presets
    
    - Replaced presets with preset-env and preset-react
    - Updated the names of some plugins, like transform-decorators-legacy,
      which is now @babel/plugin-proposal-decorators with an explicit
      "legacy: true" passed in the config.
    - Removed add-react-displayname because it is included in preset-react
    - Removed transform-builtin-extend because it is included in preset-env*
    - Removed syntax-trailing-function-commas because it is supported by
      all browsers we support
    
    * note: There is a "loose" config option for handling the extension of builtin
    classes. We may need it, but I am not sure.
    
    * Update babel cli args
    
    Replace -q with --quiet because -q no longer exists
    
    * Fix circular dep in auth.js by making it async
    
    Our app unfortunately contains MANY circular dependencies. Some, like
    this one, caused problems when the app instantiates because the
    "refreshCurrentUser" method is undefined when auth.js is initially run.
    
    While we should in the future avoid having circular deps in the first
    place, making them run async by requiring the dep and function run-time
    fixes this particular issue.
    
    * Fix circular dependency in metabase/redux/requests.js
    
    The handleActions and createAction methods imported from
    "metabase/lib/redux" are actually just methods from the "redux-actions"
    dependency... so importing those methods directly from that dep fixes
    this circular dependency problem.
    
    * Remove references to global.services and exports in metabase/services
    
    This line breaks the build. Git blame says the line is 5 years old, and
    I wouldn't expect such code to be used with how our app now requires
    deps.
    
    * Fix MBQLArrayClause problem caused by Array extension
    
    * Explicitly pass args from flatMap to function via anonymous cb
    
    I think the old Array.prototype.flatMap prototype must've had different
    args. They are now "currentValue, index, array" so when we passed it
    "enumeratePaths" as a callback, the second arg of enumeratePaths gets
    set to a number. This breaks the logic of enumeratePaths because it is a
    recursive function that depends on that second arg getting initialized
    as an empty array by default.
    
    * Remove code that spreads non-iterable value in array
    
    New Babel is stricter about handling this sort of code that doesn't
    match the JS spec. You can't spread an undefined value inside of an
    iterator.
    
    * Update jest and babel-jest to latest
    
    Updating Babel breaks our unit tests. Updating nothing causes every test
    to fail due to a Babel version mismatch. Updating only babel-jest causes
    the following error:
    
    TypeError: Jest: a transform must export a `process` function
    
    There may be a way around updating Jest, but updating it does not appear
    to be too difficult.
    
    * Set the testEnvironment to jsdom
    
    This was the default testEnvironment in our old version of jest. At some
    point the default was changed to node.
    
    * Remove unfinished "pending" unit tests
    
    I'm unfamiliar with this pending function, but the function no longer
    exists, causing the tests to fail.
    
    * don't pass async callback to describe
    
    * Update name of runTimersToTime to advanceTimersByTime
    
    * Fix incorrectly nested unit test
    
    * mock SVGElement.prototype.getBBox method
    
    * Don't return values in describe callback
    
    * Move variable declaration to above usage
    
    * Fix prettier error
    
    * Upgrade `documentation` library to the latest version (13.x.x)
    
    This library was the only one left that was still using Babel 6.
    
    * Return an MBQLClause instance after using Array methods
    
    * remove 'not IE 11' from browserslist
    
    * Remove mock that breaks unit test
    
    Co-authored-by: default avatarNemanja <31325167+nemanjaglumac@users.noreply.github.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.