api.js 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. import * as checks from "./checks.js";
  2. import * as registries from "./registries.js";
  3. import * as schemas from "./schemas.js";
  4. import * as util from "./util.js";
  5. // @__NO_SIDE_EFFECTS__
  6. export function _string(Class, params) {
  7. return new Class({
  8. type: "string",
  9. ...util.normalizeParams(params),
  10. });
  11. }
  12. // @__NO_SIDE_EFFECTS__
  13. export function _coercedString(Class, params) {
  14. return new Class({
  15. type: "string",
  16. coerce: true,
  17. ...util.normalizeParams(params),
  18. });
  19. }
  20. // @__NO_SIDE_EFFECTS__
  21. export function _email(Class, params) {
  22. return new Class({
  23. type: "string",
  24. format: "email",
  25. check: "string_format",
  26. abort: false,
  27. ...util.normalizeParams(params),
  28. });
  29. }
  30. // @__NO_SIDE_EFFECTS__
  31. export function _guid(Class, params) {
  32. return new Class({
  33. type: "string",
  34. format: "guid",
  35. check: "string_format",
  36. abort: false,
  37. ...util.normalizeParams(params),
  38. });
  39. }
  40. // @__NO_SIDE_EFFECTS__
  41. export function _uuid(Class, params) {
  42. return new Class({
  43. type: "string",
  44. format: "uuid",
  45. check: "string_format",
  46. abort: false,
  47. ...util.normalizeParams(params),
  48. });
  49. }
  50. // @__NO_SIDE_EFFECTS__
  51. export function _uuidv4(Class, params) {
  52. return new Class({
  53. type: "string",
  54. format: "uuid",
  55. check: "string_format",
  56. abort: false,
  57. version: "v4",
  58. ...util.normalizeParams(params),
  59. });
  60. }
  61. // @__NO_SIDE_EFFECTS__
  62. export function _uuidv6(Class, params) {
  63. return new Class({
  64. type: "string",
  65. format: "uuid",
  66. check: "string_format",
  67. abort: false,
  68. version: "v6",
  69. ...util.normalizeParams(params),
  70. });
  71. }
  72. // @__NO_SIDE_EFFECTS__
  73. export function _uuidv7(Class, params) {
  74. return new Class({
  75. type: "string",
  76. format: "uuid",
  77. check: "string_format",
  78. abort: false,
  79. version: "v7",
  80. ...util.normalizeParams(params),
  81. });
  82. }
  83. // @__NO_SIDE_EFFECTS__
  84. export function _url(Class, params) {
  85. return new Class({
  86. type: "string",
  87. format: "url",
  88. check: "string_format",
  89. abort: false,
  90. ...util.normalizeParams(params),
  91. });
  92. }
  93. // @__NO_SIDE_EFFECTS__
  94. export function _emoji(Class, params) {
  95. return new Class({
  96. type: "string",
  97. format: "emoji",
  98. check: "string_format",
  99. abort: false,
  100. ...util.normalizeParams(params),
  101. });
  102. }
  103. // @__NO_SIDE_EFFECTS__
  104. export function _nanoid(Class, params) {
  105. return new Class({
  106. type: "string",
  107. format: "nanoid",
  108. check: "string_format",
  109. abort: false,
  110. ...util.normalizeParams(params),
  111. });
  112. }
  113. // @__NO_SIDE_EFFECTS__
  114. export function _cuid(Class, params) {
  115. return new Class({
  116. type: "string",
  117. format: "cuid",
  118. check: "string_format",
  119. abort: false,
  120. ...util.normalizeParams(params),
  121. });
  122. }
  123. // @__NO_SIDE_EFFECTS__
  124. export function _cuid2(Class, params) {
  125. return new Class({
  126. type: "string",
  127. format: "cuid2",
  128. check: "string_format",
  129. abort: false,
  130. ...util.normalizeParams(params),
  131. });
  132. }
  133. // @__NO_SIDE_EFFECTS__
  134. export function _ulid(Class, params) {
  135. return new Class({
  136. type: "string",
  137. format: "ulid",
  138. check: "string_format",
  139. abort: false,
  140. ...util.normalizeParams(params),
  141. });
  142. }
  143. // @__NO_SIDE_EFFECTS__
  144. export function _xid(Class, params) {
  145. return new Class({
  146. type: "string",
  147. format: "xid",
  148. check: "string_format",
  149. abort: false,
  150. ...util.normalizeParams(params),
  151. });
  152. }
  153. // @__NO_SIDE_EFFECTS__
  154. export function _ksuid(Class, params) {
  155. return new Class({
  156. type: "string",
  157. format: "ksuid",
  158. check: "string_format",
  159. abort: false,
  160. ...util.normalizeParams(params),
  161. });
  162. }
  163. // @__NO_SIDE_EFFECTS__
  164. export function _ipv4(Class, params) {
  165. return new Class({
  166. type: "string",
  167. format: "ipv4",
  168. check: "string_format",
  169. abort: false,
  170. ...util.normalizeParams(params),
  171. });
  172. }
  173. // @__NO_SIDE_EFFECTS__
  174. export function _ipv6(Class, params) {
  175. return new Class({
  176. type: "string",
  177. format: "ipv6",
  178. check: "string_format",
  179. abort: false,
  180. ...util.normalizeParams(params),
  181. });
  182. }
  183. // @__NO_SIDE_EFFECTS__
  184. export function _mac(Class, params) {
  185. return new Class({
  186. type: "string",
  187. format: "mac",
  188. check: "string_format",
  189. abort: false,
  190. ...util.normalizeParams(params),
  191. });
  192. }
  193. // @__NO_SIDE_EFFECTS__
  194. export function _cidrv4(Class, params) {
  195. return new Class({
  196. type: "string",
  197. format: "cidrv4",
  198. check: "string_format",
  199. abort: false,
  200. ...util.normalizeParams(params),
  201. });
  202. }
  203. // @__NO_SIDE_EFFECTS__
  204. export function _cidrv6(Class, params) {
  205. return new Class({
  206. type: "string",
  207. format: "cidrv6",
  208. check: "string_format",
  209. abort: false,
  210. ...util.normalizeParams(params),
  211. });
  212. }
  213. // @__NO_SIDE_EFFECTS__
  214. export function _base64(Class, params) {
  215. return new Class({
  216. type: "string",
  217. format: "base64",
  218. check: "string_format",
  219. abort: false,
  220. ...util.normalizeParams(params),
  221. });
  222. }
  223. // @__NO_SIDE_EFFECTS__
  224. export function _base64url(Class, params) {
  225. return new Class({
  226. type: "string",
  227. format: "base64url",
  228. check: "string_format",
  229. abort: false,
  230. ...util.normalizeParams(params),
  231. });
  232. }
  233. // @__NO_SIDE_EFFECTS__
  234. export function _e164(Class, params) {
  235. return new Class({
  236. type: "string",
  237. format: "e164",
  238. check: "string_format",
  239. abort: false,
  240. ...util.normalizeParams(params),
  241. });
  242. }
  243. // @__NO_SIDE_EFFECTS__
  244. export function _jwt(Class, params) {
  245. return new Class({
  246. type: "string",
  247. format: "jwt",
  248. check: "string_format",
  249. abort: false,
  250. ...util.normalizeParams(params),
  251. });
  252. }
  253. export const TimePrecision = {
  254. Any: null,
  255. Minute: -1,
  256. Second: 0,
  257. Millisecond: 3,
  258. Microsecond: 6,
  259. };
  260. // @__NO_SIDE_EFFECTS__
  261. export function _isoDateTime(Class, params) {
  262. return new Class({
  263. type: "string",
  264. format: "datetime",
  265. check: "string_format",
  266. offset: false,
  267. local: false,
  268. precision: null,
  269. ...util.normalizeParams(params),
  270. });
  271. }
  272. // @__NO_SIDE_EFFECTS__
  273. export function _isoDate(Class, params) {
  274. return new Class({
  275. type: "string",
  276. format: "date",
  277. check: "string_format",
  278. ...util.normalizeParams(params),
  279. });
  280. }
  281. // @__NO_SIDE_EFFECTS__
  282. export function _isoTime(Class, params) {
  283. return new Class({
  284. type: "string",
  285. format: "time",
  286. check: "string_format",
  287. precision: null,
  288. ...util.normalizeParams(params),
  289. });
  290. }
  291. // @__NO_SIDE_EFFECTS__
  292. export function _isoDuration(Class, params) {
  293. return new Class({
  294. type: "string",
  295. format: "duration",
  296. check: "string_format",
  297. ...util.normalizeParams(params),
  298. });
  299. }
  300. // @__NO_SIDE_EFFECTS__
  301. export function _number(Class, params) {
  302. return new Class({
  303. type: "number",
  304. checks: [],
  305. ...util.normalizeParams(params),
  306. });
  307. }
  308. // @__NO_SIDE_EFFECTS__
  309. export function _coercedNumber(Class, params) {
  310. return new Class({
  311. type: "number",
  312. coerce: true,
  313. checks: [],
  314. ...util.normalizeParams(params),
  315. });
  316. }
  317. // @__NO_SIDE_EFFECTS__
  318. export function _int(Class, params) {
  319. return new Class({
  320. type: "number",
  321. check: "number_format",
  322. abort: false,
  323. format: "safeint",
  324. ...util.normalizeParams(params),
  325. });
  326. }
  327. // @__NO_SIDE_EFFECTS__
  328. export function _float32(Class, params) {
  329. return new Class({
  330. type: "number",
  331. check: "number_format",
  332. abort: false,
  333. format: "float32",
  334. ...util.normalizeParams(params),
  335. });
  336. }
  337. // @__NO_SIDE_EFFECTS__
  338. export function _float64(Class, params) {
  339. return new Class({
  340. type: "number",
  341. check: "number_format",
  342. abort: false,
  343. format: "float64",
  344. ...util.normalizeParams(params),
  345. });
  346. }
  347. // @__NO_SIDE_EFFECTS__
  348. export function _int32(Class, params) {
  349. return new Class({
  350. type: "number",
  351. check: "number_format",
  352. abort: false,
  353. format: "int32",
  354. ...util.normalizeParams(params),
  355. });
  356. }
  357. // @__NO_SIDE_EFFECTS__
  358. export function _uint32(Class, params) {
  359. return new Class({
  360. type: "number",
  361. check: "number_format",
  362. abort: false,
  363. format: "uint32",
  364. ...util.normalizeParams(params),
  365. });
  366. }
  367. // @__NO_SIDE_EFFECTS__
  368. export function _boolean(Class, params) {
  369. return new Class({
  370. type: "boolean",
  371. ...util.normalizeParams(params),
  372. });
  373. }
  374. // @__NO_SIDE_EFFECTS__
  375. export function _coercedBoolean(Class, params) {
  376. return new Class({
  377. type: "boolean",
  378. coerce: true,
  379. ...util.normalizeParams(params),
  380. });
  381. }
  382. // @__NO_SIDE_EFFECTS__
  383. export function _bigint(Class, params) {
  384. return new Class({
  385. type: "bigint",
  386. ...util.normalizeParams(params),
  387. });
  388. }
  389. // @__NO_SIDE_EFFECTS__
  390. export function _coercedBigint(Class, params) {
  391. return new Class({
  392. type: "bigint",
  393. coerce: true,
  394. ...util.normalizeParams(params),
  395. });
  396. }
  397. // @__NO_SIDE_EFFECTS__
  398. export function _int64(Class, params) {
  399. return new Class({
  400. type: "bigint",
  401. check: "bigint_format",
  402. abort: false,
  403. format: "int64",
  404. ...util.normalizeParams(params),
  405. });
  406. }
  407. // @__NO_SIDE_EFFECTS__
  408. export function _uint64(Class, params) {
  409. return new Class({
  410. type: "bigint",
  411. check: "bigint_format",
  412. abort: false,
  413. format: "uint64",
  414. ...util.normalizeParams(params),
  415. });
  416. }
  417. // @__NO_SIDE_EFFECTS__
  418. export function _symbol(Class, params) {
  419. return new Class({
  420. type: "symbol",
  421. ...util.normalizeParams(params),
  422. });
  423. }
  424. // @__NO_SIDE_EFFECTS__
  425. export function _undefined(Class, params) {
  426. return new Class({
  427. type: "undefined",
  428. ...util.normalizeParams(params),
  429. });
  430. }
  431. // @__NO_SIDE_EFFECTS__
  432. export function _null(Class, params) {
  433. return new Class({
  434. type: "null",
  435. ...util.normalizeParams(params),
  436. });
  437. }
  438. // @__NO_SIDE_EFFECTS__
  439. export function _any(Class) {
  440. return new Class({
  441. type: "any",
  442. });
  443. }
  444. // @__NO_SIDE_EFFECTS__
  445. export function _unknown(Class) {
  446. return new Class({
  447. type: "unknown",
  448. });
  449. }
  450. // @__NO_SIDE_EFFECTS__
  451. export function _never(Class, params) {
  452. return new Class({
  453. type: "never",
  454. ...util.normalizeParams(params),
  455. });
  456. }
  457. // @__NO_SIDE_EFFECTS__
  458. export function _void(Class, params) {
  459. return new Class({
  460. type: "void",
  461. ...util.normalizeParams(params),
  462. });
  463. }
  464. // @__NO_SIDE_EFFECTS__
  465. export function _date(Class, params) {
  466. return new Class({
  467. type: "date",
  468. ...util.normalizeParams(params),
  469. });
  470. }
  471. // @__NO_SIDE_EFFECTS__
  472. export function _coercedDate(Class, params) {
  473. return new Class({
  474. type: "date",
  475. coerce: true,
  476. ...util.normalizeParams(params),
  477. });
  478. }
  479. // @__NO_SIDE_EFFECTS__
  480. export function _nan(Class, params) {
  481. return new Class({
  482. type: "nan",
  483. ...util.normalizeParams(params),
  484. });
  485. }
  486. // @__NO_SIDE_EFFECTS__
  487. export function _lt(value, params) {
  488. return new checks.$ZodCheckLessThan({
  489. check: "less_than",
  490. ...util.normalizeParams(params),
  491. value,
  492. inclusive: false,
  493. });
  494. }
  495. // @__NO_SIDE_EFFECTS__
  496. export function _lte(value, params) {
  497. return new checks.$ZodCheckLessThan({
  498. check: "less_than",
  499. ...util.normalizeParams(params),
  500. value,
  501. inclusive: true,
  502. });
  503. }
  504. export {
  505. /** @deprecated Use `z.lte()` instead. */
  506. _lte as _max, };
  507. // @__NO_SIDE_EFFECTS__
  508. export function _gt(value, params) {
  509. return new checks.$ZodCheckGreaterThan({
  510. check: "greater_than",
  511. ...util.normalizeParams(params),
  512. value,
  513. inclusive: false,
  514. });
  515. }
  516. // @__NO_SIDE_EFFECTS__
  517. export function _gte(value, params) {
  518. return new checks.$ZodCheckGreaterThan({
  519. check: "greater_than",
  520. ...util.normalizeParams(params),
  521. value,
  522. inclusive: true,
  523. });
  524. }
  525. export {
  526. /** @deprecated Use `z.gte()` instead. */
  527. _gte as _min, };
  528. // @__NO_SIDE_EFFECTS__
  529. export function _positive(params) {
  530. return _gt(0, params);
  531. }
  532. // negative
  533. // @__NO_SIDE_EFFECTS__
  534. export function _negative(params) {
  535. return _lt(0, params);
  536. }
  537. // nonpositive
  538. // @__NO_SIDE_EFFECTS__
  539. export function _nonpositive(params) {
  540. return _lte(0, params);
  541. }
  542. // nonnegative
  543. // @__NO_SIDE_EFFECTS__
  544. export function _nonnegative(params) {
  545. return _gte(0, params);
  546. }
  547. // @__NO_SIDE_EFFECTS__
  548. export function _multipleOf(value, params) {
  549. return new checks.$ZodCheckMultipleOf({
  550. check: "multiple_of",
  551. ...util.normalizeParams(params),
  552. value,
  553. });
  554. }
  555. // @__NO_SIDE_EFFECTS__
  556. export function _maxSize(maximum, params) {
  557. return new checks.$ZodCheckMaxSize({
  558. check: "max_size",
  559. ...util.normalizeParams(params),
  560. maximum,
  561. });
  562. }
  563. // @__NO_SIDE_EFFECTS__
  564. export function _minSize(minimum, params) {
  565. return new checks.$ZodCheckMinSize({
  566. check: "min_size",
  567. ...util.normalizeParams(params),
  568. minimum,
  569. });
  570. }
  571. // @__NO_SIDE_EFFECTS__
  572. export function _size(size, params) {
  573. return new checks.$ZodCheckSizeEquals({
  574. check: "size_equals",
  575. ...util.normalizeParams(params),
  576. size,
  577. });
  578. }
  579. // @__NO_SIDE_EFFECTS__
  580. export function _maxLength(maximum, params) {
  581. const ch = new checks.$ZodCheckMaxLength({
  582. check: "max_length",
  583. ...util.normalizeParams(params),
  584. maximum,
  585. });
  586. return ch;
  587. }
  588. // @__NO_SIDE_EFFECTS__
  589. export function _minLength(minimum, params) {
  590. return new checks.$ZodCheckMinLength({
  591. check: "min_length",
  592. ...util.normalizeParams(params),
  593. minimum,
  594. });
  595. }
  596. // @__NO_SIDE_EFFECTS__
  597. export function _length(length, params) {
  598. return new checks.$ZodCheckLengthEquals({
  599. check: "length_equals",
  600. ...util.normalizeParams(params),
  601. length,
  602. });
  603. }
  604. // @__NO_SIDE_EFFECTS__
  605. export function _regex(pattern, params) {
  606. return new checks.$ZodCheckRegex({
  607. check: "string_format",
  608. format: "regex",
  609. ...util.normalizeParams(params),
  610. pattern,
  611. });
  612. }
  613. // @__NO_SIDE_EFFECTS__
  614. export function _lowercase(params) {
  615. return new checks.$ZodCheckLowerCase({
  616. check: "string_format",
  617. format: "lowercase",
  618. ...util.normalizeParams(params),
  619. });
  620. }
  621. // @__NO_SIDE_EFFECTS__
  622. export function _uppercase(params) {
  623. return new checks.$ZodCheckUpperCase({
  624. check: "string_format",
  625. format: "uppercase",
  626. ...util.normalizeParams(params),
  627. });
  628. }
  629. // @__NO_SIDE_EFFECTS__
  630. export function _includes(includes, params) {
  631. return new checks.$ZodCheckIncludes({
  632. check: "string_format",
  633. format: "includes",
  634. ...util.normalizeParams(params),
  635. includes,
  636. });
  637. }
  638. // @__NO_SIDE_EFFECTS__
  639. export function _startsWith(prefix, params) {
  640. return new checks.$ZodCheckStartsWith({
  641. check: "string_format",
  642. format: "starts_with",
  643. ...util.normalizeParams(params),
  644. prefix,
  645. });
  646. }
  647. // @__NO_SIDE_EFFECTS__
  648. export function _endsWith(suffix, params) {
  649. return new checks.$ZodCheckEndsWith({
  650. check: "string_format",
  651. format: "ends_with",
  652. ...util.normalizeParams(params),
  653. suffix,
  654. });
  655. }
  656. // @__NO_SIDE_EFFECTS__
  657. export function _property(property, schema, params) {
  658. return new checks.$ZodCheckProperty({
  659. check: "property",
  660. property,
  661. schema,
  662. ...util.normalizeParams(params),
  663. });
  664. }
  665. // @__NO_SIDE_EFFECTS__
  666. export function _mime(types, params) {
  667. return new checks.$ZodCheckMimeType({
  668. check: "mime_type",
  669. mime: types,
  670. ...util.normalizeParams(params),
  671. });
  672. }
  673. // @__NO_SIDE_EFFECTS__
  674. export function _overwrite(tx) {
  675. return new checks.$ZodCheckOverwrite({
  676. check: "overwrite",
  677. tx,
  678. });
  679. }
  680. // normalize
  681. // @__NO_SIDE_EFFECTS__
  682. export function _normalize(form) {
  683. return _overwrite((input) => input.normalize(form));
  684. }
  685. // trim
  686. // @__NO_SIDE_EFFECTS__
  687. export function _trim() {
  688. return _overwrite((input) => input.trim());
  689. }
  690. // toLowerCase
  691. // @__NO_SIDE_EFFECTS__
  692. export function _toLowerCase() {
  693. return _overwrite((input) => input.toLowerCase());
  694. }
  695. // toUpperCase
  696. // @__NO_SIDE_EFFECTS__
  697. export function _toUpperCase() {
  698. return _overwrite((input) => input.toUpperCase());
  699. }
  700. // slugify
  701. // @__NO_SIDE_EFFECTS__
  702. export function _slugify() {
  703. return _overwrite((input) => util.slugify(input));
  704. }
  705. // @__NO_SIDE_EFFECTS__
  706. export function _array(Class, element, params) {
  707. return new Class({
  708. type: "array",
  709. element,
  710. // get element() {
  711. // return element;
  712. // },
  713. ...util.normalizeParams(params),
  714. });
  715. }
  716. // @__NO_SIDE_EFFECTS__
  717. export function _union(Class, options, params) {
  718. return new Class({
  719. type: "union",
  720. options,
  721. ...util.normalizeParams(params),
  722. });
  723. }
  724. export function _xor(Class, options, params) {
  725. return new Class({
  726. type: "union",
  727. options,
  728. inclusive: false,
  729. ...util.normalizeParams(params),
  730. });
  731. }
  732. // @__NO_SIDE_EFFECTS__
  733. export function _discriminatedUnion(Class, discriminator, options, params) {
  734. return new Class({
  735. type: "union",
  736. options,
  737. discriminator,
  738. ...util.normalizeParams(params),
  739. });
  740. }
  741. // @__NO_SIDE_EFFECTS__
  742. export function _intersection(Class, left, right) {
  743. return new Class({
  744. type: "intersection",
  745. left,
  746. right,
  747. });
  748. }
  749. // export function _tuple(
  750. // Class: util.SchemaClass<schemas.$ZodTuple>,
  751. // items: [],
  752. // params?: string | $ZodTupleParams
  753. // ): schemas.$ZodTuple<[], null>;
  754. // @__NO_SIDE_EFFECTS__
  755. export function _tuple(Class, items, _paramsOrRest, _params) {
  756. const hasRest = _paramsOrRest instanceof schemas.$ZodType;
  757. const params = hasRest ? _params : _paramsOrRest;
  758. const rest = hasRest ? _paramsOrRest : null;
  759. return new Class({
  760. type: "tuple",
  761. items,
  762. rest,
  763. ...util.normalizeParams(params),
  764. });
  765. }
  766. // @__NO_SIDE_EFFECTS__
  767. export function _record(Class, keyType, valueType, params) {
  768. return new Class({
  769. type: "record",
  770. keyType,
  771. valueType,
  772. ...util.normalizeParams(params),
  773. });
  774. }
  775. // @__NO_SIDE_EFFECTS__
  776. export function _map(Class, keyType, valueType, params) {
  777. return new Class({
  778. type: "map",
  779. keyType,
  780. valueType,
  781. ...util.normalizeParams(params),
  782. });
  783. }
  784. // @__NO_SIDE_EFFECTS__
  785. export function _set(Class, valueType, params) {
  786. return new Class({
  787. type: "set",
  788. valueType,
  789. ...util.normalizeParams(params),
  790. });
  791. }
  792. // @__NO_SIDE_EFFECTS__
  793. export function _enum(Class, values, params) {
  794. const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
  795. // if (Array.isArray(values)) {
  796. // for (const value of values) {
  797. // entries[value] = value;
  798. // }
  799. // } else {
  800. // Object.assign(entries, values);
  801. // }
  802. // const entries: util.EnumLike = {};
  803. // for (const val of values) {
  804. // entries[val] = val;
  805. // }
  806. return new Class({
  807. type: "enum",
  808. entries,
  809. ...util.normalizeParams(params),
  810. });
  811. }
  812. // @__NO_SIDE_EFFECTS__
  813. /** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.
  814. *
  815. * ```ts
  816. * enum Colors { red, green, blue }
  817. * z.enum(Colors);
  818. * ```
  819. */
  820. export function _nativeEnum(Class, entries, params) {
  821. return new Class({
  822. type: "enum",
  823. entries,
  824. ...util.normalizeParams(params),
  825. });
  826. }
  827. // @__NO_SIDE_EFFECTS__
  828. export function _literal(Class, value, params) {
  829. return new Class({
  830. type: "literal",
  831. values: Array.isArray(value) ? value : [value],
  832. ...util.normalizeParams(params),
  833. });
  834. }
  835. // @__NO_SIDE_EFFECTS__
  836. export function _file(Class, params) {
  837. return new Class({
  838. type: "file",
  839. ...util.normalizeParams(params),
  840. });
  841. }
  842. // @__NO_SIDE_EFFECTS__
  843. export function _transform(Class, fn) {
  844. return new Class({
  845. type: "transform",
  846. transform: fn,
  847. });
  848. }
  849. // @__NO_SIDE_EFFECTS__
  850. export function _optional(Class, innerType) {
  851. return new Class({
  852. type: "optional",
  853. innerType,
  854. });
  855. }
  856. // @__NO_SIDE_EFFECTS__
  857. export function _nullable(Class, innerType) {
  858. return new Class({
  859. type: "nullable",
  860. innerType,
  861. });
  862. }
  863. // @__NO_SIDE_EFFECTS__
  864. export function _default(Class, innerType, defaultValue) {
  865. return new Class({
  866. type: "default",
  867. innerType,
  868. get defaultValue() {
  869. return typeof defaultValue === "function" ? defaultValue() : util.shallowClone(defaultValue);
  870. },
  871. });
  872. }
  873. // @__NO_SIDE_EFFECTS__
  874. export function _nonoptional(Class, innerType, params) {
  875. return new Class({
  876. type: "nonoptional",
  877. innerType,
  878. ...util.normalizeParams(params),
  879. });
  880. }
  881. // @__NO_SIDE_EFFECTS__
  882. export function _success(Class, innerType) {
  883. return new Class({
  884. type: "success",
  885. innerType,
  886. });
  887. }
  888. // @__NO_SIDE_EFFECTS__
  889. export function _catch(Class, innerType, catchValue) {
  890. return new Class({
  891. type: "catch",
  892. innerType,
  893. catchValue: (typeof catchValue === "function" ? catchValue : () => catchValue),
  894. });
  895. }
  896. // @__NO_SIDE_EFFECTS__
  897. export function _pipe(Class, in_, out) {
  898. return new Class({
  899. type: "pipe",
  900. in: in_,
  901. out,
  902. });
  903. }
  904. // @__NO_SIDE_EFFECTS__
  905. export function _readonly(Class, innerType) {
  906. return new Class({
  907. type: "readonly",
  908. innerType,
  909. });
  910. }
  911. // @__NO_SIDE_EFFECTS__
  912. export function _templateLiteral(Class, parts, params) {
  913. return new Class({
  914. type: "template_literal",
  915. parts,
  916. ...util.normalizeParams(params),
  917. });
  918. }
  919. // @__NO_SIDE_EFFECTS__
  920. export function _lazy(Class, getter) {
  921. return new Class({
  922. type: "lazy",
  923. getter,
  924. });
  925. }
  926. // @__NO_SIDE_EFFECTS__
  927. export function _promise(Class, innerType) {
  928. return new Class({
  929. type: "promise",
  930. innerType,
  931. });
  932. }
  933. // @__NO_SIDE_EFFECTS__
  934. export function _custom(Class, fn, _params) {
  935. const norm = util.normalizeParams(_params);
  936. norm.abort ?? (norm.abort = true); // default to abort:false
  937. const schema = new Class({
  938. type: "custom",
  939. check: "custom",
  940. fn: fn,
  941. ...norm,
  942. });
  943. return schema;
  944. }
  945. // same as _custom but defaults to abort:false
  946. // @__NO_SIDE_EFFECTS__
  947. export function _refine(Class, fn, _params) {
  948. const schema = new Class({
  949. type: "custom",
  950. check: "custom",
  951. fn: fn,
  952. ...util.normalizeParams(_params),
  953. });
  954. return schema;
  955. }
  956. // @__NO_SIDE_EFFECTS__
  957. export function _superRefine(fn) {
  958. const ch = _check((payload) => {
  959. payload.addIssue = (issue) => {
  960. if (typeof issue === "string") {
  961. payload.issues.push(util.issue(issue, payload.value, ch._zod.def));
  962. }
  963. else {
  964. // for Zod 3 backwards compatibility
  965. const _issue = issue;
  966. if (_issue.fatal)
  967. _issue.continue = false;
  968. _issue.code ?? (_issue.code = "custom");
  969. _issue.input ?? (_issue.input = payload.value);
  970. _issue.inst ?? (_issue.inst = ch);
  971. _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...
  972. payload.issues.push(util.issue(_issue));
  973. }
  974. };
  975. return fn(payload.value, payload);
  976. });
  977. return ch;
  978. }
  979. // @__NO_SIDE_EFFECTS__
  980. export function _check(fn, params) {
  981. const ch = new checks.$ZodCheck({
  982. check: "custom",
  983. ...util.normalizeParams(params),
  984. });
  985. ch._zod.check = fn;
  986. return ch;
  987. }
  988. // @__NO_SIDE_EFFECTS__
  989. export function describe(description) {
  990. const ch = new checks.$ZodCheck({ check: "describe" });
  991. ch._zod.onattach = [
  992. (inst) => {
  993. const existing = registries.globalRegistry.get(inst) ?? {};
  994. registries.globalRegistry.add(inst, { ...existing, description });
  995. },
  996. ];
  997. ch._zod.check = () => { }; // no-op check
  998. return ch;
  999. }
  1000. // @__NO_SIDE_EFFECTS__
  1001. export function meta(metadata) {
  1002. const ch = new checks.$ZodCheck({ check: "meta" });
  1003. ch._zod.onattach = [
  1004. (inst) => {
  1005. const existing = registries.globalRegistry.get(inst) ?? {};
  1006. registries.globalRegistry.add(inst, { ...existing, ...metadata });
  1007. },
  1008. ];
  1009. ch._zod.check = () => { }; // no-op check
  1010. return ch;
  1011. }
  1012. // @__NO_SIDE_EFFECTS__
  1013. export function _stringbool(Classes, _params) {
  1014. const params = util.normalizeParams(_params);
  1015. let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"];
  1016. let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"];
  1017. if (params.case !== "sensitive") {
  1018. truthyArray = truthyArray.map((v) => (typeof v === "string" ? v.toLowerCase() : v));
  1019. falsyArray = falsyArray.map((v) => (typeof v === "string" ? v.toLowerCase() : v));
  1020. }
  1021. const truthySet = new Set(truthyArray);
  1022. const falsySet = new Set(falsyArray);
  1023. const _Codec = Classes.Codec ?? schemas.$ZodCodec;
  1024. const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;
  1025. const _String = Classes.String ?? schemas.$ZodString;
  1026. const stringSchema = new _String({ type: "string", error: params.error });
  1027. const booleanSchema = new _Boolean({ type: "boolean", error: params.error });
  1028. const codec = new _Codec({
  1029. type: "pipe",
  1030. in: stringSchema,
  1031. out: booleanSchema,
  1032. transform: ((input, payload) => {
  1033. let data = input;
  1034. if (params.case !== "sensitive")
  1035. data = data.toLowerCase();
  1036. if (truthySet.has(data)) {
  1037. return true;
  1038. }
  1039. else if (falsySet.has(data)) {
  1040. return false;
  1041. }
  1042. else {
  1043. payload.issues.push({
  1044. code: "invalid_value",
  1045. expected: "stringbool",
  1046. values: [...truthySet, ...falsySet],
  1047. input: payload.value,
  1048. inst: codec,
  1049. continue: false,
  1050. });
  1051. return {};
  1052. }
  1053. }),
  1054. reverseTransform: ((input, _payload) => {
  1055. if (input === true) {
  1056. return truthyArray[0] || "true";
  1057. }
  1058. else {
  1059. return falsyArray[0] || "false";
  1060. }
  1061. }),
  1062. error: params.error,
  1063. });
  1064. return codec;
  1065. }
  1066. // @__NO_SIDE_EFFECTS__
  1067. export function _stringFormat(Class, format, fnOrRegex, _params = {}) {
  1068. const params = util.normalizeParams(_params);
  1069. const def = {
  1070. ...util.normalizeParams(_params),
  1071. check: "string_format",
  1072. type: "string",
  1073. format,
  1074. fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val),
  1075. ...params,
  1076. };
  1077. if (fnOrRegex instanceof RegExp) {
  1078. def.pattern = fnOrRegex;
  1079. }
  1080. const inst = new Class(def);
  1081. return inst;
  1082. }