@orpc/zod 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 oRPC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.js CHANGED
@@ -1,10 +1,13 @@
1
+ // src/index.ts
1
2
  import wcmatch from "wildcard-match";
2
- import { custom } from "zod";
3
- const customZodTypeSymbol = Symbol("customZodTypeSymbol");
4
- const customZodFileMimeTypeSymbol = Symbol("customZodFileMimeTypeSymbol");
5
- const CUSTOM_JSON_SCHEMA_SYMBOL = Symbol("CUSTOM_JSON_SCHEMA");
6
- const CUSTOM_JSON_SCHEMA_INPUT_SYMBOL = Symbol("CUSTOM_JSON_SCHEMA_INPUT");
7
- const CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL = Symbol("CUSTOM_JSON_SCHEMA_OUTPUT");
3
+ import {
4
+ custom
5
+ } from "zod";
6
+ var customZodTypeSymbol = Symbol("customZodTypeSymbol");
7
+ var customZodFileMimeTypeSymbol = Symbol("customZodFileMimeTypeSymbol");
8
+ var CUSTOM_JSON_SCHEMA_SYMBOL = Symbol("CUSTOM_JSON_SCHEMA");
9
+ var CUSTOM_JSON_SCHEMA_INPUT_SYMBOL = Symbol("CUSTOM_JSON_SCHEMA_INPUT");
10
+ var CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL = Symbol("CUSTOM_JSON_SCHEMA_OUTPUT");
8
11
  function getCustomZodType(def) {
9
12
  return customZodTypeSymbol in def ? def[customZodTypeSymbol] : void 0;
10
13
  }
@@ -12,10 +15,10 @@ function getCustomZodFileMimeType(def) {
12
15
  return customZodFileMimeTypeSymbol in def ? def[customZodFileMimeTypeSymbol] : void 0;
13
16
  }
14
17
  function getCustomJSONSchema(def, options) {
15
- if ((options == null ? void 0 : options.mode) === "input" && CUSTOM_JSON_SCHEMA_INPUT_SYMBOL in def) {
18
+ if (options?.mode === "input" && CUSTOM_JSON_SCHEMA_INPUT_SYMBOL in def) {
16
19
  return def[CUSTOM_JSON_SCHEMA_INPUT_SYMBOL];
17
20
  }
18
- if ((options == null ? void 0 : options.mode) === "output" && CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL in def) {
21
+ if (options?.mode === "output" && CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL in def) {
19
22
  return def[CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL];
20
23
  }
21
24
  if (CUSTOM_JSON_SCHEMA_SYMBOL in def) {
@@ -116,13 +119,13 @@ function url(options) {
116
119
  }
117
120
  function openapi(schema, custom2, options) {
118
121
  const newSchema = schema.refine(() => true);
119
- const SYMBOL = (options == null ? void 0 : options.mode) === "input" ? CUSTOM_JSON_SCHEMA_INPUT_SYMBOL : (options == null ? void 0 : options.mode) === "output" ? CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL : CUSTOM_JSON_SCHEMA_SYMBOL;
122
+ const SYMBOL = options?.mode === "input" ? CUSTOM_JSON_SCHEMA_INPUT_SYMBOL : options?.mode === "output" ? CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL : CUSTOM_JSON_SCHEMA_SYMBOL;
120
123
  Object.assign(newSchema._def, {
121
124
  [SYMBOL]: custom2
122
125
  });
123
126
  return newSchema;
124
127
  }
125
- const oz = {
128
+ var oz = {
126
129
  openapi,
127
130
  file,
128
131
  blob,
@@ -142,3 +145,4 @@ export {
142
145
  regexp,
143
146
  url
144
147
  };
148
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nimport type { JSONSchema } from 'json-schema-typed/draft-2020-12'\n\nimport wcmatch from 'wildcard-match'\nimport {\n type CustomErrorParams,\n type ZodEffects,\n type ZodType,\n type ZodTypeAny,\n type ZodTypeDef,\n custom,\n type input,\n type output,\n} from 'zod'\n\nexport type CustomZodType = 'File' | 'Blob' | 'Invalid Date' | 'RegExp' | 'URL'\n\nconst customZodTypeSymbol = Symbol('customZodTypeSymbol')\n\nconst customZodFileMimeTypeSymbol = Symbol('customZodFileMimeTypeSymbol')\n\nconst CUSTOM_JSON_SCHEMA_SYMBOL = Symbol('CUSTOM_JSON_SCHEMA')\nconst CUSTOM_JSON_SCHEMA_INPUT_SYMBOL = Symbol('CUSTOM_JSON_SCHEMA_INPUT')\nconst CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL = Symbol('CUSTOM_JSON_SCHEMA_OUTPUT')\n\ntype CustomParams = CustomErrorParams & {\n fatal?: boolean\n}\n\nexport function getCustomZodType(def: ZodTypeDef): CustomZodType | undefined {\n return customZodTypeSymbol in def\n ? (def[customZodTypeSymbol] as CustomZodType)\n : undefined\n}\n\nexport function getCustomZodFileMimeType(def: ZodTypeDef): string | undefined {\n return customZodFileMimeTypeSymbol in def\n ? (def[customZodFileMimeTypeSymbol] as string)\n : undefined\n}\n\nexport function getCustomJSONSchema(\n def: ZodTypeDef,\n options?: { mode?: 'input' | 'output' },\n): Exclude<JSONSchema, boolean> | undefined {\n if (options?.mode === 'input' && CUSTOM_JSON_SCHEMA_INPUT_SYMBOL in def) {\n return def[CUSTOM_JSON_SCHEMA_INPUT_SYMBOL] as Exclude<JSONSchema, boolean>\n }\n\n if (options?.mode === 'output' && CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL in def) {\n return def[CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL] as Exclude<JSONSchema, boolean>\n }\n\n if (CUSTOM_JSON_SCHEMA_SYMBOL in def) {\n return def[CUSTOM_JSON_SCHEMA_SYMBOL] as Exclude<JSONSchema, boolean>\n }\n\n return undefined\n}\n\nfunction composeParams<T = unknown>(options: {\n params?: string | CustomParams | ((input: T) => CustomParams)\n defaultMessage?: string | ((input: T) => string)\n}): (input: T) => CustomParams {\n return (val) => {\n const defaultMessage =\n typeof options.defaultMessage === 'function'\n ? options.defaultMessage(val)\n : options.defaultMessage\n\n if (!options.params) {\n return {\n message: defaultMessage,\n }\n }\n\n if (typeof options.params === 'function') {\n return {\n message: defaultMessage,\n ...options.params(val),\n }\n }\n\n if (typeof options.params === 'object') {\n return {\n message: defaultMessage,\n ...options.params,\n }\n }\n\n return {\n message: options.params,\n }\n }\n}\n\nexport function file(\n params?: string | CustomParams | ((input: unknown) => CustomParams),\n): ZodType<InstanceType<typeof File>, ZodTypeDef, InstanceType<typeof File>> & {\n type(\n mimeType: string,\n params?: string | CustomParams | ((input: unknown) => CustomParams),\n ): ZodEffects<\n ZodType<InstanceType<typeof File>, ZodTypeDef, InstanceType<typeof File>>,\n InstanceType<typeof File>,\n InstanceType<typeof File>\n >\n} {\n const schema = custom<InstanceType<typeof File>>(\n (val) => val instanceof File,\n composeParams({ params, defaultMessage: 'Input is not a file' }),\n )\n\n Object.assign(schema._def, {\n [customZodTypeSymbol]: 'File' satisfies CustomZodType,\n })\n\n return Object.assign(schema, {\n type: (\n mimeType: string,\n params: string | CustomParams | ((input: unknown) => CustomParams),\n ) => {\n const isMatch = wcmatch(mimeType)\n\n const refinedSchema = schema.refine(\n (val) => isMatch(val.type.split(';')[0]!),\n composeParams<InstanceType<typeof File>>({\n params,\n defaultMessage: (val) =>\n `Expected a file of type ${mimeType} but got a file of type ${val.type || 'unknown'}`,\n }),\n )\n\n Object.assign(refinedSchema._def, {\n [customZodTypeSymbol]: 'File' satisfies CustomZodType,\n [customZodFileMimeTypeSymbol]: mimeType,\n })\n\n return refinedSchema\n },\n })\n}\n\nexport function blob(\n params?: string | CustomParams | ((input: unknown) => CustomParams),\n): ZodType<InstanceType<typeof Blob>, ZodTypeDef, InstanceType<typeof Blob>> {\n const schema = custom<InstanceType<typeof Blob>>(\n (val) => val instanceof Blob,\n composeParams({ params, defaultMessage: 'Input is not a blob' }),\n )\n\n Object.assign(schema._def, {\n [customZodTypeSymbol]: 'Blob' satisfies CustomZodType,\n })\n\n return schema\n}\n\nexport function invalidDate(\n params?: string | CustomParams | ((input: unknown) => CustomParams),\n): ZodType<Date, ZodTypeDef, Date> {\n const schema = custom<Date>(\n (val) => val instanceof Date && Number.isNaN(val.getTime()),\n composeParams({ params, defaultMessage: 'Input is not an invalid date' }),\n )\n\n Object.assign(schema._def, {\n [customZodTypeSymbol]: 'Invalid Date' satisfies CustomZodType,\n })\n\n return schema\n}\n\nexport function regexp(\n options?: CustomParams,\n): ZodType<RegExp, ZodTypeDef, RegExp> {\n const schema = custom<RegExp>(\n (val) => val instanceof RegExp,\n composeParams({ params: options, defaultMessage: 'Input is not a regexp' }),\n )\n\n Object.assign(schema._def, {\n [customZodTypeSymbol]: 'RegExp' satisfies CustomZodType,\n })\n\n return schema\n}\n\nexport function url(options?: CustomParams): ZodType<URL, ZodTypeDef, URL> {\n const schema = custom<URL>(\n (val) => val instanceof URL,\n composeParams({ params: options, defaultMessage: 'Input is not a URL' }),\n )\n\n Object.assign(schema._def, {\n [customZodTypeSymbol]: 'URL' satisfies CustomZodType,\n })\n\n return schema\n}\n\nexport function openapi<\n T extends ZodTypeAny,\n TMode extends 'input' | 'output' | 'both' = 'both',\n>(\n schema: T,\n custom: Exclude<\n JSONSchema<\n TMode extends 'input'\n ? input<T>\n : TMode extends 'output'\n ? output<T>\n : input<T> & output<T>\n >,\n boolean\n >,\n options?: { mode: TMode },\n): ReturnType<T['refine']> {\n const newSchema = schema.refine(() => true) as ReturnType<T['refine']>\n\n const SYMBOL =\n options?.mode === 'input'\n ? CUSTOM_JSON_SCHEMA_INPUT_SYMBOL\n : options?.mode === 'output'\n ? CUSTOM_JSON_SCHEMA_OUTPUT_SYMBOL\n : CUSTOM_JSON_SCHEMA_SYMBOL\n\n Object.assign(newSchema._def, {\n [SYMBOL]: custom,\n })\n\n return newSchema\n}\n\nexport const oz = {\n openapi,\n file,\n blob,\n invalidDate,\n regexp,\n url,\n}\n"],"mappings":"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","names":["params","custom"]}
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@orpc/zod",
3
3
  "type": "module",
4
- "version": "0.0.0",
4
+ "version": "0.0.1",
5
5
  "author": {
6
- "name": "dinwwwh",
7
- "email": "dinwwwh@gmail.com",
8
- "url": "https://dinwwwh.com"
6
+ "name": "unnoq",
7
+ "email": "contact@unnoq.com",
8
+ "url": "https://unnoq.com"
9
9
  },
10
10
  "license": "MIT",
11
- "homepage": "https://github.com/dinwwwh/dinwwwh",
11
+ "homepage": "https://github.com/unnoq/unnoq",
12
12
  "repository": {
13
13
  "type": "git",
14
- "url": "https://github.com/dinwwwh/dinwwwh.git",
14
+ "url": "https://github.com/unnoq/unnoq.git",
15
15
  "directory": "examples/typescript-vite-package"
16
16
  },
17
17
  "keywords": [
18
- "dinwwwh"
18
+ "unnoq"
19
19
  ],
20
20
  "publishConfig": {
21
21
  "access": "public"
@@ -40,7 +40,8 @@
40
40
  "zod": "^3.23.8"
41
41
  },
42
42
  "scripts": {
43
- "build": "UNPLUGIN_ON_SUCCESS='tsc -b --noCheck' vite build",
44
- "check": "tsc -b"
43
+ "build": "tsup --clean --sourcemap --entry.index=src/index.ts --format=esm --onSuccess='tsc -b --noCheck'",
44
+ "build:watch": "pnpm run build --watch",
45
+ "type:check": "tsc -b"
45
46
  }
46
47
  }