UNPKG

zod-opts

Version:

node.js CLI option parser / validator using Zod

365 lines 13.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createPositionalArg = exports.createOption = void 0; const zod_1 = require("zod"); const zod_util_1 = require("../src/zod_util"); function createOption({ type = zod_1.z.string(), alias = "a", description = "description1", }) { return { type, alias, description }; } exports.createOption = createOption; function createPositionalArg({ type = zod_1.z.string(), name = "pos1", description = "description1", }) { return { type, name, description }; } exports.createPositionalArg = createPositionalArg; describe("optionToInternal()", () => { describe("string", () => { test("common", () => { expect((0, zod_util_1.optionToInternal)({ type: zod_1.z .string() .describe("zod_description") .regex(/^[0-9A-Za-z].+$/), alias: "a", description: "description1", }, "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: true, isArray: false, }); }); test("default", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.string().default("default"), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: "default", isArray: false, }); }); test("optional", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.string().optional(), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, isArray: false, }); }); test("optional with default", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.string().default("default").optional(), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, isArray: false, }); expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.optional(zod_1.z.string().default("default")), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, isArray: false, }); expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.string().optional().default("default"), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: "default", isArray: false, }); }); test("refine", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.string().refine(() => true), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: true, isArray: false, }); }); test("refine & default", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z .string() .refine(() => true) .default("default"), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: "default", isArray: false, }); }); test("refine & optional", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z .string() .refine(() => true) .optional(), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, isArray: false, }); }); }); describe("number", () => { test("", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.number().max(256), }), "name1")).toEqual({ type: "number", name: "name1", alias: "a", description: "description1", required: true, defaultValue: undefined, isArray: false, }); }); test("default", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.number().max(256).default(10), }), "name1")).toEqual({ type: "number", name: "name1", alias: "a", description: "description1", required: false, defaultValue: 10, isArray: false, }); }); }); describe("boolean", () => { test("", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.boolean(), }), "name1")).toEqual({ type: "boolean", name: "name1", alias: "a", description: "description1", required: true, defaultValue: undefined, isArray: false, }); }); }); describe("enum", () => { test("common", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.enum(["a", "b", "c"]), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: true, defaultValue: undefined, enumValues: ["a", "b", "c"], isArray: false, }); }); test("default", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.enum(["a", "b", "c"]).default("b"), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: "b", enumValues: ["a", "b", "c"], isArray: false, }); }); test("optional", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.enum(["a", "b", "c"]).optional(), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: undefined, enumValues: ["a", "b", "c"], isArray: false, }); }); test("define and default", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z .enum(["a", "b", "c"]) .refine(() => true) .default("b"), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: "b", enumValues: ["a", "b", "c"], isArray: false, }); }); }); describe("union", () => { test("string", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.union([zod_1.z.string(), zod_1.z.string()]), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: true, defaultValue: undefined, isArray: false, }); }); test("number", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.union([zod_1.z.number(), zod_1.z.number().max(256)]), }), "name1")).toEqual({ type: "number", name: "name1", alias: "a", description: "description1", required: true, default: undefined, isArray: false, }); }); test("boolean", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.union([zod_1.z.boolean(), zod_1.z.boolean()]), }), "name1")).toEqual({ type: "boolean", name: "name1", alias: "a", description: "description1", required: true, isArray: false, }); }); test("is not required when some elements have default value", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.union([zod_1.z.string(), zod_1.z.string().default("default1")]), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: undefined, isArray: false, }); }); test("is not required when some element are optional", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.union([zod_1.z.string(), zod_1.z.string().optional()]), }), "name1")).toEqual({ type: "string", name: "name1", alias: "a", description: "description1", required: false, defaultValue: undefined, isArray: false, }); }); test("refine union of refine element", () => { expect((0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z .union([ zod_1.z.boolean().refine(() => true), zod_1.z.boolean().default(true), ]) .refine(() => true), }), "name1")).toEqual({ type: "boolean", name: "name1", alias: "a", description: "description1", required: true, isArray: false, }); }); }); describe("throw runtime error on unsupported default value", () => { test("invalid type", () => { expect(() => { (0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.object({ a: zod_1.z.number() }).default({ a: 10 }), }), "name1"); }).toThrowError(new Error('Unsupported default value: {"a":10}')); }); test("invalid item type of array", () => { expect(() => { (0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z.array(zod_1.z.boolean()).default([true, false]), }), "name1"); }).toThrowError(new Error("Unsupported default value: [true,false]")); }); test("multiple type items of array", () => { expect(() => { (0, zod_util_1.optionToInternal)(createOption({ type: zod_1.z .array(zod_1.z.union([zod_1.z.string(), zod_1.z.number()])) .default([10, "false"]), }), "name1"); }).toThrowError(new Error('Unsupported default value: [10,"false"]')); }); }); }); describe("positionalArgumentToInternal()", () => { describe("array", () => { test("common", () => { expect((0, zod_util_1.positionalArgumentToInternal)({ name: "name1", type: zod_1.z.array(zod_1.z.string()).describe("zod_description"), description: "description1", })).toEqual({ type: "string", name: "name1", description: "description1", required: true, isArray: true, }); }); }); }); //# sourceMappingURL=zod_util.test.js.map