diff --git a/.changeset/config.json b/.changeset/config.json index fd043d6fe6..c71123f949 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,5 +1,5 @@ { - "$schema": "https://unpkg.com/@changesets/config@1.6.0/schema.json", + "$schema": "https://unpkg.com/@changesets/config@3.0.2/schema.json", "changelog": [ "@changesets/changelog-github", { "repo": "emotion-js/emotion" } @@ -23,6 +23,7 @@ ] ], "access": "public", + "privatePackages": false, "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true } diff --git a/.eslintignore b/.eslintignore index 738ec7934d..3406ffb853 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,8 +4,4 @@ coverage/ node_modules/ stylis.min.js /demo/dist -flow-typed/ - -# This is to prevent ESLint parsing errors in the website which is written in -# TypeScript. TODO: Reenable once the codebase is converted to TypeScript. -/site/ \ No newline at end of file +/site/out \ No newline at end of file diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index d04879273d..0000000000 --- a/.flowconfig +++ /dev/null @@ -1,24 +0,0 @@ -[version] -0.128.0 - -[ignore] -.*/node_modules/config-chain/.* -.*/node_modules/styled-components/.* -.*/node_modules/graphql/.* -.*/node_modules/metro.* -.*/node_modules/@parcel/.* -.*/node_modules/resolve/.* - -[untyped] -.*/node_modules/polished/.* - - -[include] - -[libs] - -[declarations] -.*/node_modules/react-native/.* - -[options] -sharedmemory.hash_table_pow=21 diff --git a/.flowconfig-ci b/.flowconfig-ci deleted file mode 100644 index b161c6790f..0000000000 --- a/.flowconfig-ci +++ /dev/null @@ -1,25 +0,0 @@ -[version] -0.128.0 - -[ignore] -.*/node_modules/config-chain/.* -.*/node_modules/styled-components/.* -.*/node_modules/graphql/.* -.*/node_modules/metro.* -.*/node_modules/@parcel/.* -.*/node_modules/resolve/.* - -[untyped] -.*/node_modules/polished/.* - - -[include] - -[libs] - -[declarations] -.*/node_modules/react-native/.* - -[options] -server.max_workers=1 -sharedmemory.hash_table_pow=21 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 453ccbcff1..b6be13eb6c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - ts-migration pull_request: permissions: @@ -30,15 +31,15 @@ jobs: uses: codecov/codecov-action@v1 if: ${{ matrix.platform == 'ubuntu-latest' && always() }} - flow: - name: Flow + typescript: + name: TypeScript runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./.github/actions/ci-setup - name: Check Types - run: yarn flow:check + run: yarn tsc:all test_react18: name: Test React 18 @@ -50,6 +51,16 @@ jobs: - name: Run Tests with React 18 run: yarn test:react18:ci + test_prod: + name: Test Prod + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/ci-setup + + - name: Prod Tests + run: yarn test:prod + test_dist: name: Test Dist runs-on: ubuntu-latest @@ -58,7 +69,7 @@ jobs: - uses: ./.github/actions/ci-setup - name: Dist Tests - run: yarn test:prod + run: yarn test:dist linting: name: Linting @@ -70,7 +81,7 @@ jobs: - name: ESLint run: yarn lint:check - typescript: + dtslint: name: dtslint runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index 6721288e71..579f7df299 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,5 @@ package-lock.json !.yarn/versions # Website -site/out -.next \ No newline at end of file +/site/out +.next diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 2219cd6a40..1320c69db7 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -6,6 +6,3 @@ overrides: - files: 'docs/*.md' options: printWidth: 60 - - files: '*.js' - options: - parser: flow diff --git a/.yarn/patches/@definitelytyped-dtslint-npm-0.0.112-1e6b842976.patch b/.yarn/patches/@definitelytyped-dtslint-npm-0.0.112-1e6b842976.patch new file mode 100644 index 0000000000..c943881862 --- /dev/null +++ b/.yarn/patches/@definitelytyped-dtslint-npm-0.0.112-1e6b842976.patch @@ -0,0 +1,17 @@ +diff --git a/dist/lint.js b/dist/lint.js +index ae29f2a0936fe8e4dee9b4a607ed5c611872d30d..96746c55f2df24c6d09ee30ff85e404138ad0fbe 100644 +--- a/dist/lint.js ++++ b/dist/lint.js +@@ -107,9 +107,9 @@ function startsWithDirectory(filePath, dirPath) { + return normalFilePath.startsWith(normalDirPath + "/") || normalFilePath.startsWith(normalDirPath + "\\"); + } + function testNoTsIgnore(text) { +- const tsIgnore = "ts-ignore"; +- const pos = text.indexOf(tsIgnore); +- return pos === -1 ? undefined : { pos, message: "'ts-ignore' is forbidden." }; ++ // const tsIgnore = "ts-ignore"; ++ // const pos = text.indexOf(tsIgnore); ++ // return pos === -1 ? undefined : { pos, message: "'ts-ignore' is forbidden." }; + } + function testNoTslintDisables(text) { + const tslintDisable = "tslint:disable"; diff --git a/.yarn/patches/jest-snapshot-npm-27.4.5-6ace6bf68e.patch b/.yarn/patches/jest-snapshot-npm-27.4.5-6ace6bf68e.patch deleted file mode 100644 index f548670d26..0000000000 --- a/.yarn/patches/jest-snapshot-npm-27.4.5-6ace6bf68e.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/build/InlineSnapshots.js b/build/InlineSnapshots.js -index 5f9c3d5816c5e944f6810bc42ff67ed649d84a2b..1ec2ce5d6a5a81ccd8cd898fb65be432b04cb514 100644 ---- a/build/InlineSnapshots.js -+++ b/build/InlineSnapshots.js -@@ -219,7 +219,8 @@ const saveSnapshotsForFile = (snapshots, sourceFilePath, prettier) => { - filename: sourceFilePath, - plugins, - presets, -- root: path.dirname(sourceFilePath) -+ // Jest 27-28 currently can't locate our `babel.config.js` correctly, see: https://github.com/facebook/jest/issues/11741 -+ // root: path.dirname(sourceFilePath) - }); - - if (!ast) { diff --git a/__mocks__/react-native.js b/__mocks__/react-native.js index 6626710208..6a8703720e 100644 --- a/__mocks__/react-native.js +++ b/__mocks__/react-native.js @@ -1,4 +1,3 @@ -// @flow /* eslint-env jest */ let components = [ diff --git a/__mocks__/react-primitives.js b/__mocks__/react-primitives.js index 83501e4778..80ff2af8b2 100644 --- a/__mocks__/react-primitives.js +++ b/__mocks__/react-primitives.js @@ -1,2 +1 @@ -// @flow export * from 'react-primitives/lib/index.web' diff --git a/babel.config.js b/babel.config.js index 05e09be180..5010931b43 100644 --- a/babel.config.js +++ b/babel.config.js @@ -10,7 +10,7 @@ let isTestFile = filename => module.exports = api => { api.cache(true) return { - presets: ['babel-preset-emotion-dev'], + presets: ['babel-preset-emotion-dev', '@babel/preset-typescript'], overrides: [ { test: filename => diff --git a/docs/best-practices.mdx b/docs/best-practices.mdx index d71ee13729..9f5fbb8624 100644 --- a/docs/best-practices.mdx +++ b/docs/best-practices.mdx @@ -93,7 +93,7 @@ Advantages of sharing styles via component reuse include: The css prop or `styled` should be used for static styles, while the `style` prop (inline styles) should be used for truly dynamic styles. By dynamic styles, we mean styles that change frequently or are unique to a single element. -Imagine you are displaying a list of user avatars in a forum application. Every avatar shares certain static CSS, like `width: 40px` and `border-radius: 50%`, but the avatar image is set via a `background-style` rule whose value is different for each avatar. If you pass all of this CSS through the CSS prop, you'll end up with a lot of nearly-duplicate CSS in the document. With 3 avatars, Emotion will create something like: +Imagine you are displaying a list of user avatars in a forum application. Every avatar shares certain static CSS, like `width: 40px` and `border-radius: 50%`, but the avatar image is set via a `background-image` rule whose value is different for each avatar. If you pass all of this CSS through the CSS prop, you'll end up with a lot of nearly-duplicate CSS in the document. With 3 avatars, Emotion will create something like: ```html ``` @@ -141,19 +141,19 @@ CSS variables can be used with the `style` prop to keep the CSS in a single plac border-radius: 50%; width: 40px; height: 40px; - background-style: var(--background-style); + background-image: var(--background-image); } ``` -Then, for each avatar, you render an element which sets the value of the `--background-style` CSS variable: +Then, for each avatar, you render an element which sets the value of the `--background-image` CSS variable: ```tsx function Avatar({ imageUrl }) { - return
+ return
} ``` -If you're using TypeScript, you'll have to use a type assertion like `style={{ ['--background-style' as any]: imageUrl }}` as explained [here](https://stackoverflow.com/a/52013197/752601). +If you're using TypeScript, you'll have to use a type assertion like `style={{ ['--background-image' as any]: imageUrl }}` as explained [here](https://stackoverflow.com/a/52013197/752601). ### If using React, prefer `@emotion/react` or `@emotion/styled` over `@emotion/css` diff --git a/docs/css-prop.mdx b/docs/css-prop.mdx index 2fc404c9f5..20dfb1811f 100644 --- a/docs/css-prop.mdx +++ b/docs/css-prop.mdx @@ -241,8 +241,8 @@ The styles are concatenated together and inserted via `insertRule`. ```css .css-2 { - font-size: 14px, - font-family: Georgia, serif, + font-size: 14px; + font-family: Georgia, serif; color: darkgray; } ``` @@ -264,8 +264,8 @@ The styles are concatenated together and inserted via `insertRule`. + line-height: 1.5; - font-family: 'sans-serif'; - color: black; -- font-size: 14px, -+ font-family: Georgia, serif, +- font-size: 14px; ++ font-family: Georgia, serif; + color: darkgray; + font-size: 10px; } diff --git a/docs/docs.yaml b/docs/docs.yaml index 199c46e151..73aa90f147 100644 --- a/docs/docs.yaml +++ b/docs/docs.yaml @@ -32,7 +32,6 @@ - source-maps - testing - typescript - - flow - eslint-plugin-react # This loads the READMEs instead of files in docs/ diff --git a/docs/flow.mdx b/docs/flow.mdx deleted file mode 100644 index 60ccc5579e..0000000000 --- a/docs/flow.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: 'Flow' ---- - -Emotion is built with Flow, so it exports type definitions for most of its packages, -including `@emotion/styled`. - -## @emotion/styled - -The styled package can be used to define styled components in two ways, by calling `styled()`, -or by using the `styled.*` shortcuts. - -Unfortunately, Flow doesn't currently support generic types on tagged templates, this means if -you'd like to explictly type a styled component props, you will have to use one of the following -alternatives: - -```jsx -import styled from '@emotion/styled' - -// Option A -const A = styled('div')` - color: red; -` - -// Option B -const B = styled.div({ - color: 'red', -}) -``` - -Styled components are annotated the same way normal React components are: - -```jsx -import styled from '@emotion/styled' - -type Props = { a: string } -const Link = styled('a')` - color: red; -` - -const App = () => Click me -``` - -Just like for normal React components, you don't need to provide type annotations -for your styled components if you don't plan to export them from your module: - -```jsx -import styled from '@emotion/styled' - -const Internal = styled.div` - color: red; -` -``` - -Be aware, Flow infers the return type of your components by referencing their return type, -this means you will need to annotate the properties of the root component in the case below: - -```jsx - -const Container = styled.div` - ^^^^^^^^^^^ Missing type annotation for P. P is a type parameter declared in function type [1] and was implicitly instantiated at -encaps tag [2]. - color: red; -` - -export const App = () => -``` - -You can use `React$ElementConfig` to obtain the props type of a HTML tag, or of -any existing React component: - -```jsx -import type { ElementConfig } from 'react' - -type Props = ElementConfig<'div'> -const Container = styled('div')` - color: red; -` - -export const App = () => -``` - - -```jsx -import type { ElementConfig } from 'react' -import styled from '@emotion/styled' - -const Container = styled>('div')` - background-color: yellow; -` - -const App = () => ( - {() => 10} - ^^^^^^^^^^ Cannot create Container element because in property children: - • Either inexact function [1] is incompatible with exact React.Element [2]. - • Or function [1] is incompatible with React.Portal [3]. - • Or property @@iterator is missing in function [1] but exists in $Iterable [4]. -) -``` - -Alternatively, you can define the return type of your component, so that -Flow doesn't need to infer it reading the props type of the internal component: - -```jsx -import type { Node } from 'react' - -const Container = styled.div` - color: red; -` - -export const App = (): Node => -``` - - - diff --git a/docs/labels.mdx b/docs/labels.mdx index 6e7a1c628c..dbdf9c2b57 100644 --- a/docs/labels.mdx +++ b/docs/labels.mdx @@ -2,7 +2,7 @@ title: 'Labels' --- -Emotion adds a css property called `label`, the value of it is appended to the end of the class name, so it's more readable than a hash. `@emotion/babel-plugin` adds these labels automatically based on the variable name and other information, so they don't need to be manually specified. +Emotion adds a CSS property called `label` which is appended to the generated class name to make it more readable. `@emotion/babel-plugin` adds these labels automatically based on the variable name and other information, so they don't need to be manually specified. ```jsx // @live @@ -29,3 +29,16 @@ render(
) ``` + +## Automatic Labeling at Runtime + +If you are not using `@emotion/babel-plugin`, you can still get automatic labels in development by setting the following global flag: + +```js +globalThis.EMOTION_RUNTIME_AUTO_LABEL = true +``` + +This feature is opt-in because: + +- If you use server-side rendering and test your site in Safari, you may get spurious hydration warnings because the label computed on the server does not match the label computed in Safari. +- This feature may degrade performance if the number of elements using the `css` prop is very large. diff --git a/flow-typed/npm/gatsby_vx.x.x.js b/flow-typed/npm/gatsby_vx.x.x.js deleted file mode 100644 index 776c5a9805..0000000000 --- a/flow-typed/npm/gatsby_vx.x.x.js +++ /dev/null @@ -1,20 +0,0 @@ -// flow-typed signature: 47a1ce76579bcf60e33bc03fcf5c8762 -// flow-typed version: <>/gatsby_v^1.9.100/flow_v0.59.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'gatsby' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'gatsby' { - declare module.exports: any -} -// eslint-disable-next-line no-unused-vars -declare var graphql: Function diff --git a/flow-typed/npm/jest-glamor-react_vx.x.x.js b/flow-typed/npm/jest-glamor-react_vx.x.x.js deleted file mode 100644 index 357758973f..0000000000 --- a/flow-typed/npm/jest-glamor-react_vx.x.x.js +++ /dev/null @@ -1,24 +0,0 @@ -// flow-typed signature: 22afe792d07ce86b99954c5d2a83c46e -// flow-typed version: <>/jest-glamor-react_v^3.1.1/flow_v0.59.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'jest-glamor-react' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -import type { JestSnapshotSerializer } from 'jest' - -interface GlamorStyleSheet { - tags: Array; -} -declare module 'jest-glamor-react' { - declare module.exports: JestSnapshotSerializer & - ((sheet: GlamorStyleSheet) => JestSnapshotSerializer) -} diff --git a/flow-typed/npm/jest_v25.x.x.js b/flow-typed/npm/jest_v25.x.x.js deleted file mode 100644 index 36734ca194..0000000000 --- a/flow-typed/npm/jest_v25.x.x.js +++ /dev/null @@ -1,1212 +0,0 @@ -// flow-typed signature: a0fbdb22ab391eceafc1d5643528e257 -// flow-typed version: dd2428a21d/jest_v25.x.x/flow_>=v0.104.x - -type JestMockFn, TReturn> = { - (...args: TArguments): TReturn, - /** - * An object for introspecting mock calls - */ - mock: { - /** - * An array that represents all calls that have been made into this mock - * function. Each call is represented by an array of arguments that were - * passed during the call. - */ - calls: Array, - /** - * An array that contains all the object instances that have been - * instantiated from this mock function. - */ - instances: Array, - /** - * An array that contains all the object results that have been - * returned by this mock function call - */ - results: Array<{ - isThrow: boolean, - value: TReturn, - ... - }>, - ... - }, - /** - * Resets all information stored in the mockFn.mock.calls and - * mockFn.mock.instances arrays. Often this is useful when you want to clean - * up a mock's usage data between two assertions. - */ - mockClear(): void, - /** - * Resets all information stored in the mock. This is useful when you want to - * completely restore a mock back to its initial state. - */ - mockReset(): void, - /** - * Removes the mock and restores the initial implementation. This is useful - * when you want to mock functions in certain test cases and restore the - * original implementation in others. Beware that mockFn.mockRestore only - * works when mock was created with jest.spyOn. Thus you have to take care of - * restoration yourself when manually assigning jest.fn(). - */ - mockRestore(): void, - /** - * Accepts a function that should be used as the implementation of the mock. - * The mock itself will still record all calls that go into and instances - * that come from itself -- the only difference is that the implementation - * will also be executed when the mock is called. - */ - mockImplementation( - fn: (...args: TArguments) => TReturn - ): JestMockFn, - /** - * Accepts a function that will be used as an implementation of the mock for - * one call to the mocked function. Can be chained so that multiple function - * calls produce different results. - */ - mockImplementationOnce( - fn: (...args: TArguments) => TReturn - ): JestMockFn, - /** - * Accepts a string to use in test result output in place of "jest.fn()" to - * indicate which mock function is being referenced. - */ - mockName(name: string): JestMockFn, - /** - * Just a simple sugar function for returning `this` - */ - mockReturnThis(): void, - /** - * Accepts a value that will be returned whenever the mock function is called. - */ - mockReturnValue(value: TReturn): JestMockFn, - /** - * Sugar for only returning a value once inside your mock - */ - mockReturnValueOnce(value: TReturn): JestMockFn, - /** - * Sugar for jest.fn().mockImplementation(() => Promise.resolve(value)) - */ - mockResolvedValue(value: TReturn): JestMockFn>, - /** - * Sugar for jest.fn().mockImplementationOnce(() => Promise.resolve(value)) - */ - mockResolvedValueOnce( - value: TReturn - ): JestMockFn>, - /** - * Sugar for jest.fn().mockImplementation(() => Promise.reject(value)) - */ - mockRejectedValue(value: TReturn): JestMockFn>, - /** - * Sugar for jest.fn().mockImplementationOnce(() => Promise.reject(value)) - */ - mockRejectedValueOnce(value: TReturn): JestMockFn>, - ... -} - -type JestAsymmetricEqualityType = { - /** - * A custom Jasmine equality tester - */ - asymmetricMatch(value: mixed): boolean, - ... -} - -type JestCallsType = { - allArgs(): mixed, - all(): mixed, - any(): boolean, - count(): number, - first(): mixed, - mostRecent(): mixed, - reset(): void, - ... -} - -type JestClockType = { - install(): void, - mockDate(date: Date): void, - tick(milliseconds?: number): void, - uninstall(): void, - ... -} - -type JestMatcherResult = { - message?: string | (() => string), - pass: boolean, - ... -} - -type JestMatcher = ( - received: any, - ...actual: Array -) => JestMatcherResult | Promise - -type JestPromiseType = { - /** - * Use rejects to unwrap the reason of a rejected promise so any other - * matcher can be chained. If the promise is fulfilled the assertion fails. - */ - rejects: JestExpectType, - /** - * Use resolves to unwrap the value of a fulfilled promise so any other - * matcher can be chained. If the promise is rejected the assertion fails. - */ - resolves: JestExpectType, - ... -} - -/** - * Jest allows functions and classes to be used as test names in test() and - * describe() - */ -type JestTestName = string | Function - -/** - * Plugin: jest-styled-components - */ - -type JestStyledComponentsMatcherValue = - | string - | JestAsymmetricEqualityType - | RegExp - | typeof undefined - -type JestStyledComponentsMatcherOptions = { - media?: string, - modifier?: string, - supports?: string, - ... -} - -type JestStyledComponentsMatchersType = { - toHaveStyleRule( - property: string, - value: JestStyledComponentsMatcherValue, - options?: JestStyledComponentsMatcherOptions - ): void, - ... -} - -/** - * Plugin: jest-enzyme - */ -type EnzymeMatchersType = { - // 5.x - toBeEmpty(): void, - toBePresent(): void, - // 6.x - toBeChecked(): void, - toBeDisabled(): void, - toBeEmptyRender(): void, - toContainMatchingElement(selector: string): void, - toContainMatchingElements(n: number, selector: string): void, - toContainExactlyOneMatchingElement(selector: string): void, - toContainReact(element: React$Element): void, - toExist(): void, - toHaveClassName(className: string): void, - toHaveHTML(html: string): void, - toHaveProp: ((propKey: string, propValue?: any) => void) & - ((props: { ... }) => void), - toHaveRef(refName: string): void, - toHaveState: ((stateKey: string, stateValue?: any) => void) & - ((state: { ... }) => void), - toHaveStyle: ((styleKey: string, styleValue?: any) => void) & - ((style: { ... }) => void), - toHaveTagName(tagName: string): void, - toHaveText(text: string): void, - toHaveValue(value: any): void, - toIncludeText(text: string): void, - toMatchElement( - element: React$Element, - options?: {| ignoreProps?: boolean, verbose?: boolean |} - ): void, - toMatchSelector(selector: string): void, - // 7.x - toHaveDisplayName(name: string): void, - ... -} - -// DOM testing library extensions (jest-dom) -// https://github.com/testing-library/jest-dom -type DomTestingLibraryType = { - /** - * @deprecated - */ - toBeInTheDOM(container?: HTMLElement): void, - toBeInTheDocument(): void, - toBeVisible(): void, - toBeEmpty(): void, - toBeDisabled(): void, - toBeEnabled(): void, - toBeInvalid(): void, - toBeRequired(): void, - toBeValid(): void, - toContainElement(element: HTMLElement | null): void, - toContainHTML(htmlText: string): void, - toHaveAttribute(attr: string, value?: any): void, - toHaveClass(...classNames: string[]): void, - toHaveFocus(): void, - toHaveFormValues(expectedValues: { [name: string]: any, ... }): void, - toHaveStyle(css: string): void, - toHaveTextContent( - text: string | RegExp, - options?: { normalizeWhitespace: boolean, ... } - ): void, - toHaveValue(value?: string | string[] | number): void, - ... -} - -// Jest JQuery Matchers: https://github.com/unindented/custom-jquery-matchers -type JestJQueryMatchersType = { - toExist(): void, - toHaveLength(len: number): void, - toHaveId(id: string): void, - toHaveClass(className: string): void, - toHaveTag(tag: string): void, - toHaveAttr(key: string, val?: any): void, - toHaveProp(key: string, val?: any): void, - toHaveText(text: string | RegExp): void, - toHaveData(key: string, val?: any): void, - toHaveValue(val: any): void, - toHaveCss(css: { [key: string]: any, ... }): void, - toBeChecked(): void, - toBeDisabled(): void, - toBeEmpty(): void, - toBeHidden(): void, - toBeSelected(): void, - toBeVisible(): void, - toBeFocused(): void, - toBeInDom(): void, - toBeMatchedBy(sel: string): void, - toHaveDescendant(sel: string): void, - toHaveDescendantWithText(sel: string, text: string | RegExp): void, - ... -} - -// Jest Extended Matchers: https://github.com/jest-community/jest-extended -type JestExtendedMatchersType = { - /** - * Note: Currently unimplemented - * Passing assertion - * - * @param {String} message - */ - // pass(message: string): void; - - /** - * Note: Currently unimplemented - * Failing assertion - * - * @param {String} message - */ - // fail(message: string): void; - - /** - * Use .toBeEmpty when checking if a String '', Array [] or Object {} is empty. - */ - toBeEmpty(): void, - /** - * Use .toBeOneOf when checking if a value is a member of a given Array. - * @param {Array.<*>} members - */ - toBeOneOf(members: any[]): void, - /** - * Use `.toBeNil` when checking a value is `null` or `undefined`. - */ - toBeNil(): void, - /** - * Use `.toSatisfy` when you want to use a custom matcher by supplying a predicate function that returns a `Boolean`. - * @param {Function} predicate - */ - toSatisfy(predicate: (n: any) => boolean): void, - /** - * Use `.toBeArray` when checking if a value is an `Array`. - */ - toBeArray(): void, - /** - * Use `.toBeArrayOfSize` when checking if a value is an `Array` of size x. - * @param {Number} x - */ - toBeArrayOfSize(x: number): void, - /** - * Use `.toIncludeAllMembers` when checking if an `Array` contains all of the same members of a given set. - * @param {Array.<*>} members - */ - toIncludeAllMembers(members: any[]): void, - /** - * Use `.toIncludeAnyMembers` when checking if an `Array` contains any of the members of a given set. - * @param {Array.<*>} members - */ - toIncludeAnyMembers(members: any[]): void, - /** - * Use `.toSatisfyAll` when you want to use a custom matcher by supplying a predicate function that returns a `Boolean` for all values in an array. - * @param {Function} predicate - */ - toSatisfyAll(predicate: (n: any) => boolean): void, - /** - * Use `.toBeBoolean` when checking if a value is a `Boolean`. - */ - toBeBoolean(): void, - /** - * Use `.toBeTrue` when checking a value is equal (===) to `true`. - */ - toBeTrue(): void, - /** - * Use `.toBeFalse` when checking a value is equal (===) to `false`. - */ - toBeFalse(): void, - /** - * Use .toBeDate when checking if a value is a Date. - */ - toBeDate(): void, - /** - * Use `.toBeFunction` when checking if a value is a `Function`. - */ - toBeFunction(): void, - /** - * Use `.toHaveBeenCalledBefore` when checking if a `Mock` was called before another `Mock`. - * - * Note: Required Jest version >22 - * Note: Your mock functions will have to be asynchronous to cause the timestamps inside of Jest to occur in a differentJS event loop, otherwise the mock timestamps will all be the same - * - * @param {Mock} mock - */ - toHaveBeenCalledBefore(mock: JestMockFn): void, - /** - * Use `.toBeNumber` when checking if a value is a `Number`. - */ - toBeNumber(): void, - /** - * Use `.toBeNaN` when checking a value is `NaN`. - */ - toBeNaN(): void, - /** - * Use `.toBeFinite` when checking if a value is a `Number`, not `NaN` or `Infinity`. - */ - toBeFinite(): void, - /** - * Use `.toBePositive` when checking if a value is a positive `Number`. - */ - toBePositive(): void, - /** - * Use `.toBeNegative` when checking if a value is a negative `Number`. - */ - toBeNegative(): void, - /** - * Use `.toBeEven` when checking if a value is an even `Number`. - */ - toBeEven(): void, - /** - * Use `.toBeOdd` when checking if a value is an odd `Number`. - */ - toBeOdd(): void, - /** - * Use `.toBeWithin` when checking if a number is in between the given bounds of: start (inclusive) and end (exclusive). - * - * @param {Number} start - * @param {Number} end - */ - toBeWithin(start: number, end: number): void, - /** - * Use `.toBeObject` when checking if a value is an `Object`. - */ - toBeObject(): void, - /** - * Use `.toContainKey` when checking if an object contains the provided key. - * - * @param {String} key - */ - toContainKey(key: string): void, - /** - * Use `.toContainKeys` when checking if an object has all of the provided keys. - * - * @param {Array.} keys - */ - toContainKeys(keys: string[]): void, - /** - * Use `.toContainAllKeys` when checking if an object only contains all of the provided keys. - * - * @param {Array.} keys - */ - toContainAllKeys(keys: string[]): void, - /** - * Use `.toContainAnyKeys` when checking if an object contains at least one of the provided keys. - * - * @param {Array.} keys - */ - toContainAnyKeys(keys: string[]): void, - /** - * Use `.toContainValue` when checking if an object contains the provided value. - * - * @param {*} value - */ - toContainValue(value: any): void, - /** - * Use `.toContainValues` when checking if an object contains all of the provided values. - * - * @param {Array.<*>} values - */ - toContainValues(values: any[]): void, - /** - * Use `.toContainAllValues` when checking if an object only contains all of the provided values. - * - * @param {Array.<*>} values - */ - toContainAllValues(values: any[]): void, - /** - * Use `.toContainAnyValues` when checking if an object contains at least one of the provided values. - * - * @param {Array.<*>} values - */ - toContainAnyValues(values: any[]): void, - /** - * Use `.toContainEntry` when checking if an object contains the provided entry. - * - * @param {Array.} entry - */ - toContainEntry(entry: [string, string]): void, - /** - * Use `.toContainEntries` when checking if an object contains all of the provided entries. - * - * @param {Array.>} entries - */ - toContainEntries(entries: [string, string][]): void, - /** - * Use `.toContainAllEntries` when checking if an object only contains all of the provided entries. - * - * @param {Array.>} entries - */ - toContainAllEntries(entries: [string, string][]): void, - /** - * Use `.toContainAnyEntries` when checking if an object contains at least one of the provided entries. - * - * @param {Array.>} entries - */ - toContainAnyEntries(entries: [string, string][]): void, - /** - * Use `.toBeExtensible` when checking if an object is extensible. - */ - toBeExtensible(): void, - /** - * Use `.toBeFrozen` when checking if an object is frozen. - */ - toBeFrozen(): void, - /** - * Use `.toBeSealed` when checking if an object is sealed. - */ - toBeSealed(): void, - /** - * Use `.toBeString` when checking if a value is a `String`. - */ - toBeString(): void, - /** - * Use `.toEqualCaseInsensitive` when checking if a string is equal (===) to another ignoring the casing of both strings. - * - * @param {String} string - */ - toEqualCaseInsensitive(string: string): void, - /** - * Use `.toStartWith` when checking if a `String` starts with a given `String` prefix. - * - * @param {String} prefix - */ - toStartWith(prefix: string): void, - /** - * Use `.toEndWith` when checking if a `String` ends with a given `String` suffix. - * - * @param {String} suffix - */ - toEndWith(suffix: string): void, - /** - * Use `.toInclude` when checking if a `String` includes the given `String` substring. - * - * @param {String} substring - */ - toInclude(substring: string): void, - /** - * Use `.toIncludeRepeated` when checking if a `String` includes the given `String` substring the correct number of times. - * - * @param {String} substring - * @param {Number} times - */ - toIncludeRepeated(substring: string, times: number): void, - /** - * Use `.toIncludeMultiple` when checking if a `String` includes all of the given substrings. - * - * @param {Array.} substring - */ - toIncludeMultiple(substring: string[]): void, - ... -} - -// Diffing snapshot utility for Jest (snapshot-diff) -// https://github.com/jest-community/snapshot-diff -type SnapshotDiffType = { - /** - * Compare the difference between the actual in the `expect()` - * vs the object inside `valueB` with some extra options. - */ - toMatchDiffSnapshot( - valueB: any, - options?: {| - expand?: boolean, - colors?: boolean, - contextLines?: number, - stablePatchmarks?: boolean, - aAnnotation?: string, - bAnnotation?: string - |}, - testName?: string - ): void, - ... -} - -interface JestExpectType { - not: JestExpectType & - EnzymeMatchersType & - DomTestingLibraryType & - JestJQueryMatchersType & - JestStyledComponentsMatchersType & - JestExtendedMatchersType & - SnapshotDiffType; - /** - * If you have a mock function, you can use .lastCalledWith to test what - * arguments it was last called with. - */ - lastCalledWith(...args: Array): void; - /** - * toBe just checks that a value is what you expect. It uses === to check - * strict equality. - */ - toBe(value: any): void; - /** - * Use .toBeCalledWith to ensure that a mock function was called with - * specific arguments. - */ - toBeCalledWith(...args: Array): void; - /** - * Using exact equality with floating point numbers is a bad idea. Rounding - * means that intuitive things fail. - */ - toBeCloseTo(num: number, delta: any): void; - /** - * Use .toBeDefined to check that a variable is not undefined. - */ - toBeDefined(): void; - /** - * Use .toBeFalsy when you don't care what a value is, you just want to - * ensure a value is false in a boolean context. - */ - toBeFalsy(): void; - /** - * To compare floating point numbers, you can use toBeGreaterThan. - */ - toBeGreaterThan(number: number): void; - /** - * To compare floating point numbers, you can use toBeGreaterThanOrEqual. - */ - toBeGreaterThanOrEqual(number: number): void; - /** - * To compare floating point numbers, you can use toBeLessThan. - */ - toBeLessThan(number: number): void; - /** - * To compare floating point numbers, you can use toBeLessThanOrEqual. - */ - toBeLessThanOrEqual(number: number): void; - /** - * Use .toBeInstanceOf(Class) to check that an object is an instance of a - * class. - */ - toBeInstanceOf(cls: Class<*>): void; - /** - * .toBeNull() is the same as .toBe(null) but the error messages are a bit - * nicer. - */ - toBeNull(): void; - /** - * Use .toBeTruthy when you don't care what a value is, you just want to - * ensure a value is true in a boolean context. - */ - toBeTruthy(): void; - /** - * Use .toBeUndefined to check that a variable is undefined. - */ - toBeUndefined(): void; - /** - * Use .toContain when you want to check that an item is in a list. For - * testing the items in the list, this uses ===, a strict equality check. - */ - toContain(item: any): void; - /** - * Use .toContainEqual when you want to check that an item is in a list. For - * testing the items in the list, this matcher recursively checks the - * equality of all fields, rather than checking for object identity. - */ - toContainEqual(item: any): void; - /** - * Use .toEqual when you want to check that two objects have the same value. - * This matcher recursively checks the equality of all fields, rather than - * checking for object identity. - */ - toEqual(value: any): void; - /** - * Use .toHaveBeenCalled to ensure that a mock function got called. - */ - toHaveBeenCalled(): void; - toBeCalled(): void; - /** - * Use .toHaveBeenCalledTimes to ensure that a mock function got called exact - * number of times. - */ - toHaveBeenCalledTimes(number: number): void; - toBeCalledTimes(number: number): void; - /** - * - */ - toHaveBeenNthCalledWith(nthCall: number, ...args: Array): void; - nthCalledWith(nthCall: number, ...args: Array): void; - /** - * - */ - toHaveReturned(): void; - toReturn(): void; - /** - * - */ - toHaveReturnedTimes(number: number): void; - toReturnTimes(number: number): void; - /** - * - */ - toHaveReturnedWith(value: any): void; - toReturnWith(value: any): void; - /** - * - */ - toHaveLastReturnedWith(value: any): void; - lastReturnedWith(value: any): void; - /** - * - */ - toHaveNthReturnedWith(nthCall: number, value: any): void; - nthReturnedWith(nthCall: number, value: any): void; - /** - * Use .toHaveBeenCalledWith to ensure that a mock function was called with - * specific arguments. - */ - toHaveBeenCalledWith(...args: Array): void; - toBeCalledWith(...args: Array): void; - /** - * Use .toHaveBeenLastCalledWith to ensure that a mock function was last called - * with specific arguments. - */ - toHaveBeenLastCalledWith(...args: Array): void; - lastCalledWith(...args: Array): void; - /** - * Check that an object has a .length property and it is set to a certain - * numeric value. - */ - toHaveLength(number: number): void; - /** - * - */ - toHaveProperty(propPath: string | $ReadOnlyArray, value?: any): void; - /** - * Use .toMatch to check that a string matches a regular expression or string. - */ - toMatch(regexpOrString: RegExp | string): void; - /** - * Use .toMatchObject to check that a javascript object matches a subset of the properties of an object. - */ - toMatchObject(object: Object | Array): void; - /** - * Use .toStrictEqual to check that a javascript object matches a subset of the properties of an object. - */ - toStrictEqual(value: any): void; - /** - * This ensures that an Object matches the most recent snapshot. - */ - toMatchSnapshot(propertyMatchers?: any, name?: string): void; - /** - * This ensures that an Object matches the most recent snapshot. - */ - toMatchSnapshot(name: string): void; - - toMatchInlineSnapshot(snapshot?: string): void; - toMatchInlineSnapshot(propertyMatchers?: any, snapshot?: string): void; - /** - * Use .toThrow to test that a function throws when it is called. - * If you want to test that a specific error gets thrown, you can provide an - * argument to toThrow. The argument can be a string for the error message, - * a class for the error, or a regex that should match the error. - * - * Alias: .toThrowError - */ - toThrow(message?: string | Error | Class | RegExp): void; - toThrowError(message?: string | Error | Class | RegExp): void; - /** - * Use .toThrowErrorMatchingSnapshot to test that a function throws a error - * matching the most recent snapshot when it is called. - */ - toThrowErrorMatchingSnapshot(): void; - toThrowErrorMatchingInlineSnapshot(snapshot?: string): void; -} - -type JestObjectType = { - /** - * Disables automatic mocking in the module loader. - * - * After this method is called, all `require()`s will return the real - * versions of each module (rather than a mocked version). - */ - disableAutomock(): JestObjectType, - /** - * An un-hoisted version of disableAutomock - */ - autoMockOff(): JestObjectType, - /** - * Enables automatic mocking in the module loader. - */ - enableAutomock(): JestObjectType, - /** - * An un-hoisted version of enableAutomock - */ - autoMockOn(): JestObjectType, - /** - * Clears the mock.calls and mock.instances properties of all mocks. - * Equivalent to calling .mockClear() on every mocked function. - */ - clearAllMocks(): JestObjectType, - /** - * Resets the state of all mocks. Equivalent to calling .mockReset() on every - * mocked function. - */ - resetAllMocks(): JestObjectType, - /** - * Restores all mocks back to their original value. - */ - restoreAllMocks(): JestObjectType, - /** - * Removes any pending timers from the timer system. - */ - clearAllTimers(): void, - /** - * Returns the number of fake timers still left to run. - */ - getTimerCount(): number, - /** - * The same as `mock` but not moved to the top of the expectation by - * babel-jest. - */ - doMock(moduleName: string, moduleFactory?: any): JestObjectType, - /** - * The same as `unmock` but not moved to the top of the expectation by - * babel-jest. - */ - dontMock(moduleName: string): JestObjectType, - /** - * Returns a new, unused mock function. Optionally takes a mock - * implementation. - */ - fn, TReturn>( - implementation?: (...args: TArguments) => TReturn - ): JestMockFn, - /** - * Determines if the given function is a mocked function. - */ - isMockFunction(fn: Function): boolean, - /** - * Given the name of a module, use the automatic mocking system to generate a - * mocked version of the module for you. - */ - genMockFromModule(moduleName: string): any, - /** - * Mocks a module with an auto-mocked version when it is being required. - * - * The second argument can be used to specify an explicit module factory that - * is being run instead of using Jest's automocking feature. - * - * The third argument can be used to create virtual mocks -- mocks of modules - * that don't exist anywhere in the system. - */ - mock( - moduleName: string, - moduleFactory?: any, - options?: Object - ): JestObjectType, - /** - * Returns the actual module instead of a mock, bypassing all checks on - * whether the module should receive a mock implementation or not. - */ - requireActual(moduleName: string): any, - /** - * Returns a mock module instead of the actual module, bypassing all checks - * on whether the module should be required normally or not. - */ - requireMock(moduleName: string): any, - /** - * Resets the module registry - the cache of all required modules. This is - * useful to isolate modules where local state might conflict between tests. - */ - resetModules(): JestObjectType, - /** - * Creates a sandbox registry for the modules that are loaded inside the - * callback function. This is useful to isolate specific modules for every - * test so that local module state doesn't conflict between tests. - */ - isolateModules(fn: () => void): JestObjectType, - /** - * Exhausts the micro-task queue (usually interfaced in node via - * process.nextTick). - */ - runAllTicks(): void, - /** - * Exhausts the macro-task queue (i.e., all tasks queued by setTimeout(), - * setInterval(), and setImmediate()). - */ - runAllTimers(): void, - /** - * Exhausts all tasks queued by setImmediate(). - */ - runAllImmediates(): void, - /** - * Executes only the macro task queue (i.e. all tasks queued by setTimeout() - * or setInterval() and setImmediate()). - */ - advanceTimersByTime(msToRun: number): void, - /** - * Executes only the macro task queue (i.e. all tasks queued by setTimeout() - * or setInterval() and setImmediate()). - * - * Renamed to `advanceTimersByTime`. - */ - runTimersToTime(msToRun: number): void, - /** - * Executes only the macro-tasks that are currently pending (i.e., only the - * tasks that have been queued by setTimeout() or setInterval() up to this - * point) - */ - runOnlyPendingTimers(): void, - /** - * Explicitly supplies the mock object that the module system should return - * for the specified module. Note: It is recommended to use jest.mock() - * instead. - */ - setMock(moduleName: string, moduleExports: any): JestObjectType, - /** - * Indicates that the module system should never return a mocked version of - * the specified module from require() (e.g. that it should always return the - * real module). - */ - unmock(moduleName: string): JestObjectType, - /** - * Instructs Jest to use fake versions of the standard timer functions - * (setTimeout, setInterval, clearTimeout, clearInterval, nextTick, - * setImmediate and clearImmediate). - */ - useFakeTimers(): JestObjectType, - /** - * Instructs Jest to use the real versions of the standard timer functions. - */ - useRealTimers(): JestObjectType, - /** - * Creates a mock function similar to jest.fn but also tracks calls to - * object[methodName]. - */ - spyOn( - object: Object, - methodName: string, - accessType?: 'get' | 'set' - ): JestMockFn, - /** - * Set the default timeout interval for tests and before/after hooks in milliseconds. - * Note: The default timeout interval is 5 seconds if this method is not called. - */ - setTimeout(timeout: number): JestObjectType, - ... -} - -type JestSpyType = { calls: JestCallsType, ... } - -type JestDoneFn = {| - (): void, - fail: (error: Error) => void -|} - -/** Runs this function after every test inside this context */ -declare function afterEach( - fn: (done: JestDoneFn) => ?Promise, - timeout?: number -): void -/** Runs this function before every test inside this context */ -declare function beforeEach( - fn: (done: JestDoneFn) => ?Promise, - timeout?: number -): void -/** Runs this function after all tests have finished inside this context */ -declare function afterAll( - fn: (done: JestDoneFn) => ?Promise, - timeout?: number -): void -/** Runs this function before any tests have started inside this context */ -declare function beforeAll( - fn: (done: JestDoneFn) => ?Promise, - timeout?: number -): void - -/** A context for grouping tests together */ -declare var describe: { - /** - * Creates a block that groups together several related tests in one "test suite" - */ - (name: JestTestName, fn: () => void): void, - /** - * Only run this describe block - */ - only(name: JestTestName, fn: () => void): void, - /** - * Skip running this describe block - */ - skip(name: JestTestName, fn: () => void): void, - /** - * each runs this test against array of argument arrays per each run - * - * @param {table} table of Test - */ - each( - ...table: Array | mixed> | [Array, string] - ): ( - name: JestTestName, - fn?: (...args: Array) => ?Promise, - timeout?: number - ) => void, - ... -} - -/** An individual test unit */ -declare var it: { - /** - * An individual test unit - * - * @param {JestTestName} Name of Test - * @param {Function} Test - * @param {number} Timeout for the test, in milliseconds. - */ - ( - name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, - timeout?: number - ): void, - /** - * Only run this test - * - * @param {JestTestName} Name of Test - * @param {Function} Test - * @param {number} Timeout for the test, in milliseconds. - */ - only: {| - ( - name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, - timeout?: number - ): void, - each( - ...table: Array | mixed> | [Array, string] - ): ( - name: JestTestName, - fn?: (...args: Array) => ?Promise, - timeout?: number - ) => void - |}, - /** - * Skip running this test - * - * @param {JestTestName} Name of Test - * @param {Function} Test - * @param {number} Timeout for the test, in milliseconds. - */ - skip( - name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, - timeout?: number - ): void, - /** - * Highlight planned tests in the summary output - * - * @param {String} Name of Test to do - */ - todo(name: string): void, - /** - * Run the test concurrently - * - * @param {JestTestName} Name of Test - * @param {Function} Test - * @param {number} Timeout for the test, in milliseconds. - */ - concurrent( - name: JestTestName, - fn?: (done: JestDoneFn) => ?Promise, - timeout?: number - ): void, - /** - * each runs this test against array of argument arrays per each run - * - * @param {table} table of Test - */ - each( - ...table: Array | mixed> | [Array, string] - ): ( - name: JestTestName, - fn?: (...args: Array) => ?Promise, - timeout?: number - ) => void, - ... -} - -declare function fit( - name: JestTestName, - fn: (done: JestDoneFn) => ?Promise, - timeout?: number -): void -/** An individual test unit */ -declare var test: typeof it -/** A disabled group of tests */ -declare var xdescribe: typeof describe -/** A focused group of tests */ -declare var fdescribe: typeof describe -/** A disabled individual test */ -declare var xit: typeof it -/** A disabled individual test */ -declare var xtest: typeof it - -type JestPrettyFormatColors = { - comment: { - close: string, - open: string, - ... - }, - content: { - close: string, - open: string, - ... - }, - prop: { - close: string, - open: string, - ... - }, - tag: { - close: string, - open: string, - ... - }, - value: { - close: string, - open: string, - ... - }, - ... -} - -type JestPrettyFormatIndent = string => string -type JestPrettyFormatRefs = Array -type JestPrettyFormatPrint = any => string -type JestPrettyFormatStringOrNull = string | null - -type JestPrettyFormatOptions = {| - callToJSON: boolean, - edgeSpacing: string, - escapeRegex: boolean, - highlight: boolean, - indent: number, - maxDepth: number, - min: boolean, - plugins: JestPrettyFormatPlugins, - printFunctionName: boolean, - spacing: string, - theme: {| - comment: string, - content: string, - prop: string, - tag: string, - value: string - |} -|} - -type JestPrettyFormatPlugin = { - print: ( - val: any, - serialize: JestPrettyFormatPrint, - indent: JestPrettyFormatIndent, - opts: JestPrettyFormatOptions, - colors: JestPrettyFormatColors - ) => string, - test: any => boolean, - ... -} - -type JestPrettyFormatPlugins = Array - -/** The expect function is used every time you want to test a value */ -declare var expect: { - /** The object that you want to make assertions against */ - ( - value: any - ): JestExpectType & - JestPromiseType & - EnzymeMatchersType & - DomTestingLibraryType & - JestJQueryMatchersType & - JestStyledComponentsMatchersType & - JestExtendedMatchersType & - SnapshotDiffType, - /** Add additional Jasmine matchers to Jest's roster */ - extend(matchers: { [name: string]: JestMatcher, ... }): void, - /** Add a module that formats application-specific data structures. */ - addSnapshotSerializer(pluginModule: JestPrettyFormatPlugin): void, - assertions(expectedAssertions: number): void, - hasAssertions(): void, - any(value: mixed): JestAsymmetricEqualityType, - anything(): any, - arrayContaining(value: Array): Array, - objectContaining(value: Object): Object, - /** Matches any received string that contains the exact expected string. */ - stringContaining(value: string): string, - stringMatching(value: string | RegExp): string, - not: { - arrayContaining: (value: $ReadOnlyArray) => Array, - objectContaining: (value: { ... }) => Object, - stringContaining: (value: string) => string, - stringMatching: (value: string | RegExp) => string, - ... - }, - ... -} - -// TODO handle return type -// http://jasmine.github.io/2.4/introduction.html#section-Spies -declare function spyOn(value: mixed, method: string): Object - -/** Holds all functions related to manipulating test runner */ -declare var jest: JestObjectType - -/** - * The global Jasmine object, this is generally not exposed as the public API, - * using features inside here could break in later versions of Jest. - */ -declare var jasmine: { - DEFAULT_TIMEOUT_INTERVAL: number, - any(value: mixed): JestAsymmetricEqualityType, - anything(): any, - arrayContaining(value: Array): Array, - clock(): JestClockType, - createSpy(name: string): JestSpyType, - createSpyObj( - baseName: string, - methodNames: Array - ): { [methodName: string]: JestSpyType, ... }, - objectContaining(value: Object): Object, - stringMatching(value: string): string, - ... -} diff --git a/flow-typed/npm/react-test-renderer_vx.x.x.js b/flow-typed/npm/react-test-renderer_vx.x.x.js deleted file mode 100644 index 2f2d85c1f3..0000000000 --- a/flow-typed/npm/react-test-renderer_vx.x.x.js +++ /dev/null @@ -1,43 +0,0 @@ -// flow-typed signature: b39646fcd6b54764b610c38b101a4fdd -// flow-typed version: <>/react-test-renderer_v^16.0.0/flow_v0.59.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'react-test-renderer' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -type TestRendererOptions = { - createNodeMock: (element: React$Element) => any -} - -type ReactTestRendererNode = ReactTestRendererJSON | string - -type ReactTestRendererJSON = {| - type: string, - props: { [propName: string]: any }, - children: null | Array, - $$typeof?: Symbol // Optional because we add it with defineProperty(). -|} - -declare module 'react-test-renderer' { - declare module.exports: { - create: ( - element: React$Element, - options?: TestRendererOptions - ) => { - toJSON: () => ReactTestRendererJSON, - update: (newElement: React$Element) => void, - unmount: () => void, - toTree: () => any, - getInstance: () => any, - root: any - } - } -} diff --git a/jest.config.js b/jest.config.js index 28c0931b85..8cdef5fdd2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,10 @@ module.exports = { testEnvironment: 'jsdom', + testEnvironmentOptions: { + customExportConditions: ['development'] + }, transform: { - '^.+\\.js?$': 'babel-jest' + '^.+\\.(tsx|ts|js)?$': 'babel-jest' }, watchPlugins: [ 'jest-watch-typeahead/filename', @@ -13,7 +16,7 @@ module.exports = { '/site/', '/types/' ], - setupFilesAfterEnv: ['/test/testSetup.js'], + setupFilesAfterEnv: ['test-utils/testSetup.js'], coveragePathIgnorePatterns: [ '/node_modules/', '/packages/babel-plugin/test/util.js' diff --git a/jest.prod.js b/jest.prod.js new file mode 100644 index 0000000000..291ae961de --- /dev/null +++ b/jest.prod.js @@ -0,0 +1,11 @@ +const baseConfig = require('./jest.config.js') + +module.exports = Object.assign({}, baseConfig, { + testEnvironmentOptions: { + ...baseConfig.testEnvironmentOptions, + customExportConditions: + baseConfig.testEnvironmentOptions.customExportConditions.filter( + c => c !== 'development' + ) + } +}) diff --git a/package.json b/package.json index 0fa50d67e9..d061b9e54e 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "scripts": { "build:watch": "preconstruct watch", "build": "preconstruct build", + "tsc:all": "tsc && tsc --project site", "test:size": "npm-run-all build size", "test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand --watch", "test": "jest", @@ -12,14 +13,13 @@ "test:typescript": "yarn workspaces foreach --verbose --exclude emotion-monorepo run test:typescript", "test:ci": "jest --coverage --no-cache --ci --runInBand", "test:react18:ci": "yarn test:react18 --coverage --no-cache --ci --runInBand", - "test:prod": "yarn build && jest -c jest.dist.js --no-cache --ci --runInBand", + "test:dist": "yarn build && jest -c jest.dist.js --no-cache --ci --runInBand", + "test:prod": "jest -c jest.prod.js --no-cache --ci --runInBand", "lint:check": "eslint .", "test:watch": "jest --watch", "size": "bundlesize", "lint": "eslint . --fix", "benchmark": "cd scripts/benchmarks && yarn build && yarn run-benchmark", - "flow": "flow", - "flow:check": "flow check --flowconfig-name=.flowconfig-ci", "preinstall": "node ./scripts/ensure-yarn.js", "postinstall": "preconstruct dev && manypkg check", "changeset": "changeset", @@ -45,27 +45,25 @@ ], "eslintConfig": { "extends": [ - "standard", - "standard-react", - "prettier" + "prettier", + "plugin:@typescript-eslint/eslint-recommended" ], "plugins": [ "prettier", - "flowtype", - "@emotion" + "@emotion", + "react", + "@typescript-eslint" ], - "parser": "babel-eslint", + "parser": "@typescript-eslint/parser", "rules": { "camelcase": 0, "no-template-curly-in-string": 0, "prefer-const": 0, "no-unused-vars": 0, - "flowtype/define-flow-type": 2, - "import/no-duplicates": 0, "prettier/prettier": [ "error", { - "parser": "flow" + "parser": "typescript" } ], "react/jsx-curly-brace-presence": 0, @@ -73,7 +71,6 @@ "react/no-unused-prop-types": 0, "react/prop-types": 0, "react/react-in-jsx-scope": 0, - "standard/computed-property-even-spacing": 0, "@emotion/pkg-renaming": 2 }, "env": { @@ -91,11 +88,16 @@ }, { "files": [ - "**/packages/*/src/*", - "**/packages/*/src/**/*" + "**/packages/**/*.ts", + "**/packages/**/*.tsx" ], "rules": { - "import/no-commonjs": 2 + "prettier/prettier": [ + "error", + { + "parser": "typescript" + } + ] } }, { @@ -130,6 +132,9 @@ }, "exports": { "importConditionDefaultExport": "default" + }, + "___experimentalFlags_WILL_CHANGE_IN_PATCH": { + "importsConditions": true } }, "bugs": { @@ -170,25 +175,25 @@ "@babel/helper-module-imports": "^7.16.7", "@babel/plugin-proposal-class-properties": "^7.17.12", "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/plugin-transform-flow-strip-types": "^7.17.12", "@babel/plugin-transform-react-jsx": "^7.17.12", "@babel/preset-env": "^7.18.2", - "@babel/preset-flow": "^7.17.12", "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.18.6", "@babel/register": "^7.17.7", "@babel/runtime": "^7.18.3", - "@changesets/changelog-github": "^0.4.0", - "@changesets/cli": "^2.16.0", + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "^2.27.7", "@manypkg/cli": "^0.19.1", - "@preconstruct/cli": "^2.6.2", + "@preconstruct/cli": "^2.8.4", "@testing-library/react": "13.0.0-alpha.5", - "@types/jest": "^27.0.3", + "@types/jest": "^29.5.12", "@types/node": "^12.20.37", - "@types/react": "^18.0.9", + "@types/react": "18.2.6", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "babel-check-duplicated-nodes": "^1.0.0", "babel-eslint": "^10.1.0", - "babel-flow-types": "^1.2.3", - "babel-jest": "^27.4.5", + "babel-jest": "^29.7.0", "babel-plugin-codegen": "^4.1.5", "babel-plugin-jsx-pragmatic": "^1.0.2", "benchmark": "^2.1.4", @@ -199,28 +204,22 @@ "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", "enzyme-to-json": "^3.6.1", - "eslint": "^7.10.0", - "eslint-config-prettier": "^8.3.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", "eslint-config-react": "^1.1.7", - "eslint-config-standard": "^14.1.1", - "eslint-config-standard-react": "^9.2.0", - "eslint-plugin-flowtype": "^5.2.0", - "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.21.3", - "eslint-plugin-react-hooks": "^4.1.2", - "eslint-plugin-standard": "^4.0.1", - "flow-bin": "^0.128.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-promise": "^6.2.0", + "eslint-plugin-react": "^7.34.2", + "eslint-plugin-react-hooks": "^4.6.2", "html-tag-names": "^1.1.2", "husky": "^3.0.9", - "jest": "^27.4.5", - "jest-environment-jsdom": "^27.4.4", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "jest-in-case": "^1.0.2", "jest-junit": "^13.0.0", "jest-serializer-html": "^7.1.0", - "jest-watch-typeahead": "^1.0.0", + "jest-watch-typeahead": "^2.2.2", "lint-staged": "^7.2.0", "module-alias": "^2.0.1", "multipipe": "^1.0.2", @@ -228,7 +227,7 @@ "npm-run-all": "^4.0.2", "opencollective": "^1.0.3", "polished": "^1.2.1", - "prettier": "^2.3.0", + "prettier": "^3.3.2", "raf": "^3.4.0", "react": "16.14.0", "react-dom": "16.14.0", @@ -240,11 +239,12 @@ "react18-test-renderer": "npm:react-test-renderer@18.0.0-rc.0-next-aa8f2bdbc-20211215", "svg-tag-names": "^1.1.1", "through": "^2.3.8", + "typescript": "^5.4.5", "unified": "^6.1.6", "webpack-bundle-analyzer": "3.3.2" }, "packageManager": "yarn@3.2.3", "resolutions": { - "jest-snapshot@27.4.5": "patch:jest-snapshot@npm:27.4.5#.yarn/patches/jest-snapshot-npm-27.4.5-6ace6bf68e.patch" + "@definitelytyped/dtslint@0.0.112": "patch:@definitelytyped/dtslint@npm%3A0.0.112#./.yarn/patches/@definitelytyped-dtslint-npm-0.0.112-1e6b842976.patch" } } diff --git a/packages/babel-plugin-jsx-pragmatic/CHANGELOG.md b/packages/babel-plugin-jsx-pragmatic/CHANGELOG.md index 2a96ccf4d2..7f77ed1a9b 100644 --- a/packages/babel-plugin-jsx-pragmatic/CHANGELOG.md +++ b/packages/babel-plugin-jsx-pragmatic/CHANGELOG.md @@ -1,5 +1,11 @@ # @emotion/babel-plugin-jsx-pragmatic +## 0.3.0 + +### Minor Changes + +- [#2570](https://github.com/emotion-js/emotion/pull/2570) [`ea84c40`](https://github.com/emotion-js/emotion/commit/ea84c4096d7bc28f03c4cdc1f453bb64d09dcd15) Thanks [@G-Rath](https://github.com/G-Rath)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + ## 0.2.1 ### Patch Changes diff --git a/packages/babel-plugin-jsx-pragmatic/babel__plugin-syntax-jsx.d.ts b/packages/babel-plugin-jsx-pragmatic/babel__plugin-syntax-jsx.d.ts new file mode 100644 index 0000000000..26446987ad --- /dev/null +++ b/packages/babel-plugin-jsx-pragmatic/babel__plugin-syntax-jsx.d.ts @@ -0,0 +1,4 @@ +declare module '@babel/plugin-syntax-jsx' { + const plugin: any + export default plugin +} diff --git a/packages/babel-plugin-jsx-pragmatic/package.json b/packages/babel-plugin-jsx-pragmatic/package.json index 12ebba9857..71b4cafea7 100644 --- a/packages/babel-plugin-jsx-pragmatic/package.json +++ b/packages/babel-plugin-jsx-pragmatic/package.json @@ -1,11 +1,15 @@ { "name": "@emotion/babel-plugin-jsx-pragmatic", - "version": "0.2.1", + "version": "0.3.0", "description": "Insert code to load a module corresponding to JSX pragma.", "main": "dist/emotion-babel-plugin-jsx-pragmatic.cjs.js", "module": "dist/emotion-babel-plugin-jsx-pragmatic.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-babel-plugin-jsx-pragmatic.cjs.mjs", + "default": "./dist/emotion-babel-plugin-jsx-pragmatic.cjs.js" + }, "module": "./dist/emotion-babel-plugin-jsx-pragmatic.esm.js", "import": "./dist/emotion-babel-plugin-jsx-pragmatic.cjs.mjs", "default": "./dist/emotion-babel-plugin-jsx-pragmatic.cjs.js" @@ -28,6 +32,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "^7.18.5" + "@babel/core": "^7.18.5", + "@types/babel__core": "^7.1.18" } } diff --git a/packages/babel-plugin-jsx-pragmatic/src/index.js b/packages/babel-plugin-jsx-pragmatic/src/index.ts similarity index 72% rename from packages/babel-plugin-jsx-pragmatic/src/index.js rename to packages/babel-plugin-jsx-pragmatic/src/index.ts index c2523b9d94..2315326e70 100644 --- a/packages/babel-plugin-jsx-pragmatic/src/index.js +++ b/packages/babel-plugin-jsx-pragmatic/src/index.ts @@ -1,17 +1,38 @@ +import type { + NodePath, + PluginObj, + PluginPass, + types as BabelTypes +} from '@babel/core' import syntaxJsx from '@babel/plugin-syntax-jsx' -const findLast = (arr, predicate) => { +const findLast = (arr: T[], predicate: (item: T) => boolean): T | null => { for (let i = arr.length - 1; i >= 0; i--) { if (predicate(arr[i])) { return arr[i] } } + + return null +} + +interface PluginPassWithOpts extends PluginPass { + opts: { + module: string + import: string + export?: string + } } -export default function jsxPragmatic(babel) { +export default function jsxPragmatic(babel: { + types: typeof BabelTypes +}): PluginObj { const t = babel.types - function addPragmaImport(path, state) { + function addPragmaImport( + path: NodePath, + state: PluginPassWithOpts + ) { const importDeclar = t.importDeclaration( [ t.importSpecifier( diff --git a/packages/babel-plugin/CHANGELOG.md b/packages/babel-plugin/CHANGELOG.md index 6a84d04efa..849f4c0865 100644 --- a/packages/babel-plugin/CHANGELOG.md +++ b/packages/babel-plugin/CHANGELOG.md @@ -1,5 +1,14 @@ # @emotion/babel-plugin +## 11.12.0 + +### Patch Changes + +- Updated dependencies [[`9ca22c6`](https://github.com/emotion-js/emotion/commit/9ca22c6c23e9effa086d161a9b0ae1c645686680), [`7f8db2d`](https://github.com/emotion-js/emotion/commit/7f8db2d7a900bb34995db66084a99d512811e33d), [`ea2c397`](https://github.com/emotion-js/emotion/commit/ea2c397bbf7d9838086ec88b3eb86db9230d32ae)]: + - @emotion/serialize@1.2.0 + - @emotion/memoize@0.9.0 + - @emotion/hash@0.9.2 + ## 11.11.0 ### Patch Changes diff --git a/packages/babel-plugin/README.md b/packages/babel-plugin/README.md index 9fcbabe984..12541ee557 100644 --- a/packages/babel-plugin/README.md +++ b/packages/babel-plugin/README.md @@ -304,8 +304,8 @@ This option allows you to tell @emotion/babel-plugin what imports it should look An example file: ```js -import { anotherExport } from 'my-package'; -import { someExport, thisIsTheJsxExport } from 'some-package'; +import { anotherExport } from 'my-package' +import { someExport, thisIsTheJsxExport } from 'some-package' ``` An example config: diff --git a/packages/babel-plugin/__tests__/__fixtures__/core-with-component.js b/packages/babel-plugin/__tests__/__fixtures__/core-with-component.js index 9985981ae0..2dd0408025 100644 --- a/packages/babel-plugin/__tests__/__fixtures__/core-with-component.js +++ b/packages/babel-plugin/__tests__/__fixtures__/core-with-component.js @@ -1,4 +1,3 @@ -// @flow import styled from '@emotion/styled' const MyComponent = styled.div({ color: 'hotpink' }) diff --git a/packages/babel-plugin/__tests__/__fixtures__/function-declaration.js b/packages/babel-plugin/__tests__/__fixtures__/function-declaration.js index b2f0327c21..8663c9c652 100644 --- a/packages/babel-plugin/__tests__/__fixtures__/function-declaration.js +++ b/packages/babel-plugin/__tests__/__fixtures__/function-declaration.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import { jsx } from '@emotion/react' diff --git a/packages/babel-plugin/__tests__/__fixtures__/object-property.js b/packages/babel-plugin/__tests__/__fixtures__/object-property.js index fa222c87fd..c06dd8b678 100644 --- a/packages/babel-plugin/__tests__/__fixtures__/object-property.js +++ b/packages/babel-plugin/__tests__/__fixtures__/object-property.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import { jsx } from '@emotion/react' import styled from '@emotion/styled' diff --git a/packages/babel-plugin/__tests__/__snapshots__/index.js.snap b/packages/babel-plugin/__tests__/__snapshots__/index.js.snap index a9bd2119ae..1916b69115 100644 --- a/packages/babel-plugin/__tests__/__snapshots__/index.js.snap +++ b/packages/babel-plugin/__tests__/__snapshots__/index.js.snap @@ -56,8 +56,7 @@ const OtherComponent = () =>
;" `; exports[`@emotion/babel-plugin core-with-component 1`] = ` -"// @flow -import styled from '@emotion/styled' +"import styled from '@emotion/styled' const MyComponent = styled.div({ color: 'hotpink' }) @@ -70,7 +69,6 @@ import _styled from "@emotion/styled/base"; function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from \`css\` function. It isn't supposed to be used directly (e.g. as value of the \`className\` prop), but rather handed to emotion so it can handle it (e.g. as value of \`css\` prop)."; } -// @flow const MyComponent = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "production" ? { target: "eck06en0" } : { @@ -82,7 +80,7 @@ const MyComponent = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "produc } : { name: "3sn2xs", styles: "color:hotpink", - map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvcmUtd2l0aC1jb21wb25lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR29CIiwiZmlsZSI6ImNvcmUtd2l0aC1jb21wb25lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5cbmNvbnN0IE15Q29tcG9uZW50ID0gc3R5bGVkLmRpdih7IGNvbG9yOiAnaG90cGluaycgfSlcblxuY29uc3QgT3RoZXJDb21wb25lbnQgPSBNeUNvbXBvbmVudC53aXRoQ29tcG9uZW50KCdzZWN0aW9uJylcbiJdfQ== */", + map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvcmUtd2l0aC1jb21wb25lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRW9CIiwiZmlsZSI6ImNvcmUtd2l0aC1jb21wb25lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCdcblxuY29uc3QgTXlDb21wb25lbnQgPSBzdHlsZWQuZGl2KHsgY29sb3I6ICdob3RwaW5rJyB9KVxuXG5jb25zdCBPdGhlckNvbXBvbmVudCA9IE15Q29tcG9uZW50LndpdGhDb21wb25lbnQoJ3NlY3Rpb24nKVxuIl19 */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }); @@ -220,8 +218,7 @@ const SomeComponent = props =>
;" `; exports[`@emotion/babel-plugin object-property 1`] = ` -"// @flow -import * as React from 'react' +"import * as React from 'react' import { jsx } from '@emotion/react' import styled from '@emotion/styled' @@ -323,7 +318,6 @@ import _styled from "@emotion/styled/base"; function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from \`css\` function. It isn't supposed to be used directly (e.g. as value of the \`className\` prop), but rather handed to emotion so it can handle it (e.g. as value of \`css\` prop)."; } -// @flow import * as React from 'react'; import { jsx } from '@emotion/react'; const MyObject = { @@ -338,7 +332,7 @@ const MyObject = { } : { name: "3sn2xs", styles: "color:hotpink", - map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1wcm9wZXJ0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNYyIsImZpbGUiOiJvYmplY3QtcHJvcGVydHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJ1xuXG5jb25zdCBNeU9iamVjdCA9IHtcbiAgTXlQcm9wZXJ0eTogc3R5bGVkLmRpdih7IGNvbG9yOiAnaG90cGluaycgfSlcbn1cblxuZnVuY3Rpb24gTG9nbyhwcm9wcykge1xuICByZXR1cm4gPE15T2JqZWN0Lk15UHJvcGVydHkgLz5cbn1cbiJdfQ== */", + map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1wcm9wZXJ0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLYyIsImZpbGUiOiJvYmplY3QtcHJvcGVydHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0J1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5cbmNvbnN0IE15T2JqZWN0ID0ge1xuICBNeVByb3BlcnR5OiBzdHlsZWQuZGl2KHsgY29sb3I6ICdob3RwaW5rJyB9KVxufVxuXG5mdW5jdGlvbiBMb2dvKHByb3BzKSB7XG4gIHJldHVybiA8TXlPYmplY3QuTXlQcm9wZXJ0eSAvPlxufVxuIl19 */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }) }; diff --git a/packages/babel-plugin/__tests__/__snapshots__/styled.js.snap b/packages/babel-plugin/__tests__/__snapshots__/styled.js.snap index 2fbba924f6..1ef0fcb1d1 100644 --- a/packages/babel-plugin/__tests__/__snapshots__/styled.js.snap +++ b/packages/babel-plugin/__tests__/__snapshots__/styled.js.snap @@ -901,15 +901,13 @@ exports[`emotion-babel-plugin styled two-consecutive-interpolations 1`] = ` import { css } from '@emotion/react' const H1 = styled.h1\` - \${props => - css\` - color: red; - \`} + \${props => css\` + color: red; + \`} /* dummy comment */ - \${props => - css\` - text-transform: uppercase; - \`} + \${props => css\` + text-transform: uppercase; + \`} \` @@ -927,7 +925,7 @@ var _ref = process.env.NODE_ENV === "production" ? { } : { name: "15r1ir2-H1", styles: "text-transform:uppercase;label:H1;", - map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVTyIsImZpbGUiOiJ0d28tY29uc2VjdXRpdmUtaW50ZXJwb2xhdGlvbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCdcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0J1xuXG5jb25zdCBIMSA9IHN0eWxlZC5oMWBcbiAgJHtwcm9wcyA9PlxuICAgIGNzc2BcbiAgICAgIGNvbG9yOiByZWQ7XG4gICAgYH1cbiAgLyogZHVtbXkgY29tbWVudCAqL1xuICAke3Byb3BzID0+XG4gICAgY3NzYFxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBgfVxuYFxuIl19 */", + map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRZ0IiLCJmaWxlIjoidHdvLWNvbnNlY3V0aXZlLWludGVycG9sYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcblxuY29uc3QgSDEgPSBzdHlsZWQuaDFgXG4gICR7cHJvcHMgPT4gY3NzYFxuICAgIGNvbG9yOiByZWQ7XG4gIGB9XG4gIC8qIGR1bW15IGNvbW1lbnQgKi9cbiAgJHtwcm9wcyA9PiBjc3NgXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgYH1cbmBcbiJdfQ== */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }; @@ -937,7 +935,7 @@ var _ref2 = process.env.NODE_ENV === "production" ? { } : { name: "1yd8rfk-H1", styles: "color:red;label:H1;", - map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLTyIsImZpbGUiOiJ0d28tY29uc2VjdXRpdmUtaW50ZXJwb2xhdGlvbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCdcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0J1xuXG5jb25zdCBIMSA9IHN0eWxlZC5oMWBcbiAgJHtwcm9wcyA9PlxuICAgIGNzc2BcbiAgICAgIGNvbG9yOiByZWQ7XG4gICAgYH1cbiAgLyogZHVtbXkgY29tbWVudCAqL1xuICAke3Byb3BzID0+XG4gICAgY3NzYFxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBgfVxuYFxuIl19 */", + map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJZ0IiLCJmaWxlIjoidHdvLWNvbnNlY3V0aXZlLWludGVycG9sYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcblxuY29uc3QgSDEgPSBzdHlsZWQuaDFgXG4gICR7cHJvcHMgPT4gY3NzYFxuICAgIGNvbG9yOiByZWQ7XG4gIGB9XG4gIC8qIGR1bW15IGNvbW1lbnQgKi9cbiAgJHtwcm9wcyA9PiBjc3NgXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgYH1cbmBcbiJdfQ== */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }; @@ -946,7 +944,7 @@ const H1 = /*#__PURE__*/_styled("h1", process.env.NODE_ENV === "production" ? { } : { target: "e45grep0", label: "H1" -})(props => _ref2, props => _ref, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHb0IiLCJmaWxlIjoidHdvLWNvbnNlY3V0aXZlLWludGVycG9sYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcblxuY29uc3QgSDEgPSBzdHlsZWQuaDFgXG4gICR7cHJvcHMgPT5cbiAgICBjc3NgXG4gICAgICBjb2xvcjogcmVkO1xuICAgIGB9XG4gIC8qIGR1bW15IGNvbW1lbnQgKi9cbiAgJHtwcm9wcyA9PlxuICAgIGNzc2BcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYH1cbmBcbiJdfQ== */"));" +})(props => _ref2, props => _ref, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHb0IiLCJmaWxlIjoidHdvLWNvbnNlY3V0aXZlLWludGVycG9sYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcblxuY29uc3QgSDEgPSBzdHlsZWQuaDFgXG4gICR7cHJvcHMgPT4gY3NzYFxuICAgIGNvbG9yOiByZWQ7XG4gIGB9XG4gIC8qIGR1bW15IGNvbW1lbnQgKi9cbiAgJHtwcm9wcyA9PiBjc3NgXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgYH1cbmBcbiJdfQ== */"));" `; exports[`emotion-babel-plugin styled with-spread 1`] = ` diff --git a/packages/babel-plugin/__tests__/css-macro/index.js b/packages/babel-plugin/__tests__/css-macro/index.js index fae1b1815f..4d73fb4e84 100644 --- a/packages/babel-plugin/__tests__/css-macro/index.js +++ b/packages/babel-plugin/__tests__/css-macro/index.js @@ -1,4 +1,3 @@ -// @flow import babelTester from 'babel-tester' babelTester('@emotion/react - css macro', __dirname) diff --git a/packages/babel-plugin/__tests__/css-requires-options.js b/packages/babel-plugin/__tests__/css-requires-options.js index fd91b0c079..9173c489df 100644 --- a/packages/babel-plugin/__tests__/css-requires-options.js +++ b/packages/babel-plugin/__tests__/css-requires-options.js @@ -1,4 +1,3 @@ -// @flow import nodePath from 'path' import babelTester from 'babel-tester' import plugin from '@emotion/babel-plugin' diff --git a/packages/babel-plugin/__tests__/global-macro/index.js b/packages/babel-plugin/__tests__/global-macro/index.js index f2d2067288..c3eb1874e2 100644 --- a/packages/babel-plugin/__tests__/global-macro/index.js +++ b/packages/babel-plugin/__tests__/global-macro/index.js @@ -1,4 +1,3 @@ -// @flow import babelTester from 'babel-tester' babelTester('@emotion/react - Global macro', __dirname) diff --git a/packages/babel-plugin/__tests__/global-requires-options.js b/packages/babel-plugin/__tests__/global-requires-options.js index e8e7cf1324..a8cd7cfad1 100644 --- a/packages/babel-plugin/__tests__/global-requires-options.js +++ b/packages/babel-plugin/__tests__/global-requires-options.js @@ -1,4 +1,3 @@ -// @flow import babelTester from 'babel-tester' import plugin from '@emotion/babel-plugin' diff --git a/packages/babel-plugin/__tests__/styled-macro/__fixtures__/two-consecutive-interpolations.js b/packages/babel-plugin/__tests__/styled-macro/__fixtures__/two-consecutive-interpolations.js index f932adce21..aeb9c2e2da 100644 --- a/packages/babel-plugin/__tests__/styled-macro/__fixtures__/two-consecutive-interpolations.js +++ b/packages/babel-plugin/__tests__/styled-macro/__fixtures__/two-consecutive-interpolations.js @@ -2,13 +2,11 @@ import styled from '@emotion/styled/macro' import { css } from '@emotion/react' const H1 = styled.h1` - ${props => - css` - color: red; - `} + ${props => css` + color: red; + `} /* dummy comment */ - ${props => - css` - text-transform: uppercase; - `} + ${props => css` + text-transform: uppercase; + `} ` diff --git a/packages/babel-plugin/__tests__/styled-macro/__snapshots__/index.js.snap b/packages/babel-plugin/__tests__/styled-macro/__snapshots__/index.js.snap index 75c64a11b6..d62f957786 100644 --- a/packages/babel-plugin/__tests__/styled-macro/__snapshots__/index.js.snap +++ b/packages/babel-plugin/__tests__/styled-macro/__snapshots__/index.js.snap @@ -878,15 +878,13 @@ exports[`@emotion/styled.macro two-consecutive-interpolations 1`] = ` import { css } from '@emotion/react' const H1 = styled.h1\` - \${props => - css\` - color: red; - \`} + \${props => css\` + color: red; + \`} /* dummy comment */ - \${props => - css\` - text-transform: uppercase; - \`} + \${props => css\` + text-transform: uppercase; + \`} \` @@ -901,10 +899,10 @@ const H1 = /*#__PURE__*/_styled("h1", process.env.NODE_ENV === "production" ? { target: "e45grep0", label: "H1" })(props => css\` - color: red; - \`, props => css\` - text-transform: uppercase; - \`, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHb0IiLCJmaWxlIjoidHdvLWNvbnNlY3V0aXZlLWludGVycG9sYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQvbWFjcm8nXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcblxuY29uc3QgSDEgPSBzdHlsZWQuaDFgXG4gICR7cHJvcHMgPT5cbiAgICBjc3NgXG4gICAgICBjb2xvcjogcmVkO1xuICAgIGB9XG4gIC8qIGR1bW15IGNvbW1lbnQgKi9cbiAgJHtwcm9wcyA9PlxuICAgIGNzc2BcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYH1cbmBcbiJdfQ== */"));" + color: red; + \`, props => css\` + text-transform: uppercase; + \`, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInR3by1jb25zZWN1dGl2ZS1pbnRlcnBvbGF0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHb0IiLCJmaWxlIjoidHdvLWNvbnNlY3V0aXZlLWludGVycG9sYXRpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQvbWFjcm8nXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCdcblxuY29uc3QgSDEgPSBzdHlsZWQuaDFgXG4gICR7cHJvcHMgPT4gY3NzYFxuICAgIGNvbG9yOiByZWQ7XG4gIGB9XG4gIC8qIGR1bW15IGNvbW1lbnQgKi9cbiAgJHtwcm9wcyA9PiBjc3NgXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgYH1cbmBcbiJdfQ== */"));" `; exports[`@emotion/styled.macro with-spread 1`] = ` diff --git a/packages/babel-plugin/__tests__/styled-macro/index.js b/packages/babel-plugin/__tests__/styled-macro/index.js index f183501efa..26c27d241d 100644 --- a/packages/babel-plugin/__tests__/styled-macro/index.js +++ b/packages/babel-plugin/__tests__/styled-macro/index.js @@ -1,4 +1,3 @@ -// @flow import babelTester from 'babel-tester' babelTester('@emotion/styled.macro', __dirname) diff --git a/packages/babel-plugin/__tests__/styled-requires-options.js b/packages/babel-plugin/__tests__/styled-requires-options.js index a2d1a57e26..05e003fb36 100644 --- a/packages/babel-plugin/__tests__/styled-requires-options.js +++ b/packages/babel-plugin/__tests__/styled-requires-options.js @@ -1,4 +1,3 @@ -// @flow import babelTester from 'babel-tester' import plugin from '@emotion/babel-plugin' diff --git a/packages/babel-plugin/__tests__/vanilla-emotion-macro/index.js b/packages/babel-plugin/__tests__/vanilla-emotion-macro/index.js index 07961ee8fe..cdce44dffd 100644 --- a/packages/babel-plugin/__tests__/vanilla-emotion-macro/index.js +++ b/packages/babel-plugin/__tests__/vanilla-emotion-macro/index.js @@ -1,4 +1,3 @@ -// @flow import babelTester from 'babel-tester' babelTester('vanilla emotion', __dirname) diff --git a/packages/babel-plugin/package.json b/packages/babel-plugin/package.json index 7f8773b423..32805b41c7 100644 --- a/packages/babel-plugin/package.json +++ b/packages/babel-plugin/package.json @@ -1,11 +1,15 @@ { "name": "@emotion/babel-plugin", - "version": "11.11.0", + "version": "11.12.0", "description": "A recommended babel preprocessing plugin for emotion, The Next Generation of CSS-in-JS.", "main": "dist/emotion-babel-plugin.cjs.js", "module": "dist/emotion-babel-plugin.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-babel-plugin.cjs.mjs", + "default": "./dist/emotion-babel-plugin.cjs.js" + }, "module": "./dist/emotion-babel-plugin.esm.js", "import": "./dist/emotion-babel-plugin.cjs.mjs", "default": "./dist/emotion-babel-plugin.cjs.js" @@ -20,9 +24,9 @@ "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", diff --git a/packages/babel-plugin/src/core-macro.js b/packages/babel-plugin/src/core-macro.js index 77f39f1244..c7f8c76961 100644 --- a/packages/babel-plugin/src/core-macro.js +++ b/packages/babel-plugin/src/core-macro.js @@ -1,4 +1,3 @@ -// @flow import { transformExpressionWithStyles, createTransformerMacro, @@ -6,19 +5,15 @@ import { addImport } from './utils' -export const transformCssCallExpression = ({ - state, - babel, - path, - sourceMap, - annotateAsPure = true -}: { +export const transformCssCallExpression = ( + { state, babel, path, sourceMap, annotateAsPure = true } /*: { state: *, babel: *, path: *, sourceMap?: string, annotateAsPure?: boolean -}) => { +} */ +) => { let node = transformExpressionWithStyles({ babel, state, @@ -34,15 +29,13 @@ export const transformCssCallExpression = ({ } } -export const transformCsslessArrayExpression = ({ - state, - babel, - path -}: { +export const transformCsslessArrayExpression = ( + { state, babel, path } /*: { babel: *, state: *, path: * -}) => { +} */ +) => { let t = babel.types let expressionPath = path.get('value.expression') let sourceMap = @@ -72,17 +65,14 @@ export const transformCsslessArrayExpression = ({ } } -export const transformCsslessObjectExpression = ({ - state, - babel, - path, - cssImport -}: { +export const transformCsslessObjectExpression = ( + { state, babel, path, cssImport } /*: { babel: *, state: *, path: *, cssImport: { importSource: string, cssExport: string } -}) => { +} */ +) => { let t = babel.types let expressionPath = path.get('value.expression') let sourceMap = @@ -115,31 +105,25 @@ export const transformCsslessObjectExpression = ({ } } -let cssTransformer = ({ - state, - babel, - reference -}: { +let cssTransformer = ( + { state, babel, reference } /*: { state: any, babel: any, reference: any -}) => { +} */ +) => { transformCssCallExpression({ babel, state, path: reference.parentPath }) } -let globalTransformer = ({ - state, - babel, - reference, - importSource, - options -}: { +let globalTransformer = ( + { state, babel, reference, importSource, options } /*: { state: any, babel: any, reference: any, importSource: string, options: { cssExport?: string } -}) => { +} */ +) => { const t = babel.types if ( diff --git a/packages/babel-plugin/src/emotion-macro.js b/packages/babel-plugin/src/emotion-macro.js index 96b5954a67..67bf2c8e13 100644 --- a/packages/babel-plugin/src/emotion-macro.js +++ b/packages/babel-plugin/src/emotion-macro.js @@ -1,4 +1,3 @@ -// @flow import { transformExpressionWithStyles, createTransformerMacro } from './utils' const isAlreadyTranspiled = path => { @@ -30,8 +29,10 @@ const isAlreadyTranspiled = path => { } let createEmotionTransformer = - (isPure: boolean) => - ({ state, babel, importSource, reference, importSpecifierName }: Object) => { + (isPure /*: boolean */) => + ( + { state, babel, importSource, reference, importSpecifierName } /*: Object */ + ) => { const path = reference.parentPath if (isAlreadyTranspiled(path)) { @@ -59,5 +60,5 @@ export let transformers = { keyframes: createEmotionTransformer(true) } -export let createEmotionMacro = (importSource: string) => +export let createEmotionMacro = (importSource /*: string */) => createTransformerMacro(transformers, { importSource }) diff --git a/packages/babel-plugin/src/index.js b/packages/babel-plugin/src/index.js index 95731cd432..74f889c391 100644 --- a/packages/babel-plugin/src/index.js +++ b/packages/babel-plugin/src/index.js @@ -1,4 +1,3 @@ -// @flow import { createEmotionMacro, transformers as vanillaTransformers @@ -68,13 +67,15 @@ export const macros = { vanillaEmotion: vanillaEmotionMacro } +/* export type BabelPath = any export type EmotionBabelPluginPass = any +*/ const AUTO_LABEL_VALUES = ['dev-only', 'never', 'always'] -export default function (babel: *, options: *) { +export default function (babel, options) { if ( options.autoLabel !== undefined && !AUTO_LABEL_VALUES.includes(options.autoLabel) @@ -90,7 +91,7 @@ export default function (babel: *, options: *) { return { name: '@emotion', // https://github.com/babel/babel/blob/0c97749e0fe8ad845b902e0b23a24b308b0bf05d/packages/babel-plugin-syntax-jsx/src/index.ts#L9-L18 - manipulateOptions(opts: *, parserOpts: *) { + manipulateOptions(opts, parserOpts) { const { plugins } = parserOpts if ( @@ -105,7 +106,7 @@ export default function (babel: *, options: *) { plugins.push('jsx') }, visitor: { - ImportDeclaration(path: *, state: *) { + ImportDeclaration(path, state) { const macro = state.pluginMacros[path.node.source.value] // most of this is from https://github.com/kentcdodds/babel-plugin-macros/blob/main/src/index.js if (macro === undefined) { @@ -159,13 +160,13 @@ export default function (babel: *, options: *) { isBabelMacrosCall: true }) }, - Program(path: *, state: *) { + Program(path, state) { let macros = {} - let jsxReactImports: Array<{ + let jsxReactImports /*: Array<{ importSource: string, export: string, cssExport: string - }> = [ + }> */ = [ { importSource: '@emotion/react', export: 'jsx', cssExport: 'css' } ] state.jsxReactImport = jsxReactImports[0] @@ -209,11 +210,11 @@ export default function (babel: *, options: *) { } } - let [exportTransformer, defaultOptions] = - // $FlowFixMe - Array.isArray(packageTransformers[exportName]) - ? packageTransformers[exportName] - : [packageTransformers[exportName]] + let [exportTransformer, defaultOptions] = Array.isArray( + packageTransformers[exportName] + ) + ? packageTransformers[exportName] + : [packageTransformers[exportName]] transformers[localExportName] = [ exportTransformer, @@ -266,7 +267,7 @@ export default function (babel: *, options: *) { state.emotionSourceMap = true } }, - JSXAttribute(path: *, state: *) { + JSXAttribute(path, state) { if (path.node.name.name !== 'css' || !state.transformCssProp) { return } @@ -289,7 +290,7 @@ export default function (babel: *, options: *) { } }, CallExpression: { - exit(path: BabelPath, state: EmotionBabelPluginPass) { + exit(path /*: BabelPath */, state /*: EmotionBabelPluginPass */) { try { if ( path.node.callee && diff --git a/packages/babel-plugin/src/styled-macro.js b/packages/babel-plugin/src/styled-macro.js index 1ccde3726c..5f4094fc65 100644 --- a/packages/babel-plugin/src/styled-macro.js +++ b/packages/babel-plugin/src/styled-macro.js @@ -1,4 +1,3 @@ -// @flow import { transformExpressionWithStyles, getStyledOptions, @@ -13,15 +12,16 @@ const getReferencedSpecifier = (path, specifierName) => { : specifiers.find(p => p.node.local.name === specifierName) } -export let styledTransformer = ({ - state, - babel, - path, - importSource, - reference, - importSpecifierName, - options: { styledBaseImport, isWeb } -}: { +export let styledTransformer = ( + { + state, + babel, + path, + importSource, + reference, + importSpecifierName, + options: { styledBaseImport, isWeb } + } /*: { state: Object, babel: Object, path: any, @@ -29,7 +29,8 @@ export let styledTransformer = ({ importSpecifierName: string, reference: Object, options: { styledBaseImport?: [string, string], isWeb: boolean } -}) => { +} */ +) => { let t = babel.types let getStyledIdentifier = () => { @@ -119,17 +120,19 @@ export let styledTransformer = ({ } } -export let createStyledMacro = ({ - importSource, - originalImportSource = importSource, - baseImportName = 'default', - isWeb -}: { +export let createStyledMacro = ( + { + importSource, + originalImportSource = importSource, + baseImportName = 'default', + isWeb + } /*: { importSource: string, originalImportSource?: string, baseImportName?: string, isWeb: boolean -}) => +} */ +) => createTransformerMacro( { default: [ diff --git a/packages/babel-plugin/src/utils/add-import.js b/packages/babel-plugin/src/utils/add-import.js index 4d1113ac87..393ef1fb5f 100644 --- a/packages/babel-plugin/src/utils/add-import.js +++ b/packages/babel-plugin/src/utils/add-import.js @@ -1,10 +1,10 @@ import { addDefault, addNamed } from '@babel/helper-module-imports' export function addImport( - state: any, - importSource: string, - importedSpecifier: string, - nameHint?: string + state, + importSource /*: string */, + importedSpecifier /*: string */, + nameHint /* ?: string */ ) { let cacheKey = ['import', importSource, importedSpecifier].join(':') if (state[cacheKey] === undefined) { diff --git a/packages/babel-plugin/src/utils/get-styled-options.js b/packages/babel-plugin/src/utils/get-styled-options.js index b37b027f28..351afad60e 100644 --- a/packages/babel-plugin/src/utils/get-styled-options.js +++ b/packages/babel-plugin/src/utils/get-styled-options.js @@ -1,9 +1,8 @@ -// @flow import { getLabelFromPath } from './label' import { getTargetClassName } from './get-target-class-name' import createNodeEnvConditional from './create-node-env-conditional' -const getKnownProperties = (t: *, node: *) => +const getKnownProperties = (t, node) => new Set( node.properties .filter(n => t.isObjectProperty(n) && !n.computed) @@ -13,7 +12,7 @@ const getKnownProperties = (t: *, node: *) => const createObjectSpreadLike = (t, file, ...objs) => t.callExpression(file.addHelper('extends'), [t.objectExpression([]), ...objs]) -export let getStyledOptions = (t: *, path: *, state: *) => { +export let getStyledOptions = (t, path, state) => { const autoLabel = state.opts.autoLabel || 'dev-only' let args = path.node.arguments diff --git a/packages/babel-plugin/src/utils/get-target-class-name.js b/packages/babel-plugin/src/utils/get-target-class-name.js index 9b78a9725c..5d524b9206 100644 --- a/packages/babel-plugin/src/utils/get-target-class-name.js +++ b/packages/babel-plugin/src/utils/get-target-class-name.js @@ -1,11 +1,10 @@ -// @flow import findRoot from 'find-root' import memoize from '@emotion/memoize' import nodePath from 'path' import hashString from '@emotion/hash' import escapeRegexp from 'escape-string-regexp' -let hashArray = (arr: Array) => hashString(arr.join('')) +let hashArray = (arr /*: Array */) => hashString(arr.join('')) const unsafeRequire = require @@ -15,7 +14,7 @@ const separator = new RegExp(escapeRegexp(nodePath.sep), 'g') const normalizePath = path => nodePath.normalize(path).replace(separator, '/') -export function getTargetClassName(state: *, t: *) { +export function getTargetClassName(state, t) { if (state.emotionTargetClassNameCount === undefined) { state.emotionTargetClassNameCount = 0 } diff --git a/packages/babel-plugin/src/utils/index.js b/packages/babel-plugin/src/utils/index.js index a4696280b2..7ec45184f5 100644 --- a/packages/babel-plugin/src/utils/index.js +++ b/packages/babel-plugin/src/utils/index.js @@ -1,4 +1,3 @@ -// @flow export { getLabelFromPath } from './label' export { getSourceMap } from './source-maps' export { getTargetClassName } from './get-target-class-name' diff --git a/packages/babel-plugin/src/utils/label.js b/packages/babel-plugin/src/utils/label.js index f20ace5a2d..5d4d1f7120 100644 --- a/packages/babel-plugin/src/utils/label.js +++ b/packages/babel-plugin/src/utils/label.js @@ -1,20 +1,21 @@ -// @flow import nodePath from 'path' +/* type LabelFormatOptions = { name: string, path: string } +*/ const invalidClassNameCharacters = /[!"#$%&'()*+,./:;<=>?@[\]^`|}~{]/g -const sanitizeLabelPart = (labelPart: string) => +const sanitizeLabelPart = (labelPart /*: string */) => labelPart.trim().replace(invalidClassNameCharacters, '-') function getLabel( - identifierName?: string, - labelFormat?: string | (LabelFormatOptions => string), - filename: string + identifierName /* ?: string */, + labelFormat /* ?: string | (LabelFormatOptions => string) */, + filename /*: string */ ) { if (!identifierName) return null @@ -45,7 +46,7 @@ function getLabel( .replace(/\[dirname\]/gi, sanitizeLabelPart(localDirname)) } -export function getLabelFromPath(path: *, state: *, t: *) { +export function getLabelFromPath(path, state, t) { return getLabel( getIdentifierName(path, t), state.opts.labelFormat, @@ -72,7 +73,6 @@ const getObjPropertyLikeName = (path, t) => { } function getDeclaratorName(path, t) { - // $FlowFixMe const parent = path.findParent( p => p.isVariableDeclarator() || @@ -154,14 +154,13 @@ function getDeclaratorName(path, t) { return variableDeclarator.node.id.name } -function getIdentifierName(path: *, t: *) { +function getIdentifierName(path, t) { let objPropertyLikeName = getObjPropertyLikeName(path.parentPath, t) if (objPropertyLikeName) { return objPropertyLikeName } - // $FlowFixMe let classOrClassPropertyParent = path.findParent( p => t.isClassProperty(p) || t.isClass(p) ) diff --git a/packages/babel-plugin/src/utils/minify.js b/packages/babel-plugin/src/utils/minify.js index 14281a98ed..7d5c18e79d 100644 --- a/packages/babel-plugin/src/utils/minify.js +++ b/packages/babel-plugin/src/utils/minify.js @@ -1,4 +1,3 @@ -// @flow import { compile } from 'stylis' const haveSameLocation = (element1, element2) => { @@ -59,18 +58,17 @@ var stringifyTree = elements => { .join('') } -const interleave = (strings: Array<*>, interpolations: Array<*>) => +const interleave = (strings /*: Array<*> */, interpolations /*: Array<*> */) => interpolations.reduce( (array, interp, i) => array.concat([interp], strings[i + 1]), [strings[0]] ) -function getDynamicMatches(str: string) { +function getDynamicMatches(str /*: string */) { const re = /xxx(\d+):xxx/gm let match const matches = [] while ((match = re.exec(str)) !== null) { - // so that flow doesn't complain if (match !== null) { matches.push({ value: match[0], @@ -84,9 +82,9 @@ function getDynamicMatches(str: string) { } function replacePlaceholdersWithExpressions( - str: string, - expressions: Array<*>, - t: * + str /*: string */, + expressions /*: Array<*> */, + t ) { const matches = getDynamicMatches(str) if (matches.length === 0) { @@ -116,15 +114,17 @@ function replacePlaceholdersWithExpressions( }) return interleave(strings, finalExpressions).filter( - (node: { value: string }) => { + (node /*: { value: string } */) => { return node.value !== '' } ) } -function createRawStringFromTemplateLiteral(quasi: { +function createRawStringFromTemplateLiteral( + quasi /*: { quasis: Array<{ value: { cooked: string } }> -}) { +} */ +) { let strs = quasi.quasis.map(x => x.value.cooked) const src = strs @@ -140,7 +140,7 @@ function createRawStringFromTemplateLiteral(quasi: { return src } -export default function minify(path: *, t: *): void { +export default function minify(path, t) { const quasi = path.node.quasi const raw = createRawStringFromTemplateLiteral(quasi) const minified = stringifyTree(toInputTree(compile(raw), [])) diff --git a/packages/babel-plugin/src/utils/object-to-string.js b/packages/babel-plugin/src/utils/object-to-string.js index a3bfa56460..f275c5b07d 100644 --- a/packages/babel-plugin/src/utils/object-to-string.js +++ b/packages/babel-plugin/src/utils/object-to-string.js @@ -1,10 +1,9 @@ -// @flow import { serializeStyles } from '@emotion/serialize' // to anyone looking at this, this isn't intended to simplify every single case // it's meant to simplify the most common cases so i don't want to make it especially complex // also, this will be unnecessary when prepack is ready -export function simplifyObject(node: *, t: Object) { +export function simplifyObject(node, t /*: Object */) { let finalString = '' for (let i = 0; i < node.properties.length; i++) { let property = node.properties[i] diff --git a/packages/babel-plugin/src/utils/source-maps.js b/packages/babel-plugin/src/utils/source-maps.js index b499f33cca..e4926711b3 100644 --- a/packages/babel-plugin/src/utils/source-maps.js +++ b/packages/babel-plugin/src/utils/source-maps.js @@ -1,4 +1,3 @@ -// @flow import { SourceMapGenerator } from 'source-map' import convert from 'convert-source-map' @@ -6,7 +5,7 @@ function getGeneratorOpts(file) { return file.opts.generatorOpts ? file.opts.generatorOpts : file.opts } -export function makeSourceMapGenerator(file: *) { +export function makeSourceMapGenerator(file) { const generatorOpts = getGeneratorOpts(file) const filename = generatorOpts.sourceFileName const generator = new SourceMapGenerator({ @@ -19,12 +18,12 @@ export function makeSourceMapGenerator(file: *) { } export function getSourceMap( - offset: { + offset /*: { line: number, column: number - }, - state: * -): string { + } */, + state +) /*: string */ { const generator = makeSourceMapGenerator(state.file) const generatorOpts = getGeneratorOpts(state.file) if ( diff --git a/packages/babel-plugin/src/utils/strings.js b/packages/babel-plugin/src/utils/strings.js index 6c91c62161..5e85223e92 100644 --- a/packages/babel-plugin/src/utils/strings.js +++ b/packages/babel-plugin/src/utils/strings.js @@ -1,13 +1,12 @@ -// @flow import { getTypeScriptMakeTemplateObjectPath, isTaggedTemplateTranspiledByBabel } from './transpiled-output-utils' export const appendStringReturningExpressionToArguments = ( - t: *, - path: *, - expression: * + t, + path, + expression ) => { let lastIndex = path.node.arguments.length - 1 let last = path.node.arguments[lastIndex] @@ -44,7 +43,7 @@ export const appendStringReturningExpressionToArguments = ( } } -export const joinStringLiterals = (expressions: Array<*>, t: *) => { +export const joinStringLiterals = (expressions /*: Array<*> */, t) => { return expressions.reduce((finalExpressions, currentExpression, i) => { if (!t.isStringLiteral(currentExpression)) { finalExpressions.push(currentExpression) diff --git a/packages/babel-plugin/src/utils/transform-expression-with-styles.js b/packages/babel-plugin/src/utils/transform-expression-with-styles.js index c47e7366e4..0e61f74730 100644 --- a/packages/babel-plugin/src/utils/transform-expression-with-styles.js +++ b/packages/babel-plugin/src/utils/transform-expression-with-styles.js @@ -1,5 +1,3 @@ -// @flow - import { serializeStyles } from '@emotion/serialize' import minify from './minify' import { getLabelFromPath } from './label' @@ -14,19 +12,15 @@ import createNodeEnvConditional from './create-node-env-conditional' const CSS_OBJECT_STRINGIFIED_ERROR = "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)." -export let transformExpressionWithStyles = ({ +export let transformExpressionWithStyles = ( + { babel, state, path, shouldLabel, sourceMap = '' } /*: { babel, state, path, - shouldLabel, - sourceMap = '' -}: { - babel: *, - state: *, - path: *, shouldLabel: boolean, sourceMap?: string -}): * => { +} */ +) => { const autoLabel = state.opts.autoLabel || 'dev-only' let t = babel.types if (t.isTaggedTemplateExpression(path)) { diff --git a/packages/babel-plugin/src/utils/transformer-macro.js b/packages/babel-plugin/src/utils/transformer-macro.js index ea10489699..679ad1af38 100644 --- a/packages/babel-plugin/src/utils/transformer-macro.js +++ b/packages/babel-plugin/src/utils/transformer-macro.js @@ -1,11 +1,12 @@ -// @flow import { createMacro } from 'babel-plugin-macros' +/* type Transformer = Function +*/ export function createTransformerMacro( - transformers: { [key: string]: Transformer | [Transformer, Object] }, - { importSource }: { importSource: string } + transformers /*: { [key: string]: Transformer | [Transformer, Object] } */, + { importSource } /*: { importSource: string } */ ) { let macro = createMacro( ({ path, source, references, state, babel, isEmotionCall }) => { diff --git a/packages/babel-plugin/src/utils/transpiled-output-utils.js b/packages/babel-plugin/src/utils/transpiled-output-utils.js index e6943e3b64..74187e413f 100644 --- a/packages/babel-plugin/src/utils/transpiled-output-utils.js +++ b/packages/babel-plugin/src/utils/transpiled-output-utils.js @@ -1,8 +1,6 @@ -// @flow - // this only works correctly in modules, but we don't run on scripts anyway, so it's fine // the difference is that in modules template objects are being cached per call site -export function getTypeScriptMakeTemplateObjectPath(path: *) { +export function getTypeScriptMakeTemplateObjectPath(path) { if (path.node.arguments.length === 0) { return null } @@ -28,7 +26,7 @@ export function getTypeScriptMakeTemplateObjectPath(path: *) { // we could push them to found array expressions, as we do it for TS-transpile output ¯\_(ツ)_/¯ // it seems overly complicated though - mainly because we'd also have to check against existing stuff of a particular type (source maps & labels) // considering Babel double-transpilation as a valid use case seems rather far-fetched -export function isTaggedTemplateTranspiledByBabel(path: *) { +export function isTaggedTemplateTranspiledByBabel(path) { if (path.node.arguments.length === 0) { return false } diff --git a/packages/babel-preset-css-prop/CHANGELOG.md b/packages/babel-preset-css-prop/CHANGELOG.md index 5dd14d681c..1e4635b57e 100644 --- a/packages/babel-preset-css-prop/CHANGELOG.md +++ b/packages/babel-preset-css-prop/CHANGELOG.md @@ -1,5 +1,13 @@ # @emotion/babel-preset-css-prop +## 11.12.0 + +### Patch Changes + +- Updated dependencies [[`ea84c40`](https://github.com/emotion-js/emotion/commit/ea84c4096d7bc28f03c4cdc1f453bb64d09dcd15)]: + - @emotion/babel-plugin-jsx-pragmatic@0.3.0 + - @emotion/babel-plugin@11.12.0 + ## 11.11.0 ### Patch Changes diff --git a/packages/babel-preset-css-prop/package.json b/packages/babel-preset-css-prop/package.json index 3ed9205ec2..de03d4ee01 100644 --- a/packages/babel-preset-css-prop/package.json +++ b/packages/babel-preset-css-prop/package.json @@ -1,11 +1,15 @@ { "name": "@emotion/babel-preset-css-prop", - "version": "11.11.0", + "version": "11.12.0", "description": "A babel preset to automatically enable emotion's css prop", "main": "dist/emotion-babel-preset-css-prop.cjs.js", "module": "dist/emotion-babel-preset-css-prop.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-babel-preset-css-prop.cjs.mjs", + "default": "./dist/emotion-babel-preset-css-prop.cjs.js" + }, "module": "./dist/emotion-babel-preset-css-prop.esm.js", "import": "./dist/emotion-babel-preset-css-prop.cjs.mjs", "default": "./dist/emotion-babel-preset-css-prop.cjs.js" @@ -17,8 +21,8 @@ "dependencies": { "@babel/plugin-transform-react-jsx": "^7.17.12", "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/babel-plugin-jsx-pragmatic": "^0.2.1" + "@emotion/babel-plugin": "^11.12.0", + "@emotion/babel-plugin-jsx-pragmatic": "^0.3.0" }, "peerDependencies": { "@babel/core": "^7.0.0" diff --git a/packages/cache/CHANGELOG.md b/packages/cache/CHANGELOG.md index 7485a27a67..ebe1d82f25 100644 --- a/packages/cache/CHANGELOG.md +++ b/packages/cache/CHANGELOG.md @@ -1,5 +1,33 @@ # @emotion/cache +## 11.13.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +- [#3215](https://github.com/emotion-js/emotion/pull/3215) [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5) Thanks [@Andarist](https://github.com/Andarist)! - Added `edge-light` and `workerd` conditions to `package.json` manifest to better serve users using Vercel Edge and Cloudflare Workers. + +### Patch Changes + +- Updated dependencies [[`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b), [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5)]: + - @emotion/sheet@1.4.0 + - @emotion/utils@1.4.0 + +## 11.12.0 + +### Patch Changes + +- Updated dependencies [[`7f8db2d`](https://github.com/emotion-js/emotion/commit/7f8db2d7a900bb34995db66084a99d512811e33d), [`b1d16b0`](https://github.com/emotion-js/emotion/commit/b1d16b087d057524f374e347fdfd6a03e505107a), [`16d8a8c`](https://github.com/emotion-js/emotion/commit/16d8a8c2198461c4842c73048b406c346a70aa59), [`52aadc6`](https://github.com/emotion-js/emotion/commit/52aadc6e77140867392f81545cc92e04fd84d453), [`52aadc6`](https://github.com/emotion-js/emotion/commit/52aadc6e77140867392f81545cc92e04fd84d453)]: + - @emotion/memoize@0.9.0 + - @emotion/weak-memoize@0.4.0 + - @emotion/utils@1.3.0 + - @emotion/sheet@1.3.0 + ## 11.11.0 ### Minor Changes diff --git a/packages/cache/__tests__/hydration.js b/packages/cache/__tests__/hydration.js index 132f26237b..98e0e0fc10 100644 --- a/packages/cache/__tests__/hydration.js +++ b/packages/cache/__tests__/hydration.js @@ -1,4 +1,3 @@ -// @flow import { safeQuerySelector } from 'test-utils' import hashString from '@emotion/hash' import createCache from '@emotion/cache' @@ -11,9 +10,8 @@ beforeEach(() => { test('it works', () => { let css = `color:hotpink;` let hash = hashString(css) - safeQuerySelector( - 'body' - ).innerHTML = `` + safeQuerySelector('body').innerHTML = + `` let cache = createCache({ key: 'css' }) expect(cache.inserted).toEqual({ [hash]: true }) expect(document.documentElement).toMatchSnapshot() @@ -22,9 +20,8 @@ test('it works', () => { test('rehydrated styles to head can be flushed', () => { let css = `color:hotpink;` let hash = hashString(css) - safeQuerySelector( - 'head' - ).innerHTML = `` + safeQuerySelector('head').innerHTML = + `` // this moves emotion style tags at initialization time jest.resetModules() @@ -87,9 +84,8 @@ test('should only hydrate style elements matching the cache key', () => { let css = `color:hotpink;` let hash = hashString(css) - safeQuerySelector( - 'body' - ).innerHTML = `` + safeQuerySelector('body').innerHTML = + `` const cache = createCache({ key: 'custom-key' }) @@ -126,9 +122,8 @@ test('should only hydrate style elements matching the cache key', () => { test('Existing client-side inserted styles from Emotion 10 should not be moved', () => { // the nested nature isn't special, it's just meant to be a general "make sure they're not moved" - safeQuerySelector( - 'body' - ).innerHTML = `
` + safeQuerySelector('body').innerHTML = + `
` expect(document.documentElement).toMatchInlineSnapshot(` diff --git a/packages/cache/__tests__/index.js b/packages/cache/__tests__/index.js index 15751f2166..931c506877 100644 --- a/packages/cache/__tests__/index.js +++ b/packages/cache/__tests__/index.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { safeQuerySelector } from 'test-utils' @@ -12,7 +11,7 @@ test('throws correct error with invalid key', () => { }).toThrowErrorMatchingSnapshot() }) -it('should accept insertionPoint option', () => { +test('should accept insertionPoint option', () => { const head = safeQuerySelector('head') head.innerHTML = ` @@ -35,7 +34,7 @@ it('should accept insertionPoint option', () => { expect(document.head).toMatchSnapshot() }) -it('should accept container option', () => { +test('should accept container option', () => { const body = safeQuerySelector('body') body.innerHTML = ` diff --git a/packages/cache/package.json b/packages/cache/package.json index 90aca4adb1..2373e67a37 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,24 +1,79 @@ { "name": "@emotion/cache", - "version": "11.11.0", + "version": "11.13.0", "description": "emotion's cache", "main": "dist/emotion-cache.cjs.js", "module": "dist/emotion-cache.esm.js", - "browser": { - "./dist/emotion-cache.esm.js": "./dist/emotion-cache.browser.esm.js" - }, "exports": { ".": { - "module": { - "worker": "./dist/emotion-cache.worker.esm.js", - "browser": "./dist/emotion-cache.browser.esm.js", - "default": "./dist/emotion-cache.esm.js" + "types": { + "import": "./dist/emotion-cache.cjs.mjs", + "default": "./dist/emotion-cache.cjs.js" + }, + "development": { + "edge-light": { + "module": "./dist/emotion-cache.development.edge-light.esm.js", + "import": "./dist/emotion-cache.development.edge-light.cjs.mjs", + "default": "./dist/emotion-cache.development.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-cache.development.edge-light.esm.js", + "import": "./dist/emotion-cache.development.edge-light.cjs.mjs", + "default": "./dist/emotion-cache.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-cache.development.edge-light.esm.js", + "import": "./dist/emotion-cache.development.edge-light.cjs.mjs", + "default": "./dist/emotion-cache.development.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-cache.browser.development.esm.js", + "import": "./dist/emotion-cache.browser.development.cjs.mjs", + "default": "./dist/emotion-cache.browser.development.cjs.js" + }, + "module": "./dist/emotion-cache.development.esm.js", + "import": "./dist/emotion-cache.development.cjs.mjs", + "default": "./dist/emotion-cache.development.cjs.js" + }, + "edge-light": { + "module": "./dist/emotion-cache.edge-light.esm.js", + "import": "./dist/emotion-cache.edge-light.cjs.mjs", + "default": "./dist/emotion-cache.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-cache.edge-light.esm.js", + "import": "./dist/emotion-cache.edge-light.cjs.mjs", + "default": "./dist/emotion-cache.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-cache.edge-light.esm.js", + "import": "./dist/emotion-cache.edge-light.cjs.mjs", + "default": "./dist/emotion-cache.edge-light.cjs.js" }, + "browser": { + "module": "./dist/emotion-cache.browser.esm.js", + "import": "./dist/emotion-cache.browser.cjs.mjs", + "default": "./dist/emotion-cache.browser.cjs.js" + }, + "module": "./dist/emotion-cache.esm.js", "import": "./dist/emotion-cache.cjs.mjs", "default": "./dist/emotion-cache.cjs.js" }, "./package.json": "./package.json" }, + "imports": { + "#is-development": { + "development": "./src/conditions/true.js", + "default": "./src/conditions/false.js" + }, + "#is-browser": { + "edge-light": "./src/conditions/false.js", + "workerd": "./src/conditions/false.js", + "worker": "./src/conditions/false.js", + "browser": "./src/conditions/true.js", + "default": "./src/conditions/is-browser.js" + } + }, "types": "types/index.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/cache", @@ -26,28 +81,20 @@ "test:typescript": "dtslint types" }, "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", "@emotion/hash": "*", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "files": [ "src", "dist", "types/*.d.ts" - ], - "preconstruct": { - "exports": { - "envConditions": [ - "browser", - "worker" - ] - } - } + ] } diff --git a/packages/cache/src/conditions/false.js b/packages/cache/src/conditions/false.js new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/cache/src/conditions/false.js @@ -0,0 +1 @@ +export default false diff --git a/packages/cache/src/conditions/is-browser.js b/packages/cache/src/conditions/is-browser.js new file mode 100644 index 0000000000..12bdad68fc --- /dev/null +++ b/packages/cache/src/conditions/is-browser.js @@ -0,0 +1 @@ +export default typeof document !== 'undefined' diff --git a/packages/cache/src/conditions/true.js b/packages/cache/src/conditions/true.js new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/cache/src/conditions/true.js @@ -0,0 +1 @@ +export default true diff --git a/packages/cache/src/index.js b/packages/cache/src/index.js index 39d66bf915..efd70ae8f1 100644 --- a/packages/cache/src/index.js +++ b/packages/cache/src/index.js @@ -1,6 +1,5 @@ -// @flow import { StyleSheet } from '@emotion/sheet' -import { type EmotionCache, type SerializedStyles } from '@emotion/utils' +/* import { type EmotionCache, type SerializedStyles } from '@emotion/utils' */ import { serialize, compile, @@ -11,6 +10,8 @@ import { } from 'stylis' import weakMemoize from '@emotion/weak-memoize' import memoize from '@emotion/memoize' +import isDevelopment from '#is-development' +import isBrowser from '#is-browser' import { compat, removeLabel, @@ -18,10 +19,9 @@ import { incorrectImportAlarm } from './stylis-plugins' import { prefixer } from './prefixer' -import type { StylisPlugin } from './types' - -let isBrowser = typeof document !== 'undefined' +/* import type { StylisPlugin } from './types' */ +/* export type Options = { nonce?: string, stylisPlugins?: StylisPlugin[], @@ -31,6 +31,7 @@ export type Options = { prepend?: boolean, insertionPoint?: HTMLElement } +*/ let getServerStylisCache = isBrowser ? undefined @@ -43,10 +44,10 @@ let getServerStylisCache = isBrowser const defaultStylisPlugins = [prefixer] -let createCache = (options: Options): EmotionCache => { +let createCache = (options /*: Options */) /*: EmotionCache */ => { let key = options.key - if (process.env.NODE_ENV !== 'production' && !key) { + if (isDevelopment && !key) { throw new Error( "You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\n" + `If multiple caches share the same key they might "fight" for each other's style elements.` @@ -62,29 +63,26 @@ let createCache = (options: Options): EmotionCache => { // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be) // note this very very intentionally targets all style elements regardless of the key to ensure // that creating a cache works inside of render of a React component - Array.prototype.forEach.call(ssrStyles, (node: HTMLStyleElement) => { + Array.prototype.forEach.call(ssrStyles, (node /*: HTMLStyleElement */) => { // we want to only move elements which have a space in the data-emotion attribute value // because that indicates that it is an Emotion 11 server-side rendered style elements // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes) // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles // will not result in the Emotion 10 styles being destroyed - const dataEmotionAttribute = ((node.getAttribute( - 'data-emotion' - ): any): string) + const dataEmotionAttribute = node.getAttribute('data-emotion') if (dataEmotionAttribute.indexOf(' ') === -1) { return } - ;((document.head: any): HTMLHeadElement).appendChild(node) + document.head.appendChild(node) node.setAttribute('data-s', '') }) } const stylisPlugins = options.stylisPlugins || defaultStylisPlugins - if (process.env.NODE_ENV !== 'production') { - // $FlowFixMe + if (isDevelopment) { if (/[^a-z-]/.test(key)) { throw new Error( `Emotion key must only contain lower case alphabetical characters and - but "${key}" was passed` @@ -92,20 +90,17 @@ let createCache = (options: Options): EmotionCache => { } } let inserted = {} - let container: Node + let container /* : Node */ const nodesToHydrate = [] if (isBrowser) { - container = options.container || ((document.head: any): HTMLHeadElement) + container = options.container || document.head Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which // means that the style elements we're looking at are only Emotion 11 server-rendered style elements document.querySelectorAll(`style[data-emotion^="${key} "]`), - (node: HTMLStyleElement) => { - const attrib = ((node.getAttribute(`data-emotion`): any): string).split( - ' ' - ) - // $FlowFixMe + (node /*: HTMLStyleElement */) => { + const attrib = node.getAttribute(`data-emotion`).split(' ') for (let i = 1; i < attrib.length; i++) { inserted[attrib[i]] = true } @@ -114,16 +109,15 @@ let createCache = (options: Options): EmotionCache => { ) } - let insert: ( + let insert /*: ( selector: string, serialized: SerializedStyles, sheet: StyleSheet, shouldCache: boolean - ) => string | void - + ) => string | void */ const omnipresentPlugins = [compat, removeLabel] - if (process.env.NODE_ENV !== 'production') { + if (isDevelopment) { omnipresentPlugins.push( createUnsafeSelectorsAlarm({ get compat() { @@ -139,7 +133,7 @@ let createCache = (options: Options): EmotionCache => { const finalizingPlugins = [ stringify, - process.env.NODE_ENV !== 'production' + isDevelopment ? element => { if (!element.root) { if (element.return) { @@ -162,19 +156,16 @@ let createCache = (options: Options): EmotionCache => { const stylis = styles => serialize(compile(styles), serializer) insert = ( - selector: string, - serialized: SerializedStyles, - sheet: StyleSheet, - shouldCache: boolean - ): void => { + selector /*: string */, + serialized /*: SerializedStyles */, + sheet /*: StyleSheet */, + shouldCache /*: boolean */ + ) /*: void */ => { currentSheet = sheet - if ( - process.env.NODE_ENV !== 'production' && - serialized.map !== undefined - ) { + if (isDevelopment && serialized.map !== undefined) { currentSheet = { - insert: (rule: string) => { - sheet.insert(rule + ((serialized.map: any): string)) + insert: (rule /*: string */) => { + sheet.insert(rule + serialized.map) } } } @@ -192,9 +183,11 @@ let createCache = (options: Options): EmotionCache => { ) const stylis = styles => serialize(compile(styles), serializer) - // $FlowFixMe let serverStylisCache = getServerStylisCache(stylisPlugins)(key) - let getRules = (selector: string, serialized: SerializedStyles): string => { + let getRules = ( + selector /*: string */, + serialized /*: SerializedStyles */ + ) /*: string */ => { let name = serialized.name if (serverStylisCache[name] === undefined) { serverStylisCache[name] = stylis( @@ -204,11 +197,11 @@ let createCache = (options: Options): EmotionCache => { return serverStylisCache[name] } insert = ( - selector: string, - serialized: SerializedStyles, - sheet: StyleSheet, - shouldCache: boolean - ): string | void => { + selector /*: string */, + serialized /*: SerializedStyles */, + sheet /*: StyleSheet */, + shouldCache /*: boolean */ + ) /*: string | void */ => { let name = serialized.name let rules = getRules(selector, serialized) if (cache.compat === undefined) { @@ -218,12 +211,7 @@ let createCache = (options: Options): EmotionCache => { if (shouldCache) { cache.inserted[name] = true } - if ( - // using === development instead of !== production - // because if people do ssr in tests, the source maps showing up would be annoying - process.env.NODE_ENV === 'development' && - serialized.map !== undefined - ) { + if (isDevelopment && serialized.map !== undefined) { return rules + serialized.map } return rules @@ -245,11 +233,11 @@ let createCache = (options: Options): EmotionCache => { } } - const cache: EmotionCache = { + const cache /*: EmotionCache */ = { key, sheet: new StyleSheet({ key, - container: ((container: any): Node), + container, nonce: options.nonce, speedy: options.speedy, prepend: options.prepend, diff --git a/packages/cache/src/types.js b/packages/cache/src/types.js index 92312fb30c..f02fb33414 100644 --- a/packages/cache/src/types.js +++ b/packages/cache/src/types.js @@ -1,14 +1,13 @@ -// @flow - +/* export type StylisElement = { - type: string, - value: string, - props: Array, - root: StylisElement | null, - children: Array, - line: number, - column: number, - length: number, + type: string + value: string + props: Array + root: StylisElement | null + children: Array + line: number + column: number + length: number return: string } export type StylisPluginCallback = ( @@ -24,3 +23,4 @@ export type StylisPlugin = ( children: Array, callback: StylisPluginCallback ) => string | void +*/ diff --git a/packages/cache/types/index.d.ts b/packages/cache/types/index.d.ts index 7822587db8..3bba3ded23 100644 --- a/packages/cache/types/index.d.ts +++ b/packages/cache/types/index.d.ts @@ -1,5 +1,8 @@ // Definitions by: Junyoung Clare Jang // TypeScript Version: 2.2 + +/// + import { EmotionCache } from '@emotion/utils' export { EmotionCache } diff --git a/packages/cache/types/resolved-condition.ts b/packages/cache/types/resolved-condition.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/cache/types/resolved-condition.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/cache/types/tsconfig.json b/packages/cache/types/tsconfig.json index 4b5665bfd1..34bf72c65b 100644 --- a/packages/cache/types/tsconfig.json +++ b/packages/cache/types/tsconfig.json @@ -9,7 +9,11 @@ "strict": true, "target": "es5", "typeRoots": ["../"], - "types": [] + "types": [], + "paths": { + "#is-browser": ["./types/resolved-condition.ts"], + "#is-development": ["./types/resolved-condition.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/cache/types/tslint.json b/packages/cache/types/tslint.json index daf7494d9c..9f527d6583 100644 --- a/packages/cache/types/tslint.json +++ b/packages/cache/types/tslint.json @@ -2,6 +2,7 @@ "extends": "@definitelytyped/dtslint/dtslint.json", "rules": { "array-type": [true, "generic"], - "semicolon": false + "semicolon": false, + "unnecessary-bind": false } } diff --git a/packages/css-prettifier/CHANGELOG.md b/packages/css-prettifier/CHANGELOG.md index 67f25c409e..e35fad574f 100644 --- a/packages/css-prettifier/CHANGELOG.md +++ b/packages/css-prettifier/CHANGELOG.md @@ -1,5 +1,12 @@ # @emotion/css-prettifier +## 1.1.4 + +### Patch Changes + +- Updated dependencies [[`7f8db2d`](https://github.com/emotion-js/emotion/commit/7f8db2d7a900bb34995db66084a99d512811e33d)]: + - @emotion/memoize@0.9.0 + ## 1.1.3 ### Patch Changes diff --git a/packages/css-prettifier/package.json b/packages/css-prettifier/package.json index ed9c3c79a5..c025d598b7 100644 --- a/packages/css-prettifier/package.json +++ b/packages/css-prettifier/package.json @@ -1,6 +1,6 @@ { "name": "@emotion/css-prettifier", - "version": "1.1.3", + "version": "1.1.4", "description": "Simple Stylis-based CSS prettifier", "keywords": [ "emotion" @@ -10,6 +10,10 @@ "module": "dist/emotion-css-prettifier.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-css-prettifier.cjs.mjs", + "default": "./dist/emotion-css-prettifier.cjs.js" + }, "module": "./dist/emotion-css-prettifier.esm.js", "import": "./dist/emotion-css-prettifier.cjs.mjs", "default": "./dist/emotion-css-prettifier.cjs.js" @@ -20,7 +24,7 @@ "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/css-prettifier", "dependencies": { - "@emotion/memoize": "^0.8.1", + "@emotion/memoize": "^0.9.0", "stylis": "4.2.0" }, "publishConfig": { diff --git a/packages/css/CHANGELOG.md b/packages/css/CHANGELOG.md index fd9d8c29d2..74d62e4433 100644 --- a/packages/css/CHANGELOG.md +++ b/packages/css/CHANGELOG.md @@ -1,5 +1,40 @@ # emotion +## 11.13.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +### Patch Changes + +- Updated dependencies [[`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b), [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5)]: + - @emotion/cache@11.13.0 + - @emotion/serialize@1.3.0 + - @emotion/sheet@1.4.0 + - @emotion/utils@1.4.0 + +## 11.12.0 + +### Minor Changes + +- [#2558](https://github.com/emotion-js/emotion/pull/2558) [`85772c3`](https://github.com/emotion-js/emotion/commit/85772c33ecb01c70bc8afafa627c9fb7140b593c) Thanks [@emmatown](https://github.com/emmatown)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + +### Patch Changes + +- [#2558](https://github.com/emotion-js/emotion/pull/2558) [`85772c3`](https://github.com/emotion-js/emotion/commit/85772c33ecb01c70bc8afafa627c9fb7140b593c) Thanks [@emmatown](https://github.com/emmatown)! - Fixed `options` parameter to `createEmotion` from `@emotion/css/create-instance` incorrectly being marked as optional when it's required. + +- Updated dependencies [[`9ca22c6`](https://github.com/emotion-js/emotion/commit/9ca22c6c23e9effa086d161a9b0ae1c645686680), [`16d8a8c`](https://github.com/emotion-js/emotion/commit/16d8a8c2198461c4842c73048b406c346a70aa59), [`52aadc6`](https://github.com/emotion-js/emotion/commit/52aadc6e77140867392f81545cc92e04fd84d453), [`52aadc6`](https://github.com/emotion-js/emotion/commit/52aadc6e77140867392f81545cc92e04fd84d453)]: + - @emotion/serialize@1.2.0 + - @emotion/utils@1.3.0 + - @emotion/sheet@1.3.0 + - @emotion/babel-plugin@11.12.0 + - @emotion/cache@11.12.0 + ## 11.11.2 ### Patch Changes diff --git a/packages/css/create-instance/package.json b/packages/css/create-instance/package.json index 203a18da18..bd294c0d39 100644 --- a/packages/css/create-instance/package.json +++ b/packages/css/create-instance/package.json @@ -2,7 +2,7 @@ "main": "dist/emotion-css-create-instance.cjs.js", "module": "dist/emotion-css-create-instance.esm.js", "umd:main": "dist/emotion-css-create-instance.umd.min.js", - "types": "../types/create-instance", + "types": "dist/emotion-css-create-instance.cjs.d.ts", "preconstruct": { "umdName": "createEmotion" } diff --git a/packages/css/macro.js.flow b/packages/css/macro.js.flow deleted file mode 100644 index 63ae97e66d..0000000000 --- a/packages/css/macro.js.flow +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -export * from './src/index.js' diff --git a/packages/css/package.json b/packages/css/package.json index caed679ae1..1a1734be0d 100644 --- a/packages/css/package.json +++ b/packages/css/package.json @@ -1,10 +1,10 @@ { "name": "@emotion/css", - "version": "11.11.2", + "version": "11.13.0", "description": "The Next Generation of CSS-in-JS.", "main": "dist/emotion-css.cjs.js", "module": "dist/emotion-css.esm.js", - "types": "types/index.d.ts", + "types": "dist/emotion-css.cjs.d.ts", "files": [ "src", "dist", @@ -16,15 +16,15 @@ "test:typescript": "dtslint types" }, "dependencies": { - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1" + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0" }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "author": "Kye Hohenberger", "homepage": "https://emotion.sh", @@ -43,11 +43,29 @@ "umd:main": "dist/emotion-css.umd.min.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-css.cjs.mjs", + "default": "./dist/emotion-css.cjs.js" + }, + "development": { + "module": "./dist/emotion-css.development.esm.js", + "import": "./dist/emotion-css.development.cjs.mjs", + "default": "./dist/emotion-css.development.cjs.js" + }, "module": "./dist/emotion-css.esm.js", "import": "./dist/emotion-css.cjs.mjs", "default": "./dist/emotion-css.cjs.js" }, "./create-instance": { + "types": { + "import": "./create-instance/dist/emotion-css-create-instance.cjs.mjs", + "default": "./create-instance/dist/emotion-css-create-instance.cjs.js" + }, + "development": { + "module": "./create-instance/dist/emotion-css-create-instance.development.esm.js", + "import": "./create-instance/dist/emotion-css-create-instance.development.cjs.mjs", + "default": "./create-instance/dist/emotion-css-create-instance.development.cjs.js" + }, "module": "./create-instance/dist/emotion-css-create-instance.esm.js", "import": "./create-instance/dist/emotion-css-create-instance.cjs.mjs", "default": "./create-instance/dist/emotion-css-create-instance.cjs.js" @@ -61,11 +79,17 @@ "default": "./macro.js" } }, + "imports": { + "#is-development": { + "development": "./src/conditions/true.ts", + "default": "./src/conditions/false.ts" + } + }, "preconstruct": { "umdName": "emotion", "entrypoints": [ - "./index.js", - "./create-instance.js" + "./index.ts", + "./create-instance.ts" ], "exports": { "extra": { diff --git a/packages/css/src/conditions/false.ts b/packages/css/src/conditions/false.ts new file mode 100644 index 0000000000..44fe920021 --- /dev/null +++ b/packages/css/src/conditions/false.ts @@ -0,0 +1 @@ +export default false as boolean diff --git a/packages/css/src/conditions/true.ts b/packages/css/src/conditions/true.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/css/src/conditions/true.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/css/src/create-instance.d.ts b/packages/css/src/create-instance.d.ts deleted file mode 100644 index 5329dce3b6..0000000000 --- a/packages/css/src/create-instance.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types/create-instance' -export { default } from '../types/create-instance' diff --git a/packages/css/src/create-instance.js b/packages/css/src/create-instance.ts similarity index 50% rename from packages/css/src/create-instance.js rename to packages/css/src/create-instance.ts index 3b18761368..09b6b37789 100644 --- a/packages/css/src/create-instance.js +++ b/packages/css/src/create-instance.ts @@ -1,21 +1,81 @@ -// @flow import createCache from '@emotion/cache' -import { serializeStyles } from '@emotion/serialize' +import { + serializeStyles, + CSSInterpolation, + Interpolation +} from '@emotion/serialize' import { insertStyles, getRegisteredStyles, - type EmotionCache, - type SerializedStyles + SerializedStyles, + RegisteredCache } from '@emotion/utils' - -function insertWithoutScoping(cache, serialized: SerializedStyles) { +import { EmotionCache, Options } from '@emotion/cache' +import { StyleSheet } from '@emotion/sheet' +import isDevelopment from '#is-development' + +export type { + CSSInterpolation, + ArrayCSSInterpolation, + ComponentSelector, + CSSObject +} from '@emotion/serialize' + +function insertWithoutScoping( + cache: EmotionCache, + serialized: SerializedStyles +) { if (cache.inserted[serialized.name] === undefined) { return cache.insert('', serialized, cache.sheet, true) } } -function merge(registered: Object, css: (*) => string, className: string) { - const registeredStyles = [] +export type { EmotionCache, Options } + +export interface ArrayClassNamesArg extends Array {} +export type ClassNamesArg = + | undefined + | null + | string + | boolean + | { [className: string]: boolean | null | undefined } + | ArrayClassNamesArg + +export interface CSSStyleSheet extends StyleSheet { + speedy(value: boolean): void +} + +export interface Emotion { + css(template: TemplateStringsArray, ...args: Array): string + css(...args: Array): string + cx(...classNames: Array): string + flush(): void + hydrate(ids: Array): void + injectGlobal( + template: TemplateStringsArray, + ...args: Array + ): void + injectGlobal(...args: Array): void + keyframes( + template: TemplateStringsArray, + ...args: Array + ): string + keyframes(...args: Array): string + sheet: CSSStyleSheet + cache: EmotionCache + merge(className: string): string + getRegisteredStyles( + registeredStyles: Array, + className: string + ): string +} + +function merge( + registered: RegisteredCache, + css: Emotion['css'], + className: string +) { + const registeredStyles: string[] = [] const rawClassName = getRegisteredStyles( registered, registeredStyles, @@ -28,60 +88,29 @@ function merge(registered: Object, css: (*) => string, className: string) { return rawClassName + css(registeredStyles) } -export type Interpolation = any -export type Interpolations = Array - -type CreateStyles = (...args: Interpolations) => ReturnValue - -type ClassNameArg = - | string - | boolean - | { [key: string]: boolean | void | null } - | Array - | void - | null - -declare class StyleSheet { - insert(rule: string): void; - flush(): void; - speedy(newVal: boolean): void; - tags: Array; - isSpeedy: number; - ctr: number; -} - -export type Emotion = { - css: CreateStyles, - cx: (...classNames: Array) => string, - flush: () => void, - hydrate: (ids: Array) => void, - injectGlobal: CreateStyles, - keyframes: CreateStyles, - sheet: StyleSheet, - cache: EmotionCache, - merge: *, - getRegisteredStyles: * -} - -let createEmotion = (options: *): Emotion => { +let createEmotion = (options: Options): Emotion => { let cache = createCache(options) - // $FlowFixMe - cache.sheet.speedy = function (value: boolean) { - if (process.env.NODE_ENV !== 'production' && this.ctr !== 0) { + ;(cache.sheet as CSSStyleSheet).speedy = function (value: boolean) { + if (isDevelopment && this.ctr !== 0) { throw new Error('speedy must be changed before any rules are inserted') } this.isSpeedy = value } + cache.compat = true - let css = (...args) => { + let css: Emotion['css'] = ( + ...args: (TemplateStringsArray | Interpolation)[] + ) => { let serialized = serializeStyles(args, cache.registered, undefined) insertStyles(cache, serialized, false) return `${cache.key}-${serialized.name}` } - let keyframes = (...args) => { + let keyframes: Emotion['keyframes'] = ( + ...args: (TemplateStringsArray | Interpolation)[] + ) => { let serialized = serializeStyles(args, cache.registered) let animation = `animation-${serialized.name}` insertWithoutScoping(cache, { @@ -91,12 +120,14 @@ let createEmotion = (options: *): Emotion => { return animation } - let injectGlobal = (...args) => { + let injectGlobal: Emotion['injectGlobal'] = ( + ...args: (TemplateStringsArray | Interpolation)[] + ) => { let serialized = serializeStyles(args, cache.registered) insertWithoutScoping(cache, serialized) } - let cx = (...args) => { + let cx: Emotion['cx'] = (...args) => { return merge(cache.registered, css, classnames(args)) } return { @@ -104,7 +135,7 @@ let createEmotion = (options: *): Emotion => { cx, injectGlobal, keyframes, - hydrate(ids: Array) { + hydrate(ids) { ids.forEach(key => { cache.inserted[key] = true }) @@ -114,15 +145,14 @@ let createEmotion = (options: *): Emotion => { cache.inserted = {} cache.sheet.flush() }, - // $FlowFixMe - sheet: cache.sheet, + sheet: cache.sheet as CSSStyleSheet, cache, getRegisteredStyles: getRegisteredStyles.bind(null, cache.registered), merge: merge.bind(null, cache.registered, css) } } -let classnames = args => { +let classnames = (args: ClassNamesArg[]) => { let cls = '' for (let i = 0; i < args.length; i++) { let arg = args[i] diff --git a/packages/css/src/index.d.ts b/packages/css/src/index.d.ts deleted file mode 100644 index 51a3b4100a..0000000000 --- a/packages/css/src/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../types' diff --git a/packages/css/src/index.js b/packages/css/src/index.ts similarity index 95% rename from packages/css/src/index.js rename to packages/css/src/index.ts index 523fed93ef..9e4000e3d8 100644 --- a/packages/css/src/index.js +++ b/packages/css/src/index.ts @@ -1,4 +1,3 @@ -// @flow import createEmotion from './create-instance' export const { diff --git a/packages/css/test/css.test.js b/packages/css/test/css.test.js index b32630a6d1..7b44dab7a8 100644 --- a/packages/css/test/css.test.js +++ b/packages/css/test/css.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import renderer from 'react-test-renderer' diff --git a/packages/css/test/cx.test.js b/packages/css/test/cx.test.js index fc074cbbaf..30370209ed 100644 --- a/packages/css/test/cx.test.js +++ b/packages/css/test/cx.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import renderer from 'react-test-renderer' diff --git a/packages/css/test/inject-global.test.js b/packages/css/test/inject-global.test.js index 44e9d0d66e..44050042ee 100644 --- a/packages/css/test/inject-global.test.js +++ b/packages/css/test/inject-global.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import { injectGlobal, sheet, flush, css } from '@emotion/css' diff --git a/packages/css/test/instance/__snapshots__/inline.test.js.snap b/packages/css/test/instance/__snapshots__/inline.test.js.snap index a37cfa6b9e..af57da0c92 100644 --- a/packages/css/test/instance/__snapshots__/inline.test.js.snap +++ b/packages/css/test/instance/__snapshots__/inline.test.js.snap @@ -6,12 +6,12 @@ exports[`hydration only inserts rules that are not in the critical css 1`] = ` > @font-face{font-family:'Patrick Hand SC';font-style:normal;font-weight:400;src:local('Patrick Hand SC'),local('PatrickHandSC-Regular'),url(https://fonts.gstatic.com/s/patrickhandsc/v4/OYFWCgfCR-7uHIovjUZXsZ71Uis0Qeb9Gqo8IZV7ckE.woff2) format('woff2');unicode-range:U+0100-024f,U+1-1eff,U+20a0-20ab,U+20ad-20cf,U+2c60-2c7f,U+A720-A7FF;}@keyframes animation-i9f7qw-bounce{from,20%,53%,80%,to{animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);transform:translate3d(0, 0, 0);}40%,43%{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);transform:translate3d(0, -30px, 0);}70%{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);transform:translate3d(0, -15px, 0);}90%{transform:translate3d(0, -4px, 0);}}.no-prefix{display:flex;justify-content:center;} - -
+
- -
+
- -
+
Hello
diff --git a/packages/css/test/instance/__snapshots__/stream.test.js.snap b/packages/css/test/instance/__snapshots__/stream.test.js.snap index 9f65fc6841..61851b0398 100644 --- a/packages/css/test/instance/__snapshots__/stream.test.js.snap +++ b/packages/css/test/instance/__snapshots__/stream.test.js.snap @@ -1,12 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`hydration only inserts rules that are not in the critical css 1`] = ` - -
+
-
+
-
+
Hello
diff --git a/packages/css/test/instance/css.test.js b/packages/css/test/instance/css.test.js index 73685174d9..67a2a02ea4 100644 --- a/packages/css/test/instance/css.test.js +++ b/packages/css/test/instance/css.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/next-env' import React from 'react' import renderer from 'react-test-renderer' diff --git a/packages/css/test/instance/emotion-instance.js b/packages/css/test/instance/emotion-instance.js index 943d712879..59a4d1f8b6 100644 --- a/packages/css/test/instance/emotion-instance.js +++ b/packages/css/test/instance/emotion-instance.js @@ -1,4 +1,3 @@ -// @flow import createEmotion from '@emotion/css/create-instance' import createEmotionServer from '@emotion/server/create-instance' @@ -12,7 +11,6 @@ export let container if (typeof document !== 'undefined') { container = document.createElement('div') - // $FlowFixMe document.head.appendChild(container) } diff --git a/packages/css/test/instance/instance.test.js b/packages/css/test/instance/instance.test.js index af9f5e668d..b3ee02629b 100644 --- a/packages/css/test/instance/instance.test.js +++ b/packages/css/test/instance/instance.test.js @@ -1,4 +1,3 @@ -// @flow import createEmotion from '@emotion/css/create-instance' import { container, css, sheet } from './emotion-instance' diff --git a/packages/css/test/keyframes.test.js b/packages/css/test/keyframes.test.js index fc2a5b0626..961568ca82 100644 --- a/packages/css/test/keyframes.test.js +++ b/packages/css/test/keyframes.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import renderer from 'react-test-renderer' diff --git a/packages/css/test/no-babel/index.test.js b/packages/css/test/no-babel/index.test.js index 527671accf..2b0daf8e72 100644 --- a/packages/css/test/no-babel/index.test.js +++ b/packages/css/test/no-babel/index.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import renderer from 'react-test-renderer' @@ -228,7 +227,7 @@ describe('css', () => { expect(tree).toMatchSnapshot() }) test('name with class component', () => { - class SomeComponent extends React.Component<{ className: string }> { + class SomeComponent extends React.Component /* <{ className: string }> */ { render() { return
} diff --git a/packages/css/test/no-babel/warnings.test.js b/packages/css/test/no-babel/warnings.test.js index 3e1e74430a..533e08a4ee 100644 --- a/packages/css/test/no-babel/warnings.test.js +++ b/packages/css/test/no-babel/warnings.test.js @@ -1,22 +1,20 @@ -// @flow import 'test-utils/legacy-env' import { css } from '@emotion/css' -// $FlowFixMe console.error = jest.fn() afterEach(() => { jest.clearAllMocks() }) -it('warns about illegal escape sequences inside first quasi of template literal', () => { +test('warns about illegal escape sequences inside first quasi of template literal', () => { css` :before { content: '\00d7'; } ` - expect((console.error: any).mock.calls[0]).toMatchInlineSnapshot(` + expect(console.error.mock.calls[0]).toMatchInlineSnapshot(` [ "You have illegal escape sequence in your template literal, most likely inside content's property value. Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';". @@ -26,7 +24,7 @@ it('warns about illegal escape sequences inside first quasi of template literal' `) }) -it('warns about illegal escape sequences inside non-first quasi of template literal', () => { +test('warns about illegal escape sequences inside non-first quasi of template literal', () => { const color = `color: hotpink` css` background-color: black; @@ -36,7 +34,7 @@ it('warns about illegal escape sequences inside non-first quasi of template lite } ` - expect((console.error: any).mock.calls[0]).toMatchInlineSnapshot(` + expect(console.error.mock.calls[0]).toMatchInlineSnapshot(` [ "You have illegal escape sequence in your template literal, most likely inside content's property value. Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';". diff --git a/packages/css/test/selectivity.test.js b/packages/css/test/selectivity.test.js index dd66dc32b0..c6782b88d2 100644 --- a/packages/css/test/selectivity.test.js +++ b/packages/css/test/selectivity.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import { css, sheet, flush } from '@emotion/css' diff --git a/packages/css/test/sheet.dom.test.js b/packages/css/test/sheet.dom.test.js index d482d84c02..90833e56e1 100644 --- a/packages/css/test/sheet.dom.test.js +++ b/packages/css/test/sheet.dom.test.js @@ -1,4 +1,3 @@ -// @flow import { sheet } from '@emotion/css' const consoleError = console.error diff --git a/packages/css/test/warnings.test.js b/packages/css/test/warnings.test.js index 61c4235214..a692085a7b 100644 --- a/packages/css/test/warnings.test.js +++ b/packages/css/test/warnings.test.js @@ -1,11 +1,9 @@ -// @flow import 'test-utils/legacy-env' import { css } from '@emotion/css' import createCss from '@emotion/css/create-instance' import * as React from 'react' import renderer from 'react-test-renderer' -// $FlowFixMe console.error = jest.fn() const validValues = [ @@ -36,7 +34,7 @@ afterEach(() => { jest.clearAllMocks() }) -it('does not warn when valid values are passed for the content property', () => { +test('does not warn when valid values are passed for the content property', () => { const cls = css(validValues.map(value => ({ content: value }))) expect(console.error).not.toBeCalled() expect(renderer.create(
).toJSON()).toMatchSnapshot() @@ -44,7 +42,7 @@ it('does not warn when valid values are passed for the content property', () => const invalidValues = ['this is not valid', ''] -it('does warn when invalid values are passed for the content property', () => { +test('does warn when invalid values are passed for the content property', () => { invalidValues.forEach(value => { expect(() => renderer.create(
) @@ -54,20 +52,20 @@ it('does warn when invalid values are passed for the content property', () => { }) }) -it('does warn when functions are passed to css calls', () => { +test('does warn when functions are passed to css calls', () => { css(() => 'color:hotpink;') expect(console.error).toBeCalledWith( "Functions that are interpolated in css calls will be stringified.\nIf you want to have a css call based on props, create a function that returns a css call like this\nlet dynamicStyle = (props) => css`color: ${props.color}`\nIt can be called directly with props or interpolated in a styled call like this\nlet SomeComponent = styled('div')`${dynamicStyle}`" ) }) -it('does warn when @import rule is being inserted after order-insensitive rules', () => { +test('does warn when @import rule is being inserted after order-insensitive rules', () => { const { injectGlobal } = createCss({ key: 'import-after-regular' }) injectGlobal`.thing {display:flex;}` injectGlobal`@import 'custom.css';` - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "You're attempting to insert the following rule: diff --git a/packages/css/types/create-instance.d.ts b/packages/css/types/create-instance.d.ts index 9e560390f1..e505b19935 100644 --- a/packages/css/types/create-instance.d.ts +++ b/packages/css/types/create-instance.d.ts @@ -1,55 +1,4 @@ // Definitions by: Junyoung Clare Jang // TypeScript Version: 2.8 - -import { EmotionCache, Options } from '@emotion/cache' -import { CSSInterpolation } from '@emotion/serialize' -import { StyleSheet } from '@emotion/sheet' - -export { - CSSInterpolation, - ArrayCSSInterpolation, - ComponentSelector, - CSSObject -} from '@emotion/serialize' - -export { EmotionCache, Options } - -export interface ArrayClassNamesArg extends Array {} -export type ClassNamesArg = - | undefined - | null - | string - | boolean - | { [className: string]: boolean | null | undefined } - | ArrayClassNamesArg - -export interface CSSStyleSheet extends StyleSheet { - speedy(value: boolean): void -} - -export interface Emotion { - css(template: TemplateStringsArray, ...args: Array): string - css(...args: Array): string - cx(...classNames: Array): string - flush(): void - hydrate(ids: Array): void - injectGlobal( - template: TemplateStringsArray, - ...args: Array - ): void - injectGlobal(...args: Array): void - keyframes( - template: TemplateStringsArray, - ...args: Array - ): string - keyframes(...args: Array): string - sheet: CSSStyleSheet - cache: EmotionCache - merge(className: string): string - getRegisteredStyles( - registeredStyles: Array, - className: string - ): string -} - -export default function createEmotion(options?: Options): Emotion +export * from '../create-instance' +export { default } from '../create-instance' diff --git a/packages/css/types/index.d.ts b/packages/css/types/index.d.ts index 7efec6edee..23f9a3c26e 100644 --- a/packages/css/types/index.d.ts +++ b/packages/css/types/index.d.ts @@ -1,26 +1,3 @@ -// Definitions by: Junyoung Clare Jang -// TypeScript Version: 2.8 +/// -import { Emotion } from './create-instance' - -export { - ArrayClassNamesArg, - ArrayCSSInterpolation, - ClassNamesArg, - ComponentSelector, - EmotionCache, - CSSInterpolation, - CSSObject, - CSSStyleSheet -} from './create-instance' - -export const flush: Emotion['flush'] -export const hydrate: Emotion['hydrate'] -export const cx: Emotion['cx'] -export const merge: Emotion['merge'] -export const getRegisteredStyles: Emotion['getRegisteredStyles'] -export const css: Emotion['css'] -export const injectGlobal: Emotion['injectGlobal'] -export const keyframes: Emotion['keyframes'] -export const sheet: Emotion['sheet'] -export const cache: Emotion['cache'] +export * from '..' diff --git a/packages/css/types/tsconfig.json b/packages/css/types/tsconfig.json index 4b5665bfd1..66469a7f3a 100644 --- a/packages/css/types/tsconfig.json +++ b/packages/css/types/tsconfig.json @@ -9,7 +9,11 @@ "strict": true, "target": "es5", "typeRoots": ["../"], - "types": [] + "types": [], + "paths": { + "#is-browser": ["./src/conditions/true.ts"], + "#is-development": ["./src/conditions/true.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/css/types/tslint.json b/packages/css/types/tslint.json index af5dcd0aa0..bf5ec4e372 100644 --- a/packages/css/types/tslint.json +++ b/packages/css/types/tslint.json @@ -18,6 +18,7 @@ "check-typecast", "check-type-operator", "check-preblock" - ] + ], + "unnecessary-bind": false } } diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 5ce71f6d34..67f0734ae5 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,5 +1,17 @@ # @emotion/eslint-plugin +## 11.12.0 + +### Minor Changes + +- [#2568](https://github.com/emotion-js/emotion/pull/2568) [`304f7e3`](https://github.com/emotion-js/emotion/commit/304f7e3da4fb7a4c38eff0fa27cc6db417bfe10c) Thanks [@G-Rath](https://github.com/G-Rath)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + +### Patch Changes + +- [#2568](https://github.com/emotion-js/emotion/pull/2568) [`304f7e3`](https://github.com/emotion-js/emotion/commit/304f7e3da4fb7a4c38eff0fa27cc6db417bfe10c) Thanks [@G-Rath](https://github.com/G-Rath)! - An empty css prop (`
`) will now raise an error in the `@emotion/syntax-preference` rule instead of crashing on this case. + +- [#2568](https://github.com/emotion-js/emotion/pull/2568) [`304f7e3`](https://github.com/emotion-js/emotion/commit/304f7e3da4fb7a4c38eff0fa27cc6db417bfe10c) Thanks [@G-Rath](https://github.com/G-Rath)! - Fixed a crash on empty css prop (`
`) in the `@emotion/jsx-import` rule. + ## 11.11.0 ### Patch Changes diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 996c688f92..8674d6f7b2 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@emotion/eslint-plugin", - "version": "11.11.0", + "version": "11.12.0", "description": "ESLint rules for emotion", "keywords": [ "eslint", @@ -13,6 +13,10 @@ "module": "dist/emotion-eslint-plugin.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-eslint-plugin.cjs.mjs", + "default": "./dist/emotion-eslint-plugin.cjs.js" + }, "module": "./dist/emotion-eslint-plugin.esm.js", "import": "./dist/emotion-eslint-plugin.cjs.mjs", "default": "./dist/emotion-eslint-plugin.cjs.js" @@ -27,7 +31,12 @@ "peerDependencies": { "eslint": "6 || 7 || 8" }, + "dependencies": { + "@typescript-eslint/utils": "^5.25.0" + }, "devDependencies": { - "eslint": "^7.10.0" + "@types/eslint": "^7.0.0", + "eslint": "^8.57.0", + "resolve-from": "^5.0.0" } } diff --git a/packages/eslint-plugin/src/index.js b/packages/eslint-plugin/src/index.ts similarity index 94% rename from packages/eslint-plugin/src/index.js rename to packages/eslint-plugin/src/index.ts index e626a190cb..3c27f57e22 100644 --- a/packages/eslint-plugin/src/index.js +++ b/packages/eslint-plugin/src/index.ts @@ -1,5 +1,3 @@ -// @flow - import importFromEmotion from './rules/import-from-emotion' import noVanilla from './rules/no-vanilla' import syntaxPreference from './rules/syntax-preference' @@ -7,7 +5,7 @@ import styledImport from './rules/styled-import' import jsxImport from './rules/jsx-import' import pkgRenaming from './rules/pkg-renaming' -export let rules = { +export const rules = { 'import-from-emotion': importFromEmotion, 'no-vanilla': noVanilla, 'syntax-preference': syntaxPreference, diff --git a/packages/eslint-plugin/src/rules/import-from-emotion.js b/packages/eslint-plugin/src/rules/import-from-emotion.js deleted file mode 100644 index 7889e3ca5b..0000000000 --- a/packages/eslint-plugin/src/rules/import-from-emotion.js +++ /dev/null @@ -1,42 +0,0 @@ -export default { - meta: { - fixable: 'code' - }, - create(context) { - return { - ImportDeclaration(node) { - if ( - node.source.value === 'react-emotion' && - node.specifiers.some(x => x.type !== 'ImportDefaultSpecifier') - ) { - context.report({ - node: node.source, - message: `emotion's exports should be imported directly from emotion rather than from react-emotion`, - fix(fixer) { - if (node.specifiers[0].type === 'ImportNamespaceSpecifier') { - return - } - // default specifiers are always first - if (node.specifiers[0].type === 'ImportDefaultSpecifier') { - return fixer.replaceText( - node, - `import ${ - node.specifiers[0].local.name - } from '@emotion/styled';\nimport { ${node.specifiers - .filter(x => x.type === 'ImportSpecifier') - .map(x => - x.local.name === x.imported.name - ? x.local.name - : `${x.imported.name} as ${x.local.name}` - ) - .join(', ')} } from 'emotion';` - ) - } - return fixer.replaceText(node.source, "'emotion'") - } - }) - } - } - } - } -} diff --git a/packages/eslint-plugin/src/rules/import-from-emotion.ts b/packages/eslint-plugin/src/rules/import-from-emotion.ts new file mode 100644 index 0000000000..c390ff1d74 --- /dev/null +++ b/packages/eslint-plugin/src/rules/import-from-emotion.ts @@ -0,0 +1,69 @@ +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils' +import { createRule } from '../utils' + +const messages = { + incorrectImport: `emotion's exports should be imported directly from emotion rather than from react-emotion` +} + +export default createRule({ + name: __filename, + meta: { + docs: { + description: 'Ensure styled is imported from @emotion/styled', + recommended: false + }, + fixable: 'code', + messages, + schema: [], + type: 'problem' + }, + defaultOptions: [], + create(context) { + return { + ImportDeclaration(node) { + if ( + node.source.value === 'react-emotion' && + node.specifiers.some( + x => x.type !== AST_NODE_TYPES.ImportDefaultSpecifier + ) + ) { + context.report({ + node: node.source, + messageId: 'incorrectImport', + fix(fixer) { + if ( + node.specifiers[0].type === + AST_NODE_TYPES.ImportNamespaceSpecifier + ) { + return null + } + // default specifiers are always first + if ( + node.specifiers[0].type === + AST_NODE_TYPES.ImportDefaultSpecifier + ) { + return fixer.replaceText( + node, + `import ${ + node.specifiers[0].local.name + } from '@emotion/styled';\nimport { ${node.specifiers + .filter( + (x): x is TSESTree.ImportSpecifier => + x.type === AST_NODE_TYPES.ImportSpecifier + ) + .map(x => + x.local.name === x.imported.name + ? x.local.name + : `${x.imported.name} as ${x.local.name}` + ) + .join(', ')} } from 'emotion';` + ) + } + return fixer.replaceText(node.source, "'emotion'") + } + }) + } + } + } + } +}) diff --git a/packages/eslint-plugin/src/rules/jsx-import.js b/packages/eslint-plugin/src/rules/jsx-import.ts similarity index 57% rename from packages/eslint-plugin/src/rules/jsx-import.js rename to packages/eslint-plugin/src/rules/jsx-import.ts index 8b7cab8a65..2ee930f8d2 100644 --- a/packages/eslint-plugin/src/rules/jsx-import.js +++ b/packages/eslint-plugin/src/rules/jsx-import.ts @@ -1,3 +1,6 @@ +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils' +import { createRule, REPO_URL } from '../utils' + const JSX_ANNOTATION_REGEX = /\*?\s*@jsx\s+([^\s]+)/ const JSX_IMPORT_SOURCE_REGEX = /\*?\s*@jsxImportSource\s+([^\s]+)/ @@ -6,9 +9,34 @@ const JSX_IMPORT_SOURCE_REGEX = /\*?\s*@jsxImportSource\s+([^\s]+)/ // to //
+ import { css } -export default { +declare module '@typescript-eslint/utils/dist/ts-eslint/Rule' { + export interface SharedConfigurationSettings { + react?: { pragma?: string } + } +} + +type JSXConfig = { + runtime: string + importSource?: string +} + +type RuleOptions = [(JSXConfig | string)?] + +const messages = { + cssProp: `The css prop can only be used if jsxImportSource is set to {{ importSource }}`, + cssPropWithPragma: `The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma`, + templateLiterals: `Template literals should be replaced with tagged template literals using \`css\` when using the css prop` +} + +export default createRule({ + name: __filename, meta: { + docs: { + description: 'Ensure jsx from @emotion/react is imported', + recommended: false + }, fixable: 'code', + messages, schema: { type: 'array', items: { @@ -29,11 +57,14 @@ export default { }, uniqueItems: true, minItems: 0 - } + }, + type: 'problem' }, + defaultOptions: [], create(context) { const jsxRuntimeMode = context.options.find( - option => option && option.runtime === 'automatic' + (option): option is JSXConfig => + typeof option === 'object' && option.runtime === 'automatic' ) if (jsxRuntimeMode) { @@ -42,15 +73,14 @@ export default { if (node.name.name !== 'css') { return } - const importSource = - (jsxRuntimeMode || {}).importSource || '@emotion/react' - let jsxImportSourcePragmaNode + const importSource = jsxRuntimeMode?.importSource || '@emotion/react' + let jsxImportSourcePragmaComment: TSESTree.Comment | null = null let jsxImportSourceMatch let validJsxImportSource = false let sourceCode = context.getSourceCode() - let pragma = sourceCode.getAllComments().find(node => { - if (JSX_IMPORT_SOURCE_REGEX.test(node.value)) { - jsxImportSourcePragmaNode = node + let pragma = sourceCode.getAllComments().find(comment => { + if (JSX_IMPORT_SOURCE_REGEX.test(comment.value)) { + jsxImportSourcePragmaComment = comment return true } }) @@ -65,7 +95,8 @@ export default { if (!jsxImportSourceMatch) { context.report({ node, - message: `The css prop can only be used if jsxImportSource is set to ${importSource}`, + messageId: 'cssProp', + data: { importSource }, fix(fixer) { return fixer.insertTextBefore( sourceCode.ast.body[0], @@ -73,13 +104,21 @@ export default { ) } }) - } else if (!validJsxImportSource && jsxImportSourcePragmaNode) { + } else if (!validJsxImportSource && jsxImportSourcePragmaComment) { context.report({ node, - message: `The css prop can only be used if jsxImportSource is set to ${importSource}`, + messageId: 'cssProp', + data: { importSource }, fix(fixer) { + /* istanbul ignore if */ + if (jsxImportSourcePragmaComment === null) { + throw new Error( + `Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at ${REPO_URL}` + ) + } + return fixer.replaceText( - jsxImportSourcePragmaNode, + jsxImportSourcePragmaComment, `/** @jsxImportSource ${importSource} */` ) } @@ -95,12 +134,12 @@ export default { return } let hasJsxImport = false - let emotionCoreNode = null - let local = null + let emotionCoreNode = null as TSESTree.ImportDeclaration | null + let local: string | null = null let sourceCode = context.getSourceCode() sourceCode.ast.body.forEach(x => { if ( - x.type === 'ImportDeclaration' && + x.type === AST_NODE_TYPES.ImportDeclaration && (x.source.value === '@emotion/react' || x.source.value === '@emotion/core') ) { @@ -108,13 +147,15 @@ export default { if ( x.specifiers.length === 1 && - x.specifiers[0].type === 'ImportNamespaceSpecifier' + x.specifiers[0].type === AST_NODE_TYPES.ImportNamespaceSpecifier ) { hasJsxImport = true local = x.specifiers[0].local.name + '.jsx' } else { let jsxSpecifier = x.specifiers.find( - x => x.type === 'ImportSpecifier' && x.imported.name === 'jsx' + x => + x.type === AST_NODE_TYPES.ImportSpecifier && + x.imported.name === 'jsx' ) if (jsxSpecifier) { hasJsxImport = true @@ -138,10 +179,16 @@ export default { if (!hasJsxImport || !hasSetPragma) { context.report({ node, - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma', + messageId: 'cssPropWithPragma', fix(fixer) { if (hasJsxImport) { + /* istanbul ignore if */ + if (emotionCoreNode === null) { + throw new Error( + `Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at ${REPO_URL}` + ) + } + return fixer.insertTextBefore( emotionCoreNode, `/** @jsx ${local} */\n` @@ -154,7 +201,9 @@ export default { emotionCoreNode.specifiers.length - 1 ] - if (lastSpecifier.type === 'ImportDefaultSpecifier') { + if ( + lastSpecifier.type === AST_NODE_TYPES.ImportDefaultSpecifier + ) { return fixer.insertTextAfter(lastSpecifier, ', { jsx }') } @@ -174,38 +223,48 @@ export default { }) return } + + /* istanbul ignore if */ + if (emotionCoreNode === null) { + throw new Error( + `Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at ${REPO_URL}` + ) + } + + const { specifiers } = emotionCoreNode + const { value } = node + if ( - node.value.type === 'JSXExpressionContainer' && - node.value.expression.type === 'TemplateLiteral' + value && + value.type === AST_NODE_TYPES.JSXExpressionContainer && + value.expression.type === AST_NODE_TYPES.TemplateLiteral ) { - let cssSpecifier = emotionCoreNode.specifiers.find( - x => x.imported.name === 'css' + let cssSpecifier = specifiers.find( + x => + x.type === AST_NODE_TYPES.ImportSpecifier && + x.imported.name === 'css' ) context.report({ node, - message: - 'Template literals should be replaced with tagged template literals using `css` when using the css prop', + messageId: 'templateLiterals', fix(fixer) { if (cssSpecifier) { return fixer.insertTextBefore( - node.value.expression, + value.expression, cssSpecifier.local.name ) } - let lastSpecifier = - emotionCoreNode.specifiers[ - emotionCoreNode.specifiers.length - 1 - ] + let lastSpecifier = specifiers[specifiers.length - 1] if (context.getScope().variables.some(x => x.name === 'css')) { return [ fixer.insertTextAfter(lastSpecifier, `, css as _css`), - fixer.insertTextBefore(node.value.expression, '_css') + fixer.insertTextBefore(value.expression, '_css') ] } return [ fixer.insertTextAfter(lastSpecifier, `, css`), - fixer.insertTextBefore(node.value.expression, 'css') + fixer.insertTextBefore(value.expression, 'css') ] } }) @@ -213,4 +272,4 @@ export default { } } } -} +}) diff --git a/packages/eslint-plugin/src/rules/no-vanilla.js b/packages/eslint-plugin/src/rules/no-vanilla.js deleted file mode 100644 index 793819576a..0000000000 --- a/packages/eslint-plugin/src/rules/no-vanilla.js +++ /dev/null @@ -1,17 +0,0 @@ -export default { - meta: { - fixable: 'code' - }, - create(context) { - return { - ImportDeclaration(node) { - if (node.source.value === '@emotion/css') { - context.report({ - node: node.source, - message: `Vanilla emotion should not be used` - }) - } - } - } - } -} diff --git a/packages/eslint-plugin/src/rules/no-vanilla.ts b/packages/eslint-plugin/src/rules/no-vanilla.ts new file mode 100644 index 0000000000..72b0524757 --- /dev/null +++ b/packages/eslint-plugin/src/rules/no-vanilla.ts @@ -0,0 +1,31 @@ +import { createRule } from '../utils' + +const messages = { + vanillaEmotion: 'Vanilla emotion should not be used' +} + +export default createRule({ + name: __filename, + meta: { + docs: { + description: 'Ensure vanilla emotion is not used', + recommended: false + }, + messages, + schema: [], + type: 'problem' + }, + defaultOptions: [], + create(context) { + return { + ImportDeclaration(node) { + if (node.source.value === '@emotion/css') { + context.report({ + node: node.source, + messageId: 'vanillaEmotion' + }) + } + } + } + } +}) diff --git a/packages/eslint-plugin/src/rules/pkg-renaming.js b/packages/eslint-plugin/src/rules/pkg-renaming.js deleted file mode 100644 index 2e6dbfaf85..0000000000 --- a/packages/eslint-plugin/src/rules/pkg-renaming.js +++ /dev/null @@ -1,67 +0,0 @@ -let simpleMappings = { - '@emotion/core': '@emotion/react', - emotion: '@emotion/css', - 'emotion/macro': '@emotion/css/macro', - '@emotion/styled-base': '@emotion/styled/base', - 'jest-emotion': '@emotion/jest', - 'babel-plugin-emotion': '@emotion/babel-plugin', - 'eslint-plugin-emotion': '@emotion/eslint-plugin', - 'create-emotion-server': '@emotion/server/create-instance', - 'create-emotion': '@emotion/css/create-instance', - 'emotion-server': '@emotion/server' -} - -export default { - meta: { - fixable: 'code' - }, - create(context) { - return { - ImportDeclaration(node) { - let maybeMapping = simpleMappings[node.source.value] - if (maybeMapping !== undefined) { - context.report({ - node: node.source, - message: `${JSON.stringify( - node.source.value - )} has been renamed to ${JSON.stringify( - maybeMapping - )}, please import it from ${JSON.stringify(maybeMapping)} instead`, - fix: fixer => fixer.replaceText(node.source, `'${maybeMapping}'`) - }) - } - if ( - (node.source.value === '@emotion/css' || - node.source.value === '@emotion/css/macro') && - node.specifiers.length === 1 && - node.specifiers[0].type === 'ImportDefaultSpecifier' - ) { - let replacement = - node.source.value === '@emotion/css' - ? '@emotion/react' - : '@emotion/react/macro' - context.report({ - node: node.source, - message: `The default export of "${node.source.value}" in Emotion 10 has been moved to a named export, \`css\`, from "${replacement}" in Emotion 11, please import it from "${replacement}"`, - fix: fixer => - fixer.replaceText( - node, - `import { css${ - node.specifiers[0].local.name === 'css' - ? '' - : ` as ${node.specifiers[0].local.name}` - } } from '${replacement}'` - ) - }) - } - if (node.source.value === 'emotion-theming') { - context.report({ - node: node.source, - message: `"emotion-theming" has been moved into "@emotion/react", please import its exports from "@emotion/react"`, - fix: fixer => fixer.replaceText(node.source, `'@emotion/react'`) - }) - } - } - } - } -} diff --git a/packages/eslint-plugin/src/rules/pkg-renaming.ts b/packages/eslint-plugin/src/rules/pkg-renaming.ts new file mode 100644 index 0000000000..9b546015dd --- /dev/null +++ b/packages/eslint-plugin/src/rules/pkg-renaming.ts @@ -0,0 +1,89 @@ +import { AST_NODE_TYPES } from '@typescript-eslint/utils' +import { createRule } from '../utils' + +const simpleMappings = new Map([ + ['@emotion/core', '@emotion/react'], + ['emotion', '@emotion/css'], + ['emotion/macro', '@emotion/css/macro'], + ['@emotion/styled-base', '@emotion/styled/base'], + ['jest-emotion', '@emotion/jest'], + ['babel-plugin-emotion', '@emotion/babel-plugin'], + ['eslint-plugin-emotion', '@emotion/eslint-plugin'], + ['create-emotion-server', '@emotion/server/create-instance'], + ['create-emotion', '@emotion/css/create-instance'], + ['emotion-server', '@emotion/server'] +]) + +const messages = { + renamePackage: `{{ beforeName }} has been renamed to {{ afterName }}, please import it from {{ afterName }} instead`, + exportChange: `The default export of "{{ name }}" in Emotion 10 has been moved to a named export, \`css\`, from "{{ replacement }}" in Emotion 11, please import it from "{{ replacement }}"`, + emotionTheming: `"emotion-theming" has been moved into "@emotion/react", please import its exports from "@emotion/react"` +} + +export default createRule({ + name: __filename, + meta: { + docs: { + description: 'Internal rule', + recommended: false + }, + fixable: 'code', + messages, + schema: [], + type: 'problem' + }, + defaultOptions: [], + create(context) { + return { + ImportDeclaration(node) { + const maybeMapping = simpleMappings.get(node.source.value) + if (maybeMapping !== undefined) { + context.report({ + node: node.source, + messageId: 'renamePackage', + data: { + beforeName: JSON.stringify(node.source.value), + afterName: JSON.stringify(maybeMapping) + }, + fix: fixer => fixer.replaceText(node.source, `'${maybeMapping}'`) + }) + } + if ( + (node.source.value === '@emotion/css' || + node.source.value === '@emotion/css/macro') && + node.specifiers.length === 1 && + node.specifiers[0].type === AST_NODE_TYPES.ImportDefaultSpecifier + ) { + let replacement = + node.source.value === '@emotion/css' + ? '@emotion/react' + : '@emotion/react/macro' + context.report({ + node: node.source, + messageId: 'exportChange', + data: { + name: node.source.value, + replacement + }, + fix: fixer => + fixer.replaceText( + node, + `import { css${ + node.specifiers[0].local.name === 'css' + ? '' + : ` as ${node.specifiers[0].local.name}` + } } from '${replacement}'` + ) + }) + } + if (node.source.value === 'emotion-theming') { + context.report({ + node: node.source, + messageId: 'emotionTheming', + fix: fixer => fixer.replaceText(node.source, `'@emotion/react'`) + }) + } + } + } + } +}) diff --git a/packages/eslint-plugin/src/rules/styled-import.js b/packages/eslint-plugin/src/rules/styled-import.js deleted file mode 100644 index 89ccf2310a..0000000000 --- a/packages/eslint-plugin/src/rules/styled-import.js +++ /dev/null @@ -1,25 +0,0 @@ -export default { - meta: { - fixable: 'code' - }, - create(context) { - return { - ImportDeclaration(node) { - if (node.source.value === 'react-emotion') { - let newImportPath = '@emotion/styled' - context.report({ - node: node.source, - message: `styled should be imported from @emotion/styled`, - fix: - node.specifiers.length === 1 && - node.specifiers[0].type === 'ImportDefaultSpecifier' - ? fixer => { - return fixer.replaceText(node.source, `'${newImportPath}'`) - } - : undefined - }) - } - } - } - } -} diff --git a/packages/eslint-plugin/src/rules/styled-import.ts b/packages/eslint-plugin/src/rules/styled-import.ts new file mode 100644 index 0000000000..e9aeefbbe8 --- /dev/null +++ b/packages/eslint-plugin/src/rules/styled-import.ts @@ -0,0 +1,41 @@ +import { AST_NODE_TYPES } from '@typescript-eslint/utils' +import { createRule } from '../utils' + +const messages = { + incorrectImport: 'styled should be imported from @emotion/styled' +} + +export default createRule({ + name: __filename, + meta: { + docs: { + description: 'Ensure styled is imported from @emotion/styled', + recommended: false + }, + fixable: 'code', + messages, + schema: [], + type: 'problem' + }, + defaultOptions: [], + create(context) { + return { + ImportDeclaration(node) { + if (node.source.value === 'react-emotion') { + let newImportPath = '@emotion/styled' + context.report({ + node: node.source, + messageId: 'incorrectImport', + fix: + node.specifiers.length === 1 && + node.specifiers[0].type === AST_NODE_TYPES.ImportDefaultSpecifier + ? fixer => { + return fixer.replaceText(node.source, `'${newImportPath}'`) + } + : undefined + }) + } + } + } + } +}) diff --git a/packages/eslint-plugin/src/rules/syntax-preference.js b/packages/eslint-plugin/src/rules/syntax-preference.ts similarity index 55% rename from packages/eslint-plugin/src/rules/syntax-preference.js rename to packages/eslint-plugin/src/rules/syntax-preference.ts index 891713a879..7568eb805b 100644 --- a/packages/eslint-plugin/src/rules/syntax-preference.js +++ b/packages/eslint-plugin/src/rules/syntax-preference.ts @@ -1,16 +1,20 @@ +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils' +import { createRule } from '../utils' + /** * @fileoverview Choose between string or object syntax * @author alex-pex */ -function isStringStyle(node) { - if (node.tag.type === 'Identifier' && node.tag.name === 'css') { +function isStringStyle(node: TSESTree.TaggedTemplateExpression) { + if (node.tag.type === AST_NODE_TYPES.Identifier && node.tag.name === 'css') { return true } // shorthand notation // eg: styled.h1` color: red; ` if ( - node.tag.type === 'MemberExpression' && + node.tag.type === AST_NODE_TYPES.MemberExpression && + node.tag.object.type === AST_NODE_TYPES.Identifier && node.tag.object.name === 'styled' ) { // string syntax used @@ -19,7 +23,11 @@ function isStringStyle(node) { // full notation // eg: styled('h1')` color: red; ` - if (node.tag.type === 'CallExpression' && node.tag.callee.name === 'styled') { + if ( + node.tag.type === AST_NODE_TYPES.CallExpression && + node.tag.callee.type === AST_NODE_TYPES.Identifier && + node.tag.callee.name === 'styled' + ) { // string syntax used return true } @@ -27,15 +35,19 @@ function isStringStyle(node) { return false } -function isObjectStyle(node) { - if (node.callee.type === 'Identifier' && node.callee.name === 'css') { +function isObjectStyle(node: TSESTree.CallExpression) { + if ( + node.callee.type === AST_NODE_TYPES.Identifier && + node.callee.name === 'css' + ) { return true } // shorthand notation // eg: styled.h1({ color: 'red' }) if ( - node.callee.type === 'MemberExpression' && + node.callee.type === AST_NODE_TYPES.MemberExpression && + node.callee.object.type === AST_NODE_TYPES.Identifier && node.callee.object.name === 'styled' ) { // object syntax used @@ -45,7 +57,8 @@ function isObjectStyle(node) { // full notation // eg: styled('h1')({ color: 'red' }) if ( - node.callee.type === 'CallExpression' && + node.callee.type === AST_NODE_TYPES.CallExpression && + node.callee.callee.type === AST_NODE_TYPES.Identifier && node.callee.callee.name === 'styled' ) { // object syntax used @@ -59,42 +72,42 @@ function isObjectStyle(node) { // Rule Definition // ------------------------------------------------------------------------------ -const MSG_PREFER_STRING_STYLE = 'Styles should be written using strings.' -const MSG_PREFER_OBJECT_STYLE = 'Styles should be written using objects.' -const MSG_PREFER_WRAPPING_WITH_CSS = - 'Prefer wrapping your string styles with `css` call.' - -const checkExpressionPreferringObject = (context, node) => { +const checkExpressionPreferringObject = ( + context: RuleContext, + node: TSESTree.Node +) => { switch (node.type) { - case 'ArrayExpression': + case AST_NODE_TYPES.ArrayExpression: node.elements.forEach(element => checkExpressionPreferringObject(context, element) ) return - case 'TemplateLiteral': + case AST_NODE_TYPES.TemplateLiteral: context.report({ node, - message: MSG_PREFER_OBJECT_STYLE + messageId: 'preferObjectStyle' }) return - case 'Literal': + case AST_NODE_TYPES.Literal: // validating other literal types seems out of scope of this plugin if (typeof node.value !== 'string') { return } context.report({ node, - message: MSG_PREFER_OBJECT_STYLE + messageId: 'preferObjectStyle' }) } } -const createPreferredObjectVisitor = context => ({ +const createPreferredObjectVisitor = ( + context: RuleContext +): TSESLint.RuleListener => ({ TaggedTemplateExpression(node) { if (isStringStyle(node)) { context.report({ node, - message: MSG_PREFER_OBJECT_STYLE + messageId: 'preferObjectStyle' }) } }, @@ -110,24 +123,35 @@ const createPreferredObjectVisitor = context => ({ return } + if (!node.value) { + context.report({ + node: node, + messageId: 'emptyCssProp' + }) + return + } + switch (node.value.type) { - case 'Literal': + case AST_NODE_TYPES.Literal: // validating other literal types seems out of scope of this plugin if (typeof node.value.value !== 'string') { return } context.report({ node: node.value, - message: MSG_PREFER_OBJECT_STYLE + messageId: 'preferObjectStyle' }) return - case 'JSXExpressionContainer': + case AST_NODE_TYPES.JSXExpressionContainer: checkExpressionPreferringObject(context, node.value.expression) } } }) -const checkExpressionPreferringString = (context, node) => { +const checkExpressionPreferringString = ( + context: RuleContext, + node: TSESTree.Node +) => { switch (node.type) { case 'ArrayExpression': node.elements.forEach(element => @@ -137,7 +161,7 @@ const checkExpressionPreferringString = (context, node) => { case 'ObjectExpression': context.report({ node, - message: MSG_PREFER_STRING_STYLE + messageId: 'preferStringStyle' }) return case 'Literal': @@ -147,12 +171,14 @@ const checkExpressionPreferringString = (context, node) => { } context.report({ node, - message: MSG_PREFER_WRAPPING_WITH_CSS + messageId: 'preferWrappingWithCSS' }) } } -const createPreferredStringVisitor = context => ({ +const createPreferredStringVisitor = ( + context: RuleContext +): TSESLint.RuleListener => ({ CallExpression(node) { if (isObjectStyle(node)) { node.arguments.forEach(argument => @@ -166,38 +192,62 @@ const createPreferredStringVisitor = context => ({ return } + if (!node.value) { + context.report({ + node: node, + messageId: 'emptyCssProp' + }) + return + } + switch (node.value.type) { - case 'Literal': + case AST_NODE_TYPES.Literal: // validating other literal types seems out of scope of this plugin if (typeof node.value.value !== 'string') { return } context.report({ node: node.value, - message: MSG_PREFER_WRAPPING_WITH_CSS + messageId: 'preferWrappingWithCSS' }) return - case 'JSXExpressionContainer': + case AST_NODE_TYPES.JSXExpressionContainer: checkExpressionPreferringString(context, node.value.expression) } } }) -export default { +type RuleOptions = [('string' | 'object')?] + +type MessageId = + | 'preferStringStyle' + | 'preferObjectStyle' + | 'preferWrappingWithCSS' + | 'emptyCssProp' + +type RuleContext = TSESLint.RuleContext + +export default createRule({ + name: __filename, meta: { docs: { - description: 'Choose between string or object styles', - category: 'Stylistic Issues', + description: 'Choose between styles written as strings or objects', recommended: false }, - fixable: null, // or "code" or "whitespace" + messages: { + preferStringStyle: 'Styles should be written using strings.', + preferObjectStyle: 'Styles should be written using objects.', + preferWrappingWithCSS: `Prefer wrapping your string styles with \`css\` call.`, + emptyCssProp: `Empty \`css\` prop is not valid.` + }, schema: [ { enum: ['string', 'object'] } - ] + ], + type: 'problem' }, - + defaultOptions: [], create(context) { const preferredSyntax = context.options[0] @@ -210,4 +260,4 @@ export default { return {} } } -} +}) diff --git a/packages/eslint-plugin/src/utils.ts b/packages/eslint-plugin/src/utils.ts new file mode 100644 index 0000000000..7fbef3077c --- /dev/null +++ b/packages/eslint-plugin/src/utils.ts @@ -0,0 +1,12 @@ +import { ESLintUtils } from '@typescript-eslint/utils' +import { parse as parsePath } from 'path' + +const { version } = require('../package.json') + +export const REPO_URL = 'https://github.com/emotion-js/emotion' + +export const createRule = ESLintUtils.RuleCreator(name => { + const ruleName = parsePath(name).name + + return `${REPO_URL}/blob/@emotion/eslint-plugin@${version}/packages/eslint-plugin/docs/rules/${ruleName}.md` +}) diff --git a/packages/eslint-plugin/test/rules/import-from-emotion.test.js b/packages/eslint-plugin/test/rules/import-from-emotion.test.ts similarity index 60% rename from packages/eslint-plugin/test/rules/import-from-emotion.test.js rename to packages/eslint-plugin/test/rules/import-from-emotion.test.ts index b28f99730d..99be3a0fa0 100644 --- a/packages/eslint-plugin/test/rules/import-from-emotion.test.js +++ b/packages/eslint-plugin/test/rules/import-from-emotion.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ -import { RuleTester } from 'eslint' -import { rules as emotionRules } from '@emotion/eslint-plugin' +import { TSESLint } from '@typescript-eslint/utils' +import rule from '../../src/rules/import-from-emotion' +import { espreeParser } from '../test-utils' -const rule = emotionRules['import-from-emotion'] - -RuleTester.setDefaultConfig({ +const ruleTester = new TSESLint.RuleTester({ + parser: espreeParser, parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -17,8 +17,6 @@ RuleTester.setDefaultConfig({ } }) -const ruleTester = new RuleTester() - ruleTester.run('emotion jsx', rule, { valid: [ { @@ -31,8 +29,7 @@ ruleTester.run('emotion jsx', rule, { code: `import { css } from 'react-emotion'`, errors: [ { - message: - "emotion's exports should be imported directly from emotion rather than from react-emotion" + messageId: 'incorrectImport' } ], output: `import { css } from 'emotion'` @@ -41,8 +38,7 @@ ruleTester.run('emotion jsx', rule, { code: `import styled, { css } from 'react-emotion'`, errors: [ { - message: - "emotion's exports should be imported directly from emotion rather than from react-emotion" + messageId: 'incorrectImport' } ], output: `import styled from '@emotion/styled';\nimport { css } from 'emotion';` @@ -51,8 +47,7 @@ ruleTester.run('emotion jsx', rule, { code: `import styled, { css as somethingElse } from 'react-emotion'`, errors: [ { - message: - "emotion's exports should be imported directly from emotion rather than from react-emotion" + messageId: 'incorrectImport' } ], output: `import styled from '@emotion/styled';\nimport { css as somethingElse } from 'emotion';` diff --git a/packages/eslint-plugin/test/rules/jsx-import.test.js b/packages/eslint-plugin/test/rules/jsx-import.test.ts similarity index 71% rename from packages/eslint-plugin/test/rules/jsx-import.test.js rename to packages/eslint-plugin/test/rules/jsx-import.test.ts index 6a0fa0b793..f245357e64 100644 --- a/packages/eslint-plugin/test/rules/jsx-import.test.js +++ b/packages/eslint-plugin/test/rules/jsx-import.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ -import { RuleTester } from 'eslint' -import { rules as emotionRules } from '@emotion/eslint-plugin' +import { TSESLint } from '@typescript-eslint/utils' +import rule from '../../src/rules/jsx-import' +import { espreeParser } from '../test-utils' -const rule = emotionRules['jsx-import'] - -RuleTester.setDefaultConfig({ +const ruleTester = new TSESLint.RuleTester({ + parser: espreeParser, parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -17,8 +17,6 @@ RuleTester.setDefaultConfig({ } }) -const ruleTester = new RuleTester() - ruleTester.run('emotion jsx', rule, { valid: [ { @@ -73,6 +71,14 @@ ruleTester.run('emotion jsx', rule, { let ele =
` + }, + { + code: ` + /** @jsx jsx */ + import {jsx} from '@emotion/react' + // it's invalid but not for this rule + let ele =
+ ` } ], @@ -84,8 +90,7 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -101,8 +106,8 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsxImportSource is set to @emotion/react' + messageId: 'cssProp', + data: { importSource: '@emotion/react' } } ], output: ` @@ -117,8 +122,8 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsxImportSource is set to @iChenLei/react' + messageId: 'cssProp', + data: { importSource: '@iChenLei/react' } } ], output: ` @@ -134,8 +139,8 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsxImportSource is set to @iChenLei/react' + messageId: 'cssProp', + data: { importSource: '@iChenLei/react' } } ], output: ` @@ -150,8 +155,7 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -168,8 +172,7 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -186,8 +189,7 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -203,8 +205,7 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -219,8 +220,7 @@ let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -231,13 +231,30 @@ let ele =
}, { code: ` +/** @jsx jsx */ +import * as emotion from '@emotion/react' +let ele =
+ `.trim(), + errors: [ + { + messageId: 'cssPropWithPragma' + } + ], + output: ` +/** @jsx jsx */ +/** @jsx emotion.jsx */ +import * as emotion from '@emotion/react' +let ele =
+ `.trim() + }, + { + code: ` import {jsx} from '@emotion/react' let ele =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -254,12 +271,10 @@ let ele2 =
`.trim(), errors: [ { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' }, { - message: - 'The css prop can only be used if jsx from @emotion/react is imported and it is set as the jsx pragma' + messageId: 'cssPropWithPragma' } ], output: ` @@ -278,8 +293,7 @@ let ele2 =
`.trim(), errors: [ { - message: - 'Template literals should be replaced with tagged template literals using `css` when using the css prop' + messageId: 'templateLiterals' } ], output: ` @@ -297,8 +311,7 @@ let ele2 =
`.trim(), errors: [ { - message: - 'Template literals should be replaced with tagged template literals using `css` when using the css prop' + messageId: 'templateLiterals' } ], output: ` @@ -316,8 +329,7 @@ let ele2 =
`.trim(), errors: [ { - message: - 'Template literals should be replaced with tagged template literals using `css` when using the css prop' + messageId: 'templateLiterals' } ], output: ` diff --git a/packages/eslint-plugin/test/rules/no-vanilla.test.js b/packages/eslint-plugin/test/rules/no-vanilla.test.ts similarity index 58% rename from packages/eslint-plugin/test/rules/no-vanilla.test.js rename to packages/eslint-plugin/test/rules/no-vanilla.test.ts index cb77156431..a897ec3a70 100644 --- a/packages/eslint-plugin/test/rules/no-vanilla.test.js +++ b/packages/eslint-plugin/test/rules/no-vanilla.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ -import { RuleTester } from 'eslint' -import { rules as emotionRules } from '@emotion/eslint-plugin' +import { TSESLint } from '@typescript-eslint/utils' +import rule from '../../src/rules/no-vanilla' +import { espreeParser } from '../test-utils' -const rule = emotionRules['no-vanilla'] - -RuleTester.setDefaultConfig({ +const ruleTester = new TSESLint.RuleTester({ + parser: espreeParser, parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -17,8 +17,6 @@ RuleTester.setDefaultConfig({ } }) -const ruleTester = new RuleTester() - ruleTester.run('no-vanilla', rule, { valid: [{ code: `import { css } from '@emotion/react'` }], invalid: [ @@ -26,7 +24,7 @@ ruleTester.run('no-vanilla', rule, { code: `import { css } from '@emotion/css'`, errors: [ { - message: `Vanilla emotion should not be used` + messageId: 'vanillaEmotion' } ] } diff --git a/packages/eslint-plugin/test/rules/pkg-renaming.test.js b/packages/eslint-plugin/test/rules/pkg-renaming.test.ts similarity index 53% rename from packages/eslint-plugin/test/rules/pkg-renaming.test.js rename to packages/eslint-plugin/test/rules/pkg-renaming.test.ts index 0377b13ee4..6e7093212e 100644 --- a/packages/eslint-plugin/test/rules/pkg-renaming.test.js +++ b/packages/eslint-plugin/test/rules/pkg-renaming.test.ts @@ -2,10 +2,12 @@ * @jest-environment node */ -const { RuleTester } = require('eslint') -const rule = require('@emotion/eslint-plugin').rules['pkg-renaming'] +import { TSESLint } from '@typescript-eslint/utils' +import rule from '../../src/rules/pkg-renaming' +import { espreeParser } from '../test-utils' -RuleTester.setDefaultConfig({ +const ruleTester = new TSESLint.RuleTester({ + parser: espreeParser, parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -15,8 +17,6 @@ RuleTester.setDefaultConfig({ } }) -const ruleTester = new RuleTester() - ruleTester.run('pkg-renaming', rule, { valid: [ { @@ -31,8 +31,11 @@ ruleTester.run('pkg-renaming', rule, { code: `import { css } from 'emotion'`, errors: [ { - message: - '"emotion" has been renamed to "@emotion/css", please import it from "@emotion/css" instead' + messageId: 'renamePackage', + data: { + beforeName: '"emotion"', + afterName: '"@emotion/css"' + } } ], output: `import { css } from '@emotion/css'` @@ -41,8 +44,11 @@ ruleTester.run('pkg-renaming', rule, { code: `import { css } from '@emotion/core'`, errors: [ { - message: - '"@emotion/core" has been renamed to "@emotion/react", please import it from "@emotion/react" instead' + messageId: 'renamePackage', + data: { + beforeName: '"@emotion/core"', + afterName: '"@emotion/react"' + } } ], output: `import { css } from '@emotion/react'` @@ -51,8 +57,11 @@ ruleTester.run('pkg-renaming', rule, { code: `import css from '@emotion/css'`, errors: [ { - message: - 'The default export of "@emotion/css" in Emotion 10 has been moved to a named export, `css`, from "@emotion/react" in Emotion 11, please import it from "@emotion/react"' + messageId: 'exportChange', + data: { + name: '@emotion/css', + replacement: '@emotion/react' + } } ], output: `import { css } from '@emotion/react'` @@ -61,8 +70,11 @@ ruleTester.run('pkg-renaming', rule, { code: `import css from '@emotion/css/macro'`, errors: [ { - message: - 'The default export of "@emotion/css/macro" in Emotion 10 has been moved to a named export, `css`, from "@emotion/react/macro" in Emotion 11, please import it from "@emotion/react/macro"' + messageId: 'exportChange', + data: { + name: '@emotion/css/macro', + replacement: '@emotion/react/macro' + } } ], output: `import { css } from '@emotion/react/macro'` @@ -71,8 +83,7 @@ ruleTester.run('pkg-renaming', rule, { code: `import {ThemeProvider, withTheme} from 'emotion-theming'`, errors: [ { - message: - '"emotion-theming" has been moved into "@emotion/react", please import its exports from "@emotion/react"' + messageId: 'emotionTheming' } ], output: `import {ThemeProvider, withTheme} from '@emotion/react'` diff --git a/packages/eslint-plugin/test/rules/styled-import.test.js b/packages/eslint-plugin/test/rules/styled-import.test.ts similarity index 63% rename from packages/eslint-plugin/test/rules/styled-import.test.js rename to packages/eslint-plugin/test/rules/styled-import.test.ts index 4909d2dc73..944053cd46 100644 --- a/packages/eslint-plugin/test/rules/styled-import.test.js +++ b/packages/eslint-plugin/test/rules/styled-import.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ -import { RuleTester } from 'eslint' -import { rules as emotionRules } from '@emotion/eslint-plugin' +import { TSESLint } from '@typescript-eslint/utils' +import rule from '../../src/rules/styled-import' +import { espreeParser } from '../test-utils' -const rule = emotionRules['styled-import'] - -RuleTester.setDefaultConfig({ +const ruleTester = new TSESLint.RuleTester({ + parser: espreeParser, parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -17,8 +17,6 @@ RuleTester.setDefaultConfig({ } }) -const ruleTester = new RuleTester() - ruleTester.run('emotion styled', rule, { valid: [ { @@ -35,7 +33,7 @@ import styled from 'react-emotion' `.trim(), errors: [ { - message: `styled should be imported from @emotion/styled` + messageId: 'incorrectImport' } ], output: ` diff --git a/packages/eslint-plugin/test/rules/syntax-preference.test.js b/packages/eslint-plugin/test/rules/syntax-preference.test.ts similarity index 68% rename from packages/eslint-plugin/test/rules/syntax-preference.test.js rename to packages/eslint-plugin/test/rules/syntax-preference.test.ts index 58e2c9d0d1..4ea172d97a 100644 --- a/packages/eslint-plugin/test/rules/syntax-preference.test.js +++ b/packages/eslint-plugin/test/rules/syntax-preference.test.ts @@ -8,12 +8,12 @@ // Requirements // ------------------------------------------------------------------------------ -import { RuleTester } from 'eslint' -import { rules as emotionRules } from '@emotion/eslint-plugin' +import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils' +import rule from '../../src/rules/syntax-preference' +import { espreeParser } from '../test-utils' -const rule = emotionRules['syntax-preference'] - -RuleTester.setDefaultConfig({ +const ruleTester = new TSESLint.RuleTester({ + parser: espreeParser, parserOptions: { ecmaVersion: 2018, sourceType: 'module', @@ -27,8 +27,6 @@ RuleTester.setDefaultConfig({ // Tests // ------------------------------------------------------------------------------ -const ruleTester = new RuleTester() - ruleTester.run('syntax-preference (string)', rule, { valid: [ // give me some code that won't trigger a warning @@ -68,8 +66,8 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Styles should be written using strings.', - type: 'ObjectExpression' + messageId: 'preferStringStyle', + type: AST_NODE_TYPES.ObjectExpression } ] }, @@ -78,8 +76,8 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Styles should be written using strings.', - type: 'ObjectExpression' + messageId: 'preferStringStyle', + type: AST_NODE_TYPES.ObjectExpression } ] }, @@ -88,8 +86,8 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Styles should be written using strings.', - type: 'ObjectExpression' + messageId: 'preferStringStyle', + type: AST_NODE_TYPES.ObjectExpression } ] }, @@ -98,8 +96,8 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Prefer wrapping your string styles with `css` call.', - type: 'Literal' + messageId: 'preferWrappingWithCSS', + type: AST_NODE_TYPES.Literal } ] }, @@ -108,8 +106,8 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Prefer wrapping your string styles with `css` call.', - type: 'Literal' + messageId: 'preferWrappingWithCSS', + type: AST_NODE_TYPES.Literal } ] }, @@ -118,12 +116,12 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Prefer wrapping your string styles with `css` call.', - type: 'Literal' + messageId: 'preferWrappingWithCSS', + type: AST_NODE_TYPES.Literal }, { - message: 'Styles should be written using strings.', - type: 'ObjectExpression' + messageId: 'preferStringStyle', + type: AST_NODE_TYPES.ObjectExpression } ] }, @@ -132,8 +130,18 @@ ruleTester.run('syntax-preference (string)', rule, { options: ['string'], errors: [ { - message: 'Styles should be written using strings.', - type: 'ObjectExpression' + messageId: 'preferStringStyle', + type: AST_NODE_TYPES.ObjectExpression + } + ] + }, + { + code: `const Foo = () =>
`, + options: ['string'], + errors: [ + { + messageId: 'emptyCssProp', + type: AST_NODE_TYPES.JSXAttribute } ] } @@ -171,8 +179,8 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'TaggedTemplateExpression' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.TaggedTemplateExpression } ] }, @@ -181,8 +189,8 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'TaggedTemplateExpression' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.TaggedTemplateExpression } ] }, @@ -191,8 +199,8 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'TaggedTemplateExpression' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.TaggedTemplateExpression } ] }, @@ -201,8 +209,8 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'Literal' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.Literal } ] }, @@ -211,8 +219,8 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'Literal' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.Literal } ] }, @@ -221,12 +229,12 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'Literal' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.Literal }, { - message: 'Styles should be written using objects.', - type: 'TaggedTemplateExpression' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.TaggedTemplateExpression } ] }, @@ -235,12 +243,22 @@ ruleTester.run('syntax-preference (object)', rule, { options: ['object'], errors: [ { - message: 'Styles should be written using objects.', - type: 'Literal' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.Literal }, { - message: 'Styles should be written using objects.', - type: 'TaggedTemplateExpression' + messageId: 'preferObjectStyle', + type: AST_NODE_TYPES.TaggedTemplateExpression + } + ] + }, + { + code: `const Foo = () =>
`, + options: ['object'], + errors: [ + { + messageId: 'emptyCssProp', + type: AST_NODE_TYPES.JSXAttribute } ] } diff --git a/packages/eslint-plugin/test/test-utils.ts b/packages/eslint-plugin/test/test-utils.ts new file mode 100644 index 0000000000..551a54e9db --- /dev/null +++ b/packages/eslint-plugin/test/test-utils.ts @@ -0,0 +1,6 @@ +import resolveFrom from 'resolve-from' + +export const espreeParser: string = resolveFrom( + require.resolve('eslint'), + 'espree' +) diff --git a/packages/hash/CHANGELOG.md b/packages/hash/CHANGELOG.md index f52da41637..d8daf9c966 100644 --- a/packages/hash/CHANGELOG.md +++ b/packages/hash/CHANGELOG.md @@ -1,5 +1,11 @@ # @emotion/hash +## 0.9.2 + +### Patch Changes + +- [#2454](https://github.com/emotion-js/emotion/pull/2454) [`ea2c397`](https://github.com/emotion-js/emotion/commit/ea2c397bbf7d9838086ec88b3eb86db9230d32ae) Thanks [@Andarist](https://github.com/Andarist)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + ## 0.9.1 ### Patch Changes diff --git a/packages/hash/__tests__/index.js b/packages/hash/__tests__/index.js index 17532e38d3..741406af32 100644 --- a/packages/hash/__tests__/index.js +++ b/packages/hash/__tests__/index.js @@ -1,5 +1,5 @@ import hash from '@emotion/hash' -it('accepts a string and returns a string as a hash', () => { +test('accepts a string and returns a string as a hash', () => { expect(hash('something')).toBe('crsxd7') }) diff --git a/packages/hash/package.json b/packages/hash/package.json index c22396e494..41ad196424 100644 --- a/packages/hash/package.json +++ b/packages/hash/package.json @@ -1,26 +1,29 @@ { "name": "@emotion/hash", - "version": "0.9.1", + "version": "0.9.2", "description": "A MurmurHash2 implementation", "main": "dist/emotion-hash.cjs.js", "module": "dist/emotion-hash.esm.js", - "types": "types/index.d.ts", + "types": "dist/emotion-hash.cjs.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/hash", "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "scripts": { "test:typescript": "dtslint types" }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "exports": { ".": { + "types": { + "import": "./dist/emotion-hash.cjs.mjs", + "default": "./dist/emotion-hash.cjs.js" + }, "module": "./dist/emotion-hash.esm.js", "import": "./dist/emotion-hash.cjs.mjs", "default": "./dist/emotion-hash.cjs.js" diff --git a/packages/hash/src/index.d.ts b/packages/hash/src/index.d.ts deleted file mode 100644 index 9e46093759..0000000000 --- a/packages/hash/src/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types' -export { default } from '../types' diff --git a/packages/hash/src/index.js b/packages/hash/src/index.ts similarity index 96% rename from packages/hash/src/index.js rename to packages/hash/src/index.ts index dacf52f904..c7d19839e7 100644 --- a/packages/hash/src/index.js +++ b/packages/hash/src/index.ts @@ -1,9 +1,8 @@ -// @flow /* eslint-disable */ // Inspired by https://github.com/garycourt/murmurhash-js // Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86 -export default function murmur2(str: string) { +export default function murmur2(str: string): string { // 'm' and 'r' are mixing constants generated offline. // They're not really 'magic', they just happen to work well. diff --git a/packages/hash/types/index.d.ts b/packages/hash/types/index.d.ts index 872aa0beff..2c736dff8d 100644 --- a/packages/hash/types/index.d.ts +++ b/packages/hash/types/index.d.ts @@ -1 +1 @@ -export default function murmurhash2_32_gc(str: string): string +export { default } from '..' diff --git a/packages/hash/types/tslint.json b/packages/hash/types/tslint.json index cd0be207a3..9fe0947cd8 100644 --- a/packages/hash/types/tslint.json +++ b/packages/hash/types/tslint.json @@ -17,6 +17,7 @@ "check-preblock" ], - "no-unnecessary-generics": false + "no-unnecessary-generics": false, + "unnecessary-bind": false } } diff --git a/packages/is-prop-valid/CHANGELOG.md b/packages/is-prop-valid/CHANGELOG.md index cc1a0c9efa..3b6e4f5ddc 100644 --- a/packages/is-prop-valid/CHANGELOG.md +++ b/packages/is-prop-valid/CHANGELOG.md @@ -1,5 +1,16 @@ # @emotion/is-prop-valid +## 1.3.0 + +### Minor Changes + +- [#2432](https://github.com/emotion-js/emotion/pull/2432) [`a1e881b`](https://github.com/emotion-js/emotion/commit/a1e881b7dffdfa69f5ff32a708a25213b711bd15) Thanks [@sarayourfriend](https://github.com/sarayourfriend)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + +### Patch Changes + +- Updated dependencies [[`7f8db2d`](https://github.com/emotion-js/emotion/commit/7f8db2d7a900bb34995db66084a99d512811e33d)]: + - @emotion/memoize@0.9.0 + ## 1.2.2 ### Patch Changes diff --git a/packages/is-prop-valid/package.json b/packages/is-prop-valid/package.json index e5f5991960..2435094806 100644 --- a/packages/is-prop-valid/package.json +++ b/packages/is-prop-valid/package.json @@ -1,10 +1,10 @@ { "name": "@emotion/is-prop-valid", - "version": "1.2.2", + "version": "1.3.0", "description": "A function to check whether a prop is valid for HTML and SVG elements", "main": "dist/emotion-is-prop-valid.cjs.js", "module": "dist/emotion-is-prop-valid.esm.js", - "types": "types/index.d.ts", + "types": "dist/emotion-is-prop-valid.cjs.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/is-prop-valid", "scripts": { @@ -14,19 +14,22 @@ "access": "public" }, "dependencies": { - "@emotion/memoize": "^0.8.1" + "@emotion/memoize": "^0.9.0" }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "exports": { ".": { + "types": { + "import": "./dist/emotion-is-prop-valid.cjs.mjs", + "default": "./dist/emotion-is-prop-valid.cjs.js" + }, "module": "./dist/emotion-is-prop-valid.esm.js", "import": "./dist/emotion-is-prop-valid.cjs.mjs", "default": "./dist/emotion-is-prop-valid.cjs.js" diff --git a/packages/is-prop-valid/src/index.d.ts b/packages/is-prop-valid/src/index.d.ts deleted file mode 100644 index 9e46093759..0000000000 --- a/packages/is-prop-valid/src/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types' -export { default } from '../types' diff --git a/packages/is-prop-valid/src/index.js b/packages/is-prop-valid/src/index.ts similarity index 69% rename from packages/is-prop-valid/src/index.js rename to packages/is-prop-valid/src/index.ts index 9763a339e7..88fb415329 100644 --- a/packages/is-prop-valid/src/index.js +++ b/packages/is-prop-valid/src/index.ts @@ -1,9 +1,9 @@ -// @flow import memoize from '@emotion/memoize' -declare var codegen: { require: string => RegExp } +declare const codegen: { require: (path: string) => any } -const reactPropsRegex = codegen.require('./props') +// eslint-disable-next-line no-undef +const reactPropsRegex: RegExp = codegen.require('./props') // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 const isPropValid = /* #__PURE__ */ memoize( diff --git a/packages/is-prop-valid/src/props.js b/packages/is-prop-valid/src/props.js index d93c7022c7..2dccc9b9a4 100644 --- a/packages/is-prop-valid/src/props.js +++ b/packages/is-prop-valid/src/props.js @@ -1,4 +1,6 @@ -// @flow +/** + * This module needs to remain pure JavaScript for codegen to work on it + */ const props = { // react props // https://github.com/facebook/react/blob/5495a7f24aef85ba6937truetrue1ce962673ca9f5fde6/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js @@ -490,7 +492,6 @@ const props = { class: true, autofocus: true } -// eslint-disable-next-line import/no-commonjs module.exports = `/^((${Object.keys(props).join( '|' )})|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/` diff --git a/packages/is-prop-valid/types/index.d.ts b/packages/is-prop-valid/types/index.d.ts index e7d00bfdbf..5f85d28f68 100644 --- a/packages/is-prop-valid/types/index.d.ts +++ b/packages/is-prop-valid/types/index.d.ts @@ -1,5 +1,3 @@ -// Definitions by: Junyoung Clare Jang // TypeScript Version: 2.1 -declare function isPropValid(prop: string): boolean -export default isPropValid +export { default } from '..' diff --git a/packages/is-prop-valid/types/tslint.json b/packages/is-prop-valid/types/tslint.json index cd0be207a3..7eb28049a9 100644 --- a/packages/is-prop-valid/types/tslint.json +++ b/packages/is-prop-valid/types/tslint.json @@ -17,6 +17,8 @@ "check-preblock" ], - "no-unnecessary-generics": false + "no-unnecessary-generics": false, + "no-default-import": false, + "unnecessary-bind": false } } diff --git a/packages/jest/CHANGELOG.md b/packages/jest/CHANGELOG.md index 6f2a3abbfa..cccd587a35 100644 --- a/packages/jest/CHANGELOG.md +++ b/packages/jest/CHANGELOG.md @@ -1,5 +1,11 @@ # @emotion/jest +## 11.13.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Adjustments to how speedy rules are obtained by the plugin. + ## 11.11.0 ### Patch Changes diff --git a/packages/jest/package.json b/packages/jest/package.json index 485c305500..d0d7bef4d6 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -1,26 +1,42 @@ { "name": "@emotion/jest", - "version": "11.11.0", + "version": "11.13.0", "description": "Jest utilities for emotion", "main": "dist/emotion-jest.cjs.js", "module": "dist/emotion-jest.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-jest.cjs.mjs", + "default": "./dist/emotion-jest.cjs.js" + }, "module": "./dist/emotion-jest.esm.js", "import": "./dist/emotion-jest.cjs.mjs", "default": "./dist/emotion-jest.cjs.js" }, "./enzyme": { + "types": { + "import": "./enzyme/dist/emotion-jest-enzyme.cjs.mjs", + "default": "./enzyme/dist/emotion-jest-enzyme.cjs.js" + }, "module": "./enzyme/dist/emotion-jest-enzyme.esm.js", "import": "./enzyme/dist/emotion-jest-enzyme.cjs.mjs", "default": "./enzyme/dist/emotion-jest-enzyme.cjs.js" }, "./serializer": { + "types": { + "import": "./serializer/dist/emotion-jest-serializer.cjs.mjs", + "default": "./serializer/dist/emotion-jest-serializer.cjs.js" + }, "module": "./serializer/dist/emotion-jest-serializer.esm.js", "import": "./serializer/dist/emotion-jest-serializer.cjs.mjs", "default": "./serializer/dist/emotion-jest-serializer.cjs.js" }, "./enzyme-serializer": { + "types": { + "import": "./enzyme-serializer/dist/emotion-jest-enzyme-serializer.cjs.mjs", + "default": "./enzyme-serializer/dist/emotion-jest-enzyme-serializer.cjs.js" + }, "module": "./enzyme-serializer/dist/emotion-jest-enzyme-serializer.esm.js", "import": "./enzyme-serializer/dist/emotion-jest-enzyme-serializer.cjs.mjs", "default": "./enzyme-serializer/dist/emotion-jest-enzyme-serializer.cjs.js" @@ -41,7 +57,7 @@ }, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/css-prettifier": "^1.1.3", + "@emotion/css-prettifier": "^1.1.4", "chalk": "^4.1.0", "specificity": "^0.4.1", "stylis": "4.2.0" @@ -60,14 +76,14 @@ }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "@emotion/css": "11.11.2", - "@emotion/react": "11.11.4", - "@types/jest": "^27.0.3", + "@emotion/css": "11.13.0", + "@emotion/react": "11.13.0", + "@types/jest": "^29.5.12", "enzyme-to-json": "^3.6.1", "pretty-format": "^22.4.3", "react": "16.14.0", "react-dom": "16.14.0", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "author": "Kye Hohenberger", "homepage": "https://emotion.sh", diff --git a/packages/jest/src/create-enzyme-serializer.js b/packages/jest/src/create-enzyme-serializer.js index c91d440922..2178056037 100644 --- a/packages/jest/src/create-enzyme-serializer.js +++ b/packages/jest/src/create-enzyme-serializer.js @@ -1,5 +1,4 @@ -// @flow -import type { Options } from './create-serializer' +/* import type { Options } from './create-serializer' */ import { createSerializer as createEmotionSerializer } from './create-serializer' import * as enzymeTickler from './enzyme-tickler' import { createSerializer as createEnzymeToJsonSerializer } from 'enzyme-to-json' @@ -68,23 +67,23 @@ export function createEnzymeSerializer({ classNameReplacer, DOMElements = true, includeStyles = true -}: Options = {}) { +} /* : Options */ = {}) { const emotionSerializer = createEmotionSerializer({ classNameReplacer, DOMElements, includeStyles }) return { - test(node: *) { + test(node) { return wrappedEnzymeSerializer.test(node) || emotionSerializer.test(node) }, serialize( - node: *, - config: *, - indentation: string, - depth: number, - refs: *, - printer: Function + node, + config, + indentation /*: string */, + depth /*: number */, + refs, + printer /*: Function */ ) { if (wrappedEnzymeSerializer.test(node)) { const tickled = enzymeTickler.tickle(node) diff --git a/packages/jest/src/create-serializer.js b/packages/jest/src/create-serializer.js index c1c5795bb6..533b7ecf0c 100644 --- a/packages/jest/src/create-serializer.js +++ b/packages/jest/src/create-serializer.js @@ -1,4 +1,3 @@ -// @flow import prettify from '@emotion/css-prettifier' import { replaceClassNames } from './replace-class-names' import * as enzymeTickler from './enzyme-tickler' @@ -49,13 +48,13 @@ function deepTransform(node, transform) { return node.map(child => deepTransform(child, transform)) } - const transformed: any = transform(node) + const transformed = transform(node) if (transformed !== node && transformed.children) { return copyProps(transformed, { // flatMap to allow a child of to be transformed to children: flatMap( - (deepTransform(transformed.children, transform): any), + deepTransform(transformed.children, transform), id => id ) }) @@ -65,18 +64,20 @@ function deepTransform(node, transform) { } function getPrettyStylesFromClassNames( - classNames: Array, - elements: Array, - indentation: string + classNames /*: Array */, + elements /*: Array */, + indentation /*: string */ ) { return prettify(getStylesFromClassNames(classNames, elements), indentation) } +/* export type Options = { classNameReplacer?: (className: string, index: number) => string, DOMElements?: boolean, includeStyles?: boolean } +*/ function filterEmotionProps(props = {}) { const { @@ -102,9 +103,9 @@ function getLabelsFromClassName(keys, className) { } function isShallowEnzymeElement( - element: any, - keys: string[], - labels: string[] + element /*: any */, + keys /*: string[] */, + labels /*: string[] */ ) { const childClassNames = (element.children || []) .map(({ props = {} }) => props.className || '') @@ -116,47 +117,48 @@ function isShallowEnzymeElement( }) } -const createConvertEmotionElements = (keys: string[]) => (node: any) => { - if (isPrimitive(node)) { - return node - } - if (isEmotionCssPropEnzymeElement(node)) { - const className = enzymeTickler.getTickledClassName(node.props.css) - const labels = getLabelsFromClassName(keys, className || '') - - if (isShallowEnzymeElement(node, keys, labels)) { - const emotionType = node.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__ - // emotionType will be a string for DOM elements - const type = - typeof emotionType === 'string' - ? emotionType - : emotionType.displayName || emotionType.name || 'Component' +const createConvertEmotionElements = + (keys /*: string[]*/) => (node /*: any*/) => { + if (isPrimitive(node)) { + return node + } + if (isEmotionCssPropEnzymeElement(node)) { + const className = enzymeTickler.getTickledClassName(node.props.css) + const labels = getLabelsFromClassName(keys, className || '') + + if (isShallowEnzymeElement(node, keys, labels)) { + const emotionType = node.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__ + // emotionType will be a string for DOM elements + const type = + typeof emotionType === 'string' + ? emotionType + : emotionType.displayName || emotionType.name || 'Component' + return { + ...node, + props: filterEmotionProps({ + ...node.props, + className + }), + type + } + } else { + return node.children[node.children.length - 1] + } + } + if (isEmotionCssPropElementType(node)) { return { ...node, - props: filterEmotionProps({ - ...node.props, - className - }), - type + props: filterEmotionProps(node.props), + type: node.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__ } - } else { - return node.children[node.children.length - 1] } - } - if (isEmotionCssPropElementType(node)) { - return { - ...node, - props: filterEmotionProps(node.props), - type: node.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__ + if (isReactElement(node)) { + return copyProps({}, node) } + return node } - if (isReactElement(node)) { - return copyProps({}, node) - } - return node -} -function clean(node: any, classNames: string[]) { +function clean(node, classNames /*: string[] */) { if (Array.isArray(node)) { for (const child of node) { clean(child, classNames) @@ -186,17 +188,17 @@ export function createSerializer({ classNameReplacer, DOMElements = true, includeStyles = true -}: Options = {}) { +} /* : Options */ = {}) { const cache = new WeakSet() const isTransformed = val => cache.has(val) function serialize( - val: *, - config: *, - indentation: string, - depth: number, - refs: *, - printer: Function + val, + config, + indentation /*: string */, + depth /*: number */, + refs, + printer /*: Function */ ) { const elements = getStyleElements() const keys = getKeys(elements) @@ -223,7 +225,7 @@ export function createSerializer({ } return { - test(val: *) { + test(val) { return ( val && !isTransformed(val) && diff --git a/packages/jest/src/enzyme-serializer.js b/packages/jest/src/enzyme-serializer.js index 78c5bba6ce..2b73962978 100644 --- a/packages/jest/src/enzyme-serializer.js +++ b/packages/jest/src/enzyme-serializer.js @@ -1,3 +1,2 @@ -// @flow import { createEnzymeSerializer } from './create-enzyme-serializer' export const { test, serialize } = createEnzymeSerializer() diff --git a/packages/jest/src/enzyme.js b/packages/jest/src/enzyme.js index 929a5b359f..72fdee8bd1 100644 --- a/packages/jest/src/enzyme.js +++ b/packages/jest/src/enzyme.js @@ -1,3 +1,2 @@ -// @flow export { createEnzymeSerializer } from './create-enzyme-serializer' export { matchers } from './matchers' diff --git a/packages/jest/src/index.js b/packages/jest/src/index.js index 0b67c3dd0d..c675404fda 100644 --- a/packages/jest/src/index.js +++ b/packages/jest/src/index.js @@ -1,3 +1,2 @@ -// @flow export { createSerializer } from './create-serializer' export { matchers } from './matchers' diff --git a/packages/jest/src/matchers.js b/packages/jest/src/matchers.js index 5e648fcca5..4edae6bb6c 100644 --- a/packages/jest/src/matchers.js +++ b/packages/jest/src/matchers.js @@ -1,4 +1,3 @@ -// @flow import chalk from 'chalk' import * as stylis from 'stylis' import * as specificity from 'specificity' @@ -40,10 +39,10 @@ function valueMatches(declaration, value) { } function toHaveStyleRule( - received: *, - property: *, - value: *, - options?: { target?: string | RegExp, media?: string } = {} + received, + property, + value, + options /* ?: { target?: string | RegExp, media?: string } */ = {} ) { if (Array.isArray(received)) { throw new Error( diff --git a/packages/jest/src/replace-class-names.js b/packages/jest/src/replace-class-names.js index 892b67081b..7039beb818 100644 --- a/packages/jest/src/replace-class-names.js +++ b/packages/jest/src/replace-class-names.js @@ -1,4 +1,3 @@ -// @flow function defaultClassNameReplacer(className, index) { return `emotion-${index}` } @@ -6,29 +5,32 @@ function defaultClassNameReplacer(className, index) { const componentSelectorClassNamePattern = /^e[a-zA-Z0-9]+[0-9]+$/ export const replaceClassNames = ( - classNames: Array, - styles: string, - code: string, - keys: Array, - classNameReplacer: ( + classNames /*: Array */, + styles /*: string */, + code /*: string */, + keys /*: Array */, + classNameReplacer /*: ( className: string, index: number - ) => string = defaultClassNameReplacer + ) => string */ = defaultClassNameReplacer ) => { let index = 0 let keyPattern = new RegExp(`^(${keys.join('|')})-`) - return classNames.reduce((acc, className) => { - if ( - keyPattern.test(className) || - componentSelectorClassNamePattern.test(className) - ) { - const escapedRegex = new RegExp( - className.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'), - 'g' - ) - return acc.replace(escapedRegex, classNameReplacer(className, index++)) - } - return acc - }, `${styles}${styles ? '\n\n' : ''}${code}`) + return classNames.reduce( + (acc, className) => { + if ( + keyPattern.test(className) || + componentSelectorClassNamePattern.test(className) + ) { + const escapedRegex = new RegExp( + className.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'), + 'g' + ) + return acc.replace(escapedRegex, classNameReplacer(className, index++)) + } + return acc + }, + `${styles}${styles ? '\n\n' : ''}${code}` + ) } diff --git a/packages/jest/src/serializer.js b/packages/jest/src/serializer.js index 3f6afed572..941aa43682 100644 --- a/packages/jest/src/serializer.js +++ b/packages/jest/src/serializer.js @@ -1,3 +1,2 @@ -// @flow import { createSerializer } from './create-serializer' export const { test, serialize } = createSerializer() diff --git a/packages/jest/src/utils.js b/packages/jest/src/utils.js index 8a4cad723b..acf2f871de 100644 --- a/packages/jest/src/utils.js +++ b/packages/jest/src/utils.js @@ -1,4 +1,21 @@ -// @flow +const insertedRules = new WeakMap() + +if (typeof CSSStyleSheet !== 'undefined') { + const insertRule = CSSStyleSheet.prototype.insertRule + CSSStyleSheet.prototype.insertRule = function (...args) { + let sheetRules = insertedRules.get(this) + + if (!sheetRules) { + sheetRules = [] + insertedRules.set(this, sheetRules) + } + + const rule = args[0] + sheetRules.push(rule) + + return insertRule.apply(this, args) + } +} const isBrowser = typeof document !== 'undefined' @@ -6,11 +23,17 @@ function last(arr) { return arr.length > 0 ? arr[arr.length - 1] : undefined } -export function flatMap(arr: T[], iteratee: (arg: T) => S[] | S): S[] { +export function flatMap /* */( + arr /*: T[] */, + iteratee /*: (arg: T) => S[] | S */ +) /*: S[] */ { return [].concat(...arr.map(iteratee)) } -export function findLast(arr: T[], predicate: T => boolean) { +export function findLast /* */( + arr /*: T[] */, + predicate /*: T => boolean */ +) { for (let i = arr.length - 1; i >= 0; i--) { if (predicate(arr[i])) { return arr[i] @@ -18,10 +41,10 @@ export function findLast(arr: T[], predicate: T => boolean) { } } -export function findIndexFrom( - arr: T[], - fromIndex: number, - predicate: T => boolean +export function findIndexFrom /* */( + arr /*: T[] */, + fromIndex /*: number */, + predicate /*: T => boolean */ ) { for (let i = fromIndex; i < arr.length; i++) { if (predicate(arr[i])) { @@ -32,7 +55,7 @@ export function findIndexFrom( return -1 } -function getClassNames(selectors: any, classes?: string) { +function getClassNames(selectors, classes /* ?: string */) { return classes ? selectors.concat(classes.split(' ')) : selectors } @@ -58,7 +81,7 @@ function getClassNameProp(node) { return (node && node.prop('className')) || '' } -export function unwrapFromPotentialFragment(node: *) { +export function unwrapFromPotentialFragment(node) { if (node.type() === Symbol.for('react.fragment')) { const isShallow = !!node.dive if (isShallow) { @@ -86,25 +109,25 @@ function getClassNamesFromCheerio(selectors, node) { return getClassNames(selectors, classes) } -function getClassNamesFromDOMElement(selectors, node: any) { +function getClassNamesFromDOMElement(selectors, node) { return getClassNames(selectors, node.getAttribute('class')) } -export function isReactElement(val: any): boolean { +export function isReactElement(val) /*: boolean */ { return ( val.$$typeof === Symbol.for('react.test.json') || val.$$typeof === Symbol.for('react.element') ) } -export function isEmotionCssPropElementType(val: any): boolean { +export function isEmotionCssPropElementType(val) /*: boolean */ { return ( val.$$typeof === Symbol.for('react.element') && val.type.displayName === 'EmotionCssPropInternal' ) } -export function isStyledElementType(val: any): boolean { +export function isStyledElementType(val /* : any */) /* : boolean */ { if (val.$$typeof !== Symbol.for('react.element')) { return false } @@ -112,7 +135,7 @@ export function isStyledElementType(val: any): boolean { return type.__emotion_real === type } -export function isEmotionCssPropEnzymeElement(val: any): boolean { +export function isEmotionCssPropEnzymeElement(val /* : any */) /*: boolean */ { return ( val.$$typeof === Symbol.for('react.test.json') && val.type === 'EmotionCssPropInternal' @@ -120,7 +143,7 @@ export function isEmotionCssPropEnzymeElement(val: any): boolean { } const domElementPattern = /^((HTML|SVG)\w*)?Element$/ -export function isDOMElement(val: any): boolean { +export function isDOMElement(val) /*: boolean */ { return ( val.nodeType === 1 && val.constructor && @@ -129,15 +152,15 @@ export function isDOMElement(val: any): boolean { ) } -function isEnzymeElement(val: any): boolean { +function isEnzymeElement(val) /*: boolean */ { return typeof val.findWhere === 'function' } -function isCheerioElement(val: any): boolean { +function isCheerioElement(val) /*: boolean */ { return val.cheerio === '[cheerio object]' } -export function getClassNamesFromNodes(nodes: Array) { +export function getClassNamesFromNodes(nodes /*: Array */) { return nodes.reduce((selectors, node) => { if (isEnzymeElement(node)) { return getClassNamesFromEnzyme(selectors, node) @@ -154,7 +177,7 @@ const keyframesPattern = /^@keyframes\s+(animation-[^{\s]+)+/ const removeCommentPattern = /\/\*[\s\S]*?\*\//g -const getElementRules = (element: HTMLStyleElement): string[] => { +const getElementRules = (element /*: HTMLStyleElement */) /*: string[] */ => { const nonSpeedyRule = element.textContent if (nonSpeedyRule) { return [nonSpeedyRule] @@ -162,7 +185,10 @@ const getElementRules = (element: HTMLStyleElement): string[] => { if (!element.sheet) { return [] } - // $FlowFixMe - flow doesn't know about `cssRules` property + const rules = insertedRules.get(element.sheet) + if (rules) { + return rules + } return [].slice.call(element.sheet.cssRules).map(cssRule => cssRule.cssText) } @@ -180,9 +206,9 @@ const getKeyframesMap = rules => }, {}) export function getStylesFromClassNames( - classNames: Array, - elements: Array -): string { + classNames /*: Array */, + elements /*: Array */ +) /*: string */ { if (!classNames.length) { return '' } @@ -212,7 +238,7 @@ export function getStylesFromClassNames( const rules = flatMap(elements, getElementRules) let styles = rules - .map((rule: string) => { + .map((rule /*: string */) => { const match = rule.match(selectorPattern) if (!match) { return null @@ -259,35 +285,30 @@ export function getStylesFromClassNames( return (keyframesStyles + styles).replace(removeCommentPattern, '') } -export function getStyleElements(): Array { +export function getStyleElements() /*: Array */ { if (!isBrowser) { throw new Error( 'jest-emotion requires jsdom. See https://jestjs.io/docs/en/configuration#testenvironment-string for more information.' ) } const elements = Array.from(document.querySelectorAll('style[data-emotion]')) - // $FlowFixMe return elements } const unique = arr => Array.from(new Set(arr)) -export function getKeys(elements: Array) { +export function getKeys(elements /*: Array */) { const keys = unique( - elements.map( - element => - // $FlowFixMe we know it exists since we query for elements with this attribute - (element.getAttribute('data-emotion'): string) - ) + elements.map(element => element.getAttribute('data-emotion')) ).filter(Boolean) return keys } export function hasClassNames( - classNames: Array, - selectors: Array, - target?: string | RegExp -): boolean { + classNames /*: Array */, + selectors /*: Array */, + target /* ?: string | RegExp */ +) /*: boolean */ { // selectors is the classNames of specific css rule return selectors.some(selector => { // if no target, use className of the specific css rule and try to find it @@ -307,7 +328,10 @@ export function hasClassNames( }) } -export function getMediaRules(rules: Array, media: string): Array { +export function getMediaRules( + rules /*: Array */, + media /*: string */ +) /*: Array */ { return flatMap( rules.filter(rule => { if (rule.type !== '@media') { @@ -319,10 +343,10 @@ export function getMediaRules(rules: Array, media: string): Array { ) } -export function isPrimitive(test: any) { +export function isPrimitive(test) { return test !== Object(test) } -export function hasIntersection(left: any[], right: any[]) { +export function hasIntersection(left /* any[] */, right /* any[] */) { return left.some(value => right.includes(value)) } diff --git a/packages/jest/test/matchers.test.js b/packages/jest/test/matchers.test.js index 2ee34553b6..13ac3c955f 100644 --- a/packages/jest/test/matchers.test.js +++ b/packages/jest/test/matchers.test.js @@ -22,7 +22,7 @@ describe('toHaveStyleRule', () => { width: 100%; ` - it('matches styles on the top-most node passed in', () => { + test('matches styles on the top-most node passed in', () => { const tree = renderer .create(
@@ -40,7 +40,7 @@ describe('toHaveStyleRule', () => { expect(svgNode).not.toHaveStyleRule('color', 'red') }) - it('supports asymmetric matchers', () => { + test('supports asymmetric matchers', () => { const tree = renderer .create(
@@ -57,14 +57,14 @@ describe('toHaveStyleRule', () => { expect(svgNode).toHaveStyleRule('width', expect.stringMatching(/.*%$/)) }) - it('fails if no styles are found', () => { + test('fails if no styles are found', () => { const tree = renderer.create(
).toJSON() const result = toHaveStyleRule(tree, 'color', 'red') expect(result.pass).toBe(false) expect(result.message()).toBe('Property not found: color') }) - it('supports regex values', () => { + test('supports regex values', () => { const tree = renderer.create(
).toJSON() expect(tree).toHaveStyleRule('color', /red/) }) @@ -81,7 +81,7 @@ describe('toHaveStyleRule', () => { expect(resultPass.message()).toMatchSnapshot() }) - it('matches styles on the focus, hover targets', () => { + test('matches styles on the focus, hover targets', () => { const localDivStyle = css` color: white; &:hover { @@ -104,7 +104,7 @@ describe('toHaveStyleRule', () => { expect(tree).toHaveStyleRule('color', 'white') }) - it('matches styles on the nested component or html element', () => { + test('matches styles on the nested component or html element', () => { const Svg = styled('svg')` width: 100%; fill: blue; @@ -134,7 +134,7 @@ describe('toHaveStyleRule', () => { expect(tree).toHaveStyleRule('fill', 'green', { target: `${Svg}` }) }) - it('matches target styles by regex', () => { + test('matches target styles by regex', () => { const localDivStyle = css` a { color: yellow; @@ -154,7 +154,7 @@ describe('toHaveStyleRule', () => { expect(tree).toHaveStyleRule('color', 'yellow', { target: /a$/ }) }) - it('matches proper style for css', () => { + test('matches proper style for css', () => { const tree = renderer .create(
{ expect(tree).toHaveStyleRule('color', 'hotpink') }) - it('matches style of the media', () => { + test('matches style of the media', () => { const Svg = styled('svg')` width: 100%; ` @@ -212,7 +212,7 @@ describe('toHaveStyleRule', () => { }) }) - it('matches styles with target and media options', () => { + test('matches styles with target and media options', () => { const localDivStyle = css` color: white; @media (min-width: 420px) { @@ -240,7 +240,7 @@ describe('toHaveStyleRule', () => { expect(tree).toHaveStyleRule('color', 'white') }) - it('fails if option media invalid', () => { + test('fails if option media invalid', () => { const Div = styled('div')` font-size: 30px; @media (min-width: 420px) { @@ -257,7 +257,7 @@ describe('toHaveStyleRule', () => { expect(result.message()).toBe('Property not found: font-size') }) - it('matches styles for a component used as selector', () => { + test('matches styles for a component used as selector', () => { const Bar = styled.div`` const Foo = styled.div` @@ -278,7 +278,7 @@ describe('toHaveStyleRule', () => { expect(tree.children[0]).toHaveStyleRule('color', 'hotpink') }) - it('takes specificity into account when matching styles (basic)', () => { + test('takes specificity into account when matching styles (basic)', () => { const Bar = styled.div` color: yellow; ` @@ -302,7 +302,7 @@ describe('toHaveStyleRule', () => { expect(tree.children[0]).toHaveStyleRule('color', 'hotpink') }) - it('should throw a friendly error when it receives an array', () => { + test('should throw a friendly error when it receives an array', () => { const tree = renderer .create( <> @@ -323,7 +323,7 @@ describe('toHaveStyleRule', () => { ) }) ;(isReact16 ? describe : describe.skip)('enzyme', () => { - it('supports enzyme `mount` method', () => { + test('supports enzyme `mount` method', () => { const Component = () => (
@@ -338,7 +338,7 @@ describe('toHaveStyleRule', () => { expect(svgNode).not.toHaveStyleRule('color', 'red') }) - it('supports enzyme `render` method', () => { + test('supports enzyme `render` method', () => { const Component = () => (
@@ -353,7 +353,7 @@ describe('toHaveStyleRule', () => { expect(svgNode).not.toHaveStyleRule('color', 'red') }) - it('supports enzyme `shallow` method', () => { + test('supports enzyme `shallow` method', () => { const Component = () => (
@@ -368,7 +368,7 @@ describe('toHaveStyleRule', () => { expect(svgNode).not.toHaveStyleRule('color', 'red') }) - it('supports styled components', () => { + test('supports styled components', () => { const Div = styled('div')` color: red; ` diff --git a/packages/jest/test/printer.test.js b/packages/jest/test/printer.test.js index e7f0c0837a..470075bf39 100644 --- a/packages/jest/test/printer.test.js +++ b/packages/jest/test/printer.test.js @@ -1,4 +1,3 @@ -// @flow import React from 'react' import 'test-utils/legacy-env' import renderer from 'react-test-renderer' @@ -23,7 +22,7 @@ describe('jest-emotion with dom elements', () => { width: 100%; ` - it('replaces class names and inserts styles into React test component snapshots', () => { + test('replaces class names and inserts styles into React test component snapshots', () => { const tree = renderer .create(
@@ -39,7 +38,7 @@ describe('jest-emotion with dom elements', () => { expect(output).toMatchSnapshot() }) - it('replaces class names and inserts styles into DOM element snapshots', () => { + test('replaces class names and inserts styles into DOM element snapshots', () => { const divRef = React.createRef() render(
@@ -66,7 +65,7 @@ describe('jest-emotion with DOM elements disabled', () => { width: 100%; ` - it('replaces class names and inserts styles into React test component snapshots', () => { + test('replaces class names and inserts styles into React test component snapshots', () => { const tree = renderer .create(
@@ -82,7 +81,7 @@ describe('jest-emotion with DOM elements disabled', () => { expect(output).toMatchSnapshot() }) - it('does not replace class names or insert styles into DOM element snapshots', () => { + test('does not replace class names or insert styles into DOM element snapshots', () => { const divRef = React.createRef() render(
@@ -151,7 +150,7 @@ describe('jest-emotion with nested selectors', () => { } ` - it('replaces class names and inserts styles into React test component snapshots', () => { + test('replaces class names and inserts styles into React test component snapshots', () => { const tree = renderer.create(
).toJSON() const output = prettyFormat(tree, { diff --git a/packages/jest/test/prod.test.js b/packages/jest/test/prod.test.js new file mode 100644 index 0000000000..4e594e3c93 --- /dev/null +++ b/packages/jest/test/prod.test.js @@ -0,0 +1,71 @@ +import 'test-utils/next-env' +import renderer from 'react-test-renderer' +/** @jsx jsx */ +import * as React from 'react' +import { css, jsx } from '@emotion/react' +import { matchers } from '@emotion/jest' + +expect.extend(matchers) + +gate({ development: false }, ({ test }) => { + test('it prints fallback values', () => { + const tree = renderer + .create( +
+ {'emotion'} +
+ ) + .toJSON() + + expect(tree).toMatchInlineSnapshot(` +.emotion-0 { + background-color: #000; + background-color: #fff; +} + +.emotion-1 { + color: hotpink; +} + +
+ + emotion + +
+`) + }) + + test('it prints invalid declarations', () => { + const tree = renderer + .create( +
+ {'emotion'} +
+ ) + .toJSON() + + expect(tree).toMatchInlineSnapshot(` +.emotion-0 { + bazinga: joke; +} + +.emotion-1 { + color: hotpink; +} + +
+ + emotion + +
+`) + }) +}) diff --git a/packages/jest/types/enzyme.d.ts b/packages/jest/types/enzyme.d.ts index 7da6614d56..3fdd86e7fb 100644 --- a/packages/jest/types/enzyme.d.ts +++ b/packages/jest/types/enzyme.d.ts @@ -1,4 +1,4 @@ -// TypeScript Version: 2.9 +// TypeScript Version: 4.3 /// diff --git a/packages/jest/types/index.d.ts b/packages/jest/types/index.d.ts index fe89575347..758379af72 100644 --- a/packages/jest/types/index.d.ts +++ b/packages/jest/types/index.d.ts @@ -1,5 +1,5 @@ // Definitions by: Junyoung Clare Jang -// TypeScript Version: 2.9 +// TypeScript Version: 4.3 /// diff --git a/packages/jest/types/tslint.json b/packages/jest/types/tslint.json index a0d50da355..9ce68d413d 100644 --- a/packages/jest/types/tslint.json +++ b/packages/jest/types/tslint.json @@ -4,6 +4,7 @@ "array-type": [true, "generic"], "semicolon": false, "file-name-casing": false, - "strict-export-declare-modifiers": false + "strict-export-declare-modifiers": false, + "unnecessary-bind": false } } diff --git a/packages/memoize/CHANGELOG.md b/packages/memoize/CHANGELOG.md index 29b153ab48..47974e372b 100644 --- a/packages/memoize/CHANGELOG.md +++ b/packages/memoize/CHANGELOG.md @@ -1,5 +1,11 @@ # @emotion/memoize +## 0.9.0 + +### Minor Changes + +- [#2427](https://github.com/emotion-js/emotion/pull/2427) [`7f8db2d`](https://github.com/emotion-js/emotion/commit/7f8db2d7a900bb34995db66084a99d512811e33d) Thanks [@sarayourfriend](https://github.com/sarayourfriend)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + ## 0.8.1 ### Patch Changes diff --git a/packages/memoize/package.json b/packages/memoize/package.json index d017e54bf2..ad26014903 100644 --- a/packages/memoize/package.json +++ b/packages/memoize/package.json @@ -1,10 +1,10 @@ { "name": "@emotion/memoize", - "version": "0.8.1", + "version": "0.9.0", "description": "emotion's memoize utility", "main": "dist/emotion-memoize.cjs.js", "module": "dist/emotion-memoize.esm.js", - "types": "types/index.d.ts", + "types": "dist/emotion-memoize.cjs.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/memoize", "scripts": { @@ -15,15 +15,18 @@ }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "exports": { ".": { + "types": { + "import": "./dist/emotion-memoize.cjs.mjs", + "default": "./dist/emotion-memoize.cjs.js" + }, "module": "./dist/emotion-memoize.esm.js", "import": "./dist/emotion-memoize.cjs.mjs", "default": "./dist/emotion-memoize.cjs.js" diff --git a/packages/memoize/src/index.d.ts b/packages/memoize/src/index.d.ts deleted file mode 100644 index 9e46093759..0000000000 --- a/packages/memoize/src/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types' -export { default } from '../types' diff --git a/packages/memoize/src/index.js b/packages/memoize/src/index.js deleted file mode 100644 index b1e3741a18..0000000000 --- a/packages/memoize/src/index.js +++ /dev/null @@ -1,10 +0,0 @@ -// @flow - -export default function memoize(fn: string => V): string => V { - const cache = Object.create(null) - - return (arg: string) => { - if (cache[arg] === undefined) cache[arg] = fn(arg) - return cache[arg] - } -} diff --git a/packages/memoize/src/index.ts b/packages/memoize/src/index.ts new file mode 100644 index 0000000000..2f218b1c8c --- /dev/null +++ b/packages/memoize/src/index.ts @@ -0,0 +1,8 @@ +export default function memoize(fn: (arg: string) => V): (arg: string) => V { + const cache: Record = Object.create(null) + + return (arg: string) => { + if (cache[arg] === undefined) cache[arg] = fn(arg) + return cache[arg] + } +} diff --git a/packages/memoize/types/index.d.ts b/packages/memoize/types/index.d.ts index 23f3580f10..2c736dff8d 100644 --- a/packages/memoize/types/index.d.ts +++ b/packages/memoize/types/index.d.ts @@ -1,3 +1 @@ -type Fn = (key: string) => T - -export default function memoize(fn: Fn): Fn +export { default } from '..' diff --git a/packages/memoize/types/tslint.json b/packages/memoize/types/tslint.json index 2ab14e84ff..48756497b5 100644 --- a/packages/memoize/types/tslint.json +++ b/packages/memoize/types/tslint.json @@ -18,6 +18,8 @@ ], "no-unnecessary-generics": false, - "strict-export-declare-modifiers": false + "strict-export-declare-modifiers": false, + "no-default-import": false, + "unnecessary-bind": false } } diff --git a/packages/native/package.json b/packages/native/package.json index 2b7f451299..3021231b82 100644 --- a/packages/native/package.json +++ b/packages/native/package.json @@ -6,6 +6,10 @@ "module": "dist/emotion-native.esm.js", "exports": { ".": { + "types": { + "import": "./dist/emotion-native.cjs.mjs", + "default": "./dist/emotion-native.cjs.js" + }, "module": "./dist/emotion-native.esm.js", "import": "./dist/emotion-native.cjs.mjs", "default": "./dist/emotion-native.cjs.js" @@ -34,7 +38,7 @@ "@types/react-native": "^0.63.2", "react": "16.14.0", "react-native": "^0.63.2", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "dependencies": { "@emotion/primitives-core": "^11.11.0" diff --git a/packages/native/test/native-css.test.js b/packages/native/test/native-css.test.js index ac63ae78fe..b30723d34b 100644 --- a/packages/native/test/native-css.test.js +++ b/packages/native/test/native-css.test.js @@ -31,7 +31,6 @@ describe('Emotion native css', () => { // this test checks the keys instead of the objects // because we care about the order of the keys expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css({ color: 'green' }, `background-color:yellow;`, { flex: 2 }) @@ -39,7 +38,6 @@ describe('Emotion native css', () => { ) ).toEqual(['color', 'backgroundColor', 'flex']) expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css([ @@ -52,7 +50,6 @@ describe('Emotion native css', () => { ) ).toEqual(['color', 'backgroundColor', 'flex']) expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css([ @@ -68,7 +65,6 @@ describe('Emotion native css', () => { ) ).toEqual(['color', 'backgroundColor', 'flex']) expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css([ @@ -84,7 +80,7 @@ describe('Emotion native css', () => { ).toEqual(['color', 'flex', 'backgroundColor', 'flexGrow', 'flexDirection']) }) - it('allows function interpolations when this.mergedProps is defined', () => { + test('allows function interpolations when this.mergedProps is defined', () => { expect( StyleSheet.flatten( css.call({ thing: true }, props => ({ @@ -94,7 +90,7 @@ describe('Emotion native css', () => { ).toEqual({ color: 'hotpink' }) }) - it('works with nested functions', () => { + test('works with nested functions', () => { expect( StyleSheet.flatten( css.call({ thing: true }, props => () => ({ @@ -104,7 +100,7 @@ describe('Emotion native css', () => { ).toEqual({ color: 'hotpink' }) }) - it('works with functions in tagged template literals', () => { + test('works with functions in tagged template literals', () => { expect( StyleSheet.flatten( css.call( diff --git a/packages/native/test/native-styled.test.js b/packages/native/test/native-styled.test.js index ec992fcecd..b5538963dd 100644 --- a/packages/native/test/native-styled.test.js +++ b/packages/native/test/native-styled.test.js @@ -37,7 +37,7 @@ describe('Emotion native styled', () => { expect(tree).toMatchSnapshot() }) - it('should work with theming from @emotion/react', () => { + test('should work with theming from @emotion/react', () => { const Text = styled.Text` color: ${props => props.theme.backgroundColor}; ` @@ -73,7 +73,7 @@ describe('Emotion native styled', () => { expect(tree).toMatchSnapshot() }) - it('should work with StyleSheet.create API', () => { + test('should work with StyleSheet.create API', () => { const styles = StyleSheet.create({ foo: { color: 'red' } }) const Text = styled.Text` font-size: 10px; @@ -93,7 +93,7 @@ describe('Emotion native styled', () => { expect(tree).toMatchSnapshot() }) - it('should style any other component', () => { + test('should style any other component', () => { const Text = styled.Text` color: hotpink; ` @@ -106,7 +106,7 @@ describe('Emotion native styled', () => { expect(tree).toMatchSnapshot() }) - it('should pass props in withComponent', () => { + test('should pass props in withComponent', () => { const ViewOne = styled.View` background-color: ${props => props.color}; ` @@ -118,7 +118,7 @@ describe('Emotion native styled', () => { expect(treeTwo).toMatchSnapshot() }) - it('should render ', () => { + test('should render ', () => { const Image = styled.Image` border-radius: 2px; ` @@ -137,7 +137,7 @@ describe('Emotion native styled', () => { expect(tree).toMatchSnapshot() }) - it('Log error message if units are not specified when using shorthand properties', () => { + test('Log error message if units are not specified when using shorthand properties', () => { const Text = styled.Text` margin: 20px; padding: 20; @@ -150,7 +150,7 @@ describe('Emotion native styled', () => { ) }) - it('should render styles correctly from all nested style factories', () => { + test('should render styles correctly from all nested style factories', () => { const bgColor = color => css` background-color: ${color}; ` diff --git a/packages/native/types/resolved-condition.ts b/packages/native/types/resolved-condition.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/native/types/resolved-condition.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/native/types/tsconfig.json b/packages/native/types/tsconfig.json index 12a464ad1a..ae37b14af8 100644 --- a/packages/native/types/tsconfig.json +++ b/packages/native/types/tsconfig.json @@ -10,7 +10,11 @@ "target": "es5", "typeRoots": ["../"], "types": [], - "skipLibCheck": true + "skipLibCheck": true, + "paths": { + "#is-browser": ["./types/resolved-condition.ts"], + "#is-development": ["./types/resolved-condition.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/native/types/tslint.json b/packages/native/types/tslint.json index 75c63f4883..d3d5f2c1b2 100644 --- a/packages/native/types/tslint.json +++ b/packages/native/types/tslint.json @@ -19,6 +19,8 @@ ], "no-null-undefined-union": false, "no-unnecessary-generics": false, - "strict-export-declare-modifiers": false + "strict-export-declare-modifiers": false, + "unnecessary-bind": false, + "ban-ts-ignore": false } } diff --git a/packages/primitives-core/CHANGELOG.md b/packages/primitives-core/CHANGELOG.md index 1f4c876907..4649e9e2fc 100644 --- a/packages/primitives-core/CHANGELOG.md +++ b/packages/primitives-core/CHANGELOG.md @@ -1,5 +1,25 @@ # @emotion/primitives-core +## 11.13.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +## 11.12.0 + +### Minor Changes + +- [#2818](https://github.com/emotion-js/emotion/pull/2818) [`8546dd0`](https://github.com/emotion-js/emotion/commit/8546dd0) Thanks [@srmagura](https://github.com/srmagura)! - Source code has been migrated to TypeScript so from now on type declarations will be available in the published package. + +### Patch Changes + +- [#3208](https://github.com/emotion-js/emotion/pull/3208) [`56109e7`](https://github.com/emotion-js/emotion/commit/56109e79adcf916144250b52ed579f13e4e6e0cf) Thanks [@Andarist](https://github.com/Andarist)! - Only forward defined `ref`s to improve compatibility with the upcoming React 19 + ## 11.11.0 ### Patch Changes diff --git a/packages/primitives-core/package.json b/packages/primitives-core/package.json index 17e65a5622..fdb2db4153 100644 --- a/packages/primitives-core/package.json +++ b/packages/primitives-core/package.json @@ -1,9 +1,10 @@ { "name": "@emotion/primitives-core", - "version": "11.11.0", + "version": "11.13.0", "description": "Shared utilities for emotion primitives and native", "main": "dist/emotion-primitives-core.cjs.js", "module": "dist/emotion-primitives-core.esm.js", + "types": "dist/emotion-primitives-core.cjs.d.ts", "files": [ "src", "dist" @@ -17,7 +18,8 @@ "react": ">=16.8.0" }, "devDependencies": { - "@emotion/react": "11.11.4", + "@emotion/react": "11.13.0", + "@types/css-to-react-native": "^3.0.0", "react": "16.14.0" }, "homepage": "https://emotion.sh", @@ -42,20 +44,25 @@ }, "exports": { ".": { - "module": { - "browser": "./dist/emotion-primitives-core.browser.esm.js", - "default": "./dist/emotion-primitives-core.esm.js" + "types": { + "import": "./dist/emotion-primitives-core.cjs.mjs", + "default": "./dist/emotion-primitives-core.cjs.js" }, + "development": { + "module": "./dist/emotion-primitives-core.development.esm.js", + "import": "./dist/emotion-primitives-core.development.cjs.mjs", + "default": "./dist/emotion-primitives-core.development.cjs.js" + }, + "module": "./dist/emotion-primitives-core.esm.js", "import": "./dist/emotion-primitives-core.cjs.mjs", "default": "./dist/emotion-primitives-core.cjs.js" }, "./package.json": "./package.json" }, - "preconstruct": { - "exports": { - "envConditions": [ - "browser" - ] + "imports": { + "#is-development": { + "development": "./src/conditions/true.ts", + "default": "./src/conditions/false.ts" } } } diff --git a/packages/primitives-core/src/conditions/false.ts b/packages/primitives-core/src/conditions/false.ts new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/primitives-core/src/conditions/false.ts @@ -0,0 +1 @@ +export default false diff --git a/packages/primitives-core/src/conditions/true.ts b/packages/primitives-core/src/conditions/true.ts new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/primitives-core/src/conditions/true.ts @@ -0,0 +1 @@ +export default true diff --git a/packages/primitives-core/src/css.js b/packages/primitives-core/src/css.ts similarity index 75% rename from packages/primitives-core/src/css.js rename to packages/primitives-core/src/css.ts index 3d993c80f1..ec431c23df 100644 --- a/packages/primitives-core/src/css.js +++ b/packages/primitives-core/src/css.ts @@ -1,17 +1,23 @@ -// @flow -import transform from 'css-to-react-native' +import transform, { Style } from 'css-to-react-native' +import isDevelopment from '#is-development' +import { AbstractStyleSheet } from './types' import { interleave } from './utils' // this is for handleInterpolation // they're reset on every call to css // this is done so we don't create a new // handleInterpolation function on every css call -let styles -let generated = {} +let styles: unknown[] | undefined +let generated: Record = {} let buffer = '' -let lastType - -function handleInterpolation(interpolation: *, i: number, arr: Array<*>) { +let lastType: string | undefined + +function handleInterpolation( + this: unknown, + interpolation: any, + i: number, + arr: any[] +) { let type = typeof interpolation if (type === 'string') { @@ -21,7 +27,7 @@ function handleInterpolation(interpolation: *, i: number, arr: Array<*>) { if (type === 'function') { if (this === undefined) { - if (process.env.NODE_ENV !== 'production') { + if (isDevelopment) { console.error( 'Interpolating functions in css calls is not allowed.\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\n' + @@ -31,15 +37,7 @@ function handleInterpolation(interpolation: *, i: number, arr: Array<*>) { ) } } else { - handleInterpolation.call( - this, - interpolation( - // $FlowFixMe - this - ), - i, - arr - ) + handleInterpolation.call(this, interpolation(this), i, arr) } return } @@ -49,7 +47,7 @@ function handleInterpolation(interpolation: *, i: number, arr: Array<*>) { if (lastType === 'string' && (isRnStyle || isIrrelevant)) { let converted = convertStyles(buffer) if (converted !== undefined) { - styles.push(converted) + styles!.push(converted) } buffer = '' } @@ -63,13 +61,13 @@ function handleInterpolation(interpolation: *, i: number, arr: Array<*>) { if (arr.length - 1 === i) { let converted = convertStyles(buffer) if (converted !== undefined) { - styles.push(converted) + styles!.push(converted) } buffer = '' } } if (isRnStyle) { - styles.push(interpolation) + styles!.push(interpolation) } if (Array.isArray(interpolation)) { interpolation.forEach(handleInterpolation, this) @@ -79,10 +77,10 @@ function handleInterpolation(interpolation: *, i: number, arr: Array<*>) { // Use platform specific StyleSheet method for creating the styles. // This enables us to use the css``/css({}) in any environment (Native | Sketch | Web) -export function createCss(StyleSheet: Object) { - return function css(...args: any) { +export function createCss(StyleSheet: AbstractStyleSheet) { + return function css(this: unknown, ...args: any[]) { const prevBuffer = buffer - let vals + let vals: any[] // these are declared earlier // this is done so we don't create a new @@ -94,7 +92,7 @@ export function createCss(StyleSheet: Object) { if (args[0] == null || args[0].raw === undefined) { vals = args } else { - vals = interleave(args) + vals = interleave(args as [any, ...any[]]) } try { @@ -116,7 +114,7 @@ export function createCss(StyleSheet: Object) { let propertyValuePattern = /\s*([^\s]+)\s*:\s*(.+?)\s*$/ -function convertPropertyValue(style) { +function convertPropertyValue(this: [string, string][], style: string): void { // Get prop name and prop value let match = propertyValuePattern.exec(style) // match[2] will be " " in cases where there is no value @@ -126,14 +124,14 @@ function convertPropertyValue(style) { // be the whole string so we remove it match.shift() // yes i know this looks funny - this.push(match) + this.push(match as unknown as [string, string]) } } -function convertStyles(str: string) { +function convertStyles(str: string): Style | undefined { if (str.trim() === '') return - const stylePairs = [] + const stylePairs: [string, string][] = [] const parsedString = str.split(';') @@ -142,9 +140,9 @@ function convertStyles(str: string) { try { return transform(stylePairs) } catch (error) { - const msg = error.message + const msg = (error as { message?: string } | undefined)?.message - if (msg.includes('Failed to parse declaration')) { + if (msg && msg.includes('Failed to parse declaration')) { const values = msg .replace('Failed to parse declaration ', '') .replace(/"/g, '') diff --git a/packages/primitives-core/src/index.js b/packages/primitives-core/src/index.ts similarity index 100% rename from packages/primitives-core/src/index.js rename to packages/primitives-core/src/index.ts diff --git a/packages/primitives-core/src/styled.js b/packages/primitives-core/src/styled.ts similarity index 60% rename from packages/primitives-core/src/styled.js rename to packages/primitives-core/src/styled.ts index f5771552e8..1248833dbd 100644 --- a/packages/primitives-core/src/styled.js +++ b/packages/primitives-core/src/styled.ts @@ -1,25 +1,31 @@ -// @flow import * as React from 'react' import { interleave } from './utils' import { ThemeContext } from '@emotion/react' import { createCss } from './css' +import { AbstractStyleSheet } from './types' -let testOmitPropsOnComponent = prop => prop !== 'theme' && prop !== 'as' +let testOmitPropsOnComponent = (prop: string) => + prop !== 'theme' && prop !== 'as' -type CreateStyledOptions = { - getShouldForwardProp: (cmp: React.ElementType) => (prop: string) => boolean +interface CreateStyledOptions { + getShouldForwardProp(cmp: React.ElementType): (prop: string) => boolean } -type StyledOptions = { - shouldForwardProp?: (prop: string) => boolean +interface StyledOptions { + shouldForwardProp?(prop: string): boolean +} + +type StyledProps = Record & { + as?: React.ElementType } export function createStyled( - StyleSheet: Object, - { - getShouldForwardProp = () => testOmitPropsOnComponent - }: CreateStyledOptions = {} + StyleSheet: AbstractStyleSheet, + options?: CreateStyledOptions ) { + const getShouldForwardProp = + options?.getShouldForwardProp ?? (() => testOmitPropsOnComponent) + const css = createCss(StyleSheet) return function createEmotion( @@ -34,18 +40,17 @@ export function createStyled( shouldForwardProp || getShouldForwardProp(component) let shouldUseAs = !defaultShouldForwardProp('as') - return function createStyledComponent(...rawStyles: *) { - let styles + return function createStyledComponent(...rawStyles: any[]) { + let styles: any[] if (rawStyles[0] == null || rawStyles[0].raw === undefined) { styles = rawStyles } else { - styles = interleave(rawStyles) + styles = interleave(rawStyles as [any, ...any[]]) } // do we really want to use the same infra as the web since it only really uses theming? - // $FlowFixMe - let Styled = React.forwardRef((props, ref) => { + let Styled = React.forwardRef((props, ref) => { const finalTag = (shouldUseAs && props.as) || component let mergedProps = props @@ -62,7 +67,7 @@ export function createStyled( ? getShouldForwardProp(finalTag) : defaultShouldForwardProp - let newProps = {} + let newProps: Record = {} for (let key in props) { if (shouldUseAs && key === 'as') continue @@ -71,25 +76,33 @@ export function createStyled( newProps[key] = props[key] } } - newProps.style = [css.apply(mergedProps, styles), props.style] - newProps.ref = ref + if (ref) { + newProps.ref = ref + } - // $FlowFixMe return React.createElement(finalTag, newProps) }) - // $FlowFixMe - Styled.withComponent = (newComponent: React.ElementType) => - createEmotion(newComponent)(...styles) Styled.displayName = `emotion(${getDisplayName(component)})` - return Styled + const withComponent = (newComponent: React.ElementType) => + createEmotion(newComponent)(...styles) + + const castedStyled = Styled as typeof Styled & { + withComponent: typeof withComponent + } + + castedStyled.withComponent = withComponent + + return castedStyled } } } -const getDisplayName = primitive => +const getDisplayName = ( + primitive: string | { displayName?: string; name?: string } +) => typeof primitive === 'string' ? primitive : primitive.displayName || primitive.name || 'Styled' diff --git a/packages/primitives-core/src/types.ts b/packages/primitives-core/src/types.ts new file mode 100644 index 0000000000..f606163c52 --- /dev/null +++ b/packages/primitives-core/src/types.ts @@ -0,0 +1,10 @@ +type NamedStyles = { [P in keyof T]: unknown } + +// This is based on the StyleSheet type from @types/react-native +export interface AbstractStyleSheet { + create | NamedStyles>( + styles: T | NamedStyles + ): T + + flatten(style?: unknown[]): unknown +} diff --git a/packages/primitives-core/src/utils.js b/packages/primitives-core/src/utils.ts similarity index 61% rename from packages/primitives-core/src/utils.js rename to packages/primitives-core/src/utils.ts index 953c2043dc..49ee502438 100644 --- a/packages/primitives-core/src/utils.js +++ b/packages/primitives-core/src/utils.ts @@ -1,8 +1,8 @@ -// @flow - -export function interleave(vals: Array<*>) { +export function interleave( + vals: [TemplateStringsArray, ...unknown[]] +): unknown[] { let strings = vals[0] - let finalArray = [strings[0]] + let finalArray: unknown[] = [strings[0]] for (let i = 1, len = vals.length; i < len; i++) { finalArray.push(vals[i]) if (strings[i] !== undefined) { diff --git a/packages/primitives/CHANGELOG.md b/packages/primitives/CHANGELOG.md index 750c5ab50d..2146ca7a45 100644 --- a/packages/primitives/CHANGELOG.md +++ b/packages/primitives/CHANGELOG.md @@ -1,5 +1,16 @@ # @emotion/primitives +## 11.13.0 + +### Minor Changes + +- [#3215](https://github.com/emotion-js/emotion/pull/3215) [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5) Thanks [@Andarist](https://github.com/Andarist)! - Added `edge-light` and `workerd` conditions to `package.json` manifest to better serve users using Vercel Edge and Cloudflare Workers. + +### Patch Changes + +- Updated dependencies [[`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b)]: + - @emotion/primitives-core@11.13.0 + ## 11.11.0 ### Patch Changes diff --git a/packages/primitives/package.json b/packages/primitives/package.json index 7f58c1366c..3553ca13ab 100644 --- a/packages/primitives/package.json +++ b/packages/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@emotion/primitives", - "version": "11.11.0", + "version": "11.13.0", "main": "dist/emotion-primitives.cjs.js", "module": "dist/emotion-primitives.esm.js", "files": [ @@ -11,7 +11,7 @@ "dependencies": { "@emotion/babel-plugin": "^11.11.0", "@emotion/is-prop-valid": "^1.2.1", - "@emotion/primitives-core": "^11.11.0" + "@emotion/primitives-core": "^11.13.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -40,15 +40,13 @@ "publishConfig": { "access": "public" }, - "browser": { - "./dist/emotion-primitives.esm.js": "./dist/emotion-primitives.browser.esm.js" - }, "exports": { ".": { - "module": { - "browser": "./dist/emotion-primitives.browser.esm.js", - "default": "./dist/emotion-primitives.esm.js" + "types": { + "import": "./dist/emotion-primitives.cjs.mjs", + "default": "./dist/emotion-primitives.cjs.js" }, + "module": "./dist/emotion-primitives.esm.js", "import": "./dist/emotion-primitives.cjs.mjs", "default": "./dist/emotion-primitives.cjs.js" }, @@ -59,10 +57,7 @@ "exports": { "extra": { "./macro": "./macro.js" - }, - "envConditions": [ - "browser" - ] + } } } } diff --git a/packages/primitives/src/conditions/false.js b/packages/primitives/src/conditions/false.js new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/primitives/src/conditions/false.js @@ -0,0 +1 @@ +export default false diff --git a/packages/primitives/src/conditions/true.js b/packages/primitives/src/conditions/true.js new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/primitives/src/conditions/true.js @@ -0,0 +1 @@ +export default true diff --git a/packages/primitives/src/index.js b/packages/primitives/src/index.js index 0dcb3a0d03..a7155513cc 100644 --- a/packages/primitives/src/index.js +++ b/packages/primitives/src/index.js @@ -1,4 +1,3 @@ -// @flow import { StyleSheet, Text, View, Image } from 'react-primitives' import { createCss } from '@emotion/primitives-core' diff --git a/packages/primitives/src/styled.js b/packages/primitives/src/styled.js index 894812d670..6e67d9b9f9 100644 --- a/packages/primitives/src/styled.js +++ b/packages/primitives/src/styled.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import { StyleSheet, View, Text, Image } from 'react-primitives' import { createStyled } from '@emotion/primitives-core' @@ -7,7 +6,7 @@ import { testPickPropsOnOtherComponent } from './test-props' -function getShouldForwardProp(component: React.ElementType) { +function getShouldForwardProp(component /*: React.ElementType */) { switch (component) { case View: case Text: @@ -22,6 +21,7 @@ function getShouldForwardProp(component: React.ElementType) { * a function that returns a styled component which render styles on multiple targets with same code */ +/* type CreateStyledComponent = ( ...styles: any ) => React.StatelessFunctionalComponent & { @@ -35,7 +35,8 @@ export type Styled = BaseStyled & { Text: CreateStyledComponent, Image: CreateStyledComponent } +*/ -let styled: Styled = createStyled(StyleSheet, { getShouldForwardProp }) +let styled /*: Styled */ = createStyled(StyleSheet, { getShouldForwardProp }) export { styled } diff --git a/packages/primitives/src/test-props.js b/packages/primitives/src/test-props.js index aa19f7f78f..ad72f3037a 100644 --- a/packages/primitives/src/test-props.js +++ b/packages/primitives/src/test-props.js @@ -1,4 +1,3 @@ -// @flow import isPropValid from '@emotion/is-prop-valid' const forwardableProps = { @@ -49,7 +48,7 @@ const forwardableProps = { textBreakStrategy: true } -export function testPickPropsOnPrimitiveComponent(prop: string) { +export function testPickPropsOnPrimitiveComponent(prop /*: string */) { return ( forwardableProps[prop] === true || // This will allow the standard react props @@ -59,6 +58,6 @@ export function testPickPropsOnPrimitiveComponent(prop: string) { ) } -export function testPickPropsOnOtherComponent(prop: string) { +export function testPickPropsOnOtherComponent(prop /*: string */) { return prop !== 'theme' } diff --git a/packages/primitives/test/css.test.js b/packages/primitives/test/css.test.js index 93fc9b2199..500b561b04 100644 --- a/packages/primitives/test/css.test.js +++ b/packages/primitives/test/css.test.js @@ -1,4 +1,3 @@ -// @flow import { css } from '@emotion/primitives' import { StyleSheet } from 'react-native' @@ -29,7 +28,6 @@ test('order with string and object', () => { // this test checks the keys instead of the objects // because we care about the order of the keys expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css({ color: 'green' }, `background-color:yellow;`, { flex: 2 }) @@ -37,7 +35,6 @@ test('order with string and object', () => { ) ).toEqual(['color', 'backgroundColor', 'flex']) expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css([ @@ -50,7 +47,6 @@ test('order with string and object', () => { ) ).toEqual(['color', 'backgroundColor', 'flex']) expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css([ @@ -66,7 +62,6 @@ test('order with string and object', () => { ) ).toEqual(['color', 'backgroundColor', 'flex']) expect( - // $FlowFixMe Object.keys( StyleSheet.flatten( css([ @@ -82,7 +77,7 @@ test('order with string and object', () => { ).toEqual(['color', 'flex', 'backgroundColor', 'flexGrow', 'flexDirection']) }) -it('allows function interpolations when this is defined', () => { +test('allows function interpolations when this is defined', () => { expect( StyleSheet.flatten( css.call({ thing: true }, props => ({ @@ -92,7 +87,7 @@ it('allows function interpolations when this is defined', () => { ).toEqual({ color: 'hotpink' }) }) -it('works with nested functions', () => { +test('works with nested functions', () => { expect( StyleSheet.flatten( css.call({ thing: true }, props => () => ({ @@ -102,7 +97,7 @@ it('works with nested functions', () => { ).toEqual({ color: 'hotpink' }) }) -it('works with functions in tagged template literals', () => { +test('works with functions in tagged template literals', () => { expect( StyleSheet.flatten( css.call( diff --git a/packages/primitives/test/emotion-primitives.test.js b/packages/primitives/test/emotion-primitives.test.js index 035b08c128..547e822ecb 100644 --- a/packages/primitives/test/emotion-primitives.test.js +++ b/packages/primitives/test/emotion-primitives.test.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import renderer from 'react-test-renderer' import { Text, StyleSheet } from 'react-primitives' @@ -17,7 +16,6 @@ describe('Emotion primitives', () => { }) test('should throw an error when used invalid primitive', () => { - // $FlowFixMe: expect error expect(() => styled.TEXT({})).toThrow() }) @@ -29,7 +27,6 @@ describe('Emotion primitives', () => { ` const tree = renderer .create( - // $FlowFixMe Emotion Primitives @@ -38,7 +35,7 @@ describe('Emotion primitives', () => { expect(tree).toMatchSnapshot() }) - it('should work with theming from @emotion/react', () => { + test('should work with theming from @emotion/react', () => { const Text = styled.Text` color: ${props => props.theme.backgroundColor}; ` @@ -46,7 +43,6 @@ describe('Emotion primitives', () => { const tree = renderer .create( - {/* $FlowFixMe */} Hello World ) @@ -55,14 +51,13 @@ describe('Emotion primitives', () => { expect(tree).toMatchSnapshot() }) - it('should unmount with theming', () => { + test('should unmount with theming', () => { const StyledText = styled.Text` display: ${props => props.theme.display}; ` const { container, unmount } = render( - {/* $FlowFixMe */} Hello World @@ -78,7 +73,6 @@ describe('Emotion primitives', () => { color: props.decor })) const tree = renderer - // $FlowFixMe .create(Emotion Primitives) .toJSON() expect(tree).toMatchSnapshot() @@ -89,22 +83,18 @@ describe('Emotion primitives', () => { color: hotpink; ` const tree = renderer - .create( - // $FlowFixMe - Emotion primitives - ) + .create(Emotion primitives) .toJSON() expect(tree).toMatchSnapshot() }) - it('should work with StyleSheet.create API', () => { + test('should work with StyleSheet.create API', () => { const styles = StyleSheet.create({ foo: { color: 'red' } }) const Text = styled.Text` font-size: 10px; ` const tree = renderer - // $FlowFixMe .create(Emotion Primitives) .toJSON() expect(tree).toMatchSnapshot() @@ -114,28 +104,25 @@ describe('Emotion primitives', () => { const StyledText = styled.Text` color: ${props => props.decor}; ` - // $FlowFixMe const Name = StyledText.withComponent(Text) const tree = renderer.create(Mike).toJSON() expect(tree).toMatchSnapshot() }) - it('should style any other component', () => { + test('should style any other component', () => { const Text = styled.Text` color: hotpink; ` - // $FlowFixMe const Title = () => Hello World const StyledTitle = styled(Title)` font-size: 20px; font-style: ${props => props.sty}; ` - // $FlowFixMe const tree = renderer.create().toJSON() expect(tree).toMatchSnapshot() }) - it('ref', () => { + test('ref', () => { const StyledText = styled.Text` color: hotpink; ` @@ -147,13 +134,11 @@ describe('Emotion primitives', () => { unmount() }) - it('should pass props in withComponent', () => { + test('should pass props in withComponent', () => { const ViewOne = styled.View` background-color: ${props => props.color}; ` - // $FlowFixMe const treeOne = renderer.create() - // $FlowFixMe const ViewTwo = ViewOne.withComponent(Text) const treeTwo = renderer.create() @@ -161,13 +146,12 @@ describe('Emotion primitives', () => { expect(treeTwo).toMatchSnapshot() }) - it('should render ', () => { + test('should render ', () => { const Image = styled.Image` border: 2px solid hotpink; ` const tree = renderer .create( - // $FlowFixMe { test('custom shouldForwardProp works', () => { const Text = styled.Text`` const Title = props => - // $FlowFixMe const StyledTitle = styled(Title, { shouldForwardProp: prop => prop !== 'color' && prop !== 'theme' })` diff --git a/packages/primitives/test/no-babel/basic.test.js b/packages/primitives/test/no-babel/basic.test.js index be39d3ab15..7697ac1256 100644 --- a/packages/primitives/test/no-babel/basic.test.js +++ b/packages/primitives/test/no-babel/basic.test.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import styled, { css } from '@emotion/primitives' import renderer from 'react-test-renderer' @@ -48,7 +47,6 @@ test('should render the primitive when styles applied using object style notatio ` const tree = renderer .create( - // $FlowFixMe Emotion Primitives diff --git a/packages/primitives/test/warnings.test.js b/packages/primitives/test/warnings.test.js index 7aa51c2bb2..66544801c2 100644 --- a/packages/primitives/test/warnings.test.js +++ b/packages/primitives/test/warnings.test.js @@ -1,14 +1,12 @@ -// @flow import { css } from '@emotion/primitives' -// $FlowFixMe console.error = jest.fn() afterEach(() => { jest.clearAllMocks() }) -it('does warn when functions are passed to cx calls ', () => { +test('does warn when functions are passed to cx calls ', () => { css(() => ({})) expect(console.error).toBeCalledWith( 'Interpolating functions in css calls is not allowed.\n' + diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index c88bb256e1..a1ddd19427 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,44 @@ # @emotion/react +## 11.13.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +- [#3215](https://github.com/emotion-js/emotion/pull/3215) [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5) Thanks [@Andarist](https://github.com/Andarist)! - Added `edge-light` and `workerd` conditions to `package.json` manifest to better serve users using Vercel Edge and Cloudflare Workers. + +### Patch Changes + +- Updated dependencies [[`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b), [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5)]: + - @emotion/cache@11.13.0 + - @emotion/serialize@1.3.0 + - @emotion/use-insertion-effect-with-fallbacks@1.1.0 + - @emotion/utils@1.4.0 + +## 11.12.0 + +### Minor Changes + +- [#2815](https://github.com/emotion-js/emotion/pull/2815) [`65a1eea`](https://github.com/emotion-js/emotion/commit/65a1eea156a15603cd9ded42769a8ca226cf9450) Thanks [@srmagura](https://github.com/srmagura)! - Automatic labeling at runtime is now an opt-in feature. Define `globalThis.EMOTION_RUNTIME_AUTO_LABEL = true` before Emotion gets initialized to enable it. + +### Patch Changes + +- [#3206](https://github.com/emotion-js/emotion/pull/3206) [`d1994c4`](https://github.com/emotion-js/emotion/commit/d1994c460761ef37a3d12c587910c4e5b0e6f682) Thanks [@DiegoAndai](https://github.com/DiegoAndai)! - Improved compatibility with the upcoming `@types/react` for React 19 where the global `JSX` namespace doesn't exist anymore + +- [#3208](https://github.com/emotion-js/emotion/pull/3208) [`56109e7`](https://github.com/emotion-js/emotion/commit/56109e79adcf916144250b52ed579f13e4e6e0cf) Thanks [@Andarist](https://github.com/Andarist)! - Only forward defined `ref`s to improve compatibility with the upcoming React 19 + +- Updated dependencies [[`9ca22c6`](https://github.com/emotion-js/emotion/commit/9ca22c6c23e9effa086d161a9b0ae1c645686680), [`b1d16b0`](https://github.com/emotion-js/emotion/commit/b1d16b087d057524f374e347fdfd6a03e505107a), [`16d8a8c`](https://github.com/emotion-js/emotion/commit/16d8a8c2198461c4842c73048b406c346a70aa59)]: + - @emotion/serialize@1.2.0 + - @emotion/weak-memoize@0.4.0 + - @emotion/utils@1.3.0 + - @emotion/babel-plugin@11.12.0 + - @emotion/cache@11.12.0 + ## 11.11.4 ### Patch Changes diff --git a/packages/react/__tests__/__snapshots__/server.js.snap b/packages/react/__tests__/__snapshots__/server.js.snap index f697e11d0f..3e4665ee44 100644 --- a/packages/react/__tests__/__snapshots__/server.js.snap +++ b/packages/react/__tests__/__snapshots__/server.js.snap @@ -34,10 +34,10 @@ exports[`ssr global with keyframes 1`] = ` `; exports[`ssr keyframes 1`] = ` - -
+
`; @@ -119,13 +119,13 @@ exports[`ssr with old api global with keyframes 1`] = ` `; exports[`ssr with old api keyframes 1`] = ` - - -
+
`; diff --git a/packages/react/__tests__/at-import.js b/packages/react/__tests__/at-import.js index 82f8e26445..338b8077a6 100644 --- a/packages/react/__tests__/at-import.js +++ b/packages/react/__tests__/at-import.js @@ -1,5 +1,3 @@ -// @flow -import 'test-utils/prod-mode' import * as React from 'react' /** @jsx jsx */ import { jsx } from '@emotion/react' @@ -7,46 +5,45 @@ import { render, unmountComponentAtNode } from 'react-dom' import { Global, css } from '@emotion/react' beforeEach(() => { - // $FlowFixMe document.head.innerHTML = '' - // $FlowFixMe document.body.innerHTML = `
` }) -test('basic', () => { - render( - -
- { + test('basic', () => { + render( + +
+ - , // $FlowFixMe - document.getElementById('root') - ) - expect(document.head).toMatchSnapshot() - expect(document.body).toMatchSnapshot() - let elements = document.querySelectorAll('style') - let rules = [] - for (let element of elements) { - // $FlowFixMe - for (let cssRule of element.sheet.cssRules) { - rules.push(cssRule.cssText) + h1 { + color: hotpink; + } + `} + /> + , + document.getElementById('root') + ) + expect(document.head).toMatchSnapshot() + expect(document.body).toMatchSnapshot() + let elements = document.querySelectorAll('style') + let rules = [] + for (let element of elements) { + for (let cssRule of element.sheet.cssRules) { + rules.push(cssRule.cssText) + } } - } - expect(rules).toMatchInlineSnapshot(` + expect(rules).toMatchInlineSnapshot(` [ "@import url(https://some-url);", "h1 {color: hotpink;}", ".css-1lrxbo5 {color: hotpink;}", ] `) - unmountComponentAtNode(document.getElementById('root')) - expect(document.head).toMatchSnapshot() - expect(document.body).toMatchSnapshot() + unmountComponentAtNode(document.getElementById('root')) + expect(document.head).toMatchSnapshot() + expect(document.body).toMatchSnapshot() + }) }) diff --git a/packages/react/__tests__/babel/__snapshots__/source-map-server.js.snap b/packages/react/__tests__/babel/__snapshots__/source-map-server.js.snap index 66744f44d2..6dffe6e758 100644 --- a/packages/react/__tests__/babel/__snapshots__/source-map-server.js.snap +++ b/packages/react/__tests__/babel/__snapshots__/source-map-server.js.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`basic 1`] = `"
some hotpink text
"`; +exports[`basic 1`] = `"
some hotpink text
"`; diff --git a/packages/react/__tests__/babel/source-map-server.js b/packages/react/__tests__/babel/source-map-server.js index 60ecf18571..47d82f307b 100644 --- a/packages/react/__tests__/babel/source-map-server.js +++ b/packages/react/__tests__/babel/source-map-server.js @@ -1,8 +1,7 @@ /** @jsx jsx * @jest-environment node */ -// @flow -import 'test-utils/dev-mode' + import { jsx } from '@emotion/react' import { renderToString } from 'react-dom/server' diff --git a/packages/react/__tests__/class-names.js b/packages/react/__tests__/class-names.js index d165f3b593..c6edd021d3 100644 --- a/packages/react/__tests__/class-names.js +++ b/packages/react/__tests__/class-names.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import 'test-utils/next-env' import { ClassNames, ThemeProvider } from '@emotion/react' @@ -20,7 +19,7 @@ test('css', () => { expect(tree.toJSON()).toMatchSnapshot() }) -it('should get the theme', () => { +test('should get the theme', () => { const tree = renderer.create( diff --git a/packages/react/__tests__/clone-element.js b/packages/react/__tests__/clone-element.js index dedd52c62b..8a73c23938 100644 --- a/packages/react/__tests__/clone-element.js +++ b/packages/react/__tests__/clone-element.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import { jsx } from '@emotion/react' import * as React from 'react' diff --git a/packages/react/__tests__/compat/browser.js b/packages/react/__tests__/compat/browser.js index 450a1d2677..c4b46a1cc2 100644 --- a/packages/react/__tests__/compat/browser.js +++ b/packages/react/__tests__/compat/browser.js @@ -1,6 +1,4 @@ -// @flow /** @jsx jsx */ -import 'test-utils/dev-mode' import { throwIfFalsy } from 'test-utils' import { jsx, CacheProvider } from '@emotion/react' import { render } from '@testing-library/react' diff --git a/packages/react/__tests__/compat/server.js b/packages/react/__tests__/compat/server.js index 08218a2513..4e72d857c1 100644 --- a/packages/react/__tests__/compat/server.js +++ b/packages/react/__tests__/compat/server.js @@ -1,6 +1,5 @@ /** @jsx jsx * @jest-environment node - * @flow */ import { jsx, Global } from '@emotion/react' import createEmotionServer from '@emotion/server/create-instance' diff --git a/packages/react/__tests__/css-cache-hash.js b/packages/react/__tests__/css-cache-hash.js index 5e1a4fd55a..f7428bf46c 100644 --- a/packages/react/__tests__/css-cache-hash.js +++ b/packages/react/__tests__/css-cache-hash.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { jsx, css } from '@emotion/react' diff --git a/packages/react/__tests__/css.js b/packages/react/__tests__/css.js index 9631e612e8..c0084b03fb 100644 --- a/packages/react/__tests__/css.js +++ b/packages/react/__tests__/css.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { safeQuerySelector } from 'test-utils' @@ -8,22 +7,23 @@ import { render } from '@testing-library/react' import renderer from 'react-test-renderer' import createCache from '@emotion/cache' -// $FlowFixMe console.error = jest.fn() -// $FlowFixMe console.warn = jest.fn() +beforeEach(() => { + delete globalThis.EMOTION_RUNTIME_AUTO_LABEL +}) + afterEach(() => { jest.clearAllMocks() safeQuerySelector('body').innerHTML = '' }) -const SomeComponent = (props: { lol: true }) => (props.lol ? 'yes' : 'no') +const SomeComponent = (props /*: { lol: true } */) => (props.lol ? 'yes' : 'no') // test to make sure flow prop errors work. // should probably try to make it so that components that require className props // and have the css prop passed to them don't have type errors -// $FlowFixMe ; // eslint-disable-line no-unused-expressions test('thing', () => { @@ -189,7 +189,27 @@ test('speedy option from a custom cache is inherited for styles', () = expect(safeQuerySelector('body style').textContent).toEqual('') }) +test('does not autoLabel without babel or EMOTION_RUNTIME_AUTO_LABEL', () => { + let SomeComp = props => { + return ( +
+ something +
+ ) + } + const tree = renderer.create() + + expect(tree.toJSON().props.className).toMatch(/css-[^-]+/) +}) + test('autoLabel without babel', () => { + globalThis.EMOTION_RUNTIME_AUTO_LABEL = true + let SomeComp = props => { return (
{ }) test('autoLabel without babel (sanitized)', () => { + globalThis.EMOTION_RUNTIME_AUTO_LABEL = true + let SomeComp$ = props => { return (
@@ -223,7 +245,7 @@ test('autoLabel without babel (sanitized)', () => { }) test('overwrite styles from parent', () => { - let SomeComponent = (props: Object) => ( + let SomeComponent = (props /*: Object */) => (
{ }) test('applies class when css prop is set to nil on wrapper component', () => { - const Button = (props: any) => ( - + } */ + ) => const tree = renderer.create( @@ -341,6 +360,6 @@ it("doesn't try to insert invalid rules caused by object style's value being fal ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(`[]`) - expect((console.warn: any).mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.error.mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.warn.mock.calls).toMatchInlineSnapshot(`[]`) }) diff --git a/packages/react/__tests__/custom-cache.js b/packages/react/__tests__/custom-cache.js index 2ccf1e3364..43907de7a4 100644 --- a/packages/react/__tests__/custom-cache.js +++ b/packages/react/__tests__/custom-cache.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import createCache from '@emotion/cache' import { CacheProvider, Global, jsx } from '@emotion/react' diff --git a/packages/react/__tests__/element.js b/packages/react/__tests__/element.js index f4a89dc897..9206e89d6b 100644 --- a/packages/react/__tests__/element.js +++ b/packages/react/__tests__/element.js @@ -1,6 +1,5 @@ // @flow /** @jsx jsx */ -import 'test-utils/dev-mode' import { render } from '@testing-library/react' import { jsx, css, CacheProvider, ThemeProvider } from '@emotion/react' import createCache from '@emotion/cache' diff --git a/packages/react/__tests__/global-with-theme.js b/packages/react/__tests__/global-with-theme.js index 32b0d46c72..ed80088dee 100644 --- a/packages/react/__tests__/global-with-theme.js +++ b/packages/react/__tests__/global-with-theme.js @@ -1,11 +1,8 @@ -// @flow -import 'test-utils/dev-mode' import * as React from 'react' import { render } from '@testing-library/react' import { Global, ThemeProvider } from '@emotion/react' beforeEach(() => { - // $FlowFixMe document.head.innerHTML = '' }) diff --git a/packages/react/__tests__/global.js b/packages/react/__tests__/global.js index 2ecc075407..a9258c6e2d 100644 --- a/packages/react/__tests__/global.js +++ b/packages/react/__tests__/global.js @@ -1,5 +1,3 @@ -// @flow -import 'test-utils/dev-mode' import * as React from 'react' import { render } from '@testing-library/react' import { @@ -15,7 +13,6 @@ import createCache from '@emotion/cache' console.error = jest.fn() beforeEach(() => { - // $FlowFixMe document.head.innerHTML = '' jest.resetAllMocks() }) @@ -76,7 +73,6 @@ test('no React hook order violations', () => { const theme = { color: 'blue' } const cache = createCache({ key: 'context' }) - // $FlowFixMe const Comp = ({ flag }) => ( diff --git a/packages/react/__tests__/globals-are-the-worst.js b/packages/react/__tests__/globals-are-the-worst.js index 33d7dd1bd3..8b6b269e95 100644 --- a/packages/react/__tests__/globals-are-the-worst.js +++ b/packages/react/__tests__/globals-are-the-worst.js @@ -1,5 +1,3 @@ -// @flow -import 'test-utils/dev-mode' import { render } from '@testing-library/react' import * as React from 'react' import { Global } from '@emotion/react' diff --git a/packages/react/__tests__/import-prod.js b/packages/react/__tests__/import-prod.js index a6ca906518..73e5f81f78 100644 --- a/packages/react/__tests__/import-prod.js +++ b/packages/react/__tests__/import-prod.js @@ -1,5 +1,3 @@ -// @flow -import 'test-utils/prod-mode' import * as React from 'react' import * as ReactDOM from 'react-dom' import { css, Global } from '@emotion/react' @@ -28,68 +26,70 @@ const render = children => // $FlowFixMe document.body.appendChild(el) - if ((ReactDOM: any).createRoot) { - const root = (ReactDOM: any).createRoot(el) + if (ReactDOM.createRoot) { + const root = ReactDOM.createRoot(el) root.render(
{children}
) } else { ReactDOM.render(children, el, resolve) } }) -test('it works', async () => { - await render( -
- something +gate({ development: false }, ({ test }) => { + test('it works', async () => { + await render( +
+ something - - -
- ) - // order should be - // 1. html { background-color: yellow; } - // 1. @import - // 2. body { padding: 0; } - // 3. styled comp + + +
+ ) + // order should be + // 1. html { background-color: yellow; } + // 1. @import + // 2. body { padding: 0; } + // 3. styled comp - // querying for style instead of [data-emotion] to appease flow - let elements = Array.from(document.querySelectorAll('style')).filter(x => - x.getAttribute('data-emotion') - ) + // querying for style instead of [data-emotion] to appease flow + let elements = Array.from(document.querySelectorAll('style')).filter(x => + x.getAttribute('data-emotion') + ) - expect(elements.map(x => x.getAttribute('data-emotion'))).toEqual([ - 'css-global', - 'css-global', - 'css' - ]) + expect(elements.map(x => x.getAttribute('data-emotion'))).toEqual([ + 'css-global', + 'css-global', + 'css' + ]) - expect(elements[0].sheet).toMatchInlineSnapshot(` + expect(elements[0].sheet).toMatchInlineSnapshot(` html { background-color: yellow; } `) - expect(elements[1].sheet).toMatchInlineSnapshot(` + expect(elements[1].sheet).toMatchInlineSnapshot(` @import url(something.com/file.css); body { padding: 0; } `) - expect(elements[2].sheet).toMatchInlineSnapshot(` + expect(elements[2].sheet).toMatchInlineSnapshot(` .css-1lrxbo5 { color: hotpink; } `) + }) }) diff --git a/packages/react/__tests__/keyframes.js b/packages/react/__tests__/keyframes.js index acf849f7da..481f866e08 100644 --- a/packages/react/__tests__/keyframes.js +++ b/packages/react/__tests__/keyframes.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { jsx, css, keyframes } from '@emotion/react' diff --git a/packages/react/__tests__/legacy-class-name.js b/packages/react/__tests__/legacy-class-name.js index dd1d13dbf3..82345c4203 100644 --- a/packages/react/__tests__/legacy-class-name.js +++ b/packages/react/__tests__/legacy-class-name.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { jsx, css } from '@emotion/react' diff --git a/packages/react/__tests__/prod.js b/packages/react/__tests__/prod.js index 3017ad3899..ae3ec5895d 100644 --- a/packages/react/__tests__/prod.js +++ b/packages/react/__tests__/prod.js @@ -1,21 +1,22 @@ -import 'test-utils/prod-mode' /** @jsx jsx */ import { css, jsx } from '@emotion/react' import renderer from 'react-test-renderer' -test('css works', () => { - // css has a different return in prod so this is just making sure that isn't broken +gate({ development: false }, ({ test }) => { + test('css works', () => { + // css has a different return in prod so this is just making sure that isn't broken - expect(css({ color: 'hotpink' })).toMatchInlineSnapshot(` + expect(css({ color: 'hotpink' })).toMatchInlineSnapshot(` { "name": "1lrxbo5", "next": undefined, "styles": "color:hotpink;", } `) -}) + }) -test('props work', () => { - let tree = renderer.create( @@ -607,13 +604,13 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe `) }) -;((React: any).useId ? describe : describe.skip)('useId', () => { +;(React.useId ? describe : describe.skip)('useId', () => { test('no hydration mismatch for styled when using useId', async () => { const finalHTML = await disableBrowserEnvTemporarily(() => { resetAllModules() const StyledDivWithId = styled(function DivWithId({ className }) { - const id = (React: any).useId() + const id = React.useId() return
})({ border: '1px solid black' @@ -627,7 +624,7 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe resetAllModules() const StyledDivWithId = styled(function DivWithId({ className }) { - const id = (React: any).useId() + const id = React.useId() return
})({ border: '1px solid black' @@ -638,16 +635,16 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe container: safeQuerySelector('#root') }) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(`[]`) - expect((console.warn: any).mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.error.mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.warn.mock.calls).toMatchInlineSnapshot(`[]`) }) test('no hydration mismatch for css prop when using useId', async () => { const finalHTML = await disableBrowserEnvTemporarily(() => { resetAllModules() - function DivWithId({ className }: { className?: string }) { - const id = (React: any).useId() + function DivWithId({ className } /*: { className?: string }*/) { + const id = React.useId() return
} @@ -664,8 +661,8 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe resetAllModules() - function DivWithId({ className }: { className?: string }) { - const id = (React: any).useId() + function DivWithId({ className } /*: { className?: string }*/) { + const id = React.useId() return
} @@ -681,8 +678,8 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe } ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(`[]`) - expect((console.warn: any).mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.error.mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.warn.mock.calls).toMatchInlineSnapshot(`[]`) }) test('no hydration mismatch for ClassNames when using useId', async () => { @@ -690,7 +687,7 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe resetAllModules() const DivWithId = ({ className }) => { - const id = (React: any).useId() + const id = React.useId() return
} @@ -714,7 +711,7 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe resetAllModules() const DivWithId = ({ className }) => { - const id = (React: any).useId() + const id = React.useId() return
} @@ -736,7 +733,7 @@ test('duplicated global styles can be removed safely after rehydrating HTML SSRe } ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(`[]`) - expect((console.warn: any).mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.error.mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.warn.mock.calls).toMatchInlineSnapshot(`[]`) }) }) diff --git a/packages/react/__tests__/server.js b/packages/react/__tests__/server.js index c6625a3851..02a3134eb6 100644 --- a/packages/react/__tests__/server.js +++ b/packages/react/__tests__/server.js @@ -1,8 +1,7 @@ /** @jsx jsx * @jest-environment node */ -// @flow -import 'test-utils/dev-mode' + import * as React from 'react' import testCases from 'jest-in-case' import { @@ -38,16 +37,14 @@ let cases = { }, keyframes: { render: () => { - const animation = keyframes( - css` - from { - color: green; - } - to { - color: blue; - } - ` - ) + const animation = keyframes(css` + from { + color: green; + } + to { + color: blue; + } + `) return (
diff --git a/packages/react/__tests__/theme-provider.dom.js b/packages/react/__tests__/theme-provider.dom.js index 412539c751..4c56ba9846 100644 --- a/packages/react/__tests__/theme-provider.dom.js +++ b/packages/react/__tests__/theme-provider.dom.js @@ -1,7 +1,5 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' -import 'test-utils/dev-mode' import { render, fireEvent } from '@testing-library/react' import { safeQuerySelector } from 'test-utils' import * as React from 'react' @@ -13,7 +11,7 @@ beforeEach(() => { }) test('provider with theme value that changes', () => { - class ThemeTest extends React.Component<*, *> { + class ThemeTest extends React.Component { state = { theme: { color: 'hotpink', padding: 4 } } render() { return ( diff --git a/packages/react/__tests__/theme-provider.js b/packages/react/__tests__/theme-provider.js index d9a06c0790..1e6b84bc64 100644 --- a/packages/react/__tests__/theme-provider.js +++ b/packages/react/__tests__/theme-provider.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { ignoreConsoleErrors } from 'test-utils' @@ -57,7 +56,6 @@ cases( expect(() => { renderer.create( - {/* $FlowFixMe */}
({ diff --git a/packages/react/__tests__/use-theme.js b/packages/react/__tests__/use-theme.js index cbf5d8ca7c..301b5c3f07 100644 --- a/packages/react/__tests__/use-theme.js +++ b/packages/react/__tests__/use-theme.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import * as renderer from 'react-test-renderer' diff --git a/packages/react/__tests__/warnings.js b/packages/react/__tests__/warnings.js index 5af566acc0..98083bb84f 100644 --- a/packages/react/__tests__/warnings.js +++ b/packages/react/__tests__/warnings.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import { jsx, css, Global, keyframes, ClassNames } from '@emotion/react' @@ -6,7 +5,6 @@ import styled from '@emotion/styled' import renderer from 'react-test-renderer' import { render } from '@testing-library/react' -// $FlowFixMe console.error = jest.fn() const validValues = [ @@ -39,7 +37,7 @@ beforeEach(() => { jest.resetAllMocks() }) -it('does not warn when valid values are passed for the content property', () => { +test('does not warn when valid values are passed for the content property', () => { const style = css(validValues.map(value => ({ content: value }))) expect(console.error).not.toBeCalled() expect(renderer.create(
).toJSON()).toMatchSnapshot() @@ -47,8 +45,7 @@ it('does not warn when valid values are passed for the content property', () => const invalidValues = ['this is not valid', '', 'element'] -it('does warn when invalid values are passed for the content property', () => { - // $FlowFixMe +test('does warn when invalid values are passed for the content property', () => { invalidValues.forEach(value => { expect(() => renderer.create(
) @@ -78,7 +75,7 @@ describe('unsafe pseudo classes', () => { color: hotpink; } ` - const match = (pseudoClass.match(/(:first|:nth|:nth-last)-child/): any) + const match = pseudoClass.match(/(:first|:nth|:nth-last)-child/) expect(match).not.toBeNull() expect(renderer.create(
).toJSON()).toMatchSnapshot() expect(console.error).toBeCalledWith( @@ -119,7 +116,7 @@ describe('unsafe pseudo classes', () => { { pseudoClass: `:first-child, :nth-child(3)` }, { pseudoClass: `:first-child:nth-child(3)` } ])('$pseudoClass', ({ pseudoClass }) => { - const match = (pseudoClass.match(/(:first|:nth|:nth-last)-child/): any) + const match = pseudoClass.match(/(:first|:nth|:nth-last)-child/) expect(match).not.toBeNull() expect( renderer.create(
).toJSON() @@ -145,7 +142,7 @@ describe('unsafe pseudo classes', () => { ) .toJSON() ).toMatchSnapshot() - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "The pseudo class ":first-child" is potentially unsafe when doing server-side rendering. Try changing it to ":first-of-type".", @@ -171,7 +168,7 @@ describe('unsafe pseudo classes', () => { ) .toJSON() ).toMatchSnapshot() - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "The pseudo class ":first-child" is potentially unsafe when doing server-side rendering. Try changing it to ":first-of-type".", @@ -195,7 +192,7 @@ describe('unsafe pseudo classes', () => { ) .toJSON() ).toMatchSnapshot() - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "The pseudo class ":first-child" is potentially unsafe when doing server-side rendering. Try changing it to ":first-of-type".", @@ -219,7 +216,7 @@ describe('unsafe pseudo classes', () => { ) .toJSON() ).toMatchSnapshot() - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "The pseudo class ":first-child" is potentially unsafe when doing server-side rendering. Try changing it to ":first-of-type".", @@ -242,7 +239,7 @@ describe('unsafe pseudo classes', () => { ) .toJSON() ).toMatchSnapshot() - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "The pseudo class ":first-child" is potentially unsafe when doing server-side rendering. Try changing it to ":first-of-type".", @@ -360,7 +357,7 @@ describe('unsafe pseudo classes', () => { ) .toJSON() ).toMatchSnapshot() - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "The pseudo class ":first-child" is potentially unsafe when doing server-side rendering. Try changing it to ":first-of-type".", @@ -393,7 +390,6 @@ describe('unsafe pseudo classes', () => { test('global with css prop', () => { let tree = renderer .create( - // $FlowFixMe { css({ '@media (min-width 800px)': undefined }) css({ '--primary-color': 'hotpink' }) css({ ':last-of-type': null }) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "Using kebab-case for css properties in objects is not supported. Did you mean backgroundColor?", @@ -449,7 +445,7 @@ test('keyframes interpolated into plain string', () => { renderer.create(
) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "\`keyframes\` output got interpolated into plain string, please wrap it with \`css\`. @@ -492,7 +488,6 @@ test('`css` opaque object passed to `cx` from ', () => { {({ cx }) => (
', () => { ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "You have passed styles created with \`css\` from \`@emotion/react\` package to the \`cx\`. @@ -526,7 +521,7 @@ test('@import nested in scoped `css`', () => { /> ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "\`@import\` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.", @@ -548,7 +543,7 @@ test('@import prepended with other rules', () => { /> ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(` + expect(console.error.mock.calls).toMatchInlineSnapshot(` [ [ "\`@import\` rules can't be after other rules. Please put your \`@import\` rules before your other rules.", @@ -567,7 +562,7 @@ test('@import prepended by other @import', () => { /> ) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.error.mock.calls).toMatchInlineSnapshot(`[]`) }) test('when using `jsx` multiple static children should not result in a key-related warning', () => { @@ -577,5 +572,5 @@ test('when using `jsx` multiple static children should not result in a key-relat
) - expect((console.error: any).mock.calls).toMatchInlineSnapshot(`[]`) + expect(console.error.mock.calls).toMatchInlineSnapshot(`[]`) }) diff --git a/packages/react/__tests__/with-theme.js b/packages/react/__tests__/with-theme.js index 4512dc47e0..643af77a92 100644 --- a/packages/react/__tests__/with-theme.js +++ b/packages/react/__tests__/with-theme.js @@ -1,10 +1,9 @@ -// @flow import * as React from 'react' import * as renderer from 'react-test-renderer' import { withTheme, ThemeProvider } from '@emotion/react' test('withTheme works', () => { - class SomeComponent extends React.Component<{ theme: Object }> { + class SomeComponent extends React.Component /* <{ theme: Object }> */ { render() { return this.props.theme.color } @@ -22,7 +21,7 @@ test('withTheme works', () => { }) test(`withTheme(Comp) hoists non-react static class properties`, () => { - class ExampleComponent extends React.Component<*> { + class ExampleComponent extends React.Component { static displayName = 'foo' static someSpecialStatic = 'bar' } @@ -30,14 +29,13 @@ test(`withTheme(Comp) hoists non-react static class properties`, () => { const ComponentWithTheme = withTheme(ExampleComponent) expect(ComponentWithTheme.displayName).toBe('WithTheme(foo)') - // $FlowFixMe hoist-non-react-statics doesn't work with AbstractComponent https://github.com/facebook/flow/issues/7612 expect(ComponentWithTheme.someSpecialStatic).toBe( ExampleComponent.someSpecialStatic ) }) -it('should forward the ref', () => { - class SomeComponent extends React.Component<*> { +test('should forward the ref', () => { + class SomeComponent extends React.Component { render() { return this.props.theme.color } diff --git a/packages/react/_isolated-hnrs/package.json b/packages/react/_isolated-hnrs/package.json index a8a01ced60..72a77af979 100644 --- a/packages/react/_isolated-hnrs/package.json +++ b/packages/react/_isolated-hnrs/package.json @@ -2,9 +2,6 @@ "main": "dist/emotion-react-_isolated-hnrs.cjs.js", "module": "dist/emotion-react-_isolated-hnrs.esm.js", "umd:main": "dist/emotion-react-_isolated-hnrs.umd.min.js", - "browser": { - "./dist/emotion-react-_isolated-hnrs.esm.js": "./dist/emotion-react-_isolated-hnrs.browser.esm.js" - }, "sideEffects": false, "preconstruct": { "umdName": "emotionHoistNonReactStatics" diff --git a/packages/react/jsx-dev-runtime/package.json b/packages/react/jsx-dev-runtime/package.json index 42a33d8e53..5c5a6d908b 100644 --- a/packages/react/jsx-dev-runtime/package.json +++ b/packages/react/jsx-dev-runtime/package.json @@ -2,9 +2,6 @@ "main": "dist/emotion-react-jsx-dev-runtime.cjs.js", "module": "dist/emotion-react-jsx-dev-runtime.esm.js", "umd:main": "dist/emotion-react-jsx-dev-runtime.umd.min.js", - "browser": { - "./dist/emotion-react-jsx-dev-runtime.esm.js": "./dist/emotion-react-jsx-dev-runtime.browser.esm.js" - }, "types": "../types/jsx-dev-runtime", "sideEffects": false, "preconstruct": { diff --git a/packages/react/jsx-runtime/package.json b/packages/react/jsx-runtime/package.json index d57371db3a..6b6dab3eda 100644 --- a/packages/react/jsx-runtime/package.json +++ b/packages/react/jsx-runtime/package.json @@ -2,9 +2,6 @@ "main": "dist/emotion-react-jsx-runtime.cjs.js", "module": "dist/emotion-react-jsx-runtime.esm.js", "umd:main": "dist/emotion-react-jsx-runtime.umd.min.js", - "browser": { - "./dist/emotion-react-jsx-runtime.esm.js": "./dist/emotion-react-jsx-runtime.browser.esm.js" - }, "types": "../types/jsx-runtime", "sideEffects": false, "preconstruct": { diff --git a/packages/react/macro.js.flow b/packages/react/macro.js.flow deleted file mode 100644 index 63ae97e66d..0000000000 --- a/packages/react/macro.js.flow +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -export * from './src/index.js' diff --git a/packages/react/package.json b/packages/react/package.json index cd2e55adc5..ea5f49bfb1 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,45 +1,222 @@ { "name": "@emotion/react", - "version": "11.11.4", + "version": "11.13.0", "main": "dist/emotion-react.cjs.js", "module": "dist/emotion-react.esm.js", - "browser": { - "./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js" - }, "exports": { ".": { - "module": { - "worker": "./dist/emotion-react.worker.esm.js", - "browser": "./dist/emotion-react.browser.esm.js", - "default": "./dist/emotion-react.esm.js" + "types": { + "import": "./dist/emotion-react.cjs.mjs", + "default": "./dist/emotion-react.cjs.js" + }, + "development": { + "edge-light": { + "module": "./dist/emotion-react.development.edge-light.esm.js", + "import": "./dist/emotion-react.development.edge-light.cjs.mjs", + "default": "./dist/emotion-react.development.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-react.development.edge-light.esm.js", + "import": "./dist/emotion-react.development.edge-light.cjs.mjs", + "default": "./dist/emotion-react.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-react.development.edge-light.esm.js", + "import": "./dist/emotion-react.development.edge-light.cjs.mjs", + "default": "./dist/emotion-react.development.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-react.browser.development.esm.js", + "import": "./dist/emotion-react.browser.development.cjs.mjs", + "default": "./dist/emotion-react.browser.development.cjs.js" + }, + "module": "./dist/emotion-react.development.esm.js", + "import": "./dist/emotion-react.development.cjs.mjs", + "default": "./dist/emotion-react.development.cjs.js" + }, + "edge-light": { + "module": "./dist/emotion-react.edge-light.esm.js", + "import": "./dist/emotion-react.edge-light.cjs.mjs", + "default": "./dist/emotion-react.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-react.edge-light.esm.js", + "import": "./dist/emotion-react.edge-light.cjs.mjs", + "default": "./dist/emotion-react.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-react.edge-light.esm.js", + "import": "./dist/emotion-react.edge-light.cjs.mjs", + "default": "./dist/emotion-react.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-react.browser.esm.js", + "import": "./dist/emotion-react.browser.cjs.mjs", + "default": "./dist/emotion-react.browser.cjs.js" }, + "module": "./dist/emotion-react.esm.js", "import": "./dist/emotion-react.cjs.mjs", "default": "./dist/emotion-react.cjs.js" }, "./jsx-runtime": { - "module": { - "worker": "./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js", - "browser": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js" + "types": { + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js" + }, + "development": { + "edge-light": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.js" + }, + "worker": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.js" + }, + "browser": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.development.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.development.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.development.cjs.js" + }, + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.cjs.js" + }, + "edge-light": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.js" + }, + "worker": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.js" }, + "workerd": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.js" + }, + "browser": { + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js", + "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.cjs.mjs", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.cjs.js" + }, + "module": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js", "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs", "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js" }, "./_isolated-hnrs": { - "module": { - "worker": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js", - "browser": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js" + "types": { + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js" }, + "development": { + "edge-light": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.js" + }, + "worker": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.js" + }, + "browser": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.cjs.js" + }, + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.cjs.js" + }, + "edge-light": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.js" + }, + "worker": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.js" + }, + "workerd": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.js" + }, + "browser": { + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js", + "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.cjs.mjs", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.cjs.js" + }, + "module": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js", "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs", "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js" }, "./jsx-dev-runtime": { - "module": { - "worker": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js", - "browser": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js" + "types": { + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js" + }, + "development": { + "edge-light": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.js" + }, + "worker": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.js" + }, + "browser": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.development.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.development.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.development.cjs.js" + }, + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.cjs.js" }, + "edge-light": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.js" + }, + "worker": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.js" + }, + "workerd": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.js" + }, + "browser": { + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js", + "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.cjs.mjs", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.cjs.js" + }, + "module": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js", "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs", "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js" }, @@ -53,6 +230,19 @@ "default": "./macro.js" } }, + "imports": { + "#is-development": { + "development": "./src/conditions/true.js", + "default": "./src/conditions/false.js" + }, + "#is-browser": { + "edge-light": "./src/conditions/false.js", + "workerd": "./src/conditions/false.js", + "worker": "./src/conditions/false.js", + "browser": "./src/conditions/true.js", + "default": "./src/conditions/is-browser.js" + } + }, "types": "types/index.d.ts", "files": [ "src", @@ -71,12 +261,12 @@ }, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { @@ -89,14 +279,14 @@ }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "@emotion/css": "11.11.2", - "@emotion/css-prettifier": "1.1.3", + "@emotion/css": "11.13.0", + "@emotion/css-prettifier": "1.1.4", "@emotion/server": "11.11.0", - "@emotion/styled": "11.11.0", + "@emotion/styled": "11.13.0", "html-tag-names": "^1.1.2", "react": "16.14.0", "svg-tag-names": "^1.1.1", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "repository": "https://github.com/emotion-js/emotion/tree/main/packages/react", "publishConfig": { @@ -112,10 +302,6 @@ ], "umdName": "emotionReact", "exports": { - "envConditions": [ - "browser", - "worker" - ], "extra": { "./types/css-prop": "./types/css-prop.d.ts", "./macro": { diff --git a/packages/react/src/class-names.js b/packages/react/src/class-names.js index 6252324f22..c5b35276cb 100644 --- a/packages/react/src/class-names.js +++ b/packages/react/src/class-names.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import { getRegisteredStyles, @@ -6,11 +5,13 @@ import { registerStyles } from '@emotion/utils' import { serializeStyles } from '@emotion/serialize' +import isDevelopment from '#is-development' import { withEmotionCache } from './context' import { ThemeContext } from './theming' import { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks' -import { isBrowser } from './utils' +import isBrowser from '#is-browser' +/* type ClassNameArg = | string | boolean @@ -18,8 +19,9 @@ type ClassNameArg = | Array | null | void +*/ -let classnames = (args: Array): string => { +let classnames = (args /*: Array */) /*: string */ => { let len = args.length let i = 0 let cls = '' @@ -36,7 +38,7 @@ let classnames = (args: Array): string => { toAdd = classnames(arg) } else { if ( - process.env.NODE_ENV !== 'production' && + isDevelopment && arg.styles !== undefined && arg.name !== undefined ) { @@ -67,9 +69,9 @@ let classnames = (args: Array): string => { return cls } function merge( - registered: Object, - css: (...args: Array) => string, - className: string + registered /*: Object */, + css /*: (...args: Array) => string */, + className /*: string */ ) { const registeredStyles = [] @@ -85,14 +87,6 @@ function merge( return rawClassName + css(registeredStyles) } -type Props = { - children: ({ - css: (...args: any) => string, - cx: (...args: Array) => string, - theme: Object - }) => React.Node -} - const Insertion = ({ cache, serializedArr }) => { let rules = useInsertionEffectAlwaysWithSyncFallback(() => { let rules = '' @@ -123,13 +117,22 @@ const Insertion = ({ cache, serializedArr }) => { return null } -export const ClassNames: React.AbstractComponent = +/* +type Props = { + children: ({ + css: (...args: any) => string, + cx: (...args: Array) => string, + theme: Object + }) => React.Node +} */ + +export const ClassNames /*: React.AbstractComponent*/ = /* #__PURE__ */ withEmotionCache((props, cache) => { let hasRendered = false let serializedArr = [] - let css = (...args: Array) => { - if (hasRendered && process.env.NODE_ENV !== 'production') { + let css = (...args /*: Array */) => { + if (hasRendered && isDevelopment) { throw new Error('css can only be used during render') } @@ -139,8 +142,8 @@ export const ClassNames: React.AbstractComponent = registerStyles(cache, serialized, false) return `${cache.key}-${serialized.name}` } - let cx = (...args: Array) => { - if (hasRendered && process.env.NODE_ENV !== 'production') { + let cx = (...args /*: Array*/) => { + if (hasRendered && isDevelopment) { throw new Error('cx can only be used during render') } return merge(cache.registered, css, classnames(args)) @@ -161,6 +164,6 @@ export const ClassNames: React.AbstractComponent = ) }) -if (process.env.NODE_ENV !== 'production') { +if (isDevelopment) { ClassNames.displayName = 'EmotionClassNames' } diff --git a/packages/react/src/conditions/false.js b/packages/react/src/conditions/false.js new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/react/src/conditions/false.js @@ -0,0 +1 @@ +export default false diff --git a/packages/react/src/conditions/is-browser.js b/packages/react/src/conditions/is-browser.js new file mode 100644 index 0000000000..12bdad68fc --- /dev/null +++ b/packages/react/src/conditions/is-browser.js @@ -0,0 +1 @@ +export default typeof document !== 'undefined' diff --git a/packages/react/src/conditions/true.js b/packages/react/src/conditions/true.js new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/react/src/conditions/true.js @@ -0,0 +1 @@ +export default true diff --git a/packages/react/src/context.js b/packages/react/src/context.js index e74d4de212..533e7e3b8b 100644 --- a/packages/react/src/context.js +++ b/packages/react/src/context.js @@ -1,11 +1,11 @@ -// @flow -import { type EmotionCache } from '@emotion/utils' +/* import { type EmotionCache } from '@emotion/utils' */ import * as React from 'react' import { useContext, forwardRef } from 'react' import createCache from '@emotion/cache' -import { isBrowser } from './utils' +import isDevelopment from '#is-development' +import isBrowser from '#is-browser' -let EmotionCacheContext: React.Context = +let EmotionCacheContext /*: React.Context */ = /* #__PURE__ */ React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case // because this module is primarily intended for the browser and node @@ -18,34 +18,34 @@ let EmotionCacheContext: React.Context = : null ) -if (process.env.NODE_ENV !== 'production') { +if (isDevelopment) { EmotionCacheContext.displayName = 'EmotionCacheContext' } export let CacheProvider = EmotionCacheContext.Provider export let __unsafe_useEmotionCache = - function useEmotionCache(): EmotionCache | null { + function useEmotionCache() /*: EmotionCache | null*/ { return useContext(EmotionCacheContext) } -let withEmotionCache = function withEmotionCache>( - func: (props: Props, cache: EmotionCache, ref: Ref) => React.Node -): React.AbstractComponent { - // $FlowFixMe - return forwardRef((props: Props, ref: Ref) => { - // the cache will never be null in the browser - let cache = ((useContext(EmotionCacheContext): any): EmotionCache) +let withEmotionCache = + function withEmotionCache /* > */( + func /*: (props: Props, cache: EmotionCache, ref: Ref) => React.Node */ + ) /*: React.AbstractComponent */ { + return forwardRef((props /*: Props */, ref /*: Ref */) => { + // the cache will never be null in the browser + let cache = useContext(EmotionCacheContext) - return func(props, cache, ref) - }) -} + return func(props, cache, ref) + }) + } if (!isBrowser) { - withEmotionCache = function withEmotionCache( - func: (props: Props, cache: EmotionCache) => React.Node - ): React.StatelessFunctionalComponent { - return (props: Props) => { + withEmotionCache = function withEmotionCache /* */( + func /*: (props: Props, cache: EmotionCache) => React.Node */ + ) /*: React.StatelessFunctionalComponent */ { + return (props /*: Props */) => { let cache = useContext(EmotionCacheContext) if (cache === null) { // yes, we're potentially creating this on every render diff --git a/packages/react/src/css.js b/packages/react/src/css.js index ac79c1dfa3..785320e8f1 100644 --- a/packages/react/src/css.js +++ b/packages/react/src/css.js @@ -1,9 +1,7 @@ -// @flow - -import type { Interpolation, SerializedStyles } from '@emotion/utils' +/* import type { Interpolation, SerializedStyles } from '@emotion/utils' */ import { serializeStyles } from '@emotion/serialize' -function css(...args: Array): SerializedStyles { +function css(...args /*: Array */) /*: SerializedStyles */ { return serializeStyles(args) } diff --git a/packages/react/src/emotion-element.js b/packages/react/src/emotion-element.js index 0ae4c4b64c..abb2a70e53 100644 --- a/packages/react/src/emotion-element.js +++ b/packages/react/src/emotion-element.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import { withEmotionCache } from './context' import { ThemeContext } from './theming' @@ -7,8 +6,10 @@ import { insertStyles, registerStyles } from '@emotion/utils' -import { hasOwn, isBrowser } from './utils' +import { hasOwn } from './utils' import { serializeStyles } from '@emotion/serialize' +import isDevelopment from '#is-development' +import isBrowser from '#is-browser' import { getLabelFromStackTrace } from './get-label-from-stack-trace' import { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks' @@ -16,9 +17,12 @@ let typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__' let labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__' -export const createEmotionProps = (type: React.ElementType, props: Object) => { +export const createEmotionProps = ( + type /*: React.ElementType */, + props /*: Object */ +) => { if ( - process.env.NODE_ENV !== 'production' && + isDevelopment && typeof props.css === 'string' && // check if there is a css declaration props.css.indexOf(':') !== -1 @@ -28,7 +32,7 @@ export const createEmotionProps = (type: React.ElementType, props: Object) => { ) } - let newProps: any = {} + let newProps /*: any */ = {} for (let key in props) { if (hasOwn.call(props, key)) { @@ -38,10 +42,16 @@ export const createEmotionProps = (type: React.ElementType, props: Object) => { newProps[typePropName] = type - // For performance, only call getLabelFromStackTrace in development and when - // the label hasn't already been computed + // Runtime labeling is an opt-in feature because: + // - It causes hydration warnings when using Safari and SSR + // - It can degrade performance if there are a huge number of elements + // + // Even if the flag is set, we still don't compute the label if it has already + // been determined by the Babel plugin. if ( - process.env.NODE_ENV !== 'production' && + isDevelopment && + typeof globalThis !== 'undefined' && + !!globalThis.EMOTION_RUNTIME_AUTO_LABEL && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || @@ -81,8 +91,8 @@ const Insertion = ({ cache, serialized, isStringTag }) => { return null } -let Emotion = /* #__PURE__ */ withEmotionCache( - (props, cache, ref) => { +let Emotion = /* #__PURE__ */ withEmotionCache( + /* */ (props, cache, ref) => { let cssProp = props.css // so that using `css` from `emotion` and passing the result to the css prop works @@ -115,10 +125,7 @@ let Emotion = /* #__PURE__ */ withEmotionCache( React.useContext(ThemeContext) ) - if ( - process.env.NODE_ENV !== 'production' && - serialized.name.indexOf('-') === -1 - ) { + if (isDevelopment && serialized.name.indexOf('-') === -1) { let labelFromStack = props[labelPropName] if (labelFromStack) { serialized = serializeStyles([ @@ -136,13 +143,15 @@ let Emotion = /* #__PURE__ */ withEmotionCache( hasOwn.call(props, key) && key !== 'css' && key !== typePropName && - (process.env.NODE_ENV === 'production' || key !== labelPropName) + (!isDevelopment || key !== labelPropName) ) { newProps[key] = props[key] } } - newProps.ref = ref newProps.className = className + if (ref) { + newProps.ref = ref + } return ( <> @@ -157,7 +166,7 @@ let Emotion = /* #__PURE__ */ withEmotionCache( } ) -if (process.env.NODE_ENV !== 'production') { +if (isDevelopment) { Emotion.displayName = 'EmotionCssPropInternal' } diff --git a/packages/react/src/get-label-from-stack-trace.js b/packages/react/src/get-label-from-stack-trace.js index c356b14e16..5d0dcd5bcb 100644 --- a/packages/react/src/get-label-from-stack-trace.js +++ b/packages/react/src/get-label-from-stack-trace.js @@ -1,13 +1,11 @@ -// @flow - -const getLastPart = (functionName: string): string => { +const getLastPart = (functionName /* : string */) /* : string */ => { // The match may be something like 'Object.createEmotionProps' or // 'Loader.prototype.render' const parts = functionName.split('.') return parts[parts.length - 1] } -const getFunctionNameFromStackTraceLine = (line: string): ?string => { +const getFunctionNameFromStackTraceLine = (line /*: string*/) /*: ?string*/ => { // V8 let match = /^\s+at\s+([A-Za-z0-9$.]+)\s/.exec(line) if (match) return getLastPart(match[1]) @@ -29,10 +27,9 @@ const internalReactFunctionNames = /* #__PURE__ */ new Set([ // These identifiers come from error stacks, so they have to be valid JS // identifiers, thus we only need to replace what is a valid character for JS, // but not for CSS. -const sanitizeIdentifier = (identifier: string) => - identifier.replace(/\$/g, '-') +const sanitizeIdentifier = identifier => identifier.replace(/\$/g, '-') -export const getLabelFromStackTrace = (stackTrace: string): ?string => { +export const getLabelFromStackTrace = stackTrace => { if (!stackTrace) return undefined const lines = stackTrace.split('\n') diff --git a/packages/react/src/global.js b/packages/react/src/global.js index bcbbbd2b04..050ab2279f 100644 --- a/packages/react/src/global.js +++ b/packages/react/src/global.js @@ -1,18 +1,20 @@ -// @flow import * as React from 'react' +import isDevelopment from '#is-development' import { withEmotionCache } from './context' import { ThemeContext } from './theming' import { insertStyles } from '@emotion/utils' -import { isBrowser } from './utils' +import isBrowser from '#is-browser' import { useInsertionEffectWithLayoutFallback } from '@emotion/use-insertion-effect-with-fallbacks' import { serializeStyles } from '@emotion/serialize' +/* type Styles = Object | Array type GlobalProps = { +styles: Styles | (Object => Styles) } +*/ let warnedAboutCssPropForGlobal = false @@ -20,124 +22,124 @@ let warnedAboutCssPropForGlobal = false // initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild // initial client-side render from SSR, use place of hydrating tag -export let Global: React.AbstractComponent = - /* #__PURE__ */ withEmotionCache((props: GlobalProps, cache) => { - if ( - process.env.NODE_ENV !== 'production' && - !warnedAboutCssPropForGlobal && // check for className as well since the user is - // probably using the custom createElement which - // means it will be turned into a className prop - // $FlowFixMe I don't really want to add it to the type since it shouldn't be used - (props.className || props.css) - ) { - console.error( - "It looks like you're using the css prop on Global, did you mean to use the styles prop instead?" - ) - warnedAboutCssPropForGlobal = true +export let Global /*: React.AbstractComponent< + GlobalProps +> */ = /* #__PURE__ */ withEmotionCache((props /*: GlobalProps */, cache) => { + if ( + isDevelopment && + !warnedAboutCssPropForGlobal && // check for className as well since the user is + // probably using the custom createElement which + // means it will be turned into a className prop + // I don't really want to add it to the type since it shouldn't be used + (props.className || props.css) + ) { + console.error( + "It looks like you're using the css prop on Global, did you mean to use the styles prop instead?" + ) + warnedAboutCssPropForGlobal = true + } + let styles = props.styles + + let serialized = serializeStyles( + [styles], + undefined, + React.useContext(ThemeContext) + ) + + if (!isBrowser) { + let serializedNames = serialized.name + let serializedStyles = serialized.styles + let next = serialized.next + while (next !== undefined) { + serializedNames += ' ' + next.name + serializedStyles += next.styles + next = next.next } - let styles = props.styles - let serialized = serializeStyles( - [styles], - undefined, - React.useContext(ThemeContext) + let shouldCache = cache.compat === true + + let rules = cache.insert( + ``, + { name: serializedNames, styles: serializedStyles }, + cache.sheet, + shouldCache ) - if (!isBrowser) { - let serializedNames = serialized.name - let serializedStyles = serialized.styles - let next = serialized.next - while (next !== undefined) { - serializedNames += ' ' + next.name - serializedStyles += next.styles - next = next.next - } - - let shouldCache = cache.compat === true - - let rules = cache.insert( - ``, - { name: serializedNames, styles: serializedStyles }, - cache.sheet, - shouldCache - ) - - if (shouldCache) { - return null - } - - return ( - ` } diff --git a/packages/server/src/index.js b/packages/server/src/index.js index 94000e3e6d..9e00e4424e 100644 --- a/packages/server/src/index.js +++ b/packages/server/src/index.js @@ -1,4 +1,3 @@ -// @flow import createEmotionServer from './create-instance' import { cache } from '@emotion/css' diff --git a/packages/server/test/__snapshots__/extract-critical-to-chunks.test.js.snap b/packages/server/test/__snapshots__/extract-critical-to-chunks.test.js.snap index a7b9378f68..f8e5385af9 100644 --- a/packages/server/test/__snapshots__/extract-critical-to-chunks.test.js.snap +++ b/packages/server/test/__snapshots__/extract-critical-to-chunks.test.js.snap @@ -7,8 +7,8 @@ exports[`extractCriticalToChunks generates correct style tags using constructSty - `; @@ -19,14 +19,14 @@ exports[`extractCriticalToChunks generates correct style tags using constructSty - `; exports[`extractCriticalToChunks returns static css 1`] = ` { - "html":
+ "html":
, "styles": [ { @@ -48,7 +48,7 @@ exports[`extractCriticalToChunks returns static css 1`] = ` "key": "css-global", }, { - "css": ".css-14e1j2p-hoverStyles-Something_Main { + "css": ".css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -56,14 +56,14 @@ exports[`extractCriticalToChunks returns static css 1`] = ` display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; box-shadow: -15px -15px 0 0 aqua,-30px -30px 0 0 cornflowerblue; }", "ids": [ - "14e1j2p-hoverStyles-Something_Main", + "fgjrlg-hoverStyles-Something_Main", ], "key": "css", }, @@ -73,7 +73,7 @@ exports[`extractCriticalToChunks returns static css 1`] = ` exports[`extractCriticalToChunks returns static css 2`] = ` { - "html":
+ "html":
, "styles": [ { @@ -95,7 +95,7 @@ exports[`extractCriticalToChunks returns static css 2`] = ` "key": "css-global", }, { - "css": ".css-14e1j2p-hoverStyles-Something_Main { + "css": ".css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -103,14 +103,14 @@ exports[`extractCriticalToChunks returns static css 2`] = ` display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; box-shadow: -15px -15px 0 0 aqua,-30px -30px 0 0 cornflowerblue; }", "ids": [ - "14e1j2p-hoverStyles-Something_Main", + "fgjrlg-hoverStyles-Something_Main", ], "key": "css", }, diff --git a/packages/server/test/__snapshots__/index.test.js.snap b/packages/server/test/__snapshots__/index.test.js.snap index 8cc382442b..eb505a59b3 100644 --- a/packages/server/test/__snapshots__/index.test.js.snap +++ b/packages/server/test/__snapshots__/index.test.js.snap @@ -93,7 +93,7 @@ exports[`extractCritical returns static css 1`] = ` justify-content: center; } -.css-14e1j2p-hoverStyles-Something_Main { +.css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -101,7 +101,7 @@ exports[`extractCritical returns static css 1`] = ` display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; @@ -116,7 +116,7 @@ exports[`extractCritical returns static css 1`] = ` width: 50px; background-color: red; }", - "html":
+ "html":
@@ -129,7 +129,7 @@ exports[`extractCritical returns static css 1`] = ` "1uqawbr", "i9f7qw-bounce", "1nhdffy", - "14e1j2p-hoverStyles-Something_Main", + "fgjrlg-hoverStyles-Something_Main", "1h1w8ez-Image", ], } @@ -228,7 +228,7 @@ exports[`extractCritical returns static css 2`] = ` justify-content: center; } -.css-14e1j2p-hoverStyles-Something_Main { +.css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -236,13 +236,13 @@ exports[`extractCritical returns static css 2`] = ` display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; box-shadow: -15px -15px 0 0 aqua,-30px -30px 0 0 cornflowerblue; }", - "html":
+ "html":
Hello
@@ -251,7 +251,7 @@ exports[`extractCritical returns static css 2`] = ` "1uqawbr", "i9f7qw-bounce", "1nhdffy", - "14e1j2p-hoverStyles-Something_Main", + "fgjrlg-hoverStyles-Something_Main", ], } `; @@ -349,7 +349,7 @@ exports[`hydration only rules that are not in the critical css are inserted 1`] justify-content: center; } -.css-14e1j2p-hoverStyles-Something_Main { +.css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -357,7 +357,7 @@ exports[`hydration only rules that are not in the critical css are inserted 1`] display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; @@ -372,7 +372,7 @@ exports[`hydration only rules that are not in the critical css are inserted 1`] width: 50px; background-color: red; }", - "html":
+ "html":
@@ -385,18 +385,18 @@ exports[`hydration only rules that are not in the critical css are inserted 1`] "1uqawbr", "i9f7qw-bounce", "1nhdffy", - "14e1j2p-hoverStyles-Something_Main", + "fgjrlg-hoverStyles-Something_Main", "1h1w8ez-Image", ], } `; exports[`hydration only rules that are not in the critical css are inserted 2`] = ` -".css-1icu1xs-hoverStyles { +".css-v31heb-hoverStyles { color: hotpink; } -.css-1icu1xs-hoverStyles:hover { +.css-v31heb-hoverStyles:hover { color: white; background-color: lightgray; border-color: aqua; diff --git a/packages/server/test/__snapshots__/inline.test.js.snap b/packages/server/test/__snapshots__/inline.test.js.snap index b162d05457..696f13913c 100644 --- a/packages/server/test/__snapshots__/inline.test.js.snap +++ b/packages/server/test/__snapshots__/inline.test.js.snap @@ -4,10 +4,10 @@ exports[`hydration only inserts rules that are not in the critical css 1`] = ` - -
+
@@ -22,11 +22,11 @@ exports[`hydration only inserts rules that are not in the critical css 1`] = ` `; exports[`hydration only inserts rules that are not in the critical css 2`] = ` -".css-1icu1xs-hoverStyles { +".css-v31heb-hoverStyles { color: hotpink; } -.css-1icu1xs-hoverStyles:hover { +.css-v31heb-hoverStyles:hover { color: white; background-color: lightgray; border-color: aqua; @@ -130,7 +130,7 @@ exports[`hydration only inserts rules that are not in the critical css 3`] = ` justify-content: center; } -.css-14e1j2p-hoverStyles-Something_Main { +.css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -138,7 +138,7 @@ exports[`hydration only inserts rules that are not in the critical css 3`] = ` display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; @@ -1965,10 +1965,10 @@ exports[`renderStylesToString renders styles with ids 1`] = ` - -
+
@@ -1986,10 +1986,10 @@ exports[`renderStylesToString renders styles with ids 2`] = ` - -
+
Hello
diff --git a/packages/server/test/__snapshots__/stream.test.js.snap b/packages/server/test/__snapshots__/stream.test.js.snap index eb6097b396..d9a169dab1 100644 --- a/packages/server/test/__snapshots__/stream.test.js.snap +++ b/packages/server/test/__snapshots__/stream.test.js.snap @@ -1,10 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`hydration only inserts rules that are not in the critical css 1`] = ` - -
+
@@ -19,11 +19,11 @@ exports[`hydration only inserts rules that are not in the critical css 1`] = ` `; exports[`hydration only inserts rules that are not in the critical css 2`] = ` -".css-1icu1xs-hoverStyles { +".css-v31heb-hoverStyles { color: hotpink; } -.css-1icu1xs-hoverStyles:hover { +.css-v31heb-hoverStyles:hover { color: white; background-color: lightgray; border-color: aqua; @@ -127,7 +127,7 @@ exports[`hydration only inserts rules that are not in the critical css 3`] = ` justify-content: center; } -.css-14e1j2p-hoverStyles-Something_Main { +.css-fgjrlg-hoverStyles-Something_Main { color: hotpink; display: -webkit-box; display: -webkit-flex; @@ -135,7 +135,7 @@ exports[`hydration only inserts rules that are not in the critical css 3`] = ` display: flex; } -.css-14e1j2p-hoverStyles-Something_Main:hover { +.css-fgjrlg-hoverStyles-Something_Main:hover { color: white; background-color: lightgray; border-color: aqua; @@ -1956,10 +1956,10 @@ exports[`renderStylesToNodeStream renders large recursive component 1`] = ` `; exports[`renderStylesToNodeStream renders styles with ids 1`] = ` - -
+
@@ -1974,10 +1974,10 @@ exports[`renderStylesToNodeStream renders styles with ids 1`] = ` `; exports[`renderStylesToNodeStream renders styles with ids 2`] = ` - -
+
Hello
diff --git a/packages/server/test/extract-critical-to-chunks.test.js b/packages/server/test/extract-critical-to-chunks.test.js index b035592fc7..b81b7cfada 100644 --- a/packages/server/test/extract-critical-to-chunks.test.js +++ b/packages/server/test/extract-critical-to-chunks.test.js @@ -1,11 +1,10 @@ /** * @jest-environment node - * @flow */ import React from 'react' import { renderToString } from 'react-dom/server' -import type { Emotion } from '@emotion/css/create-instance' +/* import type { Emotion } from '@emotion/css/create-instance' */ import { prettifyCriticalChunks } from './util' let emotion = require('@emotion/css') @@ -13,8 +12,8 @@ let reactEmotion = require('@emotion/styled') let emotionServer = require('@emotion/server') export const getComponents = ( - emotion: Emotion, - { default: styled }: { default: Function } + emotion /*: Emotion */, + { default: styled } /*: { default: Function } */ ) => { let Provider = require('@emotion/react').CacheProvider let Global = require('@emotion/react').Global @@ -26,7 +25,9 @@ export const getComponents = ( color: white; background-color: lightgray; border-color: aqua; - box-shadow: -15px -15px 0 0 aqua, -30px -30px 0 0 cornflowerblue; + box-shadow: + -15px -15px 0 0 aqua, + -30px -30px 0 0 cornflowerblue; } label: hoverStyles; ` diff --git a/packages/server/test/index.test.js b/packages/server/test/index.test.js index 98f647c509..6c7b3fd3c9 100644 --- a/packages/server/test/index.test.js +++ b/packages/server/test/index.test.js @@ -57,11 +57,12 @@ describe('extractCritical', () => { ) ) - expect((console.error: any).mock.calls).toMatchObject([]) + expect(console.error.mock.calls).toMatchObject([]) }) }) }) }) + describe('hydration', () => { test('only rules that are not in the critical css are inserted', async () => { const { html, ids, css } = await disableBrowserEnvTemporarily(() => { diff --git a/packages/server/test/util.js b/packages/server/test/util.js index 0f5df444d2..2a9a045a80 100644 --- a/packages/server/test/util.js +++ b/packages/server/test/util.js @@ -1,12 +1,11 @@ -// @flow /* eslint-env jest */ import * as React from 'react' import prettify from '@emotion/css-prettifier' -import type { Emotion } from '@emotion/css/create-instance' -// $FlowFixMe +/* import type { Emotion } from '@emotion/css/create-instance' */ import { renderToNodeStream } from 'react-dom/server' import HTMLSerializer from 'jest-serializer-html' +/* type EmotionServer = { renderStylesToNodeStream: () => *, extractCritical: string => { @@ -16,12 +15,13 @@ type EmotionServer = { }, renderStylesToString: string => string } +*/ expect.addSnapshotSerializer(HTMLSerializer) export const getComponents = ( - emotion: Emotion, - { default: styled }: { default: Function } + emotion /*: Emotion */, + { default: styled } /*: { default: Function } */ ) => { let Provider = require('@emotion/react').CacheProvider let { injectGlobal, keyframes, css } = emotion @@ -73,7 +73,9 @@ export const getComponents = ( color: white; background-color: lightgray; border-color: aqua; - box-shadow: -15px -15px 0 0 aqua, -30px -30px 0 0 cornflowerblue; + box-shadow: + -15px -15px 0 0 aqua, + -30px -30px 0 0 cornflowerblue; } label: hoverStyles; ` @@ -131,8 +133,8 @@ export const getComponents = ( const maxColors = Math.pow(16, 6) -export const createBigComponent = ({ injectGlobal, css }: Emotion) => { - const BigComponent = ({ count }: { count: number }) => { +export const createBigComponent = ({ injectGlobal, css } /*: Emotion */) => { + const BigComponent = ({ count } /*: { count: number } */) => { if (count === 0) return null injectGlobal` .some-global-${count} { @@ -158,15 +160,13 @@ export const createBigComponent = ({ injectGlobal, css }: Emotion) => { return BigComponent } -export const prettifyCritical = ({ - html, - css, - ids -}: { +export const prettifyCritical = ( + { html, css, ids } /*: { html: string, css: string, ids: Array -}) => { +} */ +) => { return { css: prettify(css), ids, @@ -174,17 +174,17 @@ export const prettifyCritical = ({ } } -export const prettifyCriticalChunks = ({ - html, - styles -}: { +export const prettifyCriticalChunks = ( + { html, styles } /*: { html: string, styles: Array<{ key: string, css: string, ids: Array }> -}) => { +} */ +) => { return { - // $FlowFixMe - styles: styles.map<{ key: string, css: string, ids: Array }>( - (item): { key: string, css: string, ids: Array } => { + styles: styles.map( + /* <{ key: string, css: string, ids: Array }> */ ( + item + ) /*: { key: string, css: string, ids: Array } */ => { return { css: prettify(item.css || ''), ids: item.ids, key: item.key } } ), @@ -193,20 +193,16 @@ export const prettifyCriticalChunks = ({ } const isSSRedStyle = node => { - const attrib = ((node.getAttribute(`data-emotion`): any): string).split(' ') + const attrib = node.getAttribute(`data-emotion`).split(' ') // SSRed styles have also serialized names set here return attrib.length > 1 } -export const getCssFromChunks = (emotion: Emotion) => { +export const getCssFromChunks = (emotion /*: Emotion*/) => { const chunks = Array.from( - // $FlowFixMe emotion.sheet.tags[0].parentNode.querySelectorAll(`[data-emotion]`) ).filter(isSSRedStyle) - expect( - // $FlowFixMe - document.body.querySelector(`[data-emotion]`) - ).toBeNull() + expect(document.body.querySelector(`[data-emotion]`)).toBeNull() let css = chunks.map(chunk => chunk.textContent || '').join('') return prettify(css) } @@ -220,9 +216,9 @@ export const getInjectedRules = () => ) export const renderToStringWithStream = ( - element: React.Element<*>, - { renderStylesToNodeStream }: EmotionServer -): Promise => + element /*: React.Element<*> */, + { renderStylesToNodeStream } /*: EmotionServer */ +) /*: Promise */ => new Promise((resolve, reject) => { const stream = renderToNodeStream(element).pipe(renderStylesToNodeStream()) let html = '' diff --git a/packages/server/types/resolved-condition.ts b/packages/server/types/resolved-condition.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/server/types/resolved-condition.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/server/types/tsconfig.json b/packages/server/types/tsconfig.json index d7f5174a6e..7bfda68504 100644 --- a/packages/server/types/tsconfig.json +++ b/packages/server/types/tsconfig.json @@ -3,14 +3,23 @@ "baseUrl": "../", "forceConsistentCasingInFileNames": true, "jsx": "react", - "lib": ["es6"], + "lib": [ + "es6", + // dom is needed here because @emotion/server depends on @emotion/css + // which depends on @emotion/sheet, which depends on DOM types + "dom" + ], "module": "commonjs", "noEmit": true, "strict": true, "target": "es5", "typeRoots": ["../"], "types": [], - "skipLibCheck": true + "skipLibCheck": true, + "paths": { + "#is-browser": ["./types/resolved-condition.ts"], + "#is-development": ["./types/resolved-condition.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/server/types/tslint.json b/packages/server/types/tslint.json index 9fb689022d..f16607dc1e 100644 --- a/packages/server/types/tslint.json +++ b/packages/server/types/tslint.json @@ -3,6 +3,7 @@ "rules": { "array-type": [true, "generic"], "semicolon": false, - "file-name-casing": false + "file-name-casing": false, + "unnecessary-bind": false } } diff --git a/packages/sheet/CHANGELOG.md b/packages/sheet/CHANGELOG.md index 8c3e1d4d21..8dfc246d4e 100644 --- a/packages/sheet/CHANGELOG.md +++ b/packages/sheet/CHANGELOG.md @@ -1,5 +1,25 @@ # @emotion/sheet +## 1.4.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +## 1.3.0 + +### Minor Changes + +- [#2431](https://github.com/emotion-js/emotion/pull/2431) [`52aadc6`](https://github.com/emotion-js/emotion/commit/52aadc6e77140867392f81545cc92e04fd84d453) Thanks [@sarayourfriend](https://github.com/sarayourfriend)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + +### Patch Changes + +- [#2431](https://github.com/emotion-js/emotion/pull/2431) [`52aadc6`](https://github.com/emotion-js/emotion/commit/52aadc6e77140867392f81545cc92e04fd84d453) Thanks [@sarayourfriend](https://github.com/sarayourfriend)! - Type declaration for `StyleSheet`'s constructor has been fixed. It incorrectly was specifying that `options` were optional when in reality they weren't. + ## 1.2.2 ### Patch Changes diff --git a/packages/sheet/__tests__/index.js b/packages/sheet/__tests__/index.js index 5cebf0b8c6..df1dd33874 100644 --- a/packages/sheet/__tests__/index.js +++ b/packages/sheet/__tests__/index.js @@ -1,4 +1,3 @@ -// @flow import { safeQuerySelector } from 'test-utils' import { StyleSheet } from '@emotion/sheet' @@ -10,7 +9,6 @@ let defaultOptions = { container: safeQuerySelector('head') } -// $FlowFixMe console.error = jest.fn() afterEach(() => { @@ -23,19 +21,19 @@ beforeEach(() => { }) describe('StyleSheet', () => { - it('should be speedy by default in production', () => { - process.env.NODE_ENV = 'production' - const sheet = new StyleSheet(defaultOptions) - expect(sheet.isSpeedy).toBe(true) - process.env.NODE_ENV = 'test' + gate({ development: false }, ({ test }) => { + test('should be speedy by default in production', () => { + const sheet = new StyleSheet(defaultOptions) + expect(sheet.isSpeedy).toBe(true) + }) }) - it('should not be speedy in a non-production environment by default', () => { + test('should not be speedy in a non-production environment by default', () => { const sheet = new StyleSheet(defaultOptions) expect(sheet.isSpeedy).toBe(false) }) - it('should remove its style elements from the document when flushed', () => { + test('should remove its style elements from the document when flushed', () => { const sheet = new StyleSheet(defaultOptions) sheet.insert(rule) expect(document.documentElement).toMatchSnapshot() @@ -43,46 +41,44 @@ describe('StyleSheet', () => { expect(document.documentElement).toMatchSnapshot() }) - it('should set the data-emotion attribute to the key option', () => { + test('should set the data-emotion attribute to the key option', () => { const key = 'some-key' const sheet = new StyleSheet({ ...defaultOptions, key }) sheet.insert(rule) expect(document.documentElement).toMatchSnapshot() expect( - // $FlowFixMe document.querySelector('[data-emotion]').getAttribute('data-emotion') ).toBe(key) sheet.flush() }) - it('should insert a rule into the DOM when not in speedy', () => { + test('should insert a rule into the DOM when not in speedy', () => { const sheet = new StyleSheet(defaultOptions) sheet.insert(rule) expect(document.documentElement).toMatchSnapshot() sheet.flush() }) - it('should insert a rule with insertRule when in speedy', () => { + test('should insert a rule with insertRule when in speedy', () => { const sheet = new StyleSheet({ ...defaultOptions, speedy: true }) sheet.insert(rule) expect(document.documentElement).toMatchSnapshot() expect(sheet.tags).toHaveLength(1) - // $FlowFixMe expect(sheet.tags[0].sheet.cssRules).toMatchSnapshot() sheet.flush() }) - it('should throw when inserting a bad rule in speedy mode', () => { + test('should throw when inserting a bad rule in speedy mode', () => { const sheet = new StyleSheet({ ...defaultOptions, speedy: true }) sheet.insert('.asdfasdf4###112121211{') expect(console.error).toHaveBeenCalledTimes(1) - expect((console.error: any).mock.calls[0][0]).toBe( + expect(console.error.mock.calls[0][0]).toBe( 'There was a problem inserting the following rule: ".asdfasdf4###112121211{"' ) sheet.flush() }) - it('should set the nonce option as an attribute to style elements', () => { + test('should set the nonce option as an attribute to style elements', () => { let nonce = 'some-nonce' const sheet = new StyleSheet({ ...defaultOptions, nonce }) sheet.insert(rule) @@ -92,9 +88,8 @@ describe('StyleSheet', () => { sheet.flush() }) - it("should use the container option instead of document.head to insert style elements into if it's passed", () => { + test("should use the container option instead of document.head to insert style elements into if it's passed", () => { const container = document.createElement('div') - // $FlowFixMe document.body.appendChild(container) const sheet = new StyleSheet({ ...defaultOptions, container }) expect(sheet.container).toBe(container) @@ -105,7 +100,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should work with a ShadowRoot container', () => { + test('should work with a ShadowRoot container', () => { const div = document.createElement('div') // $FlowFixMe document.body.appendChild(div) @@ -122,7 +117,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should accept prepend option', () => { + test('should accept prepend option', () => { const head = safeQuerySelector('head') const otherStyle = document.createElement('style') otherStyle.setAttribute('id', 'other') @@ -136,7 +131,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should accept insertionPoint option', () => { + test('should accept insertionPoint option', () => { const head = safeQuerySelector('head') head.innerHTML = ` @@ -156,7 +151,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should work if insertionPoint is last element', () => { + test('should work if insertionPoint is last element', () => { const head = safeQuerySelector('head') const lastStyle = document.createElement('style') lastStyle.setAttribute('id', 'last') @@ -174,7 +169,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should be able to hydrate styles', () => { + test('should be able to hydrate styles', () => { const fooStyle = document.createElement('style') fooStyle.textContent = '.foo { color: hotpink; }' const barStyle = document.createElement('style') @@ -192,7 +187,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should flush hydrated styles', () => { + test('should flush hydrated styles', () => { const fooStyle = document.createElement('style') fooStyle.textContent = '.foo { color: hotpink; }' const barStyle = document.createElement('style') @@ -213,7 +208,7 @@ describe('StyleSheet', () => { expect(document.documentElement).toMatchSnapshot() }) - it('should correctly position hydrated styles when used with `prepend` option', () => { + test('should correctly position hydrated styles when used with `prepend` option', () => { const head = safeQuerySelector('head') const otherStyle = document.createElement('style') otherStyle.setAttribute('id', 'other') @@ -238,7 +233,7 @@ describe('StyleSheet', () => { sheet.flush() }) - it('should not crash when flushing when styles are already detached', () => { + test('should not crash when flushing when styles are already detached', () => { const head = safeQuerySelector('head') const sheet = new StyleSheet(defaultOptions) diff --git a/packages/sheet/package.json b/packages/sheet/package.json index 738ac6945f..64224a0626 100644 --- a/packages/sheet/package.json +++ b/packages/sheet/package.json @@ -1,24 +1,33 @@ { "name": "@emotion/sheet", - "version": "1.2.2", + "version": "1.4.0", "description": "emotion's stylesheet", "main": "dist/emotion-sheet.cjs.js", "module": "dist/emotion-sheet.esm.js", - "browser": { - "./dist/emotion-sheet.esm.js": "./dist/emotion-sheet.browser.esm.js" - }, + "types": "dist/emotion-sheet.cjs.d.ts", "exports": { ".": { - "module": { - "browser": "./dist/emotion-sheet.browser.esm.js", - "default": "./dist/emotion-sheet.esm.js" + "types": { + "import": "./dist/emotion-sheet.cjs.mjs", + "default": "./dist/emotion-sheet.cjs.js" + }, + "development": { + "module": "./dist/emotion-sheet.development.esm.js", + "import": "./dist/emotion-sheet.development.cjs.mjs", + "default": "./dist/emotion-sheet.development.cjs.js" }, + "module": "./dist/emotion-sheet.esm.js", "import": "./dist/emotion-sheet.cjs.mjs", "default": "./dist/emotion-sheet.cjs.js" }, "./package.json": "./package.json" }, - "types": "types/index.d.ts", + "imports": { + "#is-development": { + "development": "./src/conditions/true.ts", + "default": "./src/conditions/false.ts" + } + }, "license": "MIT", "scripts": { "test:typescript": "dtslint types" @@ -29,18 +38,10 @@ }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" - }, - "preconstruct": { - "exports": { - "envConditions": [ - "browser" - ] - } + "typescript": "^5.4.5" } } diff --git a/packages/sheet/src/conditions/false.ts b/packages/sheet/src/conditions/false.ts new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/sheet/src/conditions/false.ts @@ -0,0 +1 @@ +export default false diff --git a/packages/sheet/src/conditions/true.ts b/packages/sheet/src/conditions/true.ts new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/sheet/src/conditions/true.ts @@ -0,0 +1 @@ +export default true diff --git a/packages/sheet/src/index.d.ts b/packages/sheet/src/index.d.ts deleted file mode 100644 index 9e46093759..0000000000 --- a/packages/sheet/src/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types' -export { default } from '../types' diff --git a/packages/sheet/src/index.js b/packages/sheet/src/index.ts similarity index 78% rename from packages/sheet/src/index.js rename to packages/sheet/src/index.ts index 4fa90fbb66..86e3f172f8 100644 --- a/packages/sheet/src/index.js +++ b/packages/sheet/src/index.ts @@ -1,4 +1,4 @@ -// @flow +import isDevelopment from '#is-development' /* Based off glamor's StyleSheet, thanks Sunil ❤️ @@ -22,10 +22,8 @@ styleSheet.flush() */ -// $FlowFixMe function sheetForTag(tag: HTMLStyleElement): CSSStyleSheet { if (tag.sheet) { - // $FlowFixMe return tag.sheet } @@ -33,25 +31,25 @@ function sheetForTag(tag: HTMLStyleElement): CSSStyleSheet { /* istanbul ignore next */ for (let i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].ownerNode === tag) { - // $FlowFixMe return document.styleSheets[i] } } + + // this function should always return with a value + // TS can't understand it though so we make it stop complaining here + return undefined as any } export type Options = { - nonce?: string, - key: string, - container: Node, - speedy?: boolean, - prepend?: boolean, + nonce?: string + key: string + container: Node + speedy?: boolean + prepend?: boolean insertionPoint?: HTMLElement } -function createStyleElement(options: { - key: string, - nonce: string | void -}): HTMLStyleElement { +function createStyleElement(options: Options): HTMLStyleElement { let tag = document.createElement('style') tag.setAttribute('data-emotion', options.key) if (options.nonce !== undefined) { @@ -69,15 +67,16 @@ export class StyleSheet { // Using Node instead of HTMLElement since container may be a ShadowRoot container: Node key: string - nonce: string | void - prepend: boolean | void + nonce: string | undefined + prepend: boolean | undefined before: Element | null - insertionPoint: HTMLElement | void + insertionPoint: HTMLElement | undefined + + private _alreadyInsertedOrderInsensitiveRule: boolean | undefined + constructor(options: Options) { this.isSpeedy = - options.speedy === undefined - ? process.env.NODE_ENV === 'production' - : options.speedy + options.speedy === undefined ? !isDevelopment : options.speedy this.tags = [] this.ctr = 0 this.nonce = options.nonce @@ -89,7 +88,7 @@ export class StyleSheet { this.before = null } - _insertTag = (tag: HTMLStyleElement) => { + private _insertTag = (tag: HTMLStyleElement): void => { let before if (this.tags.length === 0) { if (this.insertionPoint) { @@ -106,11 +105,11 @@ export class StyleSheet { this.tags.push(tag) } - hydrate(nodes: HTMLStyleElement[]) { + hydrate(nodes: HTMLStyleElement[]): void { nodes.forEach(this._insertTag) } - insert(rule: string) { + insert(rule: string): void { // the max length is how many rules we have per style tag, it's 65000 in speedy mode // it's 1 in dev because we insert source maps that map a single rule to a location // and you can only have one source map per style tag @@ -119,11 +118,11 @@ export class StyleSheet { } const tag = this.tags[this.tags.length - 1] - if (process.env.NODE_ENV !== 'production') { + if (isDevelopment) { const isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105 - if (isImportRule && (this: any)._alreadyInsertedOrderInsensitiveRule) { + if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) { // this would only cause problem in speedy mode // but we don't want enabling speedy to affect the observable behavior // so we report this error at all times @@ -134,8 +133,8 @@ export class StyleSheet { ) } - ;(this: any)._alreadyInsertedOrderInsensitiveRule = - (this: any)._alreadyInsertedOrderInsensitiveRule || !isImportRule + this._alreadyInsertedOrderInsensitiveRule = + this._alreadyInsertedOrderInsensitiveRule || !isImportRule } if (this.isSpeedy) { @@ -146,7 +145,7 @@ export class StyleSheet { sheet.insertRule(rule, sheet.cssRules.length) } catch (e) { if ( - process.env.NODE_ENV !== 'production' && + isDevelopment && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test( rule ) @@ -163,13 +162,12 @@ export class StyleSheet { this.ctr++ } - flush() { - // $FlowFixMe - this.tags.forEach(tag => tag.parentNode && tag.parentNode.removeChild(tag)) + flush(): void { + this.tags.forEach(tag => tag.parentNode?.removeChild(tag)) this.tags = [] this.ctr = 0 - if (process.env.NODE_ENV !== 'production') { - ;(this: any)._alreadyInsertedOrderInsensitiveRule = false + if (isDevelopment) { + this._alreadyInsertedOrderInsensitiveRule = false } } } diff --git a/packages/sheet/types/index.d.ts b/packages/sheet/types/index.d.ts index 4e0c258e22..bfaefa68e7 100644 --- a/packages/sheet/types/index.d.ts +++ b/packages/sheet/types/index.d.ts @@ -1,26 +1,5 @@ -// Definitions by: Junyoung Clare Jang // TypeScript Version: 2.0 -export interface Options { - nonce?: string - key: string - container: Node - speedy?: boolean - /** @deprecate use `insertionPoint` instead */ - prepend?: boolean - insertionPoint?: HTMLElement -} +/// -export class StyleSheet { - isSpeedy: boolean - ctr: number - tags: Array - container: Node - key: string - nonce?: string - before?: ChildNode | null - constructor(options?: Options) - insert(rule: string): void - flush(): void - hydrate(nodes: Array): void -} +export * from '..' diff --git a/packages/sheet/types/tests.ts b/packages/sheet/types/tests.ts index 68dcab673d..b68facc59b 100644 --- a/packages/sheet/types/tests.ts +++ b/packages/sheet/types/tests.ts @@ -32,7 +32,16 @@ const styleSheet0 = new StyleSheet({ container: document.createElement('div') }) const styleSheet1: StyleSheet = styleSheet0 +// $ExpectError const styleSheet2: StyleSheet = new StyleSheet() +// $ExpectError +const styleSheet3: StyleSheet = new StyleSheet({}) +// $ExpectError +const styleSheet4: StyleSheet = new StyleSheet({ key: 'mykey' }) +// $ExpectError +const styleSheet5: StyleSheet = new StyleSheet({ + container: document.createElement('div') +}) const styleSheet = new StyleSheet({ key: 'abc', diff --git a/packages/sheet/types/tsconfig.json b/packages/sheet/types/tsconfig.json index 4b5665bfd1..af8f3f423f 100644 --- a/packages/sheet/types/tsconfig.json +++ b/packages/sheet/types/tsconfig.json @@ -9,7 +9,10 @@ "strict": true, "target": "es5", "typeRoots": ["../"], - "types": [] + "types": [], + "paths": { + "#is-development": ["./src/conditions/true.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/sheet/types/tslint.json b/packages/sheet/types/tslint.json index daf7494d9c..9f527d6583 100644 --- a/packages/sheet/types/tslint.json +++ b/packages/sheet/types/tslint.json @@ -2,6 +2,7 @@ "extends": "@definitelytyped/dtslint/dtslint.json", "rules": { "array-type": [true, "generic"], - "semicolon": false + "semicolon": false, + "unnecessary-bind": false } } diff --git a/packages/styled/CHANGELOG.md b/packages/styled/CHANGELOG.md index d746505640..285ce3d6bd 100644 --- a/packages/styled/CHANGELOG.md +++ b/packages/styled/CHANGELOG.md @@ -1,5 +1,47 @@ # @emotion/styled +## 11.13.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +- [#3215](https://github.com/emotion-js/emotion/pull/3215) [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5) Thanks [@Andarist](https://github.com/Andarist)! - Added `edge-light` and `workerd` conditions to `package.json` manifest to better serve users using Vercel Edge and Cloudflare Workers. + +### Patch Changes + +- Updated dependencies [[`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b), [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5)]: + - @emotion/serialize@1.3.0 + - @emotion/use-insertion-effect-with-fallbacks@1.1.0 + - @emotion/utils@1.4.0 + +## 11.12.0 + +### Patch Changes + +- [#3206](https://github.com/emotion-js/emotion/pull/3206) [`d1994c4`](https://github.com/emotion-js/emotion/commit/d1994c460761ef37a3d12c587910c4e5b0e6f682) Thanks [@DiegoAndai](https://github.com/DiegoAndai)! - Improved compatibility with the upcoming `@types/react` for React 19 where the global `JSX` namespace doesn't exist anymore + +- [#3208](https://github.com/emotion-js/emotion/pull/3208) [`56109e7`](https://github.com/emotion-js/emotion/commit/56109e79adcf916144250b52ed579f13e4e6e0cf) Thanks [@Andarist](https://github.com/Andarist)! - Only forward defined `ref`s to improve compatibility with the upcoming React 19 + +- Updated dependencies [[`9ca22c6`](https://github.com/emotion-js/emotion/commit/9ca22c6c23e9effa086d161a9b0ae1c645686680), [`a1e881b`](https://github.com/emotion-js/emotion/commit/a1e881b7dffdfa69f5ff32a708a25213b711bd15), [`16d8a8c`](https://github.com/emotion-js/emotion/commit/16d8a8c2198461c4842c73048b406c346a70aa59)]: + - @emotion/serialize@1.2.0 + - @emotion/is-prop-valid@1.3.0 + - @emotion/utils@1.3.0 + - @emotion/babel-plugin@11.12.0 + +## 11.11.5 + +### Patch Changes + +- [#3164](https://github.com/emotion-js/emotion/pull/3164) [`c9b84dbe`](https://github.com/emotion-js/emotion/commit/c9b84dbe5bf5e054e6cd561d6da1e1548e1489d1) Thanks [@Cerber-Ursi](https://github.com/Cerber-Ursi)! - Reordered `styled` overloads to accommodate the recent change in `@emotion/serialize`'s types. + +- Updated dependencies [[`c9b84dbe`](https://github.com/emotion-js/emotion/commit/c9b84dbe5bf5e054e6cd561d6da1e1548e1489d1)]: + - @emotion/serialize@1.1.4 + ## 11.11.0 ### Minor Changes diff --git a/packages/styled/__tests__/as-prop.js b/packages/styled/__tests__/as-prop.js index 26bfd10496..69c57c4375 100644 --- a/packages/styled/__tests__/as-prop.js +++ b/packages/styled/__tests__/as-prop.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/next-env' import React from 'react' import { render, cleanup } from '@testing-library/react' diff --git a/packages/styled/__tests__/edge-cases.js b/packages/styled/__tests__/edge-cases.js index ec10703750..3bf21f72f2 100644 --- a/packages/styled/__tests__/edge-cases.js +++ b/packages/styled/__tests__/edge-cases.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/next-env' import * as React from 'react' import renderer from 'react-test-renderer' diff --git a/packages/styled/__tests__/styled-dom.js b/packages/styled/__tests__/styled-dom.js index cd5b54cb04..91d35fae08 100644 --- a/packages/styled/__tests__/styled-dom.js +++ b/packages/styled/__tests__/styled-dom.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import styled from '@emotion/styled' import { render, cleanup } from '@testing-library/react' diff --git a/packages/styled/__tests__/styled.js b/packages/styled/__tests__/styled.js index 853e79f619..1d83e00198 100644 --- a/packages/styled/__tests__/styled.js +++ b/packages/styled/__tests__/styled.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/next-env' import renderer from 'react-test-renderer' @@ -589,11 +588,9 @@ describe('styled', () => { test('throws if undefined is passed as the component', () => { expect( - () => - // $FlowFixMe - styled(undefined)` - display: flex; - ` + () => styled(undefined)` + display: flex; + ` ).toThrowErrorMatchingSnapshot() }) test('withComponent will replace tags but keep styling classes', () => { @@ -703,14 +700,12 @@ describe('styled', () => { ).toMatchSnapshot() }) test('keyframes with css call', () => { - let SomeComp = styled.div( - css` - animation: ${keyframes({ - 'from,to': { color: 'green' }, - '50%': { color: 'hotpink' } - })}; - ` - ) + let SomeComp = styled.div(css` + animation: ${keyframes({ + 'from,to': { color: 'green' }, + '50%': { color: 'hotpink' } + })}; + `) expect(renderer.create().toJSON()).toMatchSnapshot() }) }) diff --git a/packages/styled/__tests__/warnings.js b/packages/styled/__tests__/warnings.js index dd81036c20..a9e985d2cf 100644 --- a/packages/styled/__tests__/warnings.js +++ b/packages/styled/__tests__/warnings.js @@ -1,25 +1,23 @@ -// @flow import 'test-utils/legacy-env' import * as React from 'react' import { css } from '@emotion/react' import styled from '@emotion/styled' import { render } from '@testing-library/react' -// $FlowFixMe console.error = jest.fn() afterEach(() => { jest.clearAllMocks() }) -it('warns about illegal escape sequences inside first quasi of template literal', () => { +test('warns about illegal escape sequences inside first quasi of template literal', () => { styled.div` :before { content: '\00d7'; } ` - expect((console.error: any).mock.calls[0]).toMatchInlineSnapshot(` + expect(console.error.mock.calls[0]).toMatchInlineSnapshot(` [ "You have illegal escape sequence in your template literal, most likely inside content's property value. Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';". @@ -29,7 +27,7 @@ it('warns about illegal escape sequences inside first quasi of template literal' `) }) -it('warns about illegal escape sequences inside non-first quasi of template literal', () => { +test('warns about illegal escape sequences inside non-first quasi of template literal', () => { const color = css` color: hotpink; ` @@ -41,7 +39,7 @@ it('warns about illegal escape sequences inside non-first quasi of template lite } ` - expect((console.error: any).mock.calls[0]).toMatchInlineSnapshot(` + expect(console.error.mock.calls[0]).toMatchInlineSnapshot(` [ "You have illegal escape sequence in your template literal, most likely inside content's property value. Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';". @@ -51,14 +49,13 @@ it('warns about illegal escape sequences inside non-first quasi of template lite `) }) -it("warns about undefined being passed as object style's key", () => { +test("warns about undefined being passed as object style's key", () => { let ListItem - // $FlowFixMe const List = styled.ul({ [ListItem]: { color: 'hotpink' } }) render() - expect((console.error: any).mock.calls[0]).toMatchInlineSnapshot(` + expect(console.error.mock.calls[0]).toMatchInlineSnapshot(` [ "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).", ] diff --git a/packages/styled/base/package.json b/packages/styled/base/package.json index f115977bae..bd1ec823ce 100644 --- a/packages/styled/base/package.json +++ b/packages/styled/base/package.json @@ -2,9 +2,6 @@ "main": "dist/emotion-styled-base.cjs.js", "module": "dist/emotion-styled-base.esm.js", "umd:main": "dist/emotion-styled-base.umd.min.js", - "browser": { - "./dist/emotion-styled-base.esm.js": "./dist/emotion-styled-base.browser.esm.js" - }, "types": "../types/base", "preconstruct": { "umdName": "emotionStyledBase" diff --git a/packages/styled/flow-tests/base.js b/packages/styled/flow-tests/base.js deleted file mode 100644 index 9ab45ca9f1..0000000000 --- a/packages/styled/flow-tests/base.js +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable no-unused-vars */ -// @flow -import React from 'react' -import createStyled from '../src/base' -import type { CreateStyledComponent, StyledComponent } from '../src/utils' - -const valid: StyledComponent = createStyled('div')({ - color: 'red' -}) - -// $FlowFixMe: expect error - we can't cast a StyledComponent to string -const invalid: string = createStyled('div')({ color: 'red' }) - -const styled = createStyled('div') - -// $FlowFixMe: expect error - we don't expose the private StyledComponent properties -const invalidPropAccess = styled().__emotion_base - -// We allow styled components not to specify their props types -// NOTE: this is allowed only if you don't attempt to export it! -const untyped: StyledComponent = styled({}) diff --git a/packages/styled/flow-tests/index.js b/packages/styled/flow-tests/index.js deleted file mode 100644 index f941917ae2..0000000000 --- a/packages/styled/flow-tests/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable no-unused-vars */ -// @flow -import * as React from 'react' -import styled from '../src' - -type Props = { color: string } -const Foo = styled.div({ - color: 'red' -}) - -const valid = - -// $FlowFixMe: expect error - color must be string -const invalid = - -// components defined using the root method should be identical -// to the ones generated using the shortcuts -const root: typeof Foo = styled('div')` - colors: red; -` diff --git a/packages/styled/flow-tests/styled.js b/packages/styled/flow-tests/styled.js deleted file mode 100644 index 7ede72471c..0000000000 --- a/packages/styled/flow-tests/styled.js +++ /dev/null @@ -1,25 +0,0 @@ -/* eslint-disable no-unused-vars */ -// @flow -import React from 'react' -import styled from '../src' -import type { CreateStyledComponent, StyledComponent } from '../src/utils' - -type Props = { color: string } -const Div = styled.div({ color: 'red' }) - -const validProp =
- -// $FlowFixMe: expect error - color property should be a string -const invalidProp =
- -styled(props =>
{props.color}
)` - color: ${props => props.color}; -` - -styled(props => { - const color: string = props.color - const className: string = props.className - // $FlowFixMe: expect error - color should be a string - const colorTest: number = props.color - return
{props.color}
-})`` diff --git a/packages/styled/macro.js.flow b/packages/styled/macro.js.flow deleted file mode 100644 index b2d58a66c4..0000000000 --- a/packages/styled/macro.js.flow +++ /dev/null @@ -1,3 +0,0 @@ -// @flow -export * from './src/index.js' -export { default } from './src/index.js' diff --git a/packages/styled/package.json b/packages/styled/package.json index 6fe8b82cd9..185f24c0cd 100644 --- a/packages/styled/package.json +++ b/packages/styled/package.json @@ -1,6 +1,6 @@ { "name": "@emotion/styled", - "version": "11.11.0", + "version": "11.13.0", "description": "styled API for emotion", "main": "dist/emotion-styled.cjs.js", "module": "dist/emotion-styled.esm.js", @@ -12,11 +12,11 @@ }, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.2", - "@emotion/serialize": "^1.1.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", @@ -29,9 +29,9 @@ }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "@emotion/react": "11.11.4", + "@emotion/react": "11.13.0", "react": "16.14.0", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "publishConfig": { "access": "public" @@ -44,25 +44,112 @@ "macro.*" ], "umd:main": "dist/emotion-styled.umd.min.js", - "browser": { - "./dist/emotion-styled.esm.js": "./dist/emotion-styled.browser.esm.js" - }, "exports": { "./base": { - "module": { - "worker": "./base/dist/emotion-styled-base.worker.esm.js", - "browser": "./base/dist/emotion-styled-base.browser.esm.js", - "default": "./base/dist/emotion-styled-base.esm.js" + "types": { + "import": "./base/dist/emotion-styled-base.cjs.mjs", + "default": "./base/dist/emotion-styled-base.cjs.js" + }, + "development": { + "edge-light": { + "module": "./base/dist/emotion-styled-base.development.edge-light.esm.js", + "import": "./base/dist/emotion-styled-base.development.edge-light.cjs.mjs", + "default": "./base/dist/emotion-styled-base.development.edge-light.cjs.js" + }, + "worker": { + "module": "./base/dist/emotion-styled-base.development.edge-light.esm.js", + "import": "./base/dist/emotion-styled-base.development.edge-light.cjs.mjs", + "default": "./base/dist/emotion-styled-base.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./base/dist/emotion-styled-base.development.edge-light.esm.js", + "import": "./base/dist/emotion-styled-base.development.edge-light.cjs.mjs", + "default": "./base/dist/emotion-styled-base.development.edge-light.cjs.js" + }, + "browser": { + "module": "./base/dist/emotion-styled-base.browser.development.esm.js", + "import": "./base/dist/emotion-styled-base.browser.development.cjs.mjs", + "default": "./base/dist/emotion-styled-base.browser.development.cjs.js" + }, + "module": "./base/dist/emotion-styled-base.development.esm.js", + "import": "./base/dist/emotion-styled-base.development.cjs.mjs", + "default": "./base/dist/emotion-styled-base.development.cjs.js" + }, + "edge-light": { + "module": "./base/dist/emotion-styled-base.edge-light.esm.js", + "import": "./base/dist/emotion-styled-base.edge-light.cjs.mjs", + "default": "./base/dist/emotion-styled-base.edge-light.cjs.js" }, + "worker": { + "module": "./base/dist/emotion-styled-base.edge-light.esm.js", + "import": "./base/dist/emotion-styled-base.edge-light.cjs.mjs", + "default": "./base/dist/emotion-styled-base.edge-light.cjs.js" + }, + "workerd": { + "module": "./base/dist/emotion-styled-base.edge-light.esm.js", + "import": "./base/dist/emotion-styled-base.edge-light.cjs.mjs", + "default": "./base/dist/emotion-styled-base.edge-light.cjs.js" + }, + "browser": { + "module": "./base/dist/emotion-styled-base.browser.esm.js", + "import": "./base/dist/emotion-styled-base.browser.cjs.mjs", + "default": "./base/dist/emotion-styled-base.browser.cjs.js" + }, + "module": "./base/dist/emotion-styled-base.esm.js", "import": "./base/dist/emotion-styled-base.cjs.mjs", "default": "./base/dist/emotion-styled-base.cjs.js" }, ".": { - "module": { - "worker": "./dist/emotion-styled.worker.esm.js", - "browser": "./dist/emotion-styled.browser.esm.js", - "default": "./dist/emotion-styled.esm.js" + "types": { + "import": "./dist/emotion-styled.cjs.mjs", + "default": "./dist/emotion-styled.cjs.js" }, + "development": { + "edge-light": { + "module": "./dist/emotion-styled.development.edge-light.esm.js", + "import": "./dist/emotion-styled.development.edge-light.cjs.mjs", + "default": "./dist/emotion-styled.development.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-styled.development.edge-light.esm.js", + "import": "./dist/emotion-styled.development.edge-light.cjs.mjs", + "default": "./dist/emotion-styled.development.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-styled.development.edge-light.esm.js", + "import": "./dist/emotion-styled.development.edge-light.cjs.mjs", + "default": "./dist/emotion-styled.development.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-styled.browser.development.esm.js", + "import": "./dist/emotion-styled.browser.development.cjs.mjs", + "default": "./dist/emotion-styled.browser.development.cjs.js" + }, + "module": "./dist/emotion-styled.development.esm.js", + "import": "./dist/emotion-styled.development.cjs.mjs", + "default": "./dist/emotion-styled.development.cjs.js" + }, + "edge-light": { + "module": "./dist/emotion-styled.edge-light.esm.js", + "import": "./dist/emotion-styled.edge-light.cjs.mjs", + "default": "./dist/emotion-styled.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-styled.edge-light.esm.js", + "import": "./dist/emotion-styled.edge-light.cjs.mjs", + "default": "./dist/emotion-styled.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-styled.edge-light.esm.js", + "import": "./dist/emotion-styled.edge-light.cjs.mjs", + "default": "./dist/emotion-styled.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-styled.browser.esm.js", + "import": "./dist/emotion-styled.browser.cjs.mjs", + "default": "./dist/emotion-styled.browser.cjs.js" + }, + "module": "./dist/emotion-styled.esm.js", "import": "./dist/emotion-styled.cjs.mjs", "default": "./dist/emotion-styled.cjs.js" }, @@ -75,6 +162,19 @@ "default": "./macro.js" } }, + "imports": { + "#is-development": { + "development": "./src/conditions/true.js", + "default": "./src/conditions/false.js" + }, + "#is-browser": { + "edge-light": "./src/conditions/false.js", + "workerd": "./src/conditions/false.js", + "worker": "./src/conditions/false.js", + "browser": "./src/conditions/true.js", + "default": "./src/conditions/is-browser.js" + } + }, "preconstruct": { "umdName": "emotionStyled", "entrypoints": [ @@ -82,10 +182,6 @@ "./base.js" ], "exports": { - "envConditions": [ - "browser", - "worker" - ], "extra": { "./macro": { "types": { diff --git a/packages/styled/src/base.js b/packages/styled/src/base.js index 29f3a43a36..35641c3916 100644 --- a/packages/styled/src/base.js +++ b/packages/styled/src/base.js @@ -1,14 +1,17 @@ -// @flow import * as React from 'react' import { getDefaultShouldForwardProp, - composeShouldForwardProps, + composeShouldForwardProps + /* type StyledOptions, type CreateStyled, type PrivateStyledComponent, type StyledElementType + */ } from './utils' import { withEmotionCache, ThemeContext } from '@emotion/react' +import isDevelopment from '#is-development' +import isBrowser from '#is-browser' import { getRegisteredStyles, insertStyles, @@ -22,8 +25,6 @@ Because you write your CSS inside a JavaScript string you actually have to do do You can read more about this here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences` -let isBrowser = typeof document !== 'undefined' - const Insertion = ({ cache, serialized, isStringTag }) => { registerStyles(cache, serialized, isStringTag) @@ -51,8 +52,11 @@ const Insertion = ({ cache, serialized, isStringTag }) => { return null } -let createStyled: CreateStyled = (tag: any, options?: StyledOptions) => { - if (process.env.NODE_ENV !== 'production') { +let createStyled /*: CreateStyled */ = ( + tag /*: any */, + options /* ?: StyledOptions */ +) => { + if (isDevelopment) { if (tag === undefined) { throw new Error( 'You are trying to create a styled element with an undefined component.\nYou may have forgotten to import it.' @@ -74,7 +78,8 @@ let createStyled: CreateStyled = (tag: any, options?: StyledOptions) => { shouldForwardProp || getDefaultShouldForwardProp(baseTag) const shouldUseAs = !defaultShouldForwardProp('as') - return function (): PrivateStyledComponent { + /* return function(): PrivateStyledComponent { */ + return function () { let args = arguments let styles = isReal && tag.__emotion_styles !== undefined @@ -87,22 +92,21 @@ let createStyled: CreateStyled = (tag: any, options?: StyledOptions) => { if (args[0] == null || args[0].raw === undefined) { styles.push.apply(styles, args) } else { - if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) { + if (isDevelopment && args[0][0] === undefined) { console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR) } styles.push(args[0][0]) let len = args.length let i = 1 for (; i < len; i++) { - if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) { + if (isDevelopment && args[0][i] === undefined) { console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR) } styles.push(args[i], args[0][i]) } } - // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class - const Styled: PrivateStyledComponent = withEmotionCache( + const Styled /*: PrivateStyledComponent */ = withEmotionCache( (props, cache, ref) => { const FinalTag = (shouldUseAs && props.as) || baseTag @@ -147,16 +151,14 @@ let createStyled: CreateStyled = (tag: any, options?: StyledOptions) => { for (let key in props) { if (shouldUseAs && key === 'as') continue - if ( - // $FlowFixMe - finalShouldForwardProp(key) - ) { + if (finalShouldForwardProp(key)) { newProps[key] = props[key] } } - newProps.className = className - newProps.ref = ref + if (ref) { + newProps.ref = ref + } return ( <> @@ -188,24 +190,19 @@ let createStyled: CreateStyled = (tag: any, options?: StyledOptions) => { Object.defineProperty(Styled, 'toString', { value() { - if ( - targetClassName === undefined && - process.env.NODE_ENV !== 'production' - ) { + if (targetClassName === undefined && isDevelopment) { return 'NO_COMPONENT_SELECTOR' } - // $FlowFixMe: coerce undefined to string return `.${targetClassName}` } }) Styled.withComponent = ( - nextTag: StyledElementType, - nextOptions?: StyledOptions + nextTag /*: StyledElementType */, + nextOptions /* ?: StyledOptions */ ) => { return createStyled(nextTag, { ...options, - // $FlowFixMe ...nextOptions, shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true) })(...styles) diff --git a/packages/styled/src/conditions/false.js b/packages/styled/src/conditions/false.js new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/styled/src/conditions/false.js @@ -0,0 +1 @@ +export default false diff --git a/packages/styled/src/conditions/is-browser.js b/packages/styled/src/conditions/is-browser.js new file mode 100644 index 0000000000..12bdad68fc --- /dev/null +++ b/packages/styled/src/conditions/is-browser.js @@ -0,0 +1 @@ +export default typeof document !== 'undefined' diff --git a/packages/styled/src/conditions/true.js b/packages/styled/src/conditions/true.js new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/styled/src/conditions/true.js @@ -0,0 +1 @@ +export default true diff --git a/packages/styled/src/index.js b/packages/styled/src/index.js index 420f7f4764..dd11a7c906 100644 --- a/packages/styled/src/index.js +++ b/packages/styled/src/index.js @@ -1,4 +1,3 @@ -// @flow import styled from './base' import { tags } from './tags' @@ -6,7 +5,6 @@ import { tags } from './tags' const newStyled = styled.bind() tags.forEach(tagName => { - // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type newStyled[tagName] = newStyled(tagName) }) diff --git a/packages/styled/src/tags.js b/packages/styled/src/tags.js index e33db9d7e8..19bd402366 100644 --- a/packages/styled/src/tags.js +++ b/packages/styled/src/tags.js @@ -1,4 +1,3 @@ -// @flow export const tags = [ 'a', 'abbr', diff --git a/packages/styled/src/utils.js b/packages/styled/src/utils.js index 1ae27ebfc7..83a999d19a 100644 --- a/packages/styled/src/utils.js +++ b/packages/styled/src/utils.js @@ -1,11 +1,11 @@ -// @flow -import type { +/* import type { ElementType, StatelessFunctionalComponent, AbstractComponent -} from 'react' +} from 'react' */ import isPropValid from '@emotion/is-prop-valid' +/* export type Interpolations = Array export type StyledElementType = @@ -33,11 +33,12 @@ export type PrivateStyledComponent = StyledComponent & { __emotion_styles: any, __emotion_forwardProp: any } +*/ const testOmitPropsOnStringTag = isPropValid -const testOmitPropsOnComponent = (key: string) => key !== 'theme' +const testOmitPropsOnComponent = (key /*: string */) => key !== 'theme' -export const getDefaultShouldForwardProp = (tag: ElementType) => +export const getDefaultShouldForwardProp = (tag /*: ElementType */) => typeof tag === 'string' && // 96 is one less than the char code // for "a" so this is checking that @@ -47,16 +48,16 @@ export const getDefaultShouldForwardProp = (tag: ElementType) => : testOmitPropsOnComponent export const composeShouldForwardProps = ( - tag: PrivateStyledComponent, - options: StyledOptions | void, - isReal: boolean + tag /*: PrivateStyledComponent */, + options /*: StyledOptions | void */, + isReal /*: boolean */ ) => { let shouldForwardProp if (options) { const optionsShouldForwardProp = options.shouldForwardProp shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp - ? (propName: string) => + ? (propName /*: string */) => tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName) : optionsShouldForwardProp @@ -69,6 +70,7 @@ export const composeShouldForwardProps = ( return shouldForwardProp } +/* export type CreateStyledComponent = ( ...args: Interpolations ) => StyledComponent @@ -81,3 +83,4 @@ export type CreateStyled = { [key: string]: CreateStyledComponent, bind: () => CreateStyled } +*/ diff --git a/packages/styled/test/__snapshots__/source-map.test.js.snap b/packages/styled/test/__snapshots__/source-map.test.js.snap index f165bb74b2..5f1f21cf4d 100644 --- a/packages/styled/test/__snapshots__/source-map.test.js.snap +++ b/packages/styled/test/__snapshots__/source-map.test.js.snap @@ -8,7 +8,7 @@ exports[`inserts source map 1`] = ` data-s="" > - .css-1igngve-Comp{color:hotpink;}/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS1tYXAudGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNdUIiLCJmaWxlIjoic291cmNlLW1hcC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJ1xuaW1wb3J0IHJlbmRlcmVyIGZyb20gJ3JlYWN0LXRlc3QtcmVuZGVyZXInXG5cbnRlc3QoJ2luc2VydHMgc291cmNlIG1hcCcsICgpID0+IHtcbiAgbGV0IENvbXAgPSBzdHlsZWQuZGl2YFxuICAgIGNvbG9yOiBob3RwaW5rO1xuICBgXG4gIHJlbmRlcmVyLmNyZWF0ZSg8Q29tcCAvPilcbiAgZXhwZWN0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkudG9NYXRjaFNuYXBzaG90KClcbn0pXG4iXX0= */ + .css-1igngve-Comp{color:hotpink;}/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZS1tYXAudGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLdUIiLCJmaWxlIjoic291cmNlLW1hcC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnXG5pbXBvcnQgcmVuZGVyZXIgZnJvbSAncmVhY3QtdGVzdC1yZW5kZXJlcidcblxudGVzdCgnaW5zZXJ0cyBzb3VyY2UgbWFwJywgKCkgPT4ge1xuICBsZXQgQ29tcCA9IHN0eWxlZC5kaXZgXG4gICAgY29sb3I6IGhvdHBpbms7XG4gIGBcbiAgcmVuZGVyZXIuY3JlYXRlKDxDb21wIC8+KVxuICBleHBlY3QoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS50b01hdGNoU25hcHNob3QoKVxufSlcbiJdfQ== */ diff --git a/packages/styled/test/babel-plugin.test.js b/packages/styled/test/babel-plugin.test.js index fc8cbdbe33..c1c9492f20 100644 --- a/packages/styled/test/babel-plugin.test.js +++ b/packages/styled/test/babel-plugin.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import * as renderer from 'react-test-renderer' diff --git a/packages/styled/test/composition.test.js b/packages/styled/test/composition.test.js index 6a8703c041..208ac0fd19 100644 --- a/packages/styled/test/composition.test.js +++ b/packages/styled/test/composition.test.js @@ -1,4 +1,3 @@ -// @flow /** @jsx jsx */ import 'test-utils/legacy-env' import * as renderer from 'react-test-renderer' diff --git a/packages/styled/test/index.test.js b/packages/styled/test/index.test.js index e73594200c..9b37633a47 100644 --- a/packages/styled/test/index.test.js +++ b/packages/styled/test/index.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import * as renderer from 'react-test-renderer' @@ -300,11 +299,9 @@ describe('styled', () => { test('throws if undefined is passed as the component', () => { expect( - () => - // $FlowFixMe - styled(undefined)` - display: flex; - ` + () => styled(undefined)` + display: flex; + ` ).toThrowErrorMatchingSnapshot() }) @@ -391,7 +388,7 @@ describe('styled', () => { }) test('name with class component', () => { - class SomeComponent extends React.Component<{ className: string }> { + class SomeComponent extends React.Component /* <{ className: string }> */ { render() { return
} diff --git a/packages/styled/test/prop-filtering.test.js b/packages/styled/test/prop-filtering.test.js index 34e4be0e77..7d776bf19a 100644 --- a/packages/styled/test/prop-filtering.test.js +++ b/packages/styled/test/prop-filtering.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import * as renderer from 'react-test-renderer' diff --git a/packages/styled/test/source-map.test.js b/packages/styled/test/source-map.test.js index 380bb69bd0..41b9284cb2 100644 --- a/packages/styled/test/source-map.test.js +++ b/packages/styled/test/source-map.test.js @@ -1,4 +1,3 @@ -// @flow import React from 'react' import styled from '@emotion/styled' import renderer from 'react-test-renderer' diff --git a/packages/styled/test/theming.dom.test.js b/packages/styled/test/theming.dom.test.js index fcb219edd7..bae7d46f71 100644 --- a/packages/styled/test/theming.dom.test.js +++ b/packages/styled/test/theming.dom.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import styled from '@emotion/styled' diff --git a/packages/styled/test/theming.test.js b/packages/styled/test/theming.test.js index da9578b42a..69a1431d66 100644 --- a/packages/styled/test/theming.test.js +++ b/packages/styled/test/theming.test.js @@ -1,4 +1,3 @@ -// @flow import 'test-utils/legacy-env' import React from 'react' import * as renderer from 'react-test-renderer' diff --git a/packages/styled/types/base.d.ts b/packages/styled/types/base.d.ts index 05efbaea48..c6533eec79 100644 --- a/packages/styled/types/base.d.ts +++ b/packages/styled/types/base.d.ts @@ -4,6 +4,7 @@ import * as React from 'react' import { ComponentSelector, Interpolation } from '@emotion/serialize' import { PropsOf, Theme } from '@emotion/react' +import { ReactJSXIntrinsicElements } from './jsx-namespace' export { ArrayInterpolation, @@ -49,9 +50,9 @@ export interface StyledComponent< withComponent>>( component: C ): StyledComponent> - withComponent( + withComponent( tag: Tag - ): StyledComponent + ): StyledComponent } /** @@ -63,10 +64,18 @@ export interface CreateStyledComponent< SpecificComponentProps extends {} = {}, JSXProps extends {} = {} > { + ( + template: TemplateStringsArray, + ...styles: Array< + Interpolation + > + ): StyledComponent + /** * @typeparam AdditionalProps Additional props to add to your styled component */ - ( + ( + template: TemplateStringsArray, ...styles: Array< Interpolation< ComponentProps & @@ -80,18 +89,10 @@ export interface CreateStyledComponent< JSXProps > - ( - template: TemplateStringsArray, - ...styles: Array< - Interpolation - > - ): StyledComponent - /** * @typeparam AdditionalProps Additional props to add to your styled component */ - ( - template: TemplateStringsArray, + ( ...styles: Array< Interpolation< ComponentProps & @@ -169,23 +170,26 @@ export interface CreateStyled { > < - Tag extends keyof JSX.IntrinsicElements, - ForwardedProps extends keyof JSX.IntrinsicElements[Tag] & - string = keyof JSX.IntrinsicElements[Tag] & string + Tag extends keyof ReactJSXIntrinsicElements, + ForwardedProps extends keyof ReactJSXIntrinsicElements[Tag] & + string = keyof ReactJSXIntrinsicElements[Tag] & string >( tag: Tag, - options: FilteringStyledOptions + options: FilteringStyledOptions< + ReactJSXIntrinsicElements[Tag], + ForwardedProps + > ): CreateStyledComponent< { theme?: Theme; as?: React.ElementType }, - Pick + Pick > - ( + ( tag: Tag, - options?: StyledOptions + options?: StyledOptions ): CreateStyledComponent< { theme?: Theme; as?: React.ElementType }, - JSX.IntrinsicElements[Tag] + ReactJSXIntrinsicElements[Tag] > } diff --git a/packages/styled/types/index.d.ts b/packages/styled/types/index.d.ts index 883a79ea01..28ef9a2d41 100644 --- a/packages/styled/types/index.d.ts +++ b/packages/styled/types/index.d.ts @@ -3,6 +3,7 @@ import { Theme } from '@emotion/react' import { CreateStyled as BaseCreateStyled, CreateStyledComponent } from './base' +import { ReactJSXIntrinsicElements } from './jsx-namespace' export { ArrayInterpolation, @@ -17,12 +18,12 @@ export { } from './base' export type StyledTags = { - [Tag in keyof JSX.IntrinsicElements]: CreateStyledComponent< + [Tag in keyof ReactJSXIntrinsicElements]: CreateStyledComponent< { theme?: Theme as?: React.ElementType }, - JSX.IntrinsicElements[Tag] + ReactJSXIntrinsicElements[Tag] > } diff --git a/packages/styled/types/jsx-namespace.d.ts b/packages/styled/types/jsx-namespace.d.ts new file mode 100644 index 0000000000..a45d7c3c21 --- /dev/null +++ b/packages/styled/types/jsx-namespace.d.ts @@ -0,0 +1,14 @@ +// this is basically a slimmed down copy of https://github.com/emotion-js/emotion/blob/main/packages/react/types/jsx-namespace.d.ts +// it helps to avoid issues when combining newer `@emotion/styled` and older `@emotion/react` versions +// in such setup, ReactJSX namespace won't exist in `@emotion/react` and that would lead to errors +import 'react' + +type IsPreReact19 = 2 extends Parameters>['length'] + ? true + : false + +export type ReactJSXIntrinsicElements = true extends IsPreReact19 + ? /** @ts-ignore */ + JSX.IntrinsicElements + : /** @ts-ignore */ + React.JSX.IntrinsicElements diff --git a/packages/styled/types/resolved-condition.ts b/packages/styled/types/resolved-condition.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/styled/types/resolved-condition.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/styled/types/tests.tsx b/packages/styled/types/tests.tsx index 97c17a0739..bbfa2b27d8 100644 --- a/packages/styled/types/tests.tsx +++ b/packages/styled/types/tests.tsx @@ -63,7 +63,7 @@ const Container3 = styled.div(({ theme }) => ({ const Box = styled('div', { shouldForwardProp: ( propName - ): propName is Exclude => + ): propName is Exclude => propName !== 'color' })<{ color: Array }>(props => ({ color: props.color[0] @@ -115,8 +115,8 @@ interface AdditionalTest { } const Input4 = styled.input` & + ${Label}: ${props => ({ - marginLeft: props.left -})} + marginLeft: props.left + })} ` const Input5 = styled.input` color: ${props => props.theme.primary}; diff --git a/packages/styled/types/tsconfig.json b/packages/styled/types/tsconfig.json index 47e662ca72..2db59e4a57 100644 --- a/packages/styled/types/tsconfig.json +++ b/packages/styled/types/tsconfig.json @@ -10,7 +10,11 @@ "strict": true, "target": "es5", "typeRoots": ["../"], - "types": [] + "types": [], + "paths": { + "#is-browser": ["./types/resolved-condition.ts"], + "#is-development": ["./types/resolved-condition.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/styled/types/tslint.json b/packages/styled/types/tslint.json index 2a89e6bbb0..5b9490dda3 100644 --- a/packages/styled/types/tslint.json +++ b/packages/styled/types/tslint.json @@ -16,6 +16,10 @@ "check-type-operator", "check-preblock" ], - "no-unnecessary-generics": false + "no-unnecessary-generics": false, + "unnecessary-bind": false, + "ban-ts-ignore": false, + "no-empty-interface": false, + "strict-export-declare-modifiers": false } } diff --git a/packages/unitless/CHANGELOG.md b/packages/unitless/CHANGELOG.md index 834068c100..049dd1d645 100644 --- a/packages/unitless/CHANGELOG.md +++ b/packages/unitless/CHANGELOG.md @@ -1,5 +1,11 @@ # @emotion/unitless +## 0.9.0 + +### Minor Changes + +- [#2430](https://github.com/emotion-js/emotion/pull/2430) [`fc4d27c`](https://github.com/emotion-js/emotion/commit/fc4d27c2dbce7fdb778212be86b07e31d8d82a98) Thanks [@sarayourfriend](https://github.com/sarayourfriend)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + ## 0.8.1 ### Patch Changes diff --git a/packages/unitless/package.json b/packages/unitless/package.json index 30da6a1d05..390a7b0af1 100644 --- a/packages/unitless/package.json +++ b/packages/unitless/package.json @@ -1,9 +1,10 @@ { "name": "@emotion/unitless", - "version": "0.8.1", + "version": "0.9.0", "description": "An object of css properties that don't accept values with units", "main": "dist/emotion-unitless.cjs.js", "module": "dist/emotion-unitless.esm.js", + "types": "dist/emotion-unitless.cjs.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/unitless", "publishConfig": { @@ -15,6 +16,10 @@ ], "exports": { ".": { + "types": { + "import": "./dist/emotion-unitless.cjs.mjs", + "default": "./dist/emotion-unitless.cjs.js" + }, "module": "./dist/emotion-unitless.esm.js", "import": "./dist/emotion-unitless.cjs.mjs", "default": "./dist/emotion-unitless.cjs.js" diff --git a/packages/unitless/src/index.d.ts b/packages/unitless/src/index.d.ts deleted file mode 100644 index 9e46093759..0000000000 --- a/packages/unitless/src/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types' -export { default } from '../types' diff --git a/packages/unitless/src/index.js b/packages/unitless/src/index.ts similarity index 94% rename from packages/unitless/src/index.js rename to packages/unitless/src/index.ts index 66bc957a5a..478252a6b0 100644 --- a/packages/unitless/src/index.js +++ b/packages/unitless/src/index.ts @@ -1,6 +1,4 @@ -// @flow - -let unitlessKeys: { [key: string]: 1 } = { +let unitlessKeys: Record = { animationIterationCount: 1, aspectRatio: 1, borderImageOutset: 1, diff --git a/packages/use-insertion-effect-with-fallbacks/CHANGELOG.md b/packages/use-insertion-effect-with-fallbacks/CHANGELOG.md index 3e832f0bf1..c93e21be74 100644 --- a/packages/use-insertion-effect-with-fallbacks/CHANGELOG.md +++ b/packages/use-insertion-effect-with-fallbacks/CHANGELOG.md @@ -1,5 +1,17 @@ # @emotion/use-insertion-effect-with-fallbacks +## 1.1.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +- [#3215](https://github.com/emotion-js/emotion/pull/3215) [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5) Thanks [@Andarist](https://github.com/Andarist)! - Added `edge-light` and `workerd` conditions to `package.json` manifest to better serve users using Vercel Edge and Cloudflare Workers. + ## 1.0.1 ### Patch Changes diff --git a/packages/use-insertion-effect-with-fallbacks/package.json b/packages/use-insertion-effect-with-fallbacks/package.json index 2c387ea024..41b1ef4cdb 100644 --- a/packages/use-insertion-effect-with-fallbacks/package.json +++ b/packages/use-insertion-effect-with-fallbacks/package.json @@ -1,12 +1,9 @@ { "name": "@emotion/use-insertion-effect-with-fallbacks", - "version": "1.0.1", + "version": "1.1.0", "description": "A wrapper package that uses `useInsertionEffect` or a fallback for it", "main": "dist/emotion-use-insertion-effect-with-fallbacks.cjs.js", "module": "dist/emotion-use-insertion-effect-with-fallbacks.esm.js", - "browser": { - "./dist/emotion-use-insertion-effect-with-fallbacks.esm.js": "./dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js" - }, "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/use-insertion-effect-with-fallbacks", "publishConfig": { @@ -24,22 +21,43 @@ }, "exports": { ".": { - "module": { - "worker": "./dist/emotion-use-insertion-effect-with-fallbacks.worker.esm.js", - "browser": "./dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js", - "default": "./dist/emotion-use-insertion-effect-with-fallbacks.esm.js" + "types": { + "import": "./dist/emotion-use-insertion-effect-with-fallbacks.cjs.mjs", + "default": "./dist/emotion-use-insertion-effect-with-fallbacks.cjs.js" + }, + "edge-light": { + "module": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.esm.js", + "import": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.cjs.mjs", + "default": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.esm.js", + "import": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.cjs.mjs", + "default": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.esm.js", + "import": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.cjs.mjs", + "default": "./dist/emotion-use-insertion-effect-with-fallbacks.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js", + "import": "./dist/emotion-use-insertion-effect-with-fallbacks.browser.cjs.mjs", + "default": "./dist/emotion-use-insertion-effect-with-fallbacks.browser.cjs.js" }, + "module": "./dist/emotion-use-insertion-effect-with-fallbacks.esm.js", "import": "./dist/emotion-use-insertion-effect-with-fallbacks.cjs.mjs", "default": "./dist/emotion-use-insertion-effect-with-fallbacks.cjs.js" }, "./package.json": "./package.json" }, - "preconstruct": { - "exports": { - "envConditions": [ - "browser", - "worker" - ] + "imports": { + "#is-browser": { + "edge-light": "./src/conditions/false.js", + "workerd": "./src/conditions/false.js", + "worker": "./src/conditions/false.js", + "browser": "./src/conditions/true.js", + "default": "./src/conditions/is-browser.js" } } } diff --git a/packages/use-insertion-effect-with-fallbacks/src/conditions/false.js b/packages/use-insertion-effect-with-fallbacks/src/conditions/false.js new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/packages/use-insertion-effect-with-fallbacks/src/conditions/false.js @@ -0,0 +1 @@ +export default false diff --git a/packages/use-insertion-effect-with-fallbacks/src/conditions/is-browser.js b/packages/use-insertion-effect-with-fallbacks/src/conditions/is-browser.js new file mode 100644 index 0000000000..12bdad68fc --- /dev/null +++ b/packages/use-insertion-effect-with-fallbacks/src/conditions/is-browser.js @@ -0,0 +1 @@ +export default typeof document !== 'undefined' diff --git a/packages/use-insertion-effect-with-fallbacks/src/conditions/true.js b/packages/use-insertion-effect-with-fallbacks/src/conditions/true.js new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/packages/use-insertion-effect-with-fallbacks/src/conditions/true.js @@ -0,0 +1 @@ +export default true diff --git a/packages/use-insertion-effect-with-fallbacks/src/index.js b/packages/use-insertion-effect-with-fallbacks/src/index.js index 9109f993c5..92f21d16ec 100644 --- a/packages/use-insertion-effect-with-fallbacks/src/index.js +++ b/packages/use-insertion-effect-with-fallbacks/src/index.js @@ -1,6 +1,5 @@ import * as React from 'react' - -const isBrowser = typeof document !== 'undefined' +import isBrowser from '#is-browser' const syncFallback = create => create() diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 67b85138a5..a34aedb806 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -1,5 +1,23 @@ # @emotion/utils +## 1.4.0 + +### Minor Changes + +- [#3198](https://github.com/emotion-js/emotion/pull/3198) [`d8ff8a5`](https://github.com/emotion-js/emotion/commit/d8ff8a5990c691017b463b3fa23a9f46ab28147b) Thanks [@Andarist](https://github.com/Andarist)! - Migrated away from relying on `process.env.NODE_ENV` checks to differentiate between production and development builds. + + Development builds (and other environment-specific builds) can be used by using proper conditions (see [here](https://nodejs.org/docs/v20.15.1/api/packages.html#resolving-user-conditions)). Most modern bundlers/frameworks already preconfigure those for the user so no action has to be taken. + + Default files should continue to work in all environments. + +- [#3215](https://github.com/emotion-js/emotion/pull/3215) [`a9f6912`](https://github.com/emotion-js/emotion/commit/a9f691299844bf6837b7ad41ee17cd912496f3d5) Thanks [@Andarist](https://github.com/Andarist)! - Added `edge-light` and `workerd` conditions to `package.json` manifest to better serve users using Vercel Edge and Cloudflare Workers. + +## 1.3.0 + +### Minor Changes + +- [#2359](https://github.com/emotion-js/emotion/pull/2359) [`16d8a8c`](https://github.com/emotion-js/emotion/commit/16d8a8c2198461c4842c73048b406c346a70aa59) Thanks [@rjdestigter](https://github.com/rjdestigter)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + ## 1.2.1 ### Patch Changes diff --git a/packages/utils/package.json b/packages/utils/package.json index 880221abd5..440aa60281 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,25 +1,51 @@ { "name": "@emotion/utils", - "version": "1.2.1", + "version": "1.4.0", "description": "internal utils for emotion", "main": "dist/emotion-utils.cjs.js", "module": "dist/emotion-utils.esm.js", - "browser": { - "./dist/emotion-utils.esm.js": "./dist/emotion-utils.browser.esm.js" - }, + "types": "dist/emotion-utils.cjs.d.ts", "exports": { ".": { - "module": { - "worker": "./dist/emotion-utils.worker.esm.js", - "browser": "./dist/emotion-utils.browser.esm.js", - "default": "./dist/emotion-utils.esm.js" + "types": { + "import": "./dist/emotion-utils.cjs.mjs", + "default": "./dist/emotion-utils.cjs.js" + }, + "edge-light": { + "module": "./dist/emotion-utils.edge-light.esm.js", + "import": "./dist/emotion-utils.edge-light.cjs.mjs", + "default": "./dist/emotion-utils.edge-light.cjs.js" + }, + "worker": { + "module": "./dist/emotion-utils.edge-light.esm.js", + "import": "./dist/emotion-utils.edge-light.cjs.mjs", + "default": "./dist/emotion-utils.edge-light.cjs.js" + }, + "workerd": { + "module": "./dist/emotion-utils.edge-light.esm.js", + "import": "./dist/emotion-utils.edge-light.cjs.mjs", + "default": "./dist/emotion-utils.edge-light.cjs.js" + }, + "browser": { + "module": "./dist/emotion-utils.browser.esm.js", + "import": "./dist/emotion-utils.browser.cjs.mjs", + "default": "./dist/emotion-utils.browser.cjs.js" }, + "module": "./dist/emotion-utils.esm.js", "import": "./dist/emotion-utils.cjs.mjs", "default": "./dist/emotion-utils.cjs.js" }, "./package.json": "./package.json" }, - "types": "types/index.d.ts", + "imports": { + "#is-browser": { + "edge-light": "./src/conditions/false.ts", + "workerd": "./src/conditions/false.ts", + "worker": "./src/conditions/false.ts", + "browser": "./src/conditions/true.ts", + "default": "./src/conditions/is-browser.ts" + } + }, "license": "MIT", "scripts": { "test:typescript": "dtslint types" @@ -30,19 +56,10 @@ }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" - }, - "preconstruct": { - "exports": { - "envConditions": [ - "browser", - "worker" - ] - } + "typescript": "^5.4.5" } } diff --git a/packages/utils/src/conditions/false.ts b/packages/utils/src/conditions/false.ts new file mode 100644 index 0000000000..44fe920021 --- /dev/null +++ b/packages/utils/src/conditions/false.ts @@ -0,0 +1 @@ +export default false as boolean diff --git a/packages/utils/src/conditions/is-browser.ts b/packages/utils/src/conditions/is-browser.ts new file mode 100644 index 0000000000..12bdad68fc --- /dev/null +++ b/packages/utils/src/conditions/is-browser.ts @@ -0,0 +1 @@ +export default typeof document !== 'undefined' diff --git a/packages/utils/src/conditions/true.ts b/packages/utils/src/conditions/true.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/utils/src/conditions/true.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/utils/src/index.d.ts b/packages/utils/src/index.d.ts deleted file mode 100644 index 51a3b4100a..0000000000 --- a/packages/utils/src/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../types' diff --git a/packages/utils/src/index.js b/packages/utils/src/index.ts similarity index 91% rename from packages/utils/src/index.js rename to packages/utils/src/index.ts index e43a688806..88dc29da95 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.ts @@ -1,13 +1,11 @@ -// @flow -import type { RegisteredCache, EmotionCache, SerializedStyles } from './types' - -const isBrowser = typeof document !== 'undefined' +import isBrowser from '#is-browser' +import { RegisteredCache, EmotionCache, SerializedStyles } from './types' export function getRegisteredStyles( registered: RegisteredCache, registeredStyles: string[], classNames: string -) { +): string { let rawClassName = '' classNames.split(' ').forEach(className => { @@ -24,7 +22,7 @@ export const registerStyles = ( cache: EmotionCache, serialized: SerializedStyles, isStringTag: boolean -) => { +): void => { let className = `${cache.key}-${serialized.name}` if ( // we only need to add the styles to the registered cache if the @@ -55,7 +53,7 @@ export const insertStyles = ( if (cache.inserted[serialized.name] === undefined) { let stylesForSSR = '' - let current = serialized + let current: SerializedStyles | undefined = serialized do { let maybeStyles = cache.insert( serialized === current ? `.${className}` : '', diff --git a/packages/utils/src/types.js b/packages/utils/src/types.js deleted file mode 100644 index 173b5063eb..0000000000 --- a/packages/utils/src/types.js +++ /dev/null @@ -1,28 +0,0 @@ -// @flow -import type { StyleSheet } from '@emotion/sheet' - -export type RegisteredCache = { [string]: string } - -export type Interpolation = any - -export type SerializedStyles = {| - name: string, - styles: string, - map?: string, - next?: SerializedStyles -|} - -export type EmotionCache = { - inserted: { [string]: string | true }, - registered: RegisteredCache, - sheet: StyleSheet, - key: string, - compat?: true, - nonce?: string, - insert: ( - selector: string, - serialized: SerializedStyles, - sheet: StyleSheet, - shouldCache: boolean - ) => string | void -} diff --git a/packages/utils/src/types.ts b/packages/utils/src/types.ts new file mode 100644 index 0000000000..bb76f91981 --- /dev/null +++ b/packages/utils/src/types.ts @@ -0,0 +1,27 @@ +import type { StyleSheet } from '@emotion/sheet' + +export type { StyleSheet } + +export type RegisteredCache = Record + +export type SerializedStyles = { + name: string + styles: string + map?: string + next?: SerializedStyles +} + +export type EmotionCache = { + inserted: Record + registered: RegisteredCache + sheet: StyleSheet + key: string + compat?: true + nonce?: string + insert: ( + selector: string, + serialized: SerializedStyles, + sheet: StyleSheet, + shouldCache: boolean + ) => string | void +} diff --git a/packages/utils/types/index.d.ts b/packages/utils/types/index.d.ts index f44c0f534c..d0d62d34ab 100644 --- a/packages/utils/types/index.d.ts +++ b/packages/utils/types/index.d.ts @@ -1,59 +1,5 @@ -// Definitions by: Junyoung Clare Jang // TypeScript Version: 2.2 -export interface RegisteredCache { - [key: string]: string -} +/// -export interface StyleSheet { - container: HTMLElement - nonce?: string - key: string - insert(rule: string): void - flush(): void - tags: Array -} - -export interface EmotionCache { - inserted: { - [key: string]: string | true - } - registered: RegisteredCache - sheet: StyleSheet - key: string - compat?: true - nonce?: string - insert( - selector: string, - serialized: SerializedStyles, - sheet: StyleSheet, - shouldCache: boolean - ): string | void -} - -export interface SerializedStyles { - name: string - styles: string - map?: string - next?: SerializedStyles -} - -export const isBrowser: boolean - -export function getRegisteredStyles( - registered: RegisteredCache, - registeredStyles: Array, - classNames: string -): string - -export function registerStyles( - cache: EmotionCache, - serialized: SerializedStyles, - isStringTag: boolean -): void - -export function insertStyles( - cache: EmotionCache, - serialized: SerializedStyles, - isStringTag: boolean -): string | void +export * from '..' diff --git a/packages/utils/types/resolved-condition.ts b/packages/utils/types/resolved-condition.ts new file mode 100644 index 0000000000..e8abb53e2b --- /dev/null +++ b/packages/utils/types/resolved-condition.ts @@ -0,0 +1 @@ +export default true as boolean diff --git a/packages/utils/types/tests.ts b/packages/utils/types/tests.ts index c0c9b2b0ea..3033719a12 100644 --- a/packages/utils/types/tests.ts +++ b/packages/utils/types/tests.ts @@ -1,11 +1,8 @@ import { EmotionCache, RegisteredCache, - SerializedStyles, - StyleSheet, getRegisteredStyles, - insertStyles, - isBrowser + insertStyles } from '@emotion/utils' declare const testCache: EmotionCache @@ -39,7 +36,3 @@ insertStyles(testCache, { name: 'abc', styles: 'font-size: 18px;' }) - -const test0: boolean = isBrowser -// $ExpectError -const test1: number = isBrowser diff --git a/packages/utils/types/tsconfig.json b/packages/utils/types/tsconfig.json index 4b5665bfd1..3362d50f05 100644 --- a/packages/utils/types/tsconfig.json +++ b/packages/utils/types/tsconfig.json @@ -9,7 +9,11 @@ "strict": true, "target": "es5", "typeRoots": ["../"], - "types": [] + "types": [], + "paths": { + "#is-browser": ["./types/resolved-condition.ts"], + "#is-development": ["./src/conditions/true.ts"] + } }, "include": ["./*.ts", "./*.tsx"] } diff --git a/packages/weak-memoize/CHANGELOG.md b/packages/weak-memoize/CHANGELOG.md index e4c0b9b77e..9cababeec0 100644 --- a/packages/weak-memoize/CHANGELOG.md +++ b/packages/weak-memoize/CHANGELOG.md @@ -1,5 +1,11 @@ # @emotion/weak-memoize +## 0.4.0 + +### Minor Changes + +- [#2429](https://github.com/emotion-js/emotion/pull/2429) [`b1d16b0`](https://github.com/emotion-js/emotion/commit/b1d16b087d057524f374e347fdfd6a03e505107a) Thanks [@sarayourfriend](https://github.com/sarayourfriend)! - Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. + ## 0.3.1 ### Patch Changes diff --git a/packages/weak-memoize/package.json b/packages/weak-memoize/package.json index 4d384abcca..a45e415da1 100644 --- a/packages/weak-memoize/package.json +++ b/packages/weak-memoize/package.json @@ -1,10 +1,10 @@ { "name": "@emotion/weak-memoize", - "version": "0.3.1", + "version": "0.4.0", "description": "A memoization function that uses a WeakMap", "main": "dist/emotion-weak-memoize.cjs.js", "module": "dist/emotion-weak-memoize.esm.js", - "types": "types/index.d.ts", + "types": "dist/emotion-weak-memoize.cjs.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/weak-memoize", "scripts": { @@ -15,15 +15,18 @@ }, "devDependencies": { "@definitelytyped/dtslint": "0.0.112", - "typescript": "^4.5.5" + "typescript": "^5.4.5" }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "exports": { ".": { + "types": { + "import": "./dist/emotion-weak-memoize.cjs.mjs", + "default": "./dist/emotion-weak-memoize.cjs.js" + }, "module": "./dist/emotion-weak-memoize.esm.js", "import": "./dist/emotion-weak-memoize.cjs.mjs", "default": "./dist/emotion-weak-memoize.cjs.js" diff --git a/packages/weak-memoize/src/index.d.ts b/packages/weak-memoize/src/index.d.ts deleted file mode 100644 index 9e46093759..0000000000 --- a/packages/weak-memoize/src/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../types' -export { default } from '../types' diff --git a/packages/weak-memoize/src/index.js b/packages/weak-memoize/src/index.js deleted file mode 100644 index 83c9379d9f..0000000000 --- a/packages/weak-memoize/src/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow -let weakMemoize = function (func: Arg => Return): Arg => Return { - // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps - let cache: WeakMap = new WeakMap() - return arg => { - if (cache.has(arg)) { - // $FlowFixMe - return cache.get(arg) - } - let ret = func(arg) - cache.set(arg, ret) - return ret - } -} - -export default weakMemoize diff --git a/packages/weak-memoize/src/index.ts b/packages/weak-memoize/src/index.ts new file mode 100644 index 0000000000..ba4c5bc555 --- /dev/null +++ b/packages/weak-memoize/src/index.ts @@ -0,0 +1,17 @@ +let weakMemoize = function ( + func: (arg: Arg) => Return +): (arg: Arg) => Return { + let cache = new WeakMap() + return (arg: Arg) => { + if (cache.has(arg)) { + // Use non-null assertion because we just checked that the cache `has` it + // This allows us to remove `undefined` from the return value + return cache.get(arg)! + } + let ret = func(arg) + cache.set(arg, ret) + return ret + } +} + +export default weakMemoize diff --git a/packages/weak-memoize/types/index.d.ts b/packages/weak-memoize/types/index.d.ts index b5344615a0..91fafac0bd 100644 --- a/packages/weak-memoize/types/index.d.ts +++ b/packages/weak-memoize/types/index.d.ts @@ -1,7 +1,3 @@ // TypeScript Version: 2.2 -type UnaryFn = (arg: Arg) => Return - -export default function weakMemoize( - func: UnaryFn -): UnaryFn +export { default } from '..' diff --git a/packages/weak-memoize/types/tslint.json b/packages/weak-memoize/types/tslint.json index 2ab14e84ff..48756497b5 100644 --- a/packages/weak-memoize/types/tslint.json +++ b/packages/weak-memoize/types/tslint.json @@ -18,6 +18,8 @@ ], "no-unnecessary-generics": false, - "strict-export-declare-modifiers": false + "strict-export-declare-modifiers": false, + "no-default-import": false, + "unnecessary-bind": false } } diff --git a/scripts/babel-preset-emotion-dev/package.json b/scripts/babel-preset-emotion-dev/package.json index 904888f53f..cf9723419c 100644 --- a/scripts/babel-preset-emotion-dev/package.json +++ b/scripts/babel-preset-emotion-dev/package.json @@ -5,6 +5,7 @@ "private": true, "dependencies": { "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-transform-flow-strip-types": "^7.17.12" + "babel-plugin-add-basic-constructor-for-react-components": "^0.1.0", + "babel-plugin-fix-dce-for-classes-with-statics": "^0.1.0" } } diff --git a/scripts/babel-preset-emotion-dev/src/index.js b/scripts/babel-preset-emotion-dev/src/index.js index 803cd40265..c6f3c28124 100644 --- a/scripts/babel-preset-emotion-dev/src/index.js +++ b/scripts/babel-preset-emotion-dev/src/index.js @@ -14,7 +14,10 @@ module.exports = (api, options = {}) => { ] ], plugins: [ - require.resolve('@babel/plugin-transform-flow-strip-types'), + require.resolve( + 'babel-plugin-add-basic-constructor-for-react-components' + ), + require.resolve('babel-plugin-fix-dce-for-classes-with-statics'), require.resolve('babel-plugin-codegen'), [ require.resolve('@babel/plugin-transform-runtime'), diff --git a/scripts/babel-tester/babel-check-duplicated-nodes.d.ts b/scripts/babel-tester/babel-check-duplicated-nodes.d.ts new file mode 100644 index 0000000000..3db965bb9e --- /dev/null +++ b/scripts/babel-tester/babel-check-duplicated-nodes.d.ts @@ -0,0 +1,6 @@ +declare module 'babel-check-duplicated-nodes' { + export default function checkDuplicatedNodes( + babel: typeof import('@babel/core'), + ast: import('@babel/core').types.File + ): void +} diff --git a/scripts/babel-tester/package.json b/scripts/babel-tester/package.json index b8e2378cc1..3dd089d587 100644 --- a/scripts/babel-tester/package.json +++ b/scripts/babel-tester/package.json @@ -1,10 +1,14 @@ { "name": "babel-tester", - "main": "src/index.js", + "main": "src/index.ts", "version": "0.4.5", "private": true, "dependencies": { "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "babel-check-duplicated-nodes": "^1.0.0" + }, + "devDependencies": { + "@types/jest-in-case": "^1.0.5" } } diff --git a/scripts/babel-tester/src/index.js b/scripts/babel-tester/src/index.ts similarity index 65% rename from scripts/babel-tester/src/index.js rename to scripts/babel-tester/src/index.ts index 95020ad68c..78dffe8a5e 100644 --- a/scripts/babel-tester/src/index.js +++ b/scripts/babel-tester/src/index.ts @@ -1,4 +1,3 @@ -// @flow /* eslint-env jest */ import jestInCase from 'jest-in-case' import * as babel from '@babel/core' @@ -7,19 +6,40 @@ import path from 'path' import { promisify } from 'util' import checkDuplicatedNodes from 'babel-check-duplicated-nodes' +type FixtureTestCase = { + filename: string + babelFileName: string + only: boolean + skip: boolean +} + +type TestCase = { + code?: string + filename?: string + babelFileName?: string + plugins?: any[] +} + +type TesterOptions = { + plugins?: any[] + presets?: any[] + transform?: (code: string) => string + filename?: string +} + const readFile = promisify(fs.readFile) const separator = '\n\n ↓ ↓ ↓ ↓ ↓ ↓\n\n' -const tester = allOpts => async opts => { +const tester = (allOpts: TesterOptions) => async (opts: TestCase) => { let rawCode = opts.code if (!opts.code && opts.filename) { rawCode = await readFile(opts.filename, 'utf-8') } if (allOpts.transform) { - rawCode = allOpts.transform(rawCode) + rawCode = allOpts.transform(rawCode!) } - const { code, ast } = babel.transformSync(rawCode, { + const { code, ast } = babel.transformSync(rawCode!, { plugins: [ 'macros', '@babel/plugin-syntax-jsx', @@ -33,13 +53,13 @@ const tester = allOpts => async opts => { configFile: false, ast: true, filename: 'babelFileName' in opts ? opts.babelFileName : 'emotion.js' - }) - expect(() => checkDuplicatedNodes(babel, ast)).not.toThrow() + })! + expect(() => checkDuplicatedNodes(babel, ast!)).not.toThrow() expect(`${rawCode}${separator}${code}`).toMatchSnapshot() } -function doThing(dirname) { +function readFixturesDir(dirname: string): string[] { const fixturesFolder = path.join(dirname, '__fixtures__') return fs .readdirSync(fixturesFolder) @@ -49,23 +69,14 @@ function doThing(dirname) { export default ( name: string, cases: - | { - [key: string]: { - code: string, - plugins?: any[], - babelFileName?: string - } - } - | string, - opts?: { - plugins?: Array<*>, - presets?: Array<*>, - transform?: string => string, - filename?: string - } = {} + | string + | Record, + opts: TesterOptions = {} ) => { if (typeof cases === 'string') { - cases = doThing(cases).reduce((accum, filename) => { + const fixtureCases = readFixturesDir(cases).reduce< + Record + >((accum, filename) => { let skip = false let only = false let testTitle = filename @@ -84,8 +95,8 @@ export default ( } return accum }, {}) + return jestInCase(name, tester(opts), fixtureCases) } - // $FlowFixMe return jestInCase(name, tester(opts), cases) } diff --git a/scripts/benchmarks/.babelrc b/scripts/benchmarks/.babelrc index 8fecfd4cf0..4e025bd5bd 100644 --- a/scripts/benchmarks/.babelrc +++ b/scripts/benchmarks/.babelrc @@ -1,7 +1,6 @@ { "presets": [ ["@babel/env", { "modules": false, "loose": true }], - "@babel/flow", "@babel/react" ], "plugins": [ diff --git a/scripts/benchmarks/package.json b/scripts/benchmarks/package.json index 8031d1c0ec..f02fb0bbfb 100644 --- a/scripts/benchmarks/package.json +++ b/scripts/benchmarks/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@babel/core": "^7.18.5", - "@emotion/babel-plugin": "^11.0.0", + "@emotion/babel-plugin": "^11.12.0", "babel-plugin-react-native-web": "^0.17.5", "d3-scale-chromatic": "^3.0.0", "http-server": "^14.0.0", diff --git a/scripts/benchmarks/run.js b/scripts/benchmarks/run.js index 76a50c9dd0..a78a6d32bb 100644 --- a/scripts/benchmarks/run.js +++ b/scripts/benchmarks/run.js @@ -1,5 +1,5 @@ // some of this is from https://github.com/styled-components/styled-components/blob/master/benchmarks/run-headless.js -// @flow + const path = require('path') const puppeteer = require('puppeteer') const { createServer } = require('http-server') diff --git a/scripts/benchmarks/src/app/App.js b/scripts/benchmarks/src/app/App.js index 55e2468e68..552d0f0780 100644 --- a/scripts/benchmarks/src/app/App.js +++ b/scripts/benchmarks/src/app/App.js @@ -16,7 +16,7 @@ import { colors } from './theme' const Overlay = () => -export default class App extends Component<{}> { +export default class App extends Component { static displayName = '@app/App' constructor(props, context) { diff --git a/scripts/benchmarks/src/app/Benchmark/index.js b/scripts/benchmarks/src/app/Benchmark/index.js index a5b74eb000..bf11aff079 100644 --- a/scripts/benchmarks/src/app/Benchmark/index.js +++ b/scripts/benchmarks/src/app/Benchmark/index.js @@ -4,19 +4,17 @@ * https://github.com/paularmstrong/react-component-benchmark */ -/* global $Values */ -/** - * @flow - */ import * as Timing from './timing' import React, { Component } from 'react' import { getMean, getMedian, getStdDev } from './math' +/* import type { BenchResultsType, FullSampleTimingType, SampleTimingType } from './types' +*/ export const BenchmarkType = { MOUNT: 'mount', @@ -25,9 +23,9 @@ export const BenchmarkType = { } const shouldRender = ( - cycle: number, - type: $Values -): boolean => { + cycle /*: number */, + type /*: $Values */ +) /*: boolean */ => { switch (type) { // Render every odd iteration (first, third, etc) // Mounts and unmounts the component @@ -43,9 +41,9 @@ const shouldRender = ( } const shouldRecord = ( - cycle: number, - type: $Values -): boolean => { + cycle /*: number */, + type /*: $Values */ +) /*: boolean */ => { switch (type) { // Record every odd iteration (when mounted: first, third, etc) case BenchmarkType.MOUNT: @@ -62,10 +60,10 @@ const shouldRecord = ( } const isDone = ( - cycle: number, - sampleCount: number, - type: $Values -): boolean => { + cycle /*: number */, + sampleCount /*: number */, + type /*: $Values */ +) /*: boolean */ => { switch (type) { case BenchmarkType.MOUNT: return cycle >= sampleCount * 2 - 1 @@ -78,8 +76,9 @@ const isDone = ( } } -const sortNumbers = (a: number, b: number): number => a - b +const sortNumbers = (a /*: number */, b /*: number */) /*: number */ => a - b +/* type BenchmarkPropsType = { component: typeof React.Component, forceLayout?: boolean, @@ -95,19 +94,19 @@ type BenchmarkStateType = { cycle: number, running: boolean } +*/ /** * Benchmark * TODO: documentation */ -export default class Benchmark extends Component< +export default class Benchmark extends Component /* < BenchmarkPropsType, BenchmarkStateType -> { - _raf: ?Function - _startTime: number - _samples: Array - +> */ { + _raf /*: ?Function */ + _startTime /*: number */ + _samples /*: Array */ static displayName = 'Benchmark' static defaultProps = { @@ -118,7 +117,7 @@ export default class Benchmark extends Component< static Type = BenchmarkType - constructor(props: BenchmarkPropsType, context?: {}) { + constructor(props /*: BenchmarkPropsType */, context /* ?: {} */) { super(props, context) const cycle = 0 const componentProps = props.getComponentProps({ cycle }) @@ -131,7 +130,7 @@ export default class Benchmark extends Component< this._samples = [] } - componentWillReceiveProps(nextProps: BenchmarkPropsType) { + componentWillReceiveProps(nextProps /*: BenchmarkPropsType */) { if (nextProps) { this.setState(state => ({ componentProps: nextProps.getComponentProps(state.cycle) @@ -140,8 +139,8 @@ export default class Benchmark extends Component< } componentWillUpdate( - nextProps: BenchmarkPropsType, - nextState: BenchmarkStateType + nextProps /*: BenchmarkPropsType */, + nextState /*: BenchmarkStateType */ ) { if (nextState.running && !this.state.running) { this._startTime = Timing.now() @@ -217,24 +216,24 @@ export default class Benchmark extends Component< } this._raf = window.requestAnimationFrame(() => { - this.setState((state: BenchmarkStateType) => ({ + this.setState((state /*: BenchmarkStateType */) => ({ cycle: state.cycle + 1, componentProps })) }) } - getSamples(): Array { + getSamples() /*: Array */ { return this._samples.reduce( ( - memo: Array, + memo /*: Array */, { scriptingStart, scriptingEnd, layoutStart, layoutEnd - }: SampleTimingType - ): Array => { + } /*: SampleTimingType */ + ) /*: Array */ => { memo.push({ start: scriptingStart, end: layoutEnd || scriptingEnd || 0, @@ -249,7 +248,7 @@ export default class Benchmark extends Component< ) } - _handleComplete(endTime: number) { + _handleComplete(endTime /*: number */) { const { onComplete } = this.props const samples = this.getSamples() diff --git a/scripts/benchmarks/src/app/Benchmark/math.js b/scripts/benchmarks/src/app/Benchmark/math.js index 2104930261..efd1213653 100644 --- a/scripts/benchmarks/src/app/Benchmark/math.js +++ b/scripts/benchmarks/src/app/Benchmark/math.js @@ -1,11 +1,9 @@ -// @flow import stats from 'stats-analysis' -type ValuesType = Array -export const getStdDev = (values: ValuesType): number => { +export const getStdDev = values => { const avg = getMean(values) - const squareDiffs = values.map((value: number) => { + const squareDiffs = values.map(value => { const diff = value - avg return diff * diff }) @@ -13,7 +11,7 @@ export const getStdDev = (values: ValuesType): number => { return Math.sqrt(getMean(squareDiffs)) } -export const getMean = (values: ValuesType): number => { +export const getMean = values => { let valuesWithoutOutliers = stats.filterMADoutliers(values) return stats.mean(valuesWithoutOutliers) } diff --git a/scripts/benchmarks/src/app/Benchmark/timing.js b/scripts/benchmarks/src/app/Benchmark/timing.js index 297efcc177..de7d507ef3 100644 --- a/scripts/benchmarks/src/app/Benchmark/timing.js +++ b/scripts/benchmarks/src/app/Benchmark/timing.js @@ -1,10 +1,8 @@ -// @flow - const NS_PER_MS = 1e6 const MS_PER_S = 1e3 // Returns a high resolution time (if possible) in milliseconds -export function now(): number { +export function now() { if (window && window.performance) { return window.performance.now() } else if (process && process.hrtime) { diff --git a/scripts/benchmarks/src/app/Benchmark/types.js b/scripts/benchmarks/src/app/Benchmark/types.js index 8bbc5a2333..abba17c3bd 100644 --- a/scripts/benchmarks/src/app/Benchmark/types.js +++ b/scripts/benchmarks/src/app/Benchmark/types.js @@ -1,32 +1,30 @@ -/** - * @flow - */ - +/* export type FullSampleTimingType = { - start: number, - end: number, - scriptingStart: number, - scriptingEnd: number, - layoutStart?: number, + start: number + end: number + scriptingStart: number + scriptingEnd: number + layoutStart?: number layoutEnd?: number } export type BenchResultsType = { - startTime: number, - endTime: number, - runTime: number, - sampleCount: number, - samples: Array, - max: number, - min: number, - median: number, - mean: number, + startTime: number + endTime: number + runTime: number + sampleCount: number + samples: Array + max: number + min: number + median: number + mean: number stdDev: number } export type SampleTimingType = { - scriptingStart: number, - scriptingEnd?: number, - layoutStart?: number, + scriptingStart: number + scriptingEnd?: number + layoutStart?: number layoutEnd?: number } +*/ diff --git a/scripts/benchmarks/src/app/Button.js b/scripts/benchmarks/src/app/Button.js index 51902e3b6b..619f87e78f 100644 --- a/scripts/benchmarks/src/app/Button.js +++ b/scripts/benchmarks/src/app/Button.js @@ -2,7 +2,7 @@ import { StyleSheet, TouchableHighlight, Text } from 'react-native' import React, { Component } from 'react' import { bool, func, string, any } from 'prop-types' -export default class Button extends Component<*> { +export default class Button extends Component { static displayName = '@app/Button' static propTypes = { diff --git a/scripts/benchmarks/src/app/ReportCard.js b/scripts/benchmarks/src/app/ReportCard.js index 94a4826c30..112c63b0f1 100644 --- a/scripts/benchmarks/src/app/ReportCard.js +++ b/scripts/benchmarks/src/app/ReportCard.js @@ -2,12 +2,12 @@ import Text from './Text' import { StyleSheet, View } from 'react-native' import React from 'react' -const fmt = (time: number) => { +const fmt = (time /*: number */) => { const i = Number(Math.round(time + 'e2') + 'e-2').toFixed(2) return 10 / i > 1 ? `0${i}` : i } -class ReportCard extends React.PureComponent<{||}> { +class ReportCard extends React.PureComponent { render() { const { benchmarkName, diff --git a/scripts/benchmarks/src/impl.js b/scripts/benchmarks/src/impl.js index d489a76c42..c618a176f2 100644 --- a/scripts/benchmarks/src/impl.js +++ b/scripts/benchmarks/src/impl.js @@ -1,4 +1,3 @@ -// @flow import * as React from 'react' import * as EmotionCssFunc from './implementations/emotion-css-func' @@ -11,19 +10,21 @@ const impls = { 'emotion-styled': EmotionStyled } +/* type ComponentsType = { - Box: React.ElementType, - Dot: React.ElementType, - Provider: React.ElementType, + Box: React.ElementType + Dot: React.ElementType + Provider: React.ElementType View: React.ElementType } type ImplementationType = { - components: ComponentsType, + components: ComponentsType name: string } +*/ -const implementations: Array = Object.keys(impls).map( +const implementations /*: Array */ = Object.keys(impls).map( name => { const components = impls[name] return { components, name } @@ -31,8 +32,8 @@ const implementations: Array = Object.keys(impls).map( ) const toObject = ( - impls: Array -): { [name: string]: ImplementationType } => + impls /*: Array */ +) /*: { [name: string]: ImplementationType } */ => impls.reduce((acc, impl) => { acc[impl.name] = impl return acc diff --git a/scripts/benchmarks/src/implementations/emotion-css-prop/Provider.js b/scripts/benchmarks/src/implementations/emotion-css-prop/Provider.js index a625d2e8aa..9cbeedb277 100644 --- a/scripts/benchmarks/src/implementations/emotion-css-prop/Provider.js +++ b/scripts/benchmarks/src/implementations/emotion-css-prop/Provider.js @@ -1,10 +1,9 @@ -// @flow import * as React from 'react' import { CacheProvider } from '@emotion/react' import createCache from '@emotion/cache' let cache = createCache({ key: 'emo' }) -export default (props: { children: React.Node }) => { +export default props => { return {props.children} } diff --git a/scripts/benchmarks/src/implementations/emotion-styled/Provider.js b/scripts/benchmarks/src/implementations/emotion-styled/Provider.js index a625d2e8aa..9cbeedb277 100644 --- a/scripts/benchmarks/src/implementations/emotion-styled/Provider.js +++ b/scripts/benchmarks/src/implementations/emotion-styled/Provider.js @@ -1,10 +1,9 @@ -// @flow import * as React from 'react' import { CacheProvider } from '@emotion/react' import createCache from '@emotion/cache' let cache = createCache({ key: 'emo' }) -export default (props: { children: React.Node }) => { +export default props => { return {props.children} } diff --git a/scripts/benchmarks/src/index.js b/scripts/benchmarks/src/index.js index 45dfa5e087..36e828fa7a 100644 --- a/scripts/benchmarks/src/index.js +++ b/scripts/benchmarks/src/index.js @@ -1,4 +1,3 @@ -// @flow import App from './app/App' import implementations from './impl' import Tree from './cases/Tree' diff --git a/scripts/ssr-benchmarks/bench.js b/scripts/ssr-benchmarks/bench.js index d9790e143f..6cabeb3b64 100644 --- a/scripts/ssr-benchmarks/bench.js +++ b/scripts/ssr-benchmarks/bench.js @@ -75,7 +75,6 @@ let CssFuncTriangle = createTriangle(({ x, y, size, color, ...props }) => { ...props }) }) -// $FlowFixMe let CacheContext = CacheProvider._context let hasOwnProperty = Object.prototype.hasOwnProperty diff --git a/scripts/test-utils/dev-mode.js b/scripts/test-utils/dev-mode.js deleted file mode 100644 index 89084d52cb..0000000000 --- a/scripts/test-utils/dev-mode.js +++ /dev/null @@ -1 +0,0 @@ -process.env.NODE_ENV = 'development' diff --git a/scripts/test-utils/enzyme-env.js b/scripts/test-utils/enzyme-env.js index 69078bc17f..88c8c3b323 100644 --- a/scripts/test-utils/enzyme-env.js +++ b/scripts/test-utils/enzyme-env.js @@ -1,4 +1,3 @@ -// @flow import Enzyme from 'enzyme' import Adapter from 'enzyme-adapter-react-16' diff --git a/scripts/test-utils/index.d.ts b/scripts/test-utils/index.d.ts new file mode 100644 index 0000000000..82d6949991 --- /dev/null +++ b/scripts/test-utils/index.d.ts @@ -0,0 +1,14 @@ +/// + +interface Flags { + development: boolean +} + +declare global { + function gate( + flags: Flags, + exec: ({ test }: { test: typeof globalThis.test }) => void + ): void +} + +export {} diff --git a/scripts/test-utils/legacy-env.js b/scripts/test-utils/legacy-env.js index 21a64fb4cb..6810e1cbc9 100644 --- a/scripts/test-utils/legacy-env.js +++ b/scripts/test-utils/legacy-env.js @@ -1,7 +1,5 @@ -// @flow /* eslint-env jest */ import 'test-utils/enzyme-env' import { createEnzymeSerializer } from '@emotion/jest/enzyme' -// $FlowFixMe jest flow type definitions don't include new plugin API expect.addSnapshotSerializer(createEnzymeSerializer()) diff --git a/scripts/test-utils/next-env.js b/scripts/test-utils/next-env.js index c8cc860692..1ad2699748 100644 --- a/scripts/test-utils/next-env.js +++ b/scripts/test-utils/next-env.js @@ -1,6 +1,4 @@ -// @flow /* eslint-env jest */ import { createSerializer } from '@emotion/jest' -// $FlowFixMe jest flow type definitions don't include new plugin API expect.addSnapshotSerializer(createSerializer()) diff --git a/scripts/test-utils/package.json b/scripts/test-utils/package.json index 9c92b81774..d3225a4e17 100644 --- a/scripts/test-utils/package.json +++ b/scripts/test-utils/package.json @@ -2,5 +2,11 @@ "name": "test-utils", "main": "src/index", "version": "0.3.2", - "private": true + "private": true, + "imports": { + "#is-development": { + "development": "./resolved-conditions/true.js", + "default": "./resolved-conditions/false.js" + } + } } diff --git a/test/pretty-css.js b/scripts/test-utils/pretty-css.js similarity index 60% rename from test/pretty-css.js rename to scripts/test-utils/pretty-css.js index 22a11a5196..8a8694b420 100644 --- a/test/pretty-css.js +++ b/scripts/test-utils/pretty-css.js @@ -1,19 +1,20 @@ -// @flow import prettify from '@emotion/css-prettifier' +/* type StyleSheet = { tags: Array } +*/ export default { - test: (val: any) => val && val.tags !== undefined && Array.isArray(val.tags), + test: val => val && val.tags !== undefined && Array.isArray(val.tags), serialize( - val: StyleSheet, - config: *, - indentation: string, - depth: number, - refs: *, - printer: Function + val /* : StyleSheet */, + config, + indentation /* : string */, + depth /* : number */, + refs, + printer /* : Function */ ) { let styles = val.tags.map(tag => tag.textContent || '').join('') return printer( diff --git a/scripts/test-utils/prod-mode.js b/scripts/test-utils/prod-mode.js deleted file mode 100644 index 2f53f44f80..0000000000 --- a/scripts/test-utils/prod-mode.js +++ /dev/null @@ -1 +0,0 @@ -process.env.NODE_ENV = 'production' diff --git a/scripts/test-utils/resolved-conditions/false.js b/scripts/test-utils/resolved-conditions/false.js new file mode 100644 index 0000000000..2693369b44 --- /dev/null +++ b/scripts/test-utils/resolved-conditions/false.js @@ -0,0 +1 @@ +export default false diff --git a/scripts/test-utils/resolved-conditions/true.js b/scripts/test-utils/resolved-conditions/true.js new file mode 100644 index 0000000000..186b120756 --- /dev/null +++ b/scripts/test-utils/resolved-conditions/true.js @@ -0,0 +1 @@ +export default true diff --git a/scripts/test-utils/src/index.js b/scripts/test-utils/src/index.js index fd7ad875aa..0321886503 100644 --- a/scripts/test-utils/src/index.js +++ b/scripts/test-utils/src/index.js @@ -1,27 +1,24 @@ -// @flow /* eslint-env jest */ -export function throwIfFalsy(something: *) { +export function throwIfFalsy(something) { if (something) { return something } throw new Error('something is falsy') } -export function ignoreConsoleErrors(cb: () => mixed) { +export function ignoreConsoleErrors(cb /*: () => mixed */) { let oldConsoleError = console.error - // $FlowFixMe console.error = jest.fn() try { cb() } finally { - // $FlowFixMe console.error = oldConsoleError } } -export let safeQuerySelector = (selector: string): HTMLElement => { +export let safeQuerySelector = (selector /*: string */) /*: HTMLElement */ => { let element = document.querySelector(selector) if (!element) { throw new Error(`Could not find element matching selector "${selector}"`) @@ -31,7 +28,7 @@ export let safeQuerySelector = (selector: string): HTMLElement => { // React 18 doesn't use this attribute anymore // we normalize this to avoid snapshot mismatches between React versions -export let stripDataReactRoot = (html: string): string => +export let stripDataReactRoot = (html /*: string*/) /*: string*/ => html.replace(' data-reactroot=""', '') const removeGlobalProp = prop => { @@ -45,7 +42,8 @@ const removeGlobalProp = prop => { return () => Object.defineProperty(global, prop, descriptor) } -export async function disableBrowserEnvTemporarily(fn: () => T): Promise { +// TODO: export async function disableBrowserEnvTemporarily(fn: () => T): Promise { +export async function disableBrowserEnvTemporarily(fn) { let restoreDocument = removeGlobalProp('document') let restoreWindow = removeGlobalProp('window') let restoreHTMLElement = removeGlobalProp('HTMLElement') diff --git a/scripts/test-utils/testSetup.js b/scripts/test-utils/testSetup.js new file mode 100644 index 0000000000..e70fc6c095 --- /dev/null +++ b/scripts/test-utils/testSetup.js @@ -0,0 +1,86 @@ +/* eslint-env jest */ +import isDevelopment from '#is-development' +import 'raf/polyfill' +import prettyCSS from './pretty-css' + +const hasOwn = {}.hasOwnProperty + +const t = globalThis.test +const d = globalThis.describe + +const defaultFlags = { + development: true +} + +const enabledGlobalFlags = { + development: isDevelopment +} + +function shouldRun(flags) { + return Object.keys(flags).every( + flag => enabledGlobalFlags[flag] === flags[flag] + ) +} + +globalThis.gate = (flags, cb) => { + const usedFlags = Object.keys(flags).filter(flags => !!flags[flags]) + + for (const flag of Object.keys(flags)) { + if (!hasOwn.call(defaultFlags, flag)) { + throw new Error(`Invalid flag: ${flag}`) + } + } + + const allFlags = { + ...defaultFlags, + ...flags + } + + return shouldRun(allFlags) ? cb({ test: t }) : cb({ test: t.skip }) +} + +const shouldRunByDefault = shouldRun(defaultFlags) + +globalThis.test = (...args) => { + if (!shouldRunByDefault) { + return t.skip(...args) + } + return t(...args) +} +globalThis.test.each = (...args) => { + if (!shouldRunByDefault) { + return t.skip.each(...args) + } + return t.each(...args) +} +globalThis.test.only = t.only +globalThis.test.skip = t.skip + +globalThis.describe = (...args) => { + if (!shouldRunByDefault) { + return d.skip(...args) + } + return d(...args) +} +globalThis.describe.each = (...args) => { + if (!shouldRunByDefault) { + return d.skip.each(...args) + } + return d.each(...args) +} +globalThis.describe.only = d.only +globalThis.describe.skip = d.skip + +if (typeof Node !== 'undefined') { + let oldInsertBefore = Node.prototype.insertBefore + Node.prototype.insertBefore = function (node, refNode) { + if (refNode instanceof Node || refNode === null) { + return oldInsertBefore.call(this, node, refNode) + } + throw new Error( + 'insertBefore only accepts a refNode which is null or a Node' + ) + } +} + +expect.addSnapshotSerializer(prettyCSS) diff --git a/site/package.json b/site/package.json index c1ab4360e2..217bc523fa 100644 --- a/site/package.json +++ b/site/package.json @@ -19,7 +19,7 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^12.20.37", "@types/prismjs": "^1.26.0", - "@types/react": "^18.0.9", + "@types/react": "18.2.6", "@types/remark-prism": "^1.3.3", "facepaint": "^1.2.1", "gray-matter": "^4.0.3", @@ -35,7 +35,7 @@ "remark-gfm": "^3.0.1", "remark-prism": "^1.3.6", "sharp": "^0.30.7", - "typescript": "^4.5.5", + "typescript": "^5.4.5", "unist-util-visit": "^4.1.0" } } diff --git a/site/tsconfig.json b/site/tsconfig.json index 15430cea85..de7feaf7aa 100644 --- a/site/tsconfig.json +++ b/site/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "es2018", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -13,19 +9,13 @@ "noEmit": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "Bundler", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "jsxImportSource": "@emotion/react", "incremental": true }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] } diff --git a/test/empty.js b/test/empty.js deleted file mode 100644 index f0fab8e253..0000000000 --- a/test/empty.js +++ /dev/null @@ -1 +0,0 @@ -// used to alias flow files that error diff --git a/test/testSetup.js b/test/testSetup.js deleted file mode 100644 index b5f40dbcd2..0000000000 --- a/test/testSetup.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow -/* eslint-env jest */ -import 'raf/polyfill' -import prettyCSS from './pretty-css' - -if (typeof Node !== 'undefined') { - let oldInsertBefore = Node.prototype.insertBefore - // $FlowFixMe - Node.prototype.insertBefore = function (node, refNode) { - if (refNode instanceof Node || refNode === null) { - return oldInsertBefore.call(this, node, refNode) - } - throw new Error( - 'insertBefore only accepts a refNode which is null or a Node' - ) - } -} - -// $FlowFixMe jest flow type definitions don't include new plugin API -expect.addSnapshotSerializer(prettyCSS) diff --git a/tsconfig.json b/tsconfig.json index b955ce77e6..0923c9b9ca 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ "isolatedModules": true, "jsx": "react", "lib": ["es6", "dom"], - "module": "commonjs", + "moduleResolution": "Node16", + "module": "Node16", "noEmit": true, "skipLibCheck": true, "skipDefaultLibCheck": true, @@ -14,7 +15,7 @@ "target": "es5", "types": [] }, - "include": ["packages", "scripts", "site", "test", "playgrounds"], + "include": ["packages", "scripts", "test", "playgrounds"], "exclude": [ "node_modules", "packages/*/types/test/*", diff --git a/yarn.lock b/yarn.lock index f593cbcbcc..b56932fc7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -175,6 +175,16 @@ __metadata: languageName: node linkType: hard +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 + languageName: node + linkType: hard + "@babel/code-frame@npm:7.10.4": version: 7.10.4 resolution: "@babel/code-frame@npm:7.10.4" @@ -202,6 +212,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" + dependencies: + "@babel/highlight": ^7.24.7 + picocolors: ^1.0.0 + checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.12.1, @babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.18.8": version: 7.18.8 resolution: "@babel/compat-data@npm:7.18.8" @@ -209,6 +229,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/compat-data@npm:7.24.7" + checksum: 1fc276825dd434fe044877367dfac84171328e75a8483a6976aa28bf833b32367e90ee6df25bdd97c287d1aa8019757adcccac9153de70b1932c0d243a978ae9 + languageName: node + linkType: hard + "@babel/core@npm:7.12.3": version: 7.12.3 resolution: "@babel/core@npm:7.12.3" @@ -233,7 +260,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.12.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.5, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.7.7, @babel/core@npm:^7.8.4": +"@babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.12.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.5, @babel/core@npm:^7.7.5, @babel/core@npm:^7.7.7, @babel/core@npm:^7.8.4": version: 7.18.9 resolution: "@babel/core@npm:7.18.9" dependencies: @@ -256,6 +283,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.23.9": + version: 7.24.7 + resolution: "@babel/core@npm:7.24.7" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.24.7 + "@babel/helper-compilation-targets": ^7.24.7 + "@babel/helper-module-transforms": ^7.24.7 + "@babel/helpers": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/template": ^7.24.7 + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 017497e2a1b4683a885219eef7d2aee83c1c0cf353506b2e180b73540ec28841d8ef1ea1837fa69f8c561574b24ddd72f04764b27b87afedfe0a07299ccef24d + languageName: node + linkType: hard + "@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.18.9, @babel/generator@npm:^7.5.0, @babel/generator@npm:^7.7.2, @babel/generator@npm:^7.9.0": version: 7.18.9 resolution: "@babel/generator@npm:7.18.9" @@ -267,6 +317,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/generator@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^2.5.1 + checksum: 0ff31a73b15429f1287e4d57b439bba4a266f8c673bb445fe313b82f6d110f586776997eb723a777cd7adad9d340edd162aea4973a90112c5d0cfcaf6686844b + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -300,7 +362,20 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.12.1, @babel/helper-create-class-features-plugin@npm:^7.18.6": +"@babel/helper-compilation-targets@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-compilation-targets@npm:7.24.7" + dependencies: + "@babel/compat-data": ^7.24.7 + "@babel/helper-validator-option": ^7.24.7 + browserslist: ^4.22.2 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: dfc88bc35e223ade796c7267901728217c665adc5bc2e158f7b0ae850de14f1b7941bec4fe5950ae46236023cfbdeddd9c747c276acf9b39ca31f8dd97dc6cc6 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.12.1, @babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" dependencies: @@ -352,6 +427,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-environment-visitor@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -371,6 +455,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-function-name@npm:7.24.7" + dependencies: + "@babel/template": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 142ee08922074dfdc0ff358e09ef9f07adf3671ab6eef4fca74dcf7a551f1a43717e7efa358c9e28d7eea84c28d7f177b7a58c70452fc312ae3b1893c5dab2a4 + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -380,6 +474,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-hoist-variables@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-hoist-variables@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" @@ -398,6 +501,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-imports@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-module-transforms@npm:7.18.9" @@ -414,6 +527,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-transforms@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ddff3b41c2667876b4e4e73d961168f48a5ec9560c95c8c2d109e6221f9ca36c6f90c6317eb7a47f2a3c99419c356e529a86b79174cad0d4f7a61960866b88ca + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -430,6 +558,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-plugin-utils@npm:7.24.7" + checksum: 81f2a15751d892e4a8fce25390f973363a5b27596167861d2d6eab0f61856eb2ba389b031a9f19f669c0bd4dd601185828d3cebafd25431be7a1696f2ce3ef68 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.18.6": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" @@ -466,6 +601,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-simple-access@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.12.1, @babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" @@ -484,6 +629,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-split-export-declaration@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: e3ddc91273e5da67c6953f4aa34154d005a00791dc7afa6f41894e768748540f6ebcac5d16e72541aea0c89bee4b89b4da6a3d65972a0ea8bfd2352eda5b7e22 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-string-parser@npm:7.24.7" + checksum: 09568193044a578743dd44bf7397940c27ea693f9812d24acb700890636b376847a611cdd0393a928544e79d7ad5b8b916bd8e6e772bc8a10c48a647a96e7b1a + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-validator-identifier@npm:7.18.6" @@ -491,6 +652,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.12.1, @babel/helper-validator-option@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-validator-option@npm:7.18.6" @@ -498,6 +666,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-option@npm:7.24.7" + checksum: 9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-wrap-function@npm:7.18.9" @@ -521,6 +696,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helpers@npm:7.24.7" + dependencies: + "@babel/template": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 934da58098a3670ca7f9f42425b9c44d0ca4f8fad815c0f51d89fc7b64c5e0b4c7d5fec038599de691229ada737edeaf72fad3eba8e16dd5842e8ea447f76b66 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -532,7 +717,19 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.18.6, @babel/parser@npm:^7.18.9, @babel/parser@npm:^7.7.0, @babel/parser@npm:^7.7.2": +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": ^7.24.7 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.18.6, @babel/parser@npm:^7.18.9, @babel/parser@npm:^7.7.0": version: 7.18.9 resolution: "@babel/parser@npm:7.18.9" bin: @@ -541,6 +738,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/parser@npm:7.24.7" + bin: + parser: ./bin/babel-parser.js + checksum: fc9d2c4c8712f89672edc55c0dc5cf640dcec715b56480f111f85c2bc1d507e251596e4110d65796690a96ac37a4b60432af90b3e97bb47e69d4ef83872dbbd6 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -982,6 +1188,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.24.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965 + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -1214,7 +1431,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.17.12, @babel/plugin-transform-flow-strip-types@npm:^7.18.6": +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": version: 7.18.9 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.18.9" dependencies: @@ -1609,6 +1826,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.18.6": + version: 7.18.12 + resolution: "@babel/plugin-transform-typescript@npm:7.18.12" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/plugin-syntax-typescript": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87e9b783ef712697a9d3bd72d0345ea4ea71b4676f9b88da0a30fe4b8a81f453a5badee788bb4dc849616af84d674d728a6ec4248f14a75bfb0b4de5bcce7431 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.12.1, @babel/plugin-transform-unicode-escapes@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.6" @@ -1793,19 +2023,6 @@ __metadata: languageName: node linkType: hard -"@babel/preset-flow@npm:^7.17.12": - version: 7.18.6 - resolution: "@babel/preset-flow@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-flow-strip-types": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9100d4eab3402e6601e361a5b235e46d90cfd389c12db19e2a071e1082ca2a00c04bd47eb185ce68d8979e7c8f3e548cd5d61b86dcd701135468fb929c3aecb6 - languageName: node - linkType: hard - "@babel/preset-modules@npm:^0.1.3, @babel/preset-modules@npm:^0.1.5": version: 0.1.5 resolution: "@babel/preset-modules@npm:0.1.5" @@ -1866,6 +2083,19 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/preset-typescript@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-typescript": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c + languageName: node + linkType: hard + "@babel/register@npm:^7.0.0, @babel/register@npm:^7.17.7": version: 7.18.9 resolution: "@babel/register@npm:7.18.9" @@ -1900,7 +2130,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.7, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.7, @babel/runtime@npm:^7.8.4": version: 7.18.9 resolution: "@babel/runtime@npm:7.18.9" dependencies: @@ -1909,6 +2139,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.20.1": + version: 7.24.7 + resolution: "@babel/runtime@npm:7.24.7" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: d17f29eed6f848ac15cdf4202a910b741facfb0419a9d79e5c7fa37df6362fc3227f1cc2e248cc6db5e53ddffb4caa6686c488e6e80ce3d29c36a4e74c8734ea + languageName: node + linkType: hard + "@babel/standalone@npm:^7.18.7": version: 7.18.9 resolution: "@babel/standalone@npm:7.18.9" @@ -1927,7 +2166,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.7.2": +"@babel/template@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/template@npm:7.24.7" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: ea90792fae708ddf1632e54c25fe1a86643d8c0132311f81265d2bdbdd42f9f4fac65457056c1b6ca87f7aa0d6a795b549566774bba064bdcea2034ab3960ee9 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.7.0": version: 7.18.9 resolution: "@babel/traverse@npm:7.18.9" dependencies: @@ -1945,6 +2195,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/traverse@npm:7.24.7" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.24.7 + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-function-name": ^7.24.7 + "@babel/helper-hoist-variables": ^7.24.7 + "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/types": ^7.24.7 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: 7cd366afe9e7ee77e493779fdf24f67bf5595247289364f4689e29688572505eaeb886d7a8f20ebb9c29fc2de7d0895e4ff9e203e78e39ac67239724d45aa83b + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.13, @babel/types@npm:^7.12.6, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": version: 7.18.9 resolution: "@babel/types@npm:7.18.9" @@ -1955,6 +2223,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/types@npm:7.24.7" + dependencies: + "@babel/helper-string-parser": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + to-fast-properties: ^2.0.0 + checksum: 3e4437fced97e02982972ce5bebd318c47d42c9be2152c0fd28c6f786cc74086cc0a8fb83b602b846e41df37f22c36254338eada1a47ef9d8a1ec92332ca3ea8 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1962,220 +2241,245 @@ __metadata: languageName: node linkType: hard -"@changesets/apply-release-plan@npm:^5.0.0": - version: 5.0.0 - resolution: "@changesets/apply-release-plan@npm:5.0.0" - dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/config": ^1.6.0 - "@changesets/get-version-range-type": ^0.3.2 - "@changesets/git": ^1.1.1 - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 +"@changesets/apply-release-plan@npm:^7.0.4": + version: 7.0.4 + resolution: "@changesets/apply-release-plan@npm:7.0.4" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/config": ^3.0.2 + "@changesets/get-version-range-type": ^0.4.0 + "@changesets/git": ^3.0.0 + "@changesets/should-skip-package": ^0.1.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 detect-indent: ^6.0.0 fs-extra: ^7.0.1 lodash.startcase: ^4.4.0 outdent: ^0.5.0 - prettier: ^1.19.1 + prettier: ^2.7.1 resolve-from: ^5.0.0 - semver: ^5.4.1 - checksum: a20060bacc0d3ff090c1618a53ca02941f7f689c19373d9909c873bde3a0f26daea6985660568308788b9edc3f20b3e98b3f2f6cc4d9a6a6d61ad87610c0cf49 + semver: ^7.5.3 + checksum: 5a61a8794fd4762e9270ffec474dc7c5d420c1d0479c5316a12e5264589882ccfb3ec08af6c0ebd07de2bf26ae880ad2f65e8f16d5886745aecf48cb11f625f5 languageName: node linkType: hard -"@changesets/assemble-release-plan@npm:^5.0.0": - version: 5.0.0 - resolution: "@changesets/assemble-release-plan@npm:5.0.0" +"@changesets/assemble-release-plan@npm:^6.0.3": + version: 6.0.3 + resolution: "@changesets/assemble-release-plan@npm:6.0.3" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.2.1 - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 - semver: ^5.4.1 - checksum: 561ed6b250e13a80cca387e57d130736c7fd2bd3834bf9b7bd22e2c22c41a6cd6eb0250e82e772c4dc5fd65660136537d03b1e9e531136b4589a9d84c0d7567d + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.1.1 + "@changesets/should-skip-package": ^0.1.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + semver: ^7.5.3 + checksum: ae0ac29a44640fc6c0d3782c134adad3f0af80903ecb8bf663f0bf5f569586c9620980100737a05639f1a7252f145942ae62fa25d0757e89b5d6311abf899cd5 languageName: node linkType: hard -"@changesets/changelog-github@npm:^0.4.0": - version: 0.4.0 - resolution: "@changesets/changelog-github@npm:0.4.0" +"@changesets/changelog-git@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/changelog-git@npm:0.2.0" dependencies: - "@changesets/get-github-info": ^0.5.0 - "@changesets/types": ^4.0.0 - dotenv: ^8.1.0 - checksum: ba451a77ca3ab7a622724ba6dd75cebe24f43b8a0d280ad9a3035d080421df7743ecdb1f14717dc8493cc7f4e5d6c430869fe15189c84c7a37c8ddb21489f5fb + "@changesets/types": ^6.0.0 + checksum: 132660f7fdabbdda00ac803cc822d6427a1a38a17a5f414e87ad32f6dc4cbef5280a147ecdc087a28dc06c8bd0762f8d6e7132d01b8a4142b59fbe1bc2177034 languageName: node linkType: hard -"@changesets/cli@npm:^2.16.0": - version: 2.16.0 - resolution: "@changesets/cli@npm:2.16.0" - dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/apply-release-plan": ^5.0.0 - "@changesets/assemble-release-plan": ^5.0.0 - "@changesets/config": ^1.6.0 - "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.2.1 - "@changesets/get-release-plan": ^3.0.0 - "@changesets/git": ^1.1.1 - "@changesets/logger": ^0.0.5 - "@changesets/pre": ^1.0.6 - "@changesets/read": ^0.4.7 - "@changesets/types": ^4.0.0 - "@changesets/write": ^0.1.4 - "@manypkg/get-packages": ^1.0.1 - "@types/semver": ^6.0.0 - boxen: ^1.3.0 +"@changesets/changelog-github@npm:^0.5.0": + version: 0.5.0 + resolution: "@changesets/changelog-github@npm:0.5.0" + dependencies: + "@changesets/get-github-info": ^0.6.0 + "@changesets/types": ^6.0.0 + dotenv: ^8.1.0 + checksum: 4ab43d8104693f970d878f2b1657ff67b4d4dcb7452ddf118575153bab74286cdfd125381c2ab92b205bce4b2c653c36552138bf2900f7165ac39a868b7fe22c + languageName: node + linkType: hard + +"@changesets/cli@npm:^2.27.7": + version: 2.27.7 + resolution: "@changesets/cli@npm:2.27.7" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/apply-release-plan": ^7.0.4 + "@changesets/assemble-release-plan": ^6.0.3 + "@changesets/changelog-git": ^0.2.0 + "@changesets/config": ^3.0.2 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.1.1 + "@changesets/get-release-plan": ^4.0.3 + "@changesets/git": ^3.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/pre": ^2.0.0 + "@changesets/read": ^0.6.0 + "@changesets/should-skip-package": ^0.1.0 + "@changesets/types": ^6.0.0 + "@changesets/write": ^0.3.1 + "@manypkg/get-packages": ^1.1.3 + "@types/semver": ^7.5.0 + ansi-colors: ^4.1.3 chalk: ^2.1.0 + ci-info: ^3.7.0 enquirer: ^2.3.0 external-editor: ^3.1.0 fs-extra: ^7.0.1 human-id: ^1.0.2 - is-ci: ^2.0.0 - meow: ^6.0.0 + mri: ^1.2.0 outdent: ^0.5.0 p-limit: ^2.2.0 preferred-pm: ^3.0.0 - semver: ^5.4.1 + resolve-from: ^5.0.0 + semver: ^7.5.3 spawndamnit: ^2.0.0 term-size: ^2.1.0 - tty-table: ^2.8.10 bin: changeset: bin.js - checksum: 19708c9f1675ae355c3f3765556dfae22d96f8fd2461c7d1f5d2b5e12824eb04b8bdbd6a60e0a759c1a44dc6381da837753cf230f1e7572a935204a5fd9c31a0 + checksum: f518121a516ce8186dfc71dcca2f4be5fea28fe29a54b038aa787964bb4d4f1e866840d6d765776db33f7723d1a850ee4a38ed726f302a26e2e56a5e2b9422e8 languageName: node linkType: hard -"@changesets/config@npm:^1.6.0": - version: 1.6.0 - resolution: "@changesets/config@npm:1.6.0" +"@changesets/config@npm:^3.0.2": + version: 3.0.2 + resolution: "@changesets/config@npm:3.0.2" dependencies: - "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.2.1 - "@changesets/logger": ^0.0.5 - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.1.1 + "@changesets/logger": ^0.1.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 micromatch: ^4.0.2 - checksum: bf59b9460d96fbf142526448e734bf3195c87aa6389ddf8eee33b525359574b1935a8af5d4c13bdc68bc52a4e354e72637497da45a6561aebf88bf5339e853c8 + checksum: 4160e59f74c1f36a2d3d011868f83c46410553f9fc164a83dde46ec7e37f13ba983526b9c299de3cd3f317e5e42808a991959931c9d34f2913f3e8d4c515cd12 languageName: node linkType: hard -"@changesets/errors@npm:^0.1.4": - version: 0.1.4 - resolution: "@changesets/errors@npm:0.1.4" +"@changesets/errors@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/errors@npm:0.2.0" dependencies: extendable-error: ^0.1.5 - checksum: 10734f1379715bf5a70b566dd42b50a75964d76f382bb67332776614454deda6d04a43dd7e727cd7cba56d7f2f7c95a07c7c0a19dd5d64fb1980b28322840733 + checksum: 4b79373f92287af4f723e8dbbccaf0299aa8735fc043243d0ad587f04a7614615ea50180be575d4438b9f00aa82d1cf85e902b77a55bdd3e0a8dd97e77b18c60 languageName: node linkType: hard -"@changesets/get-dependents-graph@npm:^1.2.1": - version: 1.2.1 - resolution: "@changesets/get-dependents-graph@npm:1.2.1" +"@changesets/get-dependents-graph@npm:^2.1.1": + version: 2.1.1 + resolution: "@changesets/get-dependents-graph@npm:2.1.1" dependencies: - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 chalk: ^2.1.0 fs-extra: ^7.0.1 - semver: ^5.4.1 - checksum: c1f0dfdee1fbf4232a692fff3bc5dd3dc109de316044bdba70ee85d52d9bd844374b12cc6a039a4cc203b78e953793e49ba24c3338f4d712f9e84dc155040204 + semver: ^7.5.3 + checksum: e427603a3cad3690deec86a5831f15766dc32dc0819532e3ad70fbda027317bb46bb207c6a3bc947daf00e5e8229a01dd67aa3ec7248aa11f87611a7ecd74097 languageName: node linkType: hard -"@changesets/get-github-info@npm:^0.5.0": - version: 0.5.0 - resolution: "@changesets/get-github-info@npm:0.5.0" +"@changesets/get-github-info@npm:^0.6.0": + version: 0.6.0 + resolution: "@changesets/get-github-info@npm:0.6.0" dependencies: dataloader: ^1.4.0 node-fetch: ^2.5.0 - checksum: 9867a787532cafe6d0bee579e882c93a815fc9a2b5843d5b476d8115b2cdbc3aa8000a8504ac18932793a6f0a0cdb97fc20f8f82c05d10bec6f1a3df9b97981b + checksum: 753173bda536aa79cb0502f59ce13889b23ae8463d04893d43ff22966818060837d9db4052b6cbfbd95dfb242fbfd38890a38c56832948e83bf358a47812b708 languageName: node linkType: hard -"@changesets/get-release-plan@npm:^3.0.0": - version: 3.0.0 - resolution: "@changesets/get-release-plan@npm:3.0.0" - dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/assemble-release-plan": ^5.0.0 - "@changesets/config": ^1.6.0 - "@changesets/pre": ^1.0.6 - "@changesets/read": ^0.4.7 - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 - checksum: 4f205f3f43cccb9a0771134215655cc1f450d0cb9f6c0f98691f2ae19df68d85b881483aec4f9829f8801f36e7290594c038e109d6428f2546d7f0af9e91a2ec +"@changesets/get-release-plan@npm:^4.0.3": + version: 4.0.3 + resolution: "@changesets/get-release-plan@npm:4.0.3" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/assemble-release-plan": ^6.0.3 + "@changesets/config": ^3.0.2 + "@changesets/pre": ^2.0.0 + "@changesets/read": ^0.6.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + checksum: baf01eb124f95df729e1798c23e4ac1996acd74e0d22336492e4a0fd68f3a19c97197337fdcb58d47d0b580ca38e0b0888cbacaa1c99d7c173c3cecb859ab4cc languageName: node linkType: hard -"@changesets/get-version-range-type@npm:^0.3.2": - version: 0.3.2 - resolution: "@changesets/get-version-range-type@npm:0.3.2" - checksum: b7ee7127c472a3886906ca6db336ac11233a5e75abc882084bfb4794e79a8936e3faceec3c04bf61c26453cd7f74278d9bf22aea4cdca8c1cd992591925b3c9b +"@changesets/get-version-range-type@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/get-version-range-type@npm:0.4.0" + checksum: 2e8c511e658e193f48de7f09522649c4cf072932f0cbe0f252a7f2703d7775b0b90b632254526338795d0658e340be9dff3879cfc8eba4534b8cd6071efff8c9 languageName: node linkType: hard -"@changesets/git@npm:^1.1.1": - version: 1.1.1 - resolution: "@changesets/git@npm:1.1.1" +"@changesets/git@npm:^3.0.0": + version: 3.0.0 + resolution: "@changesets/git@npm:3.0.0" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/errors": ^0.1.4 - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 is-subdir: ^1.1.1 + micromatch: ^4.0.2 spawndamnit: ^2.0.0 - checksum: 84b06bff2d06e54eef6ec3ac11abcaec9aa4ff2c9af7a5ab01633b6b82682579da693b32c9e4802345cee57010d6dbc8c1ef22af3f4f11dd929ea43744245d17 + checksum: a8fa66d77302b50d5e604aca898ee813247537d23a05004637ecee4aa1579d6a2859283c099bdcf3e2b232258c93ff81dd57aa867858788e457df40118c64c2b languageName: node linkType: hard -"@changesets/logger@npm:^0.0.5": - version: 0.0.5 - resolution: "@changesets/logger@npm:0.0.5" +"@changesets/logger@npm:^0.1.0": + version: 0.1.0 + resolution: "@changesets/logger@npm:0.1.0" dependencies: chalk: ^2.1.0 - checksum: bfec3cd9122b00c0ec25e96730f771ffd662ef3906d571bad1e4e9993f9d54d357d3eaf074b3dfaa4e23af759ce68efa2a97d8b845b0d8c951df5d21c6dfdff5 + checksum: d8ef1b7caf3d2c15a9e7743b7a9462e0c2e61c76d9a5bbed5eff805afa8226117505309c6e9095001136b4f6d9ae0aba61377e53af8aa0809f1febd1b5f787f1 languageName: node linkType: hard -"@changesets/parse@npm:^0.3.8": - version: 0.3.8 - resolution: "@changesets/parse@npm:0.3.8" +"@changesets/parse@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/parse@npm:0.4.0" dependencies: - "@changesets/types": ^4.0.0 + "@changesets/types": ^6.0.0 js-yaml: ^3.13.1 - checksum: bd5e4237719863113ff65570882e4205f4d4d38d01e74faf41ee8b97fa0fcfe7d2f3e23f960e73faa1072701c25e8bc9c44557f3390a295fc2bed43b1b7cc1ac + checksum: 3dd970b244479746233ebd357cfff3816cf9f344ebf2cf0c7c55ce8579adfd3f506978e86ad61222dc3acf1548a2105ffdd8b3e940b3f82b225741315cee2bf0 languageName: node linkType: hard -"@changesets/pre@npm:^1.0.6": - version: 1.0.6 - resolution: "@changesets/pre@npm:1.0.6" +"@changesets/pre@npm:^2.0.0": + version: 2.0.0 + resolution: "@changesets/pre@npm:2.0.0" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/errors": ^0.1.4 - "@changesets/types": ^4.0.0 - "@manypkg/get-packages": ^1.0.1 + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 - checksum: 8c83f302875d64a46519abfc1bf84773a9efe9ca6ec77bf9ba635791691360b6207cc70b35b8e6da7d2f9ce27dbfdda50b61bc13455d43cf0a21124ad8a32209 + checksum: 6a01086405f4e4ce63abb8f222de39b69a5762c9c8c8f19c0d3c72f7798248d7a152937028f1be24be1f8a4a5e47e4cb23c54bc36f979539b24a728c893caf4e languageName: node linkType: hard -"@changesets/read@npm:^0.4.7": - version: 0.4.7 - resolution: "@changesets/read@npm:0.4.7" +"@changesets/read@npm:^0.6.0": + version: 0.6.0 + resolution: "@changesets/read@npm:0.6.0" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/git": ^1.1.1 - "@changesets/logger": ^0.0.5 - "@changesets/parse": ^0.3.8 - "@changesets/types": ^4.0.0 + "@babel/runtime": ^7.20.1 + "@changesets/git": ^3.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/parse": ^0.4.0 + "@changesets/types": ^6.0.0 chalk: ^2.1.0 fs-extra: ^7.0.1 p-filter: ^2.1.0 - checksum: 4a14f532f556be7aeec36a255a054757d84fa79cf56b44136338e6b89947fe7da2e8976f2501c21a47371923b7386d90f158762fbb3f8e71981cc56b7a6677e9 + checksum: 3da6428124b4983f6ccbdae324c73044cd6a84269bfdbaff545331042e3d6845c647613b5d8f4ffdd48bad5b791623eca2be1b507652ea47b77e136cd2e26c70 + languageName: node + linkType: hard + +"@changesets/should-skip-package@npm:^0.1.0": + version: 0.1.0 + resolution: "@changesets/should-skip-package@npm:0.1.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + checksum: 3c966feae085a41d4ce10a46a1b525f980cec59951f7cf23ea805866b370de5c75fdd45af326e1a5ef502fa4846f821d9df15550c2b606b96e99ed4b967f01c0 languageName: node linkType: hard @@ -2186,13 +2490,6 @@ __metadata: languageName: node linkType: hard -"@changesets/types@npm:^4.0.0": - version: 4.0.0 - resolution: "@changesets/types@npm:4.0.0" - checksum: 60517ff6d46bdb60bbf6c949ea57d2e659d7360add44be6e1cd6b6b36d11f342addafa21277ca7aa1cb847e309ffe99e97b026e7ffe15cb4ac12d98849c331b9 - languageName: node - linkType: hard - "@changesets/types@npm:^4.0.1": version: 4.0.2 resolution: "@changesets/types@npm:4.0.2" @@ -2200,16 +2497,23 @@ __metadata: languageName: node linkType: hard -"@changesets/write@npm:^0.1.4": - version: 0.1.4 - resolution: "@changesets/write@npm:0.1.4" +"@changesets/types@npm:^6.0.0": + version: 6.0.0 + resolution: "@changesets/types@npm:6.0.0" + checksum: d528b5d712f62c26ea422c7d34ccf6eac57a353c0733d96716db3c796ecd9bba5d496d48b37d5d46b784dc45b69c06ce3345fa3515df981bb68456cad68e6465 + languageName: node + linkType: hard + +"@changesets/write@npm:^0.3.1": + version: 0.3.1 + resolution: "@changesets/write@npm:0.3.1" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/types": ^4.0.0 + "@babel/runtime": ^7.20.1 + "@changesets/types": ^6.0.0 fs-extra: ^7.0.1 human-id: ^1.0.2 - prettier: ^1.19.1 - checksum: c6d6990b36c4be9b998b99d0014941157d664877608e868093286d891f98d8c9cd4551c0cd2ad04994e823faf3c8804d169b408cb11ef00e28ba27d8305722c4 + prettier: ^2.7.1 + checksum: 6df0447e05ededbab71f36e6ad23aa77cf06eb6adda7a8b8e7fb9d6bd5bc93acceb916d55b2a37cb7e93fb05d39a236a0dd7ade5243aae4772885081101d4784 languageName: node linkType: hard @@ -2276,6 +2580,27 @@ __metadata: languageName: node linkType: hard +"@definitelytyped/dtslint@patch:@definitelytyped/dtslint@npm%3A0.0.112#./.yarn/patches/@definitelytyped-dtslint-npm-0.0.112-1e6b842976.patch::locator=emotion-monorepo%40workspace%3A.": + version: 0.0.112 + resolution: "@definitelytyped/dtslint@patch:@definitelytyped/dtslint@npm%3A0.0.112#./.yarn/patches/@definitelytyped-dtslint-npm-0.0.112-1e6b842976.patch::version=0.0.112&hash=753776&locator=emotion-monorepo%40workspace%3A." + dependencies: + "@definitelytyped/dts-critic": ^0.0.112 + "@definitelytyped/header-parser": ^0.0.112 + "@definitelytyped/typescript-versions": ^0.0.112 + "@definitelytyped/utils": ^0.0.112 + fs-extra: ^6.0.1 + json-stable-stringify: ^1.0.1 + strip-json-comments: ^2.0.1 + tslint: 5.14.0 + yargs: ^15.1.0 + peerDependencies: + typescript: ">= 3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev || >= 3.8.0-dev || >= 3.9.0-dev || >= 4.0.0-dev" + bin: + dtslint: dist/index.js + checksum: 531e55134c34b4be44bd5aedb193b5dd99c098a374d1725e53bfc567a6bad8da6d314a7446f1480b2502afc6ed579555b4a8b31c40513f68dc7e679b51784c5f + languageName: node + linkType: hard + "@definitelytyped/header-parser@npm:^0.0.112": version: 0.0.112 resolution: "@definitelytyped/header-parser@npm:0.0.112" @@ -2333,27 +2658,28 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin-jsx-pragmatic@^0.2.1, @emotion/babel-plugin-jsx-pragmatic@workspace:packages/babel-plugin-jsx-pragmatic": +"@emotion/babel-plugin-jsx-pragmatic@^0.3.0, @emotion/babel-plugin-jsx-pragmatic@workspace:packages/babel-plugin-jsx-pragmatic": version: 0.0.0-use.local resolution: "@emotion/babel-plugin-jsx-pragmatic@workspace:packages/babel-plugin-jsx-pragmatic" dependencies: "@babel/core": ^7.18.5 "@babel/plugin-syntax-jsx": ^7.17.12 + "@types/babel__core": ^7.1.18 peerDependencies: "@babel/core": ^7.0.0 languageName: unknown linkType: soft -"@emotion/babel-plugin@11.11.0, @emotion/babel-plugin@^11.0.0, @emotion/babel-plugin@^11.11.0, @emotion/babel-plugin@workspace:packages/babel-plugin": +"@emotion/babel-plugin@11.12.0, @emotion/babel-plugin@^11.11.0, @emotion/babel-plugin@^11.12.0, @emotion/babel-plugin@workspace:packages/babel-plugin": version: 0.0.0-use.local resolution: "@emotion/babel-plugin@workspace:packages/babel-plugin" dependencies: "@babel/core": ^7.18.5 "@babel/helper-module-imports": ^7.16.7 "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.1 - "@emotion/memoize": ^0.8.1 - "@emotion/serialize": ^1.1.2 + "@emotion/hash": ^0.9.2 + "@emotion/memoize": ^0.9.0 + "@emotion/serialize": ^1.2.0 babel-check-duplicated-nodes: ^1.0.0 babel-plugin-macros: ^3.1.0 convert-source-map: ^1.5.0 @@ -2371,48 +2697,48 @@ __metadata: "@babel/core": ^7.18.5 "@babel/plugin-transform-react-jsx": ^7.17.12 "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/babel-plugin-jsx-pragmatic": ^0.2.1 + "@emotion/babel-plugin": ^11.12.0 + "@emotion/babel-plugin-jsx-pragmatic": ^0.3.0 peerDependencies: "@babel/core": ^7.0.0 languageName: unknown linkType: soft -"@emotion/cache@^11.11.0, @emotion/cache@workspace:packages/cache": +"@emotion/cache@^11.13.0, @emotion/cache@workspace:packages/cache": version: 0.0.0-use.local resolution: "@emotion/cache@workspace:packages/cache" dependencies: "@definitelytyped/dtslint": 0.0.112 "@emotion/hash": "*" - "@emotion/memoize": ^0.8.1 - "@emotion/sheet": ^1.2.2 - "@emotion/utils": ^1.2.1 - "@emotion/weak-memoize": ^0.3.1 + "@emotion/memoize": ^0.9.0 + "@emotion/sheet": ^1.4.0 + "@emotion/utils": ^1.4.0 + "@emotion/weak-memoize": ^0.4.0 stylis: 4.2.0 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft -"@emotion/css-prettifier@1.1.3, @emotion/css-prettifier@^1.1.3, @emotion/css-prettifier@workspace:packages/css-prettifier": +"@emotion/css-prettifier@1.1.4, @emotion/css-prettifier@^1.1.4, @emotion/css-prettifier@workspace:packages/css-prettifier": version: 0.0.0-use.local resolution: "@emotion/css-prettifier@workspace:packages/css-prettifier" dependencies: - "@emotion/memoize": ^0.8.1 + "@emotion/memoize": ^0.9.0 stylis: 4.2.0 languageName: unknown linkType: soft -"@emotion/css@11.11.2, @emotion/css@workspace:packages/css": +"@emotion/css@11.13.0, @emotion/css@workspace:packages/css": version: 0.0.0-use.local resolution: "@emotion/css@workspace:packages/css" dependencies: "@definitelytyped/dtslint": 0.0.112 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/cache": ^11.11.0 - "@emotion/serialize": ^1.1.2 - "@emotion/sheet": ^1.2.2 - "@emotion/utils": ^1.2.1 - typescript: ^4.5.5 + "@emotion/babel-plugin": ^11.12.0 + "@emotion/cache": ^11.13.0 + "@emotion/serialize": ^1.3.0 + "@emotion/sheet": ^1.4.0 + "@emotion/utils": ^1.4.0 + typescript: ^5.4.5 languageName: unknown linkType: soft @@ -2420,28 +2746,31 @@ __metadata: version: 0.0.0-use.local resolution: "@emotion/eslint-plugin@workspace:packages/eslint-plugin" dependencies: - eslint: ^7.10.0 + "@types/eslint": ^7.0.0 + "@typescript-eslint/utils": ^5.25.0 + eslint: ^8.57.0 + resolve-from: ^5.0.0 peerDependencies: eslint: 6 || 7 || 8 languageName: unknown linkType: soft -"@emotion/hash@*, @emotion/hash@^0.9.1, @emotion/hash@workspace:packages/hash": +"@emotion/hash@*, @emotion/hash@^0.9.2, @emotion/hash@workspace:packages/hash": version: 0.0.0-use.local resolution: "@emotion/hash@workspace:packages/hash" dependencies: "@definitelytyped/dtslint": 0.0.112 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft -"@emotion/is-prop-valid@^1.2.1, @emotion/is-prop-valid@^1.2.2, @emotion/is-prop-valid@workspace:packages/is-prop-valid": +"@emotion/is-prop-valid@^1.2.1, @emotion/is-prop-valid@^1.3.0, @emotion/is-prop-valid@workspace:packages/is-prop-valid": version: 0.0.0-use.local resolution: "@emotion/is-prop-valid@workspace:packages/is-prop-valid" dependencies: "@definitelytyped/dtslint": 0.0.112 - "@emotion/memoize": ^0.8.1 - typescript: ^4.5.5 + "@emotion/memoize": ^0.9.0 + typescript: ^5.4.5 languageName: unknown linkType: soft @@ -2460,10 +2789,10 @@ __metadata: dependencies: "@babel/runtime": ^7.18.3 "@definitelytyped/dtslint": 0.0.112 - "@emotion/css": 11.11.2 - "@emotion/css-prettifier": ^1.1.3 - "@emotion/react": 11.11.4 - "@types/jest": ^27.0.3 + "@emotion/css": 11.13.0 + "@emotion/css-prettifier": ^1.1.4 + "@emotion/react": 11.13.0 + "@types/jest": ^29.5.12 chalk: ^4.1.0 enzyme-to-json: ^3.6.1 pretty-format: ^22.4.3 @@ -2471,7 +2800,7 @@ __metadata: react-dom: 16.14.0 specificity: ^0.4.1 stylis: 4.2.0 - typescript: ^4.5.5 + typescript: ^5.4.5 peerDependencies: "@types/jest": ^26.0.14 || ^27.0.0 || ^28.0.0 || ^29.0.0 enzyme-to-json: ^3.2.1 @@ -2483,12 +2812,12 @@ __metadata: languageName: unknown linkType: soft -"@emotion/memoize@^0.8.1, @emotion/memoize@workspace:packages/memoize": +"@emotion/memoize@^0.9.0, @emotion/memoize@workspace:packages/memoize": version: 0.0.0-use.local resolution: "@emotion/memoize@workspace:packages/memoize" dependencies: "@definitelytyped/dtslint": 0.0.112 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft @@ -2515,17 +2844,18 @@ __metadata: "@types/react-native": ^0.63.2 react: 16.14.0 react-native: ^0.63.2 - typescript: ^4.5.5 + typescript: ^5.4.5 peerDependencies: react-native: ">=0.14.0 <1" languageName: unknown linkType: soft -"@emotion/primitives-core@^11.11.0, @emotion/primitives-core@workspace:packages/primitives-core": +"@emotion/primitives-core@^11.11.0, @emotion/primitives-core@^11.13.0, @emotion/primitives-core@workspace:packages/primitives-core": version: 0.0.0-use.local resolution: "@emotion/primitives-core@workspace:packages/primitives-core" dependencies: - "@emotion/react": 11.11.4 + "@emotion/react": 11.13.0 + "@types/css-to-react-native": ^3.0.0 css-to-react-native: ^3.0.0 react: 16.14.0 peerDependencies: @@ -2540,7 +2870,7 @@ __metadata: dependencies: "@emotion/babel-plugin": ^11.11.0 "@emotion/is-prop-valid": ^1.2.1 - "@emotion/primitives-core": ^11.11.0 + "@emotion/primitives-core": ^11.13.0 enzyme: ^3.11.0 enzyme-adapter-react-16: ^1.15.5 react: 16.14.0 @@ -2551,27 +2881,27 @@ __metadata: languageName: unknown linkType: soft -"@emotion/react@11.11.4, @emotion/react@^11.4.1, @emotion/react@workspace:packages/react": +"@emotion/react@11.13.0, @emotion/react@^11.4.1, @emotion/react@workspace:packages/react": version: 0.0.0-use.local resolution: "@emotion/react@workspace:packages/react" dependencies: "@babel/runtime": ^7.18.3 "@definitelytyped/dtslint": 0.0.112 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/cache": ^11.11.0 - "@emotion/css": 11.11.2 - "@emotion/css-prettifier": 1.1.3 - "@emotion/serialize": ^1.1.3 + "@emotion/babel-plugin": ^11.12.0 + "@emotion/cache": ^11.13.0 + "@emotion/css": 11.13.0 + "@emotion/css-prettifier": 1.1.4 + "@emotion/serialize": ^1.3.0 "@emotion/server": 11.11.0 - "@emotion/styled": 11.11.0 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 - "@emotion/utils": ^1.2.1 - "@emotion/weak-memoize": ^0.3.1 + "@emotion/styled": 11.13.0 + "@emotion/use-insertion-effect-with-fallbacks": ^1.1.0 + "@emotion/utils": ^1.4.0 + "@emotion/weak-memoize": ^0.4.0 hoist-non-react-statics: ^3.3.1 html-tag-names: ^1.1.2 react: 16.14.0 svg-tag-names: ^1.1.1 - typescript: ^4.5.5 + typescript: ^5.4.5 peerDependencies: react: ">=16.8.0" peerDependenciesMeta: @@ -2580,17 +2910,17 @@ __metadata: languageName: unknown linkType: soft -"@emotion/serialize@^1.1.2, @emotion/serialize@^1.1.3, @emotion/serialize@workspace:packages/serialize": +"@emotion/serialize@^1.2.0, @emotion/serialize@^1.3.0, @emotion/serialize@workspace:packages/serialize": version: 0.0.0-use.local resolution: "@emotion/serialize@workspace:packages/serialize" dependencies: "@definitelytyped/dtslint": 0.0.112 - "@emotion/hash": ^0.9.1 - "@emotion/memoize": ^0.8.1 - "@emotion/unitless": ^0.8.1 - "@emotion/utils": ^1.2.1 + "@emotion/hash": ^0.9.2 + "@emotion/memoize": ^0.9.0 + "@emotion/unitless": ^0.9.0 + "@emotion/utils": ^1.4.0 csstype: ^3.0.2 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft @@ -2599,15 +2929,15 @@ __metadata: resolution: "@emotion/server@workspace:packages/server" dependencies: "@definitelytyped/dtslint": 0.0.112 - "@emotion/babel-plugin": 11.11.0 - "@emotion/css": 11.11.2 - "@emotion/css-prettifier": 1.1.3 - "@emotion/utils": ^1.2.1 + "@emotion/babel-plugin": 11.12.0 + "@emotion/css": 11.13.0 + "@emotion/css-prettifier": 1.1.4 + "@emotion/utils": ^1.4.0 "@types/node": ^12.20.37 html-tokenize: ^2.0.0 multipipe: ^1.0.2 through: ^2.3.8 - typescript: ^4.5.5 + typescript: ^5.4.5 peerDependencies: "@emotion/css": ^11.0.0-rc.0 peerDependenciesMeta: @@ -2616,29 +2946,29 @@ __metadata: languageName: unknown linkType: soft -"@emotion/sheet@^1.2.2, @emotion/sheet@workspace:packages/sheet": +"@emotion/sheet@^1.4.0, @emotion/sheet@workspace:packages/sheet": version: 0.0.0-use.local resolution: "@emotion/sheet@workspace:packages/sheet" dependencies: "@definitelytyped/dtslint": 0.0.112 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft -"@emotion/styled@11.11.0, @emotion/styled@^11.0.0, @emotion/styled@workspace:packages/styled": +"@emotion/styled@11.13.0, @emotion/styled@^11.0.0, @emotion/styled@workspace:packages/styled": version: 0.0.0-use.local resolution: "@emotion/styled@workspace:packages/styled" dependencies: "@babel/runtime": ^7.18.3 "@definitelytyped/dtslint": 0.0.112 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/is-prop-valid": ^1.2.2 - "@emotion/react": 11.11.4 - "@emotion/serialize": ^1.1.3 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 - "@emotion/utils": ^1.2.1 + "@emotion/babel-plugin": ^11.12.0 + "@emotion/is-prop-valid": ^1.3.0 + "@emotion/react": 11.13.0 + "@emotion/serialize": ^1.3.0 + "@emotion/use-insertion-effect-with-fallbacks": ^1.1.0 + "@emotion/utils": ^1.4.0 react: 16.14.0 - typescript: ^4.5.5 + typescript: ^5.4.5 peerDependencies: "@emotion/react": ^11.0.0-rc.0 react: ">=16.8.0" @@ -2648,13 +2978,13 @@ __metadata: languageName: unknown linkType: soft -"@emotion/unitless@^0.8.1, @emotion/unitless@workspace:packages/unitless": +"@emotion/unitless@^0.9.0, @emotion/unitless@workspace:packages/unitless": version: 0.0.0-use.local resolution: "@emotion/unitless@workspace:packages/unitless" languageName: unknown linkType: soft -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1, @emotion/use-insertion-effect-with-fallbacks@workspace:packages/use-insertion-effect-with-fallbacks": +"@emotion/use-insertion-effect-with-fallbacks@^1.1.0, @emotion/use-insertion-effect-with-fallbacks@workspace:packages/use-insertion-effect-with-fallbacks": version: 0.0.0-use.local resolution: "@emotion/use-insertion-effect-with-fallbacks@workspace:packages/use-insertion-effect-with-fallbacks" dependencies: @@ -2664,39 +2994,39 @@ __metadata: languageName: unknown linkType: soft -"@emotion/utils@^1.2.1, @emotion/utils@workspace:packages/utils": +"@emotion/utils@^1.4.0, @emotion/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@emotion/utils@workspace:packages/utils" dependencies: "@definitelytyped/dtslint": 0.0.112 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft -"@emotion/weak-memoize@^0.3.1, @emotion/weak-memoize@workspace:packages/weak-memoize": +"@emotion/weak-memoize@^0.4.0, @emotion/weak-memoize@workspace:packages/weak-memoize": version: 0.0.0-use.local resolution: "@emotion/weak-memoize@workspace:packages/weak-memoize" dependencies: "@definitelytyped/dtslint": 0.0.112 - typescript: ^4.5.5 + typescript: ^5.4.5 languageName: unknown linkType: soft -"@eslint/eslintrc@npm:^0.1.3": - version: 0.1.3 - resolution: "@eslint/eslintrc@npm:0.1.3" +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: - ajv: ^6.12.4 - debug: ^4.1.1 - espree: ^7.3.0 - globals: ^12.1.0 - ignore: ^4.0.6 - import-fresh: ^3.2.1 - js-yaml: ^3.13.1 - lodash: ^4.17.19 - minimatch: ^3.0.4 - strip-json-comments: ^3.1.1 - checksum: 9ecfab5537ff4750c50a2bc6b80c2639ba40fd9c950e0b0a809c5f1f3218c6ab28d9e189f31d40ecbb46323a2ec3f5fcd5e754ca55cd83c0f8bf26267dfa14db + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.1 + resolution: "@eslint-community/regexpp@npm:4.10.1" + checksum: 1e04bc366fb8152c9266258cd25e3fded102f1d212a9476928e3cb98c48be645df6d676728d1c596053992fb9134879fe0de23c9460035b342cceb22d3af1776 languageName: node linkType: hard @@ -2717,6 +3047,30 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.0": + version: 8.57.0 + resolution: "@eslint/js@npm:8.57.0" + checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb + languageName: node + linkType: hard + "@fortawesome/fontawesome-common-types@npm:6.1.1": version: 6.1.1 resolution: "@fortawesome/fontawesome-common-types@npm:6.1.1" @@ -2810,9 +3164,20 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.5.0": - version: 0.5.0 - resolution: "@humanwhocodes/config-array@npm:0.5.0" +"@humanwhocodes/config-array@npm:^0.11.14": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" + dependencies: + "@humanwhocodes/object-schema": ^2.0.2 + debug: ^4.3.1 + minimatch: ^3.0.5 + checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.5.0": + version: 0.5.0 + resolution: "@humanwhocodes/config-array@npm:0.5.0" dependencies: "@humanwhocodes/object-schema": ^1.2.0 debug: ^4.1.1 @@ -2821,6 +3186,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + "@humanwhocodes/object-schema@npm:^1.2.0": version: 1.2.0 resolution: "@humanwhocodes/object-schema@npm:1.2.0" @@ -2828,6 +3200,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 + languageName: node + linkType: hard + "@iarna/toml@npm:^2.2.0": version: 2.2.3 resolution: "@iarna/toml@npm:2.2.3" @@ -2855,6 +3234,13 @@ __metadata: languageName: node linkType: hard +"@istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + "@jest/console@npm:^24.9.0": version: 24.9.0 resolution: "@jest/console@npm:24.9.0" @@ -2894,17 +3280,17 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^27.4.2": - version: 27.4.2 - resolution: "@jest/console@npm:27.4.2" +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^27.4.2 - jest-util: ^27.4.2 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 - checksum: d285de0ad924a726c0a1b472968e749a88e33fc5b5af4ef06c1eea5f9f489701ebd81da1b70837fcb810e8d66f8e925d6e49be2cd5a3842304d00b54a81ff14f + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 languageName: node linkType: hard @@ -2944,36 +3330,36 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^27.4.5": - version: 27.4.5 - resolution: "@jest/core@npm:27.4.5" +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" dependencies: - "@jest/console": ^27.4.2 - "@jest/reporters": ^27.4.5 - "@jest/test-result": ^27.4.2 - "@jest/transform": ^27.4.5 - "@jest/types": ^27.4.2 + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - emittery: ^0.8.1 + ci-info: ^3.2.0 exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-changed-files: ^27.4.2 - jest-config: ^27.4.5 - jest-haste-map: ^27.4.5 - jest-message-util: ^27.4.2 - jest-regex-util: ^27.4.0 - jest-resolve: ^27.4.5 - jest-resolve-dependencies: ^27.4.5 - jest-runner: ^27.4.5 - jest-runtime: ^27.4.5 - jest-snapshot: ^27.4.5 - jest-util: ^27.4.2 - jest-validate: ^27.4.2 - jest-watcher: ^27.4.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 micromatch: ^4.0.4 - rimraf: ^3.0.0 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -2981,7 +3367,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: d9332952196018abfc0b5cbbc9062f71872859bbe7a55b98788fc7b2f30fec1286d2dd882d8aa75fa14f5aeea8401a3eaacfed88dc86b159934dc35e06a2cadd + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d languageName: node linkType: hard @@ -2997,15 +3383,34 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^27.4.4": - version: 27.4.4 - resolution: "@jest/environment@npm:27.4.4" +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" dependencies: - "@jest/fake-timers": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^27.4.2 - checksum: 59296abb5d073b7a5f24faba6d39e716cbbba077b7477e944a46cfdc7a0624035e4c78c3cb8d27e0875ecb26a1526720be177a9e1aef0efed8e7ba8dd9fb4b6e + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e languageName: node linkType: hard @@ -3034,17 +3439,17 @@ __metadata: languageName: node linkType: hard -"@jest/fake-timers@npm:^27.4.2": - version: 27.4.2 - resolution: "@jest/fake-timers@npm:27.4.2" +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 - "@sinonjs/fake-timers": ^8.0.1 + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^27.4.2 - jest-mock: ^27.4.2 - jest-util: ^27.4.2 - checksum: 4b0c21ce8aec687ccd4e96b6f9d532a9848517b5e5fc8fa96a90fe1e7514952d0e1f805e6539fbd7336fbbac05e1a4ec7915c59284c40d919fcfb1a226b3bc9d + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 languageName: node linkType: hard @@ -3059,14 +3464,15 @@ __metadata: languageName: node linkType: hard -"@jest/globals@npm:^27.4.4": - version: 27.4.4 - resolution: "@jest/globals@npm:27.4.4" +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" dependencies: - "@jest/environment": ^27.4.4 - "@jest/types": ^27.4.2 - expect: ^27.4.2 - checksum: b43d8290fbd09148961877cc859c4e23e4c7cb44c161d540fd7ab8f9dc490cf787dc346c308d7df9d23429461754156b78b36bc14b78823f51c3869106e2e0c6 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 languageName: node linkType: hard @@ -3106,41 +3512,58 @@ __metadata: languageName: node linkType: hard -"@jest/reporters@npm:^27.4.5": - version: 27.4.5 - resolution: "@jest/reporters@npm:27.4.5" +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^27.4.2 - "@jest/test-result": ^27.4.2 - "@jest/transform": ^27.4.5 - "@jest/types": ^27.4.2 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 - glob: ^7.1.2 - graceful-fs: ^4.2.4 + glob: ^7.1.3 + graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^4.0.3 + istanbul-lib-instrument: ^6.0.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.0.2 - jest-haste-map: ^27.4.5 - jest-resolve: ^27.4.5 - jest-util: ^27.4.2 - jest-worker: ^27.4.5 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 slash: ^3.0.0 - source-map: ^0.6.0 string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^8.1.0 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: d053edae6906171f29c50c6129a600dd10d00320adf6df57938efc651ddd98aecdf7e3f82c3778e77311e8358e57e337d21c391aa867c9c289366e7bd4d6cf2b + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 + languageName: node + linkType: hard + +"@jest/schemas@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/schemas@npm:28.1.3" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 languageName: node linkType: hard @@ -3166,14 +3589,14 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^27.4.0": - version: 27.4.0 - resolution: "@jest/source-map@npm:27.4.0" +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" dependencies: + "@jridgewell/trace-mapping": ^0.3.18 callsites: ^3.0.0 - graceful-fs: ^4.2.4 - source-map: ^0.6.0 - checksum: cf87ac3dd1c2d210b0637060710d64417bcd88d670cbb26af7367ded99fd7d64d431c1718054351f0236c14659bc17a8deff6ee3d9f52902299911231bbaf0c8 + graceful-fs: ^4.2.9 + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb languageName: node linkType: hard @@ -3212,15 +3635,15 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^27.4.2": - version: 27.4.2 - resolution: "@jest/test-result@npm:27.4.2" +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" dependencies: - "@jest/console": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: bc3b91a76b505c7367e15d318ce49332e56857b9f6a00f67e9debfcbd11f22f90942b3e0aeea44b7e8da1fecba4fcb6ac591d007e488c300e361b763cf3b65b9 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa languageName: node linkType: hard @@ -3237,15 +3660,15 @@ __metadata: languageName: node linkType: hard -"@jest/test-sequencer@npm:^27.4.5": - version: 27.4.5 - resolution: "@jest/test-sequencer@npm:27.4.5" +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" dependencies: - "@jest/test-result": ^27.4.2 - graceful-fs: ^4.2.4 - jest-haste-map: ^27.4.5 - jest-runtime: ^27.4.5 - checksum: b78376fe4b964f2fd7e71083c220e5f0a8f59f079dc88783c60fce969b09ea38eebabc32c50a4637c20679a8bfa8220abb814cd232d241ee385d4df3d93f7d21 + "@jest/test-result": ^29.7.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + slash: ^3.0.0 + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd languageName: node linkType: hard @@ -3272,26 +3695,26 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^27.4.5": - version: 27.4.5 - resolution: "@jest/transform@npm:27.4.5" +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" dependencies: - "@babel/core": ^7.1.0 - "@jest/types": ^27.4.2 - babel-plugin-istanbul: ^6.0.0 + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.4 - jest-haste-map: ^27.4.5 - jest-regex-util: ^27.4.0 - jest-util: ^27.4.2 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 micromatch: ^4.0.4 - pirates: ^4.0.1 + pirates: ^4.0.4 slash: ^3.0.0 - source-map: ^0.6.1 - write-file-atomic: ^3.0.0 - checksum: f7a479545969d327a253ff1963c20260cffdee50cbc1345205f06e206df09871dd3f62dd4ba5358a087587ef5fa320b2e32efe1166192d8da835065e99d6bce7 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab languageName: node linkType: hard @@ -3357,6 +3780,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -3389,6 +3826,17 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": ^1.2.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" @@ -3396,6 +3844,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + "@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" @@ -3403,6 +3858,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + "@jridgewell/source-map@npm:^0.3.2": version: 0.3.3 resolution: "@jridgewell/source-map@npm:0.3.3" @@ -3420,13 +3882,23 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.13": +"@jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.14 resolution: "@jridgewell/trace-mapping@npm:0.3.14" @@ -3474,19 +3946,6 @@ __metadata: languageName: node linkType: hard -"@manypkg/get-packages@npm:^1.0.1": - version: 1.1.1 - resolution: "@manypkg/get-packages@npm:1.1.1" - dependencies: - "@babel/runtime": ^7.5.5 - "@manypkg/find-root": ^1.1.0 - fs-extra: ^8.1.0 - globby: ^11.0.0 - read-yaml-file: ^1.1.0 - checksum: f554d1c1e080267f5c4507137043a4a66cc539b54a7b71a6f38557e23c58e285ebfcfa43a5e0921bf7927108f7bedeb542d08313caa954e6d995955674f051e2 - languageName: node - linkType: hard - "@manypkg/get-packages@npm:^1.1.3": version: 1.1.3 resolution: "@manypkg/get-packages@npm:1.1.3" @@ -3674,6 +4133,16 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + "@nodelib/fs.stat@npm:2.0.3, @nodelib/fs.stat@npm:^2.0.2": version: 2.0.3 resolution: "@nodelib/fs.stat@npm:2.0.3" @@ -3681,6 +4150,13 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.stat@npm:2.0.5": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + "@nodelib/fs.stat@npm:^1.1.2": version: 1.1.3 resolution: "@nodelib/fs.stat@npm:1.1.3" @@ -3698,6 +4174,16 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + "@npmcli/fs@npm:^1.0.0": version: 1.0.0 resolution: "@npmcli/fs@npm:1.0.0" @@ -4516,6 +5002,13 @@ __metadata: languageName: node linkType: hard +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba + languageName: node + linkType: hard + "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3": version: 0.4.3 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3" @@ -4559,9 +5052,9 @@ __metadata: languageName: node linkType: hard -"@preconstruct/cli@npm:^2.6.2": - version: 2.6.2 - resolution: "@preconstruct/cli@npm:2.6.2" +"@preconstruct/cli@npm:^2.8.4": + version: 2.8.4 + resolution: "@preconstruct/cli@npm:2.8.4" dependencies: "@babel/code-frame": ^7.5.5 "@babel/core": ^7.7.7 @@ -4575,6 +5068,7 @@ __metadata: "@rollup/plugin-replace": ^2.4.1 builtin-modules: ^3.1.0 chalk: ^4.1.0 + ci-info: ^3.8.0 dataloader: ^2.0.0 detect-indent: ^6.0.0 enquirer: ^2.3.6 @@ -4582,7 +5076,6 @@ __metadata: fast-deep-equal: ^2.0.1 fast-glob: ^3.2.4 fs-extra: ^9.0.1 - is-ci: ^2.0.0 is-reference: ^1.2.1 jest-worker: ^26.3.0 magic-string: ^0.30.0 @@ -4600,9 +5093,10 @@ __metadata: semver: ^7.3.4 terser: ^5.16.8 v8-compile-cache: ^2.1.1 + zod: ^3.21.4 bin: preconstruct: bin.js - checksum: ea1459cbc62c0478036c19052f66898201e2408648027260c96cc8b844930bda011ef3bd0439aca586a8ab984d4bf4b4cbc3bf1158856b68c43baa8f9d3ce4b3 + checksum: 5eca03de93e97fb640ba7ab5f9d08ad12485ebbc6444a21ca2d1a21c42f1eec9dd80947396c9799246e723e5ad0add0a227215afc702d4f21c69236fffa5a275 languageName: node linkType: hard @@ -4884,6 +5378,20 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.27 + resolution: "@sinclair/typebox@npm:0.24.27" + checksum: c283de9158c0206da3d1ebd7c5f994da0b1cf86df89674da7709850300ecdceb0d4c9680dccce84b60cdcc3d8858f54df8235b250ba092726fadb2bebe720bd1 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^0.14.0": version: 0.14.0 resolution: "@sindresorhus/is@npm:0.14.0" @@ -4900,21 +5408,30 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^6.0.1": - version: 6.0.1 - resolution: "@sinonjs/fake-timers@npm:6.0.1" +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 + type-detect: 4.0.8 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^6.0.1": + version: 6.0.1 + resolution: "@sinonjs/fake-timers@npm:6.0.1" dependencies: "@sinonjs/commons": ^1.7.0 - checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 + checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 languageName: node linkType: hard @@ -5400,6 +5917,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.1.18": + version: 7.1.19 + resolution: "@types/babel__core@npm:7.1.19" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 8c9fa87a1c2224cbec251683a58bebb0d74c497118034166aaa0491a4e2627998a6621fc71f8a60ffd27d9c0c52097defedf7637adc6618d0331c15adb302338 + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.2 resolution: "@types/babel__generator@npm:7.6.2" @@ -5455,6 +5985,13 @@ __metadata: languageName: node linkType: hard +"@types/css-to-react-native@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/css-to-react-native@npm:3.0.0" + checksum: 85870135513b523601270cafa8479086c4f65cef7f00d4d633cb0849efa3083ae6e3c2673dc4e8743036ad0a3f4081c507f1e96e40bb2a62e7550f765246e58a + languageName: node + linkType: hard + "@types/debug@npm:^4.0.0": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" @@ -5464,6 +6001,16 @@ __metadata: languageName: node linkType: hard +"@types/eslint@npm:^7.0.0": + version: 7.29.0 + resolution: "@types/eslint@npm:7.29.0" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: df13991c554954353ce8f3bb03e19da6cc71916889443d68d178d4f858b561ba4cc4a4f291c6eb9eebb7f864b12b9b9313051b3a8dfea3e513dadf3188a77bdf + languageName: node + linkType: hard + "@types/eslint@npm:^7.2.6": version: 7.28.2 resolution: "@types/eslint@npm:7.28.2" @@ -5538,6 +6085,15 @@ __metadata: languageName: node linkType: hard +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "*" + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 + languageName: node + linkType: hard + "@types/hast@npm:^2.0.0": version: 2.3.1 resolution: "@types/hast@npm:2.3.1" @@ -5605,13 +6161,33 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^27.0.3": - version: 27.0.3 - resolution: "@types/jest@npm:27.0.3" +"@types/jest-in-case@npm:^1.0.5": + version: 1.0.6 + resolution: "@types/jest-in-case@npm:1.0.6" + dependencies: + "@types/jest": "*" + "@types/node": "*" + checksum: 6bf79f5d12747247e88e65c2bf3473455e81c49c8f9512f8293611cc3d3c4e10df08e1a81bedd6e09518c1ab91f774a180d0dbdeeafb9c7dc5b19d978bc4bdbe + languageName: node + linkType: hard + +"@types/jest@npm:*": + version: 28.1.6 + resolution: "@types/jest@npm:28.1.6" + dependencies: + jest-matcher-utils: ^28.0.0 + pretty-format: ^28.0.0 + checksum: f2ba5fbefc8f44d1c16ee19d8d2811bca75754a2846e222287f2788d96062801c568215e6b81eb532a48e8cb2a7282729da1d4f6fb496831da8269c5abaad4c5 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.12": + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" dependencies: - jest-diff: ^27.0.0 - pretty-format: ^27.0.0 - checksum: 3683a9945821966f6dccddf337219a5d682633687c9d30df859223db553589f63e9b2c34e69f0cc845c86ffcf115742f25c12ea03c8d33d2244890fdc0af61e2 + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c languageName: node linkType: hard @@ -5622,6 +6198,17 @@ __metadata: languageName: node linkType: hard +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": version: 7.0.9 resolution: "@types/json-schema@npm:7.0.9" @@ -5636,6 +6223,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d + languageName: node + linkType: hard + "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -5752,13 +6346,6 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.1.5": - version: 2.4.2 - resolution: "@types/prettier@npm:2.4.2" - checksum: 76e230b2d11028af11fe12e09b2d5b10b03738e9abf819ae6ebb0f78cac13d39f860755ce05ac3855b608222518d956628f5d00322dc206cc6d1f2d8d1519f1e - languageName: node - linkType: hard - "@types/prismjs@npm:^1.26.0": version: 1.26.0 resolution: "@types/prismjs@npm:1.26.0" @@ -5789,14 +6376,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.9": - version: 18.0.14 - resolution: "@types/react@npm:18.0.14" +"@types/react@npm:*, @types/react@npm:18.2.6, @types/react@npm:>=16": + version: 18.2.6 + resolution: "@types/react@npm:18.2.6" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 608eb57a383eedc54c79949673e5e8314f6b0c61542bff58721c8c47a18c23e2832e77c656050c2c2c004b62cf25582136c7c56fe1b6263a285c065fae31dbcf + checksum: dea9d232d8df7ac357367a69dcb557711ab3d5501807ffa77cebeee73d49ee94d095f298e36853c63ed47cce097eee4c7eae2aaa8c02fac3f0171ec1b523a819 languageName: node linkType: hard @@ -5844,13 +6431,20 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^6.0.0, @types/semver@npm:^6.0.1": +"@types/semver@npm:^6.0.1": version: 6.0.1 resolution: "@types/semver@npm:6.0.1" checksum: 9f3e335eca536fe2a62460c614656c8d1926f7c53846796e25216ec17d6986bc16b547b38bfc0dcde1ef7fc6cbc4b20fc7dbb794162a3f81e3c3eda113e8cd79 languageName: node linkType: hard +"@types/semver@npm:^7.5.0": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + languageName: node + linkType: hard + "@types/source-list-map@npm:*": version: 0.1.2 resolution: "@types/source-list-map@npm:0.1.2" @@ -5888,6 +6482,13 @@ __metadata: languageName: node linkType: hard +"@types/tough-cookie@npm:*": + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: f19409d0190b179331586365912920d192733112a195e870c7f18d20ac8adb7ad0b0ff69dad430dba8bc2be09593453a719cfea92dc3bda19748fd158fe1498d + languageName: node + linkType: hard + "@types/uglify-js@npm:*": version: 3.13.1 resolution: "@types/uglify-js@npm:3.13.1" @@ -5963,6 +6564,15 @@ __metadata: languageName: node linkType: hard +"@types/yargs@npm:^17.0.8": + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" + dependencies: + "@types/yargs-parser": "*" + checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba + languageName: node + linkType: hard + "@types/yauzl@npm:^2.9.1": version: 2.9.2 resolution: "@types/yauzl@npm:2.9.2" @@ -5994,6 +6604,29 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.13.0" + dependencies: + "@eslint-community/regexpp": ^4.10.0 + "@typescript-eslint/scope-manager": 7.13.0 + "@typescript-eslint/type-utils": 7.13.0 + "@typescript-eslint/utils": 7.13.0 + "@typescript-eslint/visitor-keys": 7.13.0 + graphemer: ^1.4.0 + ignore: ^5.3.1 + natural-compare: ^1.4.0 + ts-api-utils: ^1.3.0 + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 8bb62f7d4ab3af3656e564c0dd164316e1518475e34a65495b8b2ff816ce24e6df9b1b1d3616bc128fe1d6f26247a04b01513d99e69e2cf0a8048f32b67d58c5 + languageName: node + linkType: hard + "@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": version: 4.33.0 resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" @@ -6042,6 +6675,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/parser@npm:7.13.0" + dependencies: + "@typescript-eslint/scope-manager": 7.13.0 + "@typescript-eslint/types": 7.13.0 + "@typescript-eslint/typescript-estree": 7.13.0 + "@typescript-eslint/visitor-keys": 7.13.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: dd7ef8380d954bb073b9d5d9f785fdc46a109d2938691f9b5fa6c227bd808bb64d8afc6ccccf217d3499deb8947d2f22ed51862e2e9563987ba3e225c58583a3 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -6052,6 +6703,43 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.32.0": + version: 5.32.0 + resolution: "@typescript-eslint/scope-manager@npm:5.32.0" + dependencies: + "@typescript-eslint/types": 5.32.0 + "@typescript-eslint/visitor-keys": 5.32.0 + checksum: 69bdeb029f39d1112299dc0cb0ddef30e51bdb782fdb79cc4e72fa448e00d71e39938d3bff3fa4ee43b3416c2e3b4564de2c37252914772b07eeedafb14412d6 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/scope-manager@npm:7.13.0" + dependencies: + "@typescript-eslint/types": 7.13.0 + "@typescript-eslint/visitor-keys": 7.13.0 + checksum: fb9663f414985e0fecd0952a9c5ff2a2e2b975cc7eb07a3fa13243b30d8aa67f9b707d636aa050b673b50a6b63aa8b5ba78a64f712e801e23f9c86e1896c3f21 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/type-utils@npm:7.13.0" + dependencies: + "@typescript-eslint/typescript-estree": 7.13.0 + "@typescript-eslint/utils": 7.13.0 + debug: ^4.3.4 + ts-api-utils: ^1.3.0 + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 5f325fc325b166853444354e254c0d7fbb15dde2a61bbf63313cc58cb7a0546023241848671f216c268f1b87dce9c1e40b89dccae1846f2662e2cf2c99a83aef + languageName: node + linkType: hard + "@typescript-eslint/types@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/types@npm:3.10.1" @@ -6066,6 +6754,20 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.32.0": + version: 5.32.0 + resolution: "@typescript-eslint/types@npm:5.32.0" + checksum: 6758f54d8d7763893cd7c1753f525ef1777eee8b558bf3d54fd2a2ce691ca0cf813c68a26e4db83a1deae4e4a62b247f1195e15a1f3577f1293849f9e55a232c + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/types@npm:7.13.0" + checksum: 1b81398bf4d0cb2602220d3a64f3bb74cd7b1e3e75fc1aecd28b9a6d6d20314ed7dffe057db3526ef3bdaa951e401443bb82e034cdebee79b28ea3b4ca9ff50f + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/typescript-estree@npm:3.10.1" @@ -6103,16 +6805,83 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:3.10.1": - version: 3.10.1 - resolution: "@typescript-eslint/visitor-keys@npm:3.10.1" +"@typescript-eslint/typescript-estree@npm:5.32.0": + version: 5.32.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.32.0" dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: 0c4825b9829b1c11258a73aaee70d64834ba6d9b24157e7624e80f27f6537f468861d4dd33ad233c13ad2c6520afb9008c0675da6d792f26e82d75d6bfe9b0c6 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:4.33.0": + "@typescript-eslint/types": 5.32.0 + "@typescript-eslint/visitor-keys": 5.32.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 6aee08be5d36603d038fb8340f324f5cb38519150c9b37c012f0c1ff2a4d8cf22fbc6835de31d069949c2b3d8ed3e729076a724ef29db4289d9fe73b97c9d310 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.13.0" + dependencies: + "@typescript-eslint/types": 7.13.0 + "@typescript-eslint/visitor-keys": 7.13.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + minimatch: ^9.0.4 + semver: ^7.6.0 + ts-api-utils: ^1.3.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 5a410db27ddb514344414a579e9f81a0db0e7e9f579aa624ace223655b905705a37510992a94924d9ead3c4c84c9357cf5358599036f7c44f50b56b54a791d82 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/utils@npm:7.13.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@typescript-eslint/scope-manager": 7.13.0 + "@typescript-eslint/types": 7.13.0 + "@typescript-eslint/typescript-estree": 7.13.0 + peerDependencies: + eslint: ^8.56.0 + checksum: d57c60767949e3ea9d9b33de69a18396fea0e5d2eeb13ef8bbdcfe9c8fae62bf5af25f571b1b7c480362ddb9ccd8f811df4330af595b32a46bf0b8b8ce9b598e + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^5.25.0": + version: 5.32.0 + resolution: "@typescript-eslint/utils@npm:5.32.0" + dependencies: + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.32.0 + "@typescript-eslint/types": 5.32.0 + "@typescript-eslint/typescript-estree": 5.32.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: cfd88d93508c8fb0db17d2726691e1383db390357fa0637bd8111558fbe72da5130d995294001d71b1d929d620fbce3f20a70b277a77ca21a4241b3b470dc758 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:3.10.1": + version: 3.10.1 + resolution: "@typescript-eslint/visitor-keys@npm:3.10.1" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: 0c4825b9829b1c11258a73aaee70d64834ba6d9b24157e7624e80f27f6537f468861d4dd33ad233c13ad2c6520afb9008c0675da6d792f26e82d75d6bfe9b0c6 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" dependencies: @@ -6122,6 +6891,33 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.32.0": + version: 5.32.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.32.0" + dependencies: + "@typescript-eslint/types": 5.32.0 + eslint-visitor-keys: ^3.3.0 + checksum: 1f9b756d648c2346a6e8538ffde729d3d9ce6621fded3d9f15c96aa0ebf8f511daf8232470423fb36359c2113538a4daaf3336181be78a0cfbfd297af91ce9ba + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:7.13.0": + version: 7.13.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.13.0" + dependencies: + "@typescript-eslint/types": 7.13.0 + eslint-visitor-keys: ^3.4.3 + checksum: 23d48e1c1b9e16e5a867615ffe7111f637224b79bd738f94282b610a0b6b7bf5e436e1422e82395243d0f58714353fc613a11ea671bb217ea99d710f93ab6a26 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/ast@npm:1.9.0" @@ -6331,6 +7127,13 @@ __metadata: languageName: node linkType: hard +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + "abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -6391,7 +7194,17 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.1": +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -6430,6 +7243,15 @@ __metadata: languageName: node linkType: hard +"acorn-walk@npm:^8.0.2": + version: 8.3.3 + resolution: "acorn-walk@npm:8.3.3" + dependencies: + acorn: ^8.11.0 + checksum: 0f09d351fc30b69b2b9982bf33dc30f3d35a34e030e5f1ed3c49fc4e3814a192bf3101e4c30912a0595410f5e91bb70ddba011ea73398b3ecbfe41c7334c6dd0 + languageName: node + linkType: hard + "acorn@npm:^6.0.1, acorn@npm:^6.0.7": version: 6.2.1 resolution: "acorn@npm:6.2.1" @@ -6493,6 +7315,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.8.1, acorn@npm:^8.9.0": + version: 8.12.0 + resolution: "acorn@npm:8.12.0" + bin: + acorn: bin/acorn + checksum: ae142de8739ef15a5d936c550c1d267fc4dedcdbe62ad1aa2c0009afed1de84dd0a584684a5d200bb55d8db14f3e09a95c6e92a5303973c04b9a7413c36d1df0 + languageName: node + linkType: hard + "acorn@npm:^8.2.4": version: 8.6.0 resolution: "acorn@npm:8.6.0" @@ -6708,15 +7539,6 @@ __metadata: languageName: node linkType: hard -"ansi-align@npm:^2.0.0": - version: 2.0.0 - resolution: "ansi-align@npm:2.0.0" - dependencies: - string-width: ^2.0.0 - checksum: fecefb3b4a128aaad52ed1d2ee2f999968acc77573645be49666273ec2952840e27aed8cb9c2e48cd0c2d5a088389223eabb6d09aa74bceba3b931d242288c97 - languageName: node - linkType: hard - "ansi-colors@npm:^1.0.1": version: 1.1.0 resolution: "ansi-colors@npm:1.1.0" @@ -6740,6 +7562,13 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:^4.1.3": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + "ansi-cyan@npm:^0.1.1": version: 0.1.1 resolution: "ansi-cyan@npm:0.1.1" @@ -6781,6 +7610,13 @@ __metadata: languageName: node linkType: hard +"ansi-escapes@npm:^6.0.0": + version: 6.2.1 + resolution: "ansi-escapes@npm:6.2.1" + checksum: 4bdbabe0782a1d4007157798f8acab745d1d5e440c872e6792880d08025e0baababa6b85b36846e955fde7d1e4bf572cdb1fddf109de196e9388d7a1c55ce30d + languageName: node + linkType: hard + "ansi-fragments@npm:^0.2.1": version: 0.2.1 resolution: "ansi-fragments@npm:0.2.1" @@ -7065,6 +7901,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + "array-equal@npm:^1.0.0": version: 1.0.0 resolution: "array-equal@npm:1.0.0" @@ -7131,6 +7977,20 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + is-string: ^1.0.7 + checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 + languageName: node + linkType: hard + "array-map@npm:~0.0.0": version: 0.0.0 resolution: "array-map@npm:0.0.0" @@ -7192,24 +8052,27 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.3": - version: 1.2.3 - resolution: "array.prototype.flat@npm:1.2.3" +"array.prototype.findlast@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.0-next.1 - checksum: ba4cf6e53871902a09fa7f56ff097e836f18d59de0219fe271e3d1a895a7ea98a62fa946cbdae95e73b774991206a32a26822227d081bd2cc5c771b95f851753 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.2.3": +"array.prototype.flat@npm:^1.2.3": version: 1.2.3 - resolution: "array.prototype.flatmap@npm:1.2.3" + resolution: "array.prototype.flat@npm:1.2.3" dependencies: define-properties: ^1.1.3 es-abstract: ^1.17.0-next.1 - function-bind: ^1.1.1 - checksum: d0f96793d3763cb3aa48a0a9860255c2f10eeaa9584a6e6e2315db67a2088a4a6a27e62ae5fdd3f49a1a61b4f481ed4991d95c9e752d581bae2ff73fff446607 + checksum: ba4cf6e53871902a09fa7f56ff097e836f18d59de0219fe271e3d1a895a7ea98a62fa946cbdae95e73b774991206a32a26822227d081bd2cc5c771b95f851753 languageName: node linkType: hard @@ -7225,6 +8088,59 @@ __metadata: languageName: node linkType: hard +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 + es-shim-unscopables: ^1.0.2 + checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 + is-shared-array-buffer: ^1.0.2 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + languageName: node + linkType: hard + "arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -7425,6 +8341,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + "aws-sign2@npm:~0.6.0": version: 0.6.0 resolution: "aws-sign2@npm:0.6.0" @@ -7523,13 +8448,6 @@ __metadata: languageName: node linkType: hard -"babel-flow-types@npm:^1.2.3": - version: 1.2.3 - resolution: "babel-flow-types@npm:1.2.3" - checksum: dd3b87fd429a835372b6012d2c437855ff103a909d0fe8538b809ddccd5cd5bf6a840d84af915bc25e1b8c6f000a2cf6f51ab737c79cb8cd980ef461e4577084 - languageName: node - linkType: hard - "babel-jest@npm:^26.6.0, babel-jest@npm:^26.6.3": version: 26.6.3 resolution: "babel-jest@npm:26.6.3" @@ -7548,21 +8466,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^27.4.5": - version: 27.4.5 - resolution: "babel-jest@npm:27.4.5" +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" dependencies: - "@jest/transform": ^27.4.5 - "@jest/types": ^27.4.2 + "@jest/transform": ^29.7.0 "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.0.0 - babel-preset-jest: ^27.4.0 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 chalk: ^4.0.0 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 986601fd143e6bdd9b9c176ade5c1f93a63e38beba511527183fec5f1041920f1262fcb3f87e8660c85fc6cc731d5d49570b35d54c31427644c6849caa137d89 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 languageName: node linkType: hard @@ -7582,6 +8499,13 @@ __metadata: languageName: node linkType: hard +"babel-plugin-add-basic-constructor-for-react-components@npm:^0.1.0": + version: 0.1.0 + resolution: "babel-plugin-add-basic-constructor-for-react-components@npm:0.1.0" + checksum: bfe84200e1738939b8a7a8114a8be2df8fdf35634d3d6a3b02bcca746a7a79855baa2f3f33662b4b4158ef28677d2bc5fd020c46219ec8229e43aab5bea49f31 + languageName: node + linkType: hard + "babel-plugin-codegen@npm:^4.1.5": version: 4.1.5 resolution: "babel-plugin-codegen@npm:4.1.5" @@ -7602,6 +8526,13 @@ __metadata: languageName: node linkType: hard +"babel-plugin-fix-dce-for-classes-with-statics@npm:^0.1.0": + version: 0.1.0 + resolution: "babel-plugin-fix-dce-for-classes-with-statics@npm:0.1.0" + checksum: 83413bb185cfeeb219beecccdf5ed2b2db81a9e800aa8ecbe5ec36bb3d151022f2e052408515b216b25014ceaa75ad64de6e83909842c98631b0462d15eefc8b + languageName: node + linkType: hard + "babel-plugin-istanbul@npm:^6.0.0": version: 6.0.0 resolution: "babel-plugin-istanbul@npm:6.0.0" @@ -7615,6 +8546,19 @@ __metadata: languageName: node linkType: hard +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + "babel-plugin-jest-hoist@npm:^26.6.2": version: 26.6.2 resolution: "babel-plugin-jest-hoist@npm:26.6.2" @@ -7627,15 +8571,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^27.4.0": - version: 27.4.0 - resolution: "babel-plugin-jest-hoist@npm:27.4.0" +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 - "@types/babel__core": ^7.0.0 + "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 48f216f286f2fb3b1d571b4ba4ccffdb0c11a2fb1117e4c355b26c8cef09603abd96a5c1f8442866830a7da5accdd9ae4805f3e977b606a596b4a259f2ff5a67 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 languageName: node linkType: hard @@ -7798,7 +8742,8 @@ __metadata: resolution: "babel-preset-emotion-dev@workspace:scripts/babel-preset-emotion-dev" dependencies: "@babel/plugin-proposal-class-properties": ^7.17.12 - "@babel/plugin-transform-flow-strip-types": ^7.17.12 + babel-plugin-add-basic-constructor-for-react-components: ^0.1.0 + babel-plugin-fix-dce-for-classes-with-statics: ^0.1.0 languageName: unknown linkType: soft @@ -7888,15 +8833,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^27.4.0": - version: 27.4.0 - resolution: "babel-preset-jest@npm:27.4.0" +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" dependencies: - babel-plugin-jest-hoist: ^27.4.0 + babel-plugin-jest-hoist: ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 744449cc63283116e8268c088a714d9c26d93af8d6051523b900517b665e0122239fc6a326de206657d423f4cccfaf2437ef099fcdfbfd91c4cdde6b1c55c11f + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb languageName: node linkType: hard @@ -7939,6 +8884,8 @@ __metadata: dependencies: "@babel/plugin-syntax-class-properties": ^7.12.13 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@types/jest-in-case": ^1.0.5 + babel-check-duplicated-nodes: ^1.0.0 languageName: unknown linkType: soft @@ -8050,7 +8997,7 @@ __metadata: resolution: "benchmarks@workspace:scripts/benchmarks" dependencies: "@babel/core": ^7.18.5 - "@emotion/babel-plugin": ^11.0.0 + "@emotion/babel-plugin": ^11.12.0 babel-plugin-react-native-web: ^0.17.5 d3-scale-chromatic: ^3.0.0 http-server: ^14.0.0 @@ -8223,21 +9170,6 @@ __metadata: languageName: node linkType: hard -"boxen@npm:^1.3.0": - version: 1.3.0 - resolution: "boxen@npm:1.3.0" - dependencies: - ansi-align: ^2.0.0 - camelcase: ^4.0.0 - chalk: ^2.0.1 - cli-boxes: ^1.0.0 - string-width: ^2.0.0 - term-size: ^1.2.0 - widest-line: ^2.0.0 - checksum: 8dad2081bfaf5a86cb85685882b5f22027c5c430ee0974894078f521a44d92a90222fb4391b41fc4575aa1215c9133ea2c6b7feadcd1cb2fae8f4e97c05dbf11 - languageName: node - linkType: hard - "bplist-creator@npm:0.0.8": version: 0.0.8 resolution: "bplist-creator@npm:0.0.8" @@ -8302,15 +9234,6 @@ __metadata: languageName: node linkType: hard -"breakword@npm:^1.0.5": - version: 1.0.5 - resolution: "breakword@npm:1.0.5" - dependencies: - wcwidth: ^1.0.1 - checksum: 8ca7b10bbbbfe1c45c12c9119c4bc1e585452ddd58c5da93020a0c1deac3cf6bb335632675c9c705ba7b644065ae1d6623a25e79b7a48e0ee0ff42cb6e94b357 - languageName: node - linkType: hard - "brorand@npm:^1.0.1": version: 1.1.0 resolution: "brorand@npm:1.1.0" @@ -8408,6 +9331,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.22.2": + version: 4.23.1 + resolution: "browserslist@npm:4.23.1" + dependencies: + caniuse-lite: ^1.0.30001629 + electron-to-chromium: ^1.4.796 + node-releases: ^2.0.14 + update-browserslist-db: ^1.0.16 + bin: + browserslist: cli.js + checksum: 06189e2d6666a203ce097cc0e713a40477d08420927b79af139211e5712f3cf676fdc4dd6af3aa493d47c09206a344b3420a8315577dbe88c58903132de9b0f5 + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -8669,6 +9606,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + "call-me-maybe@npm:^1.0.1": version: 1.0.1 resolution: "call-me-maybe@npm:1.0.1" @@ -8747,7 +9697,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^4.0.0, camelcase@npm:^4.1.0": +"camelcase@npm:^4.1.0": version: 4.1.0 resolution: "camelcase@npm:4.1.0" checksum: 9683356daf9b64fae4b30c91f8ceb1f34f22746e03d1804efdbe738357d38b47f206cdd71efcf2ed72018b2e88eeb8ec3f79adb09c02f1253a4b6d5d405ff2ae @@ -8808,6 +9758,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001629": + version: 1.0.30001634 + resolution: "caniuse-lite@npm:1.0.30001634" + checksum: 5ab273ec36fee64b148bee8a84e758eb22cc282cce9af41eb0d36a0cdd2b90ff96ba502be89aaf0448b3153cd100629acac94971bb5cb9016f6c5ccbeda944b2 + languageName: node + linkType: hard + "capture-exit@npm:^2.0.0": version: 2.0.0 resolution: "capture-exit@npm:2.0.0" @@ -8907,6 +9864,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.2.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -9114,6 +10078,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.7.0, ci-info@npm:^3.8.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + "cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": version: 1.0.4 resolution: "cipher-base@npm:1.0.4" @@ -9173,13 +10144,6 @@ __metadata: languageName: node linkType: hard -"cli-boxes@npm:^1.0.0": - version: 1.0.0 - resolution: "cli-boxes@npm:1.0.0" - checksum: 101cfd6464a418a76523c332665eaf0641522f30ecc2492de48263ada6b0852333b2ed47b2998ddda621e7008471c51f597f813be798db237c33ba45b27e802a - languageName: node - linkType: hard - "cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": version: 2.1.0 resolution: "cli-cursor@npm:2.1.0" @@ -9251,14 +10215,14 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 - strip-ansi: ^6.0.0 + strip-ansi: ^6.0.1 wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard @@ -9705,6 +10669,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -9895,6 +10866,23 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + "create-react-class@npm:^15.6.3": version: 15.6.3 resolution: "create-react-class@npm:15.6.3" @@ -10479,6 +11467,13 @@ __metadata: languageName: node linkType: hard +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 + languageName: node + linkType: hard + "cssstyle@npm:^1.1.1": version: 1.4.0 resolution: "cssstyle@npm:1.4.0" @@ -10520,39 +11515,6 @@ __metadata: languageName: node linkType: hard -"csv-generate@npm:^3.2.4": - version: 3.2.4 - resolution: "csv-generate@npm:3.2.4" - checksum: 4930f266287be8a77ddde5228922c631073101731e72d90ecf5f5dba4f899a8a93944c688514427f6acca99e18b8e85766cda440ec8584f3bb043a9bea94205b - languageName: node - linkType: hard - -"csv-parse@npm:^4.8.8": - version: 4.12.0 - resolution: "csv-parse@npm:4.12.0" - checksum: f829e85e3db3aa5f83c79289e338d8bdfa09f14440b793f3fe0b4f355a77b292c6b693534354d5864fca810cf5aee1fbf95c281e7f9a71890a619e16af59637a - languageName: node - linkType: hard - -"csv-stringify@npm:^5.3.6": - version: 5.5.1 - resolution: "csv-stringify@npm:5.5.1" - checksum: 3ff8f750e68bacd44b3201d655c14ecb2a8ba5bd87ce252ef369df6d6420fcd5f73b6263315a3c0429f520b9ccb0cdd39bcc9454d302cab913afa2cc2d8ca4c8 - languageName: node - linkType: hard - -"csv@npm:^5.3.1": - version: 5.3.2 - resolution: "csv@npm:5.3.2" - dependencies: - csv-generate: ^3.2.4 - csv-parse: ^4.8.8 - csv-stringify: ^5.3.6 - stream-transform: ^2.0.1 - checksum: c2fe520b81eec41fb603d3d14ad6249f885a26f2452b4e114a5a50a5cf80c29116474cceb9cbeffb1fd5d22a10a6d140c1f6f70db871d09603354ea4f9808f2e - languageName: node - linkType: hard - "currently-unhandled@npm:^0.4.1": version: 0.4.1 resolution: "currently-unhandled@npm:0.4.1" @@ -10643,6 +11605,50 @@ __metadata: languageName: node linkType: hard +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" + dependencies: + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + "dataloader@npm:^1.4.0": version: 1.4.0 resolution: "dataloader@npm:1.4.0" @@ -10726,7 +11732,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.0.0, debug@npm:^4.3.3": +"debug@npm:^4.0.0, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -10771,6 +11777,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.2": + version: 4.3.5 + resolution: "debug@npm:4.3.5" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 7c002b51e256257f936dda09eb37167df952758c57badf6bf44bdc40b89a4bcb8e5a0a2e4c7b53f97c69e2970dd5272d33a757378a12c8f8e64ea7bf99e8e86e + languageName: node + linkType: hard + "decamelize-keys@npm:^1.0.0, decamelize-keys@npm:^1.1.0": version: 1.1.0 resolution: "decamelize-keys@npm:1.1.0" @@ -10802,6 +11820,13 @@ __metadata: languageName: node linkType: hard +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.1 resolution: "decode-named-character-reference@npm:1.0.1" @@ -10843,6 +11868,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.0.0": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 045b595557b2a8ea2eb9b0b4623d764e9a87326486fe2b61191b4342ed93dc01245644d8a09f3108a50c0ee7965f1eedd92e4a3a503ed89ea8e810566ea27f9a + languageName: node + linkType: hard + "deep-equal@npm:^1.0.1": version: 1.0.1 resolution: "deep-equal@npm:1.0.1" @@ -10904,6 +11941,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + "define-properties@npm:^1.1.2, define-properties@npm:^1.1.3": version: 1.1.3 resolution: "define-properties@npm:1.1.3" @@ -10913,6 +11961,17 @@ __metadata: languageName: node linkType: hard +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + "define-property@npm:^0.2.5": version: 0.2.5 resolution: "define-property@npm:0.2.5" @@ -11072,10 +12131,17 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^27.4.0": - version: 27.4.0 - resolution: "diff-sequences@npm:27.4.0" - checksum: 66d04033e8632eeacdd029b4ecaf87d233d475e4b0cd1cee035eda99e70e1a7f803507d72f2677990ef526f28a2f6e5709af8d94dcdc0682b8884a3a646190a1 +"diff-sequences@npm:^28.1.1": + version: 28.1.1 + resolution: "diff-sequences@npm:28.1.1" + checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa languageName: node linkType: hard @@ -11292,6 +12358,15 @@ __metadata: languageName: node linkType: hard +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 + languageName: node + linkType: hard + "domhandler@npm:^2.3.0": version: 2.4.2 resolution: "domhandler@npm:2.4.2" @@ -11465,6 +12540,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.796": + version: 1.4.803 + resolution: "electron-to-chromium@npm:1.4.803" + checksum: ee308c3107f768947a43659e773c21477031ef4db8ad0202d78a51b547aff50c059ccd3641804435886220a6208019ef9128ed4499157321afaaa9ae91a1aca1 + languageName: node + linkType: hard + "elegant-spinner@npm:^1.0.1": version: 1.0.1 resolution: "elegant-spinner@npm:1.0.1" @@ -11487,6 +12569,13 @@ __metadata: languageName: node linkType: hard +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + "emittery@npm:^0.7.1": version: 0.7.1 resolution: "emittery@npm:0.7.1" @@ -11494,13 +12583,6 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.8.1": - version: 0.8.1 - resolution: "emittery@npm:0.8.1" - checksum: 2457e8c7b0688bb006126f2c025b2655abe682f66b184954122a8a065b5277f9813d49d627896a10b076b81c513ec5f491fd9c14fbd42c04b95ca3c9f3c365ee - languageName: node - linkType: hard - "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -11544,25 +12626,25 @@ __metadata: "@babel/helper-module-imports": ^7.16.7 "@babel/plugin-proposal-class-properties": ^7.17.12 "@babel/plugin-syntax-jsx": ^7.17.12 - "@babel/plugin-transform-flow-strip-types": ^7.17.12 "@babel/plugin-transform-react-jsx": ^7.17.12 "@babel/preset-env": ^7.18.2 - "@babel/preset-flow": ^7.17.12 "@babel/preset-react": ^7.17.12 + "@babel/preset-typescript": ^7.18.6 "@babel/register": ^7.17.7 "@babel/runtime": ^7.18.3 - "@changesets/changelog-github": ^0.4.0 - "@changesets/cli": ^2.16.0 + "@changesets/changelog-github": ^0.5.0 + "@changesets/cli": ^2.27.7 "@manypkg/cli": ^0.19.1 - "@preconstruct/cli": ^2.6.2 + "@preconstruct/cli": ^2.8.4 "@testing-library/react": 13.0.0-alpha.5 - "@types/jest": ^27.0.3 + "@types/jest": ^29.5.12 "@types/node": ^12.20.37 - "@types/react": ^18.0.9 + "@types/react": 18.2.6 + "@typescript-eslint/eslint-plugin": ^7.13.0 + "@typescript-eslint/parser": ^7.13.0 babel-check-duplicated-nodes: ^1.0.0 babel-eslint: ^10.1.0 - babel-flow-types: ^1.2.3 - babel-jest: ^27.4.5 + babel-jest: ^29.7.0 babel-plugin-codegen: ^4.1.5 babel-plugin-jsx-pragmatic: ^1.0.2 benchmark: ^2.1.4 @@ -11573,28 +12655,22 @@ __metadata: enzyme: ^3.11.0 enzyme-adapter-react-16: ^1.15.5 enzyme-to-json: ^3.6.1 - eslint: ^7.10.0 - eslint-config-prettier: ^8.3.0 + eslint: ^8.57.0 + eslint-config-prettier: ^9.1.0 eslint-config-react: ^1.1.7 - eslint-config-standard: ^14.1.1 - eslint-config-standard-react: ^9.2.0 - eslint-plugin-flowtype: ^5.2.0 - eslint-plugin-import: ^2.22.1 eslint-plugin-node: ^11.1.0 - eslint-plugin-prettier: ^3.4.0 - eslint-plugin-promise: ^4.2.1 - eslint-plugin-react: ^7.21.3 - eslint-plugin-react-hooks: ^4.1.2 - eslint-plugin-standard: ^4.0.1 - flow-bin: ^0.128.0 + eslint-plugin-prettier: ^5.1.3 + eslint-plugin-promise: ^6.2.0 + eslint-plugin-react: ^7.34.2 + eslint-plugin-react-hooks: ^4.6.2 html-tag-names: ^1.1.2 husky: ^3.0.9 - jest: ^27.4.5 - jest-environment-jsdom: ^27.4.4 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 jest-in-case: ^1.0.2 jest-junit: ^13.0.0 jest-serializer-html: ^7.1.0 - jest-watch-typeahead: ^1.0.0 + jest-watch-typeahead: ^2.2.2 lint-staged: ^7.2.0 module-alias: ^2.0.1 multipipe: ^1.0.2 @@ -11602,7 +12678,7 @@ __metadata: npm-run-all: ^4.0.2 opencollective: ^1.0.3 polished: ^1.2.1 - prettier: ^2.3.0 + prettier: ^3.3.2 raf: ^3.4.0 react: 16.14.0 react-dom: 16.14.0 @@ -11614,6 +12690,7 @@ __metadata: react18-test-renderer: "npm:react-test-renderer@18.0.0-rc.0-next-aa8f2bdbc-20211215" svg-tag-names: ^1.1.1 through: ^2.3.8 + typescript: ^5.4.5 unified: ^6.1.6 webpack-bundle-analyzer: 3.3.2 languageName: unknown @@ -11634,7 +12711,7 @@ __metadata: "@types/js-yaml": ^4.0.5 "@types/node": ^12.20.37 "@types/prismjs": ^1.26.0 - "@types/react": ^18.0.9 + "@types/react": 18.2.6 "@types/remark-prism": ^1.3.3 facepaint: ^1.2.1 gray-matter: ^4.0.3 @@ -11650,7 +12727,7 @@ __metadata: remark-gfm: ^3.0.1 remark-prism: ^1.3.6 sharp: ^0.30.7 - typescript: ^4.5.5 + typescript: ^5.4.5 unist-util-visit: ^4.1.0 languageName: unknown linkType: soft @@ -11759,6 +12836,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -12016,6 +13100,127 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.3 + is-string: ^1.0.7 + is-typed-array: ^1.1.13 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 + object-keys: ^1.1.1 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-iterator-helpers@npm:^1.0.19": + version: 1.0.19 + resolution: "es-iterator-helpers@npm:1.0.19" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 + es-set-tostringtag: ^2.0.3 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.1.2 + checksum: 7ae112b88359fbaf4b9d7d1d1358ae57c5138768c57ba3a8fb930393662653b0512bfd7917c15890d1471577fb012fee8b73b4465e59b331739e6ee94f961683 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 + languageName: node + linkType: hard + "es-to-primitive@npm:^1.2.0": version: 1.2.0 resolution: "es-to-primitive@npm:1.2.0" @@ -12084,6 +13289,13 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.1.2": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 + languageName: node + linkType: hard + "escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" @@ -12176,14 +13388,14 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^8.3.0": - version: 8.3.0 - resolution: "eslint-config-prettier@npm:8.3.0" +"eslint-config-prettier@npm:^9.1.0": + version: 9.1.0 + resolution: "eslint-config-prettier@npm:9.1.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: df4cea3032671995bb5ab07e016169072f7fa59f44a53251664d9ca60951b66cdc872683b5c6a3729c91497c11490ca44a79654b395dd6756beb0c3903a37196 + checksum: 9229b768c879f500ee54ca05925f31b0c0bafff3d9f5521f98ff05127356de78c81deb9365c86a5ec4efa990cb72b74df8612ae15965b14136044c73e1f6a907 languageName: node linkType: hard @@ -12220,41 +13432,6 @@ __metadata: languageName: node linkType: hard -"eslint-config-standard-jsx@npm:^8.0.0": - version: 8.1.0 - resolution: "eslint-config-standard-jsx@npm:8.1.0" - peerDependencies: - eslint: ">=6.2.2" - eslint-plugin-react: ">=7.14.2" - checksum: 004fae82a0671598808578c3e218b6ca2ed192312e07bbc7fc88df005d35a7d0f734628089149d40997e0a0629ee05a9828d1f3a6521568ba5abf4c092907dea - languageName: node - linkType: hard - -"eslint-config-standard-react@npm:^9.2.0": - version: 9.2.0 - resolution: "eslint-config-standard-react@npm:9.2.0" - dependencies: - eslint-config-standard-jsx: ^8.0.0 - peerDependencies: - eslint: ">=6.2.2" - eslint-plugin-react: ">=7.6.1" - checksum: fc1024001ffa67fc1cbf770f1ba519ffc646e7ad9a7aa99811b1ca6f0535324960416a20f57e626c5f11f66dc83167da1f10a255b99a89deba6123c0c266dc12 - languageName: node - linkType: hard - -"eslint-config-standard@npm:^14.1.1": - version: 14.1.1 - resolution: "eslint-config-standard@npm:14.1.1" - peerDependencies: - eslint: ">=6.2.2" - eslint-plugin-import: ">=2.18.0" - eslint-plugin-node: ">=9.1.0" - eslint-plugin-promise: ">=4.2.1" - eslint-plugin-standard: ">=4.0.0" - checksum: 0eee1117e848d9d0d80f1e5d789ad426efa629d71b599711e382c05ebb9fa3ae11ef6d4e34947a0a7ce59bfc3c7f522a047b7fa34ab2eedf7702576ac5cf3d74 - languageName: node - linkType: hard - "eslint-import-resolver-node@npm:^0.3.4": version: 0.3.4 resolution: "eslint-import-resolver-node@npm:0.3.4" @@ -12374,34 +13551,32 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-prettier@npm:^3.4.0": - version: 3.4.0 - resolution: "eslint-plugin-prettier@npm:3.4.0" +"eslint-plugin-prettier@npm:^5.1.3": + version: 5.1.3 + resolution: "eslint-plugin-prettier@npm:5.1.3" dependencies: prettier-linter-helpers: ^1.0.0 + synckit: ^0.8.6 peerDependencies: - eslint: ">=5.0.0" - prettier: ">=1.13.0" + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: "*" + prettier: ">=3.0.0" peerDependenciesMeta: + "@types/eslint": + optional: true eslint-config-prettier: optional: true - checksum: 30a07e8d12637d2988e371f6a20ff4c86fd7fdc3596d1d18d62c0367804f38e06a65052d0281234aeb2552e4d1908dcb2de20543413e038251a2717a46400a9d - languageName: node - linkType: hard - -"eslint-plugin-promise@npm:^4.2.1": - version: 4.2.1 - resolution: "eslint-plugin-promise@npm:4.2.1" - checksum: 74b8234f1a5da2156107749ae50d74e0e4b0da89c32c1b8c8443d41ca2ba0b1cdfcc8f583fb47a69e067eeff6f1d48b83b3afaadac6874cdf2d24e3042f3b8ae + checksum: eb2a7d46a1887e1b93788ee8f8eb81e0b6b2a6f5a66a62bc6f375b033fc4e7ca16448da99380be800042786e76cf5c0df9c87a51a2c9b960ed47acbd7c0b9381 languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.1.2": - version: 4.1.2 - resolution: "eslint-plugin-react-hooks@npm:4.1.2" +"eslint-plugin-promise@npm:^6.2.0": + version: 6.2.0 + resolution: "eslint-plugin-promise@npm:6.2.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - checksum: b6826c5b695d1b4458aeaff1e5a98895a777419bd05c0df852a5d86f2ac4039bdf0a86676577d216ce6ae9ca031e2f2a61e80e886f3f2e640ee63cd4fc1b7d17 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 4ce2ee365044aaeac7feb7c4b62f7d432594960bf96be703f871fa5fdd61f358d6620222e7c907f7ee43ff54b0b2ff392c1f70680bce335f6396c8c7af79c141 languageName: node linkType: hard @@ -12414,24 +13589,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.21.3": - version: 7.21.3 - resolution: "eslint-plugin-react@npm:7.21.3" - dependencies: - array-includes: ^3.1.1 - array.prototype.flatmap: ^1.2.3 - doctrine: ^2.1.0 - has: ^1.0.3 - jsx-ast-utils: ^2.4.1 - object.entries: ^1.1.2 - object.fromentries: ^2.0.2 - object.values: ^1.1.1 - prop-types: ^15.7.2 - resolve: ^1.17.0 - string.prototype.matchall: ^4.0.2 +"eslint-plugin-react-hooks@npm:^4.6.2": + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 - checksum: 47b7d7da385e5d06e6251b3dc2e958c7a43739f03ca0ae94f3628f90527e424141446fdf438333986d7ef73d9c959c4272e08d5f64697d7c58d027c92e11f6ef + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 395c433610f59577cfcf3f2e42bcb130436c8a0b3777ac64f441d88c5275f4fcfc89094cedab270f2822daf29af1079151a7a6579a8e9ea8cee66540ba0384c4 languageName: node linkType: hard @@ -12459,12 +13622,31 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-standard@npm:^4.0.1": - version: 4.0.1 - resolution: "eslint-plugin-standard@npm:4.0.1" +"eslint-plugin-react@npm:^7.34.2": + version: 7.34.2 + resolution: "eslint-plugin-react@npm:7.34.2" + dependencies: + array-includes: ^3.1.8 + array.prototype.findlast: ^1.2.5 + array.prototype.flatmap: ^1.3.2 + array.prototype.toreversed: ^1.1.2 + array.prototype.tosorted: ^1.1.3 + doctrine: ^2.1.0 + es-iterator-helpers: ^1.0.19 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.8 + object.fromentries: ^2.0.8 + object.hasown: ^1.1.4 + object.values: ^1.2.0 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.5 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.11 peerDependencies: - eslint: ">=5.0.0" - checksum: 84d6a82d583b33c59602d7b787cd044d6d41ea91ea2e6494fd0fa053e5e7673a977b2028836e5d33f6a1c80da182d5ceb886e42b1455e24704eadd529388830e + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: aed331239f3a64fcd884380534ece4b8716f1eca4899c8636d04306879e6b4e7339e28e427bdd571d372b78b713025e0767e5f5b5486a8d19bff82616ebe8959 languageName: node linkType: hard @@ -12499,6 +13681,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + "eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" @@ -12540,6 +13732,20 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-visitor-keys@npm:3.3.0" + checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + "eslint-webpack-plugin@npm:^2.5.2": version: 2.5.4 resolution: "eslint-webpack-plugin@npm:2.5.4" @@ -12557,28 +13763,31 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^7.10.0": - version: 7.10.0 - resolution: "eslint@npm:7.10.0" +"eslint@npm:^7.11.0": + version: 7.32.0 + resolution: "eslint@npm:7.32.0" dependencies: - "@babel/code-frame": ^7.0.0 - "@eslint/eslintrc": ^0.1.3 + "@babel/code-frame": 7.12.11 + "@eslint/eslintrc": ^0.4.3 + "@humanwhocodes/config-array": ^0.5.0 ajv: ^6.10.0 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.0.1 doctrine: ^3.0.0 enquirer: ^2.3.5 + escape-string-regexp: ^4.0.0 eslint-scope: ^5.1.1 eslint-utils: ^2.1.0 - eslint-visitor-keys: ^1.3.0 - espree: ^7.3.0 - esquery: ^1.2.0 + eslint-visitor-keys: ^2.0.0 + espree: ^7.3.1 + esquery: ^1.4.0 esutils: ^2.0.2 - file-entry-cache: ^5.0.1 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 functional-red-black-tree: ^1.0.1 - glob-parent: ^5.0.0 - globals: ^12.1.0 + glob-parent: ^5.1.2 + globals: ^13.6.0 ignore: ^4.0.6 import-fresh: ^3.0.0 imurmurhash: ^0.1.4 @@ -12586,7 +13795,7 @@ __metadata: js-yaml: ^3.13.1 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 - lodash: ^4.17.19 + lodash.merge: ^4.6.2 minimatch: ^3.0.4 natural-compare: ^1.4.0 optionator: ^0.9.1 @@ -12595,62 +13804,60 @@ __metadata: semver: ^7.2.1 strip-ansi: ^6.0.0 strip-json-comments: ^3.1.0 - table: ^5.2.3 + table: ^6.0.9 text-table: ^0.2.0 v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: 7258b2dcf520668aa24ba0bf79487a5a0e266d9ae078315c5ceab946e808dc0a535ecc9a2b58fe2d482a2277d278f4af99cf5b5110b01dfeb87ed86fe1f0b433 + checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 languageName: node linkType: hard -"eslint@npm:^7.11.0": - version: 7.32.0 - resolution: "eslint@npm:7.32.0" +"eslint@npm:^8.57.0": + version: 8.57.0 + resolution: "eslint@npm:8.57.0" dependencies: - "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": ^0.4.3 - "@humanwhocodes/config-array": ^0.5.0 - ajv: ^6.10.0 + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.57.0 + "@humanwhocodes/config-array": ^0.11.14 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 - debug: ^4.0.1 + debug: ^4.3.2 doctrine: ^3.0.0 - enquirer: ^2.3.5 escape-string-regexp: ^4.0.0 - eslint-scope: ^5.1.1 - eslint-utils: ^2.1.0 - eslint-visitor-keys: ^2.0.0 - espree: ^7.3.1 - esquery: ^1.4.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 - functional-red-black-tree: ^1.0.1 - glob-parent: ^5.1.2 - globals: ^13.6.0 - ignore: ^4.0.6 - import-fresh: ^3.0.0 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 - js-yaml: ^3.13.1 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 - minimatch: ^3.0.4 + minimatch: ^3.1.2 natural-compare: ^1.4.0 - optionator: ^0.9.1 - progress: ^2.0.0 - regexpp: ^3.1.0 - semver: ^7.2.1 - strip-ansi: ^6.0.0 - strip-json-comments: ^3.1.0 - table: ^6.0.9 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 text-table: ^0.2.0 - v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 + checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 languageName: node linkType: hard @@ -12676,6 +13883,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -12686,21 +13904,21 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.2.0": - version: 1.3.1 - resolution: "esquery@npm:1.3.1" +"esquery@npm:^1.4.0": + version: 1.4.0 + resolution: "esquery@npm:1.4.0" dependencies: estraverse: ^5.1.0 - checksum: 2f13235c775acf79489dd18a1a81e2a1e940b02f80994e051d0a68036cbe87c2bcbedf549c747bc4c4776f5a04f839355a344cebe31d84fb75d3fbc27f12b340 + checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 languageName: node linkType: hard -"esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -12736,6 +13954,13 @@ __metadata: languageName: node linkType: hard +"estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + "estree-util-attach-comments@npm:^2.0.0": version: 2.0.0 resolution: "estree-util-attach-comments@npm:2.0.0" @@ -12877,21 +14102,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^0.7.0": - version: 0.7.0 - resolution: "execa@npm:0.7.0" - dependencies: - cross-spawn: ^5.0.1 - get-stream: ^3.0.0 - is-stream: ^1.1.0 - npm-run-path: ^2.0.0 - p-finally: ^1.0.0 - signal-exit: ^3.0.0 - strip-eof: ^1.0.0 - checksum: dd70206d74b7217bf678ec9f04dddedc82f425df4c1d70e34c9f429d630ec407819e4bd42e3af2618981a4a3a1be000c9b651c0637be486cdab985160c20337c - languageName: node - linkType: hard - "execa@npm:^0.9.0": version: 0.9.0 resolution: "execa@npm:0.9.0" @@ -12999,17 +14209,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^27.4.2": - version: 27.4.2 - resolution: "expect@npm:27.4.2" +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 - ansi-styles: ^5.0.0 - jest-get-type: ^27.4.0 - jest-matcher-utils: ^27.4.2 - jest-message-util: ^27.4.2 - jest-regex-util: ^27.4.0 - checksum: 5eba0f348fd234420d7b4f09968d30d0b19e9e73579ad060e5e635be879671dfb9bed472befe1d5fe8749b6beefc08beba0e034d5aad2aca11e4d5ac43873326 + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c languageName: node linkType: hard @@ -13243,7 +14452,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.4": +"fast-glob@npm:^3.2.4, fast-glob@npm:^3.2.9": version: 3.2.11 resolution: "fast-glob@npm:3.2.11" dependencies: @@ -13435,15 +14644,6 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^5.0.1": - version: 5.0.1 - resolution: "file-entry-cache@npm:5.0.1" - dependencies: - flat-cache: ^2.0.1 - checksum: 9014b17766815d59b8b789633aed005242ef857348c09be558bd85b4a24e16b0ad1e0e5229ccea7a2109f74ef1b3db1a559b58afe12b884f09019308711376fd - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -13615,17 +14815,6 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^2.0.1": - version: 2.0.1 - resolution: "flat-cache@npm:2.0.1" - dependencies: - flatted: ^2.0.0 - rimraf: 2.6.3 - write: 1.0.3 - checksum: 0f5e66467658039e6fcaaccb363b28f43906ba72fab7ff2a4f6fcd5b4899679e13ca46d9fc6cc48b68ac925ae93137106d4aaeb79874c13f21f87a361705f1b1 - languageName: node - linkType: hard - "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -13636,13 +14825,6 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^2.0.0": - version: 2.0.1 - resolution: "flatted@npm:2.0.1" - checksum: 251447389c2544aa44da1f025e98cdff728bc9cc0ccef8d92256568a3f7b868b895122d77dad138c788cd6917ba80236ddb723111fb688f30b298ad56bb2ce01 - languageName: node - linkType: hard - "flatted@npm:^3.1.0": version: 3.2.2 resolution: "flatted@npm:3.2.2" @@ -13657,15 +14839,6 @@ __metadata: languageName: node linkType: hard -"flow-bin@npm:^0.128.0": - version: 0.128.0 - resolution: "flow-bin@npm:0.128.0" - bin: - flow: cli.js - checksum: ef0ed9af0e8756ba31253ff1c299d12d55fd5d2350f5ab69589133be4d99504218b61fded7a08d96379ea6b1e80caab564f88b148f4bf07bda01eb2a5b357907 - languageName: node - linkType: hard - "flush-write-stream@npm:^1.0.0": version: 1.1.1 resolution: "flush-write-stream@npm:1.1.1" @@ -13694,6 +14867,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -13741,6 +14923,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + "form-data@npm:~2.1.1": version: 2.1.4 resolution: "form-data@npm:2.1.4" @@ -13981,6 +15174,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + "function.prototype.name@npm:^1.1.2": version: 1.1.2 resolution: "function.prototype.name@npm:1.1.2" @@ -13992,6 +15192,18 @@ __metadata: languageName: node linkType: hard +"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + "functional-red-black-tree@npm:^1.0.1": version: 1.0.1 resolution: "functional-red-black-tree@npm:1.0.1" @@ -14006,6 +15218,13 @@ __metadata: languageName: node linkType: hard +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -14090,6 +15309,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + languageName: node + linkType: hard + "get-own-enumerable-property-symbols@npm:^3.0.0": version: 3.0.0 resolution: "get-own-enumerable-property-symbols@npm:3.0.0" @@ -14169,6 +15401,17 @@ __metadata: languageName: node linkType: hard +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + languageName: node + linkType: hard + "get-value@npm:^2.0.3, get-value@npm:^2.0.6": version: 2.0.6 resolution: "get-value@npm:2.0.6" @@ -14259,15 +15502,6 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.0.0": - version: 5.1.0 - resolution: "glob-parent@npm:5.1.0" - dependencies: - is-glob: ^4.0.1 - checksum: 6d20a098676e6558b32fdad8f82f6f77290d843ee302420d99b7926314b04358f0913c0d2239a269a8ed34d33c2761cd5a7a869b8db1eb47d9541e928692b1d7 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.0": version: 5.1.1 resolution: "glob-parent@npm:5.1.1" @@ -14286,6 +15520,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -14375,12 +15618,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^12.1.0": - version: 12.3.0 - resolution: "globals@npm:12.3.0" +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: - type-fest: ^0.8.1 - checksum: 1969bbafb14a77fa3db44c8c7663ffb627c11d6cfc000d6b22b8e991dec53061f70f7472d8170a76e57d2f16b4c6ff3bb161188a203c047c1b0ef2ef8b5b1bc9 + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard @@ -14393,6 +15636,16 @@ __metadata: languageName: node linkType: hard +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a + languageName: node + linkType: hard + "globby@npm:11.0.1, globby@npm:^11.0.0": version: 11.0.1 resolution: "globby@npm:11.0.1" @@ -14421,6 +15674,20 @@ __metadata: languageName: node linkType: hard +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + "globby@npm:^6.1.0": version: 6.1.0 resolution: "globby@npm:6.1.0" @@ -14450,6 +15717,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + "got@npm:^9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -14490,10 +15766,17 @@ __metadata: languageName: node linkType: hard -"grapheme-splitter@npm:^1.0.4": - version: 1.0.4 - resolution: "grapheme-splitter@npm:1.0.4" - checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 +"graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 languageName: node linkType: hard @@ -14612,6 +15895,13 @@ __metadata: languageName: node linkType: hard +"has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + "has-flag@npm:^1.0.0": version: 1.0.0 resolution: "has-flag@npm:1.0.0" @@ -14640,6 +15930,22 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + "has-symbols@npm:^1.0.0": version: 1.0.0 resolution: "has-symbols@npm:1.0.0" @@ -14661,6 +15967,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + "has-tostringtag@npm:^1.0.0": version: 1.0.0 resolution: "has-tostringtag@npm:1.0.0" @@ -14670,6 +15983,15 @@ __metadata: languageName: node linkType: hard +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + "has-unicode@npm:^2.0.0, has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -14745,6 +16067,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + "hast-util-has-property@npm:^2.0.0": version: 2.0.0 resolution: "hast-util-has-property@npm:2.0.0" @@ -15307,6 +16638,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + "human-id@npm:^1.0.2": version: 1.0.2 resolution: "human-id@npm:1.0.2" @@ -15483,6 +16824,20 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.0": + version: 5.2.0 + resolution: "ignore@npm:5.2.0" + checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 + languageName: node + linkType: hard + +"ignore@npm:^5.3.1": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 + languageName: node + linkType: hard + "image-size@npm:^0.6.0": version: 0.6.3 resolution: "image-size@npm:0.6.3" @@ -15723,17 +17078,6 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.2": - version: 1.0.2 - resolution: "internal-slot@npm:1.0.2" - dependencies: - es-abstract: ^1.17.0-next.1 - has: ^1.0.3 - side-channel: ^1.0.2 - checksum: 4689d3254997371ae4af3ae7ced3ac393b04bea23d01ea08c7abfdabe938e5bc676544d4dfe1c6b20aa549ee8d681bd23e02a3223659933670aa6f39a5bf6fb7 - languageName: node - linkType: hard - "internal-slot@npm:^1.0.3": version: 1.0.3 resolution: "internal-slot@npm:1.0.3" @@ -15745,6 +17089,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: ^1.3.0 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb + languageName: node + linkType: hard + "invariant@npm:^2.2.0, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -15872,6 +17227,16 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -15886,6 +17251,15 @@ __metadata: languageName: node linkType: hard +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + languageName: node + linkType: hard + "is-bigint@npm:^1.0.1": version: 1.0.1 resolution: "is-bigint@npm:1.0.1" @@ -15941,6 +17315,13 @@ __metadata: languageName: node linkType: hard +"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + "is-callable@npm:^1.1.4": version: 1.1.4 resolution: "is-callable@npm:1.1.4" @@ -16003,6 +17384,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.13.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + languageName: node + linkType: hard + "is-core-module@npm:^2.2.0": version: 2.2.0 resolution: "is-core-module@npm:2.2.0" @@ -16048,6 +17438,15 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1": version: 1.0.1 resolution: "is-date-object@npm:1.0.1" @@ -16055,6 +17454,15 @@ __metadata: languageName: node linkType: hard +"is-date-object@npm:^1.0.5": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + "is-decimal@npm:^1.0.0": version: 1.0.3 resolution: "is-decimal@npm:1.0.3" @@ -16144,6 +17552,15 @@ __metadata: languageName: node linkType: hard +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^1.0.0": version: 1.0.0 resolution: "is-fullwidth-code-point@npm:1.0.0" @@ -16174,7 +17591,7 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.7": +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" dependencies: @@ -16210,6 +17627,15 @@ __metadata: languageName: node linkType: hard +"is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + "is-hexadecimal@npm:^1.0.0": version: 1.0.3 resolution: "is-hexadecimal@npm:1.0.3" @@ -16254,6 +17680,13 @@ __metadata: languageName: node linkType: hard +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc + languageName: node + linkType: hard + "is-module@npm:^1.0.0": version: 1.0.0 resolution: "is-module@npm:1.0.0" @@ -16305,6 +17738,13 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.4 resolution: "is-number-object@npm:1.0.4" @@ -16369,6 +17809,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + "is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" @@ -16511,6 +17958,13 @@ __metadata: languageName: node linkType: hard +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.1": version: 1.0.1 resolution: "is-shared-array-buffer@npm:1.0.1" @@ -16518,6 +17972,15 @@ __metadata: languageName: node linkType: hard +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + languageName: node + linkType: hard + "is-stream@npm:^1.0.1, is-stream@npm:^1.1.0": version: 1.1.0 resolution: "is-stream@npm:1.1.0" @@ -16591,6 +18054,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + "is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.7": version: 1.1.8 resolution: "is-typed-array@npm:1.1.8" @@ -16625,6 +18097,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d + languageName: node + linkType: hard + "is-weakref@npm:^1.0.1": version: 1.0.1 resolution: "is-weakref@npm:1.0.1" @@ -16634,6 +18113,25 @@ __metadata: languageName: node linkType: hard +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.3 + resolution: "is-weakset@npm:2.0.3" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae + languageName: node + linkType: hard + "is-whitespace-character@npm:^1.0.0": version: 1.0.3 resolution: "is-whitespace-character@npm:1.0.3" @@ -16685,6 +18183,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -16732,6 +18237,13 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 + languageName: node + linkType: hard + "istanbul-lib-instrument@npm:^4.0.0, istanbul-lib-instrument@npm:^4.0.3": version: 4.0.3 resolution: "istanbul-lib-instrument@npm:4.0.3" @@ -16744,6 +18256,32 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.2 + resolution: "istanbul-lib-instrument@npm:6.0.2" + dependencies: + "@babel/core": ^7.23.9 + "@babel/parser": ^7.23.9 + "@istanbuljs/schema": ^0.1.3 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: c10aa1e93a022f9767d7f41e6c07d244cc0a5c090fbb5522d70a5f21fcb98c52b7038850276c6fd1a7a17d1868c14a9d4eb8a24efe58a0ebb9a06f3da68131fe + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": version: 3.0.0 resolution: "istanbul-lib-report@npm:3.0.0" @@ -16776,6 +18314,29 @@ __metadata: languageName: node linkType: hard +"istanbul-reports@npm:^3.1.3": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 + languageName: node + linkType: hard + +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" + dependencies: + define-properties: ^1.2.1 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + reflect.getprototypeof: ^1.0.4 + set-function-name: ^2.0.1 + checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + languageName: node + linkType: hard + "jake@npm:^10.6.1": version: 10.8.2 resolution: "jake@npm:10.8.2" @@ -16801,14 +18362,14 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-changed-files@npm:27.4.2" +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 execa: ^5.0.0 - throat: ^6.0.1 - checksum: 4df8dff39882995d4852756686357e0629cf8029ea5c35dcf25f63fba4febe15b564b9222f7d18a7546fcd48d3414345bf3c363a1d13af61d8d66e662a035420 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 languageName: node linkType: hard @@ -16841,30 +18402,31 @@ __metadata: languageName: node linkType: hard -"jest-circus@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-circus@npm:27.4.5" +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" dependencies: - "@jest/environment": ^27.4.4 - "@jest/test-result": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 - dedent: ^0.7.0 - expect: ^27.4.2 + dedent: ^1.0.0 is-generator-fn: ^2.0.0 - jest-each: ^27.4.2 - jest-matcher-utils: ^27.4.2 - jest-message-util: ^27.4.2 - jest-runtime: ^27.4.5 - jest-snapshot: ^27.4.5 - jest-util: ^27.4.2 - pretty-format: ^27.4.2 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + pretty-format: ^29.7.0 + pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - throat: ^6.0.1 - checksum: 0d9ba909fb73ab17d127208a44e0cd1064ed3fcce3208b7c181b684b00e3504f1edc84119cd14d9c4c8df8957904875bf68e3151303bd06e42345a8635112eb0 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 languageName: node linkType: hard @@ -16891,22 +18453,21 @@ __metadata: languageName: node linkType: hard -"jest-cli@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-cli@npm:27.4.5" +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" dependencies: - "@jest/core": ^27.4.5 - "@jest/test-result": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 chalk: ^4.0.0 + create-jest: ^29.7.0 exit: ^0.1.2 - graceful-fs: ^4.2.4 import-local: ^3.0.2 - jest-config: ^27.4.5 - jest-util: ^27.4.2 - jest-validate: ^27.4.2 - prompts: ^2.0.1 - yargs: ^16.2.0 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -16914,7 +18475,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 8c430614ab058fd612eae402620c784e583477520598aa4f68e9115d5f475a50d6897cdad4c832777ec8964446c5a9f02047cf74bed7e0f090220758eac1cc41 + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 languageName: node linkType: hard @@ -16949,38 +18510,41 @@ __metadata: languageName: node linkType: hard -"jest-config@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-config@npm:27.4.5" +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" dependencies: - "@babel/core": ^7.1.0 - "@jest/test-sequencer": ^27.4.5 - "@jest/types": ^27.4.2 - babel-jest: ^27.4.5 + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 - glob: ^7.1.1 - graceful-fs: ^4.2.4 - jest-circus: ^27.4.5 - jest-environment-jsdom: ^27.4.4 - jest-environment-node: ^27.4.4 - jest-get-type: ^27.4.0 - jest-jasmine2: ^27.4.5 - jest-regex-util: ^27.4.0 - jest-resolve: ^27.4.5 - jest-runner: ^27.4.5 - jest-util: ^27.4.2 - jest-validate: ^27.4.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 micromatch: ^4.0.4 - pretty-format: ^27.4.2 + parse-json: ^5.2.0 + pretty-format: ^29.7.0 slash: ^3.0.0 + strip-json-comments: ^3.1.1 peerDependencies: + "@types/node": "*" ts-node: ">=9.0.0" peerDependenciesMeta: + "@types/node": + optional: true ts-node: optional: true - checksum: 8b166404959d368c49573b8d3e9ff5537557413a96aa41e05824f01147db1525168489ae3f1f028525a587bd724f718f9c77f1256351c48cf0e3c766a86292cb + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff languageName: node linkType: hard @@ -16996,15 +18560,27 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^27.0.0, jest-diff@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-diff@npm:27.4.2" +"jest-diff@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-diff@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^28.1.1 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" dependencies: chalk: ^4.0.0 - diff-sequences: ^27.4.0 - jest-get-type: ^27.4.0 - pretty-format: ^27.4.2 - checksum: e5bcdb4f27747795b74a56d56a9545d7fc8f1671a1251d580aea1a7a52df5db044f62ec24f2abc68305f0226d918a443f3b88d9a82f8d0dc4aaa079b621ab091 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 languageName: node linkType: hard @@ -17017,12 +18593,12 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^27.4.0": - version: 27.4.0 - resolution: "jest-docblock@npm:27.4.0" +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" dependencies: detect-newline: ^3.0.0 - checksum: 4b7639ceb7808280562166c87c49746d9e9cc13f8315ea05a0a400d2f7b11f4491b4ad50935e5976db6509f26004fa2b187dc19eea5e09c445eed2648eb1e927 + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 languageName: node linkType: hard @@ -17039,16 +18615,16 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-each@npm:27.4.2" +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 + "@jest/types": ^29.6.3 chalk: ^4.0.0 - jest-get-type: ^27.4.0 - jest-util: ^27.4.2 - pretty-format: ^27.4.2 - checksum: cdc89e68fb3a746b2dcb62a8d05dd6fb15bde47743575bc795ee4123c9e2418f0c99220a9aa96dba94889fb880986158665f33f9c77e6007645ef7d3990ae8e1 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c languageName: node linkType: hard @@ -17067,18 +18643,24 @@ __metadata: languageName: node linkType: hard -"jest-environment-jsdom@npm:^27.4.4": - version: 27.4.4 - resolution: "jest-environment-jsdom@npm:27.4.4" +"jest-environment-jsdom@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" dependencies: - "@jest/environment": ^27.4.4 - "@jest/fake-timers": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^27.4.2 - jest-util: ^27.4.2 - jsdom: ^16.6.0 - checksum: 05bf03a05a9358084411a90002dbcb2b225b94efd7ea08f04863805c05e2d4bdf0c5a2455e14bf0554fb0762d0cdf9f37b511b0da7154b630bf84e51b5e6bb07 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 languageName: node linkType: hard @@ -17096,17 +18678,17 @@ __metadata: languageName: node linkType: hard -"jest-environment-node@npm:^27.4.4": - version: 27.4.4 - resolution: "jest-environment-node@npm:27.4.4" +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" dependencies: - "@jest/environment": ^27.4.4 - "@jest/fake-timers": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^27.4.2 - jest-util: ^27.4.2 - checksum: 12de67100d35dcdab012220d5c9663e3ad6ac0b164b0a89e998a30c41b71c96abd77256f4fbfcd0ec48f8acb1dbb084050a5d17fe0ad4b4a81e311e05b54a89d + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 languageName: node linkType: hard @@ -17131,10 +18713,17 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^27.4.0": - version: 27.4.0 - resolution: "jest-get-type@npm:27.4.0" - checksum: bb9b70e420009fdaed3026d5bccd01569f92c7500f9f544d862796d4f4efa93ced5484864b2f272c7748bfb5bfd3268d48868b169c51ab45fe5b45b9519b6e46 +"jest-get-type@npm:^28.0.2": + version: 28.0.2 + resolution: "jest-get-type@npm:28.0.2" + checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 languageName: node linkType: hard @@ -17186,27 +18775,26 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-haste-map@npm:27.4.5" +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 - "@types/graceful-fs": ^4.1.2 + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 - graceful-fs: ^4.2.4 - jest-regex-util: ^27.4.0 - jest-serializer: ^27.4.0 - jest-util: ^27.4.2 - jest-worker: ^27.4.5 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 micromatch: ^4.0.4 - walker: ^1.0.7 + walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: acd593ec33b028169c7bf753a5c92eabdb05f87ba9f14e33fe24a4adc1e0a1ff4be0c4757a57a82413263ebbb6b567708b4f3019cb4df899d2d07fcec64bd75a + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 languageName: node linkType: hard @@ -17243,32 +18831,6 @@ __metadata: languageName: node linkType: hard -"jest-jasmine2@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-jasmine2@npm:27.4.5" - dependencies: - "@babel/traverse": ^7.1.0 - "@jest/environment": ^27.4.4 - "@jest/source-map": ^27.4.0 - "@jest/test-result": ^27.4.2 - "@jest/types": ^27.4.2 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^27.4.2 - is-generator-fn: ^2.0.0 - jest-each: ^27.4.2 - jest-matcher-utils: ^27.4.2 - jest-message-util: ^27.4.2 - jest-runtime: ^27.4.5 - jest-snapshot: ^27.4.5 - jest-util: ^27.4.2 - pretty-format: ^27.4.2 - throat: ^6.0.1 - checksum: 9759e865f39390f71c83a3cabb3196c2655df2bf3771b71d9c2f2db400cec96ab7eff1b44e8b582280c07db985538bacb408dd6a42aff83984b0a27b2968fa36 - languageName: node - linkType: hard - "jest-junit@npm:^13.0.0": version: 13.0.0 resolution: "jest-junit@npm:13.0.0" @@ -17291,13 +18853,13 @@ __metadata: languageName: node linkType: hard -"jest-leak-detector@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-leak-detector@npm:27.4.2" +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" dependencies: - jest-get-type: ^27.4.0 - pretty-format: ^27.4.2 - checksum: 093ef57aa6f5563ed5e2c0bce31f8d2ac65438c5d917457dd9a392bf11956a976b55ef2b536cf593b1d65283430305cb6d26e97b064a5c140146346103e74184 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 languageName: node linkType: hard @@ -17313,15 +18875,27 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-matcher-utils@npm:27.4.2" +"jest-matcher-utils@npm:^28.0.0": + version: 28.1.3 + resolution: "jest-matcher-utils@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + jest-diff: ^28.1.3 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" dependencies: chalk: ^4.0.0 - jest-diff: ^27.4.2 - jest-get-type: ^27.4.0 - pretty-format: ^27.4.2 - checksum: 7dd9d2f1f7107d5919af170f9d3e2a08890ce05ee63f6fc3a24e6c8fa9672f99ed107377ae7c6d4d0966a77fa35a3da929465b019b6f1be8cf7e0845806bceb3 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd languageName: node linkType: hard @@ -17374,20 +18948,20 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-message-util@npm:27.4.2" +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^27.4.2 + "@jest/types": ^29.6.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^27.4.2 + pretty-format: ^29.7.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: c08ef1c8c1a2001c2f38d6ad3717a6e188b8b25c79b8bd87f2800b9c046f50f33bcd6ab1a9b5a5cc3218b40cf60f37d0583aa0b36ea870c8f100ba0ca7a3c479 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 languageName: node linkType: hard @@ -17410,13 +18984,14 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-mock@npm:27.4.2" +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 + "@jest/types": ^29.6.3 "@types/node": "*" - checksum: 4ad4a870ec771410b708e955ef2526e7becb91a1d19c4699dcf8fe43a9f6d1231e0c47b87d6b80ee9ad3194ad54dc9abf158588a4a542ad9f9ce8c23eda6048e + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 languageName: node linkType: hard @@ -17439,10 +19014,10 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^27.0.0, jest-regex-util@npm:^27.4.0": - version: 27.4.0 - resolution: "jest-regex-util@npm:27.4.0" - checksum: 222e4aacec601fd2cfdfee74adb8d324fef672f77577a7c2220893ec1a62031a2640388fce8d0bd8be2e4537da1ab40aa74dba60ac531a23b2643b15c65014ac +"jest-regex-util@npm:^29.0.0, jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a languageName: node linkType: hard @@ -17457,14 +19032,13 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-resolve-dependencies@npm:27.4.5" +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 - jest-regex-util: ^27.4.0 - jest-snapshot: ^27.4.5 - checksum: 1fc16cb7c8df130420732184cd87a2c8ae6bf6cbb37d61dd69fddf69ab5ab2be50774962ce4b477b915fa1cc3dc69cb1830b6a18bd1b33c3c1a9c40e43cb11ce + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 languageName: node linkType: hard @@ -17500,21 +19074,20 @@ __metadata: languageName: node linkType: hard -"jest-resolve@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-resolve@npm:27.4.5" +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 chalk: ^4.0.0 - graceful-fs: ^4.2.4 - jest-haste-map: ^27.4.5 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^27.4.2 - jest-validate: ^27.4.2 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 resolve: ^1.20.0 - resolve.exports: ^1.1.0 + resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 57d619ed1ab4ba5d1b079f9ca3e93c7d9bcc9faa195b617fda6155cbce6eb48c234a957f41f7feee43740b4a5b50ebec8aea61023f766ac4b2eb6ff946c76025 + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 languageName: node linkType: hard @@ -17546,33 +19119,32 @@ __metadata: languageName: node linkType: hard -"jest-runner@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-runner@npm:27.4.5" +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" dependencies: - "@jest/console": ^27.4.2 - "@jest/environment": ^27.4.4 - "@jest/test-result": ^27.4.2 - "@jest/transform": ^27.4.5 - "@jest/types": ^27.4.2 + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.8.1 - exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-docblock: ^27.4.0 - jest-environment-jsdom: ^27.4.4 - jest-environment-node: ^27.4.4 - jest-haste-map: ^27.4.5 - jest-leak-detector: ^27.4.2 - jest-message-util: ^27.4.2 - jest-resolve: ^27.4.5 - jest-runtime: ^27.4.5 - jest-util: ^27.4.2 - jest-worker: ^27.4.5 - source-map-support: ^0.5.6 - throat: ^6.0.1 - checksum: 456f5e3c55dfd0fdad21703a26aa2ff729bbcea173a4ac6a6a99f65d77c564ace13a0e53c33b074020d3594dbff831b7f6424f27d99485120c691ee129a6b6f4 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb languageName: node linkType: hard @@ -17613,37 +19185,33 @@ __metadata: languageName: node linkType: hard -"jest-runtime@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-runtime@npm:27.4.5" +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" dependencies: - "@jest/console": ^27.4.2 - "@jest/environment": ^27.4.4 - "@jest/globals": ^27.4.4 - "@jest/source-map": ^27.4.0 - "@jest/test-result": ^27.4.2 - "@jest/transform": ^27.4.5 - "@jest/types": ^27.4.2 - "@types/yargs": ^16.0.0 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 - exit: ^0.1.2 glob: ^7.1.3 - graceful-fs: ^4.2.4 - jest-haste-map: ^27.4.5 - jest-message-util: ^27.4.2 - jest-mock: ^27.4.2 - jest-regex-util: ^27.4.0 - jest-resolve: ^27.4.5 - jest-snapshot: ^27.4.5 - jest-util: ^27.4.2 - jest-validate: ^27.4.2 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 strip-bom: ^4.0.0 - yargs: ^16.2.0 - checksum: 3fddd950504e2eee83f13237d8e2321c91237881a04e71cfd5457064eb970a91de3b8560b15ed6dbfc8843aa06151907510842f5f2f8e93b5a172a1d282ae26e + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e languageName: node linkType: hard @@ -17673,16 +19241,6 @@ __metadata: languageName: node linkType: hard -"jest-serializer@npm:^27.4.0": - version: 27.4.0 - resolution: "jest-serializer@npm:27.4.0" - dependencies: - "@types/node": "*" - graceful-fs: ^4.2.4 - checksum: 1ed5f38e88010f258bd9557d7842a89741ff15bfc578328e8ae1985933406350b817cf5e3127773e3dbc755dbe2522195378f8b98284bcc32111a723294ebbea - languageName: node - linkType: hard - "jest-snapshot@npm:^26.6.0, jest-snapshot@npm:^26.6.2": version: 26.6.2 resolution: "jest-snapshot@npm:26.6.2" @@ -17707,35 +19265,31 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-snapshot@npm:27.4.5" +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" dependencies: - "@babel/core": ^7.7.2 + "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 - "@babel/parser": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.0.0 - "@jest/transform": ^27.4.5 - "@jest/types": ^27.4.2 - "@types/babel__traverse": ^7.0.4 - "@types/prettier": ^2.1.5 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^27.4.2 - graceful-fs: ^4.2.4 - jest-diff: ^27.4.2 - jest-get-type: ^27.4.0 - jest-haste-map: ^27.4.5 - jest-matcher-utils: ^27.4.2 - jest-message-util: ^27.4.2 - jest-resolve: ^27.4.5 - jest-util: ^27.4.2 + expect: ^29.7.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 natural-compare: ^1.4.0 - pretty-format: ^27.4.2 - semver: ^7.3.2 - checksum: c5dcb1ccb95feb8773fc64b6d21d28fc8e8d2cf53bfde74247b3d34a83936a9b92492416d447d4e559e7b2ce39e442e4ee4a266d2f54c9ab8ab686eb16d1c8f4 + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad languageName: node linkType: hard @@ -17787,17 +19341,17 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-util@npm:27.4.2" +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: bcf16881aff1421c5f7c2df2ef9492cf8cd92fcd0a2a99bec5ab16f7185ee19aea48eda41d9dfa7b5bf4354bdc21628f5931cd2e7281741e6d2983965efb631e + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca languageName: node linkType: hard @@ -17841,17 +19395,17 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-validate@npm:27.4.2" +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" dependencies: - "@jest/types": ^27.4.2 + "@jest/types": ^29.6.3 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^27.4.0 + jest-get-type: ^29.6.3 leven: ^3.1.0 - pretty-format: ^27.4.2 - checksum: 32d3d5e7945d3450c7d7374882b8a0e6e5481b759cf67f765578424d690594875009a5f9dd2626d7b12e4c816b61eb7d5e19f1b0593cc269f37d527eb4fd1a15 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae languageName: node linkType: hard @@ -17872,20 +19426,20 @@ __metadata: languageName: node linkType: hard -"jest-watch-typeahead@npm:^1.0.0": - version: 1.0.0 - resolution: "jest-watch-typeahead@npm:1.0.0" +"jest-watch-typeahead@npm:^2.2.2": + version: 2.2.2 + resolution: "jest-watch-typeahead@npm:2.2.2" dependencies: - ansi-escapes: ^4.3.1 - chalk: ^4.0.0 - jest-regex-util: ^27.0.0 - jest-watcher: ^27.0.0 - slash: ^4.0.0 + ansi-escapes: ^6.0.0 + chalk: ^5.2.0 + jest-regex-util: ^29.0.0 + jest-watcher: ^29.0.0 + slash: ^5.0.0 string-length: ^5.0.1 strip-ansi: ^7.0.1 peerDependencies: - jest: ^27.0.0 - checksum: 388d5189744e3fad21a8dd9e7fb5bbb9e8c12b4d07b76f8fa9c8df47fa93f25427602b20d9061431abb54290f9a24690adbf5204fd2d8cef7a7688c2f81db18d + jest: ^27.0.0 || ^28.0.0 || ^29.0.0 + checksum: 8685277ce1b96ec775882111ec55ce90a862cc57acb21ce94f8ac44a25f6fb34c7a7ce119e07b2d8ff5353a8d9e4f981cf96fa35532f71ddba6ca8fedc05bd8e languageName: node linkType: hard @@ -17919,18 +19473,19 @@ __metadata: languageName: node linkType: hard -"jest-watcher@npm:^27.0.0, jest-watcher@npm:^27.4.2": - version: 27.4.2 - resolution: "jest-watcher@npm:27.4.2" +"jest-watcher@npm:^29.0.0, jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" dependencies: - "@jest/test-result": ^27.4.2 - "@jest/types": ^27.4.2 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^27.4.2 + emittery: ^0.13.1 + jest-util: ^29.7.0 string-length: ^4.0.1 - checksum: f6078349e5c4638b8778dfad0e846aba5665f3bf1f8e8565c436533a5effd8592123b99f950d534965d841edef391ecd86849f5d4ea7d737f99daa7ecfd643cb + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f languageName: node linkType: hard @@ -17976,14 +19531,15 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^27.4.5": - version: 27.4.5 - resolution: "jest-worker@npm:27.4.5" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: "@types/node": "*" + jest-util: ^29.7.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: eb0b6be412103299c3d8643ad26daf862826ca841bd2a3ff47d2d931804ab7d7f0db2fcdea7dbf47ce8eacb7742b3f2586c2d6ebdaa8d0ac77c65f7b698e7683 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 languageName: node linkType: hard @@ -18000,13 +19556,14 @@ __metadata: languageName: node linkType: hard -"jest@npm:^27.4.5": - version: 27.4.5 - resolution: "jest@npm:27.4.5" +"jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" dependencies: - "@jest/core": ^27.4.5 + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^27.4.5 + jest-cli: ^29.7.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -18014,7 +19571,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 57ee4be68650dd1f89e077cca48813d824779a07626e84178c672727ace1ef3cd489f124a27dc02b88601774413330e6d35080b11919efa6460ee61d378c6610 + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b languageName: node linkType: hard @@ -18177,7 +19734,7 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^16.5.3, jsdom@npm:^16.6.0": +"jsdom@npm:^16.5.3": version: 16.7.0 resolution: "jsdom@npm:16.7.0" dependencies: @@ -18217,6 +19774,45 @@ __metadata: languageName: node linkType: hard +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" + dependencies: + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 + cssstyle: ^2.3.0 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 + escodegen: ^2.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 + is-potential-custom-element-name: ^1.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 + symbol-tree: ^3.2.4 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -18345,6 +19941,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + "jsonfile@npm:^2.1.0": version: 2.4.0 resolution: "jsonfile@npm:2.4.0" @@ -18408,16 +20013,6 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1": - version: 2.4.1 - resolution: "jsx-ast-utils@npm:2.4.1" - dependencies: - array-includes: ^3.1.1 - object.assign: ^4.1.0 - checksum: 833477231266631e0def7ab5fa5da386790130ce5f9ab5db22fb3a8e67ee0adba9082ff27687e5c64c893af00beeb2285a7309cbc40c5edbcafdaf4e9de069a1 - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.1.0": version: 3.2.0 resolution: "jsx-ast-utils@npm:3.2.0" @@ -19204,6 +20799,15 @@ __metadata: languageName: node linkType: hard +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + "makeerror@npm:1.0.x": version: 1.0.11 resolution: "makeerror@npm:1.0.11" @@ -19585,25 +21189,6 @@ __metadata: languageName: node linkType: hard -"meow@npm:^6.0.0": - version: 6.1.1 - resolution: "meow@npm:6.1.1" - dependencies: - "@types/minimist": ^1.2.0 - camelcase-keys: ^6.2.2 - decamelize-keys: ^1.1.0 - hard-rejection: ^2.1.0 - minimist-options: ^4.0.2 - normalize-package-data: ^2.5.0 - read-pkg-up: ^7.0.1 - redent: ^3.0.0 - trim-newlines: ^3.0.0 - type-fest: ^0.13.1 - yargs-parser: ^18.1.3 - checksum: 77b569781145ad030be77130623d9f74d6eef0af5e0a349419d3df39bcf6d88cc25be046a7757062162a88160fb5d8604e540b5177b371d2bbc2aaf73ec01479 - languageName: node - linkType: hard - "meow@npm:^7.1.0": version: 7.1.1 resolution: "meow@npm:7.1.1" @@ -19653,7 +21238,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.3.0": +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -20701,6 +22286,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + "minimatch@npm:^5.0.1": version: 5.1.0 resolution: "minimatch@npm:5.1.0" @@ -20710,7 +22304,16 @@ __metadata: languageName: node linkType: hard -"minimist-options@npm:4.1.0, minimist-options@npm:^4.0.2": +"minimatch@npm:^9.0.4": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" dependencies: @@ -20885,13 +22488,6 @@ __metadata: languageName: node linkType: hard -"mixme@npm:^0.3.1": - version: 0.3.5 - resolution: "mixme@npm:0.3.5" - checksum: 7038117774c4fa386f5a5736b8ecbc5f78b6f60cad0d97d781ddba9f46188f8767515ea55297878075b053288b5516af3982b1ba46ac226417a8309a7c0b18a5 - languageName: node - linkType: hard - "mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" @@ -20958,7 +22554,7 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.1.0": +"mri@npm:^1.1.0, mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 @@ -21501,6 +23097,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 + languageName: node + linkType: hard + "node-stream-zip@npm:^1.9.1": version: 1.11.3 resolution: "node-stream-zip@npm:1.11.3" @@ -21825,6 +23428,13 @@ __metadata: languageName: node linkType: hard +"nwsapi@npm:^2.2.2": + version: 2.2.10 + resolution: "nwsapi@npm:2.2.10" + checksum: 5f1d361b38c47ab49727d5ea8bbfeb5867ae6de0e538eec9a8b77c88005ddde36d8b930e0730b50ee5e5dda949112c0f9ffed1bf15e7e1b3cd9cfa319f5a9b6f + languageName: node + linkType: hard + "oauth-sign@npm:~0.8.1": version: 0.8.2 resolution: "oauth-sign@npm:0.8.2" @@ -21878,6 +23488,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + languageName: node + linkType: hard + "object-inspect@npm:^1.7.0, object-inspect@npm:^1.8.0": version: 1.8.0 resolution: "object-inspect@npm:1.8.0" @@ -21971,6 +23588,18 @@ __metadata: languageName: node linkType: hard +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 + languageName: node + linkType: hard + "object.entries@npm:^1.1.0, object.entries@npm:^1.1.4": version: 1.1.5 resolution: "object.entries@npm:1.1.5" @@ -21993,6 +23622,17 @@ __metadata: languageName: node linkType: hard +"object.entries@npm:^1.1.8": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 + languageName: node + linkType: hard + "object.fromentries@npm:^2.0.2": version: 2.0.2 resolution: "object.fromentries@npm:2.0.2" @@ -22017,6 +23657,18 @@ __metadata: languageName: node linkType: hard +"object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 + languageName: node + linkType: hard + "object.getownpropertydescriptors@npm:^2.0.3": version: 2.0.3 resolution: "object.getownpropertydescriptors@npm:2.0.3" @@ -22037,6 +23689,17 @@ __metadata: languageName: node linkType: hard +"object.hasown@npm:^1.1.4": + version: 1.1.4 + resolution: "object.hasown@npm:1.1.4" + dependencies: + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 + languageName: node + linkType: hard + "object.pick@npm:^1.3.0": version: 1.3.0 resolution: "object.pick@npm:1.3.0" @@ -22081,6 +23744,17 @@ __metadata: languageName: node linkType: hard +"object.values@npm:^1.2.0": + version: 1.2.0 + resolution: "object.values@npm:1.2.0" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa + languageName: node + linkType: hard + "obuf@npm:^1.0.0, obuf@npm:^1.1.2": version: 1.1.2 resolution: "obuf@npm:1.1.2" @@ -22262,6 +23936,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.5 + checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb + languageName: node + linkType: hard + "options@npm:>=0.0.5": version: 0.0.6 resolution: "options@npm:0.0.6" @@ -22420,6 +24108,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -22683,6 +24380,18 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + "parse-node-version@npm:^1.0.0": version: 1.0.1 resolution: "parse-node-version@npm:1.0.1" @@ -22736,6 +24445,15 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + "parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -22934,6 +24652,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2": version: 2.2.2 resolution: "picomatch@npm:2.2.2" @@ -23003,6 +24728,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + "pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" @@ -23127,6 +24859,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + "postcss-attribute-case-insensitive@npm:^4.0.1": version: 4.0.1 resolution: "postcss-attribute-case-insensitive@npm:4.0.1" @@ -24494,21 +26233,21 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^1.19.1": - version: 1.19.1 - resolution: "prettier@npm:1.19.1" +"prettier@npm:^2.7.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" bin: - prettier: ./bin-prettier.js - checksum: bc78219e0f8173a808f4c6c8e0a137dd8ebd4fbe013e63fe1a37a82b48612f17b8ae8e18a992adf802ee2cf7428f14f084e7c2846ca5759cf4013c6e54810e1f + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard -"prettier@npm:^2.3.0": - version: 2.3.0 - resolution: "prettier@npm:2.3.0" +"prettier@npm:^3.3.2": + version: 3.3.2 + resolution: "prettier@npm:3.3.2" bin: - prettier: bin-prettier.js - checksum: e8851a45f60f2994775f96e07964646c299b8a8f9c64da4fbd8efafc20db3458bdcedac79aed34e1d5477540b3aa04f6499adc4979cb7937f8ebd058a767d8ff + prettier: bin/prettier.cjs + checksum: 5557d8caed0b182f68123c2e1e370ef105251d1dd75800fadaece3d061daf96b1389141634febf776050f9d732c7ae8fd444ff0b4a61b20535e7610552f32c69 languageName: node linkType: hard @@ -24585,7 +26324,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.4.2": +"pretty-format@npm:^27.0.2": version: 27.4.2 resolution: "pretty-format@npm:27.4.2" dependencies: @@ -24597,6 +26336,29 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": + version: 28.1.3 + resolution: "pretty-format@npm:28.1.3" + dependencies: + "@jest/schemas": ^28.1.3 + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + "prettycli@npm:^1.3.0": version: 1.4.3 resolution: "prettycli@npm:1.4.3" @@ -24869,6 +26631,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 8d53bc02bed99eca0b65b505090152ee7e9bd67dd74f8ff32ba1c883b87234067c5bf68d2614759fb217d82594d7a92919e6df80f97885e7b12b42af4bd3316a + languageName: node + linkType: hard + "purgecss@npm:^4.0.0": version: 4.0.3 resolution: "purgecss@npm:4.0.3" @@ -25162,6 +26931,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + "react-native-web@npm:0.17.5": version: 0.17.5 resolution: "react-native-web@npm:0.17.5" @@ -25601,6 +27377,21 @@ __metadata: languageName: node linkType: hard +"reflect.getprototypeof@npm:^1.0.4": + version: 1.0.6 + resolution: "reflect.getprototypeof@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.1 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + which-builtin-type: ^1.1.3 + checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba + languageName: node + linkType: hard + "reflect.ownkeys@npm:^0.2.0": version: 0.2.0 resolution: "reflect.ownkeys@npm:0.2.0" @@ -25666,6 +27457,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + "regenerator-transform@npm:^0.15.0": version: 0.15.0 resolution: "regenerator-transform@npm:0.15.0" @@ -25692,16 +27490,6 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.3.0": - version: 1.3.0 - resolution: "regexp.prototype.flags@npm:1.3.0" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.0-next.1 - checksum: b6b985a6d5e78b79f9da6b40a775979a9f972569243799ec8dcaa2c5c14eb1e41b2a14acb1b7216378dddafa8156ed820ab68d4b2ac600fb0a7670dda04b45b4 - languageName: node - linkType: hard - "regexp.prototype.flags@npm:^1.3.1": version: 1.3.1 resolution: "regexp.prototype.flags@npm:1.3.1" @@ -25712,6 +27500,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + languageName: node + linkType: hard + "regexpp@npm:^3.0.0": version: 3.0.0 resolution: "regexpp@npm:3.0.0" @@ -26174,10 +27974,10 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 languageName: node linkType: hard @@ -26242,6 +28042,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f + languageName: node + linkType: hard + "resolve@patch:resolve@1.18.1#~builtin": version: 1.18.1 resolution: "resolve@patch:resolve@npm%3A1.18.1#~builtin::version=1.18.1&hash=07638b" @@ -26303,6 +28116,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=07638b" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c + languageName: node + linkType: hard + "responselike@npm:^1.0.2": version: 1.0.2 resolution: "responselike@npm:1.0.2" @@ -26395,25 +28221,25 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:2.6.3, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.3": - version: 2.6.3 - resolution: "rimraf@npm:2.6.3" +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" dependencies: glob: ^7.1.3 bin: - rimraf: ./bin.js - checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" +"rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.3": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" dependencies: glob: ^7.1.3 bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + rimraf: ./bin.js + checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 languageName: node linkType: hard @@ -26612,6 +28438,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -26633,6 +28471,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-regex: ^1.1.4 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 + languageName: node + linkType: hard + "safe-regex@npm:^1.1.0": version: 1.1.0 resolution: "safe-regex@npm:1.1.0" @@ -26725,6 +28574,15 @@ __metadata: languageName: node linkType: hard +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: ^2.2.0 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b + languageName: node + linkType: hard + "scheduler@npm:0.19.1, scheduler@npm:^0.19.1": version: 0.19.1 resolution: "scheduler@npm:0.19.1" @@ -26894,6 +28752,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + "semver@npm:^7.3.7": version: 7.3.7 resolution: "semver@npm:7.3.7" @@ -26905,6 +28772,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d + languageName: node + linkType: hard + "send@npm:0.17.1": version: 0.17.1 resolution: "send@npm:0.17.1" @@ -27001,6 +28877,32 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f + languageName: node + linkType: hard + "set-value@npm:^2.0.0, set-value@npm:^2.0.1": version: 2.0.1 resolution: "set-value@npm:2.0.1" @@ -27130,16 +29032,6 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.2": - version: 1.0.3 - resolution: "side-channel@npm:1.0.3" - dependencies: - es-abstract: ^1.18.0-next.0 - object-inspect: ^1.8.0 - checksum: b6591080e8407e40b7e4132de30d3056d89cb5801672ad9fba904b0732745ddc68a741b23945c59e763a00a6f43c7abd2945bc9e34633ed5d958e164e624e226 - languageName: node - linkType: hard - "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -27151,6 +29043,18 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": version: 3.0.3 resolution: "signal-exit@npm:3.0.3" @@ -27253,10 +29157,10 @@ __metadata: languageName: node linkType: hard -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d +"slash@npm:^5.0.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 70434b34c50eb21b741d37d455110258c42d2cf18c01e6518aeb7299f3c6e626330c889c0c552b5ca2ef54a8f5a74213ab48895f0640717cacefeef6830a1ba4 languageName: node linkType: hard @@ -27267,7 +29171,7 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^2.0.0, slice-ansi@npm:^2.1.0": +"slice-ansi@npm:^2.0.0": version: 2.1.0 resolution: "slice-ansi@npm:2.1.0" dependencies: @@ -27303,21 +29207,6 @@ __metadata: languageName: node linkType: hard -"smartwrap@npm:^1.2.3": - version: 1.2.5 - resolution: "smartwrap@npm:1.2.5" - dependencies: - breakword: ^1.0.5 - grapheme-splitter: ^1.0.4 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - yargs: ^15.1.0 - bin: - smartwrap: src/terminal-adapter.js - checksum: 123f33d7e5095b7953dce8d9afe1141e2a1dbd592dbd722cb713838f907c1e6c3bd3f286707f06a99ba3817abee265bab1ba7dc31e50d557a997fe7b44794f6a - languageName: node - linkType: hard - "snapdragon-node@npm:^2.0.1": version: 2.1.1 resolution: "snapdragon-node@npm:2.1.1" @@ -27452,23 +29341,23 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16": - version: 0.5.19 - resolution: "source-map-support@npm:0.5.19" +"source-map-support@npm:0.5.13, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: c72802fdba9cb62b92baef18cc14cc4047608b77f0353e6c36dd993444149a466a2845332c5540d4a6630957254f0f68f4ef5a0120c33d2e83974c51a05afbac + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 languageName: node linkType: hard -"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" +"source-map-support@npm:^0.5.16": + version: 0.5.19 + resolution: "source-map-support@npm:0.5.19" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + checksum: c72802fdba9cb62b92baef18cc14cc4047608b77f0353e6c36dd993444149a466a2845332c5540d4a6630957254f0f68f4ef5a0120c33d2e83974c51a05afbac languageName: node linkType: hard @@ -27859,15 +29748,6 @@ __metadata: languageName: node linkType: hard -"stream-transform@npm:^2.0.1": - version: 2.0.2 - resolution: "stream-transform@npm:2.0.2" - dependencies: - mixme: ^0.3.1 - checksum: d6d72836568b9910ec73913bf25f8f6de17c2b6ecf290df985bcf6f77fe0b9d1702dfa8d4f56f6fb11328331f91c8e1c0014a9c5b57d1a39f50985611d327b69 - languageName: node - linkType: hard - "strict-uri-encode@npm:^1.0.0": version: 1.1.0 resolution: "strict-uri-encode@npm:1.1.0" @@ -27970,17 +29850,23 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.2": - version: 4.0.2 - resolution: "string.prototype.matchall@npm:4.0.2" +"string.prototype.matchall@npm:^4.0.11": + version: 4.0.11 + resolution: "string.prototype.matchall@npm:4.0.11" dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.0 - has-symbols: ^1.0.1 - internal-slot: ^1.0.2 - regexp.prototype.flags: ^1.3.0 - side-channel: ^1.0.2 - checksum: c08c0db9aadc47b82c43444c3d1a733ac2b12f00348177d1a17e573b8fbaeceab40bc1ae5ed0cbca03691de4b8471039b17b60b86eea69872a3eae469c9e6b5a + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + regexp.prototype.flags: ^1.5.2 + set-function-name: ^2.0.2 + side-channel: ^1.0.6 + checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae languageName: node linkType: hard @@ -28021,6 +29907,18 @@ __metadata: languageName: node linkType: hard +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 + languageName: node + linkType: hard + "string.prototype.trimend@npm:^1.0.1": version: 1.0.1 resolution: "string.prototype.trimend@npm:1.0.1" @@ -28041,6 +29939,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + languageName: node + linkType: hard + "string.prototype.trimstart@npm:^1.0.1": version: 1.0.1 resolution: "string.prototype.trimstart@npm:1.0.1" @@ -28061,6 +29970,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 + languageName: node + linkType: hard + "string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1": version: 1.2.0 resolution: "string_decoder@npm:1.2.0" @@ -28509,15 +30429,13 @@ __metadata: languageName: node linkType: hard -"table@npm:^5.2.3": - version: 5.4.5 - resolution: "table@npm:5.4.5" +"synckit@npm:^0.8.6": + version: 0.8.8 + resolution: "synckit@npm:0.8.8" dependencies: - ajv: ^6.10.2 - lodash: ^4.17.14 - slice-ansi: ^2.1.0 - string-width: ^3.0.0 - checksum: 625e1324072091e8c0485be077035bfda6ef9d9b9c63715c74e53e542fe1241f8065ca2d4caf761ca5b485f5c409f1bad0e9af8478f7334d293ad07392f853be + "@pkgr/core": ^0.1.0 + tslib: ^2.6.2 + checksum: 9ed5d33abb785f5f24e2531efd53b2782ca77abf7912f734d170134552b99001915531be5a50297aa45c5701b5c9041e8762e6cd7a38e41e2461c1e7fccdedf8 languageName: node linkType: hard @@ -28635,15 +30553,6 @@ __metadata: languageName: node linkType: hard -"term-size@npm:^1.2.0": - version: 1.2.0 - resolution: "term-size@npm:1.2.0" - dependencies: - execa: ^0.7.0 - checksum: 833aeb21c74d735c6ab63859fec6a7308d8724089b23b6f58e1a21c015058383529222a63074cbf0814a1812621bf11f01e60d5c5afbbfedcc31d115bf54631a - languageName: node - linkType: hard - "term-size@npm:^2.1.0": version: 2.1.0 resolution: "term-size@npm:2.1.0" @@ -28813,13 +30722,6 @@ __metadata: languageName: node linkType: hard -"throat@npm:^6.0.1": - version: 6.0.1 - resolution: "throat@npm:6.0.1" - checksum: 782d4171ee4e3cf947483ed2ff1af3e17cc4354c693b9d339284f61f99fbc401d171e0b0d2db3295bb7d447630333e9319c174ebd7ef315c6fb791db9675369c - languageName: node - linkType: hard - "through2@npm:^2.0.0, through2@npm:^2.0.1": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -28904,6 +30806,13 @@ __metadata: languageName: node linkType: hard +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + "tmpl@npm:1.0.x": version: 1.0.4 resolution: "tmpl@npm:1.0.4" @@ -29018,6 +30927,18 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^4.1.2": + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" + dependencies: + psl: ^1.1.33 + punycode: ^2.1.1 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c + languageName: node + linkType: hard + "tough-cookie@npm:~2.3.0": version: 2.3.4 resolution: "tough-cookie@npm:2.3.4" @@ -29054,6 +30975,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: ^2.1.1 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -29110,6 +31040,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.3.0": + version: 1.3.0 + resolution: "ts-api-utils@npm:1.3.0" + peerDependencies: + typescript: ">=4.2.0" + checksum: c746ddabfdffbf16cb0b0db32bb287236a19e583057f8649ee7c49995bb776e1d3ef384685181c11a1a480369e022ca97512cb08c517b2d2bd82c83754c97012 + languageName: node + linkType: hard + "ts-pnp@npm:1.2.0, ts-pnp@npm:^1.1.6": version: 1.2.0 resolution: "ts-pnp@npm:1.2.0" @@ -29153,6 +31092,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.6.2": + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 + languageName: node + linkType: hard + "tslint@npm:5.14.0": version: 5.14.0 resolution: "tslint@npm:5.14.0" @@ -29214,22 +31160,6 @@ __metadata: languageName: node linkType: hard -"tty-table@npm:^2.8.10": - version: 2.8.13 - resolution: "tty-table@npm:2.8.13" - dependencies: - chalk: ^3.0.0 - csv: ^5.3.1 - smartwrap: ^1.2.3 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - yargs: ^15.1.0 - bin: - tty-table: adapters/terminal-adapter.js - checksum: 7dd03d7bbc8d945533fed1df73b393681ad4b9e50626a3c523fbe86f90d83d08163cb58d76a326b3f5cb7bdc8d751c31c61441902565dc800c25313e67656e00 - languageName: node - linkType: hard - "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -29337,6 +31267,58 @@ __metadata: languageName: node linkType: hard +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + languageName: node + linkType: hard + "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -29353,23 +31335,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.5.5": - version: 4.5.5 - resolution: "typescript@npm:4.5.5" +"typescript@npm:^5.4.5": + version: 5.4.5 + resolution: "typescript@npm:5.4.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 506f4c919dc8aeaafa92068c997f1d213b9df4d9756d0fae1a1e7ab66b585ab3498050e236113a1c9e57ee08c21ec6814ca7a7f61378c058d79af50a4b1f5a5e + checksum: 53c879c6fa1e3bcb194b274d4501ba1985894b2c2692fa079db03c5a5a7140587a1e04e1ba03184605d35f439b40192d9e138eb3279ca8eee313c081c8bcd9b0 languageName: node linkType: hard -"typescript@patch:typescript@^4.5.5#~builtin": - version: 4.5.5 - resolution: "typescript@patch:typescript@npm%3A4.5.5#~builtin::version=4.5.5&hash=a1c5e5" +"typescript@patch:typescript@^5.4.5#~builtin": + version: 5.4.5 + resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 858c61fa63f7274ca4aaaffeced854d550bf416cff6e558c4884041b3311fb662f476f167cf5c9f8680c607239797e26a2ee0bcc6467fbc05bfcb218e1c6c671 + checksum: 2373c693f3b328f3b2387c3efafe6d257b057a142f9a79291854b14ff4d5367d3d730810aee981726b677ae0fd8329b23309da3b6aaab8263dbdccf1da07a3ba languageName: node linkType: hard @@ -29418,6 +31400,18 @@ __metadata: languageName: node linkType: hard +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + "unbzip2-stream@npm:1.4.3": version: 1.4.3 resolution: "unbzip2-stream@npm:1.4.3" @@ -29765,6 +31759,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + "universalify@npm:^1.0.0": version: 1.0.0 resolution: "universalify@npm:1.0.0" @@ -29810,6 +31811,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.16": + version: 1.0.16 + resolution: "update-browserslist-db@npm:1.0.16" + dependencies: + escalade: ^3.1.2 + picocolors: ^1.0.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 51b1f7189c9ea5925c80154b0a6fd3ec36106d07858d8f69826427d8edb4735d1801512c69eade38ba0814d7407d11f400d74440bbf3da0309f3d788017f35b2 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.2.2 resolution: "uri-js@npm:4.2.2" @@ -29879,6 +31894,16 @@ __metadata: languageName: node linkType: hard +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + "url@npm:^0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" @@ -30059,14 +32084,14 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^8.1.0": - version: 8.1.0 - resolution: "v8-to-istanbul@npm:8.1.0" +"v8-to-istanbul@npm:^9.0.1": + version: 9.2.0 + resolution: "v8-to-istanbul@npm:9.2.0" dependencies: + "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: c7dabf9567e0c210b24d0720e553803cbe1ff81edb1ec7f2080eb4be01ed081a40286cc9f4aaa86d1bf8d57840cefae8fdf326b7cb8faa316ba50c7b948030d4 + convert-source-map: ^2.0.0 + checksum: 31ef98c6a31b1dab6be024cf914f235408cd4c0dc56a5c744a5eea1a9e019ba279e1b6f90d695b78c3186feed391ed492380ccf095009e2eb91f3d058f0b4491 languageName: node linkType: hard @@ -30265,6 +32290,15 @@ __metadata: languageName: node linkType: hard +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + languageName: node + linkType: hard + "walker@npm:^1.0.7, walker@npm:~1.0.5": version: 1.0.7 resolution: "walker@npm:1.0.7" @@ -30274,6 +32308,15 @@ __metadata: languageName: node linkType: hard +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + "watchpack-chokidar2@npm:^2.0.1": version: 2.0.1 resolution: "watchpack-chokidar2@npm:2.0.1" @@ -30353,6 +32396,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + "webpack-bundle-analyzer@npm:3.3.2": version: 3.3.2 resolution: "webpack-bundle-analyzer@npm:3.3.2" @@ -30608,6 +32658,23 @@ __metadata: languageName: node linkType: hard +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af + languageName: node + linkType: hard + "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -30664,6 +32731,38 @@ __metadata: languageName: node linkType: hard +"which-builtin-type@npm:^1.1.3": + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" + dependencies: + function.prototype.name: ^1.1.5 + has-tostringtag: ^1.0.0 + is-async-function: ^2.0.0 + is-date-object: ^1.0.5 + is-finalizationregistry: ^1.0.2 + is-generator-function: ^1.0.10 + is-regex: ^1.1.4 + is-weakref: ^1.0.2 + isarray: ^2.0.5 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: ^2.0.3 + is-set: ^2.0.3 + is-weakmap: ^2.0.2 + is-weakset: ^2.0.3 + checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 + languageName: node + linkType: hard + "which-module@npm:^2.0.0": version: 2.0.0 resolution: "which-module@npm:2.0.0" @@ -30681,6 +32780,19 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.2": version: 1.1.7 resolution: "which-typed-array@npm:1.1.7" @@ -30735,15 +32847,6 @@ __metadata: languageName: node linkType: hard -"widest-line@npm:^2.0.0": - version: 2.0.1 - resolution: "widest-line@npm:2.0.1" - dependencies: - string-width: ^2.1.1 - checksum: 6245b1f2cff418107f937691d1cafd0e416b9e350aa79e3853dc0759ad20849451d7126c2f06d0a13286d37b44b8e79e4220df09630bce1e4722d9808bc7bfd2 - languageName: node - linkType: hard - "word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" @@ -30751,6 +32854,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb + languageName: node + linkType: hard + "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -31036,12 +33146,13 @@ __metadata: languageName: node linkType: hard -"write@npm:1.0.3": - version: 1.0.3 - resolution: "write@npm:1.0.3" +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: - mkdirp: ^0.5.1 - checksum: 6496197ceb2d6faeeb8b5fe2659ca804e801e4989dff9fb8a66fe76179ce4ccc378c982ef906733caea1220c8dbe05a666d82127959ac4456e70111af8b8df73 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -31133,6 +33244,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.11.0": + version: 8.17.0 + resolution: "ws@npm:8.17.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 147ef9eab0251364e1d2c55338ad0efb15e6913923ccbfdf20f7a8a6cb8f88432bcd7f4d8f66977135bfad35575644f9983201c1a361019594a4e53977bf6d4e + languageName: node + linkType: hard + "x-is-string@npm:^0.1.0": version: 0.1.0 resolution: "x-is-string@npm:0.1.0" @@ -31157,6 +33283,13 @@ __metadata: languageName: node linkType: hard +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + "xml@npm:^1.0.1": version: 1.0.1 resolution: "xml@npm:1.0.1" @@ -31305,10 +33438,10 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard @@ -31387,18 +33520,18 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" dependencies: - cliui: ^7.0.2 + cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 - string-width: ^4.2.0 + string-width: ^4.2.3 y18n: ^5.0.5 - yargs-parser: ^20.2.2 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard @@ -31412,6 +33545,20 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zod@npm:^3.21.4": + version: 3.23.8 + resolution: "zod@npm:3.23.8" + checksum: 15949ff82118f59c893dacd9d3c766d02b6fa2e71cf474d5aa888570c469dbf5446ac5ad562bb035bf7ac9650da94f290655c194f4a6de3e766f43febd432c5c + languageName: node + linkType: hard + "zwitch@npm:^2.0.0": version: 2.0.2 resolution: "zwitch@npm:2.0.2"