@sqrzro/server 4.0.0-alpha.22 → 4.0.0-alpha.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/forms/index.d.ts +6 -4
- package/dist/forms/index.js +2 -2
- package/dist/forms/index.js.map +1 -1
- package/package.json +1 -1
package/dist/forms/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
1
|
+
import z$1, { z } from 'zod';
|
|
2
2
|
|
|
3
3
|
interface AwaitedFormResponse<M> {
|
|
4
4
|
data: M | null;
|
|
@@ -6,14 +6,14 @@ interface AwaitedFormResponse<M> {
|
|
|
6
6
|
validation: Record<string, string> | null;
|
|
7
7
|
}
|
|
8
8
|
type FormResponse<M> = Promise<AwaitedFormResponse<M>>;
|
|
9
|
-
type ValidationRule<V, T =
|
|
9
|
+
type ValidationRule<V, T = undefined> = T extends undefined ? {
|
|
10
10
|
validator: V;
|
|
11
11
|
} : {
|
|
12
12
|
validator: V;
|
|
13
13
|
transformer: T;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
declare function createRule<V, T =
|
|
16
|
+
declare function createRule<V, T = undefined>(config: {
|
|
17
17
|
validator: V;
|
|
18
18
|
} | {
|
|
19
19
|
validator: V;
|
|
@@ -48,7 +48,9 @@ declare function submitForm<Schema extends z.ZodTypeAny, Response>(args: SubmitF
|
|
|
48
48
|
|
|
49
49
|
declare function validateSchema<T extends z.ZodTypeAny>(data: object, schema: T): Promise<z.infer<T>>;
|
|
50
50
|
|
|
51
|
-
declare function getCSVRule():
|
|
51
|
+
declare function getCSVRule(): {
|
|
52
|
+
validator: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string[][], string>>;
|
|
53
|
+
};
|
|
52
54
|
|
|
53
55
|
declare function getExistsTransformer<T, ID>(key: string, value: ID, fn: (value: ID) => Promise<T>): Promise<NonNullable<T>>;
|
|
54
56
|
|
package/dist/forms/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {a as a$1}from'../chunk-3JA7XHAG.js';export{a as ValidationError}from'../chunk-3JA7XHAG.js';import {redirect}from'next/navigation';import S,{z as z$1}from'zod';import {parse}from'csv-parse/sync';function g(e){return e}var n=g;function x(e){let[,,t]=e.split(";");redirect(`${t.startsWith("/")?"":"/"}${t}`);}var i=x;function m(e){let t={};for(let r in e)typeof e[r]=="string"?t[r]=e[r].trim():typeof e[r]=="object"&&e[r]!==null?t[r]=m(e[r]):t[r]=e[r];return t}var l=m;function T(e){return e.issues.reduce((t,r)=>({...t,[r.path.join(".")]:r.message.replace(/"/gu,"")}),{})}var u=T;function y(e){return typeof e.input>"u"&&(e.code==="invalid_type"||e.code==="invalid_value")||!e.input&&(e.code==="invalid_format"||e.code==="too_small")}function E(e){return y(e)?{message:"REQUIRED"}:e.message?{message:e.message}:null}var f=E;async function V(e,t){try{return await t.parseAsync(l(e),{error:o=>f(o)})}catch(r){throw r instanceof z$1.ZodError?new a$1(u(r)):r}}var a=V;async function
|
|
2
|
-
`).filter(o=>o.trim()!=="");for(let o of r){let c=parse(o,{skip_empty_lines:true});t.push(c[0].map(p=>p.trim()));}return t}var d=w;var b=S.string().transform(d);function Z(){return n({validator:b})}var F=Z;async function z(e,t,r){let o=await r(t);if(!o)throw new a$1({[e]:"NOT_FOUND"});return o}var $=z;function A(e){return [async t=>!!await e(t),{message:"NOT_FOUND"}]}var P=A;function _(e){return [async t=>!await e(t),{message:"ALREADY_EXISTS"}]}var N=_;export{n as createRule,F as getCSVRule,$ as getExistsTransformer,P as getExistsValidator,N as getNotExistsValidator,
|
|
1
|
+
import {a as a$1}from'../chunk-3JA7XHAG.js';export{a as ValidationError}from'../chunk-3JA7XHAG.js';import {redirect}from'next/navigation';import S,{z as z$1}from'zod';import {parse}from'csv-parse/sync';function g(e){return e}var n=g;function x(e){let[,,t]=e.split(";");redirect(`${t.startsWith("/")?"":"/"}${t}`);}var i=x;function m(e){let t={};for(let r in e)typeof e[r]=="string"?t[r]=e[r].trim():typeof e[r]=="object"&&e[r]!==null?t[r]=m(e[r]):t[r]=e[r];return t}var l=m;function T(e){return e.issues.reduce((t,r)=>({...t,[r.path.join(".")]:r.message.replace(/"/gu,"")}),{})}var u=T;function y(e){return typeof e.input>"u"&&(e.code==="invalid_type"||e.code==="invalid_value")||!e.input&&(e.code==="invalid_format"||e.code==="too_small")}function E(e){return y(e)?{message:"REQUIRED"}:e.message?{message:e.message}:null}var f=E;async function V(e,t){try{return await t.parseAsync(l(e),{error:o=>f(o)})}catch(r){throw r instanceof z$1.ZodError?new a$1(u(r)):r}}var a=V;async function h(e){let t={data:null,error:null,validation:null};try{let r=await a(e.formData,e.schema),o=await e.fn(r);return await e.onSuccess?.(o),{...t,data:o}}catch(r){if(r instanceof a$1)return e.onValidationError?.(r),{...t,validation:r.messages};if(r instanceof Error)throw r.message==="NEXT_REDIRECT"&&"digest"in r&&i(String(r.digest)),r;return {...t,error:"submitForm encountered an unknown error"}}}var v=h;function w(e){let t=[],r=e.split(`
|
|
2
|
+
`).filter(o=>o.trim()!=="");for(let o of r){let c=parse(o,{skip_empty_lines:true});t.push(c[0].map(p=>p.trim()));}return t}var d=w;var b=S.string().transform(d);function Z(){return n({validator:b})}var F=Z;async function z(e,t,r){let o=await r(t);if(!o)throw new a$1({[e]:"NOT_FOUND"});return o}var $=z;function A(e){return [async t=>!!await e(t),{message:"NOT_FOUND"}]}var P=A;function _(e){return [async t=>!await e(t),{message:"ALREADY_EXISTS"}]}var N=_;export{n as createRule,F as getCSVRule,$ as getExistsTransformer,P as getExistsValidator,N as getNotExistsValidator,v as submitForm,a as validateSchema};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/forms/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/forms/create-rule.ts","../../src/forms/utility/handle-redirect.ts","../../src/forms/utility/clean-data.ts","../../src/forms/utility/transform-errors.ts","../../src/forms/utility/transform-issue.ts","../../src/forms/validate-schema.ts","../../src/forms/submit-form.ts","../../src/forms/utility/parse-csv.ts","../../src/forms/rules/get-csv-rule.ts","../../src/forms/transformers/get-exists-transformer.ts","../../src/forms/validators/get-exists-validator.ts","../../src/forms/validators/get-not-exists-validator.ts"],"names":["createRule","config","create_rule_default","handleRedirect","digest","path","redirect","handle_redirect_default","cleanData","data","cleanedData","key","clean_data_default","transformErrors","error","acc","cur","transform_errors_default","isRequired","issue","transformIssue","transform_issue_default","validateSchema","schema","z","ValidationError_default","validate_schema_default","submitForm","args","response","model","submit_form_default","parseCSV","csv","records","lines","item","line","record","parse","parse_csv_default","validator","getCSVRule","get_csv_rule_default","getExistsTransformer","value","fn","result","get_exists_transformer_default","getExistsValidator","get_exists_validator_default","getNotExistsValidator","get_not_exists_validator_default"],"mappings":"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","file":"index.js","sourcesContent":["import type { ValidationRule } from './utility/interfaces';\n\nfunction createRule<V, T = never>(\n config: { validator: V } | { validator: V; transformer: T }\n): ValidationRule<V, T> {\n return config as ValidationRule<V, T>;\n}\n\nexport default createRule;\n","import { redirect } from 'next/navigation';\n\nfunction handleRedirect(digest: string): void {\n const [, , path] = digest.split(';');\n redirect(`${path.startsWith('/') ? '' : '/'}${path}`);\n}\n\nexport default handleRedirect;\n","function cleanData(data: object): object {\n const cleanedData: Record<string, unknown> = {};\n\n for (const key in data) {\n if (typeof data[key] === 'string') {\n cleanedData[key] = data[key].trim();\n } else if (typeof data[key] === 'object' && data[key] !== null) {\n cleanedData[key] = cleanData(data[key] as object);\n } else {\n cleanedData[key] = data[key];\n }\n }\n\n return cleanedData;\n}\n\nexport default cleanData;\n","import { z } from 'zod';\n\nfunction transformErrors(error: z.ZodError): Record<string, string> {\n return error.issues.reduce(\n (acc, cur) => ({\n ...acc,\n [cur.path.join('.')]: cur.message.replace(/\"/gu, ''),\n }),\n {}\n );\n}\n\nexport default transformErrors;\n","import type { $ZodIssue, $ZodIssueBase, $ZodRawIssue } from 'zod/v4/core';\n\nfunction isRequired<T extends $ZodIssueBase = $ZodIssue>(issue: $ZodRawIssue<T>): boolean {\n if (\n typeof issue.input === 'undefined' &&\n (issue.code === 'invalid_type' || issue.code === 'invalid_value')\n ) {\n return true;\n }\n\n if (!issue.input && (issue.code === 'invalid_format' || issue.code === 'too_small')) {\n return true;\n }\n\n return false;\n}\n\nfunction transformIssue<T extends $ZodIssueBase = $ZodIssue>(\n issue: $ZodRawIssue<T>\n): { message: string } | null {\n if (isRequired(issue)) {\n return { message: 'REQUIRED' };\n }\n\n return issue.message ? { message: issue.message } : null;\n}\n\nexport default transformIssue;\n","import { z } from 'zod';\n\nimport cleanData from './utility/clean-data';\nimport transformErrors from './utility/transform-errors';\nimport transformIssue from './utility/transform-issue';\n\nimport ValidationError from './ValidationError';\n\nasync function validateSchema<T extends z.ZodTypeAny>(\n data: object,\n schema: T\n): Promise<z.infer<T>> {\n try {\n const result = await schema.parseAsync(cleanData(data), {\n error: (issue) => transformIssue(issue),\n });\n return result;\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new ValidationError(transformErrors(error));\n }\n throw error;\n }\n}\n\nexport default validateSchema;\n","import { z } from 'zod';\n\nimport handleRedirect from './utility/handle-redirect';\nimport type { AwaitedFormResponse, FormResponse } from './utility/interfaces';\n\nimport ValidationError from './ValidationError';\nimport validateSchema from './validate-schema';\n\ninterface SubmitFormArgs<Schema extends z.ZodTypeAny, Response> {\n fn: (data: z.infer<Schema>) => Promise<Response>;\n formData: object;\n onSuccess?: (model: Response) => Promise<void> | void;\n onValidationError?: (error: ValidationError) => void;\n schema: Schema;\n}\n\n/**\n * Submit a form and handle validation and submission errors.\n *\n * @param args The arguments for submitting the form.\n * @returns A promise that resolves to either the submitted model or an error.\n */\nasync function submitForm<Schema extends z.ZodTypeAny, Response>(\n args: SubmitFormArgs<Schema, Response>\n): Promise<FormResponse<Response>> {\n let response: AwaitedFormResponse<Response> = { data: null, error: null, validation: null };\n\n try {\n const data = await validateSchema(args.formData, args.schema);\n const model = await args.fn(data);\n\n await args.onSuccess?.(model);\n\n return { ...response, data: model };\n } catch (error) {\n if (error instanceof ValidationError) {\n args.onValidationError?.(error);\n return { ...response, validation: error.messages };\n }\n if (error instanceof Error) {\n if (error.message === 'NEXT_REDIRECT' && 'digest' in error) {\n handleRedirect(String(error.digest));\n }\n throw error;\n // return { ...response, error: error.message };\n }\n return { ...response, error: 'submitForm encountered an unknown error' };\n }\n}\n\nexport default submitForm;\n","import { parse } from 'csv-parse/sync';\n\nfunction parseCSV(csv: string): string[][] {\n const records: string[][] = [];\n const lines = csv.split('\\n').filter((item) => item.trim() !== '');\n\n for (const line of lines) {\n const record = parse(line, {\n skip_empty_lines: true,\n }) as string[][];\n\n records.push(record[0].map((item) => item.trim()));\n }\n\n return records;\n}\n\nexport default parseCSV;\n","import z from 'zod';\n\nimport parseCSV from '../utility/parse-csv';\n\nimport createRule from '../create-rule';\n\nconst validator = z.string().transform(parseCSV);\n\nfunction getCSVRule() {\n return createRule({ validator });\n}\n\nexport default getCSVRule;\n","import ValidationError from '../ValidationError';\n\nasync function getExistsTransformer<T, ID>(\n key: string,\n value: ID,\n fn: (value: ID) => Promise<T>\n): Promise<NonNullable<T>> {\n const result = await fn(value);\n\n if (!result) {\n throw new ValidationError({ [key]: 'NOT_FOUND' });\n }\n\n return result;\n}\n\nexport default getExistsTransformer;\n","function getExistsValidator<T, ID>(\n fn: (value: ID) => Promise<T>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return Boolean(result);\n },\n { message: 'NOT_FOUND' },\n ];\n}\n\nexport default getExistsValidator;\n","function getNotExistsValidator<T, ID>(\n fn: (value: ID) => Promise<T>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return !result;\n },\n { message: 'ALREADY_EXISTS' },\n ];\n}\n\nexport default getNotExistsValidator;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/forms/create-rule.ts","../../src/forms/utility/handle-redirect.ts","../../src/forms/utility/clean-data.ts","../../src/forms/utility/transform-errors.ts","../../src/forms/utility/transform-issue.ts","../../src/forms/validate-schema.ts","../../src/forms/submit-form.ts","../../src/forms/utility/parse-csv.ts","../../src/forms/rules/get-csv-rule.ts","../../src/forms/transformers/get-exists-transformer.ts","../../src/forms/validators/get-exists-validator.ts","../../src/forms/validators/get-not-exists-validator.ts"],"names":["createRule","config","create_rule_default","handleRedirect","digest","path","redirect","handle_redirect_default","cleanData","data","cleanedData","key","clean_data_default","transformErrors","error","acc","cur","transform_errors_default","isRequired","issue","transformIssue","transform_issue_default","validateSchema","schema","z","ValidationError_default","validate_schema_default","submitForm","args","response","model","submit_form_default","parseCSV","csv","records","lines","item","line","record","parse","parse_csv_default","validator","getCSVRule","get_csv_rule_default","getExistsTransformer","value","fn","result","get_exists_transformer_default","getExistsValidator","get_exists_validator_default","getNotExistsValidator","get_not_exists_validator_default"],"mappings":"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","file":"index.js","sourcesContent":["import type { ValidationRule } from './utility/interfaces';\n\nfunction createRule<V, T = undefined>(\n config: { validator: V } | { validator: V; transformer: T }\n): ValidationRule<V, T> {\n return config as ValidationRule<V, T>;\n}\n\nexport default createRule;\n","import { redirect } from 'next/navigation';\n\nfunction handleRedirect(digest: string): void {\n const [, , path] = digest.split(';');\n redirect(`${path.startsWith('/') ? '' : '/'}${path}`);\n}\n\nexport default handleRedirect;\n","function cleanData(data: object): object {\n const cleanedData: Record<string, unknown> = {};\n\n for (const key in data) {\n if (typeof data[key] === 'string') {\n cleanedData[key] = data[key].trim();\n } else if (typeof data[key] === 'object' && data[key] !== null) {\n cleanedData[key] = cleanData(data[key] as object);\n } else {\n cleanedData[key] = data[key];\n }\n }\n\n return cleanedData;\n}\n\nexport default cleanData;\n","import { z } from 'zod';\n\nfunction transformErrors(error: z.ZodError): Record<string, string> {\n return error.issues.reduce(\n (acc, cur) => ({\n ...acc,\n [cur.path.join('.')]: cur.message.replace(/\"/gu, ''),\n }),\n {}\n );\n}\n\nexport default transformErrors;\n","import type { $ZodIssue, $ZodIssueBase, $ZodRawIssue } from 'zod/v4/core';\n\nfunction isRequired<T extends $ZodIssueBase = $ZodIssue>(issue: $ZodRawIssue<T>): boolean {\n if (\n typeof issue.input === 'undefined' &&\n (issue.code === 'invalid_type' || issue.code === 'invalid_value')\n ) {\n return true;\n }\n\n if (!issue.input && (issue.code === 'invalid_format' || issue.code === 'too_small')) {\n return true;\n }\n\n return false;\n}\n\nfunction transformIssue<T extends $ZodIssueBase = $ZodIssue>(\n issue: $ZodRawIssue<T>\n): { message: string } | null {\n if (isRequired(issue)) {\n return { message: 'REQUIRED' };\n }\n\n return issue.message ? { message: issue.message } : null;\n}\n\nexport default transformIssue;\n","import { z } from 'zod';\n\nimport cleanData from './utility/clean-data';\nimport transformErrors from './utility/transform-errors';\nimport transformIssue from './utility/transform-issue';\n\nimport ValidationError from './ValidationError';\n\nasync function validateSchema<T extends z.ZodTypeAny>(\n data: object,\n schema: T\n): Promise<z.infer<T>> {\n try {\n const result = await schema.parseAsync(cleanData(data), {\n error: (issue) => transformIssue(issue),\n });\n return result;\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new ValidationError(transformErrors(error));\n }\n throw error;\n }\n}\n\nexport default validateSchema;\n","import { z } from 'zod';\n\nimport handleRedirect from './utility/handle-redirect';\nimport type { AwaitedFormResponse, FormResponse } from './utility/interfaces';\n\nimport ValidationError from './ValidationError';\nimport validateSchema from './validate-schema';\n\ninterface SubmitFormArgs<Schema extends z.ZodTypeAny, Response> {\n fn: (data: z.infer<Schema>) => Promise<Response>;\n formData: object;\n onSuccess?: (model: Response) => Promise<void> | void;\n onValidationError?: (error: ValidationError) => void;\n schema: Schema;\n}\n\n/**\n * Submit a form and handle validation and submission errors.\n *\n * @param args The arguments for submitting the form.\n * @returns A promise that resolves to either the submitted model or an error.\n */\nasync function submitForm<Schema extends z.ZodTypeAny, Response>(\n args: SubmitFormArgs<Schema, Response>\n): Promise<FormResponse<Response>> {\n let response: AwaitedFormResponse<Response> = { data: null, error: null, validation: null };\n\n try {\n const data = await validateSchema(args.formData, args.schema);\n const model = await args.fn(data);\n\n await args.onSuccess?.(model);\n\n return { ...response, data: model };\n } catch (error) {\n if (error instanceof ValidationError) {\n args.onValidationError?.(error);\n return { ...response, validation: error.messages };\n }\n if (error instanceof Error) {\n if (error.message === 'NEXT_REDIRECT' && 'digest' in error) {\n handleRedirect(String(error.digest));\n }\n throw error;\n // return { ...response, error: error.message };\n }\n return { ...response, error: 'submitForm encountered an unknown error' };\n }\n}\n\nexport default submitForm;\n","import { parse } from 'csv-parse/sync';\n\nfunction parseCSV(csv: string): string[][] {\n const records: string[][] = [];\n const lines = csv.split('\\n').filter((item) => item.trim() !== '');\n\n for (const line of lines) {\n const record = parse(line, {\n skip_empty_lines: true,\n }) as string[][];\n\n records.push(record[0].map((item) => item.trim()));\n }\n\n return records;\n}\n\nexport default parseCSV;\n","import z from 'zod';\n\nimport parseCSV from '../utility/parse-csv';\n\nimport createRule from '../create-rule';\n\nconst validator = z.string().transform(parseCSV);\n\nfunction getCSVRule() {\n return createRule({ validator });\n}\n\nexport default getCSVRule;\n","import ValidationError from '../ValidationError';\n\nasync function getExistsTransformer<T, ID>(\n key: string,\n value: ID,\n fn: (value: ID) => Promise<T>\n): Promise<NonNullable<T>> {\n const result = await fn(value);\n\n if (!result) {\n throw new ValidationError({ [key]: 'NOT_FOUND' });\n }\n\n return result;\n}\n\nexport default getExistsTransformer;\n","function getExistsValidator<T, ID>(\n fn: (value: ID) => Promise<T>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return Boolean(result);\n },\n { message: 'NOT_FOUND' },\n ];\n}\n\nexport default getExistsValidator;\n","function getNotExistsValidator<T, ID>(\n fn: (value: ID) => Promise<T>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return !result;\n },\n { message: 'ALREADY_EXISTS' },\n ];\n}\n\nexport default getNotExistsValidator;\n"]}
|