From 27332f571ec660f6b9aed8ff54739f5581bc64a7 Mon Sep 17 00:00:00 2001 From: Angelo Ashmore <angeloashmore@users.noreply.github.com> Date: Mon, 22 May 2023 13:57:43 -1000 Subject: [PATCH] fix: properly resolve types when using TypeScript's latest module resolution strategy (#182) * fix: properly resolve types when using TypeScript's latest module resolution strategy * fix: remove side-effectful process polyfill * fix: use correct `react-server` types declaration file * chore: remove `.d.ts` files from Size Limit output * chore(deps): update `@prismicio/richtext`, `@prismicio/client` --- .size-limit.cjs | 11 ++++++++-- package-lock.json | 32 ++++++++++++++-------------- package.json | 24 +++++++++++++++------ src/PrismicImage.tsx | 5 ++++- src/PrismicText.tsx | 5 ++++- src/PrismicToolbar.tsx | 2 +- src/SliceZone.tsx | 5 ++++- src/index.ts | 2 -- src/lib/processPolyfill.ts | 4 ---- src/react-server/PrismicLink.tsx | 5 ++++- src/react-server/PrismicRichText.tsx | 5 ++++- 11 files changed, 64 insertions(+), 36 deletions(-) delete mode 100644 src/lib/processPolyfill.ts diff --git a/.size-limit.cjs b/.size-limit.cjs index 6c44674..d6567c8 100644 --- a/.size-limit.cjs +++ b/.size-limit.cjs @@ -16,8 +16,15 @@ module.exports = [ ] .sort() .filter((path) => { - return path && path !== "./package.json"; + return path && path !== "./package.json" && !path.endsWith(".d.ts"); }) .map((path) => { - return { path }; + return { + path, + modifyEsbuildConfig(config) { + config.platform = "node"; + + return config; + }, + }; }); diff --git a/package-lock.json b/package-lock.json index 47110d4..d7d2c88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "2.6.1", "license": "Apache-2.0", "dependencies": { - "@prismicio/richtext": "^2.1.4" + "@prismicio/richtext": "^2.1.5" }, "devDependencies": { - "@prismicio/client": "^7.0.0-alpha.3", + "@prismicio/client": "^7.0.1", "@prismicio/mock": "^0.2.0", "@size-limit/preset-small-lib": "^8.2.4", "@testing-library/react": "^14.0.0", @@ -1156,12 +1156,12 @@ "dev": true }, "node_modules/@prismicio/client": { - "version": "7.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@prismicio/client/-/client-7.0.0-alpha.3.tgz", - "integrity": "sha512-/eEBKUY0D5p03zHAUE+GR/9sJi7RY9CPp9RGarXOVDTW0+oCdaV4JUZe3Y43Ub38ciJ7wIbkN+2vbYYhysm9vw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prismicio/client/-/client-7.0.1.tgz", + "integrity": "sha512-f4SDcDwVB2T73QKJJtzXd8LsfvDgIqOQNhC78bwsKLb1BjfPZNucsyIcRI9jGZdGxcU7lA+HStkYHw6z98ofKQ==", "dev": true, "dependencies": { - "@prismicio/richtext": "^2.1.4", + "@prismicio/richtext": "^2.1.5", "imgix-url-builder": "^0.0.3" }, "engines": { @@ -1182,9 +1182,9 @@ } }, "node_modules/@prismicio/richtext": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@prismicio/richtext/-/richtext-2.1.4.tgz", - "integrity": "sha512-hyC8XItj+2yMmLGNjg9xGA/lRMO5UgbPF132VFrpZHzHhtIKvHN3iYxCZxnrEoPaTcT6JjA8vWyYLjmmB49bvw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@prismicio/richtext/-/richtext-2.1.5.tgz", + "integrity": "sha512-Sf6iCsciPmfK3uQeFmeY9RTRSuhrCVzyU39OkiJ1VJn8O0531pKapGoWS+5WGxouJtE5+jGqV8L+L2mKP7NkXQ==", "dependencies": { "@prismicio/types": "^0.2.7" }, @@ -10336,12 +10336,12 @@ "dev": true }, "@prismicio/client": { - "version": "7.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@prismicio/client/-/client-7.0.0-alpha.3.tgz", - "integrity": "sha512-/eEBKUY0D5p03zHAUE+GR/9sJi7RY9CPp9RGarXOVDTW0+oCdaV4JUZe3Y43Ub38ciJ7wIbkN+2vbYYhysm9vw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prismicio/client/-/client-7.0.1.tgz", + "integrity": "sha512-f4SDcDwVB2T73QKJJtzXd8LsfvDgIqOQNhC78bwsKLb1BjfPZNucsyIcRI9jGZdGxcU7lA+HStkYHw6z98ofKQ==", "dev": true, "requires": { - "@prismicio/richtext": "^2.1.4", + "@prismicio/richtext": "^2.1.5", "imgix-url-builder": "^0.0.3" } }, @@ -10356,9 +10356,9 @@ } }, "@prismicio/richtext": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@prismicio/richtext/-/richtext-2.1.4.tgz", - "integrity": "sha512-hyC8XItj+2yMmLGNjg9xGA/lRMO5UgbPF132VFrpZHzHhtIKvHN3iYxCZxnrEoPaTcT6JjA8vWyYLjmmB49bvw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@prismicio/richtext/-/richtext-2.1.5.tgz", + "integrity": "sha512-Sf6iCsciPmfK3uQeFmeY9RTRSuhrCVzyU39OkiJ1VJn8O0531pKapGoWS+5WGxouJtE5+jGqV8L+L2mKP7NkXQ==", "requires": { "@prismicio/types": "^0.2.7" } diff --git a/package.json b/package.json index 7d210c6..5999b55 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,24 @@ "exports": { ".": { "react-server": { - "import": "./dist/react-server.js", - "require": "./dist/react-server.cjs" + "require": { + "types": "./dist/react-server/index.d.ts", + "default": "./dist/react-server.cjs" + }, + "import": { + "types": "./dist/react-server/index.d.ts", + "default": "./dist/react-server.js" + } }, "default": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } } }, "./package.json": "./package.json" @@ -54,10 +66,10 @@ "test": "npm run lint && npm run types && npm run unit && npm run build && npm run size" }, "dependencies": { - "@prismicio/richtext": "^2.1.4" + "@prismicio/richtext": "^2.1.5" }, "devDependencies": { - "@prismicio/client": "^7.0.0-alpha.3", + "@prismicio/client": "^7.0.1", "@prismicio/mock": "^0.2.0", "@size-limit/preset-small-lib": "^8.2.4", "@testing-library/react": "^14.0.0", diff --git a/src/PrismicImage.tsx b/src/PrismicImage.tsx index 66b9903..4096cff 100644 --- a/src/PrismicImage.tsx +++ b/src/PrismicImage.tsx @@ -116,7 +116,10 @@ export const PrismicImage = React.forwardRef(function PrismicImage( ...restProps } = props; - if (process.env.NODE_ENV === "development") { + if ( + typeof process !== "undefined" && + process.env.NODE_ENV === "development" + ) { if (typeof alt === "string" && props.alt !== "") { console.warn( `[PrismicImage] The "alt" prop can only be used to declare an image as decorative by passing an empty string (alt="") but was provided a non-empty string. You can resolve this warning by removing the "alt" prop or changing it to alt="". For more details, see ${devMsg( diff --git a/src/PrismicText.tsx b/src/PrismicText.tsx index 1461a8e..dc770c0 100644 --- a/src/PrismicText.tsx +++ b/src/PrismicText.tsx @@ -44,7 +44,10 @@ export type PrismicTextProps = { * @see Learn about Rich Text fields {@link https://prismic.io/docs/core-concepts/rich-text-title} */ export const PrismicText = (props: PrismicTextProps): JSX.Element | null => { - if (process.env.NODE_ENV === "development") { + if ( + typeof process !== "undefined" && + process.env.NODE_ENV === "development" + ) { if ("className" in props) { console.warn( `[PrismicText] className cannot be passed to <PrismicText> since it renders plain text without a wrapping component. For more details, see ${devMsg( diff --git a/src/PrismicToolbar.tsx b/src/PrismicToolbar.tsx index bd29329..ed7b000 100644 --- a/src/PrismicToolbar.tsx +++ b/src/PrismicToolbar.tsx @@ -52,7 +52,7 @@ export const PrismicToolbar = ({ // environments. // // @see https://github.com/capricorn86/happy-dom/blob/02ae081e36f990c06171eda44f9d885fd9413d73/packages/happy-dom/src/nodes/html-script-element/HTMLScriptElement.ts#L191-L209 - if (process.env.NODE_ENV === "test") { + if (typeof process !== "undefined" && process.env.NODE_ENV === "test") { // @ts-expect-error - `_evaluateScript` is a Happy DOM-specific property. script._evaluateScript = false; } diff --git a/src/SliceZone.tsx b/src/SliceZone.tsx index 286046b..e5b33e8 100644 --- a/src/SliceZone.tsx +++ b/src/SliceZone.tsx @@ -155,7 +155,10 @@ export type SliceZoneComponents< export const TODOSliceComponent = <TSlice extends SliceLike, TContext>({ slice, }: SliceComponentProps<TSlice, TContext>): JSX.Element | null => { - if (process.env.NODE_ENV === "development") { + if ( + typeof process !== "undefined" && + process.env.NODE_ENV === "development" + ) { const type = "slice_type" in slice ? slice.slice_type : slice.type; console.warn( diff --git a/src/index.ts b/src/index.ts index ec965a4..c768122 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,3 @@ -import "./lib/processPolyfill"; - export { PrismicProvider } from "./PrismicProvider"; export type { PrismicProviderProps, diff --git a/src/lib/processPolyfill.ts b/src/lib/processPolyfill.ts deleted file mode 100644 index 6f694a5..0000000 --- a/src/lib/processPolyfill.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Polyfill `process` in environments like the browser. -if (typeof process === "undefined") { - globalThis.process = { env: {} } as typeof process; -} diff --git a/src/react-server/PrismicLink.tsx b/src/react-server/PrismicLink.tsx index 976906e..a6bebf2 100644 --- a/src/react-server/PrismicLink.tsx +++ b/src/react-server/PrismicLink.tsx @@ -107,7 +107,10 @@ export const PrismicLink = React.forwardRef(function PrismicLink< }: PrismicLinkProps<InternalComponentProps, ExternalComponentProps>, ref: React.ForwardedRef<Element>, ): JSX.Element { - if (process.env.NODE_ENV === "development") { + if ( + typeof process !== "undefined" && + process.env.NODE_ENV === "development" + ) { if (field) { if (!field.link_type) { console.error( diff --git a/src/react-server/PrismicRichText.tsx b/src/react-server/PrismicRichText.tsx index 18c94ac..e99b1a8 100644 --- a/src/react-server/PrismicRichText.tsx +++ b/src/react-server/PrismicRichText.tsx @@ -226,7 +226,10 @@ export function PrismicRichText< ...restProps }: PrismicRichTextProps<LinkResolverFunction>): JSX.Element | null { return React.useMemo(() => { - if (process.env.NODE_ENV === "development") { + if ( + typeof process !== "undefined" && + process.env.NODE_ENV === "development" + ) { if ("className" in restProps) { console.warn( `[PrismicRichText] className cannot be passed to <PrismicRichText> since it renders an array without a wrapping component. For more details, see ${devMsg(