From fadd4ac7de2a703d0c5f93c46c699fc27f201ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=BCller?= Date: Sat, 6 Sep 2025 14:03:43 +0200 Subject: [PATCH 1/6] feat: added new route for transforming js to zod directly --- pages/js-object-to-zod.tsx | 64 ++++++++++++++++++++++++++++++++++++++ utils/routes.tsx | 6 ++++ 2 files changed, 70 insertions(+) create mode 100644 pages/js-object-to-zod.tsx diff --git a/pages/js-object-to-zod.tsx b/pages/js-object-to-zod.tsx new file mode 100644 index 0000000..ea49c30 --- /dev/null +++ b/pages/js-object-to-zod.tsx @@ -0,0 +1,64 @@ +import ConversionPanel from "@components/ConversionPanel"; +import { EditorPanelProps } from "@components/EditorPanel"; +import Form, { InputType } from "@components/Form"; +import { useSettings } from "@hooks/useSettings"; +import * as React from "react"; +import { useCallback } from "react"; + +interface Settings { + rootName: string; +} + +const formFields = [ + { + type: InputType.TEXT_INPUT, + key: "rootName", + label: "Root Schema Name" + } +]; + +export default function JsObjectToZod() { + const name = "JS Object to Zod Schema"; + + const [settings, setSettings] = useSettings(name, { + rootName: "schema" + }); + + const transformer = useCallback( + async ({ value }) => { + const { jsonToZod } = await import("json-to-zod"); + const objectValue = eval("(" + value + ")"); + return jsonToZod(objectValue, settings.rootName, true); + }, + [settings] + ); + + const getSettingsElement = useCallback( + ({ open, toggle }) => { + return ( + + title={name} + onSubmit={setSettings} + open={open} + toggle={toggle} + formsFields={formFields} + initialValues={settings} + /> + ); + }, + [] + ); + + return ( + + ); +} diff --git a/utils/routes.tsx b/utils/routes.tsx index cb19f16..b7ad1fc 100644 --- a/utils/routes.tsx +++ b/utils/routes.tsx @@ -223,6 +223,12 @@ export const categorizedRoutes = [ path: "/js-object-to-typescript", desc: "An online REPL for converting JS Object to Typescript." }, + { + label: "to Zod Schema", + path: "/js-object-to-zod", + packageUrl: "https://www.npmjs.com/package/json-to-zod", + packageName: "json-to-zod" + } ] }, { From 3b8de71c156ecd0a6f50b39b45ac170f7163126b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=BCller?= Date: Sat, 6 Sep 2025 14:26:04 +0200 Subject: [PATCH 2/6] feat: use node v22 --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 11a6230..71ce9ea 100644 --- a/package.json +++ b/package.json @@ -6,16 +6,16 @@ "license": "MIT", "scripts": { "dev:inspect": "NODE_OPTIONS=\"--inspect\" next dev", - "dev": "next dev", - "start": "next start", + "dev": "NODE_OPTIONS=\"--openssl-legacy-provider\" next dev", + "start": "NODE_OPTIONS=\"--openssl-legacy-provider\" next start", "format": "prettier --write '**/*.ts' '**/*.tsx'", - "build": "next build", - "now-build": "next build", + "build": "NODE_OPTIONS=\"--openssl-legacy-provider\" next build", + "now-build": "NODE_OPTIONS=\"--openssl-legacy-provider\" next build", "postinstall": "patch-package", - "build:analyze": "ANALYZE=true yarn build" + "build:analyze": "NODE_OPTIONS=\"--openssl-legacy-provider\" ANALYZE=true yarn build" }, "engines": { - "node": "16.x" + "node": "22.x" }, "dependencies": { "@babel/plugin-transform-flow-strip-types": "^7.16.0", From 167b13efc94fa73bfeab6cf9c074038fe4d6fc8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=BCller?= Date: Sat, 6 Sep 2025 14:38:58 +0200 Subject: [PATCH 3/6] ref --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 71ce9ea..40614ad 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,14 @@ "author": "ritz078 ", "license": "MIT", "scripts": { - "dev:inspect": "NODE_OPTIONS=\"--inspect\" next dev", + "dev:inspect": "NODE_OPTIONS=\"--inspect --openssl-legacy-provider\" next dev", "dev": "NODE_OPTIONS=\"--openssl-legacy-provider\" next dev", "start": "NODE_OPTIONS=\"--openssl-legacy-provider\" next start", "format": "prettier --write '**/*.ts' '**/*.tsx'", "build": "NODE_OPTIONS=\"--openssl-legacy-provider\" next build", "now-build": "NODE_OPTIONS=\"--openssl-legacy-provider\" next build", "postinstall": "patch-package", - "build:analyze": "NODE_OPTIONS=\"--openssl-legacy-provider\" ANALYZE=true yarn build" + "build:analyze": "ANALYZE=true yarn build" }, "engines": { "node": "22.x" From c6e7cdf84c0ba9e84f4915c2c7c6c08158607a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=BCller?= Date: Sat, 6 Sep 2025 14:41:29 +0200 Subject: [PATCH 4/6] feat+ref: override hashing method used by webpack to be compatible with node 18+ (no legacy providers anymore) this allows us to remove the node optiosn for legacy support --- next.config.js | 4 ++++ package.json | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/next.config.js b/next.config.js index 7900a6a..db97770 100644 --- a/next.config.js +++ b/next.config.js @@ -1,3 +1,7 @@ +const crypto = require("crypto"); +const cryptoOrigCreateHash = crypto.createHash; +crypto.createHash = algorithm => + cryptoOrigCreateHash(algorithm === "md4" ? "sha256" : algorithm); const webpack = require("webpack"); const config = { diff --git a/package.json b/package.json index 40614ad..ee483c1 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,12 @@ "author": "ritz078 ", "license": "MIT", "scripts": { - "dev:inspect": "NODE_OPTIONS=\"--inspect --openssl-legacy-provider\" next dev", - "dev": "NODE_OPTIONS=\"--openssl-legacy-provider\" next dev", - "start": "NODE_OPTIONS=\"--openssl-legacy-provider\" next start", + "dev:inspect": "NODE_OPTIONS=\"--inspect\" next dev", + "dev": "next dev", + "start": "next start", "format": "prettier --write '**/*.ts' '**/*.tsx'", - "build": "NODE_OPTIONS=\"--openssl-legacy-provider\" next build", - "now-build": "NODE_OPTIONS=\"--openssl-legacy-provider\" next build", + "build": "next build", + "now-build": "next build", "postinstall": "patch-package", "build:analyze": "ANALYZE=true yarn build" }, From 18734fea7713821add55a2f19e21433c988edd9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=BCller?= Date: Sat, 6 Sep 2025 14:43:27 +0200 Subject: [PATCH 5/6] fix: downgrade to node v18, since build errors occur with node v22 in the dependency 'esm' --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ee483c1..7804028 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "build:analyze": "ANALYZE=true yarn build" }, "engines": { - "node": "22.x" + "node": "18.x" }, "dependencies": { "@babel/plugin-transform-flow-strip-types": "^7.16.0", From 403d46d13283c65920079e2ba880edcbc5bc8eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20M=C3=BCller?= Date: Sat, 6 Sep 2025 14:45:37 +0200 Subject: [PATCH 6/6] fix: bump to v20 since v18 is also no longer supported by vercel --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7804028..a095ff1 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "build:analyze": "ANALYZE=true yarn build" }, "engines": { - "node": "18.x" + "node": "20.x" }, "dependencies": { "@babel/plugin-transform-flow-strip-types": "^7.16.0",