From e0e842504ad65adfaa840d4d3f10a6d078b6b3b6 Mon Sep 17 00:00:00 2001 From: David Crespo Date: Sun, 10 Apr 2022 21:25:12 -0500 Subject: [PATCH] replace custom invariant() with tiny-invariant --- app/components/PageHeader.tsx | 2 +- app/components/Tabs.tsx | 8 ++------ app/forms/disk-attach.tsx | 2 +- app/forms/subnet-edit.tsx | 2 +- app/hooks/use-params.ts | 2 +- app/hooks/use-quick-actions.tsx | 2 +- libs/form/Form.tsx | 5 ++--- libs/ui/lib/badge/Badge.tsx | 2 +- .../lib/properties-table/PropertiesTable.tsx | 3 ++- libs/ui/lib/tabs/Tabs.tsx | 9 ++------- libs/util/index.ts | 1 - libs/util/invariant.ts | 20 ------------------- package.json | 1 + yarn.lock | 5 +++++ 14 files changed, 20 insertions(+), 44 deletions(-) delete mode 100644 libs/util/invariant.ts diff --git a/app/components/PageHeader.tsx b/app/components/PageHeader.tsx index af6c64e0a3..9077a21bf3 100644 --- a/app/components/PageHeader.tsx +++ b/app/components/PageHeader.tsx @@ -1,6 +1,6 @@ import React from 'react' import { PageHeader as Header, PageTitle } from '@oxide/ui' -import { invariant } from '@oxide/util' +import invariant from 'tiny-invariant' import { useMatches } from 'app/hooks/use-matches' export function PageHeader() { diff --git a/app/components/Tabs.tsx b/app/components/Tabs.tsx index 7d5cdb16a2..106e5a1507 100644 --- a/app/components/Tabs.tsx +++ b/app/components/Tabs.tsx @@ -2,12 +2,8 @@ import React from 'react' import { useSearchParams } from 'react-router-dom' import type { TabsProps } from '@oxide/ui' import { Tabs as UITabs, Tab as UITab } from '@oxide/ui' -import { - flattenChildren, - invariant, - kebabCase, - pluckAllOfType, -} from '@oxide/util' +import { flattenChildren, kebabCase, pluckAllOfType } from '@oxide/util' +import invariant from 'tiny-invariant' /** * Wrapper for UI lib Tabs that syncs current tab with arg in URL query string. diff --git a/app/forms/disk-attach.tsx b/app/forms/disk-attach.tsx index 6d2751b8c0..7825c178f7 100644 --- a/app/forms/disk-attach.tsx +++ b/app/forms/disk-attach.tsx @@ -2,7 +2,7 @@ import { Form, NameField } from '@oxide/form' import React from 'react' import type { Disk } from '@oxide/api' import { useApiMutation, useApiQueryClient } from '@oxide/api' -import { invariant } from '@oxide/util' +import invariant from 'tiny-invariant' import { useParams } from 'app/hooks' import type { PrebuiltFormProps } from 'app/forms' diff --git a/app/forms/subnet-edit.tsx b/app/forms/subnet-edit.tsx index 795a1e6395..516d44a1df 100644 --- a/app/forms/subnet-edit.tsx +++ b/app/forms/subnet-edit.tsx @@ -1,7 +1,7 @@ import React from 'react' import type { VpcSubnet } from '@oxide/api' import { useApiMutation, useApiQueryClient } from '@oxide/api' -import { invariant } from '@oxide/util' +import invariant from 'tiny-invariant' import { CreateSubnetForm } from './subnet-create' import { useParams } from 'app/hooks' diff --git a/app/hooks/use-params.ts b/app/hooks/use-params.ts index e272978c35..e1d9c0d6dd 100644 --- a/app/hooks/use-params.ts +++ b/app/hooks/use-params.ts @@ -1,6 +1,6 @@ import type { Params } from 'react-router-dom' import { useParams as _useParams } from 'react-router-dom' -import { invariant } from '@oxide/util' +import invariant from 'tiny-invariant' /** * Wrapper for React Router's `useParams` that throws (in dev) if any of the diff --git a/app/hooks/use-quick-actions.tsx b/app/hooks/use-quick-actions.tsx index 65ed441b0a..2309428556 100644 --- a/app/hooks/use-quick-actions.tsx +++ b/app/hooks/use-quick-actions.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react' import { useCallback, useState } from 'react' import { useKey } from './use-key' -import { invariant } from '@oxide/util' +import invariant from 'tiny-invariant' import { ActionMenu } from '@oxide/ui' import type { QuickActionItem } from '@oxide/ui' import create from 'zustand' diff --git a/libs/form/Form.tsx b/libs/form/Form.tsx index f9ec09527b..1241e6d72b 100644 --- a/libs/form/Form.tsx +++ b/libs/form/Form.tsx @@ -6,7 +6,6 @@ import { addProps, classed, flattenChildren, - invariant, isOneOf, pluckFirstOfType, tunnel, @@ -14,9 +13,9 @@ import { } from '@oxide/util' import type { FormikConfig } from 'formik' import { Formik } from 'formik' -import { cloneElement } from 'react' import type { ReactNode } from 'react' -import React from 'react' +import React, { cloneElement } from 'react' +import invariant from 'tiny-invariant' import './form.css' import cn from 'classnames' import type { ErrorResponse } from '@oxide/api' diff --git a/libs/ui/lib/badge/Badge.tsx b/libs/ui/lib/badge/Badge.tsx index 349164d525..b49e71a7b5 100644 --- a/libs/ui/lib/badge/Badge.tsx +++ b/libs/ui/lib/badge/Badge.tsx @@ -1,6 +1,6 @@ import React from 'react' import cn from 'classnames' -import { invariant } from '@oxide/util' +import invariant from 'tiny-invariant' export type BadgeColor = 'default' | 'destructive' | 'notice' | 'neutral' export type BadgeVariant = 'default' | 'secondary' | 'ghost' diff --git a/libs/ui/lib/properties-table/PropertiesTable.tsx b/libs/ui/lib/properties-table/PropertiesTable.tsx index 5647b26aba..e30fe249fc 100644 --- a/libs/ui/lib/properties-table/PropertiesTable.tsx +++ b/libs/ui/lib/properties-table/PropertiesTable.tsx @@ -1,6 +1,7 @@ import React from 'react' import type { ReactNode } from 'react' -import { invariant, isOneOf } from '@oxide/util' +import invariant from 'tiny-invariant' +import { isOneOf } from '@oxide/util' import { Badge } from '../badge/Badge' import cn from 'classnames' import './properties-table.css' diff --git a/libs/ui/lib/tabs/Tabs.tsx b/libs/ui/lib/tabs/Tabs.tsx index 1642e996e9..0c5dc1575c 100644 --- a/libs/ui/lib/tabs/Tabs.tsx +++ b/libs/ui/lib/tabs/Tabs.tsx @@ -14,15 +14,10 @@ import { TabPanel as RTabPanel, } from '@reach/tabs' import cn from 'classnames' +import invariant from 'tiny-invariant' import './Tabs.css' -import { - addKey, - addProps, - flattenChildren, - invariant, - pluckAllOfType, -} from '@oxide/util' +import { addKey, addProps, flattenChildren, pluckAllOfType } from '@oxide/util' export type TabsProps = Assign & { id: string diff --git a/libs/util/index.ts b/libs/util/index.ts index ff50f58193..5f6c4d33fe 100644 --- a/libs/util/index.ts +++ b/libs/util/index.ts @@ -1,6 +1,5 @@ export * from './classed' export * from './str' -export * from './invariant' export * from './object' export * from './children' export * from './unreachable' diff --git a/libs/util/invariant.ts b/libs/util/invariant.ts deleted file mode 100644 index 86265af4e4..0000000000 --- a/libs/util/invariant.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Throw with message if condition is falsy. Entire call stripped out by - * Rollup in prod. - */ -export function invariant( - condition: unknown, - message: string -): asserts condition { - if (process.env.NODE_ENV !== 'production') { - if (!condition) { - throw new Error(message) - } - } -} - -// Miraculously, Rollup not only minifies out the inside of the function when -// `NODE_ENV` is 'production', it actually removes the entire function call from -// the calling code, which means long error messages don't end up in the -// production bundle. This was manually tested in the production build to make -// sure, but here's an example in Rollup REPL: https://bit.ly/3z5cbQG diff --git a/package.json b/package.json index 8139a21355..1c7e4ad2f4 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "react-table": "^7.7.0", "react-transition-group": "^4.4.1", "recharts": "^2.1.6", + "tiny-invariant": "^1.2.0", "ts-dedent": "^2.2.0", "tslib": "^2.0.0", "tunnel-rat": "^0.0.3", diff --git a/yarn.lock b/yarn.lock index 92e707709a..296ac75d89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13914,6 +13914,11 @@ tiny-emitter@^2.0.0: resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== +tiny-invariant@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== + tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz"