fi.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import * as util from "../core/util.js";
  2. const Sizable = {
  3. string: { unit: "merkkiä", subject: "merkkijonon" },
  4. file: { unit: "tavua", subject: "tiedoston" },
  5. array: { unit: "alkiota", subject: "listan" },
  6. set: { unit: "alkiota", subject: "joukon" },
  7. number: { unit: "", subject: "luvun" },
  8. bigint: { unit: "", subject: "suuren kokonaisluvun" },
  9. int: { unit: "", subject: "kokonaisluvun" },
  10. date: { unit: "", subject: "päivämäärän" },
  11. };
  12. function getSizing(origin) {
  13. return Sizable[origin] ?? null;
  14. }
  15. export const parsedType = (data) => {
  16. const t = typeof data;
  17. switch (t) {
  18. case "number": {
  19. return Number.isNaN(data) ? "NaN" : "number";
  20. }
  21. case "object": {
  22. if (Array.isArray(data)) {
  23. return "array";
  24. }
  25. if (data === null) {
  26. return "null";
  27. }
  28. if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
  29. return data.constructor.name;
  30. }
  31. }
  32. }
  33. return t;
  34. };
  35. const Nouns = {
  36. regex: "säännöllinen lauseke",
  37. email: "sähköpostiosoite",
  38. url: "URL-osoite",
  39. emoji: "emoji",
  40. uuid: "UUID",
  41. uuidv4: "UUIDv4",
  42. uuidv6: "UUIDv6",
  43. nanoid: "nanoid",
  44. guid: "GUID",
  45. cuid: "cuid",
  46. cuid2: "cuid2",
  47. ulid: "ULID",
  48. xid: "XID",
  49. ksuid: "KSUID",
  50. datetime: "ISO-aikaleima",
  51. date: "ISO-päivämäärä",
  52. time: "ISO-aika",
  53. duration: "ISO-kesto",
  54. ipv4: "IPv4-osoite",
  55. ipv6: "IPv6-osoite",
  56. cidrv4: "IPv4-alue",
  57. cidrv6: "IPv6-alue",
  58. base64: "base64-koodattu merkkijono",
  59. base64url: "base64url-koodattu merkkijono",
  60. json_string: "JSON-merkkijono",
  61. e164: "E.164-luku",
  62. jwt: "JWT",
  63. template_literal: "templaattimerkkijono",
  64. };
  65. const error = (issue) => {
  66. switch (issue.code) {
  67. case "invalid_type":
  68. return `Virheellinen tyyppi: odotettiin ${issue.expected}, oli ${parsedType(issue.input)}`;
  69. case "invalid_value":
  70. if (issue.values.length === 1)
  71. return `Virheellinen syöte: täytyy olla ${util.stringifyPrimitive(issue.values[0])}`;
  72. return `Virheellinen valinta: täytyy olla yksi seuraavista: ${util.joinValues(issue.values, "|")}`;
  73. case "too_big": {
  74. const adj = issue.inclusive ? "<=" : "<";
  75. const sizing = getSizing(issue.origin);
  76. if (sizing) {
  77. return `Liian suuri: ${sizing.subject} täytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();
  78. }
  79. return `Liian suuri: arvon täytyy olla ${adj}${issue.maximum.toString()}`;
  80. }
  81. case "too_small": {
  82. const adj = issue.inclusive ? ">=" : ">";
  83. const sizing = getSizing(issue.origin);
  84. if (sizing) {
  85. return `Liian pieni: ${sizing.subject} täytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();
  86. }
  87. return `Liian pieni: arvon täytyy olla ${adj}${issue.minimum.toString()}`;
  88. }
  89. case "invalid_format": {
  90. const _issue = issue;
  91. if (_issue.format === "starts_with")
  92. return `Virheellinen syöte: täytyy alkaa "${_issue.prefix}"`;
  93. if (_issue.format === "ends_with")
  94. return `Virheellinen syöte: täytyy loppua "${_issue.suffix}"`;
  95. if (_issue.format === "includes")
  96. return `Virheellinen syöte: täytyy sisältää "${_issue.includes}"`;
  97. if (_issue.format === "regex") {
  98. return `Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${_issue.pattern}`;
  99. }
  100. return `Virheellinen ${Nouns[_issue.format] ?? issue.format}`;
  101. }
  102. case "not_multiple_of":
  103. return `Virheellinen luku: täytyy olla luvun ${issue.divisor} monikerta`;
  104. case "unrecognized_keys":
  105. return `${issue.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${util.joinValues(issue.keys, ", ")}`;
  106. case "invalid_key":
  107. return "Virheellinen avain tietueessa";
  108. case "invalid_union":
  109. return "Virheellinen unioni";
  110. case "invalid_element":
  111. return "Virheellinen arvo joukossa";
  112. default:
  113. return `Virheellinen syöte`;
  114. }
  115. };
  116. export { error };
  117. export default function () {
  118. return {
  119. localeError: error,
  120. };
  121. }