{ "version": 3, "sources": ["../../../../../dev/foundry-helpers/node_modules/remeda/dist/index.js", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/lazyDataLastImpl.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/purry.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/add.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/addProp.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/allPass.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/anyPass.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/capitalize.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/withPrecision.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/ceil.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/chunk.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/clamp.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/clone.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/concat.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/purryOn.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/conditional.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/constant.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/countBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/debounce.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/defaultTo.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/utilityEvaluators.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/pipe.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/purryFromLazy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/difference.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/differenceWith.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/divide.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/doNothing.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/drop.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/hasAtLeast.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/swapInPlace.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/heap.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/purryOrderRules.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/dropFirstBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/dropLast.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/dropLastWhile.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/dropWhile.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/endsWith.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/entries.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/evolve.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/filter.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/toSingle.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/find.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/findIndex.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/findLast.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/findLastIndex.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/first.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/firstBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/flat.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/flatMap.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/floor.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/forEach.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/forEachObj.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/fromEntries.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/fromKeys.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/funnel.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/groupBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/groupByProp.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isDeepEqual.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/hasSubObject.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/identity.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/indexBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/intersection.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/intersectionWith.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/invert.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isArray.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isBigInt.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isBoolean.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isDate.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isDefined.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isEmpty.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isEmptyish.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isError.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isFunction.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isIncludedIn.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isNonNull.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isNonNullish.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isNot.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isNullish.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isNumber.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isObjectType.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isPlainObject.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isPromise.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isShallowEqual.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isStrictEqual.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isString.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isSymbol.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/isTruthy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/join.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/keys.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/last.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/length.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/map.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mapKeys.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mapToObj.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mapValues.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mapWithFeedback.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sum.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mean.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/meanBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/median.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/merge.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mergeAll.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/mergeDeep.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/multiply.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/quickSelect.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/nthBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/objOf.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/omit.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/omitBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/once.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/only.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/partialBind.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/partialLastBind.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/partition.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/pathOr.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/pick.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/pickBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/piped.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/product.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/prop.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/pullObject.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/randomBigInt.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/randomInteger.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/randomString.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/range.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/rankBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/reduce.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/reverse.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/round.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sample.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/set.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/setPath.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/shuffle.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sliceString.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sort.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sortBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/binarySearchCutoffIndex.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sortedIndex.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sortedIndexBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sortedIndexWith.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sortedLastIndex.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sortedLastIndexBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/splice.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/split.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/splitAt.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/splitWhen.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/startsWith.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/stringToPath.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/subtract.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/sumBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/swapIndices.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/swapProps.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/take.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/takeFirstBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/takeLast.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/takeLastWhile.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/takeWhile.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/tap.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/times.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/internal/words.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/toCamelCase.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/toKebabCase.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/toLowerCase.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/toSnakeCase.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/toTitleCase.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/toUpperCase.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/truncate.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/uncapitalize.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/unique.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/uniqueBy.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/uniqueWith.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/values.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/when.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/zip.ts", "../../../../../dev/foundry-helpers/node_modules/remeda/src/zipWith.ts", "../../../../../dev/foundry-helpers/node_modules/zod/index.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/external.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/index.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/core.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/util.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/errors.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/parse.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/regexes.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/checks.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/doc.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/versions.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/schemas.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/index.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ar.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/az.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/be.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/bg.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ca.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/cs.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/da.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/de.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/en.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/eo.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/es.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/fa.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/fi.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/fr.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/fr-CA.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/he.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/hu.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/hy.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/id.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/is.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/it.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ja.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ka.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/km.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/kh.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ko.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/lt.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/mk.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ms.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/nl.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/no.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ota.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ps.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/pl.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/pt.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ru.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/sl.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/sv.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ta.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/th.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/tr.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/uk.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ua.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/ur.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/uz.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/vi.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/zh-CN.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/zh-TW.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/locales/yo.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/registries.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/api.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/to-json-schema.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/json-schema-processors.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/json-schema-generator.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/core/json-schema.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/schemas.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/checks.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/iso.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/errors.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/parse.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/compat.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/from-json-schema.js", "../../../../../dev/foundry-helpers/node_modules/zod/v4/classic/coerce.js", "../../../../../dev/foundry-helpers/dist/_zod/document-id.js", "../../../../../dev/foundry-helpers/dist/_zod/document-uuid.js", "../../../../../dev/foundry-helpers/dist/_zod/spellcasting.js", "../../../../../dev/foundry-helpers/dist/system.js", "../../../../../dev/foundry-helpers/dist/module.js", "../../../../../dev/foundry-helpers/dist/action.js", "../../../../../dev/foundry-helpers/dist/actor.js", "../../../../../dev/foundry-helpers/dist/application.js", "../../../../../dev/foundry-helpers/dist/chat.js", "../../../../../dev/foundry-helpers/dist/compendium.js", "../../../../../dev/foundry-helpers/dist/dialog.js", "../../../../../dev/foundry-helpers/dist/flags.js", "../../../../../dev/foundry-helpers/dist/handlebars.js", "../../../../../dev/foundry-helpers/dist/html.js", "../../../../../dev/foundry-helpers/dist/item.js", "../../../../../dev/foundry-helpers/dist/libwrapper.js", "../../../../../dev/foundry-helpers/dist/localize.js", "../../../../../dev/foundry-helpers/dist/object.js", "../../../../../dev/foundry-helpers/dist/pf2e/difficulty-class.js", "../../../../../dev/foundry-helpers/dist/pf2e/identify.js", "../../../../../dev/foundry-helpers/dist/pf2e/inventory.js", "../../../../../dev/foundry-helpers/dist/pf2e/misc.js", "../../../../../dev/foundry-helpers/dist/pf2e/spell.js", "../../../../../dev/foundry-helpers/dist/pf2e/spell-consumable.js", "../../../../../dev/foundry-helpers/dist/pf2e/spellcasting.js", "../../../../../dev/foundry-helpers/dist/rules.js", "../../../../../dev/foundry-helpers/dist/settings.js", "../../../../../dev/foundry-helpers/dist/skill.js", "../../../../../dev/foundry-helpers/dist/spellcasting.js", "../../../../../dev/foundry-helpers/dist/time.js", "../../../../../dev/foundry-helpers/dist/user.js", "../../../../../dev/foundry-helpers/dist/utils.js", "../src/daily.ts", "../src/spellcasting.ts", "../src/utils.ts", "../src/custom/_utils.ts", "../src/custom/application.ts", "../src/data/adaptive-talent.ts", "../src/data/ancestral-longevity.ts", "../src/homebrew.ts", "../src/data/animist.ts", "../src/data/blade-ally.ts", "../src/data/ceremonial-knife.ts", "../src/data/combat-flexibility.ts", "../src/data/commander-tactics.ts", "../src/data/core-memories.ts", "../src/data/experimental-spellshaping.ts", "../src/data/familiar.ts", "../src/data/language.ts", "../src/data/mind-smith.ts", "../src/data/rations.ts", "../src/data/resistance.ts", "../src/data/root-magic.ts", "../src/data/scroll.ts", "../src/data/scroll-adept.ts", "../src/data/skill.ts", "../src/data/staves/data.ts", "../src/data/staves/_utils.ts", "../src/data/staves/daily.ts", "../src/data/staves/spellcasting.ts", "../src/data/thaumaturge-tome.ts", "../src/data/trickster-ace.ts", "../src/data/wandering.ts", "../src/data/warshard.ts", "../src/custom/custom.ts", "../src/dailies.ts", "../src/interface/application.ts", "../src/interface/config.ts", "../src/interface/drop.ts", "../src/interface/process.ts", "../src/actor/_utils.ts", "../src/actor/actor.ts", "../src/actor/character.ts", "../src/actor/sheet/_utils.ts", "../src/actor/sheet/character/actions.ts", "../src/actor/sheet/character/spells/animist.ts", "../src/actor/sheet/character/spells/staff.ts", "../src/actor/sheet/character/spells/main.ts", "../src/actor/sheet/character/main.ts", "../src/actor/sheet/familiar.ts", "../src/actor/sheet/npc.ts", "../src/settings.ts", "../src/rest.ts", "../src/wrappers.ts", "../src/main.ts"], "sourcesContent": ["import{purry as e}from\"./purry.js\";import{add as t}from\"./add.js\";import{addProp as n}from\"./addProp.js\";import{allPass as r}from\"./allPass.js\";import{anyPass as i}from\"./anyPass.js\";import{capitalize as a}from\"./capitalize.js\";import{ceil as o}from\"./ceil.js\";import{chunk as s}from\"./chunk.js\";import{clamp as c}from\"./clamp.js\";import{clone as l}from\"./clone.js\";import{concat as u}from\"./concat.js\";import{conditional as d}from\"./conditional.js\";import{constant as f}from\"./constant.js\";import{countBy as p}from\"./countBy.js\";import{debounce as m}from\"./debounce.js\";import{defaultTo as h}from\"./defaultTo.js\";import{pipe as g}from\"./pipe.js\";import{difference as _}from\"./difference.js\";import{differenceWith as v}from\"./differenceWith.js\";import{divide as y}from\"./divide.js\";import{doNothing as b}from\"./doNothing.js\";import{drop as x}from\"./drop.js\";import{hasAtLeast as S}from\"./hasAtLeast.js\";import{dropFirstBy as C}from\"./dropFirstBy.js\";import{dropLast as w}from\"./dropLast.js\";import{dropLastWhile as T}from\"./dropLastWhile.js\";import{dropWhile as E}from\"./dropWhile.js\";import{endsWith as D}from\"./endsWith.js\";import{entries as O}from\"./entries.js\";import{evolve as k}from\"./evolve.js\";import{filter as A}from\"./filter.js\";import{find as j}from\"./find.js\";import{findIndex as M}from\"./findIndex.js\";import{findLast as N}from\"./findLast.js\";import{findLastIndex as P}from\"./findLastIndex.js\";import{first as F}from\"./first.js\";import{firstBy as I}from\"./firstBy.js\";import{flat as L}from\"./flat.js\";import{flatMap as R}from\"./flatMap.js\";import{floor as z}from\"./floor.js\";import{forEach as B}from\"./forEach.js\";import{forEachObj as V}from\"./forEachObj.js\";import{fromEntries as H}from\"./fromEntries.js\";import{fromKeys as U}from\"./fromKeys.js\";import{funnel as W}from\"./funnel.js\";import{groupBy as G}from\"./groupBy.js\";import{groupByProp as K}from\"./groupByProp.js\";import{isDeepEqual as q}from\"./isDeepEqual.js\";import{hasSubObject as J}from\"./hasSubObject.js\";import{identity as Y}from\"./identity.js\";import{indexBy as X}from\"./indexBy.js\";import{intersection as Z}from\"./intersection.js\";import{intersectionWith as Q}from\"./intersectionWith.js\";import{invert as $}from\"./invert.js\";import{isArray as ee}from\"./isArray.js\";import{isBigInt as te}from\"./isBigInt.js\";import{isBoolean as ne}from\"./isBoolean.js\";import{isDate as re}from\"./isDate.js\";import{isDefined as ie}from\"./isDefined.js\";import{isEmpty as ae}from\"./isEmpty.js\";import{isEmptyish as oe}from\"./isEmptyish.js\";import{isError as se}from\"./isError.js\";import{isFunction as ce}from\"./isFunction.js\";import{isIncludedIn as le}from\"./isIncludedIn.js\";import{isNonNull as ue}from\"./isNonNull.js\";import{isNonNullish as de}from\"./isNonNullish.js\";import{isNot as fe}from\"./isNot.js\";import{isNullish as pe}from\"./isNullish.js\";import{isNumber as me}from\"./isNumber.js\";import{isObjectType as he}from\"./isObjectType.js\";import{isPlainObject as ge}from\"./isPlainObject.js\";import{isPromise as _e}from\"./isPromise.js\";import{isShallowEqual as ve}from\"./isShallowEqual.js\";import{isStrictEqual as ye}from\"./isStrictEqual.js\";import{isString as be}from\"./isString.js\";import{isSymbol as xe}from\"./isSymbol.js\";import{isTruthy as Se}from\"./isTruthy.js\";import{join as Ce}from\"./join.js\";import{keys as we}from\"./keys.js\";import{last as Te}from\"./last.js\";import{length as Ee}from\"./length.js\";import{map as De}from\"./map.js\";import{mapKeys as Oe}from\"./mapKeys.js\";import{mapToObj as ke}from\"./mapToObj.js\";import{mapValues as Ae}from\"./mapValues.js\";import{mapWithFeedback as je}from\"./mapWithFeedback.js\";import{sum as Me}from\"./sum.js\";import{mean as Ne}from\"./mean.js\";import{meanBy as Pe}from\"./meanBy.js\";import{median as Fe}from\"./median.js\";import{merge as Ie}from\"./merge.js\";import{mergeAll as Le}from\"./mergeAll.js\";import{mergeDeep as Re}from\"./mergeDeep.js\";import{multiply as ze}from\"./multiply.js\";import{nthBy as Be}from\"./nthBy.js\";import{objOf as Ve}from\"./objOf.js\";import{omit as He}from\"./omit.js\";import{omitBy as Ue}from\"./omitBy.js\";import{once as We}from\"./once.js\";import{only as Ge}from\"./only.js\";import{partialBind as Ke}from\"./partialBind.js\";import{partialLastBind as qe}from\"./partialLastBind.js\";import{partition as Je}from\"./partition.js\";import{pathOr as Ye}from\"./pathOr.js\";import{pick as Xe}from\"./pick.js\";import{pickBy as Ze}from\"./pickBy.js\";import{piped as Qe}from\"./piped.js\";import{product as $e}from\"./product.js\";import{prop as et}from\"./prop.js\";import{pullObject as tt}from\"./pullObject.js\";import{randomBigInt as nt}from\"./randomBigInt.js\";import{randomInteger as rt}from\"./randomInteger.js\";import{randomString as it}from\"./randomString.js\";import{range as at}from\"./range.js\";import{rankBy as ot}from\"./rankBy.js\";import{reduce as st}from\"./reduce.js\";import{reverse as ct}from\"./reverse.js\";import{round as lt}from\"./round.js\";import{sample as ut}from\"./sample.js\";import{set as dt}from\"./set.js\";import{setPath as ft}from\"./setPath.js\";import{shuffle as pt}from\"./shuffle.js\";import{sliceString as mt}from\"./sliceString.js\";import{sort as ht}from\"./sort.js\";import{sortBy as gt}from\"./sortBy.js\";import{sortedIndex as _t}from\"./sortedIndex.js\";import{sortedIndexBy as vt}from\"./sortedIndexBy.js\";import{sortedIndexWith as yt}from\"./sortedIndexWith.js\";import{sortedLastIndex as bt}from\"./sortedLastIndex.js\";import{sortedLastIndexBy as xt}from\"./sortedLastIndexBy.js\";import{splice as St}from\"./splice.js\";import{split as Ct}from\"./split.js\";import{splitAt as wt}from\"./splitAt.js\";import{splitWhen as Tt}from\"./splitWhen.js\";import{startsWith as Et}from\"./startsWith.js\";import{stringToPath as Dt}from\"./stringToPath.js\";import{subtract as Ot}from\"./subtract.js\";import{sumBy as kt}from\"./sumBy.js\";import{swapIndices as At}from\"./swapIndices.js\";import{swapProps as jt}from\"./swapProps.js\";import{take as Mt}from\"./take.js\";import{takeFirstBy as Nt}from\"./takeFirstBy.js\";import{takeLast as Pt}from\"./takeLast.js\";import{takeLastWhile as Ft}from\"./takeLastWhile.js\";import{takeWhile as It}from\"./takeWhile.js\";import{tap as Lt}from\"./tap.js\";import{times as Rt}from\"./times.js\";import{toCamelCase as zt}from\"./toCamelCase.js\";import{toKebabCase as Bt}from\"./toKebabCase.js\";import{toLowerCase as Vt}from\"./toLowerCase.js\";import{toSnakeCase as Ht}from\"./toSnakeCase.js\";import{toTitleCase as Ut}from\"./toTitleCase.js\";import{toUpperCase as Wt}from\"./toUpperCase.js\";import{truncate as Gt}from\"./truncate.js\";import{uncapitalize as Kt}from\"./uncapitalize.js\";import{unique as qt}from\"./unique.js\";import{uniqueBy as Jt}from\"./uniqueBy.js\";import{uniqueWith as Yt}from\"./uniqueWith.js\";import{values as Xt}from\"./values.js\";import{when as Zt}from\"./when.js\";import{zip as Qt}from\"./zip.js\";import{zipWith as $t}from\"./zipWith.js\";export{t as add,n as addProp,r as allPass,i as anyPass,a as capitalize,o as ceil,s as chunk,c as clamp,l as clone,u as concat,d as conditional,f as constant,p as countBy,m as debounce,h as defaultTo,_ as difference,v as differenceWith,y as divide,b as doNothing,x as drop,C as dropFirstBy,w as dropLast,T as dropLastWhile,E as dropWhile,D as endsWith,O as entries,k as evolve,A as filter,j as find,M as findIndex,N as findLast,P as findLastIndex,F as first,I as firstBy,L as flat,R as flatMap,z as floor,B as forEach,V as forEachObj,H as fromEntries,U as fromKeys,W as funnel,G as groupBy,K as groupByProp,S as hasAtLeast,J as hasSubObject,Y as identity,X as indexBy,Z as intersection,Q as intersectionWith,$ as invert,ee as isArray,te as isBigInt,ne as isBoolean,re as isDate,q as isDeepEqual,ie as isDefined,ae as isEmpty,oe as isEmptyish,se as isError,ce as isFunction,le as isIncludedIn,ue as isNonNull,de as isNonNullish,fe as isNot,pe as isNullish,me as isNumber,he as isObjectType,ge as isPlainObject,_e as isPromise,ve as isShallowEqual,ye as isStrictEqual,be as isString,xe as isSymbol,Se as isTruthy,Ce as join,we as keys,Te as last,Ee as length,De as map,Oe as mapKeys,ke as mapToObj,Ae as mapValues,je as mapWithFeedback,Ne as mean,Pe as meanBy,Fe as median,Ie as merge,Le as mergeAll,Re as mergeDeep,ze as multiply,Be as nthBy,Ve as objOf,He as omit,Ue as omitBy,We as once,Ge as only,Ke as partialBind,qe as partialLastBind,Je as partition,Ye as pathOr,Xe as pick,Ze as pickBy,g as pipe,Qe as piped,$e as product,et as prop,tt as pullObject,e as purry,nt as randomBigInt,rt as randomInteger,it as randomString,at as range,ot as rankBy,st as reduce,ct as reverse,lt as round,ut as sample,dt as set,ft as setPath,pt as shuffle,mt as sliceString,ht as sort,gt as sortBy,_t as sortedIndex,vt as sortedIndexBy,yt as sortedIndexWith,bt as sortedLastIndex,xt as sortedLastIndexBy,St as splice,Ct as split,wt as splitAt,Tt as splitWhen,Et as startsWith,Dt as stringToPath,Ot as subtract,Me as sum,kt as sumBy,At as swapIndices,jt as swapProps,Mt as take,Nt as takeFirstBy,Pt as takeLast,Ft as takeLastWhile,It as takeWhile,Lt as tap,Rt as times,zt as toCamelCase,Bt as toKebabCase,Vt as toLowerCase,Ht as toSnakeCase,Ut as toTitleCase,Wt as toUpperCase,Gt as truncate,Kt as uncapitalize,qt as unique,Jt as uniqueBy,Yt as uniqueWith,Xt as values,Zt as when,Qt as zip,$t as zipWith};", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { LazyEvaluator } from \"./types/LazyEvaluator\";\nimport type { StrictFunction } from \"./types/StrictFunction\";\n\n/**\n * Use this helper function to build the data last implementation together with\n * a lazy implementation. Use this when you need to build your own purrying\n * logic when you want to decide between dataFirst and dataLast on something\n * that isn't the number of arguments provided. This is useful for implementing\n * functions with optional or variadic arguments.\n */\nexport function lazyDataLastImpl(\n fn: StrictFunction,\n args: readonly unknown[],\n lazy?: (...args: any) => LazyEvaluator,\n // TODO: We can probably provide better typing to the return type...\n): unknown {\n // @ts-expect-error [ts2345] -- This error is accurate because we don't know\n // anything about `fn` so can't ensure that we are passing the correct\n // arguments to it, we just have to trust that the caller knows what they are\n // doing.\n const dataLast = (data: unknown): unknown => fn(data, ...args);\n\n return lazy === undefined\n ? dataLast\n : Object.assign(dataLast, { lazy, lazyArgs: args });\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { lazyDataLastImpl } from \"./internal/lazyDataLastImpl\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport type { StrictFunction } from \"./internal/types/StrictFunction\";\n\n/**\n * Creates a function with `dataFirst` and `dataLast` signatures.\n *\n * `purry` is a dynamic function and it's not type safe. It should be wrapped by\n * a function that have proper typings. Refer to the example below for correct\n * usage.\n *\n * !IMPORTANT: functions that simply call `purry` and return the result (like\n * almost all functions in this library) should return `unknown` themselves if\n * an explicit return type is required. This is because we currently don't\n * provide a generic return type that is built from the input function, and\n * crafting one manually isn't worthwhile as we rely on function declaration\n * overloading to combine the types for dataFirst and dataLast invocations!\n *\n * @param fn - The function to purry.\n * @param args - The arguments.\n * @param lazy - A lazy version of the function to purry.\n * @signature purry(fn, args);\n * @example\n * function _findIndex(array, fn) {\n * for (let i = 0; i < array.length; i++) {\n * if (fn(array[i])) {\n * return i;\n * }\n * }\n * return -1;\n * }\n *\n * // data-first\n * function findIndex(array: T[], fn: (item: T) => boolean): number;\n *\n * // data-last\n * function findIndex(fn: (item: T) => boolean): (array: T[]) => number;\n *\n * function findIndex(...args: unknown[]) {\n * return purry(_findIndex, args);\n * }\n * @category Function\n */\nexport function purry(\n fn: StrictFunction,\n args: readonly unknown[],\n lazy?: (...args: any) => LazyEvaluator,\n): unknown {\n const diff = fn.length - args.length;\n if (diff === 0) {\n // @ts-expect-error [ts2345] -- This error is accurate because we don't know\n // anything about `fn` so can't ensure that we are passing the correct\n // arguments to it, we just have to trust that the caller knows what they\n // are doing.\n return fn(...args);\n }\n\n if (diff === 1) {\n return lazyDataLastImpl(fn, args, lazy);\n }\n\n throw new Error(\"Wrong number of arguments\");\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Adds two numbers.\n *\n * @param value - The number.\n * @param addend - The number to add to the value.\n * @signature\n * add(value, addend);\n * @example\n * add(10, 5) // => 15\n * add(10, -5) // => 5\n * @dataFirst\n * @category Number\n */\nexport function add(value: bigint, addend: bigint): bigint;\nexport function add(value: number, addend: number): number;\n\n/**\n * Adds two numbers.\n *\n * @param addend - The number to add to the value.\n * @signature\n * add(addend)(value);\n * @example\n * add(5)(10) // => 15\n * add(-5)(10) // => 5\n * map([1, 2, 3, 4], add(1)) // => [2, 3, 4, 5]\n * @dataLast\n * @category Number\n */\nexport function add(addend: bigint): (value: bigint) => bigint;\nexport function add(addend: number): (value: number) => number;\n\nexport function add(...args: readonly unknown[]): unknown {\n return purry(addImplementation, args);\n}\n\n// The implementation only uses `number` types, but that's just because it's\n// hard to tell typescript that both value and addend would be of the same type.\nconst addImplementation = (value: number, addend: number): number =>\n value + addend;\n", "import type { UpsertProp } from \"./internal/types/UpsertProp\";\nimport { purry } from \"./purry\";\n\n/**\n * Add a new property to an object.\n *\n * The function doesn't do any checks on the input object. If the property\n * already exists it will be overwritten, and the type of the new value is not\n * checked against the previous type.\n *\n * Use `set` to override values explicitly with better protections.\n *\n * @param obj - The target object.\n * @param prop - The property name.\n * @param value - The property value.\n * @signature\n * addProp(obj, prop, value)\n * @example\n * addProp({firstName: 'john'}, 'lastName', 'doe') // => {firstName: 'john', lastName: 'doe'}\n * @dataFirst\n * @category Object\n */\nexport function addProp(\n obj: T,\n prop: K,\n value: V,\n): UpsertProp;\n\n/**\n * Add a new property to an object.\n *\n * The function doesn't do any checks on the input object. If the property\n * already exists it will be overwritten, and the type of the new value is not\n * checked against the previous type.\n *\n * Use `set` to override values explicitly with better protections.\n *\n * @param prop - The property name.\n * @param value - The property value.\n * @signature\n * addProp(prop, value)(obj)\n * @example\n * addProp('lastName', 'doe')({firstName: 'john'}) // => {firstName: 'john', lastName: 'doe'}\n * @dataLast\n * @category Object\n */\nexport function addProp(\n prop: K,\n value: V,\n): (obj: T) => UpsertProp;\n\nexport function addProp(...args: readonly unknown[]): unknown {\n return purry(addPropImplementation, args);\n}\n\nconst addPropImplementation = (\n obj: T,\n prop: K,\n value: V,\n): UpsertProp =>\n // @ts-expect-error [ts2322] - Hard to type...\n ({ ...obj, [prop]: value });\n", "import { purry } from \"./purry\";\n\n/**\n * Determines whether all predicates returns true for the input data.\n *\n * @param data - The input data for predicates.\n * @param fns - The list of predicates.\n * @signature\n * allPass(data, fns)\n * @example\n * const isDivisibleBy3 = (x: number) => x % 3 === 0\n * const isDivisibleBy4 = (x: number) => x % 4 === 0\n * const fns = [isDivisibleBy3, isDivisibleBy4]\n * allPass(12, fns) // => true\n * allPass(8, fns) // => false\n * @dataFirst\n * @category Array\n */\nexport function allPass(\n data: T,\n fns: readonly ((data: T) => boolean)[],\n): boolean;\n\n/**\n * Determines whether all predicates returns true for the input data.\n *\n * @param fns - The list of predicates.\n * @signature\n * allPass(fns)(data)\n * @example\n * const isDivisibleBy3 = (x: number) => x % 3 === 0\n * const isDivisibleBy4 = (x: number) => x % 4 === 0\n * const fns = [isDivisibleBy3, isDivisibleBy4]\n * allPass(fns)(12) // => true\n * allPass(fns)(8) // => false\n * @dataLast\n * @category Array\n */\nexport function allPass(\n fns: readonly ((data: T) => boolean)[],\n): (data: T) => boolean;\n\nexport function allPass(...args: readonly unknown[]): unknown {\n return purry(allPassImplementation, args);\n}\n\nconst allPassImplementation = (\n data: T,\n fns: readonly ((data: T) => boolean)[],\n): boolean => fns.every((fn) => fn(data));\n", "import { purry } from \"./purry\";\n\n/**\n * Determines whether any predicate returns true for the input data.\n *\n * @param data - The input data for predicates.\n * @param fns - The list of predicates.\n * @signature\n * anyPass(data, fns)\n * @example\n * const isDivisibleBy3 = (x: number) => x % 3 === 0\n * const isDivisibleBy4 = (x: number) => x % 4 === 0\n * const fns = [isDivisibleBy3, isDivisibleBy4]\n * anyPass(8, fns) // => true\n * anyPass(11, fns) // => false\n * @dataFirst\n * @category Array\n */\nexport function anyPass(\n data: T,\n fns: readonly ((data: T) => boolean)[],\n): boolean;\n\n/**\n * Determines whether any predicate returns true for the input data.\n *\n * @param fns - The list of predicates.\n * @signature\n * anyPass(fns)(data)\n * @example\n * const isDivisibleBy3 = (x: number) => x % 3 === 0\n * const isDivisibleBy4 = (x: number) => x % 4 === 0\n * const fns = [isDivisibleBy3, isDivisibleBy4]\n * anyPass(fns)(8) // => true\n * anyPass(fns)(11) // => false\n * @dataLast\n * @category Array\n */\nexport function anyPass(\n fns: readonly ((data: T) => boolean)[],\n): (data: T) => boolean;\n\nexport function anyPass(...args: readonly unknown[]): unknown {\n return purry(anyPassImplementation, args);\n}\n\nconst anyPassImplementation = (\n data: T,\n fns: readonly ((data: T) => boolean)[],\n): boolean => fns.some((fn) => fn(data));\n", "import { purry } from \"./purry\";\n\n/**\n * Makes the first character of a string uppercase while leaving the rest\n * unchanged.\n *\n * It uses the built-in [`String.prototype.toUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase)\n * for the runtime and the built-in [`Capitalize`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#capitalizestringtype)\n * utility type for typing and thus shares their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase#description)_.\n *\n * For display purposes, prefer using the CSS pseudo-element [`::first-letter`](https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter) to target\n * just the first letter of the word, and [`text-transform: uppercase`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform#uppercase)\n * to capitalize it. This transformation **is** locale-aware.\n *\n * For other case manipulations see: `toUpperCase`, `toLowerCase`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, `toSnakeCase`, and\n * `toTitleCase`.\n *\n * @param data - A string.\n * @signature\n * capitalize(data);\n * @example\n * capitalize(\"hello world\"); // \"Hello world\"\n * @dataFirst\n * @category String\n */\nexport function capitalize(data: T): Capitalize;\n\n/**\n * Makes the first character of a string uppercase while leaving the rest\n * unchanged.\n *\n * It uses the built-in [`String.prototype.toUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase)\n * for the runtime and the built-in [`Capitalize`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#capitalizestringtype)\n * utility type for typing and thus shares their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase#description)_.\n *\n * For display purposes, prefer using the CSS pseudo-element [`::first-letter`](https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter) to target\n * just the first letter of the word, and [`text-transform: uppercase`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform#uppercase)\n * to capitalize it. This transformation **is** locale-aware.\n *\n * For other case manipulations see: `toUpperCase`, `toLowerCase`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, `toSnakeCase`, and\n * `toTitleCase`.\n *\n * @signature\n * capitalize()(data);\n * @example\n * pipe(\"hello world\", capitalize()); // \"Hello world\"\n * @dataLast\n * @category String\n */\nexport function capitalize(): (data: T) => Capitalize;\n\nexport function capitalize(...args: readonly unknown[]): unknown {\n return purry(capitalizeImplementation, args);\n}\n\nconst capitalizeImplementation = (data: T): Capitalize =>\n `${data[0]?.toUpperCase() ?? \"\"}${data.slice(1)}` as Capitalize;\n", "// ECMAScript doesn't support more decimal places than 15 anyways,\n// so supporting higher values doesn't make a lot of sense,\n// Considering Number.MAX_SAFE_INTEGER < 10**16, we can use -15\n// for the negative precision limit, too.\nconst MAX_PRECISION = 15;\n\nconst RADIX = 10;\n\nexport const withPrecision =\n (roundingFn: (value: number) => number) =>\n (value: number, precision: number): number => {\n if (precision === 0) {\n return roundingFn(value);\n }\n\n if (!Number.isInteger(precision)) {\n throw new TypeError(\n `precision must be an integer: ${precision.toString()}`,\n );\n }\n\n if (precision > MAX_PRECISION || precision < -MAX_PRECISION) {\n throw new RangeError(\"precision must be between -15 and 15\");\n }\n\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return roundingFn(value);\n }\n\n const shiftedValue = shiftDecimalPoint(value, precision);\n const rounded = roundingFn(shiftedValue);\n return shiftDecimalPoint(rounded, -precision);\n };\n\n/**\n * Shift a number's decimal point via scientific notation.\n *\n * This takes advantage of the fact that `Number` methods support scientific\n * (e-notation) string natively and avoids working with double-precision\n * floating-point numbers directly, working around their limitations\n * with representing decimal numbers.\n */\nfunction shiftDecimalPoint(value: number, shift: number): number {\n const asString = value.toString();\n const [n, exponent] = asString.split(\"e\");\n\n const shiftedExponent =\n (exponent === undefined ? 0 : Number.parseInt(exponent, RADIX)) + shift;\n\n const shiftedValueAsString = `${n!}e${shiftedExponent.toString()}`;\n\n return Number.parseFloat(shiftedValueAsString);\n}\n", "import { withPrecision } from \"./internal/withPrecision\";\nimport { purry } from \"./purry\";\n\n/**\n * Rounds up a given number to a specific precision.\n * If you'd like to round up to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.ceil` instead, as it won't incur the additional library overhead.\n *\n * @param value - The number to round up.\n * @param precision - The precision to round up to. Must be an integer between -15 and 15.\n * @signature\n * ceil(value, precision);\n * @example\n * ceil(123.9876, 3) // => 123.988\n * ceil(483.22243, 1) // => 483.3\n * ceil(8541, -1) // => 8550\n * ceil(456789, -3) // => 457000\n * @dataFirst\n * @category Number\n */\nexport function ceil(value: number, precision: number): number;\n\n/**\n * Rounds up a given number to a specific precision.\n * If you'd like to round up to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.ceil` instead, as it won't incur the additional library overhead.\n *\n * @param precision - The precision to round up to. Must be an integer between -15 and 15.\n * @signature\n * ceil(precision)(value);\n * @example\n * ceil(3)(123.9876) // => 123.988\n * ceil(1)(483.22243) // => 483.3\n * ceil(-1)(8541) // => 8550\n * ceil(-3)(456789) // => 457000\n * @dataLast\n * @category Number\n */\nexport function ceil(precision: number): (value: number) => number;\n\nexport function ceil(...args: readonly unknown[]): unknown {\n return purry(withPrecision(Math.ceil), args);\n}\n", "import type {\n IntRange,\n IsNever,\n IsNumericLiteral,\n LessThan,\n Subtract,\n ValueOf,\n} from \"type-fest\";\nimport type { IntRangeInclusive } from \"./internal/types/IntRangeInclusive\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NTuple } from \"./internal/types/NTuple\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\nimport type { PartialArray } from \"./internal/types/PartialArray\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\nimport { purry } from \"./purry\";\n\n// This prevents typescript from failing on complex arrays and large chunks. It\n// allows the typing to remain useful even when very large chunks are needed,\n// without loosing fidelity on smaller ones. It was chosen by trial-and-error,\n// and given some more wiggle room because the complexity of the array also\n// plays a role in when typescript fails to recurse.\n// See the type tests for an example.\ntype MAX_LITERAL_SIZE = 350;\n\ntype Chunk<\n T extends IterableContainer,\n N extends number,\n> = T extends readonly []\n ? []\n : IsNumericLiteral extends true\n ? LessThan extends true\n ? never\n : LessThan extends true\n ? // The spread here is used as a form of \"Simplify\" for arrays; without\n // it our return type isn't useful.\n [...LiteralChunk]\n : GenericChunk\n : GenericChunk;\n\ntype LiteralChunk =\n | ChunkRestElement<\n // Our result will always have the prefix tuple chunked the same way, so\n // we compute it once here and send it to the main logic below\n ChunkFixedTuple, N>,\n TupleParts[\"item\"],\n TupleParts[\"suffix\"],\n N\n >\n // If both the prefix and suffix tuples are empty then our input is a simple\n // array of the form `Item[]`. This means it could also be empty, so we\n // need to add the empty output to our return type.\n | ([...TuplePrefix, ...TupleParts[\"suffix\"]] extends readonly []\n ? []\n : never);\n\n/**\n * This type **only** works if the input array `T` is a fixed tuple. For these\n * inputs the chunked output could be computed as literal finite tuples too.\n */\ntype ChunkFixedTuple<\n T,\n N extends number,\n // Important! Result is initialized with an empty array (and not `[[]]`)\n // because the result of `chunk` on an empty array is `[]` and not `[[]]`.\n Result = [],\n> = T extends readonly [infer Head, ...infer Rest]\n ? // We continue consuming the input tuple recursively item by item.\n ChunkFixedTuple<\n Rest,\n N,\n Result extends [\n ...infer Previous extends unknown[][],\n infer Current extends unknown[],\n ]\n ? // We take a look at the last chunk in the result, this is the\n // \"current\" chunk where new items would be added, all chunks before\n // it are already full.\n Current[\"length\"] extends N\n ? // The current chunk is full, create a new chunk and put Head in it.\n [...Previous, Current, [Head]]\n : // The current chunk is not full yet, so we add Head to it.\n [...Previous, [...Current, Head]]\n : // This would only happen on the first iteration, when result is\n // still empty. In this case we create the first chunk and put Head\n // in it.\n [[Head]]\n >\n : // We know T is a finite tuple, so the only case where we would reach this\n // is when T is empty, and in that case our results array contains the whole\n // input chunked by N.\n Result;\n\n/**\n * Here lies the main complexity of building the chunk type. It takes the prefix\n * chunks, the rest param item type, and the suffix (not chunked!) and it\n * creates all possible combinations of adding items to the prefix and suffix\n * for all possible scenarios for how many items the rest param \"represents\".\n */\ntype ChunkRestElement<\n PrefixChunks,\n Item,\n Suffix extends unknown[],\n N extends number,\n> =\n IsNever extends true\n ? // The rest param is never when there is no rest param, the whole array is\n // a finite tuple and is represented already by the prefix chunks. Suffix\n // is assumed to be empty in this case.\n PrefixChunks\n : PrefixChunks extends [\n ...infer PrefixFullChunks extends unknown[][],\n infer LastPrefixChunk extends unknown[],\n ]\n ? // When our prefix chunks are not empty it means we need to look at all\n // combinations of mixing the prefix, the suffix, and different counts\n // of the rest param until we cover all possible scenarios.\n | ValueOf<{\n // We want to iterate over all possible padding sizes we can add\n // to the last prefix chunk until we reach N\n // (`0..N-LastPrefixChunk.length`). We need to do this because\n // until the last prefix chunk is full, we need to consider the\n // suffix being part of it too...\n [Padding in IntRangeInclusive<\n 0,\n Subtract\n >]: [\n ...PrefixFullChunks,\n ...ChunkFixedTuple<\n // Create a new array that would **not** contain a rest param\n // (so it's finite) made of the last prefix chunk, padding\n // from the rest param, and the suffix.\n [...LastPrefixChunk, ...NTuple, ...Suffix],\n N\n >,\n ];\n }>\n // Additionally, we need to consider the case where the last prefix\n // chunk **is** full, and follow it with an array of chunks of the\n // rest param (and only them), and then followed by all possible\n // variations of the suffix chunks.\n | [\n ...PrefixFullChunks,\n [\n // Fully padded last prefix chunk\n ...LastPrefixChunk,\n ...NTuple>,\n ],\n ...NTuple[],\n ...SuffixChunk,\n ]\n : // When our prefix chunks are empty we only need to handle the suffix\n [...NTuple[], ...SuffixChunk];\n\n/**\n * This type assumes it takes a finite tuple that represents the suffix of our\n * input array. It builds all possible combinations of adding items to the\n * **head** of the suffix in order to pad the suffix until the last chunk is\n * full.\n */\ntype SuffixChunk<\n T extends unknown[],\n Item,\n N extends number,\n> = T extends readonly []\n ? // If we don't have a suffix we simply create a single chunk with all\n // possible non-empty sub-arrays of `Item` up to size `N`.\n [ValueOf<{ [K in IntRangeInclusive<1, N>]: NTuple }>]\n : ValueOf<{\n // When suffix isn't empty we pad the head of the suffix and compute it's\n // chunks for all possible padding sizes.\n [Padding in IntRange<0, N>]: ChunkFixedTuple<\n [...NTuple, ...T],\n N\n >;\n }>;\n\n/**\n * This is the legacy type used when we don't know what N is. We can only adjust\n * our output based on if we know for sure that the array is empty or not.\n */\ntype GenericChunk = T extends\n | readonly [...unknown[], unknown]\n | readonly [unknown, ...unknown[]]\n ? NonEmptyArray>\n : NonEmptyArray[];\n\n// TODO: Chunk was built before we handled optional elements correctly. It needs to be fixed to handle these correctly, specifically in regard to optional elements creating whole chunks that themselves need to be optional, but that their items themselves should not be optional, except the last chunk...\ntype TuplePrefix = [\n ...TupleParts[\"required\"],\n ...PartialArray[\"optional\"]>,\n];\n\n/**\n * Split an array into groups the length of `size`. If `array` can't be split evenly, the final chunk will be the remaining elements.\n *\n * @param array - The array.\n * @param size - The length of the chunk.\n * @signature\n * chunk(array, size)\n * @example\n * chunk(['a', 'b', 'c', 'd'], 2) // => [['a', 'b'], ['c', 'd']]\n * chunk(['a', 'b', 'c', 'd'], 3) // => [['a', 'b', 'c'], ['d']]\n * @dataFirst\n * @category Array\n */\nexport function chunk(\n array: T,\n size: N,\n): Chunk;\n\n/**\n * Split an array into groups the length of `size`. If `array` can't be split evenly, the final chunk will be the remaining elements.\n *\n * @param size - The length of the chunk.\n * @signature\n * chunk(size)(array)\n * @example\n * chunk(2)(['a', 'b', 'c', 'd']) // => [['a', 'b'], ['c', 'd']]\n * chunk(3)(['a', 'b', 'c', 'd']) // => [['a', 'b', 'c'], ['d']]\n * @dataLast\n * @category Array\n */\nexport function chunk(\n size: N,\n): (array: T) => Chunk;\n\nexport function chunk(...args: readonly unknown[]): unknown {\n return purry(chunkImplementation, args);\n}\n\nfunction chunkImplementation(data: readonly T[], size: number): T[][] {\n if (size < 1) {\n throw new RangeError(\n `chunk: A chunk size of '${size.toString()}' would result in an infinite array`,\n );\n }\n\n if (data.length === 0) {\n return [];\n }\n\n if (size >= data.length) {\n // Optimized for when there is only one chunk.\n return [[...data]];\n }\n\n const chunks = Math.ceil(data.length / size);\n\n // eslint-disable-next-line unicorn/no-new-array -- This is OK, a sparse array allows us to handle very large arrays more efficiently.\n const result = new Array(chunks);\n\n if (size === 1) {\n // Optimized for when we don't need slice.\n for (const [index, item] of data.entries()) {\n result[index] = [item];\n }\n } else {\n for (let index = 0; index < chunks; index += 1) {\n const start = index * size;\n result[index] = data.slice(start, start + size);\n }\n }\n\n return result;\n}\n", "import { purry } from \"./purry\";\n\ntype Limits = {\n readonly min?: number;\n readonly max?: number;\n};\n\n/**\n * Clamp the given value within the inclusive min and max bounds.\n *\n * @param value - The number.\n * @param limits - The bounds limits.\n * @signature\n * clamp(value, { min, max });\n * @example\n * clamp(10, { min: 20 }) // => 20\n * clamp(10, { max: 5 }) // => 5\n * clamp(10, { max: 20, min: 5 }) // => 10\n * @dataFirst\n * @category Number\n */\nexport function clamp(value: number, limits: Limits): number;\n\n/**\n * Clamp the given value within the inclusive min and max bounds.\n *\n * @param limits - The bounds limits.\n * @signature\n * clamp({ min, max })(value);\n * @example\n * clamp({ min: 20 })(10) // => 20\n * clamp({ max: 5 })(10) // => 5\n * clamp({ max: 20, min: 5 })(10) // => 10\n * @dataLast\n * @category Number\n */\nexport function clamp(limits: Limits): (value: number) => number;\n\nexport function clamp(...args: readonly unknown[]): unknown {\n return purry(clampImplementation, args);\n}\n\nconst clampImplementation = (value: number, { min, max }: Limits): number =>\n min !== undefined && value < min\n ? min\n : max !== undefined && value > max\n ? max\n : value;\n", "/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types --\n * The state needed to compute the clone is passed by reference via mutable\n * arrays.\n */\n\nimport { purry } from \"./purry\";\n\n/**\n * Creates a deep copy of the value. Supported types: [plain objects](#isPlainObject),\n * `Array`, `number`, `string`, `boolean`, `Date`, and `RegExp`. Functions are\n * assigned by reference rather than copied. Class instances or any other\n * built-in type that isn't mentioned above are not supported (but might\n * work).\n *\n * @param data - The object to clone.\n * @signature\n * clone(data)\n * @example\n * clone({foo: 'bar'}) // {foo: 'bar'}\n * @dataFirst\n * @category Object\n */\nexport function clone(data: T): T;\n\n/**\n * Creates a deep copy of the value. Supported types: [plain objects](#isPlainObject),\n * `Array`, `number`, `string`, `boolean`, `Date`, and `RegExp`. Functions are\n * assigned by reference rather than copied. Class instances or any other\n * built-in type that isn't mentioned above are not supported (but might\n * work).\n *\n * @signature\n * clone()(data)\n * @example\n * pipe({foo: 'bar'}, clone()) // {foo: 'bar'}\n * @dataLast\n * @category Object\n */\nexport function clone(): (data: T) => T;\n\nexport function clone(...args: readonly unknown[]): unknown {\n return purry(cloneImplementation, args);\n}\n\nfunction cloneImplementation(\n value: T,\n refFrom: unknown[] = [],\n refTo: unknown[] = [],\n): T {\n if (typeof value === \"function\") {\n // Functions aren't cloned, we return the same instance.\n return value;\n }\n\n if (typeof value !== \"object\" || value === null) {\n // Only objects are interesting when cloning, everything else can use\n // whatever JS does by default.\n return structuredClone(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const prototype = Object.getPrototypeOf(value);\n if (\n !Array.isArray(value) &&\n // Keep this check in sync with the same check in the impl of\n // `isPlainObject`.\n prototype !== null &&\n prototype !== Object.prototype\n ) {\n // Our cloning logic is only designed for plain objects and arrays; other\n // object types (like `Date`, `RegExp`, `File`, and user-defined classes)\n // wouldn't clone properly. We fallback to the native cloning for them.\n return structuredClone(value);\n }\n\n // In order to support cyclic/self-referential structures, and to support\n // functions _within_ objects, we need to have our own cloning logic.\n\n // First we check if we've already cloned this value.\n const idx = refFrom.indexOf(value);\n if (idx !== -1) {\n return refTo[idx] as T;\n }\n // And if we haven't, we add it to our list of seen values so that it is kept\n // and clone the deep structure.\n refFrom.push(value);\n return Array.isArray(value)\n ? deepCloneArray(value, refFrom, refTo)\n : deepCloneObject(value, refFrom, refTo);\n}\n\nfunction deepCloneObject(\n value: T,\n refFrom: unknown[],\n refTo: unknown[],\n): T {\n const copiedValue: Record = {};\n\n // It's important to first push the cloned ref so that it's index is kept in\n // sync with the ref to the original value in refFrom.\n refTo.push(copiedValue);\n\n for (const [k, v] of Object.entries(value)) {\n copiedValue[k] = cloneImplementation(v, refFrom, refTo);\n }\n\n return copiedValue as T;\n}\n\nfunction deepCloneArray(\n value: T,\n refFrom: unknown[],\n refTo: unknown[],\n): T {\n const copiedValue: unknown[] = [];\n\n // It's important to first push the cloned ref so that it's index is kept in\n // sync with the ref to the original value in refFrom.\n refTo.push(copiedValue);\n\n for (const [index, item] of value.entries()) {\n copiedValue[index] = cloneImplementation(item, refFrom, refTo);\n }\n\n return copiedValue as unknown as T;\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Merge two or more arrays. This method does not change the existing arrays,\n * but instead returns a new array, even if the other array is empty.\n *\n * @param data - The first items, these would be at the beginning of the new\n * array.\n * @param other - The remaining items, these would be at the end of the new\n * array.\n * @returns A new array with the items of the first array followed by the items\n * of the second array.\n * @signature\n * concat(data, other);\n * @example\n * concat([1, 2, 3], ['a']) // [1, 2, 3, 'a']\n * @dataFirst\n * @category Array\n */\nexport function concat<\n T1 extends IterableContainer,\n T2 extends IterableContainer,\n>(data: T1, other: T2): [...T1, ...T2];\n\n/**\n * Merge two or more arrays. This method does not change the existing arrays,\n * but instead returns a new array, even if the other array is empty.\n *\n * @param other - The remaining items, these would be at the end of the new\n * array.\n * @returns A new array with the items of the first array followed by the items\n * of the second array.\n * @signature\n * concat(arr2)(arr1);\n * @example\n * concat(['a'])([1, 2, 3]) // [1, 2, 3, 'a']\n * @dataLast\n * @category Array\n */\nexport function concat(\n other: T2,\n): (data: T1) => [...T1, ...T2];\n\nexport function concat(...args: readonly unknown[]): unknown {\n return purry(concatImplementation, args);\n}\n\nconst concatImplementation = <\n T1 extends IterableContainer,\n T2 extends IterableContainer,\n>(\n arr1: T1,\n arr2: T2,\n): [...T1, ...T2] => [...arr1, ...arr2];\n", "/**\n * Utility for purrying functions based on a predicate for the first argument.\n *\n * This is useful for purrying functions with a variadic argument list.\n */\nexport function purryOn(\n isArg: (firstArg: unknown) => firstArg is T,\n implementation: (\n data: unknown,\n firstArg: T,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Function inference in typescript relies on `any` to work, it doesn't work with `unknown`\n ...args: any\n ) => unknown,\n args: readonly unknown[],\n): unknown {\n return isArg(args[0])\n ? // @ts-expect-error [ts2556] - This is a low-level function that assumes the function declaration and setup is correct and won't result in typing issues when called dynamically.\n (data: unknown) => implementation(data, ...args)\n : // @ts-expect-error [ts2556] - This is a low-level function that assumes the function declaration and setup is correct and won't result in typing issues when called dynamically.\n implementation(...args);\n}\n", "/* eslint-disable jsdoc/check-param-names, jsdoc/require-param --\n * We don't document each `case` param, instead we document the concept more\n * generally, but these eslint rules can't detect that.\n */\n\nimport { purryOn } from \"./internal/purryOn\";\nimport type { GuardType } from \"./internal/types/GuardType\";\n\ntype Case<\n In,\n Out,\n When extends (x: In) => boolean = (x: In) => boolean,\n> = readonly [when: When, then: (x: GuardType & In) => Out];\n\ntype DefaultCase = (x: In) => Out;\n\n/**\n * Executes a transformer function based on the first matching predicate,\n * functioning like a series of `if...else if...` statements. It sequentially\n * evaluates each case and, upon finding a truthy predicate, runs the\n * corresponding transformer, and returns, ignoring any further cases, even if\n * they would match.\n *\n * *NOTE*: Some type-predicates may fail to narrow the param type of their\n * transformer; in such cases wrap your type-predicate in an anonymous arrow\n * function: e.g., instead of\n * `conditional(..., [myTypePredicate, myTransformer], ...)`, use\n * `conditional(..., [($) => myTypePredicate($), myTransformer], ...)`.\n *\n * To add a a default, catch-all, case you can provide a single callback\n * function (instead of a 2-tuple) as the last case. This is equivalent to\n * adding a case with a trivial always-true predicate as it's condition (see\n * example).\n *\n * For simpler cases you should also consider using `when` instead.\n *\n * Due to TypeScript's inability to infer the result of negating a type-\n * predicate we can't refine the types used in subsequent cases based on\n * previous conditions. Using a `switch (true)` statement or ternary operators\n * is recommended for more precise type control when such type narrowing is\n * needed.\n *\n * !IMPORTANT! - Unlike similar implementations in Lodash and Ramda, the Remeda\n * implementation **doesn't** implicitly return `undefined` as a fallback when\n * when none of the cases match; and instead **throws** an exception in those\n * cases! You have to explicitly provide a default case, and can use\n * `constant(undefined)` as your last case to replicate that behavior.\n *\n * @param cases - A list of (up to 10) cases. Each case can be either:\n * - A 2-tuple consisting of a predicate (or type-predicate) and a transformer\n * function that processes the data if the predicate matches.\n * - A single callback function that acts as a default fallback case.\n * @returns The output of the matched transformer. If no cases match, an\n * exception is thrown. The return type is a union of the return types of all\n * provided transformers.\n * @signature\n * conditional(...cases)(data);\n * @example\n * const nameOrId = 3 as string | number | boolean;\n *\n * pipe(\n * nameOrId,\n * conditional(\n * [isString, (name) => `Hello ${name}`],\n * [isNumber, (id) => `Hello ID: ${id}`],\n * ),\n * ); //=> 'Hello ID: 3' (typed as `string`), can throw!.\n *\n * pipe(\n * nameOrId,\n * conditional(\n * [isString, (name) => `Hello ${name}`],\n * [isNumber, (id) => `Hello ID: ${id}`],\n * constant(undefined),\n * ),\n * ); //=> 'Hello ID: 3' (typed as `string | undefined`), won't throw.\n *\n * pipe(\n * nameOrId,\n * conditional(\n * [isString, (name) => `Hello ${name}`],\n * [isNumber, (id) => `Hello ID: ${id}`],\n * (something) => `Hello something (${JSON.stringify(something)})`,\n * ),\n * ); //=> 'Hello ID: 3' (typed as `string`), won't throw.\n * @dataLast\n * @category Function\n */\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Return0,\n Fallback = never,\n>(\n // TODO [>2]: TypeScript has problems inferring narrowed types within the case tuples, making it hard to work with this utility. Removing the tuple wrappers solves these issues without impacting the API too much. @see https://github.com/remeda/remeda/issues/847#issuecomment-3057371891\n case0: Case,\n fallback?: DefaultCase,\n): (data: T) => Return0 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n // TODO [>2]: Exclude previous guarded types from the next functions in the chain. Although this isn't a prefect solution, it's the common approach to compute the \"negation\" of a type-predicate, and would provide a more comfortable API for bigger chains for cases like discriminated unions. This TODO is at the first occurrence where it is relevant, but it should be applied to **all** subsequent overloads. p.s. don't forget to update the docs too!\n Fn1 extends (x: T) => boolean,\n Return0,\n Return1,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n fallback?: DefaultCase,\n): (data: T) => Return0 | Return1 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n fallback?: DefaultCase,\n): (data: T) => Return0 | Return1 | Return2 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n fallback?: DefaultCase,\n): (data: T) => Return0 | Return1 | Return2 | Return3 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n fallback?: DefaultCase,\n): (data: T) => Return0 | Return1 | Return2 | Return3 | Return4 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n fallback?: DefaultCase,\n): (\n data: T,\n) => Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n fallback?: DefaultCase,\n): (\n data: T,\n) =>\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Fn7 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Return7,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n case7: Case,\n fallback?: DefaultCase,\n): (\n data: T,\n) =>\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Return7\n | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Fn7 extends (x: T) => boolean,\n Fn8 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Return7,\n Return8,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n case7: Case,\n case8: Case,\n fallback?: DefaultCase,\n): (\n data: T,\n) =>\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Return7\n | Return8\n | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Fn7 extends (x: T) => boolean,\n Fn8 extends (x: T) => boolean,\n Fn9 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Return7,\n Return8,\n Return9,\n Fallback = never,\n>(\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n case7: Case,\n case8: Case,\n case9: Case,\n fallback?: DefaultCase,\n): (\n data: T,\n) =>\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Return7\n | Return8\n | Return9\n | Fallback;\n\n/**\n * Executes a transformer function based on the first matching predicate,\n * functioning like a series of `if...else if...` statements. It sequentially\n * evaluates each case and, upon finding a truthy predicate, runs the\n * corresponding transformer, and returns, ignoring any further cases, even if\n * they would match.\n *\n * *NOTE*: Some type-predicates may fail to narrow the param type of their\n * transformer; in such cases wrap your type-predicate in an anonymous arrow\n * function: e.g., instead of\n * `conditional(..., [myTypePredicate, myTransformer], ...)`, use\n * `conditional(..., [($) => myTypePredicate($), myTransformer], ...)`.\n *\n * To add a a default, catch-all, case you can provide a single callback\n * function (instead of a 2-tuple) as the last case. This is equivalent to\n * adding a case with a trivial always-true predicate as it's condition (see\n * example).\n *\n * For simpler cases you should also consider using `when` instead.\n *\n * Due to TypeScript's inability to infer the result of negating a type-\n * predicate we can't refine the types used in subsequent cases based on\n * previous conditions. Using a `switch (true)` statement or ternary operators\n * is recommended for more precise type control when such type narrowing is\n * needed.\n *\n * !IMPORTANT! - Unlike similar implementations in Lodash and Ramda, the Remeda\n * implementation **doesn't** implicitly return `undefined` as a fallback when\n * when none of the cases match; and instead **throws** an exception in those\n * cases! You have to explicitly provide a default case, and can use\n * `constant(undefined)` as your last case to replicate that behavior.\n *\n * @param data - The input data to be evaluated against the provided cases.\n * @param cases - A list of (up to 10) cases. Each case can be either:\n * - A 2-tuple consisting of a predicate (or type-predicate) and a transformer\n * function that processes the data if the predicate matches.\n * - A single callback function that acts as a default fallback case.\n * @returns The output of the matched transformer. If no cases match, an\n * exception is thrown. The return type is a union of the return types of all\n * provided transformers.\n * @signature\n * conditional(data, ...cases);\n * @example\n * const nameOrId = 3 as string | number | boolean;\n *\n * conditional(\n * nameOrId,\n * [isString, (name) => `Hello ${name}`],\n * [isNumber, (id) => `Hello ID: ${id}`],\n * ); //=> 'Hello ID: 3' (typed as `string`), can throw!.\n *\n * conditional(\n * nameOrId,\n * [isString, (name) => `Hello ${name}`],\n * [isNumber, (id) => `Hello ID: ${id}`],\n * constant(undefined),\n * ); //=> 'Hello ID: 3' (typed as `string | undefined`), won't throw.\n *\n * conditional(\n * nameOrId,\n * [isString, (name) => `Hello ${name}`],\n * [isNumber, (id) => `Hello ID: ${id}`],\n * (something) => `Hello something (${JSON.stringify(something)})`,\n * ); //=> 'Hello ID: 3' (typed as `string`), won't throw.\n * @dataFirst\n * @category Function\n */\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Return0,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n fallback?: DefaultCase,\n): Return0 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Return0,\n Return1,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n fallback?: DefaultCase,\n): Return0 | Return1 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n fallback?: DefaultCase,\n): Return0 | Return1 | Return2 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n fallback?: DefaultCase,\n): Return0 | Return1 | Return2 | Return3 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n fallback?: DefaultCase,\n): Return0 | Return1 | Return2 | Return3 | Return4 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n fallback?: DefaultCase,\n): Return0 | Return1 | Return2 | Return3 | Return4 | Return5 | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n fallback?: DefaultCase,\n):\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Fn7 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Return7,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n case7: Case,\n fallback?: DefaultCase,\n):\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Return7\n | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Fn7 extends (x: T) => boolean,\n Fn8 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Return7,\n Return8,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n case7: Case,\n case8: Case,\n fallback?: DefaultCase,\n):\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Return7\n | Return8\n | Fallback;\n\nexport function conditional<\n T,\n Fn0 extends (x: T) => boolean,\n Fn1 extends (x: T) => boolean,\n Fn2 extends (x: T) => boolean,\n Fn3 extends (x: T) => boolean,\n Fn4 extends (x: T) => boolean,\n Fn5 extends (x: T) => boolean,\n Fn6 extends (x: T) => boolean,\n Fn7 extends (x: T) => boolean,\n Fn8 extends (x: T) => boolean,\n Fn9 extends (x: T) => boolean,\n Return0,\n Return1,\n Return2,\n Return3,\n Return4,\n Return5,\n Return6,\n Return7,\n Return8,\n Return9,\n Fallback = never,\n>(\n data: T,\n case0: Case,\n case1: Case,\n case2: Case,\n case3: Case,\n case4: Case,\n case5: Case,\n case6: Case,\n case7: Case,\n case8: Case,\n case9: Case,\n fallback?: DefaultCase,\n):\n | Return0\n | Return1\n | Return2\n | Return3\n | Return4\n | Return5\n | Return6\n | Return7\n | Return8\n | Return9\n | Fallback;\n\nexport function conditional(...args: readonly unknown[]): unknown {\n return purryOn(isCase, conditionalImplementation, args);\n}\n\nfunction conditionalImplementation(\n data: In,\n ...cases: readonly (Case | DefaultCase)[]\n): Out {\n for (const current of cases) {\n if (typeof current === \"function\") {\n return current(data);\n }\n\n const [when, then] = current;\n if (when(data)) {\n return then(data);\n }\n }\n\n // TODO [>2]: When we built this function originally we didn't want to have to always return `undefined` and force users to always have to handle that case even when they knew it would never happen. In hindsight that was wrong and we can support this at the type-level without throwing. If users want to throw they can always have an explicit fallback that does that (and we might add a throw utility in v3 too!).\n throw new Error(\"conditional: data failed for all cases\");\n}\n\nfunction isCase(maybeCase: unknown): maybeCase is Case {\n if (!Array.isArray(maybeCase)) {\n return false;\n }\n\n const [when, then, ...rest] = maybeCase as readonly unknown[];\n return (\n typeof when === \"function\" &&\n when.length <= 1 &&\n typeof then === \"function\" &&\n then.length <= 1 &&\n rest.length === 0\n );\n}\n", "/**\n * A function that takes any arguments and returns the provided `value` on every\n * invocation. This is useful to provide trivial implementations for APIs or in\n * combination with a ternary or other conditional execution to allow to short-\n * circuit more complex implementations for a specific case.\n *\n * Notice that this is a dataLast impl where the function needs to be invoked\n * to get the \"do nothing\" function.\n *\n * See also:\n * `doNothing` - A function that doesn't return anything.\n * `identity` - A function that returns the first argument it receives.\n *\n * @param value - The constant value that would be returned on every invocation.\n * The value is not copied/cloned on every invocation so care should be taken\n * with mutable objects (like arrays, objects, Maps, etc...).\n * @signature\n * constant(value);\n * @example\n * map([1, 2, 3], constant('a')); // => ['a', 'a', 'a']\n * map(\n * [1, 2, 3],\n * isDemoMode ? add(1) : constant(0),\n * ); // => [2, 3, 4] or [0, 0, 0]\n * @dataLast\n * @category Function\n */\nexport function constant(\n value: T,\n): // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- There is no other way to make typescript infer the function arguments \"backwards\" in data-last invocations without the Args type parameter. @see: https://github.com/typescript-eslint/typescript-eslint/issues/9887\n(...args: Args) => T {\n return () => value;\n}\n", "import type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport { purry } from \"./purry\";\n\n/**\n * Categorize and count elements in an array using a defined callback function.\n * The callback function is applied to each element in the array to determine\n * its category and then counts how many elements fall into each category.\n *\n * @param data - The array.\n * @param categorizationFn - The categorization function.\n * @signature\n * countBy(data, categorizationFn)\n * @example\n * countBy(\n * [\"a\", \"b\", \"c\", \"B\", \"A\", \"a\"],\n * toLowerCase()\n * ); //=> { a: 3, b: 2, c: 1 }\n * @dataFirst\n * @category Array\n */\nexport function countBy(\n data: readonly T[],\n categorizationFn: (\n value: T,\n index: number,\n data: readonly T[],\n ) => K | undefined,\n): BoundedPartial>;\n\n/**\n * Categorize and count elements in an array using a defined callback function.\n * The callback function is applied to each element in the array to determine\n * its category and then counts how many elements fall into each category.\n *\n * @param categorizationFn - The categorization function.\n * @signature\n * countBy(categorizationFn)(data)\n * @example\n * pipe(\n * [\"a\", \"b\", \"c\", \"B\", \"A\", \"a\"],\n * countBy(toLowerCase()),\n * ); //=> { a: 3, b: 2, c: 1 }\n * @dataLast\n * @category Array\n */\nexport function countBy(\n categorizationFn: (\n value: T,\n index: number,\n data: readonly T[],\n ) => K | undefined,\n): (data: readonly T[]) => BoundedPartial>;\n\nexport function countBy(...args: readonly unknown[]): unknown {\n return purry(countByImplementation, args);\n}\n\nconst countByImplementation = (\n data: readonly T[],\n categorizationFn: (\n value: T,\n index: number,\n data: readonly T[],\n ) => PropertyKey | undefined,\n): BoundedPartial> => {\n const out = new Map();\n\n for (const [index, item] of data.entries()) {\n const category = categorizationFn(item, index, data);\n if (category !== undefined) {\n const count = out.get(category);\n if (count === undefined) {\n out.set(category, 1);\n } else {\n out.set(category, count + 1);\n }\n }\n }\n\n return Object.fromEntries(out);\n};\n", "import type { StrictFunction } from \"./internal/types/StrictFunction\";\n\ntype Debouncer = {\n /**\n * Invoke the debounced function.\n *\n * @param args - Same as the args for the debounced function.\n * @returns The last computed value of the debounced function with the\n * latest args provided to it. If `timing` does not include `leading` then the\n * the function would return `undefined` until the first cool-down period is\n * over, otherwise the function would always return the return type of the\n * debounced function.\n */\n readonly call: (\n ...args: Parameters\n ) => ReturnType | (true extends IsNullable ? undefined : never);\n\n /**\n * Cancels any debounced functions without calling them, effectively resetting\n * the debouncer to the same state it is when initially created.\n */\n readonly cancel: () => void;\n\n /**\n * Similar to `cancel`, but would also trigger the `trailing` invocation if\n * the debouncer would run one at the end of the cool-down period.\n */\n readonly flush: () => ReturnType | undefined;\n\n /**\n * Is `true` when there is an active cool-down period currently debouncing\n * invocations.\n */\n readonly isPending: boolean;\n\n /**\n * The last computed value of the debounced function.\n */\n readonly cachedValue: ReturnType | undefined;\n};\n\ntype DebounceOptions = {\n readonly waitMs?: number;\n readonly maxWaitMs?: number;\n};\n\n/**\n * Wraps `func` with a debouncer object that \"debounces\" (delays) invocations of the function during a defined cool-down period (`waitMs`). It can be configured to invoke the function either at the start of the cool-down period, the end of it, or at both ends (`timing`).\n * It can also be configured to allow invocations during the cool-down period (`maxWaitMs`).\n * It stores the latest call's arguments so they could be used at the end of the cool-down period when invoking `func` (if configured to invoke the function at the end of the cool-down period).\n * It stores the value returned by `func` whenever its invoked. This value is returned on every call, and is accessible via the `cachedValue` property of the debouncer. Its important to note that the value might be different from the value that would be returned from running `func` with the current arguments as it is a cached value from a previous invocation.\n * **Important**: The cool-down period defines the minimum between two invocations, and not the maximum. The period will be **extended** each time a call is made until a full cool-down period has elapsed without any additional calls.\n *\n *! **DEPRECATED**: This implementation of debounce is known to have issues and might not behave as expected. It should be replaced with the `funnel` utility instead. The test file [funnel.remeda-debounce.test.ts](https://github.com/remeda/remeda/blob/main/packages/remeda/src/funnel.remeda-debounce.test.ts) offers a reference implementation that replicates `debounce` via `funnel`!\n *\n * @param func - The function to debounce, the returned `call` function will have\n * the exact same signature.\n * @param options - An object allowing further customization of the debouncer:\n * - `timing?: 'leading' | 'trailing' |'both'`. The default is `'trailing'`.\n * `leading` would result in the function being invoked at the start of the\n * cool-down period; `trailing` would result in the function being invoked at\n * the end of the cool-down period (using the args from the last call to the\n * debouncer). When `both` is selected the `trailing` invocation would only\n * take place if there were more than one call to the debouncer during the\n * cool-down period. **DEFAULT: 'trailing'**\n * - `waitMs?: number`. The length of the cool-down period in milliseconds. The\n * debouncer would wait until this amount of time has passed without **any**\n * additional calls to the debouncer before triggering the end-of-cool-down-\n * period event. When this happens, the function would be invoked (if `timing`\n * isn't `'leading'`) and the debouncer state would be reset. **DEFAULT: 0**\n * - `maxWaitMs?: number`. The length of time since a debounced call (a call\n * that the debouncer prevented from being invoked) was made until it would be\n * invoked. Because the debouncer can be continually triggered and thus never\n * reach the end of the cool-down period, this allows the function to still\n * be invoked occasionally. IMPORTANT: This param is ignored when `timing` is\n * `'leading'`.\n * @returns A debouncer object. The main function is `call`. In addition to it\n * the debouncer comes with the following additional functions and properties:\n * - `cancel` method to cancel delayed `func` invocations\n * - `flush` method to end the cool-down period immediately.\n * - `cachedValue` the latest return value of an invocation (if one occurred).\n * - `isPending` flag to check if there is an inflight cool-down window.\n * @signature\n * debounce(func, options);\n * @example\n * const debouncer = debounce(identity(), { timing: 'trailing', waitMs: 1000 });\n * const result1 = debouncer.call(1); // => undefined\n * const result2 = debouncer.call(2); // => undefined\n * // after 1 second\n * const result3 = debouncer.call(3); // => 2\n * // after 1 second\n * debouncer.cachedValue; // => 3\n * @dataFirst\n * @category Function\n * @deprecated This implementation of debounce is known to have issues and might\n * not behave as expected. It should be replaced with the `funnel` utility\n * instead. The test file `funnel.remeda-debounce.test.ts` offers a reference\n * implementation that replicates `debounce` via `funnel`.\n * @see https://css-tricks.com/debouncing-throttling-explained-examples/\n */\nexport function debounce(\n func: F,\n options: DebounceOptions & { readonly timing?: \"trailing\" },\n): Debouncer;\nexport function debounce(\n func: F,\n options:\n | (DebounceOptions & { readonly timing: \"both\" })\n | (Omit & { readonly timing: \"leading\" }),\n): Debouncer;\n\nexport function debounce(\n func: F,\n {\n waitMs,\n timing = \"trailing\",\n maxWaitMs,\n }: DebounceOptions & {\n readonly timing?: \"both\" | \"leading\" | \"trailing\";\n },\n): Debouncer {\n if (maxWaitMs !== undefined && waitMs !== undefined && maxWaitMs < waitMs) {\n throw new Error(\n `debounce: maxWaitMs (${maxWaitMs.toString()}) cannot be less than waitMs (${waitMs.toString()})`,\n );\n }\n\n // All these are part of the debouncer runtime state:\n\n // The timeout is the main object we use to tell if there's an active cool-\n // down period or not.\n let coolDownTimeoutId: ReturnType | undefined;\n\n // We use an additional timeout to track how long the last debounced call is\n // waiting.\n let maxWaitTimeoutId: ReturnType | undefined;\n\n // For 'trailing' invocations we need to keep the args around until we\n // actually invoke the function.\n let latestCallArgs: Parameters | undefined;\n\n // To make any value of the debounced function we need to be able to return a\n // value. For any invocation except the first one when 'leading' is enabled we\n // will return this cached value.\n let result: ReturnType | undefined;\n\n const handleInvoke = (): void => {\n if (maxWaitTimeoutId !== undefined) {\n // We are invoking the function so the wait is over...\n const timeoutId = maxWaitTimeoutId;\n maxWaitTimeoutId = undefined;\n clearTimeout(timeoutId);\n }\n\n /* v8 ignore if -- This protects us against changes to the logic, there is no known flow we can simulate to reach this condition. It can only happen if a previous timeout isn't cleared (or faces a race condition clearing). @preserve */\n if (latestCallArgs === undefined) {\n // If you see this error pop up when using this function please report\n // it on the Remeda github page!\n throw new Error(\n \"REMEDA[debounce]: latestCallArgs was unexpectedly undefined.\",\n );\n }\n\n const args = latestCallArgs;\n // Make sure the args aren't accidentally used again, this is mainly\n // relevant for the check above where we'll fail a subsequent call to\n // 'trailingEdge'.\n latestCallArgs = undefined;\n\n // Invoke the function and store the results locally.\n // @ts-expect-error [ts2345, ts2322] -- TypeScript infers the generic sub-\n // types too eagerly, making itself blind to the fact that the types match\n // here.\n result = func(...args);\n };\n\n const handleCoolDownEnd = (): void => {\n if (coolDownTimeoutId === undefined) {\n // It's rare to get here, it should only happen when `flush` is called\n // when the cool-down window isn't active.\n return;\n }\n\n // Make sure there are no more timers running.\n const timeoutId = coolDownTimeoutId;\n coolDownTimeoutId = undefined;\n clearTimeout(timeoutId);\n // Then reset state so a new cool-down window can begin on the next call.\n\n if (latestCallArgs !== undefined) {\n // If we have a debounced call waiting to be invoked at the end of the\n // cool-down period we need to invoke it now.\n handleInvoke();\n }\n };\n\n const handleDebouncedCall = (args: Parameters): void => {\n // We save the latest call args so that (if and) when we invoke the function\n // in the future, we have args to invoke it with.\n latestCallArgs = args;\n\n if (maxWaitMs !== undefined && maxWaitTimeoutId === undefined) {\n // We only need to start the maxWait timeout once, on the first debounced\n // call that is now being delayed.\n maxWaitTimeoutId = setTimeout(handleInvoke, maxWaitMs);\n }\n };\n\n return {\n call: (...args) => {\n if (coolDownTimeoutId === undefined) {\n // This call is starting a new cool-down window!\n\n if (timing === \"trailing\") {\n // Only when the timing is \"trailing\" is the first call \"debounced\".\n handleDebouncedCall(args);\n } else {\n // Otherwise for \"leading\" and \"both\" the first call is actually\n // called directly and not via a timeout.\n // @ts-expect-error [ts2345, ts2322] -- TypeScript infers the generic\n // sub-types too eagerly, making itself blind to the fact that the\n // types match here.\n result = func(...args);\n }\n } else {\n // There's an inflight cool-down window.\n\n if (timing !== \"leading\") {\n // When the timing is 'leading' all following calls are just ignored\n // until the cool-down period ends. But for the other timings the call\n // is \"debounced\".\n handleDebouncedCall(args);\n }\n\n // The current timeout is no longer relevant because we need to wait the\n // full `waitMs` time from this call.\n const timeoutId = coolDownTimeoutId;\n coolDownTimeoutId = undefined;\n clearTimeout(timeoutId);\n }\n\n coolDownTimeoutId = setTimeout(\n handleCoolDownEnd,\n // If waitMs is not defined but maxWaitMs *is* it means the user is only\n // interested in the leaky-bucket nature of the debouncer which is\n // achieved by setting waitMs === maxWaitMs. If both are not defined we\n // default to 0 which would wait until the end of the execution frame.\n waitMs ?? maxWaitMs ?? 0,\n );\n\n // Return the last computed result while we \"debounce\" further calls.\n return result;\n },\n\n cancel: () => {\n // Reset all \"in-flight\" state of the debouncer. Notice that we keep the\n // cached value!\n\n if (coolDownTimeoutId !== undefined) {\n const timeoutId = coolDownTimeoutId;\n coolDownTimeoutId = undefined;\n clearTimeout(timeoutId);\n }\n\n if (maxWaitTimeoutId !== undefined) {\n const timeoutId = maxWaitTimeoutId;\n maxWaitTimeoutId = undefined;\n clearTimeout(timeoutId);\n }\n\n latestCallArgs = undefined;\n },\n\n flush: () => {\n // Flush is just a manual way to trigger the end of the cool-down window.\n handleCoolDownEnd();\n return result;\n },\n\n get isPending() {\n return coolDownTimeoutId !== undefined;\n },\n\n get cachedValue() {\n return result;\n },\n };\n}\n", "import type { IsEqual } from \"type-fest\";\nimport { purry } from \"./purry\";\nimport type { RemedaTypeError } from \"./internal/types/RemedaTypeError\";\n\ntype FallbackOf =\n IsEqual> extends true\n ? RemedaTypeError<\n \"defaultTo\",\n \"no unnecessary fallback\",\n // The type is `never` because it will never be used ;)\n { type: never; metadata: T }\n >\n : T;\n\n/**\n * A stricter wrapper around the [Nullish coalescing operator `??`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator)\n * that ensures that the fallback matches the type of the data. Only works\n * when data can be `null` or `undefined`.\n *\n * Notice that `Number.NaN` is not nullish and would not result in returning the\n * fallback!\n *\n * @param data - A nullish value.\n * @param fallback - A value of the same type as `data` that would be returned\n * when `data` is nullish.\n * @signature\n * defaultTo(data, fallback);\n * @example\n * defaultTo(\"hello\" as string | undefined, \"world\"); //=> \"hello\"\n * defaultTo(undefined as string | undefined, \"world\"); //=> \"world\"\n * @dataFirst\n * @category Other\n */\nexport function defaultTo>(\n data: T,\n fallback: Fallback,\n): NonNullable | Fallback;\n\n/**\n * A stricter wrapper around the [Nullish coalescing operator `??`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator)\n * that ensures that the fallback matches the type of the data, and that the\n * data is nullish (`null` or `undefined`).\n *\n * Notice that `Number.NaN` is not nullish and would not result in returning the\n * fallback!\n *\n * @param fallback - A value of the same type as `data` that would be returned\n * when `data` is nullish.\n * @signature\n * defaultTo(fallback)(data);\n * @example\n * pipe(\"hello\" as string | undefined, defaultTo(\"world\")); //=> \"hello\"\n * pipe(undefined as string | undefined, defaultTo(\"world\")); //=> \"world\"\n * @dataLast\n * @category Other\n */\nexport function defaultTo>(\n fallback: Fallback,\n): (data: T) => NonNullable | Fallback;\n\nexport function defaultTo(...args: readonly unknown[]): unknown {\n return purry(defaultToImplementation, args);\n}\n\nconst defaultToImplementation = >(\n data: T,\n fallback: Fallback,\n): NonNullable | Fallback => data ?? fallback;\n", "import type { LazyResult } from \"./types/LazyResult\";\n\nconst EMPTY_PIPE = { done: true, hasNext: false } as const;\n\n/**\n * A singleton value for skipping an item in a lazy evaluator.\n */\nexport const SKIP_ITEM = { done: false, hasNext: false } as const;\n\n/**\n * A helper evaluator when we want to return an empty result. It memoizes both\n * the result and the evaluator itself to reduce memory usage.\n */\nexport const lazyEmptyEvaluator = (): LazyResult => EMPTY_PIPE;\n\n/**\n * A helper evaluator when we want to return a shallow clone of the input. It\n * memoizes both the evaluator itself to reduce memory usage.\n */\nexport const lazyIdentityEvaluator = (value: T) =>\n ({\n hasNext: true,\n next: value,\n done: false,\n }) as const;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable jsdoc/check-param-names -- we don't document the op params, it'd be redundant */\n\nimport type { LazyDefinition } from \"./internal/types/LazyDefinition\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport type { LazyResult } from \"./internal/types/LazyResult\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\n\ntype PreparedLazyFunction = LazyEvaluator & {\n readonly isSingle: boolean;\n\n // These are intentionally mutable, they maintain the lazy piped state.\n index: number;\n items: unknown[];\n};\n\ntype LazyFunction = LazyDefinition & ((input: unknown) => unknown);\n\n/**\n * Performs left-to-right function composition, passing data through functions\n * in sequence. Each function receives the output of the previous function,\n * creating a readable top-to-bottom data flow that matches how the\n * transformation is executed. This enables converting deeply nested function\n * calls into clear, sequential steps without temporary variables.\n *\n * When consecutive functions with a `lazy` tag (e.g., `map`, `filter`, `take`,\n * `drop`, `forEach`, etc...) are used together, they process data item-by-item\n * rather than creating intermediate arrays. This enables early termination\n * when only partial results are needed, improving performance for large\n * datasets and expensive operations.\n *\n * Functions are only evaluated lazily when their data-last form is used\n * directly in the pipe. To disable lazy evaluation, use data-first calls via\n * arrow functions: `($) => map($, callback)` instead of `map(callback)`.\n *\n * Any function can be used in pipes, not just Remeda utilities. For creating\n * custom functions with currying and lazy evaluation support, see the `purry`\n * utility.\n *\n * A \"headless\" variant `piped` is available for creating reusable pipe\n * functions without initial data.\n *\n * IMPORTANT: During lazy evaluation, callbacks using the third parameter (the\n * input array) receive only items processed up to that point, not the complete\n * array.\n *\n * @param data - The input data.\n * @param functions - A sequence of functions that take one argument and\n * return a value.\n * @signature\n * pipe(data, ...functions);\n * @example\n * pipe([1, 2, 3], map(multiply(3))); //=> [3, 6, 9]\n *\n * // = Early termination with lazy evaluation =\n * pipe(\n * hugeArray,\n * map(expensiveComputation),\n * filter(complexPredicate),\n * // Only processes items until 2 results are found, then stops.\n * // Most of hugeArray never gets processed.\n * take(2),\n * );\n *\n * // = Custom logic within a pipe =\n * pipe(\n * input,\n * toLowerCase(),\n * normalize,\n * ($) => validate($, CONFIG),\n * split(\",\"),\n * unique(),\n * );\n *\n * // = Migrating nested transformations to pipes =\n * // Nested\n * const result = prop(\n * mapValues(groupByProp(users, \"department\"), length()),\n * \"engineering\",\n * );\n *\n * // Piped\n * const result = pipe(\n * users,\n * groupByProp(\"department\"),\n * mapValues(length()),\n * prop(\"engineering\"),\n * );\n *\n * // = Using the 3rd param of a callback =\n * // The following would print out `data` in its entirety for each value\n * // of `data`.\n * forEach([1, 2, 3, 4], (_item, _index, data) => {\n * console.log(data);\n * }); //=> \"[1, 2, 3, 4]\" logged 4 times\n *\n * // But with `pipe` data would only contain the items up to the current\n * // index\n * pipe([1, 2, 3, 4], forEach((_item, _index, data) => {\n * console.log(data);\n * })); //=> \"[1]\", \"[1, 2]\", \"[1, 2, 3]\", \"[1, 2, 3, 4]\"\n * @dataFirst\n * @category Function\n */\nexport function pipe(data: A): A;\n\nexport function pipe(data: A, funcA: (input: A) => B): B;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n): C;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n): D;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n): E;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n): F;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n): G;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n): H;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n): I;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n): J;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n): K;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n): L;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n): M;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n funcM: (input: M) => N,\n): N;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n funcM: (input: M) => N,\n funcN: (input: N) => O,\n): O;\n\nexport function pipe(\n data: A,\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n funcM: (input: M) => N,\n funcN: (input: N) => O,\n funcO: (input: O) => P,\n): P;\n\nexport function pipe(\n input: unknown,\n ...functions: readonly (LazyFunction | ((value: any) => unknown))[]\n): any {\n let output = input;\n\n const lazyFunctions = functions.map((op) =>\n \"lazy\" in op ? prepareLazyFunction(op) : undefined,\n );\n\n let functionIndex = 0;\n while (functionIndex < functions.length) {\n const lazyFunction = lazyFunctions[functionIndex];\n if (lazyFunction === undefined || !isIterable(output)) {\n const func = functions[functionIndex]!;\n output = func(output);\n functionIndex += 1;\n continue;\n }\n\n const lazySequence: PreparedLazyFunction[] = [];\n for (let index = functionIndex; index < functions.length; index++) {\n const lazyOp = lazyFunctions[index];\n if (lazyOp === undefined) {\n break;\n }\n\n lazySequence.push(lazyOp);\n if (lazyOp.isSingle) {\n break;\n }\n }\n\n const accumulator: unknown[] = [];\n\n for (const value of output) {\n const shouldExitEarly = processItem(value, accumulator, lazySequence);\n if (shouldExitEarly) {\n break;\n }\n }\n\n const { isSingle } = lazySequence.at(-1)!;\n output = isSingle ? accumulator[0] : accumulator;\n functionIndex += lazySequence.length;\n }\n return output;\n}\n\nfunction processItem(\n item: unknown,\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentionally mutable, we use the accumulator directly to accumulate the results.\n accumulator: unknown[],\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentionally mutable, the lazy sequence is stateful and contains the state needed to compute the next value lazily.\n lazySequence: readonly PreparedLazyFunction[],\n): boolean {\n if (lazySequence.length === 0) {\n accumulator.push(item);\n return false;\n }\n\n let currentItem = item;\n\n let lazyResult: LazyResult = SKIP_ITEM;\n let isDone = false;\n for (const [functionsIndex, lazyFn] of lazySequence.entries()) {\n const { index, items } = lazyFn;\n items.push(currentItem);\n lazyResult = lazyFn(currentItem, index, items);\n lazyFn.index += 1;\n if (lazyResult.hasNext) {\n if (lazyResult.hasMany ?? false) {\n for (const subItem of lazyResult.next as readonly unknown[]) {\n const subResult = processItem(\n subItem,\n accumulator,\n lazySequence.slice(functionsIndex + 1),\n );\n if (subResult) {\n return true;\n }\n }\n return isDone;\n }\n currentItem = lazyResult.next;\n }\n if (!lazyResult.hasNext) {\n break;\n }\n // process remaining functions in the pipe\n // but don't process remaining elements in the input array\n if (lazyResult.done) {\n isDone = true;\n }\n }\n if (lazyResult.hasNext) {\n accumulator.push(currentItem);\n }\n return isDone;\n}\n\nfunction prepareLazyFunction(func: LazyFunction): PreparedLazyFunction {\n const { lazy, lazyArgs } = func;\n const fn = lazy(...lazyArgs);\n return Object.assign(fn, {\n isSingle: lazy.single ?? false,\n index: 0,\n items: [] as unknown[],\n });\n}\n\nfunction isIterable(something: unknown): something is Iterable {\n // Check for null and undefined to avoid errors when accessing Symbol.iterator\n return (\n typeof something === \"string\" ||\n (typeof something === \"object\" &&\n something !== null &&\n Symbol.iterator in something)\n );\n}\n", "import { pipe } from \"../pipe\";\nimport type { LazyDefinition } from \"./types/LazyDefinition\";\nimport type { LazyEvaluator } from \"./types/LazyEvaluator\";\n\n/**\n * A version of `purry` for cases where the only meaningful implementation is a\n * lazy one. This is useful for functions that don't have a built-in\n * implementation already, and that can't be optimized to take advantage of\n * having the complete array upfront.\n *\n * Under the hood the function uses `pipe` to utilize it's built-in lazy logic\n * and wraps the pipe with the required invocations to allow using the function\n * outside of pipes too.\n *\n * @param lazy - The main lazy implementation, it assumes that data is an\n * iterable (array-like).\n * @param args - The arguments passed to the overloaded invocation.\n * @see purry\n * @see pipe\n */\nexport function purryFromLazy(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lazy: (...args: any) => LazyEvaluator,\n args: readonly unknown[],\n): unknown {\n const diff = args.length - lazy.length;\n\n if (diff === 1) {\n // dataFirst\n const [data, ...rest] = args;\n const lazyDefinition = { lazy, lazyArgs: rest } satisfies LazyDefinition;\n\n // @ts-expect-error [ts2353] - Pipe expects a function which *might* also have a lazy definition. We are tricking pipe here to take our lazyDefinition without any function attached to it.\n return pipe(data, lazyDefinition);\n }\n\n if (diff === 0) {\n const lazyDefinition = { lazy, lazyArgs: args } satisfies LazyDefinition;\n\n // @ts-expect-error [ts2353] - Pipe expects a function which *might* also have a lazy definition. We are tricking pipe here to take our lazyDefinition without any function attached to it.\n const dataLast = (data: unknown): unknown => pipe(data, lazyDefinition);\n return Object.assign(dataLast, lazyDefinition);\n }\n\n throw new Error(\"Wrong number of arguments\");\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM, lazyIdentityEvaluator } from \"./internal/utilityEvaluators\";\n\n/**\n * Excludes the values from `other` array. The output maintains the same order\n * as the input. The inputs are treated as multi-sets/bags (multiple copies of\n * items are treated as unique items).\n *\n * @param data - The input items.\n * @param other - The values to exclude.\n * @signature\n * difference(data, other)\n * @example\n * difference([1, 2, 3, 4], [2, 5, 3]); // => [1, 4]\n * difference([1, 1, 2, 2], [1]); // => [1, 2, 2]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function difference(data: readonly T[], other: readonly T[]): T[];\n\n/**\n * Excludes the values from `other` array. The output maintains the same order\n * as the input. The inputs are treated as multi-sets/bags (multiple copies of\n * items are treated as unique items).\n *\n * @param other - The values to exclude.\n * @signature\n * difference(other)(data)\n * @example\n * pipe([1, 2, 3, 4], difference([2, 5, 3])); // => [1, 4]\n * pipe([1, 1, 2, 2], difference([1])); // => [1, 2, 2]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function difference(other: readonly T[]): (data: readonly T[]) => T[];\n\nexport function difference(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nfunction lazyImplementation(other: readonly T[]): LazyEvaluator {\n if (other.length === 0) {\n return lazyIdentityEvaluator;\n }\n\n // We need to build a more efficient data structure that would allow us to\n // keep track of the number of times we've seen a value in the other array.\n const remaining = new Map();\n for (const value of other) {\n remaining.set(value, (remaining.get(value) ?? 0) + 1);\n }\n\n return (value) => {\n const copies = remaining.get(value);\n\n if (copies === undefined || copies === 0) {\n // The item is either not part of the other array or we've dropped enough\n // copies of it so we return it.\n return { done: false, hasNext: true, next: value };\n }\n\n // The item is equal to an item in the other array and there are still\n // copies of it to \"account\" for so we skip this one and remove it from our\n // ongoing tally.\n remaining.set(value, copies - 1);\n return SKIP_ITEM;\n };\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\n\ntype IsEqual = (data: T, other: Other) => boolean;\n\n/**\n * Excludes the values from `other` array.\n * Elements are compared by custom comparator isEquals.\n *\n * @param data - The source array.\n * @param other - The values to exclude.\n * @param isEqual - The comparator.\n * @signature\n * differenceWith(data, other, isEqual)\n * @example\n * differenceWith(\n * [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }],\n * [2, 5, 3],\n * ({ a }, b) => a === b,\n * ); //=> [{ a: 1 }, { a: 4 }]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function differenceWith(\n data: readonly T[],\n other: readonly Other[],\n isEqual: IsEqual,\n): T[];\n\n/**\n * Excludes the values from `other` array.\n * Elements are compared by custom comparator isEquals.\n *\n * @param other - The values to exclude.\n * @param isEqual - The comparator.\n * @signature\n * differenceWith(other, isEqual)(data)\n * @example\n * pipe(\n * [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }, { a: 5 }, { a: 6 }],\n * differenceWith([2, 3], ({ a }, b) => a === b),\n * ); //=> [{ a: 1 }, { a: 4 }, { a: 5 }, { a: 6 }]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function differenceWith(\n other: readonly Other[],\n isEqual: IsEqual,\n): (data: readonly T[]) => T[];\n\nexport function differenceWith(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nconst lazyImplementation =\n (\n other: readonly Other[],\n isEqual: IsEqual,\n ): LazyEvaluator =>\n (value) =>\n other.every((otherValue) => !isEqual(value, otherValue))\n ? { done: false, hasNext: true, next: value }\n : SKIP_ITEM;\n", "import { purry } from \"./purry\";\n\n/**\n * Divides two numbers.\n *\n * @param value - The number.\n * @param divisor - The number to divide the value by.\n * @signature\n * divide(value, divisor);\n * @example\n * divide(12, 3) // => 4\n * reduce([1, 2, 3, 4], divide, 24) // => 1\n * @dataFirst\n * @category Number\n */\nexport function divide(value: bigint, divisor: bigint): bigint;\nexport function divide(value: number, divisor: number): number;\n\n/**\n * Divides two numbers.\n *\n * @param divisor - The number to divide the value by.\n * @signature\n * divide(divisor)(value);\n * @example\n * divide(3)(12) // => 4\n * map([2, 4, 6, 8], divide(2)) // => [1, 2, 3, 4]\n * @dataLast\n * @category Number\n */\nexport function divide(divisor: bigint): (value: bigint) => bigint;\nexport function divide(divisor: number): (value: number) => number;\n\nexport function divide(...args: readonly unknown[]): unknown {\n return purry(divideImplementation, args);\n}\n\n// The implementation only uses `number` types, but that's just because it's\n// hard to tell typescript that both value and divisor would be of the same\n// type.\nconst divideImplementation = (value: number, divisor: number): number =>\n value / divisor;\n", "/**\n * A function that takes any arguments and does nothing with them. This is\n * useful as a placeholder for any function or API that requires a **void**\n * function (a function that doesn't return a value). This could also be used in\n * combination with a ternary or other conditional execution to allow disabling\n * a function call for a specific case.\n *\n * Notice that this is a dataLast impl where the function needs to be invoked\n * to get the \"do nothing\" function.\n *\n * See also:\n * * `constant` - A function that ignores it's arguments and returns the same value on every invocation.\n * * `identity` - A function that returns the first argument it receives.\n *\n * @signature\n * doNothing();\n * @example\n * myApi({ onSuccess: handleSuccess, onError: doNothing() });\n * myApi({ onSuccess: isDemoMode ? doNothing(): handleSuccess });\n * @dataLast\n * @category Function\n */\nexport function doNothing(): typeof doesNothing {\n // Notice that the exported identity function is just the \"factory\" for the\n // function. We do it this way so that all \"Function\" utilities have a similar\n // API where the function is called, and not just used \"headless\". e.g.\n // `doNothing()` and not `doNothing`, just like the API for `constant(1)`.\n return doesNothing;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- There is no other way to make typescript infer the function arguments \"backwards\" in data-last invocations without the Args type parameter. @see: https://github.com/typescript-eslint/typescript-eslint/issues/9887\nfunction doesNothing(..._args: Args): void {\n /* do nothing */\n}\n", "import type { IsInteger, IsNegative, Writable } from \"type-fest\";\nimport type { ClampedIntegerSubtract } from \"./internal/types/ClampedIntegerSubtract\";\nimport type { CoercedArray } from \"./internal/types/CoercedArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport type { PartialArray } from \"./internal/types/PartialArray\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\nimport { SKIP_ITEM, lazyIdentityEvaluator } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\ntype Drop =\n IsNegative extends true\n ? // Negative numbers result in nothing being dropped, we return a shallow\n // clone of the array.\n Writable\n : IsInteger extends true\n ? ClampedIntegerSubtract<\n N,\n TupleParts[\"required\"][\"length\"]\n > extends infer RemainingPrefix extends number\n ? RemainingPrefix extends 0\n ? // The drop will occur within the required part of the tuple, we\n // simply remove those elements from it and reconstruct the rest of\n // the tuple.\n [\n ...DropFixedTuple[\"required\"], N>,\n ...PartialArray[\"optional\"]>,\n ...CoercedArray[\"item\"]>,\n ...TupleParts[\"suffix\"],\n ]\n : ClampedIntegerSubtract<\n RemainingPrefix,\n TupleParts[\"optional\"][\"length\"]\n > extends infer RemainingOptional extends number\n ? RemainingOptional extends 0\n ? // The drop will occur within the optional part of the tuple, we\n // completely remove the required part, remove enough elements\n // from the optional part, and reconstruct the rest of the\n // tuple.\n [\n ...PartialArray<\n DropFixedTuple[\"optional\"], RemainingPrefix>\n >,\n ...CoercedArray[\"item\"]>,\n ...TupleParts[\"suffix\"],\n ]\n : // The drop will occur within the rest element or the suffix.\n // Because the suffix can contain any number of elements this\n // case adds more complexity as we need to consider all\n // possible (relevant) lengths. We start by considering the\n // case where there are enough elements within the rest\n // param; this means we still maintain the rest element as it\n // could contain even more elements, and we add the suffix\n // untouched.\n | [\n ...CoercedArray[\"item\"]>,\n ...TupleParts[\"suffix\"],\n ]\n // Additionally, we need to consider the case where the rest\n // element has up to the same number of elements as the\n // suffix; this will result in removing the rest element\n // entirely, and dropping elements from the suffix. We do this\n // for all possible values from 0 to N where N is the\n // remaining value after we handled the prefix. We can exclude\n // the 0 case because it is contained in the previous case.\n | Exclude<\n DropFixedTuple<\n TupleParts[\"suffix\"],\n RemainingOptional,\n true /* IncludePrefixes */\n >,\n TupleParts[\"suffix\"]\n >\n : never\n : never\n : // We can't compute accurate types for non-integer numbers so we\n // fallback to the \"legacy\" typing where we convert our output to a\n // simple array. This is also the case when N is not a literal value\n // (e.g. it is `number`).\n // TODO: We can improve this type by returning a union of all possible dropped shapes (e.g. the equivalent of Drop | Drop | Drop | ...).\n T[number][];\n\ntype DropFixedTuple<\n T,\n N,\n // This flag controls if we want a union of all possible prefixes, or just the\n // final tuple with all N items dropped.\n IncludePrefixes = false,\n Dropped extends unknown[] = [],\n> = Dropped[\"length\"] extends N\n ? T\n : T extends readonly [unknown, ...infer Rest]\n ?\n | DropFixedTuple\n | (true extends IncludePrefixes ? T : never)\n : [];\n\n/**\n * Removes first `n` elements from the `array`.\n *\n * @param array - The target array.\n * @param n - The number of elements to skip.\n * @signature\n * drop(array, n)\n * @example\n * drop([1, 2, 3, 4, 5], 2) // => [3, 4, 5]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function drop(\n array: T,\n n: N,\n): Drop;\n\n/**\n * Removes first `n` elements from the `array`.\n *\n * @param n - The number of elements to skip.\n * @signature\n * drop(n)(array)\n * @example\n * drop(2)([1, 2, 3, 4, 5]) // => [3, 4, 5]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function drop(\n n: N,\n): (array: T) => Drop;\n\nexport function drop(...args: readonly unknown[]): unknown {\n return purry(dropImplementation, args, lazyImplementation);\n}\n\nconst dropImplementation = (\n array: T,\n n: number,\n): T[number][] => (n < 0 ? [...array] : array.slice(n));\n\nfunction lazyImplementation(n: number): LazyEvaluator {\n if (n <= 0) {\n return lazyIdentityEvaluator;\n }\n\n let left = n;\n return (value) => {\n if (left > 0) {\n left -= 1;\n return SKIP_ITEM;\n }\n return { done: false, hasNext: true, next: value };\n };\n}\n", "import type { IsNumericLiteral } from \"type-fest\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\nimport type { ArrayRequiredPrefix } from \"./internal/types/ArrayRequiredPrefix\";\n\n/**\n * Checks if the given array has at least the defined number of elements. When\n * the minimum used is a literal (e.g. `3`) the output is refined accordingly so\n * that those indices are defined when accessing the array even when using\n * typescript's 'noUncheckedIndexAccess'.\n *\n * @param data - The input array.\n * @param minimum - The minimum number of elements the array must have.\n * @returns True if the array's length is *at least* `minimum`. When `minimum`\n * is a literal value, the output is narrowed to ensure the first items are\n * guaranteed.\n * @signature\n * hasAtLeast(data, minimum)\n * @example\n * hasAtLeast([], 4); // => false\n *\n * const data: number[] = [1,2,3,4];\n * hasAtLeast(data, 1); // => true\n * data[0]; // 1, with type `number`\n * @dataFirst\n * @category Array\n */\nexport function hasAtLeast(\n data: IterableContainer | T,\n minimum: IsNumericLiteral extends true ? N : never,\n): data is ArrayRequiredPrefix;\nexport function hasAtLeast(data: IterableContainer, minimum: number): boolean;\n\n/**\n * Checks if the given array has at least the defined number of elements. When\n * the minimum used is a literal (e.g. `3`) the output is refined accordingly so\n * that those indices are defined when accessing the array even when using\n * typescript's 'noUncheckedIndexAccess'.\n *\n * @param minimum - The minimum number of elements the array must have.\n * @returns True if the array's length is *at least* `minimum`. When `minimum`\n * is a literal value, the output is narrowed to ensure the first items are\n * guaranteed.\n * @signature\n * hasAtLeast(minimum)(data)\n * @example\n * pipe([], hasAtLeast(4)); // => false\n *\n * const data = [[1,2], [3], [4,5]];\n * pipe(\n * data,\n * filter(hasAtLeast(2)),\n * map(([, second]) => second),\n * ); // => [2,5], with type `number[]`\n * @dataLast\n * @category Array\n */\nexport function hasAtLeast(\n minimum: IsNumericLiteral extends true ? N : never,\n): (\n data: IterableContainer | T,\n) => data is ArrayRequiredPrefix;\nexport function hasAtLeast(\n minimum: number,\n): (data: IterableContainer) => boolean;\n\nexport function hasAtLeast(...args: readonly unknown[]): unknown {\n return purry(hasAtLeastImplementation, args);\n}\n\nconst hasAtLeastImplementation = (\n data: IterableContainer,\n minimum: number,\n): boolean => data.length >= minimum;\n", "/**\n * An efficient hack to swap the values at two indices in an array *in-place*.\n */\nexport function swapInPlace(\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentional\n data: unknown[],\n i: number,\n j: number,\n): void {\n // We use destructuring to perform an in-place swap *without* needing a\n // temporary variable\n [data[i], data[j]] = [data[j], data[i]];\n}\n", "/**\n * Heap related utilities.\n */\n\nimport { hasAtLeast } from \"../hasAtLeast\";\nimport { swapInPlace } from \"./swapInPlace\";\nimport type { CompareFunction } from \"./types/CompareFunction\";\n\n/**\n * Mutates an array into a \"max\"-heap based on `compareFn` so that for any `item` in the heap, `compareFn(heap[0], item) > 0`.\n *\n * @param heap - The array to be heapified. The array would be mutated!\n * @param compareFn - The comparator used to order items in the heap. Use the\n * same function in all calls mutating the same heap otherwise you'd get\n * unexpected results.\n */\nexport function heapify(\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentional!\n heap: T[],\n compareFn: CompareFunction,\n): void {\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n heapSiftDown(heap, i, compareFn);\n }\n}\n\n/**\n * Insert an item into a heap if it's \"smaller\" (in regards to `compareFn`) than\n * the current head of the heap (which is the \"largest\" value in the heap). If\n * the item is inserted, the previous head of the heap is returned, otherwise\n * `undefined` is returned and the heap is unchanged.\n *\n * @param heap - A *mutable* array representing a heap (see `heapify`).\n * @param compareFn - The comparator used to order items in the heap. Use the.\n * @param item - The item to be inserted into the heap.\n * @returns `undefined` if the heap is unchanged, or the previous head of the\n * heap if the item was inserted.\n */\nexport function heapMaybeInsert(\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentional!\n heap: T[],\n compareFn: CompareFunction,\n item: T,\n): T | undefined {\n if (!hasAtLeast(heap, 1)) {\n return undefined;\n }\n\n const [head] = heap;\n\n if (compareFn(item, head) >= 0) {\n // The item shouldn't be inserted into the heap, the heap is unchanged.\n return undefined;\n }\n\n heap[0] = item;\n heapSiftDown(heap, 0, compareFn);\n return head;\n}\n\n/**\n * The main heap operation. Takes a `heap` and an `index` and sifts the item\n * down the heap until it reaches the correct position based on `compareFn`,\n * swapping other items in the process.\n */\nfunction heapSiftDown(\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentional!\n heap: T[],\n index: number,\n compareFn: CompareFunction,\n): void {\n let currentIndex = index;\n\n // The loop continues while the currentIndex has children in the heap.\n while (currentIndex * 2 + 1 < heap.length) {\n const firstChildIndex = currentIndex * 2 + 1;\n\n let swapIndex =\n compareFn(heap[currentIndex]!, heap[firstChildIndex]!) < 0\n ? // Is the parent \"smaller\" (in regards to `compareFn`) to its child?\n firstChildIndex\n : currentIndex;\n\n const secondChildIndex = firstChildIndex + 1;\n if (\n secondChildIndex < heap.length &&\n compareFn(heap[swapIndex]!, heap[secondChildIndex]!) < 0\n ) {\n // Is there a second child? Is it the smallest of the three?\n swapIndex = secondChildIndex;\n }\n\n if (swapIndex === currentIndex) {\n // We assume the array is a heap and the existing order of items satisfies\n // the compareFn so we can stop here.\n return;\n }\n\n swapInPlace(heap, currentIndex, swapIndex);\n\n currentIndex = swapIndex;\n }\n}\n", "import type { CompareFunction } from \"./types/CompareFunction\";\nimport type { NonEmptyArray } from \"./types/NonEmptyArray\";\n\n// We define the comparators in a global const so that they are only\n// instantiated once, and so we can couple a label (string) for them that could\n// be used in runtime to refer to them (e.g. \"asc\", \"desc\").\nconst COMPARATORS = {\n asc: (x: T, y: T) => x > y,\n desc: (x: T, y: T) => x < y,\n} as const;\n\n/**\n * An order rule defines a projection/extractor that returns a comparable from\n * the data being compared. It would be run on each item being compared, and a\n * comparator would then be used on the results to determine the order.\n *\n * There are 2 forms of the order rule, a simple one which only provides the\n * projection function and assumes ordering is ascending, and a 2-tuple where\n * the first element is the projection function and the second is the direction;\n * this allows changing the direction without defining a more complex projection\n * to simply negate the value (e.g. `(x) => -x`).\n *\n * We rely on the javascript implementation of `<` and `>` for comparison, which\n * will attempt to transform both operands into a primitive comparable value via\n * the built in `valueOf` function (and then `toString`). It's up to the caller\n * to make sure that the projection is returning a value that makes sense for\n * this logic.\n *\n * It's important to note that there is no built-in caching/memoization of\n * projection function and therefore no guarantee that it would only be called\n * once.\n */\nexport type OrderRule =\n | Projection\n | readonly [projection: Projection, direction: keyof typeof COMPARATORS];\n\ntype Projection = (x: T) => Comparable;\n\n// We define the Comparable based on how JS coerces values into primitives when\n// used with the `<` and `>` operators.\n// @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#type_coercion\ntype Comparable =\n | ComparablePrimitive\n | { [Symbol.toPrimitive]: (hint: string) => ComparablePrimitive }\n | { toString: () => string }\n | { valueOf: () => ComparablePrimitive };\n\n// Notice that `boolean` is special in that it is coerced as a number (0 for\n// `false`, 1 for `true`) implicitly.\ntype ComparablePrimitive = bigint | boolean | number | string;\n\n/**\n * Allows functions that want to handle a variadic number of order rules a\n * a simplified API that hides most of the implementation details. The only\n * thing users of this function need to do is provide a function that would take\n * the data, and a compare function that can be used to determine the order\n * between the items of the array.\n * This functions takes care of the rest; it will parse rules, built the\n * comparer, and manage the purrying of the input arguments.\n */\nexport function purryOrderRules(\n func: (data: readonly T[], compareFn: CompareFunction) => unknown,\n inputArgs: readonly unknown[],\n): unknown {\n // We rely on casting blindly here, but we rely on casting blindly everywhere\n // else when we call purry so it's fine...\n const [dataOrRule, ...rules] = inputArgs as\n | Readonly>>\n | [\n data: OrderRule | readonly T[],\n ...rules: Readonly>>,\n ];\n\n if (!isOrderRule(dataOrRule)) {\n // dataFirst!\n\n // @ts-expect-error [ts2556]: Typescript is failing to infer the type of rules\n // correctly here after the type refinement above, rules should be non-empty\n // when we get here.\n const compareFn = orderRuleComparer(...rules);\n return func(dataOrRule, compareFn);\n }\n\n // dataLast!\n\n // Important: initialize the comparer outside of the returned function so it\n // it's constructed and shared everywhere (it's stateless so should be safe\n // if used multiple times).\n const compareFn = orderRuleComparer(dataOrRule, ...rules);\n return (data: readonly T[]) => func(data, compareFn);\n}\n\n/**\n * Some functions need an extra number argument, this helps facilitate that.\n */\nexport function purryOrderRulesWithArgument(\n func: (\n data: readonly T[],\n compareFn: CompareFunction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Function inference in typescript relies on `any` to work, it doesn't work with `unknown`\n arg: any,\n ) => unknown,\n [first, second, ...rest]: readonly unknown[],\n): unknown {\n // We need to pull the `n` argument out to make it work with purryOrderRules.\n let arg: unknown;\n let argRemoved: readonly unknown[];\n if (isOrderRule(second)) {\n // dataLast!\n arg = first;\n argRemoved = [second, ...rest];\n } else {\n // dataFirst!\n arg = second;\n argRemoved = [first, ...rest];\n }\n\n return purryOrderRules((...args) => func(...args, arg), argRemoved);\n}\n\nfunction orderRuleComparer(\n primaryRule: OrderRule,\n secondaryRule?: OrderRule,\n ...otherRules: readonly OrderRule[]\n): (a: T, b: T) => number {\n const projector =\n typeof primaryRule === \"function\" ? primaryRule : primaryRule[0];\n\n const direction = typeof primaryRule === \"function\" ? \"asc\" : primaryRule[1];\n const { [direction]: comparator } = COMPARATORS;\n\n const nextComparer =\n secondaryRule === undefined\n ? undefined\n : orderRuleComparer(secondaryRule, ...otherRules);\n\n return (a, b) => {\n const projectedA = projector(a);\n const projectedB = projector(b);\n\n if (comparator(projectedA, projectedB)) {\n return 1;\n }\n\n if (comparator(projectedB, projectedA)) {\n return -1;\n }\n\n // The elements are equal base on the current comparator and projection. So\n // we need to check the elements using the next comparer, if one exists,\n // otherwise we consider them as true equal (returning 0).\n return nextComparer?.(a, b) ?? 0;\n };\n}\n\nfunction isOrderRule(x: unknown): x is OrderRule {\n if (isProjection(x)) {\n return true;\n }\n\n if (typeof x !== \"object\" || !Array.isArray(x)) {\n return false;\n }\n\n const [maybeProjection, maybeDirection, ...rest] = x as readonly unknown[];\n\n return (\n isProjection(maybeProjection) &&\n typeof maybeDirection === \"string\" &&\n maybeDirection in COMPARATORS &&\n // Has to be a 2-tuple\n rest.length === 0\n );\n}\n\nconst isProjection = (x: unknown): x is Projection =>\n typeof x === \"function\" && x.length === 1;\n", "import { heapify, heapMaybeInsert } from \"./internal/heap\";\nimport {\n purryOrderRulesWithArgument,\n type OrderRule,\n} from \"./internal/purryOrderRules\";\nimport type { CompareFunction } from \"./internal/types/CompareFunction\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\n\n/**\n * Drop the first `n` items from `data` based on the provided ordering criteria. This allows you to avoid sorting the array before dropping the items. The complexity of this function is *O(Nlogn)* where `N` is the length of the array.\n *\n * For the opposite operation (to keep `n` elements) see `takeFirstBy`.\n *\n * @param data - The input array.\n * @param n - The number of items to drop. If `n` is non-positive no items would be dropped and a *clone* of the input would be returned, if `n` is bigger then data.length no items would be returned.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns A subset of the input array.\n * @signature\n * dropFirstBy(data, n, ...rules);\n * @example\n * dropFirstBy(['aa', 'aaaa', 'a', 'aaa'], 2, x => x.length); // => ['aaa', 'aaaa']\n * @dataFirst\n * @category Array\n */\nexport function dropFirstBy(\n data: readonly T[],\n n: number,\n ...rules: Readonly>>\n): T[];\n\n/**\n * Drop the first `n` items from `data` based on the provided ordering criteria. This allows you to avoid sorting the array before dropping the items. The complexity of this function is *O(Nlogn)* where `N` is the length of the array.\n *\n * For the opposite operation (to keep `n` elements) see `takeFirstBy`.\n *\n * @param n - The number of items to drop. If `n` is non-positive no items would be dropped and a *clone* of the input would be returned, if `n` is bigger then data.length no items would be returned.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns A subset of the input array.\n * @signature\n * dropFirstBy(n, ...rules)(data);\n * @example\n * pipe(['aa', 'aaaa', 'a', 'aaa'], dropFirstBy(2, x => x.length)); // => ['aaa', 'aaaa']\n * @dataLast\n * @category Array\n */\nexport function dropFirstBy(\n n: number,\n ...rules: Readonly>>\n): (data: readonly T[]) => T[];\n\nexport function dropFirstBy(...args: readonly unknown[]): unknown {\n return purryOrderRulesWithArgument(dropFirstByImplementation, args);\n}\n\nfunction dropFirstByImplementation(\n data: readonly T[],\n compareFn: CompareFunction,\n n: number,\n): T[] {\n if (n >= data.length) {\n return [];\n }\n\n if (n <= 0) {\n return [...data];\n }\n\n const heap = data.slice(0, n);\n heapify(heap, compareFn);\n\n const out = [];\n\n const rest = data.slice(n);\n for (const item of rest) {\n const previousHead = heapMaybeInsert(heap, compareFn, item);\n out.push(previousHead ?? item);\n }\n\n return out;\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Removes last `n` elements from the `array`.\n *\n * @param array - The target array.\n * @param n - The number of elements to skip.\n * @signature\n * dropLast(array, n)\n * @example\n * dropLast([1, 2, 3, 4, 5], 2) // => [1, 2, 3]\n * @dataFirst\n * @category Array\n */\nexport function dropLast(\n array: T,\n n: number,\n): T[number][];\n\n/**\n * Removes last `n` elements from the `array`.\n *\n * @param n - The number of elements to skip.\n * @signature\n * dropLast(n)(array)\n * @example\n * dropLast(2)([1, 2, 3, 4, 5]) // => [1, 2, 3]\n * @dataLast\n * @category Array\n */\nexport function dropLast(\n n: number,\n): (array: T) => T[number][];\n\nexport function dropLast(...args: readonly unknown[]): unknown {\n return purry(dropLastImplementation, args);\n}\n\nconst dropLastImplementation = (\n array: T,\n n: number,\n): T[number][] =>\n n > 0 ? array.slice(0, Math.max(0, array.length - n)) : [...array];\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Removes elements from the end of the array until the predicate returns false.\n *\n * The predicate is applied to each element in the array starting from the end and moving towards the beginning, until the predicate returns false. The returned array includes elements from the beginning of the array, up to and including the element that produced false for the predicate.\n *\n * @param data - The array.\n * @param predicate - The predicate.\n * @signature\n * dropLastWhile(data, predicate)\n * @example\n * dropLastWhile([1, 2, 10, 3, 4], x => x < 10) // => [1, 2, 10]\n * @dataFirst\n * @category Array\n */\nexport function dropLastWhile(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][];\n\n/**\n * Removes elements from the end of the array until the predicate returns false.\n *\n * The predicate is applied to each element in the array starting from the end and moving towards the beginning, until the predicate returns false. The returned array includes elements from the beginning of the array, up to and including the element that produced false for the predicate.\n *\n * @param predicate - The predicate.\n * @signature\n * dropLastWhile(predicate)(data)\n * @example\n * pipe([1, 2, 10, 3, 4], dropLastWhile(x => x < 10)) // => [1, 2, 10]\n * @dataLast\n * @category Array\n */\nexport function dropLastWhile(\n predicate: (item: T[number], index: number, data: T) => boolean,\n): (data: T) => T[number][];\n\nexport function dropLastWhile(...args: readonly unknown[]): unknown {\n return purry(dropLastWhileImplementation, args);\n}\n\nfunction dropLastWhileImplementation(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][] {\n for (let i = data.length - 1; i >= 0; i--) {\n if (!predicate(data[i], i, data)) {\n return data.slice(0, i + 1);\n }\n }\n return [];\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Removes elements from the beginning of the array until the predicate returns false.\n *\n * The predicate is applied to each element in the array, until the predicate returns false. The returned array includes the rest of the elements, starting with the element that produced false for the predicate.\n *\n * @param data - The array.\n * @param predicate - The predicate.\n * @signature\n * dropWhile(data, predicate)\n * @example\n * dropWhile([1, 2, 10, 3, 4], x => x < 10) // => [10, 3, 4]\n * @dataFirst\n * @category Array\n */\nexport function dropWhile(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][];\n\n/**\n * Removes elements from the beginning of the array until the predicate returns false.\n *\n * The predicate is applied to each element in the array, until the predicate returns false. The returned array includes the rest of the elements, starting with the element that produced false for the predicate.\n *\n * @param predicate - The predicate.\n * @signature\n * dropWhile(predicate)(data)\n * @example\n * pipe([1, 2, 10, 3, 4], dropWhile(x => x < 10)) // => [10, 3, 4]\n * @dataLast\n * @category Array\n */\nexport function dropWhile(\n predicate: (item: T[number], index: number, data: T) => boolean,\n): (data: T) => T[number][];\n\nexport function dropWhile(...args: readonly unknown[]): unknown {\n return purry(dropWhileImplementation, args);\n}\n\nfunction dropWhileImplementation(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][] {\n for (const [index, item] of data.entries()) {\n if (!predicate(item, index, data)) {\n return data.slice(index);\n }\n }\n return [];\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Determines whether a string ends with the provided suffix, and refines the\n * output type if possible.\n *\n * This function is a wrapper around the built-in [`String.prototype.endsWith`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith)\n * method, but doesn't expose the `endPosition` parameter. To check only up to a\n * specific position, use `endsWith(sliceString(data, 0, endPosition), suffix)`.\n *\n * @param data - The input string.\n * @param suffix - The string to check for at the end.\n * @signature\n * endsWith(data, suffix);\n * @example\n * endsWith(\"hello world\", \"hello\"); // false\n * endsWith(\"hello world\", \"world\"); // true\n * @dataFirst\n * @category String\n */\nexport function endsWith(\n data: T,\n suffix: string extends Suffix ? never : Suffix,\n): data is T & `${string}${Suffix}`;\nexport function endsWith(data: string, suffix: string): boolean;\n\n/**\n * Determines whether a string ends with the provided suffix, and refines the\n * output type if possible.\n *\n * This function is a wrapper around the built-in [`String.prototype.endsWith`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith)\n * method, but doesn't expose the `endPosition` parameter. To check only up to a\n * specific position, use `endsWith(sliceString(data, 0, endPosition), suffix)`.\n *\n * @param suffix - The string to check for at the end.\n * @signature\n * endsWith(suffix)(data);\n * @example\n * pipe(\"hello world\", endsWith(\"hello\")); // false\n * pipe(\"hello world\", endsWith(\"world\")); // true\n * @dataLast\n * @category String\n */\nexport function endsWith(\n suffix: string extends Suffix ? never : Suffix,\n): (data: T) => data is T & `${string}${Suffix}`;\nexport function endsWith(suffix: string): (data: string) => boolean;\n\nexport function endsWith(...args: readonly unknown[]): unknown {\n return purry(endsWithImplementation, args);\n}\n\nconst endsWithImplementation = (data: string, suffix: string): boolean =>\n data.endsWith(suffix);\n", "/* eslint-disable @typescript-eslint/no-empty-object-type --\n * We want to match the typing of the built-in Object.entries as much as\n * possible!\n */\nimport type { Simplify, ValueOf } from \"type-fest\";\nimport { purry } from \"./purry\";\nimport type { ToString } from \"./internal/types/ToString\";\n\ntype Entry = Simplify<\n ValueOf<{\n // `Object.entries` only returns enumerable keys, skipping symbols.\n [P in Exclude]-?: [\n // and all keys are converted to strings.\n key: ToString

,\n // Optionality doesn't play a factor in the result of entries because its\n // a typing thing, not a runtime thing. We need to remove any `undefined`\n // added just because the prop is optional.\n value: Required[P],\n ];\n }>\n>;\n\n/**\n * Returns an array of key/values of the enumerable properties of an object.\n *\n * @param data - Object to return keys and values of.\n * @signature\n * entries(object)\n * @example\n * entries({ a: 1, b: 2, c: 3 }); // => [['a', 1], ['b', 2], ['c', 3]]\n * @dataFirst\n * @category Object\n */\nexport function entries(data: T): Entry[];\n\n/**\n * Returns an array of key/values of the enumerable properties of an object.\n *\n * @signature\n * entries()(object)\n * @example\n * pipe({ a: 1, b: 2, c: 3 }, entries()); // => [['a', 1], ['b', 2], ['c', 3]]\n * @dataLast\n * @category Object\n */\nexport function entries(): (data: T) => Entry[];\n\nexport function entries(...args: readonly unknown[]): unknown {\n return purry(Object.entries, args);\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Basic structure of `evolver` parameter of the function `evolve`.\n */\ntype GenericEvolver = {\n readonly [P in string]: GenericEvolver | ((data: unknown) => unknown);\n};\n\n/**\n * Creates an assumed `evolver` type from the type of `data` argument.\n *\n * @example\n * interface Data {\n * id: number;\n * quartile: number[];\n * time?: { elapsed: number; remaining?: number };\n * }\n * type Nested = Evolver; // => type Nested = {\n * // id?: ((data: number) => unknown) | undefined;\n * // quartile?: ((data: number[]) => unknown) | undefined;\n * // time?:\n * // | ((data: { elapsed: number; remaining?: number | undefined }) => unknown)\n * // | {\n * // elapsed?: ((data: number) => unknown) | undefined;\n * // remaining?: ((data: number) => unknown) | undefined;\n * // }\n * // | undefined;\n * // };\n */\ntype Evolver = T extends object\n ? T extends IterableContainer\n ? never\n : {\n readonly [K in keyof T]?: K extends symbol\n ? never\n : Evolver | ((data: Required[K]) => unknown);\n }\n : never;\n\n/**\n * Creates return type from the type of arguments of `evolve`.\n */\ntype Evolved = T extends object\n ? {\n -readonly [K in keyof T]: K extends keyof E\n ? E[K] extends (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Functions aren't inferred correctly when using `unknown` for the params.\n ...arg: any\n ) => infer R\n ? R\n : Evolved\n : Required[K];\n }\n : T;\n\n/**\n * Creates a new object by applying functions that is included in `evolver` object parameter\n * to the `data` object parameter according to their corresponding path.\n *\n * Functions included in `evolver` object will not be invoked\n * if its corresponding key does not exist in the `data` object.\n * Also, values included in `data` object will be kept as is\n * if its corresponding key does not exist in the `evolver` object.\n *\n * @param object - Object whose value is applied to the corresponding function\n * that is defined in `evolver` at the same path.\n * @param evolver - Object that include functions that is applied to\n * the corresponding value of `data` object at the same path.\n * @signature\n * evolve(data, evolver)\n * @example\n * const evolver = {\n * count: add(1),\n * time: { elapsed: add(1), remaining: add(-1) },\n * };\n * const data = {\n * id: 10,\n * count: 10,\n * time: { elapsed: 100, remaining: 1400 },\n * };\n * evolve(data, evolver)\n * // => {\n * // id: 10,\n * // count: 11,\n * // time: { elapsed: 101, remaining: 1399 },\n * // }\n * @dataFirst\n * @category Object\n */\nexport function evolve>(\n object: T,\n evolver: E,\n): Evolved;\n\n/**\n * Creates a new object by applying functions that is included in `evolver` object parameter\n * to the `data` object parameter according to their corresponding path.\n *\n * Functions included in `evolver` object will not be invoked\n * if its corresponding key does not exist in the `data` object.\n * Also, values included in `data` object will not be used\n * if its corresponding key does not exist in the `evolver` object.\n *\n * @param evolver - Object that include functions that is applied to\n * the corresponding value of `data` object at the same path.\n * @signature\n * evolve(evolver)(data)\n * @example\n * const evolver = {\n * count: add(1),\n * time: { elapsed: add(1), remaining: add(-1) },\n * };\n * const data = {\n * id: 10,\n * count: 10,\n * time: { elapsed: 100, remaining: 1400 },\n * };\n * pipe(data, evolve(evolver))\n * // => {\n * // id: 10,\n * // count: 11,\n * // time: { elapsed: 101, remaining: 1399 },\n * // }\n * @dataLast\n * @category Object\n */\nexport function evolve>(\n evolver: E,\n): (object: T) => Evolved;\n\nexport function evolve(...args: readonly unknown[]): unknown {\n return purry(evolveImplementation, args);\n}\n\nfunction evolveImplementation(data: unknown, evolver: GenericEvolver): unknown {\n if (typeof data !== \"object\" || data === null) {\n return data;\n }\n\n const out: Record = { ...data };\n\n for (const [key, value] of Object.entries(evolver)) {\n if (key in out) {\n out[key] =\n typeof value === \"function\"\n ? value(out[key])\n : evolveImplementation(out[key], value);\n }\n }\n\n return out;\n}\n", "import type { Writable } from \"type-fest\";\nimport type { FilteredArray } from \"./internal/types/FilteredArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n// When the predicate used for filter isn't refining (like a type-predicate) we\n// can narrow the result slightly if it's also trivial (it returns the same\n// result for all items). This is uncommon, but can be useful to \"short-circuit\"\n// the filter.\ntype NonRefinedFilteredArray<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n> = boolean extends IsItemIncluded\n ? // We don't know which items of the array the predicate would allow in the\n // output so we can only safely say that the result is an array with items\n // from the input array.\n // TODO: Theoretically we could build an output shape that would take into account the **order** of elements in the input array by reconstructing it with every single element in it either included or not, but this type can grow to a union of as much as 2^n options which might not be usable in practice.\n T[number][]\n : IsItemIncluded extends true\n ? // If the predicate is always true we return a shallow copy of the array.\n // If it was originally readonly we need to strip that away.\n Writable\n : // If the predicate is always false we will always return an empty\n // array.\n [];\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * @param data - The array to filter.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise. A type-predicate can also be used to narrow the result.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(data, predicate)\n * @example\n * filter([1, 2, 3], x => x % 2 === 1) // => [1, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function filter<\n T extends IterableContainer,\n Condition extends T[number],\n>(\n data: T,\n predicate: (value: T[number], index: number, data: T) => value is Condition,\n): FilteredArray;\nexport function filter<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n>(\n data: T,\n predicate: (value: T[number], index: number, data: T) => IsItemIncluded,\n): NonRefinedFilteredArray;\n\n/**\n * Creates a shallow copy of a portion of a given array, filtered down to just\n * the elements from the given array that pass the test implemented by the\n * provided function. Equivalent to `Array.prototype.filter`.\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to keep the element in the resulting array, and `false`\n * otherwise.\n * @returns A shallow copy of the given array containing just the elements that\n * pass the test. If no elements pass the test, an empty array is returned.\n * @signature\n * filter(predicate)(data)\n * @example\n * pipe([1, 2, 3], filter(x => x % 2 === 1)) // => [1, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function filter<\n T extends IterableContainer,\n Condition extends T[number],\n>(\n predicate: (value: T[number], index: number, data: T) => value is Condition,\n): (data: T) => FilteredArray;\nexport function filter<\n T extends IterableContainer,\n IsItemIncluded extends boolean,\n>(\n predicate: (value: T[number], index: number, data: T) => IsItemIncluded,\n): (data: T) => NonRefinedFilteredArray;\n\nexport function filter(...args: readonly unknown[]): unknown {\n return purry(filterImplementation, args, lazyImplementation);\n}\n\nconst filterImplementation = (\n data: readonly T[],\n predicate: (value: T, index: number, array: readonly T[]) => boolean,\n): T[] => data.filter(predicate);\n\nconst lazyImplementation =\n (\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n ): LazyEvaluator =>\n (value, index, data) =>\n predicate(value, index, data)\n ? { done: false, hasNext: true, next: value }\n : SKIP_ITEM;\n", "import type { StrictFunction } from \"./types/StrictFunction\";\n\ntype Single = Func & { readonly single: true };\n\nexport const toSingle = (fn: Func): Single =>\n Object.assign(fn, { single: true as const });\n", "import { toSingle } from \"./internal/toSingle\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns the first element in the provided array that satisfies the provided\n * testing function. If no values satisfy the testing function, `undefined` is\n * returned.\n *\n * Similar functions:\n * * `findLast` - If you need the last element that satisfies the provided testing function.\n * * `findIndex` - If you need the index of the found element in the array.\n * * `indexOf` - If you need to find the index of a value.\n * * `includes` - If you need to find if a value exists in an array.\n * * `some` - If you need to find if any element satisfies the provided testing function.\n * * `filter` - If you need to find all elements that satisfy the provided testing function.\n *\n * @param data - The items to search in.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to indicate a matching element has been found, and\n * `false` otherwise. A type-predicate can also be used to narrow the result.\n * @returns The first element in the array that satisfies the provided testing\n * function. Otherwise, `undefined` is returned.\n * @signature\n * find(data, predicate)\n * @example\n * find([1, 3, 4, 6], n => n % 2 === 0) // => 4\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function find(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): S | undefined;\nexport function find(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): T | undefined;\n\n/**\n * Returns the first element in the provided array that satisfies the provided\n * testing function. If no values satisfy the testing function, `undefined` is\n * returned.\n *\n * Similar functions:\n * * `findLast` - If you need the last element that satisfies the provided testing function.\n * * `findIndex` - If you need the index of the found element in the array.\n * * `indexOf` - If you need to find the index of a value.\n * * `includes` - If you need to find if a value exists in an array.\n * * `some` - If you need to find if any element satisfies the provided testing function.\n * * `filter` - If you need to find all elements that satisfy the provided testing function.\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to indicate a matching element has been found, and\n * `false` otherwise. A type-predicate can also be used to narrow the result.\n * @returns The first element in the array that satisfies the provided testing\n * function. Otherwise, `undefined` is returned.\n * @signature\n * find(predicate)(data)\n * @example\n * pipe(\n * [1, 3, 4, 6],\n * find(n => n % 2 === 0)\n * ) // => 4\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function find(\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): (data: readonly T[]) => S | undefined;\nexport function find(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): (data: readonly T[]) => T | undefined;\n\nexport function find(...args: readonly unknown[]): unknown {\n return purry(findImplementation, args, toSingle(lazyImplementation));\n}\n\nconst findImplementation = (\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): S | undefined => data.find(predicate);\n\nconst lazyImplementation =\n (\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n ): LazyEvaluator =>\n (value, index, data) =>\n predicate(value, index, data)\n ? { done: true, hasNext: true, next: value }\n : SKIP_ITEM;\n", "import { purry } from \"./purry\";\n\n/**\n * Returns the index of the first element in an array that satisfies the\n * provided testing function. If no elements satisfy the testing function, -1 is\n * returned.\n *\n * See also the `find` method, which returns the first element that satisfies\n * the testing function (rather than its index).\n *\n * @param data - The items to search in.\n * @param predicate - A function to execute for each element in the array. It\n * should return a `true` to indicate a matching element has been found, and a\n * `false` otherwise.\n * @returns The index of the first element in the array that passes the test.\n * Otherwise, -1.\n * @signature\n * findIndex(data, predicate)\n * @example\n * findIndex([1, 3, 4, 6], n => n % 2 === 0) // => 2\n * @dataFirst\n * @category Array\n */\nexport function findIndex(\n data: readonly T[],\n predicate: (value: T, index: number, obj: readonly T[]) => boolean,\n): number;\n\n/**\n * Returns the index of the first element in an array that satisfies the\n * provided testing function. If no elements satisfy the testing function, -1 is\n * returned.\n *\n * See also the `find` method, which returns the first element that satisfies\n * the testing function (rather than its index).\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return a `true` to indicate a matching element has been found, and a\n * `false` otherwise.\n * @returns The index of the first element in the array that passes the test.\n * Otherwise, -1.\n * @signature\n * findIndex(predicate)(data)\n * @example\n * pipe(\n * [1, 3, 4, 6],\n * findIndex(n => n % 2 === 0)\n * ); // => 2\n * @dataLast\n * @category Array\n */\nexport function findIndex(\n predicate: (value: T, index: number, obj: readonly T[]) => boolean,\n): (data: readonly T[]) => number;\n\nexport function findIndex(...args: readonly unknown[]): unknown {\n return purry(findIndexImplementation, args);\n}\n\nconst findIndexImplementation = (\n data: readonly T[],\n predicate: (value: T, index: number, obj: readonly T[]) => boolean,\n): number => data.findIndex(predicate);\n", "import { purry } from \"./purry\";\n\n/**\n * Iterates the array in reverse order and returns the value of the first\n * element that satisfies the provided testing function. If no elements satisfy\n * the testing function, undefined is returned.\n *\n * Similar functions:\n * * `find` - If you need the first element that satisfies the provided testing function.\n * * `findLastIndex` - If you need the index of the found element in the array.\n * * `lastIndexOf` - If you need to find the index of a value.\n * * `includes` - If you need to find if a value exists in an array.\n * * `some` - If you need to find if any element satisfies the provided testing function.\n * * `filter` - If you need to find all elements that satisfy the provided testing function.\n *\n * @param data - The items to search in.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to indicate a matching element has been found, and\n * `false` otherwise. A type-predicate can also be used to narrow the result.\n * @returns The last (highest-index) element in the array that satisfies the\n * provided testing function; undefined if no matching element is found.\n * @signature\n * findLast(data, predicate)\n * @example\n * findLast([1, 3, 4, 6], n => n % 2 === 1) // => 3\n * @dataFirst\n * @category Array\n */\nexport function findLast(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): S | undefined;\nexport function findLast(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): T | undefined;\n\n/**\n * Iterates the array in reverse order and returns the value of the first\n * element that satisfies the provided testing function. If no elements satisfy\n * the testing function, undefined is returned.\n *\n * Similar functions:\n * * `find` - If you need the first element that satisfies the provided testing function.\n * * `findLastIndex` - If you need the index of the found element in the array.\n * * `lastIndexOf` - If you need to find the index of a value.\n * * `includes` - If you need to find if a value exists in an array.\n * * `some` - If you need to find if any element satisfies the provided testing function.\n * * `filter` - If you need to find all elements that satisfy the provided testing function.\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to indicate a matching element has been found, and\n * `false` otherwise. A type-predicate can also be used to narrow the result.\n * @returns The last (highest-index) element in the array that satisfies the\n * provided testing function; undefined if no matching element is found.\n * @signature\n * findLast(predicate)(data)\n * @example\n * pipe(\n * [1, 3, 4, 6],\n * findLast(n => n % 2 === 1)\n * ) // => 3\n * @dataLast\n * @category Array\n */\nexport function findLast(\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): (data: readonly T[]) => S | undefined;\nexport function findLast(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): (data: readonly T[]) => T | undefined;\n\nexport function findLast(...args: readonly unknown[]): unknown {\n return purry(findLastImplementation, args);\n}\n\nconst findLastImplementation = (\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): S | undefined => {\n // TODO [>2]: When node 18 reaches end-of-life bump target lib to ES2023+ and use `Array.prototype.findLast` here.\n\n for (let i = data.length - 1; i >= 0; i--) {\n const item = data[i]!;\n if (predicate(item, i, data)) {\n return item;\n }\n }\n\n return undefined;\n};\n", "import { purry } from \"./purry\";\n\n/**\n * Iterates the array in reverse order and returns the index of the first\n * element that satisfies the provided testing function. If no elements satisfy\n * the testing function, -1 is returned.\n *\n * See also `findLast` which returns the value of last element that satisfies\n * the testing function (rather than its index).\n *\n * @param data - The items to search in.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to indicate a matching element has been found, and\n * `false` otherwise.\n * @returns The index of the last (highest-index) element in the array that\n * passes the test. Otherwise -1 if no matching element is found.\n * @signature\n * findLastIndex(data, predicate)\n * @example\n * findLastIndex([1, 3, 4, 6], n => n % 2 === 1) // => 1\n * @dataFirst\n * @category Array\n */\nexport function findLastIndex(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): number;\n\n/**\n * Iterates the array in reverse order and returns the index of the first\n * element that satisfies the provided testing function. If no elements satisfy\n * the testing function, -1 is returned.\n *\n * See also `findLast` which returns the value of last element that satisfies\n * the testing function (rather than its index).\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to indicate a matching element has been found, and\n * `false` otherwise.\n * @returns The index of the last (highest-index) element in the array that\n * passes the test. Otherwise -1 if no matching element is found.\n * @signature\n * findLastIndex(fn)(items)\n * @example\n * pipe(\n * [1, 3, 4, 6],\n * findLastIndex(n => n % 2 === 1)\n * ) // => 1\n * @dataLast\n * @category Array\n */\nexport function findLastIndex(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): (array: readonly T[]) => number;\n\nexport function findLastIndex(...args: readonly unknown[]): unknown {\n return purry(findLastIndexImplementation, args);\n}\n\nconst findLastIndexImplementation = (\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): number => {\n // TODO [>2]: When node 18 reaches end-of-life bump target lib to ES2023+ and use `Array.prototype.findLastIndex` here.\n\n for (let i = data.length - 1; i >= 0; i--) {\n if (predicate(data[i]!, i, data)) {\n return i;\n }\n }\n\n return -1;\n};\n", "import { toSingle } from \"./internal/toSingle\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { purry } from \"./purry\";\n\ntype First = T extends []\n ? undefined\n : T extends readonly [unknown, ...unknown[]]\n ? T[0]\n : T extends readonly [...infer Pre, infer Last]\n ? Last | Pre[0]\n : T[0] | undefined;\n\n/**\n * Gets the first element of `array`.\n *\n * @param data - The array.\n * @returns The first element of the array.\n * @signature\n * first(array)\n * @example\n * first([1, 2, 3]) // => 1\n * first([]) // => undefined\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function first(data: T): First;\n\n/**\n * Gets the first element of `array`.\n *\n * @returns The first element of the array.\n * @signature\n * first()(array)\n * @example\n * pipe(\n * [1, 2, 4, 8, 16],\n * filter(x => x > 3),\n * first(),\n * x => x + 1\n * ); // => 5\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function first(): (data: T) => First;\n\nexport function first(...args: readonly unknown[]): unknown {\n return purry(firstImplementation, args, toSingle(lazyImplementation));\n}\n\nconst firstImplementation = ([item]: readonly T[]): T | undefined => item;\n\nconst lazyImplementation = (): LazyEvaluator => firstLazy;\n\nconst firstLazy = (value: T) =>\n ({ hasNext: true, next: value, done: true }) as const;\n", "import { hasAtLeast } from \"./hasAtLeast\";\nimport { purryOrderRules, type OrderRule } from \"./internal/purryOrderRules\";\nimport type { CompareFunction } from \"./internal/types/CompareFunction\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\n\ntype FirstBy =\n | T[number]\n | (T extends readonly [unknown, ...(readonly unknown[])]\n ? never\n : T extends readonly [...(readonly unknown[]), unknown]\n ? never\n : undefined);\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `first(sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * firstBy(...rules)(data);\n * @example\n * const max = pipe([1,2,3], firstBy([identity(), \"desc\"])); // => 3;\n * const min = pipe([1,2,3], firstBy(identity())); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = pipe(data, firstBy([(item) => item.a.length, \"desc\"])); // => { a: \"aaa\" };\n * const minBy = pipe(data, firstBy((item) => item.a.length)); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = pipe(data, firstBy(prop('type'), [prop('size'), 'desc'])); // => {type: \"cat\", size: 2}\n * @dataLast\n * @category Array\n */\nexport function firstBy(\n ...rules: Readonly>>\n): (data: T) => FirstBy;\n\n/**\n * Find the first element in the array that adheres to the order rules provided. This is a superset of what a typical `maxBy` or `minBy` function would do as it allows defining \"tie-breaker\" rules when values are equal, and allows comparing items using any logic. This function is equivalent to calling `first(sortBy(...))` but runs at *O(n)* instead of *O(nlogn)*.\n *\n * Use `nthBy` if you need an element other that the first, or `takeFirstBy` if you more than just the first element.\n *\n * @param data - An array of items.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The first element by the order criteria, or `undefined` if the array\n * is empty. (The function provides strong typing if the input type assures the\n * array isn't empty).\n * @signature\n * firstBy(data, ...rules);\n * @example\n * const max = firstBy([1,2,3], [identity(), \"desc\"]); // => 3;\n * const min = firstBy([1,2,3], identity()); // => 1;\n *\n * const data = [{ a: \"a\" }, { a: \"aa\" }, { a: \"aaa\" }] as const;\n * const maxBy = firstBy(data, [(item) => item.a.length, \"desc\"]); // => { a: \"aaa\" };\n * const minBy = firstBy(data, (item) => item.a.length); // => { a: \"a\" };\n *\n * const data = [{type: \"cat\", size: 1}, {type: \"cat\", size: 2}, {type: \"dog\", size: 3}] as const;\n * const multi = firstBy(data, prop('type'), [prop('size'), 'desc']); // => {type: \"cat\", size: 2}\n * @dataFirst\n * @category Array\n */\nexport function firstBy(\n data: T,\n ...rules: Readonly>>\n): FirstBy;\n\nexport function firstBy(...args: readonly unknown[]): unknown {\n return purryOrderRules(firstByImplementation, args);\n}\n\nfunction firstByImplementation(\n data: readonly T[],\n compareFn: CompareFunction,\n): T | undefined {\n if (!hasAtLeast(data, 2)) {\n // If we have 0 or 1 item we simply return the trivial result.\n return data[0];\n }\n\n let [currentFirst] = data;\n\n // Remove the first item, we won't compare it with itself.\n const [, ...rest] = data;\n for (const item of rest) {\n if (compareFn(item, currentFirst) < 0) {\n // item comes before currentFirst in the order.\n currentFirst = item;\n }\n }\n\n return currentFirst;\n}\n", "import type { IsNumericLiteral } from \"type-fest\";\nimport { lazyDataLastImpl } from \"./internal/lazyDataLastImpl\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport type { LazyResult } from \"./internal/types/LazyResult\";\nimport { lazyIdentityEvaluator } from \"./internal/utilityEvaluators\";\n\ntype FlatArray<\n T,\n Depth extends number,\n Iteration extends readonly unknown[] = [],\n> = Depth extends Iteration[\"length\"]\n ? // Stopping condition for the recursion when the array is a tuple.\n T\n : T extends readonly []\n ? // Trivial result when the array is empty.\n []\n : T extends readonly [infer Item, ...infer Rest]\n ? // Tuples could be special-cased by \"iterating\" over each item\n // separately so that we maintain more information from the input type,\n // instead of putting all values in a union.\n [\n ...(Item extends IterableContainer\n ? // If the item itself is an array we continue going deeper\n FlatArray\n : // But if it isn't we add it to the output tuple\n [Item]),\n // And we merge this with the result from the rest of the tuple.\n ...FlatArray,\n ]\n : // For simple arrays we compute the item type, and wrap it with an\n // array.\n FlatSimpleArrayItems[];\n\n// This type is based on the built-in type for `Array.prototype.flat` from the\n// ES2019 Array typescript library, but we improved it to handle any depth\n// (avoiding the fixed `20` in the built-in type).\n// @see https://github.com/microsoft/TypeScript/blob/main/src/lib/es2019.array.d.ts#L1-L5\ntype FlatSimpleArrayItems<\n T,\n Depth extends number,\n Iteration extends readonly unknown[] = [],\n IsDone extends boolean = false,\n> = {\n done: T;\n recur: T extends readonly (infer InnerArr)[]\n ? FlatSimpleArrayItems<\n InnerArr,\n Depth,\n [...Iteration, unknown],\n // This trick allows us to continue 1 iteration more than the depth,\n // which is required to flatten the array up to depth.\n Iteration[\"length\"] extends Depth ? true : false\n >\n : T;\n}[IsDone extends true ? \"done\" : \"recur\"];\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param data - The items to flatten.\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1. Non literal values (those typed as\n * `number`cannot be used. `Infinity`, `Number.POSITIVE_INFINITY` and\n * `Number.MAX_VALUE` are all typed as `number` and can't be used either. For\n * \"unlimited\" depth use a literal value that would exceed your expected\n * practical maximum nesting level.\n * @signature\n * flat(data)\n * flat(data, depth)\n * @example\n * flat([[1, 2], [3, 4], [5], [[6]]]); // => [1, 2, 3, 4, 5, [6]]\n * flat([[[1]], [[2]]], 2); // => [1, 2]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flat(\n data: T,\n depth?: IsNumericLiteral extends true ? Depth : never,\n): FlatArray;\n\n/**\n * Creates a new array with all sub-array elements concatenated into it\n * recursively up to the specified depth. Equivalent to the built-in\n * `Array.prototype.flat` method.\n *\n * @param depth - The depth level specifying how deep a nested array structure\n * should be flattened. Defaults to 1.\n * @signature\n * flat()(data)\n * flat(depth)(data)\n * @example\n * pipe([[1, 2], [3, 4], [5], [[6]]], flat()); // => [1, 2, 3, 4, 5, [6]]\n * pipe([[[1]], [[2]]], flat(2)); // => [1, 2]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flat(\n depth?: IsNumericLiteral extends true ? Depth : never,\n): (data: T) => FlatArray;\n\nexport function flat(\n dataOrDepth?: IterableContainer | number,\n depth?: number,\n): unknown {\n if (typeof dataOrDepth === \"object\") {\n return flatImplementation(dataOrDepth, depth);\n }\n\n return lazyDataLastImpl(\n flatImplementation,\n dataOrDepth === undefined ? [] : [dataOrDepth],\n lazyImplementation,\n );\n}\n\nconst flatImplementation = (\n data: IterableContainer,\n depth?: number,\n): IterableContainer => (depth === undefined ? data.flat() : data.flat(depth));\n\nconst lazyImplementation = (depth?: number): LazyEvaluator =>\n depth === undefined || depth === 1\n ? lazyShallow\n : depth <= 0\n ? lazyIdentityEvaluator\n : (value) =>\n Array.isArray(value)\n ? {\n next: value.flat(depth - 1),\n hasNext: true,\n hasMany: true,\n done: false,\n }\n : { next: value, hasNext: true, done: false };\n\n// This function is pulled out so that we don't generate a new arrow function\n// each time. Because it doesn't need to run with recursion it could be pulled\n// out from the lazyImplementation and be reused for all invocations.\nconst lazyShallow = (value: T): LazyResult =>\n Array.isArray(value)\n ? { next: value, hasNext: true, hasMany: true, done: false }\n : { next: value, hasNext: true, done: false };\n", "import type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param data - The items to map and flatten.\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * flatMap(data, callbackfn)\n * @example\n * flatMap([1, 2, 3], x => [x, x * 10]) // => [1, 10, 2, 20, 3, 30]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function flatMap(\n data: readonly T[],\n callbackfn: (input: T, index: number, data: readonly T[]) => readonly U[] | U,\n): U[];\n\n/**\n * Returns a new array formed by applying a given callback function to each\n * element of the array, and then flattening the result by one level. It is\n * identical to a `map` followed by a `flat` of depth 1\n * (`flat(map(data, ...args))`), but slightly more efficient than calling those\n * two methods separately. Equivalent to `Array.prototype.flatMap`.\n *\n * @param callbackfn - A function to execute for each element in the array. It\n * should return an array containing new elements of the new array, or a single\n * non-array value to be added to the new array.\n * @returns A new array with each element being the result of the callback\n * function and flattened by a depth of 1.\n * @signature\n * flatMap(callbackfn)(data)\n * @example\n * pipe([1, 2, 3], flatMap(x => [x, x * 10])) // => [1, 10, 2, 20, 3, 30]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function flatMap(\n callbackfn: (input: T, index: number, data: readonly T[]) => readonly U[] | U,\n): (data: readonly T[]) => U[];\n\nexport function flatMap(...args: readonly unknown[]): unknown {\n return purry(flatMapImplementation, args, lazyImplementation);\n}\n\nconst flatMapImplementation = (\n data: readonly T[],\n callbackfn: (value: T, index: number, data: readonly T[]) => readonly U[] | U,\n): U[] => data.flatMap(callbackfn);\n\nconst lazyImplementation =\n (\n callbackfn: (\n input: T,\n index: number,\n data: readonly T[],\n ) => K | readonly K[],\n ): LazyEvaluator =>\n // @ts-expect-error [ts2322] - We need to make LazyMany better so it accommodate the typing here...\n (value, index, data) => {\n const next = callbackfn(value, index, data);\n return Array.isArray(next)\n ? { done: false, hasNext: true, hasMany: true, next }\n : { done: false, hasNext: true, next };\n };\n", "import { withPrecision } from \"./internal/withPrecision\";\nimport { purry } from \"./purry\";\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param value - The number to round down.\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * floor(value, precision);\n * @example\n * floor(123.9876, 3) // => 123.987\n * floor(483.22243, 1) // => 483.2\n * floor(8541, -1) // => 8540\n * floor(456789, -3) // => 456000\n * @dataFirst\n * @category Number\n */\nexport function floor(value: number, precision: number): number;\n\n/**\n * Rounds down a given number to a specific precision.\n * If you'd like to round down to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.floor` instead, as it won't incur the additional library overhead.\n *\n * @param precision - The precision to round down to. Must be an integer between -15 and 15.\n * @signature\n * floor(precision)(value);\n * @example\n * floor(3)(123.9876) // => 123.987\n * floor(1)(483.22243) // => 483.2\n * floor(-1)(8541) // => 8540\n * floor(-3)(456789) // => 456000\n * @dataLast\n * @category Number\n */\nexport function floor(precision: number): (value: number) => number;\n\nexport function floor(...args: readonly unknown[]): unknown {\n return purry(withPrecision(Math.floor), args);\n}\n", "import type { Writable } from \"type-fest\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { purry } from \"./purry\";\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. When not used in a `pipe` the\n * returned array is equal to the input array (by reference), and not a shallow\n * copy of it!\n *\n * @param data - The values that would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * forEach(data, callbackfn)\n * @example\n * forEach([1, 2, 3], x => {\n * console.log(x)\n * });\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function forEach(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => void,\n): void;\n\n/**\n * Executes a provided function once for each array element. Equivalent to\n * `Array.prototype.forEach`.\n *\n * The dataLast version returns the original array (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned array is the\n * same reference as the input array, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original array (the ref itself, not a shallow copy of it).\n * @signature\n * forEach(callbackfn)(data)\n * @example\n * pipe(\n * [1, 2, 3],\n * forEach(x => {\n * console.log(x)\n * })\n * ) // => [1, 2, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function forEach(\n callbackfn: (value: T[number], index: number, data: T) => void,\n): (data: T) => Writable;\n\nexport function forEach(...args: readonly unknown[]): unknown {\n return purry(forEachImplementation, args, lazyImplementation);\n}\n\nfunction forEachImplementation(\n data: readonly T[],\n callbackfn: (value: T, index: number, data: readonly T[]) => void,\n): T[] {\n // eslint-disable-next-line unicorn/no-array-for-each -- We are intentionally proxying the built in forEach, it's up to the user to decide if they want to use a for loop instead.\n data.forEach(callbackfn);\n // @ts-expect-error [ts4104] - Because the dataFirst signature returns void this is only a problem when the dataLast function is used **outside** of a pipe; for these cases we warn the user that this is happening.\n return data;\n}\n\nconst lazyImplementation =\n (\n callbackfn: (value: T, index: number, data: readonly T[]) => void,\n ): LazyEvaluator =>\n (value, index, data) => {\n callbackfn(value, index, data);\n return { done: false, hasNext: true, next: value };\n };\n", "import type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport { purry } from \"./purry\";\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param data - The object who'se entries would be iterated on.\n * @param callbackfn - A function to execute for each element in the array.\n * @signature\n * forEachObj(object, fn)\n * @example\n * forEachObj({a: 1}, (val, key, obj) => {\n * console.log(`${key}: ${val}`)\n * }) // \"a: 1\"\n * @dataFirst\n * @category Object\n */\nexport function forEachObj(\n data: T,\n callbackfn: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n obj: T,\n ) => void,\n): void;\n\n/**\n * Iterate an object using a defined callback function.\n *\n * The dataLast version returns the original object (instead of not returning\n * anything (`void`)) to allow using it in a pipe. The returned object is the\n * same reference as the input object, and not a shallow copy of it!\n *\n * @param callbackfn - A function to execute for each element in the array.\n * @returns The original object (the ref itself, not a shallow copy of it).\n * @signature\n * forEachObj(fn)(object)\n * @example\n * pipe(\n * {a: 1},\n * forEachObj((val, key) => console.log(`${key}: ${val}`))\n * ) // \"a: 1\"\n * @dataLast\n * @category Object\n */\nexport function forEachObj(\n callbackfn: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n obj: T,\n ) => void,\n): (object: T) => T;\n\nexport function forEachObj(...args: readonly unknown[]): unknown {\n return purry(forEachObjImplementation, args);\n}\n\nfunction forEachObjImplementation(\n data: T,\n fn: (value: unknown, key: string, data: T) => void,\n): T {\n for (const [key, value] of Object.entries(data)) {\n fn(value, key, data);\n }\n return data;\n}\n", "import type { Simplify } from \"type-fest\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { RemedaTypeError } from \"./internal/types/RemedaTypeError\";\nimport { purry } from \"./purry\";\n\ntype FromEntriesError = RemedaTypeError<\n \"fromEntries\",\n Message\n>;\n\ntype Entry = readonly [\n key: Key,\n value: Value,\n];\n\n// The 2 kinds of arrays we accept result in different kinds of outputs:\n// 1. If the input is a *tuple*, we know exactly what entries it would hold,\n// and thus can type the result so that the keys are required. We will then run\n// recursively on the rest of the tuple.\n// 2. If the input is an *array* then any keys defined in the array might not\n// actually show up in runtime, and thus need to be optional. (e.g. if the input\n// is an empty array).\ntype FromEntries = Entries extends readonly [\n infer First,\n ...infer Tail,\n]\n ? FromEntriesTuple\n : Entries extends readonly [...infer Head, infer Last]\n ? FromEntriesTuple\n : Entries extends IterableContainer\n ? FromEntriesArray\n : FromEntriesError<\"Entries array-like could not be inferred\">;\n\n// For strict tuples we build the result by intersecting each entry as a record\n// between it's key and value, recursively. The recursion goes through our main\n// type so that we support tuples which also contain rest parts.\ntype FromEntriesTuple = E extends Entry\n ? FromEntries & Record\n : FromEntriesError<\"Array-like contains a non-entry element\">;\n\n// For the array case we also need to handle what kind of keys it defines:\n// 1. If it defines a *broad* key (one that has an infinite set of values, like\n// number or string) then the result is a simple record.\n// 2. If the keys are *literals* then we need to make the record partial\n// (because those props are explicit), and we need to match each key it's\n// specific possible value, as defined by the entries.\n//\n// Note that this destination between keys is the result of how typescript\n// considers Record to be **implicitly** partial, whereas\n// Record<\"a\", unknown> is not.\ntype FromEntriesArray> =\n string extends AllKeys\n ? Record\n : number extends AllKeys\n ? Record\n : symbol extends AllKeys\n ? Record\n : FromEntriesArrayWithLiteralKeys;\n\n// This type is largely copied from `objectFromEntries` in the repo:\n// *sindresorhus/ts-extras* but makes all properties of the output optional,\n// which is more correct because we can't assure that an entry will exist for\n// every possible prop/key of the input.\n// @see https://github.com/sindresorhus/ts-extras/blob/44f57392c5f027268330771996c4fdf9260b22d6/source/object-from-entries.ts)\ntype FromEntriesArrayWithLiteralKeys> =\n {\n [P in AllKeys]?: ValueForKey;\n };\n\ntype AllKeys> = Extract<\n Entries[number],\n Entry\n>[0];\n\n// I tried and failed to simplify the type here! What the ternary does here is\n// to support the cases where the entries are defined by a single type that\n// defines all entries, but it defines the keys as a union of literals\n// (`['a' | 'b', number]`); which is different from the output of toPairs\n// which would define a separate tuple literal for each key (`['a', number] |\n// ['b', number]`). We need to support both cases!\ntype ValueForKey<\n Entries extends IterableContainer,\n K extends PropertyKey,\n> = (Extract> extends never\n ? Entries[number]\n : Extract>)[1];\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * Refer to the docs for more details.\n *\n * @param entries - An array of key-value pairs.\n * @signature\n * fromEntries(tuples)\n * @example\n * fromEntries([['a', 'b'], ['c', 'd']]); // => {a: 'b', c: 'd'}\n * @dataFirst\n * @category Object\n */\nexport function fromEntries>(\n entries: Entries,\n): Simplify>;\n\n/**\n * Creates a new object from an array of tuples by pairing up first and second elements as {[key]: value}.\n * If a tuple is not supplied for any element in the array, the element will be ignored\n * If duplicate keys exist, the tuple with the greatest index in the input array will be preferred.\n *\n * The strict option supports more sophisticated use-cases like those that would\n * result when calling the strict `toPairs` function.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * Refer to the docs for more details.\n *\n * @signature\n * fromEntries()(tuples)\n * @example\n * pipe(\n * [['a', 'b'], ['c', 'd']] as const,\n * fromEntries(),\n * ); // => {a: 'b', c: 'd'}\n * @dataLast\n * @category Object\n */\nexport function fromEntries(): >(\n entries: Entries,\n) => Simplify>;\n\nexport function fromEntries(...args: readonly unknown[]): unknown {\n return purry(Object.fromEntries, args);\n}\n", "import type { Simplify } from \"type-fest\";\nimport type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n// Takes a union of literals and creates a union of records with the value V for\n// each key **separately**\n// @example ExactlyOneKey<\"cat\" | \"dog\", boolean> // { cat: boolean } | { dog: boolean }\ntype ExactlyOneKey = T extends PropertyKey ? Record : never;\n\ntype FromKeys = T extends readonly []\n ? // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- We want to return an empty object type here, but it's not trivial to build that in Typescript, other fixer suggestions like Record or Record both break our type tests so they don't do what we need here. Because the result is mutable this might be the correct type after all...\n {}\n : T extends readonly [infer Head, ...infer Rest]\n ? ExactlyOneKey & FromKeys\n : T[number] extends PropertyKey\n ? BoundedPartial>\n : never;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param data - An array of keys of the output object. All items in the array\n * would be keys in the output array.\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * fromKeys(data, mapper);\n * @example\n * fromKeys([\"cat\", \"dog\"], length()); // { cat: 3, dog: 3 } (typed as Partial>)\n * fromKeys([1, 2], add(1)); // { 1: 2, 2: 3 } (typed as Partial>)\n * @dataFirst\n * @category Object\n */\nexport function fromKeys, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): Simplify>;\n\n/**\n * Creates an object that maps each key in `data` to the result of `mapper` for\n * that key. Duplicate keys are overwritten, guaranteeing that `mapper` is run\n * for each item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param mapper - Takes a key and returns the value that would be associated\n * with that key.\n * @signature\n * fromKeys(mapper)(data);\n * @example\n * pipe([\"cat\", \"dog\"], fromKeys(length())); // { cat: 3, dog: 3 } (typed as Partial>)\n * pipe([1, 2], fromKeys(add(1))); // { 1: 2, 2: 3 } (typed as Partial>)\n * @dataLast\n * @category Object\n */\nexport function fromKeys, V>(\n mapper: (item: T[number], index: number, data: T) => V,\n): (data: T) => Simplify>;\n\nexport function fromKeys(...args: readonly unknown[]): unknown {\n return purry(fromKeysImplementation, args);\n}\n\nfunction fromKeysImplementation, V>(\n data: T,\n mapper: (item: T[number], index: number, data: T) => V,\n): FromKeys {\n const result: Partial> = {};\n\n for (const [index, key] of data.entries()) {\n // @ts-expect-error [ts7053] - There's no easy way to make Typescript aware that the items in T would be keys in the output object because it's type is built recursively and the \"being an item of an array\" property of a type is not \"carried over\" in the recursive type definition.\n result[key] = mapper(key, index, data);\n }\n\n return result as FromKeys;\n}\n", "import type { RequireAtLeastOne } from \"type-fest\";\n\n// We use the value provided by the reducer to also determine if a call\n// was done during a timeout period. This means that even when no reducer\n// is provided, we still need a dummy reducer that would return something\n// other than `undefined`. It is safe to cast this to R (which might be\n// anything) because the callback would never use it as it would be typed\n// as a zero-args function.\nconst VOID_REDUCER_SYMBOL = Symbol(\"funnel/voidReducer\");\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Intentional, so that it could be used as a default value above.\nconst voidReducer = (): R => VOID_REDUCER_SYMBOL as R;\n\ntype FunnelOptions = {\n readonly reducer?: (accumulator: R | undefined, ...params: Args) => R;\n} & FunnelTimingOptions;\n\n// Not all combinations of timing options are valid, there are dependencies\n// between them to ensure users can't configure the funnel in a way which would\n// cause it to never trigger.\ntype FunnelTimingOptions =\n | ({ readonly triggerAt?: \"end\" } & (\n | ({ readonly minGapMs: number } & RequireAtLeastOne<{\n readonly minQuietPeriodMs: number;\n readonly maxBurstDurationMs: number;\n }>)\n | {\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: never;\n }\n ))\n | {\n readonly triggerAt: \"start\" | \"both\";\n readonly minQuietPeriodMs?: number;\n readonly maxBurstDurationMs?: number;\n readonly minGapMs?: number;\n };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TypeScript has some quirks with generic function types, and works best with `any` and not `unknown`. This follows the typing of built-in utilities like `ReturnType` and `Parameters`.\ntype RestArguments = any[];\n\ntype Funnel = {\n /**\n * Call the function. This might result in the `execute` function being called\n * now or later, depending on it's configuration and it's current state.\n *\n * @param args - The args are defined by the `reducer` function.\n */\n\n readonly call: (...args: Args) => void;\n\n /**\n * Resets the funnel to it's initial state. Any calls made since the last\n * invocation will be discarded.\n */\n readonly cancel: () => void;\n\n /**\n * Triggers an invocation regardless of the current state of the funnel.\n * Like any other invocation, The funnel will also be reset to it's initial\n * state afterwards.\n */\n readonly flush: () => void;\n\n /**\n * The funnel is in it's initial state (there are no active timeouts).\n */\n readonly isIdle: boolean;\n};\n\n/**\n * Creates a funnel that controls the timing and execution of `callback`. Its\n * main purpose is to manage multiple consecutive (usually fast-paced) calls,\n * reshaping them according to a defined batching strategy and timing policy.\n * This is useful when handling uncontrolled call rates, such as DOM events or\n * network traffic. It can implement strategies like debouncing, throttling,\n * batching, and more.\n *\n * An optional `reducer` function can be provided to allow passing data to the\n * callback via calls to `call` (otherwise the signature of `call` takes no\n * arguments).\n *\n * Typing is inferred from `callback`s param, and from the rest params that\n * the optional `reducer` function accepts. Use **explicit** types for these\n * to ensure that everything _else_ is well-typed.\n *\n * Notice that this function constructs a funnel **object**, and does **not**\n * execute anything when called. The returned object should be used to execute\n * the funnel via the its `call` method.\n *\n * - Debouncing: use `minQuietPeriodMs` and any `triggerAt`.\n * - Throttling: use `minGapMs` and `triggerAt: \"start\"` or `\"both\"`.\n * - Batching: See the reference implementation in [`funnel.reference-batch.test.ts`](https://github.com/remeda/remeda/blob/main/packages/remeda/src/funnel.reference-batch.test.ts).\n *\n * @param callback - The main function that would be invoked periodically based\n * on `options`. The function would take the latest result of the `reducer`; if\n * no calls where made since the last time it was invoked it will not be\n * invoked. (If a return value is needed, it should be passed via a reference or\n * via closure to the outer scope of the funnel).\n * @param options - An object that defines when `execute` should be invoked,\n * relative to the calls of `call`. An empty/missing options object is\n * equivalent to setting `minQuietPeriodMs` to `0`.\n * @param options.reducer - Combines the arguments passed to `call` with the\n * value computed on the previous call (or `undefined` on the first time). The\n * goal of the function is to extract and summarize the data needed for\n * `callback`. It should be fast and simple as it is called often and should\n * defer heavy operations to the `execute` function. If the final value\n * is `undefined`, `callback` will not be called.\n * @param options.triggerAt - At what \"edges\" of the funnel's burst window\n * would `execute` invoke:\n * - `start` - the function will be invoked immediately (within the **same**\n * execution frame!), and any subsequent calls would be ignored until the funnel\n * is idle again. During this period `reducer` will also not be called.\n * - `end` - the function will **not** be invoked initially but the timer will\n * be started. Any calls during this time would be passed to the reducer, and\n * when the timers are done, the reduced result would trigger an invocation.\n * - `both` - the function will be invoked immediately, and then the funnel\n * would behave as if it was in the 'end' state. Default: 'end'.\n * @param options.minQuietPeriodMs - The burst timer prevents subsequent calls\n * in short succession to cause excessive invocations (aka \"debounce\"). This\n * duration represents the **minimum** amount of time that needs to pass\n * between calls (the \"quiet\" part) in order for the subsequent call to **not**\n * be considered part of the burst. In other words, as long as calls are faster\n * than this, they are considered part of the burst and the burst is extended.\n * @param options.maxBurstDurationMs - Bursts are extended every time a call is\n * made within the burst period. This means that the burst period could be\n * extended indefinitely. To prevent such cases, a maximum burst duration could\n * be defined. When `minQuietPeriodMs` is not defined and this option is, they\n * will both share the same value.\n * @param options.minGapMs - A minimum duration between calls of `execute`.\n * This is maintained regardless of the shape of the burst and is ensured even\n * if the `maxBurstDurationMs` is reached before it. (aka \"throttle\").\n * @returns A funnel with a `call` function that is used to trigger invocations.\n * In addition to it the funnel also comes with the following functions and\n * properties:\n * - `cancel` - Resets the funnel to it's initial state, discarding the current\n * `reducer` result without calling `execute` on it.\n * - `flush` - Triggers an invocation even if there are active timeouts, and\n * then resets the funnel to it's initial state.\n * - `isIdle` - Checks if there are any active timeouts.\n * @signature\n * funnel(callback, options);\n * @example\n * const debouncer = funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minQuietPeriodMs: 100 },\n * );\n * debouncer.call();\n * debouncer.call();\n *\n * const throttle = funnel(\n * () => {\n * console.log(\"Callback executed!\");\n * },\n * { minGapMs: 100, triggerAt: \"start\" },\n * );\n * throttle.call();\n * throttle.call();\n * @category Function\n */\nexport function funnel(\n callback: (data: R) => void,\n {\n triggerAt = \"end\",\n minQuietPeriodMs,\n maxBurstDurationMs,\n minGapMs,\n reducer = voidReducer,\n }: FunnelOptions,\n): Funnel {\n // We manage execution via 2 timeouts, one to track bursts of calls, and one\n // to track the interval between invocations. Together we refer to the period\n // where any of these are active as a \"cool-down period\".\n let burstTimeoutId: ReturnType | undefined;\n let intervalTimeoutId: ReturnType | undefined;\n\n // Until invoked, all calls are reduced into a single value that would be sent\n // to the executor on invocation.\n let preparedData: R | undefined;\n\n // In order to be able to limit the total size of the burst (when\n // `maxBurstDurationMs` is used) we need to track when the burst started.\n let burstStartTimestamp: number | undefined;\n\n const invoke = (): void => {\n const param = preparedData;\n if (param === undefined) {\n // There were no calls during both cool-down periods.\n return;\n }\n\n // Make sure the args aren't accidentally used again\n preparedData = undefined;\n\n if (param === VOID_REDUCER_SYMBOL) {\n // @ts-expect-error [ts2554] -- R is typed as `never` because we hide the\n // symbol that `voidReducer` returns; there's no way to make TypeScript\n // aware of this.\n callback();\n } else {\n callback(param);\n }\n\n if (minGapMs !== undefined) {\n intervalTimeoutId = setTimeout(handleIntervalEnd, minGapMs);\n }\n };\n\n const handleIntervalEnd = (): void => {\n // When called via a timeout the timeout is already cleared, but when called\n // via `flush` we need to manually clear it.\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n if (burstTimeoutId !== undefined) {\n // As long as one of the timeouts is active we don't invoke the function.\n // Each timeout's end event handler has a call to invoke, so we are\n // guaranteed to invoke the function eventually.\n return;\n }\n\n invoke();\n };\n\n const handleBurstEnd = (): void => {\n // When called via a timeout the timeout is already cleared, but when called\n // via `flush` we need to manually clear it.\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n if (intervalTimeoutId !== undefined) {\n // As long as one of the timeouts is active we don't invoke the function.\n // Each timeout's end event handler has a call to invoke, so we are\n // guaranteed to invoke the function eventually.\n return;\n }\n\n invoke();\n };\n\n return {\n call: (...args) => {\n // We act based on the initial state of the timeouts before the call is\n // handled and causes the timeouts to change.\n const wasIdle =\n burstTimeoutId === undefined && intervalTimeoutId === undefined;\n\n if (triggerAt !== \"start\" || wasIdle) {\n preparedData = reducer(preparedData, ...args);\n }\n\n if (burstTimeoutId === undefined && !wasIdle) {\n // We are not in an active burst period but in an interval period. We\n // don't start a new burst window until the next invoke.\n return;\n }\n\n if (\n minQuietPeriodMs !== undefined ||\n maxBurstDurationMs !== undefined ||\n minGapMs === undefined\n ) {\n // The timeout tracking the burst period needs to be reset every time\n // another call is made so that it waits the full cool-down duration\n // before it is released.\n clearTimeout(burstTimeoutId);\n\n const now = Date.now();\n\n burstStartTimestamp ??= now;\n\n const burstRemainingMs =\n maxBurstDurationMs === undefined\n ? (minQuietPeriodMs ?? 0)\n : Math.min(\n minQuietPeriodMs ?? maxBurstDurationMs,\n // We need to account for the time already spent so that we\n // don't wait longer than the maxDelay.\n Math.max(0, maxBurstDurationMs - (now - burstStartTimestamp)),\n );\n\n burstTimeoutId = setTimeout(handleBurstEnd, burstRemainingMs);\n }\n\n if (triggerAt !== \"end\" && wasIdle) {\n invoke();\n }\n },\n\n cancel: () => {\n clearTimeout(burstTimeoutId);\n burstTimeoutId = undefined;\n burstStartTimestamp = undefined;\n\n clearTimeout(intervalTimeoutId);\n intervalTimeoutId = undefined;\n\n preparedData = undefined;\n },\n\n flush: () => {\n handleBurstEnd();\n handleIntervalEnd();\n },\n\n get isIdle() {\n return burstTimeoutId === undefined && intervalTimeoutId === undefined;\n },\n };\n}\n", "import type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\nimport { purry } from \"./purry\";\n\n/**\n * Groups the elements of a given iterable according to the string values\n * returned by a provided callback function. The returned object has separate\n * properties for each group, containing arrays with the elements in the group.\n * Unlike the built in `Object.groupBy` this function also allows the callback to\n * return `undefined` in order to exclude the item from being added to any\n * group.\n *\n * If you are grouping objects by a property of theirs (e.g.\n * `groupBy(data, ({ myProp }) => myProp)` or `groupBy(data, prop('myProp'))`)\n * consider using `groupByProp` (e.g. `groupByProp(data, 'myProp')`) instead,\n * as it would provide better typing.\n *\n * @param data - The items to group.\n * @param callbackfn - A function to execute for each element in the iterable.\n * It should return a value indicating the group of the current element, or\n * `undefined` when the item should be excluded from any group.\n * @returns An object with properties for all groups, each assigned to an array\n * containing the elements of the associated group.\n * @signature\n * groupBy(data, callbackfn)\n * @example\n * groupBy([{a: 'cat'}, {a: 'dog'}] as const, prop('a')) // => {cat: [{a: 'cat'}], dog: [{a: 'dog'}]}\n * groupBy([0, 1], x => x % 2 === 0 ? 'even' : undefined) // => {even: [0]}\n * @dataFirst\n * @category Array\n */\nexport function groupBy(\n data: readonly T[],\n callbackfn: (value: T, index: number, data: readonly T[]) => Key | undefined,\n): BoundedPartial>>;\n\n/**\n * Groups the elements of a given iterable according to the string values\n * returned by a provided callback function. The returned object has separate\n * properties for each group, containing arrays with the elements in the group.\n * Unlike the built in `Object.groupBy` this function also allows the callback to\n * return `undefined` in order to exclude the item from being added to any\n * group.\n *\n * If you are grouping objects by a property of theirs (e.g.\n * `groupBy(data, ({ myProp }) => myProp)` or `groupBy(data, prop('myProp'))`)\n * consider using `groupByProp` (e.g. `groupByProp(data, 'myProp')`) instead,\n * as it would provide better typing.\n *\n * @param callbackfn - A function to execute for each element in the iterable.\n * It should return a value indicating the group of the current element, or\n * `undefined` when the item should be excluded from any group.\n * @returns An object with properties for all groups, each assigned to an array\n * containing the elements of the associated group.\n * @signature\n * groupBy(callbackfn)(data);\n * @example\n * pipe(\n * [{a: 'cat'}, {a: 'dog'}] as const,\n * groupBy(prop('a')),\n * ); // => {cat: [{a: 'cat'}], dog: [{a: 'dog'}]}\n * pipe(\n * [0, 1],\n * groupBy(x => x % 2 === 0 ? 'even' : undefined),\n * ); // => {even: [0]}\n * @dataLast\n * @category Array\n */\nexport function groupBy(\n callbackfn: (value: T, index: number, data: readonly T[]) => Key | undefined,\n): (items: readonly T[]) => BoundedPartial>>;\n\nexport function groupBy(...args: readonly unknown[]): unknown {\n return purry(groupByImplementation, args);\n}\n\nconst groupByImplementation = (\n data: readonly T[],\n callbackfn: (value: T, index: number, data: readonly T[]) => Key | undefined,\n): BoundedPartial>> => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Using Object.create(null) allows us to remove everything from the prototype chain, leaving it as a pure object that only has the keys *we* add to it. This prevents issues like the one raised in #1046\n const output: BoundedPartial>> =\n Object.create(null);\n\n for (let index = 0; index < data.length; index++) {\n // Accessing the object directly instead of via an iterator on the `entries` showed significant performance benefits while benchmarking.\n const item = data[index];\n\n // @ts-expect-error [ts2345] -- TypeScript is not able to infer that the index wouldn't overflow the array and that it shouldn't add `undefined` to the type. We don't want to use the `!` operator here because it's semantics are different because it changes the type of `item` to `NonNullable` which is inaccurate because T itself could have `undefined` as a valid value.\n const key = callbackfn(item, index, data);\n if (key !== undefined) {\n // Once the prototype chain is fixed, it is safe to access the prop directly without needing to check existence or types.\n const items = output[key];\n\n if (items === undefined) {\n // It is more performant to create a 1-element array over creating an empty array and falling through to a unified the push. It is also more performant to mutate the existing object over using spread to continually create new objects on every unique key.\n // @ts-expect-error [ts2322] -- In addition to the typing issue we have for `item`, this line also creates a typing issue for the whole object, as TypeScript is having a hard time inferring what values could be adding to the object.\n output[key] = [item];\n } else {\n // It is more performant to add the items to an existing array over continually creating a new array every time we add an item to it.\n // @ts-expect-error [ts2345] -- See comment above about the effective typing for `item` here.\n items.push(item);\n }\n }\n }\n\n // Set the prototype as if we initialized our object as a normal object (e.g. `{}`). Without this none of the built-in object methods like `toString` would work on this object and it would act differently than expected.\n Object.setPrototypeOf(output, Object.prototype);\n\n return output;\n};\n", "import type {\n AllUnionFields,\n ConditionalKeys,\n EmptyObject,\n IsNever,\n Or,\n Simplify,\n} from \"type-fest\";\nimport type { ArrayRequiredPrefix } from \"./internal/types/ArrayRequiredPrefix\";\nimport type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport type { FilteredArray } from \"./internal/types/FilteredArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\nimport { purry } from \"./purry\";\n\ntype GroupByProp> =\n // Distribute unions.\n T extends unknown\n ? FixEmptyObject>>\n : never;\n\n// For each possible value of the prop we filter the input tuple with the prop\n// assigned to the value, e.g. `{ type: \"cat\" }`\ntype GroupByPropRaw<\n T extends IterableContainer,\n Prop extends GroupableProps,\n> = {\n [Value in AllPropValues]: FilteredArray>;\n};\n\n// We can only group by props that only have values that could be used to key\n// an object (i.e. PropertyKey), or if they are undefined (which would filter\n// them out of the grouping).\ntype GroupableProps = ConditionalKeys<\n ItemsSuperObject,\n PropertyKey | undefined\n>;\n\n// The union of all possible values that the prop could have within the tuple.\ntype AllPropValues<\n T extends IterableContainer,\n Prop extends GroupableProps,\n> = Extract[Prop], PropertyKey>;\n\n// Creates a singular object type that all items in the tuple would extend. This\n// provides us a way to check, for each prop, what are all values it would\n// have within the tuple. We use this to map which props are candidates for\n// grouping, and when a prop is selected, the full list of values that would\n// exist in the output. For example:\n// `{ a: number, b: \"cat\", c: string } | { b: \"dog\", c: Date }` is groupable\n// by 'a' and 'b', but not 'c', and when selecting by 'b', the output would\n// have a prop for \"cat\" and a prop for \"dog\".\ntype ItemsSuperObject = AllUnionFields<\n // If the input tuple contains optional elements they would add `undefined` to\n // T[number] (and could technically show up in the array itself). Because\n // undefined breaks AllUnionFields we need to remove it from the union. This\n // is OK because we handle this in the implementation too.\n Exclude\n>;\n\n// When the input array is empty the constructed result type would be `{}`\n// because our mapped type would never run; but this doesn't represent the\n// semantics of the return value for that case, because it effectively means\n// \"any object\" and not \"empty object\". This can happen in 2 situations:\n// A union of tuples where one of the tuples doesn't have any item with the\n// groupable prop, or when the groupable prop has a value of `undefined` for\n// all items. The former is extra problematic because it would add `| {}` to the\n// result type which effectively cancels out all other parts of the union.\ntype FixEmptyObject = IsNever extends true ? EmptyObject : T;\n\n// Group by can never return an empty tuple but our filtered arrays might not\n// represent that. We need to reshape the tuples so that they always have at\n// least one item in them.\ntype EnsureValuesAreNonEmpty> =\n Simplify<\n Omit> &\n BoundedPartial>>>\n >;\n\n// Go over the keys the object and return those that their value can accept an\n// empty array.\ntype PossiblyEmptyArrayKeys> =\n keyof T extends infer Key extends unknown\n ? Key extends keyof T\n ? IsNonEmptyArray extends true\n ? never\n : Key\n : never\n : never;\n\n// An array is non-empty if any of the fixed parts are non-empty.\ntype IsNonEmptyArray = Or<\n IsNonEmptyFixedTuple[\"required\"]>,\n IsNonEmptyFixedTuple[\"suffix\"]>\n>;\n\n// A fixed tuple (one without optional or a rest element in it) is non-empty if\n// we can't extract the empty tuple from it.\ntype IsNonEmptyFixedTuple = IsNever>;\n\n// We coerce the arbitrary array values to have a prefix of at least one item.\ntype CoercedNonEmptyValues> = {\n [P in keyof T]: ArrayRequiredPrefix;\n};\n\n/**\n * Groups the elements of an array of objects based on the values of a\n * specified property of those objects. The result would contain a property for\n * each unique value of the specific property, with it's value being the input\n * array filtered to only items that have that property set to that value.\n * For any object where the property is missing, or if it's value is\n * `undefined` the item would be filtered out.\n *\n * The grouping property is enforced at the type level to exist in at least one\n * item and to never have a value that cannot be used as an object key (e.g. it\n * must be `PropertyKey | undefined`).\n *\n * The resulting arrays are filtered with the prop and it's value as a\n * type-guard, effectively narrowing the items in each output arrays. This\n * means that when the grouping property is the discriminator of a\n * discriminated union type each output array would contain just the subtype for\n * that value.\n *\n * If you need more control over the grouping you should use `groupBy` instead.\n *\n * @param data - The items to group.\n * @param prop - The property name to group by.\n * @signature\n * groupByProp(data, prop)\n * @example\n * const result = groupByProp(\n * // ^? { cat: [{ a: 'cat' }], dog: [{ a: 'dog' }] }\n * [{ a: 'cat' }, { a: 'dog' }] as const,\n * 'a',\n * );\n * @dataFirst\n * @category Array\n */\nexport function groupByProp<\n T extends IterableContainer,\n const Prop extends GroupableProps,\n>(data: T, prop: Prop): GroupByProp;\n\n/**\n * Groups the elements of an array of objects based on the values of a\n * specified property of those objects. The result would contain a property for\n * each unique value of the specific property, with it's value being the input\n * array filtered to only items that have that property set to that value.\n * For any object where the property is missing, or if it's value is\n * `undefined` the item would be filtered out.\n *\n * The grouping property is enforced at the type level to exist in at least one\n * item and to never have a value that cannot be used as an object key (e.g. it\n * must be `PropertyKey | undefined`).\n *\n * The resulting arrays are filtered with the prop and it's value as a\n * type-guard, effectively narrowing the items in each output arrays. This\n * means that when the grouping property is the discriminator of a\n * discriminated union type each output array would contain just the subtype for\n * that value.\n *\n * If you need more control over the grouping you should use `groupBy` instead.\n *\n * @param prop - The property name to group by.\n * @signature\n * groupByProp(prop)(data);\n * @example\n * const result = pipe(\n * // ^? { cat: [{ a: 'cat' }], dog: [{ a: 'dog' }] }\n * [{ a: 'cat' }, { a: 'dog' }] as const,\n * groupByProp('a'),\n * );\n * @dataLast\n * @category Array\n */\nexport function groupByProp<\n T extends IterableContainer,\n const Prop extends GroupableProps,\n>(prop: Prop): (data: T) => GroupByProp;\n\nexport function groupByProp(...args: readonly unknown[]): unknown {\n return purry(groupByPropImplementation, args);\n}\n\nfunction groupByPropImplementation<\n T extends IterableContainer,\n Prop extends GroupableProps,\n>(data: T, prop: Prop): GroupByProp {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Using Object.create(null) allows us to remove everything from the prototype chain, leaving it as a pure object that only has the keys *we* add to it. This prevents issues like the one raised in #1046\n const output: BoundedPartial, T[number][]>> =\n Object.create(null);\n\n for (const item of data) {\n const key = item?.[prop];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- This is incorrect and a result of TypeScript not inferring the type of `key` correctly. It stems from a chain of bad inferences which start with `item` being inferred eagerly as `unknown` (because of: https://github.com/microsoft/TypeScript/issues/61750). When accessing a prop on `unknown` TypeScript then infers the result as `{}[Prop] | undefined`. What follows is that `{}[Prop]` is inferred as `never` (because we are accessing an object with no props defined on it), leading the union to simplify to just `undefined`. The correct type should have been `AllPropValues | undefined`.\n if (key !== undefined) {\n // Once the prototype chain is fixed, it is safe to access the prop\n // directly without needing to check existence or types.\n const items = output[key];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Following the problem above, TypeScript then thinks that `key` is `never`, and also types `items` as `never`.\n if (items === undefined) {\n // It is more performant to create a 1-element array over creating an\n // empty array and falling through to a unified the push. It is also\n // more performant to mutate the existing object over using spread to\n // continually create new objects on every unique key.\n // @ts-expect-error [ts7053] -- For the same reasons as mentioned above, TypeScript isn't inferring `key` correctly, and therefore is erroring when trying to access the output object using it.\n output[key] = [item];\n } else {\n // It is more performant to add the items to an existing array instead\n // of creating a new array via spreading every time we add an item to\n // it (e.g., `[...current, item]`).\n // @ts-expect-error [ts2339] -- And again here `items` is still `never`.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- See above.\n items.push(item);\n }\n }\n }\n\n // Set the prototype as if we initialized our object as a normal object (e.g.\n // `{}`). Without this none of the built-in object methods like `toString`\n // would work on this object and it would act differently than expected.\n Object.setPrototypeOf(output, Object.prototype);\n\n // @ts-expect-error [ts2322] -- This is fine! We use a broader type for output while we build it because it more accurately represents the shape of the object *while it is being built*. TypeScript can't tell that we finished building the object so can't ensure that output matches the expected output at this point.\n return output;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Performs a *deep structural* comparison between two values to determine if\n * they are equivalent. For primitive values this is equivalent to `===`, for\n * arrays the check would be performed on every item recursively, in order, and\n * for objects all props will be compared recursively.\n *\n * The built-in Date and RegExp are special-cased and will be compared by their\n * values.\n *\n * !IMPORTANT: TypedArrays and symbol properties of objects are not supported\n * right now and might result in unexpected behavior. Please open an issue in\n * the Remeda github project if you need support for these types.\n *\n * The result would be narrowed to the second value so that the function can be\n * used as a type guard.\n *\n * See:\n * - `isStrictEqual` if you don't need a deep comparison and just want to\n * check for simple (`===`, `Object.is`) equality.\n * - `isShallowEqual` if you need to compare arrays and objects \"by-value\" but\n * don't want to recurse into their values.\n *\n * @param data - The first value to compare.\n * @param other - The second value to compare.\n * @signature\n * isDeepEqual(data, other)\n * @example\n * isDeepEqual(1, 1) //=> true\n * isDeepEqual(1, '1') //=> false\n * isDeepEqual([1, 2, 3], [1, 2, 3]) //=> true\n * @dataFirst\n * @category Guard\n */\nexport function isDeepEqual(\n data: T,\n other: T extends Exclude ? S : never,\n): data is S;\nexport function isDeepEqual(data: T, other: T): boolean;\n\n/**\n * Performs a *deep structural* comparison between two values to determine if\n * they are equivalent. For primitive values this is equivalent to `===`, for\n * arrays the check would be performed on every item recursively, in order, and\n * for objects all props will be compared recursively.\n *\n * The built-in Date and RegExp are special-cased and will be compared by their\n * values.\n *\n * !IMPORTANT: TypedArrays and symbol properties of objects are not supported\n * right now and might result in unexpected behavior. Please open an issue in\n * the Remeda github project if you need support for these types.\n *\n * The result would be narrowed to the second value so that the function can be\n * used as a type guard.\n *\n * See:\n * - `isStrictEqual` if you don't need a deep comparison and just want to\n * check for simple (`===`, `Object.is`) equality.\n * - `isShallowEqual` if you need to compare arrays and objects \"by-value\" but\n * don't want to recurse into their values.\n *\n * @param other - The second value to compare.\n * @signature\n * isDeepEqual(other)(data)\n * @example\n * pipe(1, isDeepEqual(1)); //=> true\n * pipe(1, isDeepEqual('1')); //=> false\n * pipe([1, 2, 3], isDeepEqual([1, 2, 3])); //=> true\n * @dataLast\n * @category Guard\n */\nexport function isDeepEqual(\n other: T extends Exclude ? S : never,\n): (data: T) => data is S;\nexport function isDeepEqual(other: T): (data: T) => boolean;\n\nexport function isDeepEqual(...args: readonly unknown[]): unknown {\n return purry(isDeepEqualImplementation, args);\n}\n\nfunction isDeepEqualImplementation(data: unknown, other: T): data is T {\n if (data === other) {\n return true;\n }\n\n if (Object.is(data, other)) {\n // We want to ignore the slight differences between `===` and `Object.is` as\n // both of them largely define equality from a semantic point-of-view.\n return true;\n }\n\n if (typeof data !== \"object\" || typeof other !== \"object\") {\n return false;\n }\n\n if (data === null || other === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(data) !== Object.getPrototypeOf(other)) {\n // If the objects don't share a prototype it's unlikely that they are\n // semantically equal. It is technically possible to build 2 prototypes that\n // act the same but are not equal (at the reference level, checked via\n // `===`) and then create 2 objects that are equal although we would fail on\n // them. Because this is so unlikely, the optimization we gain here for the\n // rest of the function by assuming that `other` is of the same type as\n // `data` is more than worth it.\n return false;\n }\n\n if (Array.isArray(data)) {\n return isDeepEqualArrays(data, other as unknown as readonly unknown[]);\n }\n\n if (data instanceof Map) {\n return isDeepEqualMaps(data, other as unknown as Map);\n }\n\n if (data instanceof Set) {\n return isDeepEqualSets(data, other as unknown as Set);\n }\n\n if (data instanceof Date) {\n return data.getTime() === (other as unknown as Date).getTime();\n }\n\n if (data instanceof RegExp) {\n return data.toString() === (other as unknown as RegExp).toString();\n }\n\n // At this point we only know that the 2 objects share a prototype and are not\n // any of the previous types. They could be plain objects (Object.prototype),\n // they could be classes, they could be other built-ins, or they could be\n // something weird. We assume that comparing values by keys is enough to judge\n // their equality.\n\n if (Object.keys(data).length !== Object.keys(other).length) {\n return false;\n }\n\n for (const [key, value] of Object.entries(data)) {\n if (!(key in other)) {\n return false;\n }\n\n if (\n !isDeepEqualImplementation(\n value,\n // @ts-expect-error [ts7053] - We already checked that `other` has `key`\n other[key],\n )\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqualArrays(\n data: readonly unknown[],\n other: readonly unknown[],\n): boolean {\n if (data.length !== other.length) {\n return false;\n }\n\n for (const [index, item] of data.entries()) {\n if (!isDeepEqualImplementation(item, other[index])) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqualMaps(\n data: ReadonlyMap,\n other: ReadonlyMap,\n): boolean {\n if (data.size !== other.size) {\n return false;\n }\n\n for (const [key, value] of data.entries()) {\n if (!other.has(key)) {\n return false;\n }\n\n if (!isDeepEqualImplementation(value, other.get(key))) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqualSets(\n data: ReadonlySet,\n other: ReadonlySet,\n): boolean {\n if (data.size !== other.size) {\n return false;\n }\n\n // To ensure we only count each item once we need to \"remember\" which items of\n // the other set we've already matched against. We do this by creating a copy\n // of the other set and removing items from it as we find them in the data\n // set.\n const otherCopy = [...other];\n\n for (const dataItem of data) {\n let isFound = false;\n\n for (const [index, otherItem] of otherCopy.entries()) {\n if (isDeepEqualImplementation(dataItem, otherItem)) {\n isFound = true;\n otherCopy.splice(index, 1);\n break;\n }\n }\n\n if (!isFound) {\n return false;\n }\n }\n\n return true;\n}\n", "import type { Simplify, Tagged } from \"type-fest\";\nimport { isDeepEqual } from \"./isDeepEqual\";\nimport { purry } from \"./purry\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- We want to confine the typing to a specific symbol\ndeclare const HAS_SUB_OBJECT_BRAND: unique symbol;\n\ntype HasSubObjectGuard = Simplify<\n Tagged\n>;\n\ntype HasSubObjectObjectValue = Partial<{\n [Key in keyof A & keyof B]: A[Key] & B[Key] extends never\n ? B[Key]\n : A[Key] | B[Key] extends object\n ? HasSubObjectObjectValue\n : A[Key] & B[Key] extends object\n ? B[Key]\n : A[Key];\n}> & {\n [Key in\n | Exclude\n | Exclude]: Key extends keyof B ? B[Key] : never;\n};\n\ntype HasSubObjectData<\n Data,\n SubObject,\n RData = Required,\n RSubObject = Required,\n> = Partial<{\n [Key in keyof RData & keyof RSubObject]: RData[Key] &\n RSubObject[Key] extends never\n ? RSubObject[Key]\n : RData[Key] | RSubObject[Key] extends object\n ? HasSubObjectObjectValue\n : RData[Key] & RSubObject[Key] extends object\n ? RSubObject[Key]\n : RData[Key];\n}> & {\n [Key in Exclude]: SubObject[Key];\n};\n\ntype HasSubObjectSubObject<\n SubObject,\n Data,\n RSubObject = Required,\n RData = Required,\n> = Partial<{\n [Key in keyof RData & keyof RSubObject]: RData[Key] &\n RSubObject[Key] extends never\n ? RData[Key]\n : RData[Key] | RSubObject[Key] extends object\n ? HasSubObjectObjectValue\n : RData[Key] & RSubObject[Key] extends object\n ? RData[Key]\n : RSubObject[Key];\n}> &\n Record, never>;\n\n/**\n * Checks if `subObject` is a sub-object of `object`, which means for every\n * property and value in `subObject`, there's the same property in `object`\n * with an equal value. Equality is checked with `isDeepEqual`.\n *\n * @param data - The object to test.\n * @param subObject - The sub-object to test against.\n * @signature\n * hasSubObject(data, subObject)\n * @example\n * hasSubObject({ a: 1, b: 2, c: 3 }, { a: 1, c: 3 }) //=> true\n * hasSubObject({ a: 1, b: 2, c: 3 }, { b: 4 }) //=> false\n * hasSubObject({ a: 1, b: 2, c: 3 }, {}) //=> true\n * @dataFirst\n * @category Guard\n */\nexport function hasSubObject<\n T extends object,\n S extends HasSubObjectSubObject,\n>(data: T, subObject: S): data is HasSubObjectGuard;\n\n/**\n * Checks if `subObject` is a sub-object of `object`, which means for every\n * property and value in `subObject`, there's the same property in `object`\n * with an equal value. Equality is checked with `isDeepEqual`.\n *\n * @param subObject - The sub-object to test against.\n * @signature\n * hasSubObject(subObject)(data)\n * @example\n * hasSubObject({ a: 1, c: 3 })({ a: 1, b: 2, c: 3 }) //=> true\n * hasSubObject({ b: 4 })({ a: 1, b: 2, c: 3 }) //=> false\n * hasSubObject({})({ a: 1, b: 2, c: 3 }) //=> true\n * @dataLast\n * @category Guard\n */\nexport function hasSubObject(\n subObject: S,\n): >(\n data: T,\n) => data is HasSubObjectGuard;\n\nexport function hasSubObject(...args: readonly unknown[]): unknown {\n return purry(hasSubObjectImplementation, args);\n}\n\nfunction hasSubObjectImplementation<\n T extends Record,\n S extends Record,\n>(data: T, subObject: S): data is HasSubObjectGuard {\n for (const [key, value] of Object.entries(subObject)) {\n if (!Object.hasOwn(data, key)) {\n return false;\n }\n\n if (!isDeepEqual(value, data[key])) {\n return false;\n }\n }\n\n return true;\n}\n", "// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Accept functions with more than a single parameter too, we use `any` because that catches all possible cases.\ntype IdentityFunction = (firstParameter: T, ...rest: any) => T;\n\n/**\n * A function that returns the first argument passed to it.\n *\n * Notice that this is a dataLast impl where the function needs to be invoked\n * to get the \"do nothing\" function.\n *\n * See also:\n * * `doNothing` - A function that doesn't return anything.\n * * `constant` - A function that ignores the input arguments and returns the same value on every invocation.\n *\n * @signature\n * identity();\n * @example\n * map([1,2,3], identity()); // => [1,2,3]\n * @category Function\n */\nexport function identity(): IdentityFunction {\n // Notice that the exported identity function is just the \"factory\" for the\n // identity function. We do it this way so that all \"Function\" utilities have\n // a similar API where the function is called, and not just used \"headless\".\n // e.g. `identity()` and not `identity`, just like the API for `constant(1)`.\n return identityImplementation;\n}\n\nconst identityImplementation: IdentityFunction = (firstParameter) =>\n firstParameter;\n", "import type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport { purry } from \"./purry\";\n\n/**\n * Converts a list of objects into an object indexing the objects by the given\n * key.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param data - The array.\n * @param mapper - The indexing function.\n * @signature\n * indexBy(array, fn)\n * @example\n * indexBy(['one', 'two', 'three'], x => x.length) // => {3: 'two', 5: 'three'}\n * @dataFirst\n * @category Array\n */\nexport function indexBy(\n data: readonly T[],\n mapper: (item: T, index: number, data: readonly T[]) => K,\n): BoundedPartial>;\n\n/**\n * Converts a list of objects into an object indexing the objects by the given\n * key.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * * `pullObject` - Builds an object from an array of items with mappers for *both* keys and values.\n * * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param mapper - The indexing function.\n * @signature\n * indexBy(fn)(array)\n * @example\n * pipe(\n * ['one', 'two', 'three'],\n * indexBy(x => x.length)\n * ) // => {3: 'two', 5: 'three'}\n * @dataLast\n * @category Array\n */\nexport function indexBy(\n mapper: (item: T, index: number, data: readonly T[]) => K,\n): (data: readonly T[]) => BoundedPartial>;\n\nexport function indexBy(...args: readonly unknown[]): unknown {\n return purry(indexByImplementation, args);\n}\n\nfunction indexByImplementation(\n data: readonly T[],\n mapper: (item: T, index: number, data: readonly T[]) => K,\n): BoundedPartial> {\n const out: Partial> = {};\n\n for (const [index, item] of data.entries()) {\n const key = mapper(item, index, data);\n out[key] = item;\n }\n\n return out as BoundedPartial>;\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM, lazyEmptyEvaluator } from \"./internal/utilityEvaluators\";\n\n/**\n * Returns a list of elements that exist in both array. The output maintains the\n * same order as the input. The inputs are treated as multi-sets/bags (multiple\n * copies of items are treated as unique items).\n *\n * @param data - The input items.\n * @param other - The items to compare against.\n * @signature\n * intersection(data, other)\n * @example\n * intersection([1, 2, 3], [2, 3, 5]); // => [2, 3]\n * intersection([1, 1, 2, 2], [1]); // => [1]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function intersection(\n data: readonly T[],\n other: readonly S[],\n): (S & T)[];\n\n/**\n * Returns a list of elements that exist in both array. The output maintains the\n * same order as the input. The inputs are treated as multi-sets/bags (multiple\n * copies of items are treated as unique items).\n *\n * @param other - The items to compare against.\n * @signature\n * intersection(other)(data)\n * @example\n * pipe([1, 2, 3], intersection([2, 3, 5])); // => [2, 3]\n * pipe([1, 1, 2, 2], intersection([1])); // => [1]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function intersection(\n other: readonly S[],\n): (data: readonly T[]) => (S & T)[];\n\nexport function intersection(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nfunction lazyImplementation(\n other: readonly S[],\n): LazyEvaluator {\n if (other.length === 0) {\n return lazyEmptyEvaluator;\n }\n\n // We need to build a more efficient data structure that would allow us to\n // keep track of the number of times we've seen a value in the other array.\n const remaining = new Map();\n for (const value of other) {\n remaining.set(value, (remaining.get(value) ?? 0) + 1);\n }\n\n return (value) => {\n const copies = remaining.get(value);\n\n if (copies === undefined || copies === 0) {\n // The item is either not part of the other array or we've \"used\" enough\n // copies of it so we skip the remaining values.\n return SKIP_ITEM;\n }\n\n // The item is equal to an item in the other array and there are still\n // copies of it to \"account\" for so we return this one and remove it from\n // our ongoing tally.\n if (copies === 1) {\n remaining.delete(value);\n } else {\n remaining.set(value, copies - 1);\n }\n\n return {\n hasNext: true,\n // We can safely cast here because if value was in the `remaining` map, it\n // has to be of type S (that's just how we built it).\n next: value as S & T,\n // We can stop the iteration if the remaining map is empty.\n done: remaining.size === 0,\n };\n };\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\n\ntype Comparator = (a: TFirst, b: TSecond) => boolean;\n\n/**\n * Returns a list of intersecting values based on a custom\n * comparator function that compares elements of both arrays.\n *\n * @param array - The source array.\n * @param other - The second array.\n * @param comparator - The custom comparator.\n * @signature\n * intersectionWith(array, other, comparator)\n * @example\n * intersectionWith(\n * [\n * { id: 1, name: 'Ryan' },\n * { id: 3, name: 'Emma' },\n * ],\n * [3, 5],\n * (a, b) => a.id === b,\n * ) // => [{ id: 3, name: 'Emma' }]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function intersectionWith(\n array: readonly TFirst[],\n other: readonly TSecond[],\n comparator: Comparator,\n): TFirst[];\n\n/**\n * Returns a list of intersecting values based on a custom\n * comparator function that compares elements of both arrays.\n *\n * @param other - The second array.\n * @param comparator - The custom comparator.\n * @signature\n * intersectionWith(other, comparator)(array)\n * @example\n * intersectionWith(\n * [3, 5],\n * (a, b) => a.id === b\n * )([\n * { id: 1, name: 'Ryan' },\n * { id: 3, name: 'Emma' },\n * ]); // => [{ id: 3, name: 'Emma' }]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function intersectionWith(\n other: readonly TSecond[],\n /**\n * Type inference doesn't work properly for the comparator's first parameter\n * in data last variant.\n */\n comparator: Comparator,\n): (array: readonly TFirst[]) => TFirst[];\n\nexport function intersectionWith(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nconst lazyImplementation =\n (\n other: readonly TSecond[],\n comparator: Comparator,\n ): LazyEvaluator =>\n (value) =>\n other.some((otherValue) => comparator(value, otherValue))\n ? { done: false, hasNext: true, next: value }\n : SKIP_ITEM;\n", "import type { Simplify } from \"type-fest\";\nimport { purry } from \"./purry\";\nimport type { ToString } from \"./internal/types/ToString\";\n\ntype Inverted = Simplify<{\n -readonly [K in keyof T as K extends number | string\n ? Required[K] extends PropertyKey\n ? Required[K]\n : never\n : never]: ToString;\n}>;\n\n/**\n * Returns an object whose keys and values are swapped. If the object contains duplicate values,\n * subsequent values will overwrite previous values.\n *\n * @param object - The object.\n * @signature\n * invert(object)\n * @example\n * invert({ a: \"d\", b: \"e\", c: \"f\" }) // => { d: \"a\", e: \"b\", f: \"c\" }\n * @dataFirst\n * @category Object\n */\nexport function invert(object: T): Inverted;\n\n/**\n * Returns an object whose keys and values are swapped. If the object contains duplicate values,\n * subsequent values will overwrite previous values.\n *\n * @signature\n * invert()(object)\n * @example\n * pipe({ a: \"d\", b: \"e\", c: \"f\" }, invert()); // => { d: \"a\", e: \"b\", f: \"c\" }\n * @dataLast\n * @category Object\n */\nexport function invert(): (object: T) => Inverted;\n\nexport function invert(...args: readonly unknown[]): unknown {\n return purry(invertImplementation, args);\n}\n\nfunction invertImplementation(\n data: Readonly>,\n): Record {\n const result: Record = {};\n\n for (const [key, value] of Object.entries(data)) {\n result[value] = key;\n }\n\n return result;\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is an Array and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is an Array, false otherwise.\n * @signature\n * isArray(data)\n * @example\n * isArray([5]) //=> true\n * isArray([]) //=> true\n * isArray('somethingElse') //=> false\n * @category Guard\n */\nexport function isArray(\n data: ArrayLike | T,\n): data is NarrowedTo {\n return Array.isArray(data);\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is a bigint and narrows its\n * type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a number, false otherwise.\n * @signature\n * isBigInt(data)\n * @example\n * isBigInt(1n); // => true\n * isBigInt(1); // => false\n * isBigInt('notANumber'); // => false\n * @category Guard\n */\nexport function isBigInt(data: T | bigint): data is NarrowedTo {\n return typeof data === \"bigint\";\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is a boolean and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a boolean, false otherwise.\n * @signature\n * isBoolean(data)\n * @example\n * isBoolean(true) //=> true\n * isBoolean(false) //=> true\n * isBoolean('somethingElse') //=> false\n * @category Guard\n */\nexport function isBoolean(\n data: T | boolean,\n): data is NarrowedTo {\n return typeof data === \"boolean\";\n}\n", "/**\n * A function that checks if the passed parameter is a Date and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a Date, false otherwise.\n * @signature\n * isDate(data)\n * @example\n * isDate(new Date()) //=> true\n * isDate('somethingElse') //=> false\n * @category Guard\n */\nexport function isDate(data: unknown): data is Date {\n return data instanceof Date;\n}\n", "/**\n * A function that checks if the passed parameter is defined (`!== undefined`)\n * and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is defined, false otherwise.\n * @signature\n * isDefined(data)\n * @example\n * isDefined('string') //=> true\n * isDefined(null) //=> true\n * isDefined(undefined) //=> false\n * @category Guard\n */\nexport function isDefined(data: T | undefined): data is T {\n return data !== undefined;\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\n\n/**\n * A function that checks if the passed parameter is empty.\n *\n * This function has *limited* utility at the type level because **negating** it\n * does not yield a useful type in most cases because of TypeScript\n * limitations. Additionally, utilities which accept a narrower input type\n * provide better type-safety on their inputs. In most cases, you should use\n * one of the following functions instead:\n * * `isEmptyish` - supports a wider range of cases, accepts any input including nullish values, and does a better job at narrowing the result.\n * * `hasAtLeast` - when the input is just an array/tuple.\n * * `isStrictEqual` - when you just need to check for a specific literal value.\n * * `isNullish` - when you just care about `null` and `undefined`.\n * * `isTruthy` - when you need to also filter `number` and `boolean`.\n *\n * @param data - The variable to check.\n * @signature\n * isEmpty(data)\n * @example\n * isEmpty(''); //=> true\n * isEmpty([]); //=> true\n * isEmpty({}); //=> true\n *\n * isEmpty('test'); //=> false\n * isEmpty([1, 2, 3]); //=> false\n * isEmpty({ a: \"hello\" }); //=> false\n *\n * isEmpty(undefined); // Deprecated: use `isEmptyish`\n * @category Guard\n */\nexport function isEmpty(data: IterableContainer): data is [];\nexport function isEmpty(\n data: T,\n): data is Record;\nexport function isEmpty(\n data: T,\n): data is \"\" extends T ? \"\" : never;\n\n// TODO [>2]: remove this overload once we stop supporting `undefined`.\n// eslint-disable-next-line jsdoc/require-example, jsdoc/require-param, jsdoc/require-description\n/**\n * @deprecated Use `isEmptyish` instead!\n */\nexport function isEmpty(\n data: T,\n): data is\n | (\"\" extends T ? \"\" : never)\n | (undefined extends T ? undefined : never);\n\nexport function isEmpty(data: object | string | undefined): boolean {\n if (\n data === \"\" ||\n // TODO [>2]: remove `undefined` support! (don't forget to update the jsdoc example too!)\n data === undefined\n ) {\n return true;\n }\n\n if (Array.isArray(data)) {\n return data.length === 0;\n }\n\n return Object.keys(data).length === 0;\n}\n", "import type {\n And,\n HasRequiredKeys,\n IsAny,\n IsEqual,\n IsNever,\n IsNumericLiteral,\n IsUnknown,\n OmitIndexSignature,\n Or,\n Tagged,\n ValueOf,\n} from \"type-fest\";\nimport type { HasWritableKeys } from \"./internal/types/HasWritableKeys\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- we use a non-exported unique symbol to prevent users from faking our return type.\ndeclare const EMPTYISH_BRAND: unique symbol;\n\n// Because our function is a type-predicate and it narrows the input based on\n// the result of our type, we sometimes need a way to \"turn off\" narrowing while\n// still returning the input type. By tagging/branding our return type we stop\n// TypeScript from narrowing it while still allowing it to be used as if it was\n// the input type (because it still extends the type).\ntype Empty = Tagged;\n\n// The goal of this type is to return the empty \"view\" of the input type. This\n// makes it possible for TypeScript to narrow it precisely.\ntype Emptyish =\n // There are effectively 4 types that can be empty:\n | (T extends string ? \"\" : never)\n | (T extends object ? EmptyishObjectLike : never)\n | (T extends null ? null : never)\n | (T extends undefined ? undefined : never);\n\n// Because of TypeScript's duck-typing, a lot of sub-types of `object` can\n// extend each other so we need to cascade between the different \"kinds\" of\n// objects.\ntype EmptyishObjectLike = T extends readonly unknown[]\n ? EmptyishArray\n : T extends ReadonlyMap\n ? T extends Map\n ? // Mutable maps should remain mutable so we can't narrow them down.\n Empty\n : // But immutable maps could be rewritten to prevent any mutations.\n ReadonlyMap\n : T extends ReadonlySet\n ? T extends Set\n ? // Mutable sets should remain mutable so we can't narrow them down.\n Empty\n : // But immutable sets could be rewritten to prevent any mutations.\n ReadonlySet\n : EmptyishObject;\n\ntype EmptyishArray = T extends readonly []\n ? // By returning T we effectively narrow the \"else\" branch to `never`.\n T\n : And<\n IsEqual[\"required\"], []>,\n IsEqual[\"suffix\"], []>\n > extends true\n ? T extends unknown[]\n ? // A mutable array should remain mutable so we can't narrow it down.\n Empty\n : // But immutable arrays could be rewritten to prevent any mutations.\n readonly []\n : // An array with a required prefix or suffix would never be empty, we can\n // use that fact to narrow the \"if\" branch to `never`.\n never;\n\ntype EmptyishObject = T extends {\n length: infer Length extends number;\n}\n ? T extends string\n ? // When a string is tagged/branded it also extends `object` and also has\n // a `length` prop so we need to prevent handling it because it's\n // irrelevant here!\n never\n : // Because of how the implementation works, we need to consider any object\n // with a `length` prop as potentially \"empty\".\n EmptyishArbitrary\n : T extends { size: infer Size extends number }\n ? // Because of how the implementation works, we need to consider any object\n // with a `size` prop as potentially \"empty\".\n EmptyishArbitrary\n : IsNever> extends true\n ? // This handles empty objects; by returning T we effectively narrow the\n // \"else\" branch to `never`.\n T\n : HasRequiredKeys> extends true\n ? // If the object has required keys it can never be empty, we can use\n // that fact to narrow the \"if\" branch to `never`.\n never\n : HasWritableKeys extends true\n ? // A mutable object should remain mutable so we can't narrow it\n // down.\n Empty\n : // But immutable objects could be rewritten to prevent any\n // mutations.\n { readonly [P in keyof T]: never };\n\n// We use certain props to check for emptiness effectively, but that means we\n// will return those values for any object that has them. Because we don't know\n// anything about those objects we need to be careful about narrowing.\ntype EmptyishArbitrary =\n IsNumericLiteral extends true\n ? [0] extends [N]\n ? [N] extends [0]\n ? // If the prop is a literal 0 the object is and always will be empty\n // so we can return it to narrow the \"else\" branch as `never`.\n T\n : // If it accepts 0, but might accept other values too we need to\n // consider the object mutable and not narrow it down.\n Empty\n : // If the prop will never be 0 we can say it will never be empty and can\n // return `never` for the \"if\" branch.\n never\n : // If the prop isn't a literal value we don't know enough about the object\n // and should consider it mutable.\n Empty;\n\n// Overly generic types interfere with our already pretty complex return type.\n// To make our lives easier we can filter them out at the function declaration\n// step and we never need to think about them again.\ntype ShouldNotNarrow = Or<\n Or, IsUnknown>,\n IsEqual<\n T,\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n {}\n >\n>;\n\n/**\n * A function that checks if the input is empty. Empty is defined as anything\n * exposing a numerical `length`, or `size` property that is equal to `0`. This\n * definition covers strings, arrays, Maps, Sets, plain objects, and custom\n * classes. Additionally, `null` and `undefined` are also considered empty.\n *\n * `number`, `bigint`, `boolean`, `symbol`, and `function` will always return\n * `false`. `RegExp`, `Date`, and weak collections will always return `true`.\n * Classes and Errors are treated as plain objects: if they expose any public\n * property they would be considered non-empty, unless they expose a numerical\n * `length` or `size` property, which defines their emptiness regardless of\n * other properties.\n *\n * This function has *limited* utility at the type level because **negating** it\n * does not yield a useful type in most cases because of TypeScript\n * limitations. Additionally, utilities which accept a narrower input type\n * provide better type-safety on their inputs. In most cases, you should use\n * one of the following functions instead:\n * * `isEmpty` - provides better type-safety on inputs by accepting a narrower set of cases.\n * * `hasAtLeast` - when the input is just an array/tuple.\n * * `isStrictEqual` - when you just need to check for a specific literal value.\n * * `isNullish` - when you just care about `null` and `undefined`.\n * * `isTruthy` - when you need to also filter `number` and `boolean`.\n *\n * @param data - The variable to check.\n * @signature\n * isEmptyish(data)\n * @example\n * isEmptyish(undefined); //=> true\n * isEmptyish(null); //=> true\n * isEmptyish(''); //=> true\n * isEmptyish([]); //=> true\n * isEmptyish({}); //=> true\n * isEmptyish(new Map()); //=> true\n * isEmptyish(new Set()); //=> true\n * isEmptyish({ a: \"hello\", size: 0 }); //=> true\n * isEmptyish(/abc/); //=> true\n * isEmptyish(new Date()); //=> true\n * isEmptyish(new WeakMap()); //=> true\n *\n * isEmptyish('test'); //=> false\n * isEmptyish([1, 2, 3]); //=> false\n * isEmptyish({ a: \"hello\" }); //=> false\n * isEmptyish({ length: 1 }); //=> false\n * isEmptyish(0); //=> false\n * isEmptyish(true); //=> false\n * isEmptyish(() => {}); //=> false\n * @category Guard\n */\nexport function isEmptyish(\n data: ShouldNotNarrow extends true\n ? never\n : T | Readonly>>,\n): data is ShouldNotNarrow extends true\n ? never\n : T extends unknown\n ? Emptyish>\n : never;\nexport function isEmptyish(data: unknown): boolean;\n\nexport function isEmptyish(data: unknown): boolean {\n // eslint-disable-next-line eqeqeq -- Less code to ship...\n if (data == undefined || data === \"\") {\n // These are the only literal values that are considered emptyish.\n return true;\n }\n\n if (typeof data !== \"object\") {\n // There are no non-object types that could be empty at this point...\n return false;\n }\n\n if (\"length\" in data && typeof data.length === \"number\") {\n // Arrays and array-likes.\n return data.length === 0;\n }\n\n if (\"size\" in data && typeof data.size === \"number\") {\n // Maps and Sets.\n return data.size === 0;\n }\n\n // eslint-disable-next-line guard-for-in, no-unreachable-loop -- Instead of taking Object.keys just to check its length, which will be inefficient if the object has a lot of keys, we have a backdoor into an iterator of the object's properties via the `for...in` loop.\n for (const _ in data) {\n return false;\n }\n\n // We can't do a similar optimization for symbol props, so we leave them for\n // the very last check when the object is practically empty. Assuming that\n // even if an object has a symbol prop, it probably doesn't have thousands of\n // them.\n return Object.getOwnPropertySymbols(data).length === 0;\n}\n", "type DefinitelyError =\n Extract extends never ? Error : Extract;\n/**\n * A function that checks if the passed parameter is an Error and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is an Error, false otherwise.\n * @signature\n * isError(data)\n * @example\n * isError(new Error('message')) //=> true\n * isError('somethingElse') //=> false\n * @category Guard\n */\nexport function isError(data: Error | T): data is DefinitelyError {\n return data instanceof Error;\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\nimport type { StrictFunction } from \"./internal/types/StrictFunction\";\n\n/**\n * A function that checks if the passed parameter is a Function and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a Function, false otherwise.\n * @signature\n * isFunction(data)\n * @example\n * isFunction(() => {}) //=> true\n * isFunction('somethingElse') //=> false\n * @category Guard\n */\nexport const isFunction = (\n data: StrictFunction | T,\n): data is NarrowedTo => typeof data === \"function\";\n", "import type { IsLiteral, IsUnion } from \"type-fest\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\n\n/**\n * A \"constant\" tuple is a type that has a single runtime value that can fulfil\n * it. This means that it doesn't have any variadic/rest/spread/array parts, and\n * that all it's values are singular (non-union) literals.\n *\n * We use this type to allow narrowing when checking against a set of values\n * defined as a const.\n *\n * @example\n * type T1 = IsConstantTuple<[\"cat\", \"dog\", 3, true]>; // => true;\n * type T2 = IsConstantTuple<[\"cat\" | \"dog\"]>; // false;\n * type T2 = IsConstantTuple<[\"cat\", ...\"cat\"[]]>; // false;\n */\ntype IsConstantTuple = T extends readonly []\n ? true\n : T extends readonly [infer Head, ...infer Rest]\n ? IsUnion extends true\n ? false\n : IsConstantTuple\n : false;\n\n/**\n * There is no way to tell Typescript to only narrow the \"accepted\" side of a\n * type-predicate and so in many cases the negated side is also affected, this\n * results in over-narrowing in many cases, breaking typing. For this reason we\n * only want to use the type-predicate variant of `isIncludedIn` when we can\n * assume the result represents the expected types (closely enough). This is not\n * and ideal solution and we will still generate wrong types in some cases (see\n * tests), but it reduces the surface of this problem significantly, while still\n * keeping the utility of `isIncludedIn` for the common cases.\n *\n * TL;DR - The types are narrowable when: T is literal and S is a pure tuple, or\n * when T isn't a literal, but S is.\n *\n * @example\n * const data = 1 as 1 | 2 | 3;\n * const container = [] as (1 | 2)[];\n * if (isIncludedIn(data, container)) {\n * ... it makes sense to narrow data to `1 | 2` as the value `3` is not part\n * ... of the typing of container, so will never result in being true.\n * } else {\n * ... but it doesn't make sense to narrow the value to 3 here, because 1\n * ... and 2 are still valid values for data, when container doesn't include\n * ... them **at runtime**.\n * ... Typescript narrows the _rejected_ branch based on how it narrowed the\n * ... _accepted_ clause, and we can't control that; because our input type\n * ... is `1 | 2 | 3` and the accepted side is `1 | 2`, the rejected side is\n * ... typed `Exclude<1 | 2 | 3, 1 | 2>`, which is `3`.\n * }\n * }\n */\ntype IsNarrowable> =\n IsLiteral extends true\n ? // When T is literal (i.g. it isn't a primitive type like `string` or\n // `number`) then the criteria for narrowing is that the container is a\n // \"pure\" tuple because we *assume* that S represents a constant set of\n // values, and that it's typing also represents it's runtime content 1-\n // for-1. If S isn't a pure tuple it means we can't tell from the typing\n // which of it's values are actually present in runtime so can't use them\n // to narrow correctly.\n IsConstantTuple\n : // When T isn't a literal type but the items in S are we can narrow the\n // type because it won't affect the negated side (`Exclude`\n // is still `number`).\n IsLiteral;\n\n/**\n * Checks if the item is included in the container. This is a wrapper around\n * `Array.prototype.includes` and `Set.prototype.has` and thus relies on the\n * same equality checks that those functions do (which is reference equality,\n * e.g. `===`). In some cases the input's type is also narrowed to the\n * container's item types.\n *\n * Notice that unlike most functions, this function takes a generic item as it's\n * data and **an array** as it's parameter.\n *\n * @param data - The item that is checked.\n * @param container - The items that are checked against.\n * @returns `true` if the item is in the container, or `false` otherwise. In\n * cases the type of `data` is also narrowed down.\n * @signature\n * isIncludedIn(data, container);\n * @example\n * isIncludedIn(2, [1, 2, 3]); // => true\n * isIncludedIn(4, [1, 2, 3]); // => false\n *\n * const data = \"cat\" as \"cat\" | \"dog\" | \"mouse\";\n * isIncludedIn(data, [\"cat\", \"dog\"] as const); // true (typed \"cat\" | \"dog\");\n * @dataFirst\n * @category Guard\n */\nexport function isIncludedIn>(\n data: T,\n container: IsNarrowable extends true ? S : never,\n): data is S[number];\nexport function isIncludedIn(\n data: T,\n container: IterableContainer,\n): boolean;\n\n/**\n * Checks if the item is included in the container. This is a wrapper around\n * `Array.prototype.includes` and `Set.prototype.has` and thus relies on the\n * same equality checks that those functions do (which is reference equality,\n * e.g. `===`). In some cases the input's type is also narrowed to the\n * container's item types.\n *\n * Notice that unlike most functions, this function takes a generic item as it's\n * data and **an array** as it's parameter.\n *\n * @param container - The items that are checked against.\n * @returns `true` if the item is in the container, or `false` otherwise. In\n * cases the type of `data` is also narrowed down.\n * @signature\n * isIncludedIn(container)(data);\n * @example\n * pipe(2, isIncludedIn([1, 2, 3])); // => true\n * pipe(4, isIncludedIn([1, 2, 3])); // => false\n *\n * const data = \"cat\" as \"cat\" | \"dog\" | \"mouse\";\n * pipe(\n * data,\n * isIncludedIn([\"cat\", \"dog\"] as const),\n * ); // => true (typed \"cat\" | \"dog\");\n * @dataLast\n * @category Guard\n */\nexport function isIncludedIn>(\n container: IsNarrowable extends true ? S : never,\n): (data: T) => data is S[number];\nexport function isIncludedIn(\n container: IterableContainer,\n): (data: T) => boolean;\n\nexport function isIncludedIn(\n dataOrContainer: unknown,\n container?: readonly unknown[],\n): unknown {\n if (container === undefined) {\n // === dataLast ===\n // We don't use purry here because we can optimize the dataLast case by\n // memoizing a set and accessing it in O(1) time instead of scanning the\n // array **each time** (O(n)) each time.\n const asSet = new Set(dataOrContainer as readonly unknown[]);\n return (data: unknown) => asSet.has(data);\n }\n\n // === dataFirst ===\n return container.includes(dataOrContainer);\n}\n", "/**\n * A function that checks if the passed parameter is not `null` and narrows its type accordingly.\n * Notice that `undefined` is not null!\n *\n * @param data - The variable to check.\n * @returns True if the passed input is defined, false otherwise.\n * @signature\n * isNonNull(data)\n * @example\n * isNonNull('string') //=> true\n * isNonNull(null) //=> false\n * isNonNull(undefined) //=> true\n * @category Guard\n */\nexport function isNonNull(data: T | null): data is T {\n return data !== null;\n}\n", "/**\n * A function that checks if the passed parameter is defined *AND* isn't `null`\n * and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is defined and isn't `null`, false\n * otherwise.\n * @signature\n * isNonNullish(data)\n * @example\n * isNonNullish('string') //=> true\n * isNonNullish(null) //=> false\n * isNonNullish(undefined) //=> false\n * @category Guard\n */\nexport function isNonNullish(data: T): data is NonNullable {\n return data !== undefined && data !== null;\n}\n", "/**\n * A function that takes a guard function as predicate and returns a guard that negates it.\n *\n * @param predicate - The guard function to negate.\n * @returns Function A guard function.\n * @signature\n * isNot(isTruthy)(data)\n * @example\n * isNot(isTruthy)(false) //=> true\n * isNot(isTruthy)(true) //=> false\n * @dataLast\n * @category Guard\n */\nexport function isNot(\n predicate: (data: T) => data is S,\n): (data: T) => data is Exclude;\nexport function isNot(predicate: (data: T) => boolean): (data: T) => boolean;\n\nexport function isNot(predicate: (data: T) => boolean) {\n return (data: T): boolean => !predicate(data);\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is either `null` or\n * `undefined` and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is either `null` or `undefined`, false\n * otherwise.\n * @signature\n * isNullish(data)\n * @example\n * isNullish(undefined) //=> true\n * isNullish(null) //=> true\n * isNullish('somethingElse') //=> false\n * @category Guard\n */\nexport function isNullish(\n data: T | null | undefined,\n): data is NarrowedTo {\n return data === null || data === undefined;\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is a number and narrows its\n * type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a number, false otherwise.\n * @signature\n * isNumber(data)\n * @example\n * isNumber(1); // => true\n * isNumber(1n); // => false\n * isNumber('notANumber'); // => false\n * @category Guard\n */\nexport function isNumber(data: T | number): data is NarrowedTo {\n return typeof data === \"number\" && !Number.isNaN(data);\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * Checks if the given parameter is of type `\"object\"` via `typeof`, excluding `null`.\n *\n * It's important to note that in JavaScript, many entities are considered objects, like Arrays, Classes, RegExps, Maps, Sets, Dates, URLs, Promise, Errors, and more. Although technically an object too, `null` is not considered an object by this function, so that its easier to narrow nullables.\n *\n * For a more specific check that is limited to plain objects (simple struct/shape/record-like objects), consider using `isPlainObject` instead. For a simpler check that only removes `null` from the type prefer `isNonNull` or `isDefined`.\n *\n * @param data - The variable to be checked for being an object type.\n * @returns The input type, narrowed to only objects.\n * @signature\n * isObjectType(data)\n * @example\n * // true\n * isObjectType({}) //=> true\n * isObjectType([]) //=> true\n * isObjectType(Promise.resolve(\"something\")) //=> true\n * isObjectType(new Date()) //=> true\n * isObjectType(new Error(\"error\")) //=> true\n *\n * // false\n * isObjectType('somethingElse') //=> false\n * isObjectType(null) //=> false\n * @dataFirst\n * @category Guard\n */\nexport function isObjectType(\n data: T | object,\n): data is NarrowedTo {\n return typeof data === \"object\" && data !== null;\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * Checks if `data` is a \"plain\" object. A plain object is defined as an object with string keys and values of any type, including primitives, other objects, functions, classes, etc (aka struct/shape/record/simple). Technically, a plain object is one whose prototype is either `Object.prototype` or `null`, ensuring it does not inherit properties or methods from other object types.\n *\n * This function is narrower in scope than `isObjectType`, which accepts any entity considered an `\"object\"` by JavaScript's `typeof`.\n *\n * Note that Maps, Arrays, and Sets are not considered plain objects and would return `false`.\n *\n * @param data - The variable to check.\n * @returns The input type, narrowed to only plain objects.\n * @signature\n * isPlainObject(data)\n * @example\n * // true\n * isPlainObject({}) //=> true\n * isPlainObject({ a: 123 }) //=> true\n *\n * // false\n * isPlainObject([]) //=> false\n * isPlainObject(Promise.resolve(\"something\")) //=> false\n * isPlainObject(new Date()) //=> false\n * isPlainObject(new Error(\"error\")) //=> false\n * isPlainObject('somethingElse') //=> false\n * isPlainObject(null) //=> false\n * @category Guard\n */\nexport function isPlainObject(\n data: Readonly> | T,\n): data is NarrowedTo> {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- This is a low-level check, we can't avoid it being typed as `any`.\n const proto = Object.getPrototypeOf(data);\n return proto === null || proto === Object.prototype;\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is a Promise and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a Promise, false otherwise.\n * @signature\n * isPromise(data)\n * @example\n * isPromise(Promise.resolve(5)) //=> true\n * isPromise(Promise.reject(5)) //=> true\n * isPromise('somethingElse') //=> false\n * @category Guard\n */\nexport function isPromise(\n data: Readonly> | T,\n): data is NarrowedTo> {\n return data instanceof Promise;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Performs a *shallow structural* comparison between two values to determine if\n * they are equivalent. For primitive values this is equivalent to `===`, for\n * arrays a **strict equality** check would be performed on every item, in\n * order, and for objects props will be matched and checked for **strict\n * equality**; Unlike `isDeepEqual` where the function also *recurses* into each\n * item and value.\n *\n * !IMPORTANT: symbol properties of objects are not supported right now and\n * might result in unexpected behavior. Please open an issue in the Remeda\n * github project if you need support for these types.\n *\n * !IMPORTANT: Promise, Date, and RegExp, are shallowly equal, even when they\n * are semantically different (e.g. resolved promises); but `isDeepEqual` does\n * compare the latter 2 semantically by-value.\n *\n * The result would be narrowed to the second value so that the function can be\n * used as a type guard.\n *\n * See:\n * - `isStrictEqual` if you don't need a deep comparison and just want to check\n * for simple (`===`, `Object.is`) equality.\n * - `isDeepEqual` for a recursively deep check of arrays and objects.\n *\n * @param data - The first value to compare.\n * @param other - The second value to compare.\n * @signature\n * isShallowEqual(data, other)\n * @example\n * isShallowEqual(1, 1) //=> true\n * isShallowEqual(1, '1') //=> false\n * isShallowEqual([1, 2, 3], [1, 2, 3]) //=> true\n * isShallowEqual([[1], [2], [3]], [[1], [2], [3]]) //=> false\n * @dataFirst\n * @category Guard\n */\nexport function isShallowEqual(\n data: T,\n other: T extends Exclude ? S : never,\n): data is S;\nexport function isShallowEqual(data: T, other: T): boolean;\n\n/**\n * Performs a *shallow structural* comparison between two values to determine if\n * they are equivalent. For primitive values this is equivalent to `===`, for\n * arrays a **strict equality** check would be performed on every item, in\n * order, and for objects props will be matched and checked for **strict\n * equality**; Unlike `isDeepEqual` where the function also *recurses* into each\n * item and value.\n *\n * !IMPORTANT: symbol properties of objects are not supported right now and\n * might result in unexpected behavior. Please open an issue in the Remeda\n * github project if you need support for these types.\n *\n * !IMPORTANT: All built-in objects (Promise, Date, RegExp) are shallowly equal,\n * even when they are semantically different (e.g. resolved promises). Use\n * `isDeepEqual` instead.\n *\n * The result would be narrowed to the second value so that the function can be\n * used as a type guard.\n *\n * See:\n * - `isStrictEqual` if you don't need a deep comparison and just want to check\n * for simple (`===`, `Object.is`) equality.\n * - `isDeepEqual` for a recursively deep check of arrays and objects.\n *\n * @param other - The second value to compare.\n * @signature\n * isShallowEqual(other)(data)\n * @example\n * pipe(1, isShallowEqual(1)) //=> true\n * pipe(1, isShallowEqual('1')) //=> false\n * pipe([1, 2, 3], isShallowEqual([1, 2, 3])) //=> true\n * pipe([[1], [2], [3]], isShallowEqual([[1], [2], [3]])) //=> false\n * @dataFirst\n * @category Guard\n */\nexport function isShallowEqual(\n other: T extends Exclude ? S : never,\n): (data: T) => data is S;\nexport function isShallowEqual(other: T): (data: T) => boolean;\n\nexport function isShallowEqual(...args: readonly unknown[]): unknown {\n return purry(isShallowEqualImplementation, args);\n}\n\nfunction isShallowEqualImplementation(a: T, b: T): boolean {\n if (a === b || Object.is(a, b)) {\n return true;\n }\n\n if (\n typeof a !== \"object\" ||\n a === null ||\n typeof b !== \"object\" ||\n b === null\n ) {\n return false;\n }\n\n if (a instanceof Map && b instanceof Map) {\n return isMapShallowEqual(a, b);\n }\n\n if (a instanceof Set && b instanceof Set) {\n return isSetShallowEqual(a, b);\n }\n\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) {\n return false;\n }\n\n for (const key of keys) {\n if (!Object.hasOwn(b, key)) {\n return false;\n }\n\n const { [key as keyof T]: valueA } = a;\n const { [key as keyof T]: valueB } = b;\n\n if (valueA !== valueB || !Object.is(valueA, valueB)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isMapShallowEqual(\n a: ReadonlyMap,\n b: ReadonlyMap,\n): boolean {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const [key, value] of a) {\n const valueB = b.get(key);\n if (value !== valueB || !Object.is(value, valueB)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isSetShallowEqual(\n a: ReadonlySet,\n b: ReadonlySet,\n): boolean {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const value of a) {\n if (!b.has(value)) {\n return false;\n }\n }\n\n return true;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Determines whether two values are *functionally identical* in all contexts.\n * For primitive values (string, number), this is done by-value, and for objects\n * it is done by-reference (i.e., they point to the same object in memory).\n *\n * Under the hood we use **both** the [`===` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality)\n * and [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). This means that `isStrictEqual(NaN, NaN) === true`\n * (whereas `NaN !== NaN`), and `isStrictEqual(-0, 0) === true` (whereas\n * `Object.is(-0, 0) === false`).\n *\n * The result would be narrowed to the second value so that the function can be\n * used as a type guard.\n *\n * See:\n * - `isDeepEqual` for a semantic comparison that allows comparing arrays and\n * objects \"by-value\", and recurses for every item.\n * - `isShallowEqual` if you need to compare arrays and objects \"by-value\" but\n * don't want to recurse into their values.\n *\n * @param data - The first value to compare.\n * @param other - The second value to compare.\n * @signature\n * isStrictEqual(data, other)\n * @example\n * isStrictEqual(1, 1) //=> true\n * isStrictEqual(1, '1') //=> false\n * isStrictEqual([1, 2, 3], [1, 2, 3]) //=> false\n * @dataFirst\n * @category Guard\n */\nexport function isStrictEqual(\n data: T,\n other: T extends Exclude ? S : never,\n): data is S;\nexport function isStrictEqual(data: T, other: T): boolean;\n\n/**\n * Determines whether two values are *functionally identical* in all contexts.\n * For primitive values (string, number), this is done by-value, and for objects\n * it is done by-reference (i.e., they point to the same object in memory).\n *\n * Under the hood we use **both** the [`===` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality)\n * and [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). This means that `isStrictEqual(NaN, NaN) === true`\n * (whereas `NaN !== NaN`), and `isStrictEqual(-0, 0) === true` (whereas\n * `Object.is(-0, 0) === false`).\n *\n * The result would be narrowed to the second value so that the function can be\n * used as a type guard.\n *\n * See:\n * - `isDeepEqual` for a semantic comparison that allows comparing arrays and\n * objects \"by-value\", and recurses for every item.\n * - `isShallowEqual` if you need to compare arrays and objects \"by-value\" but\n * don't want to recurse into their values.\n *\n * @param other - The second value to compare.\n * @signature\n * isStrictEqual(other)(data)\n * @example\n * pipe(1, isStrictEqual(1)); //=> true\n * pipe(1, isStrictEqual('1')); //=> false\n * pipe([1, 2, 3], isStrictEqual([1, 2, 3])); //=> false\n * @dataLast\n * @category Guard\n */\nexport function isStrictEqual(\n other: T extends Exclude ? S : never,\n): (data: T) => data is S;\nexport function isStrictEqual(other: T): (data: T) => boolean;\n\nexport function isStrictEqual(...args: readonly unknown[]): unknown {\n return purry(isStrictlyEqualImplementation, args);\n}\n\nconst isStrictlyEqualImplementation = (data: unknown, other: T): data is T =>\n data === other || Object.is(data, other);\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is a string and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a string, false otherwise.\n * @signature\n * isString(data)\n * @example\n * isString('string') //=> true\n * isString(1) //=> false\n * @category Guard\n */\nexport function isString(data: T | string): data is NarrowedTo {\n return typeof data === \"string\";\n}\n", "import type { NarrowedTo } from \"./internal/types/NarrowedTo\";\n\n/**\n * A function that checks if the passed parameter is a symbol and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is a symbol, false otherwise.\n * @signature\n * isSymbol(data)\n * @example\n * isSymbol(Symbol('foo')) //=> true\n * isSymbol(1) //=> false\n * @category Guard\n */\nexport function isSymbol(data: T | symbol): data is NarrowedTo {\n return typeof data === \"symbol\";\n}\n", "/**\n * A function that checks if the passed parameter is truthy and narrows its type accordingly.\n *\n * @param data - The variable to check.\n * @returns True if the passed input is truthy, false otherwise.\n * @signature\n * isTruthy(data)\n * @example\n * isTruthy('somethingElse') //=> true\n * isTruthy(null) //=> false\n * isTruthy(undefined) //=> false\n * isTruthy(false) //=> false\n * isTruthy(0) //=> false\n * isTruthy('') //=> false\n * @category Guard\n */\n// eslint-disable-next-line unicorn/prefer-native-coercion-functions -- This is not entirely correct, our isTruthy also coerces the type.\nexport function isTruthy(\n data: T,\n): data is Exclude {\n return Boolean(data);\n}\n", "import type { Join } from \"type-fest\";\nimport { purry } from \"./purry\";\n\n// Copied from type-fest, from the Join type.\ntype JoinableItem = bigint | boolean | number | string | null | undefined;\n\n/**\n * Joins the elements of the array by: casting them to a string and\n * concatenating them one to the other, with the provided glue string in between\n * every two elements.\n *\n * When called on a tuple and with stricter item types (union of literal values,\n * the result is strictly typed to the tuples shape and it's item types).\n *\n * @param data - The array to join.\n * @param glue - The string to put in between every two elements.\n * @signature\n * join(data, glue)\n * @example\n * join([1,2,3], \",\") // => \"1,2,3\" (typed `string`)\n * join(['a','b','c'], \"\") // => \"abc\" (typed `string`)\n * join(['hello', 'world'] as const, \" \") // => \"hello world\" (typed `hello world`)\n * @dataFirst\n * @category Array\n */\nexport function join<\n T extends readonly JoinableItem[] | [],\n Glue extends string,\n>(data: T, glue: Glue): Join;\n\n/**\n * Joins the elements of the array by: casting them to a string and\n * concatenating them one to the other, with the provided glue string in between\n * every two elements.\n *\n * When called on a tuple and with stricter item types (union of literal values,\n * the result is strictly typed to the tuples shape and it's item types).\n *\n * @param glue - The string to put in between every two elements.\n * @signature\n * join(glue)(data)\n * @example\n * pipe([1,2,3], join(\",\")) // => \"1,2,3\" (typed `string`)\n * pipe(['a','b','c'], join(\"\")) // => \"abc\" (typed `string`)\n * pipe(['hello', 'world'] as const, join(\" \")) // => \"hello world\" (typed `hello world`)\n * @dataLast\n * @category Array\n */\nexport function join<\n T extends readonly JoinableItem[] | [],\n Glue extends string,\n>(glue: Glue): (data: T) => Join;\n\nexport function join(...args: readonly unknown[]): unknown {\n return purry(joinImplementation, args);\n}\n\nconst joinImplementation = (data: readonly unknown[], glue: string): string =>\n data.join(glue);\n", "import type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { ToString } from \"./internal/types/ToString\";\nimport { purry } from \"./purry\";\n\ntype Keys = T extends IterableContainer ? ArrayKeys : ObjectKeys;\n\n// The keys output can mirror the input when it is an array/tuple. We do this by\n// \"mapping\" each item \"key\" (which is actually an index) as its own value. This\n// would maintain the shape, even including labels.\ntype ArrayKeys = {\n -readonly [Index in keyof T]: Index extends number | string\n ? // Notice that we coalesce the values as strings, this is because in JS,\n // Object.keys always returns strings, even for arrays.\n ToString extends true ? number : Index>\n : // Index is typed as a symbol, this can't happen, but we need to guard\n // against it for typescript.\n never;\n};\n\ntype IsIndexAfterSpread<\n T extends IterableContainer,\n Index extends number | string,\n> =\n IndicesAfterSpread extends never\n ? false\n : Index extends `${IndicesAfterSpread}`\n ? true\n : false;\n\n// Find the index of the tuple where a spread item is located, and return all\n// indices in the tuple which are located after it. The tuple could be prefixed\n// by any number of literal items. If the input is a simple array it would\n// return 0 (as expected), and if the tuple doesn't contain a spread element it\n// would return never.\ntype IndicesAfterSpread<\n T extends readonly unknown[] | [],\n // We use this type to count how many items we consumed, it's just a pseudo-\n // element that is used for its length.\n Iterations extends readonly unknown[] = [],\n> = T[number] extends never\n ? never\n : T extends readonly [unknown, ...infer Tail]\n ? IndicesAfterSpread\n : T extends readonly [...infer Head, unknown]\n ?\n | IndicesAfterSpread\n | Iterations[\"length\"]\n : Iterations[\"length\"];\n\ntype ObjectKeys =\n T extends Record ? [] : EnumerableStringKeyOf[];\n\n/**\n * Returns a new array containing the keys of the array or object.\n *\n * @param data - Either an array or an object.\n * @signature\n * keys(source)\n * @example\n * keys(['x', 'y', 'z']); // => ['0', '1', '2']\n * keys({ a: 'x', b: 'y', 5: 'z' }); // => ['a', 'b', '5']\n * @dataFirst\n * @category Object\n */\nexport function keys(data: T): Keys;\n\n/**\n * Returns a new array containing the keys of the array or object.\n *\n * @signature\n * keys()(source)\n * @example\n * pipe(['x', 'y', 'z'], keys()); // => ['0', '1', '2']\n * pipe({ a: 'x', b: 'y', 5: 'z' } as const, keys()) // => ['a', 'b', '5']\n * @dataLast\n * @category Object\n */\nexport function keys(): (data: T) => Keys;\n\nexport function keys(...args: readonly unknown[]): unknown {\n return purry(Object.keys, args);\n}\n", "import type { LastArrayElement } from \"type-fest\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Last = LastArrayElement<\n T,\n // Type-fest's LastArrayElement assumes a looser typescript configuration\n // where `noUncheckedIndexedAccess` is disabled. To support the stricter\n // configuration we assume we need to assign the \"LastArrayElement\" param to\n // `undefined`, but only if the array isn't empty.\n T extends readonly [] ? never : undefined\n>;\n\n/**\n * Gets the last element of `array`.\n *\n * @param data - The array.\n * @signature\n * last(array)\n * @example\n * last([1, 2, 3]) // => 3\n * last([]) // => undefined\n * @dataFirst\n * @category Array\n */\nexport function last(data: T): Last;\n\n/**\n * Gets the last element of `array`.\n *\n * @signature\n * last()(array)\n * @example\n * pipe(\n * [1, 2, 4, 8, 16],\n * filter(x => x > 3),\n * last(),\n * x => x + 1\n * ); // => 17\n * @dataLast\n * @category Array\n */\nexport function last(): (data: T) => Last;\n\nexport function last(...args: readonly unknown[]): unknown {\n return purry(lastImplementation, args);\n}\n\nconst lastImplementation = (array: readonly T[]): T | undefined =>\n array.at(-1);\n", "import { purry } from \"./purry\";\n\ntype Enumerable = ArrayLike | Iterable;\n\n/**\n * Counts values of the collection or iterable.\n *\n * @param items - The input data.\n * @signature\n * length(array)\n * @example\n * length([1, 2, 3]) // => 3\n * @dataFirst\n * @category Array\n */\nexport function length(items: Enumerable): number;\n\n/**\n * Counts values of the collection or iterable.\n *\n * @signature\n * length()(array)\n * @example\n * pipe([1, 2, 3], length()) // => 3\n * @dataLast\n * @category Array\n */\nexport function length(): (items: Enumerable) => number;\n\nexport function length(...args: readonly unknown[]): unknown {\n return purry(lengthImplementation, args);\n}\n\nconst lengthImplementation = (items: Enumerable): number =>\n \"length\" in items ? items.length : [...items].length;\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport type { Mapped } from \"./internal/types/Mapped\";\nimport { purry } from \"./purry\";\n\n/**\n * Creates a new array populated with the results of calling a provided function\n * on every element in the calling array. Equivalent to `Array.prototype.map`.\n *\n * @param data - The array to map.\n * @param callbackfn - A function to execute for each element in the array. Its\n * return value is added as a single element in the new array.\n * @returns A new array with each element being the result of the callback\n * function.\n * @signature\n * map(data, callbackfn)\n * @example\n * map([1, 2, 3], multiply(2)); // => [2, 4, 6]\n * map([0, 0], add(1)); // => [1, 1]\n * map([0, 0], (value, index) => value + index); // => [0, 1]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function map(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => U,\n): Mapped;\n\n/**\n * Creates a new array populated with the results of calling a provided function\n * on every element in the calling array. Equivalent to `Array.prototype.map`.\n *\n * @param callbackfn - A function to execute for each element in the array. Its\n * return value is added as a single element in the new array.\n * @returns A new array with each element being the result of the callback\n * function.\n * @signature\n * map(callbackfn)(data)\n * @example\n * pipe([1, 2, 3], map(multiply(2))); // => [2, 4, 6]\n * pipe([0, 0], map(add(1))); // => [1, 1]\n * pipe([0, 0], map((value, index) => value + index)); // => [0, 1]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function map(\n callbackfn: (value: T[number], index: number, data: T) => U,\n): (data: T) => Mapped;\n\nexport function map(...args: readonly unknown[]): unknown {\n return purry(mapImplementation, args, lazyImplementation);\n}\n\nconst mapImplementation = (\n data: readonly T[],\n callbackfn: (value: T, index: number, data: readonly T[]) => U,\n): U[] => data.map(callbackfn);\n\nconst lazyImplementation =\n (\n callbackfn: (value: T, index: number, data: readonly T[]) => U,\n ): LazyEvaluator =>\n (value, index, data) => ({\n done: false,\n hasNext: true,\n next: callbackfn(value, index, data),\n });\n", "/* eslint-disable @typescript-eslint/no-empty-object-type --\n * We want to match the typing of the built-in Object.entries as much as\n * possible!\n */\n\nimport type { And, IsUnion, Or } from \"type-fest\";\nimport type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { IsBounded } from \"./internal/types/IsBounded\";\nimport { purry } from \"./purry\";\n\ntype MappedKeys = MaybePartial<\n T,\n Key,\n // We re-key `T` using `Key`, but because we can't infer at the type level\n // how the mapper would map each specific input key we assign all props the\n // same value, made of all possible values of `T`.\n Record>\n>;\n\n/**\n * This type is very similar to `BoundedPartial` simplified to the case where\n * we reconstruct the Record using a known `Key` type.\n *\n * @see BoundedPartial\n */\ntype MaybePartial =\n And, Or, CouldBeEmpty>> extends true\n ? // When keys are bounded we need to consider what assurances we can make\n // about the presence of keys in the output; mainly if there is more than\n // one possible result from the mapper (so we can't know what it would\n // return for a specific input, at the type level), or if object itself\n // might be empty and thus also the output object.\n Partial\n : // If keys are not bounded TypeScript treats the Record as implicitly\n // Partial so we don't need to do that here.\n Output;\n\n/**\n * Types that are extendable by `{}` are also satisfied by an empty object and\n * thus _could be empty_.\n */\ntype CouldBeEmpty = {} extends T ? true : false;\n\n/**\n * Maps keys of `object` and keeps the same values.\n *\n * @param data - The object to map.\n * @param keyMapper - The mapping function.\n * @signature\n * mapKeys(object, fn)\n * @example\n * mapKeys({a: 1, b: 2}, (key, value) => key + value) // => { a1: 1, b2: 2 }\n * @dataFirst\n * @category Object\n */\nexport function mapKeys(\n data: T,\n keyMapper: (\n key: EnumerableStringKeyOf,\n value: EnumerableStringKeyedValueOf,\n data: T,\n ) => Key,\n): MappedKeys;\n\n/**\n * Maps keys of `object` and keeps the same values.\n *\n * @param keyMapper - The mapping function.\n * @signature\n * mapKeys(fn)(object)\n * @example\n * pipe({a: 1, b: 2}, mapKeys((key, value) => key + value)) // => { a1: 1, b2: 2 }\n * @dataLast\n * @category Object\n */\nexport function mapKeys(\n keyMapper: (\n key: EnumerableStringKeyOf,\n value: EnumerableStringKeyedValueOf,\n data: T,\n ) => Key,\n): (data: T) => MappedKeys;\n\nexport function mapKeys(...args: readonly unknown[]): unknown {\n return purry(mapKeysImplementation, args);\n}\n\nfunction mapKeysImplementation(\n data: T,\n keyMapper: (key: string, value: unknown, data: T) => Key,\n): Partial> {\n const out: Partial> = {};\n\n for (const [key, value] of Object.entries(data)) {\n const mappedKey = keyMapper(key, value, data);\n out[mappedKey] = value;\n }\n\n return out;\n}\n", "import { purry } from \"./purry\";\n\n// TODO [>2]: Once we allow fromEntries to run lazily on iterables we need to remove this utility as it's completely replaceable by `fromEntries(map(...))`.\n/**\n * Map each element of an array into an object using a defined mapper that\n * converts each item into an object entry (a tuple of `[, ]`).\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * - `fromKeys` - Builds an object from an array of *keys* and a mapper for\n * values.\n * - `indexBy` - Builds an object from an array of *values* and a mapper for\n * keys.\n * - `pullObject` - Builds an object from an array of items with a mapper for\n * values and another mapper for keys.\n * - `fromEntries` - Builds an object from an array of key-value pairs.\n *\n * **Warning**: We strongly advise against using this function unless it is\n * used with a huge input array and your app has stringent memory/gc\n * constraints. We recommend that in most cases you should use `pullObject`,\n * or the composition `fromEntries(map(array, fn))`. This function will be\n * deprecated and **removed** in future versions of the library!\n *\n * @param array - The array to map.\n * @param fn - The mapping function, which should return a tuple of [key, value], similar to Object.fromEntries.\n * @returns The new mapped object.\n * @signature\n * mapToObj(array, fn)\n * @example\n * mapToObj([1, 2, 3], x => [String(x), x * 2]) // => {1: 2, 2: 4, 3: 6}\n * @dataFirst\n * @category Array\n */\nexport function mapToObj(\n array: readonly T[],\n fn: (value: T, index: number, data: readonly T[]) => [K, V],\n): Record;\n\n// TODO [>2]: Once we allow fromEntries to run lazily on iterables we need to remove this utility as it's completely replaceable by `fromEntries(map(...))`.\n/**\n * Map each element of an array into an object using a defined mapper that\n * converts each item into an object entry (a tuple of `[, ]`).\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * - `fromKeys` - Builds an object from an array of *keys* and a mapper for\n * values.\n * - `indexBy` - Builds an object from an array of *values* and a mapper for\n * keys.\n * - `pullObject` - Builds an object from an array of items with a mapper for\n * values and another mapper for keys.\n * - `fromEntries` - Builds an object from an array of key-value pairs.\n *\n * **Warning**: We strongly advise against using this function unless it is\n * used with a huge input array and your app has stringent memory/gc\n * constraints. We recommend that in most cases you should use `pullObject`,\n * or the composition `fromEntries(map(array, fn))`. This function will be\n * deprecated and **removed** in future versions of the library!\n *\n * @param fn - The mapping function, which should return a tuple of [key, value], similar to Object.fromEntries.\n * @returns The new mapped object.\n * @signature\n * mapToObj(fn)(array)\n * @example\n * pipe(\n * [1, 2, 3],\n * mapToObj(x => [String(x), x * 2])\n * ) // => {1: 2, 2: 4, 3: 6}\n * @dataLast\n * @category Array\n */\nexport function mapToObj(\n fn: (value: T, index: number, data: readonly T[]) => [K, V],\n): (array: readonly T[]) => Record;\n\nexport function mapToObj(...args: readonly unknown[]): unknown {\n return purry(mapToObjImplementation, args);\n}\n\nfunction mapToObjImplementation(\n array: readonly unknown[],\n fn: (\n value: unknown,\n index: number,\n data: readonly unknown[],\n ) => [PropertyKey, unknown],\n): Record {\n const out: Record = {};\n\n for (const [index, element] of array.entries()) {\n const [key, value] = fn(element, index, array);\n out[key] = value;\n }\n\n return out;\n}\n", "import type { Simplify } from \"type-fest\";\nimport type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport { purry } from \"./purry\";\n\ntype MappedValues = Simplify<{\n -readonly [P in keyof T as P extends number | string ? P : never]: Value;\n}>;\n\n/**\n * Maps values of `object` and keeps the same keys. Symbol keys are not passed\n * to the mapper and will be removed from the output object.\n *\n * To also copy the symbol keys to the output use merge:\n * `merge(data, mapValues(data, mapper))`).\n *\n * @param data - The object to map.\n * @param valueMapper - The mapping function.\n * @signature\n * mapValues(data, mapper)\n * @example\n * mapValues({a: 1, b: 2}, (value, key) => value + key) // => {a: '1a', b: '2b'}\n * @dataFirst\n * @category Object\n */\nexport function mapValues(\n data: T,\n valueMapper: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => Value,\n): MappedValues;\n\n/**\n * Maps values of `object` and keeps the same keys. Symbol keys are not passed\n * to the mapper and will be removed from the output object.\n *\n * To also copy the symbol keys to the output use merge:\n * `merge(data, mapValues(data, mapper))`).\n *\n * @param valueMapper - The mapping function.\n * @signature\n * mapValues(mapper)(data)\n * @example\n * pipe({a: 1, b: 2}, mapValues((value, key) => value + key)) // => {a: '1a', b: '2b'}\n * @dataLast\n * @category Object\n */\nexport function mapValues(\n valueMapper: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => Value,\n): (data: T) => MappedValues;\n\nexport function mapValues(...args: readonly unknown[]): unknown {\n return purry(mapValuesImplementation, args);\n}\n\nfunction mapValuesImplementation(\n data: T,\n valueMapper: (value: unknown, key: string, data: T) => Value,\n): Record {\n const out: Record = {};\n\n for (const [key, value] of Object.entries(data)) {\n const mappedValue = valueMapper(value, key, data);\n out[key] = mappedValue;\n }\n\n return out;\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport type { Mapped } from \"./internal/types/Mapped\";\n\n/**\n * Applies a function on each element of the array, using the result of the\n * previous application, and returns an array of the successively computed\n * values.\n *\n * @param data - The array to map over.\n * @param callbackfn - The callback function that receives the previous value,\n * the current element.\n * @param initialValue - The initial value to start the computation with.\n * @returns An array of successively computed values from the left side of the\n * array.\n * @signature\n * mapWithFeedback(data, callbackfn, initialValue);\n * @example\n * mapWithFeedback(\n * [1, 2, 3, 4, 5],\n * (prev, x) => prev + x,\n * 100,\n * ); // => [101, 103, 106, 110, 115]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function mapWithFeedback(\n data: T,\n callbackfn: (\n previousValue: U,\n currentValue: T[number],\n currentIndex: number,\n data: T,\n ) => U,\n initialValue: U,\n): Mapped;\n\n/**\n * Applies a function on each element of the array, using the result of the\n * previous application, and returns an array of the successively computed\n * values.\n *\n * @param callbackfn - The callback function that receives the previous value,\n * the current element.\n * @param initialValue - The initial value to start the computation with.\n * @returns An array of successively computed values from the left side of the\n * array.\n * @signature\n * mapWithFeedback(callbackfn, initialValue)(data);\n * @example\n * pipe(\n * [1, 2, 3, 4, 5],\n * mapWithFeedback((prev, x) => prev + x, 100),\n * ); // => [101, 103, 106, 110, 115]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function mapWithFeedback(\n callbackfn: (\n previousValue: U,\n currentValue: T[number],\n currentIndex: number,\n data: T,\n ) => U,\n initialValue: U,\n): (data: T) => Mapped;\n\nexport function mapWithFeedback(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nconst lazyImplementation = (\n reducer: (\n previousValue: U,\n currentValue: T,\n index: number,\n data: readonly T[],\n ) => U,\n initialValue: U,\n): LazyEvaluator => {\n let previousValue = initialValue;\n return (currentValue, index, data) => {\n previousValue = reducer(previousValue, currentValue, index, data);\n return { done: false, hasNext: true, next: previousValue };\n };\n};\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Sum | IterableContainer> =\n // Empty arrays would always result in a sum of (a non-bigint) 0.\n T extends readonly []\n ? 0\n : // Non-empty bigint arrays will always result in a bigint sum.\n T extends readonly [bigint, ...(readonly unknown[])]\n ? bigint\n : // But an empty bigint array would result in a non-bigint 0.\n T[number] extends bigint\n ? bigint | 0\n : // Non-bigint arrays are always handled correctly.\n number;\n\n/**\n * Sums the numbers in the array, or return 0 for an empty array.\n *\n * Works for both `number` and `bigint` arrays, but not arrays that contain both\n * types.\n *\n * IMPORTANT: The result for empty arrays would be 0 (`number`) regardless of\n * the type of the array; to avoid adding this to the return type for cases\n * where the array is known to be non-empty you can use `hasAtLeast` or\n * `isEmpty` to guard against this case.\n *\n * @param data - The array of numbers.\n * @signature\n * sum(data);\n * @example\n * sum([1, 2, 3]); // => 6\n * sum([1n, 2n, 3n]); // => 6n\n * sum([]); // => 0\n * @dataFirst\n * @category Number\n */\nexport function sum<\n T extends IterableContainer | IterableContainer,\n>(data: T): Sum;\n\n/**\n * Sums the numbers in the array, or return 0 for an empty array.\n *\n * Works for both `number` and `bigint` arrays, but not arrays that contain both\n * types.\n *\n * IMPORTANT: The result for empty arrays would be 0 (`number`) regardless of\n * the type of the array; to avoid adding this to the return type for cases\n * where the array is known to be non-empty you can use `hasAtLeast` or\n * `isEmpty`to guard against this case.\n *\n * @signature\n * sum()(data);\n * @example\n * pipe([1, 2, 3], sum()); // => 6\n * pipe([1n, 2n, 3n], sum()); // => 6n\n * pipe([], sum()); // => 0\n * @dataLast\n * @category Number\n */\nexport function sum(): <\n T extends IterableContainer | IterableContainer,\n>(\n data: T,\n) => Sum;\n\nexport function sum(...args: readonly unknown[]): unknown {\n return purry(sumImplementation, args);\n}\n\nfunction sumImplementation<\n T extends IterableContainer | IterableContainer,\n>(data: T): T[number] {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- The rule differentiates 0 and 0n :(\n let out = typeof data[0] === \"bigint\" ? 0n : 0;\n for (const value of data) {\n // @ts-expect-error [ts2365] -- Typescript can't infer that all elements will be a number of the same type.\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n out += value;\n }\n return out;\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\nimport { sum } from \"./sum\";\n\ntype Mean> =\n | (T extends readonly [] ? never : number)\n | (T extends readonly [unknown, ...unknown[]] ? never : undefined);\n\n/**\n * Returns the mean of the elements of an array.\n *\n * Only `number` arrays are supported, as `bigint` is unable to represent fractional values.\n *\n * IMPORTANT: The result for empty arrays would be `undefined`, regardless of\n * the type of the array. This approach improves type-checking and ensures that\n * cases where `NaN` might occur are handled properly. To avoid adding this to\n * the return type for cases where the array is known to be non-empty you can use\n * `hasAtLeast` or `isEmpty` to guard against this case.\n *\n * @param data - The array of numbers.\n * @signature\n * mean(data);\n * @example\n * mean([1, 2, 3]); // => 2\n * mean([]); // => undefined\n * @dataFirst\n * @category Number\n */\nexport function mean>(data: T): Mean;\n\n/**\n * Returns the mean of the elements of an array.\n *\n * Only `number` arrays are supported, as `bigint` is unable to represent fractional values.\n *\n * IMPORTANT: The result for empty arrays would be `undefined`, regardless of\n * the type of the array. This approach improves type-checking and ensures that\n * cases where `NaN` might occur are handled properly. To avoid adding this to\n * the return type for cases where the array is known to be non-empty you can use\n * `hasAtLeast` or `isEmpty` to guard against this case.\n *\n * @signature\n * mean()(data);\n * @example\n * pipe([1, 2, 3], mean()); // => 2\n * pipe([], mean()); // => undefined\n * @dataLast\n * @category Number\n */\nexport function mean(): >(\n data: T,\n) => Mean;\n\nexport function mean(...args: readonly unknown[]): unknown {\n return purry(meanImplementation, args);\n}\n\nfunction meanImplementation>(\n data: T,\n): T[number] | undefined {\n if (data.length === 0) {\n return undefined;\n }\n\n return sum(data) / data.length;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Returns the mean of the elements of an array using the provided predicate.\n *\n * @param fn - Predicate function.\n * @signature\n * meanBy(fn)(array)\n * @example\n * pipe(\n * [{a: 5}, {a: 1}, {a: 3}],\n * meanBy(x => x.a)\n * ) // 3\n * @dataLast\n * @category Array\n */\n\nexport function meanBy(\n fn: (value: T, index: number, data: readonly T[]) => number,\n): (items: readonly T[]) => number;\n\n/**\n * Returns the mean of the elements of an array using the provided predicate.\n *\n * @param items - The array.\n * @param fn - Predicate function.\n * @signature\n * meanBy(array, fn)\n * @example\n * meanBy(\n * [{a: 5}, {a: 1}, {a: 3}],\n * x => x.a\n * ) // 3\n * @dataFirst\n * @category Array\n */\n\nexport function meanBy(\n items: readonly T[],\n fn: (value: T, index: number, data: readonly T[]) => number,\n): number;\n\nexport function meanBy(...args: readonly unknown[]): unknown {\n return purry(meanByImplementation, args);\n}\n\nconst meanByImplementation = (\n array: readonly T[],\n fn: (value: T, index: number, data: readonly T[]) => number,\n): number => {\n if (array.length === 0) {\n return Number.NaN;\n }\n\n let sum = 0;\n\n for (const [index, item] of array.entries()) {\n sum += fn(item, index, array);\n }\n\n return sum / array.length;\n};\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Median> =\n | (T extends readonly [] ? never : number)\n | (T extends readonly [unknown, ...unknown[]] ? never : undefined);\n\n/**\n * Returns the median of the elements of an array.\n *\n * Only `number` arrays are supported, as `bigint` is unable to represent fractional values.\n *\n * IMPORTANT: The result for empty arrays would be `undefined`, regardless of\n * the type of the array. This approach improves type-checking and ensures that\n * cases where `NaN` might occur are handled properly. To avoid adding this to\n * the return type for cases where the array is known to be non-empty you can use\n * `hasAtLeast` or `isEmpty` to guard against this case.\n *\n * @param data - The array of numbers.\n * @signature\n * median(data);\n * @example\n * pipe([6, 10, 11], median()); // => 10\n * median([]); // => undefined\n * @dataFirst\n * @category Number\n */\nexport function median>(data: T): Median;\n\n/**\n * Returns the median of the elements of an array.\n *\n * Only `number` arrays are supported, as `bigint` is unable to represent fractional values.\n *\n * IMPORTANT: The result for empty arrays would be `undefined`, regardless of\n * the type of the array. This approach improves type-checking and ensures that\n * cases where `NaN` might occur are handled properly. To avoid adding this to\n * the return type for cases where the array is known to be non-empty you can use\n * `hasAtLeast` or `isEmpty` to guard against this case.\n *\n * @signature\n * median()(data);\n * @example\n * pipe([6, 10, 11], median()); // => 10\n * pipe([], median()); // => undefined\n * @dataLast\n * @category Number\n */\nexport function median(): >(\n data: T,\n) => Median;\n\nexport function median(...args: readonly unknown[]): unknown {\n return purry(medianImplementation, args);\n}\n\nconst numberComparator = (a: number, b: number): number => a - b;\n\nfunction medianImplementation>(\n data: T,\n): T[number] | undefined {\n if (data.length === 0) {\n return undefined;\n }\n\n // TODO [>2]: When node 18 reaches end-of-life bump target lib to ES2023+ and use `Array.prototype.toSorted` here.\n const sortedData = [...data].sort(numberComparator);\n\n // For odd length, return the middle element\n if (sortedData.length % 2 !== 0) {\n return sortedData[(sortedData.length - 1) / 2];\n }\n\n // For even length, return the mean of the two middle elements\n const middleIndex = sortedData.length / 2;\n\n return (sortedData[middleIndex]! + sortedData[middleIndex - 1]!) / 2;\n}\n", "import type { Merge } from \"type-fest\";\nimport { purry } from \"./purry\";\n\n/**\n * Merges two objects into one by combining their properties, effectively\n * creating a new object that incorporates elements from both. The merge\n * operation prioritizes the second object's properties, allowing them to\n * overwrite those from the first object with the same names.\n *\n * Equivalent to `{ ...data, ...source }`.\n *\n * @param data - The destination object, serving as the basis for the merge.\n * Properties from this object are included in the new object, but will be\n * overwritten by properties from the source object with matching keys.\n * @param source - The source object, whose properties will be included in the\n * new object. If properties in this object share keys with properties in the\n * destination object, the values from the source object will be used in the\n * new object.\n * @returns An object fully containing `source`, and any properties from `data`\n * that don't share a name with any property in `source`.\n * @signature\n * merge(data, source)\n * @example\n * merge({ x: 1, y: 2 }, { y: 10, z: 2 }) // => { x: 1, y: 10, z: 2 }\n * @dataFirst\n * @category Object\n */\nexport function merge(data: T, source: Source): Merge;\n\n/**\n * Merges two objects into one by combining their properties, effectively\n * creating a new object that incorporates elements from both. The merge\n * operation prioritizes the second object's properties, allowing them to\n * overwrite those from the first object with the same names.\n *\n * Equivalent to `{ ...data, ...source }`.\n *\n * @param source - The source object, whose properties will be included in the\n * new object. If properties in this object share keys with properties in the\n * destination object, the values from the source object will be used in the\n * new object.\n * @returns An object fully containing `source`, and any properties from `data`\n * that don't share a name with any property in `source`.\n * @signature\n * merge(source)(data)\n * @example\n * pipe(\n * { x: 1, y: 2 },\n * merge({ y: 10, z: 2 }),\n * ); // => { x: 1, y: 10, z: 2 }\n * @dataLast\n * @category Object\n */\nexport function merge(source: Source): (data: T) => Merge;\n\nexport function merge(...args: readonly unknown[]): unknown {\n return purry(mergeImplementation, args);\n}\n\nconst mergeImplementation = (\n data: T,\n source: Source,\n // @ts-expect-error [ts2322] - TypeScript is failing to infer that the result of spreading the two objects satisfies the more complex Merge type.\n): Merge => ({ ...data, ...source });\n", "import type {\n EmptyObject,\n Merge,\n SharedUnionFields,\n Simplify,\n} from \"type-fest\";\nimport type { DisjointUnionFields } from \"./internal/types/DisjointUnionFields\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\n\n/**\n * Merge a tuple of object types, where props from later objects override earlier props.\n */\ntype MergeTuple<\n T extends IterableContainer,\n Result = object, // no-op for the first iteration in the successive merges, also infers object as type by default if an empty tuple is used\n> = T extends readonly [infer Head, ...infer Rest]\n ? MergeTuple>\n : Result;\n\n// In the context of a heterogeneous array, the array may not have objects from every type of the union.\n// This means some fields may be missing in the final object, so we make them optional.\n// If there is a non-optional field shared among all members of the union, then we know that if the array is not empty, the field must be present and avoid becoming optional.\n// If the field is already optional, this doesn't really matter.\n// If the array is empty, we know that the loop won't run so we'll just get the empty object.\n// Since we don't know the order of the items in the array, when we merge common fields, we don't know what the final type for the field will be, but we do know that it is one of the many possible types that are available across the members of the union for that field.\n// We represent these possibilities by combining the field's different types across the union members into a union.\ntype MergeUnion = Simplify<\n SharedUnionFields & Partial>\n>;\n\ntype MergeAll> =\n // determine if it's a tuple or array\n TupleParts extends { item: never }\n ? T extends readonly []\n ? EmptyObject\n : MergeTuple\n : MergeUnion | EmptyObject;\n\n/**\n * Merges a list of objects into a single object.\n *\n * @param objects - The array of objects.\n * @returns A new object merged with all of the objects in the list. If the list is empty, an empty object is returned.\n * @signature\n * mergeAll(objects)\n * @example\n * mergeAll([{ a: 1, b: 1 }, { b: 2, c: 3 }, { d: 10 }]) // => { a: 1, b: 2, c: 3, d: 10 }\n * mergeAll([]) // => {}\n * @dataFirst\n * @category Array\n */\nexport function mergeAll(\n objects: Readonly>,\n): MergeUnion;\nexport function mergeAll>(\n objects: T,\n): MergeAll;\nexport function mergeAll(objects: readonly object[]): object {\n let out = {};\n\n for (const item of objects) {\n out = { ...out, ...item };\n }\n\n return out;\n}\n", "import type { MergeDeep } from \"type-fest\";\nimport { isPlainObject } from \"./isPlainObject\";\nimport { purry } from \"./purry\";\n\n/**\n * Merges the `source` object into the `destination` object. The merge is similar to performing `{ ...destination, ... source }` (where disjoint values from each object would be copied as-is, and for any overlapping props the value from `source` would be used); But for *each prop* (`p`), if **both** `destination` and `source` have a **plain-object** as a value, the value would be taken as the result of recursively deepMerging them (`result.p === deepMerge(destination.p, source.p)`).\n *\n * @param destination - The object to merge into. In general, this object would have it's values overridden.\n * @param source - The object to merge from. In general, shared keys would be taken from this object.\n * @returns The merged object.\n * @signature\n * mergeDeep(destination, source)\n * @example\n * mergeDeep({ foo: 'bar', x: 1 }, { foo: 'baz', y: 2 }) // => { foo: 'baz', x: 1, y: 2 }\n * @dataFirst\n * @category Object\n */\nexport function mergeDeep(\n destination: Destination,\n source: Source,\n): MergeDeep;\n\n/**\n * Merges the `source` object into the `destination` object. The merge is similar to performing `{ ...destination, ... source }` (where disjoint values from each object would be copied as-is, and for any overlapping props the value from `source` would be used); But for *each prop* (`p`), if **both** `destination` and `source` have a **plain-object** as a value, the value would be taken as the result of recursively deepMerging them (`result.p === deepMerge(destination.p, source.p)`).\n *\n * @param source - The object to merge from. In general, shared keys would be taken from this object.\n * @returns The merged object.\n * @signature\n * mergeDeep(source)(destination)\n * @example\n * pipe(\n * { foo: 'bar', x: 1 },\n * mergeDeep({ foo: 'baz', y: 2 }),\n * ); // => { foo: 'baz', x: 1, y: 2 }\n * @dataLast\n * @category Object\n */\nexport function mergeDeep(\n source: Source,\n): (\n target: Destination,\n) => MergeDeep;\n\nexport function mergeDeep(...args: readonly unknown[]): unknown {\n return purry(mergeDeepImplementation, args);\n}\n\nfunction mergeDeepImplementation<\n Destination extends object,\n Source extends object,\n>(destination: Destination, source: Source): MergeDeep {\n // At this point the output is already merged, simply not deeply merged.\n const output = { ...destination, ...source } as Record<\n keyof Destination | keyof Source,\n unknown\n >;\n\n // now just scan the output and look for values that should have been deep-\n // merged\n for (const key in source) {\n if (!(key in destination)) {\n // They don't share this key.\n continue;\n }\n\n const { [key]: destinationValue } = destination;\n if (!isPlainObject(destinationValue)) {\n // The value in destination is not a mergeable object so the value from\n // source (which was already copied in the shallow merge) would be used\n // as-is.\n continue;\n }\n\n const { [key]: sourceValue } = source;\n if (!isPlainObject(sourceValue)) {\n // The value in source is not a mergeable object either, so it will\n // override the object in destination.\n continue;\n }\n\n // Both destination and source have a mergeable object for this key, so we\n // recursively merge them.\n // @ts-expect-error [ts2590] - We build the output object iteratively, I don't think it's possible to improve the types here so that typescript infers this correctly.\n output[key] = mergeDeepImplementation(destinationValue, sourceValue);\n }\n\n // @ts-expect-error [ts2322] - We build the output object iteratively, I don't think it's possible to improve the types here so that typescript infers this correctly.\n return output;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Multiplies two numbers.\n *\n * @param value - The number.\n * @param multiplicand - The number to multiply the value by.\n * @signature\n * multiply(value, multiplicand);\n * @example\n * multiply(3, 4) // => 12\n * reduce([1, 2, 3, 4], multiply, 1) // => 24\n * @dataFirst\n * @category Number\n */\nexport function multiply(value: bigint, multiplicand: bigint): bigint;\nexport function multiply(value: number, multiplicand: number): number;\n\n/**\n * Multiplies two numbers.\n *\n * @param multiplicand - The number to multiply the value by.\n * @signature\n * multiply(multiplicand)(value);\n * @example\n * multiply(4)(3) // => 12\n * map([1, 2, 3, 4], multiply(2)) // => [2, 4, 6, 8]\n * @dataLast\n * @category Number\n */\nexport function multiply(multiplicand: bigint): (value: bigint) => bigint;\nexport function multiply(multiplicand: number): (value: number) => number;\n\nexport function multiply(...args: readonly unknown[]): unknown {\n return purry(multiplyImplementation, args);\n}\n\n// The implementation only uses `number` types, but that's just because it's\n// hard to tell typescript that both value and multiplicand would be of the same\n// type.\nconst multiplyImplementation = (value: number, multiplicand: number): number =>\n value * multiplicand;\n", "/**\n * A simple implementation of the *QuickSelect* algorithm.\n *\n * @see https://en.wikipedia.org/wiki/Quickselect\n */\n\nimport { swapInPlace } from \"./swapInPlace\";\nimport type { CompareFunction } from \"./types/CompareFunction\";\n\n/**\n * Perform QuickSelect on the given data. Notice that the data would be cloned\n * shallowly so that it could be mutated in-place, and then discarded once the\n * algorithm is done. This means that running this function multiple times on\n * the same array might be slower then sorting the array before.\n *\n * @param data - The data to perform the selection on.\n * @param index - The index of the item we are looking for.\n * @param compareFn - The compare function to use for sorting.\n * @returns The item at the given index, or `undefined` if the index is out-of-\n * bounds.\n */\nexport const quickSelect = (\n data: readonly T[],\n index: number,\n compareFn: CompareFunction,\n): T | undefined =>\n index < 0 || index >= data.length\n ? // Quickselect doesn't work with out-of-bound indices\n undefined\n : quickSelectImplementation(\n // We need to clone the array because quickSelect mutates it in-place.\n [...data],\n 0 /* left */,\n data.length - 1 /* right */,\n index,\n compareFn,\n );\n\n/**\n * The actual implementation, called recursively.\n */\nfunction quickSelectImplementation(\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentional!\n data: T[],\n left: number,\n right: number,\n index: number,\n compareFn: CompareFunction,\n): T {\n if (left === right) {\n return data[left]!;\n }\n\n const pivotIndex = partition(data, left, right, compareFn);\n\n return index === pivotIndex\n ? // Once a pivot is chosen it's location is final, so if it matches the\n // index we found out item!\n data[index]!\n : quickSelectImplementation(\n data,\n // We continue by recursing into the partition where index would be\n index < pivotIndex ? left : pivotIndex + 1,\n index < pivotIndex ? pivotIndex - 1 : right,\n index,\n compareFn,\n );\n}\n\nfunction partition(\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- Intentional!\n data: T[],\n left: number,\n right: number,\n compareFn: CompareFunction,\n): number {\n const pivot = data[right]!;\n\n let i = left;\n for (let j = left; j < right; j++) {\n if (compareFn(data[j]!, pivot) < 0) {\n // Move items smaller then the pivot to the start of the array.\n swapInPlace(data, i, j);\n i += 1;\n }\n }\n\n swapInPlace(data, i, right);\n\n // The location of the pivot by the end of the partition function.\n return i;\n}\n", "import {\n purryOrderRulesWithArgument,\n type OrderRule,\n} from \"./internal/purryOrderRules\";\nimport { quickSelect } from \"./internal/quickSelect\";\nimport type { CompareFunction } from \"./internal/types/CompareFunction\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\n\n/**\n * Retrieves the element that would be at the given index if the array were sorted according to specified rules. This function uses the *QuickSelect* algorithm running at an average complexity of *O(n)*. Semantically it is equivalent to `sortBy(data, ...rules).at(index)` which would run at *O(nlogn)*.\n *\n * See also `firstBy` which provides an even more efficient algorithm and a stricter return type, but only for `index === 0`. See `takeFirstBy` to get all the elements up to and including `index`.\n *\n * @param data - The input array.\n * @param index - The zero-based index for selecting the element in the sorted order. Negative indices count backwards from the end.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The element at the specified index in the sorted order, or `undefined` if the index is out of bounds.\n * @signature\n * nthBy(data, index, ...rules);\n * @example\n * nthBy([2,1,4,5,3,], 2, identity()); // => 3\n * @dataFirst\n * @category Array\n */\nexport function nthBy(\n data: T,\n index: number,\n ...rules: Readonly>>\n): T[number] | undefined;\n\n/**\n * Retrieves the element that would be at the given index if the array were sorted according to specified rules. This function uses the *QuickSelect* algorithm running at an average complexity of *O(n)*. Semantically it is equivalent to `sortBy(data, ...rules)[index]` which would run at *O(nlogn)*.\n *\n * See also `firstBy` which provides an even more efficient algorithm and a stricter return type, but only for `index === 0`. See `takeFirstBy` to get all the elements up to and including `index`.\n *\n * @param index - The zero-based index for selecting the element in the sorted order. Negative indices count backwards from the end.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The element at the specified index in the sorted order, or `undefined` if the index is out of bounds.\n * @signature\n * nthBy(index, ...rules)(data);\n * @example\n * pipe([2,1,4,5,3,], nthBy(2, identity())); // => 3\n * @dataLast\n * @category Array\n */\nexport function nthBy(\n index: number,\n ...rules: Readonly>>\n): (data: T) => T[number] | undefined;\n\nexport function nthBy(...args: readonly unknown[]): unknown {\n return purryOrderRulesWithArgument(nthByImplementation, args);\n}\n\nconst nthByImplementation = (\n data: readonly T[],\n compareFn: CompareFunction,\n index: number,\n): T | undefined =>\n quickSelect(\n data,\n // Allow negative indices gracefully\n index >= 0 ? index : data.length + index,\n compareFn,\n );\n", "import { purry } from \"./purry\";\n\n/**\n * Creates an object containing a single `key:value` pair.\n *\n * @param value - The object value.\n * @param key - The property name.\n * @signature\n * objOf(value, key)\n * @example\n * objOf(10, 'a') // => { a: 10 }\n * @category Object\n */\nexport function objOf(value: T, key: K): Record;\n\n/**\n * Creates an object containing a single `key:value` pair.\n *\n * @param key - The property name.\n * @signature\n * objOf(key)(value)\n * @example\n * pipe(10, objOf('a')) // => { a: 10 }\n * @category Object\n */\nexport function objOf(key: K): (value: T) => Record;\n\nexport function objOf(...args: readonly unknown[]): unknown {\n return purry(objOfImplementation, args);\n}\n\nconst objOfImplementation = (\n value: T,\n key: K,\n): Record =>\n // @ts-expect-error [ts2322] - I'm not sure how to get the type right here...\n ({ [key]: value });\n", "import type { EmptyObject, IsNever, KeysOfUnion } from \"type-fest\";\nimport { hasAtLeast } from \"./hasAtLeast\";\nimport type { IsBounded } from \"./internal/types/IsBounded\";\nimport type { IsBoundedRecord } from \"./internal/types/IsBoundedRecord\";\nimport type { PartitionByUnion } from \"./internal/types/PartitionByUnion\";\nimport type { SimplifiedWritable } from \"./internal/types/SimplifiedWritable\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\nimport { purry } from \"./purry\";\n\ntype OmitFromArray =\n // Distribute unions for both object types and key arrays.\n T extends unknown\n ? Keys extends unknown\n ? // The output is always writable because we always create a new object!\n SimplifiedWritable<\n IsNever> extends true\n ? // When none of the keys belong to T we can short-circuit and\n // simply return T as-is because `omit` would do nothing.\n T\n : IsBoundedRecord extends true\n ? OmitBounded\n : OmitUnbounded\n >\n : never\n : never;\n\ntype OmitBounded =\n // We build our output by first considering any key present in the keys array\n // as being omitted. This object would contain all keys that are unaffected at\n // all by this omit operation.\n FixEmpty> &\n // But we might be missing keys that are optional in the keys tuple (and\n // thus might not be removed). Because these keys are optional, their props\n // in the output also need to be optional.\n Partial<\n Pick<\n T,\n Exclude<\n // Find all keys that can either be omitted or not, these are all keys\n // in unions in the required parts of the keys tuple (the prefix and\n // the suffix), as well as all keys in the optional parts and the rest\n // item.\n | PartitionByUnion[\"required\"]>[\"union\"]\n | TupleParts[\"optional\"][number]\n | TupleParts[\"item\"]\n | PartitionByUnion[\"suffix\"]>[\"union\"],\n // We then need to remove from these any items which *also* are\n // ensured to always exist in the keys tuple, these are the elements\n // of the required parts of the tuple which are singular (not unions).\n | PartitionByUnion[\"required\"]>[\"singular\"]\n | PartitionByUnion[\"suffix\"]>[\"singular\"]\n >\n >\n >;\n\n/**\n * The built-in `Omit` type doesn't handle unbounded records correctly! When\n * omitting an unbounded key the result should be untouched as we can't tell\n * what got removed, and can't represent an object that had \"something\" removed\n * from it, but instead it returns `{}`(?!) The same thing applies when a key\n * is only optionally omitted for the same reasons. This is why we don't use\n * `Omit` at all for the unbounded case.\n *\n * @see https://www.typescriptlang.org/play/?#code/C4TwDgpgBAqgdgIwPYFc4BMLqgXigeQFsBLYAHgCUIBjJAJ3TIGdg7i4BzAGigCIALCABshSXgD4eLNp3EBuAFAB6JVDUA9APxA\n */\ntype OmitUnbounded = T &\n // Any key we know for sure is being omitted needs to become \"impossible\" to\n // access; for an unbounded record this means merging it with a bounded record\n // with `never` value for these keys.\n Record<\n Bounded<\n | PartitionByUnion[\"required\"]>[\"singular\"]\n | PartitionByUnion[\"suffix\"]>[\"singular\"]\n >,\n never\n >;\n\n/**\n * When `Omit` omits **all** keys from a bounded record it results in `{}` which\n * doesn't match what we'd expect to be returned in terms of a useful type as\n * the output of `Omit`.\n */\ntype FixEmpty = IsNever extends true ? EmptyObject : T;\n\n/**\n * Filter a union of types, leaving only those that are bounded. e.g.,\n * `Bounded<\"a\" | number>` results in `\"a\"`.\n */\ntype Bounded = T extends unknown\n ? IsBounded extends true\n ? T\n : never\n : never;\n\n/**\n * Returns a partial copy of an object omitting the keys specified.\n *\n * @param keys - The property names.\n * @signature\n * omit(keys)(obj);\n * @example\n * pipe({ a: 1, b: 2, c: 3, d: 4 }, omit(['a', 'd'])) // => { b: 2, c: 3 }\n * @dataLast\n * @category Object\n */\nexport function omit[]>(\n keys: Keys,\n): (data: T) => OmitFromArray;\n\n/**\n * Returns a partial copy of an object omitting the keys specified.\n *\n * @param data - The object.\n * @param keys - The property names.\n * @signature\n * omit(obj, keys);\n * @example\n * omit({ a: 1, b: 2, c: 3, d: 4 }, ['a', 'd']) // => { b: 2, c: 3 }\n * @dataFirst\n * @category Object\n */\nexport function omit[]>(\n data: T,\n keys: Keys,\n): OmitFromArray;\n\nexport function omit(...args: readonly unknown[]): unknown {\n return purry(omitImplementation, args);\n}\n\nfunction omitImplementation<\n T extends object,\n Keys extends readonly (keyof T)[],\n>(data: T, keys: Keys): OmitFromArray {\n if (!hasAtLeast(keys, 1)) {\n // No props to omit at all!\n // @ts-expect-error [ts2322] - TypeScript can't connect the fact that the\n // keys array is empty and infer the expected output, and then infer that we\n // return it correctly here.\n return { ...data };\n }\n\n if (!hasAtLeast(keys, 2)) {\n // Only one prop to omit so we can let the runtime engine deal with\n // removing it efficiently.\n const { [keys[0]]: _omitted, ...remaining } = data;\n\n // @ts-expect-error [ts2322] - TypeScript can't compute the expected output\n // correctly and then infer that we return it correctly here.\n return remaining;\n }\n\n // Multiple props to omit so we have to use a loop to omit all of them.\n const out = { ...data };\n for (const key of keys) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- This is intentional! It is the most effective way to allow the runtime engine to optimize the object without creating excessive copies for every omitted key.\n delete out[key];\n }\n\n // @ts-expect-error [ts2322] - The type is too complex and TypeScript can't\n // \"follow\" the iterative algorithm to ensure the output makes sense.\n return out;\n}\n", "import type { IsNever, Or, Simplify } from \"type-fest\";\nimport type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport type { IsBoundedRecord } from \"./internal/types/IsBoundedRecord\";\nimport { purry } from \"./purry\";\n\n// Symbols are not passed to the predicate (because they can't be enumerated\n// with the `Object.entries` function) and the output object is built from a\n// shallow copy of the input; meaning symbols would just be passed through as-\n// is.\ntype PickSymbolKeys = {\n -readonly [P in keyof T as P extends symbol ? P : never]: T[P];\n};\n\n// When we don't use a type-predicate we can't say anything about what props\n// would be omitted from the output, so we need to assume any of them could be\n// filtered out. This means that we effectively make all (enumerable) keys\n// optional.\ntype PartialEnumerableKeys =\n // `extends unknown` is always going to be the case and is used to convert any\n // union into a [distributive conditional type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).\n T extends unknown\n ? Simplify<\n IsBoundedRecord extends true\n ? PickSymbolKeys & {\n -readonly [P in keyof T as P extends symbol\n ? never\n : P]?: Required[P];\n }\n : // This is the type you'd get from doing:\n // `Object.fromEntries(Object.entries(x))`.\n Record, EnumerableStringKeyedValueOf>\n >\n : never;\n\n// When the predicate is a type-guard we have more information to work with when\n// constructing the type of the output object. We can safely remove any property\n// which value would always be true for the predicate, AND we can also\n// assume that properties that are rejected by the predicate perfectly would\n// **always** show up in the output object. Hence to build the output object we\n// need to build and merge 2 output objects: One for the properties which have a\n// value of at type that would always yield a `false` result from the predicate,\n// these are the \"matches\", which would not change the \"optionality\" of the\n// input object's props, and one for partial matches which would also make the\n// props optional (as they could have a value that would be filtered out).\ntype PartialEnumerableKeysNarrowed = Simplify<\n ExactProps & PartialProps & PickSymbolKeys\n>;\n\n// The exact case, props here would always be part of the output object\ntype ExactProps = {\n -readonly [P in keyof T as IsExactProp extends true\n ? P\n : never]: Exclude;\n};\n\n// The partial case, props here might be part of the output object, but might\n// not be, hence they are optional.\ntype PartialProps = {\n -readonly [P in keyof T as IsPartialProp extends true\n ? P\n : never]?: Exclude;\n};\n\n// If the input object's value type extends itself when the type-guard is\n// excluded from it we can safely assume that the predicate would always return\n// `false` for any value of that property.\ntype IsExactProp = P extends symbol\n ? // Symbols are passed through via the PickSymbolKeys type\n false\n : T[P] extends Exclude\n ? S extends T[P]\n ? // If S extends the T[P] it means the type the predicate is narrowing to\n // can't narrow the rejected value any further, so we can't say what\n // would happen for a concrete value in runtime (e.g. if T[P] is\n // `number` and S is `1`: `Exclude === number`.\n false\n : true\n : false;\n\n// ...and if the input object's value type isn't an exact match, but still has\n// some partial match (i.g. the extracted type-guard isn't completely disjoint)\n// then we can assume that the property can sometimes return true, and sometimes\n// false when passed to the predicate, hence it should be optional in the\n// output.\ntype IsPartialProp = P extends symbol\n ? // Symbols are passed through via the PickSymbolKeys type\n false\n : Or, IsNever[P], S>>> extends true\n ? false\n : true;\n\n/**\n * Creates a shallow copy of the data, and then removes any keys that the\n * predicate rejects. Symbol keys are not passed to the predicate and would be\n * passed through to the output as-is.\n *\n * See `pickBy` for a complementary function which starts with an empty object\n * and adds the entries that the predicate accepts. Because it is additive,\n * symbol keys will not be passed through to the output object.\n *\n * @param data - The target object.\n * @param predicate - A function that takes the value, key, and the data itself\n * and returns `true` if the entry shouldn't be part of the output object, or\n * `false` to keep it. If the function is a type-guard on the value the output\n * type would be narrowed accordingly.\n * @returns A shallow copy of the input object with the rejected entries\n * removed.\n * @signature omitBy(data, predicate)\n * @example\n * omitBy({a: 1, b: 2, A: 3, B: 4}, (val, key) => key.toUpperCase() === key) // => {a: 1, b: 2}\n * @dataFirst\n * @category Object\n */\nexport function omitBy<\n T extends object,\n S extends EnumerableStringKeyedValueOf,\n>(\n data: T,\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => value is S,\n): PartialEnumerableKeysNarrowed;\nexport function omitBy(\n data: T,\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => boolean,\n): PartialEnumerableKeys;\n\n/**\n * Returns a partial copy of an object omitting the keys matching predicate.\n *\n * @param predicate - The predicate.\n * @signature omitBy(fn)(object)\n * @example\n * omitBy((val, key) => key.toUpperCase() === key)({a: 1, b: 2, A: 3, B: 4}) // => {a: 1, b: 2}\n * @dataLast\n * @category Object\n */\nexport function omitBy<\n T extends object,\n S extends EnumerableStringKeyedValueOf,\n>(\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => value is S,\n): (data: T) => PartialEnumerableKeysNarrowed;\nexport function omitBy(\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => boolean,\n): (data: T) => PartialEnumerableKeys;\n\nexport function omitBy(...args: readonly unknown[]): unknown {\n return purry(omitByImplementation, args);\n}\n\nfunction omitByImplementation(\n data: T,\n predicate: (value: unknown, key: string, data: T) => boolean,\n): Record {\n const out: Partial> = { ...data };\n\n for (const [key, value] of Object.entries(out)) {\n if (predicate(value, key, data)) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- This is the best way to do it!\n delete out[key];\n }\n }\n\n return out;\n}\n", "/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls to the function return the value of the first invocation.\n *\n * @param fn - The function to wrap.\n * @signature once(fn)\n * @example\n * const initialize = once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n * @category Function\n */\nexport function once(fn: () => T): () => T {\n let called = false;\n let ret: T;\n return () => {\n if (!called) {\n ret = fn();\n called = true;\n }\n return ret;\n };\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Only = T extends\n | readonly [...unknown[], unknown, unknown]\n | readonly []\n | readonly [unknown, ...unknown[], unknown]\n | readonly [unknown, unknown, ...unknown[]]\n ? undefined\n : T extends readonly [unknown]\n ? T[number]\n : T[number] | undefined;\n\n/**\n * Returns the first and only element of `array`, or undefined otherwise.\n *\n * @param array - The target array.\n * @signature\n * only(array)\n * @example\n * only([]) // => undefined\n * only([1]) // => 1\n * only([1, 2]) // => undefined\n * @dataFirst\n * @category Array\n */\nexport function only(array: Readonly): Only;\n\n/**\n * Returns the first and only element of `array`, or undefined otherwise.\n *\n * @signature\n * only()(array)\n * @example\n * pipe([], only()); // => undefined\n * pipe([1], only()); // => 1\n * pipe([1, 2], only()); // => undefined\n * @dataLast\n * @category Array\n */\nexport function only(): (\n array: Readonly,\n) => Only;\n\nexport function only(...args: readonly unknown[]): unknown {\n return purry(onlyImplementation, args);\n}\n\nconst onlyImplementation = (array: readonly T[]): T | undefined =>\n array.length === 1 ? array[0] : undefined;\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { RemedaTypeError } from \"./internal/types/RemedaTypeError\";\nimport type { StrictFunction } from \"./internal/types/StrictFunction\";\nimport type { TupleSplits } from \"./internal/types/TupleSplits\";\n\ntype PartialBindError<\n Message extends string,\n Metadata = never,\n> = RemedaTypeError<\"partialBind\", Message, { metadata: Metadata }>;\n\ntype TuplePrefix = TupleSplits[\"left\"];\n\ntype RemovePrefix<\n T extends IterableContainer,\n Prefix extends TuplePrefix,\n> = Prefix extends readonly []\n ? T\n : T extends readonly [infer THead, ...infer TRest]\n ? Prefix extends readonly [infer _PrefixHead, ...infer PrefixRest]\n ? // PrefixHead extends THead.\n RemovePrefix\n : // Prefix (as a whole) extends readonly THead[].\n // Prefix could possibly be empty, so this has to be THead?.\n [THead?, ...RemovePrefix]\n : // T has an optional or rest parameter last. If T is a parameter list,\n // this can only happen if we have optional arguments or a rest param;\n // both cases are similar.\n T extends readonly [(infer _THead)?, ...infer TRest]\n ? Prefix extends readonly [infer _PrefixHead, ...infer PrefixRest]\n ? // PrefixHead extends THead.\n RemovePrefix\n : // Prefix (as a whole) extends [THead?, ...TRest].\n TRest\n : // We got passed a parameter list that isn't what we expected; this is\n // an internal error.\n PartialBindError<\"Function parameter list has unexpected shape\", T>;\n\n/**\n * Creates a function that calls `func` with `partial` put before the arguments\n * it receives.\n *\n * Can be thought of as \"freezing\" some portion of a function's arguments,\n * resulting in a new function with a simplified signature.\n *\n * @param func - The function to wrap.\n * @param partial - The arguments to put before.\n * @returns A partially bound function.\n * @signature\n * partialBind(func, ...partial);\n * @example\n * const fn = (x: number, y: number, z: number) => x * 100 + y * 10 + z;\n * const partialFn = partialBind(fn, 1, 2);\n * partialFn(3); //=> 123\n *\n * const logWithPrefix = partialBind(console.log, \"[prefix]\");\n * logWithPrefix(\"hello\"); //=> \"[prefix] hello\"\n * @dataFirst\n * @category Function\n * @see partialLastBind\n */\nexport function partialBind<\n F extends StrictFunction,\n PrefixArgs extends TuplePrefix>,\n RemovedPrefix extends RemovePrefix, PrefixArgs>,\n>(\n func: F,\n ...partial: PrefixArgs\n): (\n ...rest: RemovedPrefix extends IterableContainer ? RemovedPrefix : never\n) => ReturnType {\n // @ts-expect-error [ts2345, ts2322] -- TypeScript infers the generic sub-\n // types too eagerly, making itself blind to the fact that the types match\n // here.\n return (...rest) => func(...partial, ...rest);\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { RemedaTypeError } from \"./internal/types/RemedaTypeError\";\nimport type { StrictFunction } from \"./internal/types/StrictFunction\";\nimport type { TupleSplits } from \"./internal/types/TupleSplits\";\n\ntype PartialLastBindError<\n Message extends string,\n Metadata = never,\n> = RemedaTypeError<\"partialLastBind\", Message, { metadata: Metadata }>;\n\ntype TupleSuffix = TupleSplits[\"right\"];\n\ntype RemoveSuffix<\n T extends IterableContainer,\n Suffix extends TupleSuffix,\n> = Suffix extends readonly []\n ? T\n : T extends readonly [...infer TRest, infer TLast]\n ? Suffix extends readonly [...infer SuffixRest, infer _SuffixLast]\n ? // SuffixLast extends TLast.\n RemoveSuffix\n : // Suffix (as a whole) extends readonly TLast[].\n // Suffix could possibly be empty, so this has to be TLast?.\n [...RemoveSuffix, TLast?]\n : // T has an optional or rest parameter last. If T is a parameter list,\n // this can only happen if we have optional arguments or a rest param;\n // both cases are similar.\n T extends readonly [...infer TRest, (infer _TLast)?]\n ? Suffix extends readonly [...infer SuffixRest, infer _SuffixLast]\n ? // SuffixLast extends TLast.\n RemoveSuffix\n : // Suffix (as a whole) extends [...TRest, TLast?].\n TRest\n : // We got passed a parameter list that isn't what we expected; this\n // is an internal error.\n PartialLastBindError<\"Function parameter list has unexpected shape\", T>;\n\n/**\n * Creates a function that calls `func` with `partial` put after the arguments\n * it receives. Note that this doesn't support functions with both optional\n * and rest parameters.\n *\n * Can be thought of as \"freezing\" some portion of a function's arguments,\n * resulting in a new function with a simplified signature.\n *\n * Useful for converting a data-first function to a data-last one.\n *\n * @param func - The function to wrap.\n * @param partial - The arguments to put after.\n * @returns A partially bound function.\n * @signature\n * partialLastBind(func, ...partial);\n * @example\n * const fn = (x: number, y: number, z: number) => x * 100 + y * 10 + z;\n * const partialFn = partialLastBind(fn, 2, 3);\n * partialFn(1); //=> 123\n *\n * const parseBinary = partialLastBind(parseInt, \"2\");\n * parseBinary(\"101\"); //=> 5\n *\n * pipe(\n * { a: 1 },\n * // instead of (arg) => JSON.stringify(arg, null, 2)\n * partialLastBind(JSON.stringify, null, 2),\n * ); //=> '{\\n \"a\": 1\\n}'\n * @dataFirst\n * @category Function\n * @see partialBind\n */\nexport function partialLastBind<\n F extends StrictFunction,\n SuffixArgs extends TupleSuffix>,\n RemovedSuffix extends RemoveSuffix, SuffixArgs>,\n>(\n func: F,\n ...partial: SuffixArgs\n): (\n ...rest: RemovedSuffix extends IterableContainer ? RemovedSuffix : never\n) => ReturnType {\n // @ts-expect-error [ts2345, ts2322] -- TypeScript infers the generic sub-\n // types too eagerly, making itself blind to the fact that the types match\n // here.\n return (...rest) => func(...rest, ...partial);\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Splits a collection into two groups, the first of which contains elements the\n * `predicate` type guard passes, and the second one containing the rest.\n *\n * @param data - The items to split.\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to add the element to the first partition, and and\n * `false` to add the element to the other partition. A type-predicate can also\n * be used to narrow the result.\n * @returns A 2-tuple of arrays where the first array contains the elements that\n * passed the predicate, and the second array contains the elements that did\n * not. The items are in the same order as they were in the original array.\n * @signature\n * partition(data, predicate)\n * @example\n * partition(\n * ['one', 'two', 'forty two'],\n * x => x.length === 3,\n * ); // => [['one', 'two'], ['forty two']]\n * @dataFirst\n * @category Array\n */\nexport function partition(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): [S[], Exclude[]];\nexport function partition(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): [T[], T[]];\n\n/**\n * Splits a collection into two groups, the first of which contains elements the\n * `predicate` type guard passes, and the second one containing the rest.\n *\n * @param predicate - A function to execute for each element in the array. It\n * should return `true` to add the element to the first partition, and and\n * `false` to add the element to the other partition. A type-predicate can also\n * be used to narrow the result.\n * @returns A 2-tuple of arrays where the first array contains the elements that\n * passed the predicate, and the second array contains the elements that did\n * not. The items are in the same order as they were in the original array.\n * @signature\n * partition(predicate)(data)\n * @example\n * pipe(\n * ['one', 'two', 'forty two'],\n * partition(x => x.length === 3),\n * ); // => [['one', 'two'], ['forty two']]\n * @dataLast\n * @category Array\n */\nexport function partition(\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): (data: readonly T[]) => [S[], Exclude[]];\nexport function partition(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): (data: readonly T[]) => [T[], T[]];\n\nexport function partition(...args: readonly unknown[]): unknown {\n return purry(partitionImplementation, args);\n}\n\nconst partitionImplementation = (\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => value is S,\n): [S[], T[]] => {\n const ret: [S[], T[]] = [[], []];\n for (const [index, item] of data.entries()) {\n if (predicate(item, index, data)) {\n ret[0].push(item);\n } else {\n ret[1].push(item);\n }\n }\n return ret;\n};\n", "/* eslint-disable jsdoc/require-param, jsdoc/require-example, jsdoc/require-description -- allow us to deprecate all overloads of the function, not just those that have the docblock directly above them. */\n\nimport { purry } from \"./purry\";\n\n/**\n * Given a union of indexable types `T`, we derive an indexable type\n * containing all of the keys of each variant of `T`. If a key is\n * present in multiple variants of `T`, then the corresponding type in\n * `Pathable` will be the intersection of all types for that key.\n *\n * @example\n * type T1 = Pathable<{a: number} | {a: string; b: boolean}>\n * // {a: number | string; b: boolean}\n *\n * type T2 = Pathable<{a?: {b: string}}\n * // {a: {b: string} | undefined}\n *\n * type T3 = Pathable<{a: string} | number>\n * // {a: string}\n *\n * type T4 = Pathable<{a: number} | {a: string} | {b: boolean}>\n * // {a: number | string; b: boolean}\n *\n * This type lets us answer the questions:\n * - Given some object of type `T`, what keys might this object have?\n * - If this object did happen to have a particular key, what values\n * might that key have?\n */\ntype Pathable = { [K in AllKeys]: TypesForKey };\n\ntype AllKeys = T extends infer I ? keyof I : never;\ntype TypesForKey = T extends infer I\n ? K extends keyof I\n ? I[K]\n : never\n : never;\n\n// Like Required, but also removes explicit null and undefined typings */\ntype StrictlyRequired = { [K in keyof T]-?: NonNullable };\n\n/**\n * Given some `A` which is a key of at least one variant of `T`, derive\n * `T[A]` for the cases where `A` is present in `T`, and `T[A]` is not\n * null or undefined.\n */\ntype PathValue1> = StrictlyRequired<\n Pathable\n>[A];\n/** All possible options after successfully reaching `T[A]`. */\ntype Pathable1> = Pathable>;\n\n/** As `PathValue1`, but for `T[A][B]`. */\ntype PathValue2<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n> = StrictlyRequired>[B];\n/** As `Pathable1`, but for `T[A][B]`. */\ntype Pathable2<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n> = Pathable>;\n\n/** As `PathValue1`, but for `T[A][B][C]`. */\ntype PathValue3<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n C extends keyof Pathable2,\n> = StrictlyRequired>[C];\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is `null` or `undefined`, the `defaultValue` is returned in its place.\n *\n * **DEPRECATED**: Use `defaultTo(prop(object, ...path), defaultValue)`\n * instead!\n *\n * @param object - The target object.\n * @param path - The path of the property to get.\n * @param defaultValue - The default value.\n * @signature pathOr(object, array, defaultValue)\n * @example\n * pathOr({x: 10}, ['y'], 2) // 2\n * pathOr({y: 10}, ['y'], 2) // 10\n * @dataFirst\n * @category Object\n * @deprecated Use `defaultTo(prop(object, ...path), defaultValue)` instead.\n */\nexport function pathOr>(\n object: T,\n path: readonly [A],\n defaultValue: PathValue1,\n): PathValue1;\n\n/**\n * @deprecated Use `defaultTo(prop(object, ...path), defaultValue)` instead.\n */\nexport function pathOr<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n>(\n object: T,\n path: readonly [A, B],\n defaultValue: PathValue2,\n): PathValue2;\n\n/**\n * @deprecated Use `defaultTo(prop(object, ...path), defaultValue)` instead.\n */\nexport function pathOr<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n C extends keyof Pathable2,\n>(\n object: T,\n path: readonly [A, B, C],\n defaultValue: PathValue3,\n): PathValue3;\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is `undefined`, the `defaultValue` is returned in its place.\n *\n * **DEPRECATED**: Use `($) => defaultTo(prop($, ...path), defaultValue)`\n * instead, or if already inside a `pipe`, replace the call to `pathOr` with:\n * `pipe(..., prop(...path), defaultTo(defaultValue), ...)`.\n *\n * @param path - The path of the property to get.\n * @param defaultValue - The default value.\n * @signature pathOr(array, defaultValue)(object)\n * @example\n * pipe({x: 10}, pathOr(['y'], 2)) // 2\n * pipe({y: 10}, pathOr(['y'], 2)) // 10\n * @dataLast\n * @category Object\n * @deprecated Use `($) => defaultTo(prop($, ...path), defaultValue)` instead,\n * or if already inside a `pipe`, replace the call to `pathOr` with:\n * `pipe(..., prop(...path), defaultTo(defaultValue), ...)`.\n */\nexport function pathOr>(\n path: readonly [A],\n defaultValue: PathValue1,\n): (object: T) => PathValue1;\n\n/**\n * @deprecated Use `($) => defaultTo(prop($, ...path), defaultValue)` instead,\n * or if already inside a `pipe`, replace the call to `pathOr` with:\n * `pipe(..., prop(...path), defaultTo(defaultValue), ...)`.\n */\nexport function pathOr<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n>(\n path: readonly [A, B],\n defaultValue: PathValue2,\n): (object: T) => PathValue2;\n\n/**\n * @deprecated Use `($) => defaultTo(prop($, ...path), defaultValue)` instead,\n * or if already inside a `pipe`, replace the call to `pathOr` with:\n * `pipe(..., prop(...path), defaultTo(defaultValue), ...)`.\n */\nexport function pathOr<\n T,\n A extends keyof Pathable,\n B extends keyof Pathable1,\n C extends keyof Pathable2,\n>(\n path: readonly [A, B, C],\n defaultValue: PathValue3,\n): (object: T) => PathValue3;\n\n// TODO [>2]: Remove this function!\nexport function pathOr(...args: readonly unknown[]): unknown {\n return purry(pathOrImplementation, args);\n}\n\nfunction pathOrImplementation(\n data: unknown,\n path: readonly PropertyKey[],\n defaultValue: unknown,\n): unknown {\n let current = data;\n for (const prop of path) {\n if (current === null || current === undefined) {\n break;\n }\n current = (current as Record)[prop];\n }\n\n return current ?? defaultValue;\n}\n", "import type { EmptyObject, IsNever, KeysOfUnion, Writable } from \"type-fest\";\nimport type { IsBounded } from \"./internal/types/IsBounded\";\nimport type { IsBoundedRecord } from \"./internal/types/IsBoundedRecord\";\nimport type { PartitionByUnion } from \"./internal/types/PartitionByUnion\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\nimport { purry } from \"./purry\";\n\ntype PickFromArray[]> =\n // Distribute unions for both object types and key arrays.\n T extends unknown\n ? Keys extends unknown\n ? // When T is a union (or when Keys is empty) the picked props might\n // not exist in some of its sub-types, e.g.,\n // `pick(... as { a: string } | { b: number }, ['a'])`,\n // if we simply let the regular \"constructive\" logic run, the\n // resulting type would be `{}` which doesn't behave like an empty\n // object! instead, we want to use a more explicit *empty* type.\n IsNever> extends true\n ? EmptyObject\n : // Remove `readonly` modifiers from picked props since we return a\n // new, mutable, object. We don't wrap the result with `Simplify` to\n // flatten it because `Writable` does the same thing implicitly.\n Writable<\n IsBoundedRecord extends true\n ? PickBoundedFromArray\n : PickUnbounded>\n >\n : never\n : never;\n\n/**\n * Bounded records have bounded keys and result in a bounded output. The only\n * question left is whether to add the prop as-is, or make it optional. This\n * can be determined by the part of the keys array the prop is defined in, and\n * the way that element is defined: if the array contains a singular literal\n * key in either the required prefix or the suffix, we know that prop should be\n * picked as-is, otherwise, the key might not be present in the keys array so it\n * can only be picked optionally.\n */\ntype PickBoundedFromArray[]> =\n // Literal keys in the prefix/suffix are guaranteed present.\n Pick<\n T,\n // When T is a union the keys need to be narrowed to just those that are\n // keys of the specific sub-type being built\n Extract<\n | PartitionByUnion[\"required\"]>[\"singular\"]\n | PartitionByUnion[\"suffix\"]>[\"singular\"],\n keyof T\n >\n > &\n // Union keys, optional elements, and rest elements are optional.\n Partial<\n Pick<\n T,\n // When T is a union the keys need to be narrowed to just those that are\n // keys of the specific sub-type being built.\n Extract<\n | PartitionByUnion[\"required\"]>[\"union\"]\n // TODO: the optional part of the keys array will always be empty because its impossible to provide the pick function with a tuple with optional elements; this is because optional elements are always implicitly `undefined` too; which breaks the constraint that all keys are keys of T (`undefined` is not a key of anything). We can lift this restriction by supporting `undefined` in the runtime and relaxing the type constraint to allow it, but this relaxed constraint enables a niche feature (optional tuple elements) at the expense of better type-safety for the more common cases of fixed tuples and arrays. Anyway... if we ever change it, this part of the output type will ensure the output is still correct:\n | TupleParts[\"optional\"][number]\n | TupleParts[\"item\"]\n | PartitionByUnion[\"suffix\"]>[\"union\"],\n keyof T\n >\n >\n >;\n\n/**\n * The built-in `Pick` is weird when it comes to picking bounded keys from\n * unbounded records. It reconstructs the output object regardless of the shape\n * of the input: `Pick, \"hello\">` results in the type\n * `{ hello: \"world\" }`, but you'd expect it to be optional because we don't\n * know if the record contains a `hello` prop or not!\n *\n * !Important: We assume T is unbounded and don't test for it!\n *\n * See: https://www.typescriptlang.org/play/?#code/PTAEE0HsFcHIBNQFMAeAHJBjALqAGqNpKAEZKigAGA3qABZIA2jkA-AFygBEA7pAE6N4XUAF9KAGlLRcAQ0ayAzgChsATwz5QAXlAAFAJaYA1gB4ASlgHxTi7PwMA7AOZTeAoVwB8bhs0jeANzKIBSgAHqsykA.\n */\ntype PickUnbounded =\n IsBounded extends true ? Partial> : Pick;\n\n/**\n * Creates an object composed of the picked `data` properties.\n *\n * @param keys - The property names.\n * @signature pick([prop1, prop2])(object)\n * @example\n * pipe({ a: 1, b: 2, c: 3, d: 4 }, pick(['a', 'd'])) // => { a: 1, d: 4 }\n * @dataLast\n * @category Object\n */\nexport function pick<\n T extends object,\n const Keys extends readonly KeysOfUnion[],\n>(keys: Keys): (data: T) => PickFromArray;\n\n/**\n * Creates an object composed of the picked `data` properties.\n *\n * @param data - The target object.\n * @param keys - The property names.\n * @signature pick(object, [prop1, prop2])\n * @example\n * pick({ a: 1, b: 2, c: 3, d: 4 }, ['a', 'd']) // => { a: 1, d: 4 }\n * @dataFirst\n * @category Object\n */\nexport function pick<\n T extends object,\n const Keys extends readonly KeysOfUnion[],\n>(data: T, keys: Keys): PickFromArray;\n\nexport function pick(...args: readonly unknown[]): unknown {\n return purry(pickImplementation, args);\n}\n\nfunction pickImplementation<\n T extends object,\n Keys extends readonly (keyof T)[],\n>(object: T, keys: Keys): PickFromArray {\n const out: Partial> = {};\n for (const key of keys) {\n if (key in object) {\n out[key] = object[key];\n }\n }\n // @ts-expect-error [ts2322] - We build the type incrementally, there's no way to make typescript infer that we \"finished\" building the object and to treat it as such.\n return out;\n}\n", "import type { IsNever, Simplify } from \"type-fest\";\nimport type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport type { IsBoundedRecord } from \"./internal/types/IsBoundedRecord\";\nimport type { ToString } from \"./internal/types/ToString\";\nimport { purry } from \"./purry\";\n\n// When the predicate isn't a type-guard we don't know which properties would be\n// part of the output and which wouldn't so we can only safely downgrade the\n// whole object to a Partial of the input.\ntype EnumeratedPartial = T extends unknown\n ? Simplify<\n IsBoundedRecord extends true\n ? {\n // Object.entries returns keys as strings.\n -readonly [P in keyof T as ToString

]?: Required[P];\n }\n : // For unbounded records (a simple Record with primitive `string` or\n // `number` keys) the return type here could technically be T; but for\n // cases where the record is unbounded but is more complex (like\n // `symbol` keys) we want to \"reconstruct\" the record from just its\n // enumerable components (which are the ones accessible via\n // `Object.entries`).\n Record, EnumerableStringKeyedValueOf>\n >\n : never;\n\n// When the predicate is a type-guard we have more information to work with when\n// constructing the type of the output object. We can safely remove any property\n// which value would never come up true for the predicate, AND we can also\n// assume that properties that match the predicate perfectly would **always**\n// show up in the output object. Hence to build the output object we need to\n// build and merge 2 output objects: One for the properties which have a value\n// of at type that would always yield a `true` result from the predicate, these\n// are the \"matches\", which would not change the \"optionality\" of the input\n// object's props, and one for partial matches which would also make the props\n// optional (as they could have a value that would be filtered out).\ntype EnumeratedPartialNarrowed = T extends unknown\n ? Simplify<\n IsBoundedRecord extends true\n ? ExactProps & PartialProps\n : // For unbounded records we need to \"reconstruct\" the record and\n // narrow the value types. Similar to the non-narrowed case, we need\n // to also ignore `symbol` keys and any values that are only relevant\n // to them.\n Record<\n EnumerableStringKeyOf,\n Extract, S>\n >\n >\n : never;\n\n// The exact case, props here would always be part of the output object\ntype ExactProps = {\n // Object.entries returns keys as strings.\n -readonly [P in keyof T as ToString<\n IsExactProp extends true ? P : never\n >]: Extract[P], S>;\n};\n\n// The partial case, props here might be part of the output object, but might\n// not be, hence they are optional.\ntype PartialProps = {\n // Object.entries returns keys as strings.\n -readonly [P in keyof T as ToString<\n IsPartialProp extends true ? P : never\n >]?: IsNever> extends true\n ? // If the result of extracting S from T[P] is never but S still extends\n // it, it means that T[P] is too wide and S can't be extracted from it:\n // e.g. if T[P] is `number` S is `1` then `Extract === never`.\n // For these cases we can return S directly as the type as it's already\n // very narrowed compared to T[P].\n S extends T[P]\n ? S\n : never\n : Extract;\n};\n\n// If the input object's value type extends itself when the type-guard is\n// extracted from it we can safely assume that the predicate would always return\n// true for any value of that property.\ntype IsExactProp =\n T[P] extends Extract ? true : false;\n\n// ...and if the input object's value type isn't an exact match, but still has\n// some partial match (i.g. the extracted type-guard isn't completely disjoint)\n// then we can assume that the property can sometimes return true, and sometimes\n// false when passed to the predicate, hence it should be optional in the\n// output.\ntype IsPartialProp =\n IsExactProp extends true\n ? false\n : IsNever> extends true\n ? S extends T[P]\n ? // If the result of extracting S from T[P] is never but S still\n // extends it, it means that T[P] is too wide and S can't be\n // extracted from it: e.g. if T[P] is `number` S is `1` then\n // `Extract === never`, but `1` extends `number`. We need\n // to handle these cases when we extract the value too (see above).\n true\n : false\n : true;\n\n/**\n * Iterates over the entries of `data` and reconstructs the object using only\n * entries that `predicate` accepts. Symbol keys are not passed to the predicate\n * and would be filtered out from the output object.\n *\n * See `omitBy` for a complementary function which starts with a shallow copy of\n * the input object and removes the entries that the predicate rejects. Because\n * it is subtractive symbol keys would be copied over to the output object.\n * See also `entries`, `filter`, and `fromEntries` which could be used to build\n * your own version of `pickBy` if you need more control (though the resulting\n * type might be less precise).\n *\n * @param data - The target object.\n * @param predicate - A function that takes the value, key, and the data itself\n * and returns true if the entry should be part of the output object, or `false`\n * to remove it. If the function is a type-guard on the value the output type\n * would be narrowed accordingly.\n * @returns A shallow copy of the input object with the rejected entries\n * removed.\n * @signature pickBy(data, predicate)\n * @example\n * pickBy({a: 1, b: 2, A: 3, B: 4}, (val, key) => key.toUpperCase() === key) // => {A: 3, B: 4}\n * @dataFirst\n * @category Object\n */\nexport function pickBy<\n T extends object,\n S extends EnumerableStringKeyedValueOf,\n>(\n data: T,\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => value is S,\n): EnumeratedPartialNarrowed;\nexport function pickBy(\n data: T,\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => boolean,\n): EnumeratedPartial;\n\n/**\n * Iterates over the entries of `data` and reconstructs the object using only\n * entries that `predicate` accepts. Symbol keys are not passed to the predicate\n * and would be filtered out from the output object.\n *\n * See `omitBy` for a complementary function which starts with a shallow copy of\n * the input object and removes the entries that the predicate rejects. Because\n * it is subtractive symbol keys would be copied over to the output object.\n * See also `entries`, `filter`, and `fromEntries` which could be used to build\n * your own version of `pickBy` if you need more control (though the resulting\n * type might be less precise).\n *\n * @param predicate - A function that takes the value, key, and the data itself\n * and returns true if the entry should be part of the output object, or `false`\n * to remove it. If the function is a type-guard on the value the output type\n * would be narrowed accordingly.\n * @signature\n * pickBy(predicate)(data)\n * @example\n * pipe({a: 1, b: 2, A: 3, B: 4}, pickBy((val, key) => key.toUpperCase() === key)); // => {A: 3, B: 4}\n * @dataLast\n * @category Object\n */\nexport function pickBy<\n T extends object,\n S extends EnumerableStringKeyedValueOf,\n>(\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => value is S,\n): (data: T) => EnumeratedPartialNarrowed;\nexport function pickBy(\n predicate: (\n value: EnumerableStringKeyedValueOf,\n key: EnumerableStringKeyOf,\n data: T,\n ) => boolean,\n): (data: T) => EnumeratedPartial;\n\nexport function pickBy(...args: readonly unknown[]): unknown {\n return purry(pickByImplementation, args);\n}\n\nfunction pickByImplementation(\n data: T,\n predicate: (value: unknown, key: string, data: T) => boolean,\n): Record {\n const out: Partial> = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (predicate(value, key, data)) {\n out[key] = value;\n }\n }\n\n return out;\n}\n", "import { pipe } from \"./pipe\";\n\n/**\n * Data-last version of `pipe`. See `pipe` documentation for full details.\n *\n * Use `piped` when you need to pass a transformation as a callback to\n * functions like `map` and `filter`, where the data type can be inferred\n * from the call site.\n *\n * IMPORTANT: `piped` does not work as a \"function factory\" in order to create\n * standalone utility functions; because TypeScript cannot infer the input data\n * type (without requiring to explicitly define all type params for all\n * functions in the pipe). We recommend defining the function explicitly, and\n * then use `pipe` in its implementation.\n *\n * @signature\n * piped(...functions)(data);\n * @example\n * map(\n * [{ a: 1 }, { a: 2 }, { a: 3 }],\n * piped(prop('a'), add(1)),\n * ); //=> [2, 3, 4]\n * @dataLast\n * @category Function\n */\nexport function piped(): (data: A) => A;\n\nexport function piped(funcA: (input: A) => B): (data: A) => B;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n): (data: A) => C;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n): (data: A) => D;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n): (data: A) => E;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n): (data: A) => F;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n): (data: A) => G;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n): (data: A) => H;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n): (data: A) => I;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n): (data: A) => J;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n): (data: A) => K;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n): (data: A) => L;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n): (data: A) => M;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n funcM: (input: M) => N,\n): (data: A) => N;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n funcM: (input: M) => N,\n funcN: (input: N) => O,\n): (data: A) => O;\n\nexport function piped(\n funcA: (input: A) => B,\n funcB: (input: B) => C,\n funcC: (input: C) => D,\n funcD: (input: D) => E,\n funcE: (input: E) => F,\n funcF: (input: F) => G,\n funcG: (input: G) => H,\n funcH: (input: H) => I,\n funcI: (input: I) => J,\n funcJ: (input: J) => K,\n funcK: (input: K) => L,\n funcL: (input: L) => M,\n funcM: (input: M) => N,\n funcN: (input: N) => O,\n funcO: (input: O) => P,\n): (data: A) => P;\n\nexport function piped(...functions: readonly ((input: unknown) => unknown)[]) {\n return (value: unknown): unknown =>\n pipe(\n value,\n // @ts-expect-error [ts2556] - We can't avoid this error because pipe is typed for users and this is an internal function\n ...functions,\n );\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Product | IterableContainer> =\n // Empty arrays would always result in a product of (a non-bigint) 1\n T extends readonly []\n ? 1\n : // Non-empty bigint arrays will always result in a bigint product.\n T extends readonly [bigint, ...(readonly unknown[])]\n ? bigint\n : // But an empty bigint array would result in a non-bigint 1.\n T[number] extends bigint\n ? bigint | 1\n : // Non-bigint arrays are always handled correctly.\n number;\n\n/**\n * Compute the product of the numbers in the array, or return 1 for an empty\n * array.\n *\n * Works for both `number` and `bigint` arrays, but not arrays that contain both\n * types.\n *\n * IMPORTANT: The result for empty arrays would be 1 (`number`) regardless of\n * the type of the array; to avoid adding this to the return type for cases\n * where the array is known to be non-empty you can use `hasAtLeast` or\n * `isEmpty` to guard against this case.\n *\n * @param data - The array of numbers.\n * @signature\n * product(data);\n * @example\n * product([1, 2, 3]); // => 6\n * product([1n, 2n, 3n]); // => 6n\n * product([]); // => 1\n * @dataFirst\n * @category Number\n */\nexport function product<\n T extends IterableContainer | IterableContainer,\n>(data: T): Product;\n\n/**\n * Compute the product of the numbers in the array, or return 1 for an empty\n * array.\n *\n * Works for both `number` and `bigint` arrays, but not arrays that contain both\n * types.\n *\n * IMPORTANT: The result for empty arrays would be 1 (`number`) regardless of\n * the type of the array; to avoid adding this to the return type for cases\n * where the array is known to be non-empty you can use `hasAtLeast` or\n * `isEmpty` to guard against this case.\n *\n * @signature\n * product()(data);\n * @example\n * pipe([1, 2, 3], product()); // => 6\n * pipe([1n, 2n, 3n], product()); // => 6n\n * pipe([], product()); // => 1\n * @dataLast\n * @category Number\n */\nexport function product(): <\n T extends IterableContainer | IterableContainer,\n>(\n data: T,\n) => Product;\n\nexport function product(...args: readonly unknown[]): unknown {\n return purry(productImplementation, args);\n}\n\nfunction productImplementation<\n T extends IterableContainer | IterableContainer,\n>(data: T): T[number] {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- The rule differentiates 1 and 1n :(\n let out = typeof data[0] === \"bigint\" ? 1n : 1;\n for (const value of data) {\n // @ts-expect-error [ts2365] -- Typescript can't infer that all elements will be a number of the same type.\n out *= value;\n }\n return out;\n}\n", "import type { KeysOfUnion } from \"type-fest\";\nimport type { ArrayAt } from \"./internal/types/ArrayAt\";\n\n// Computes all possible keys of `T` at `Path` spread over unions, allowing\n// keys from any of the results, not just those **shared** by all of them.\ntype KeysDeep = KeysOfUnion<\n PropDeep\n>;\n\n// Recursively run `Prop` over `Path` to extract the deeply nested type.\ntype PropDeep = Path extends readonly [\n infer Key,\n ...infer Rest,\n]\n ? PropDeep, Rest>\n : // Keys is a fixed tuple so we know we reach here only when we've reached\n // the output object.\n T;\n\n// Expanding on the built-in `T[Key]` operator to support arrays and unions.\ntype Prop =\n // Distribute the union to support unions of keys.\n T extends unknown\n ? // In a distributed union some of the union members might not be keys of a\n // specific object within a union of objects, those cases don't contribute\n // to the output type.\n Key extends keyof T\n ? T extends readonly unknown[]\n ? ArrayAt\n : T[Key]\n : undefined\n : never;\n\n// Currying relies on us being able to differentiate between data-first and\n// data-last invocations at runtime, but because the function takes a variadic\n// array of keys we can't rely on it's shape or length to do that. Instead, we\n// can limit the types we accept for `data` so that looking at the first\n// parameter's type is enough to make the call. From a practical standpoint\n// this means we accept in any `object`, `null,` or `undefined`, and that we\n// don't accept `string`. All other types (`boolean` and `bigint`) don't\n// have properties, so are incompatible with our `key` parameters anyway.\ntype NonPropertyKey = object | null | undefined;\n\n/**\n * Gets the value of the given property from an object. Nested properties can\n * be accessed by providing a variadic array of keys that define the path from\n * the root to the desired property. Arrays can be accessed by using numeric\n * keys. Unions and optional properties are handled gracefully by returning\n * `undefined` early for any non-existing property on the path. Paths are\n * validated against the object type to provide stronger type safety, better\n * compile-time errors, and to enable autocompletion in IDEs.\n *\n * @param data - The object or array to access.\n * @param key - The key(s) for the property to extract.\n * @signature\n * prop(data, ...keys);\n * @example\n * prop({ foo: { bar: 'baz' } }, 'foo'); //=> { bar: 'baz' }\n * prop({ foo: { bar: 'baz' } }, 'foo', 'bar'); //=> 'baz'\n * prop([\"cat\", \"dog\"], 1); //=> 'dog'\n * @dataFirst\n * @category Object\n */\nexport function prop>(\n data: T,\n key: Key,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n>(data: T, key0: Key0, key1: Key1): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n Key7 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n key7: Key7,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n Key7 extends KeysDeep,\n Key8 extends KeysDeep,\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n key7: Key7,\n key8: Key8,\n): NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n Key7 extends KeysDeep,\n Key8 extends KeysDeep,\n Key9 extends KeysDeep<\n T,\n [Key0, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8]\n >,\n AdditionalKeys extends readonly PropertyKey[] = [],\n>(\n data: T,\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n key7: Key7,\n key8: Key8,\n key9: Key9,\n ...additionalKeys: AdditionalKeys\n): NoInfer<\n PropDeep<\n T,\n [\n Key0,\n Key1,\n Key2,\n Key3,\n Key4,\n Key5,\n Key6,\n Key7,\n Key8,\n Key9,\n ...AdditionalKeys,\n ]\n >\n>;\n\n/**\n * Gets the value of the given property from an object. Nested properties can\n * be accessed by providing a variadic array of keys that define the path from\n * the root to the desired property. Arrays can be accessed by using numeric\n * keys. Unions and optional properties are handled gracefully by returning\n * `undefined` early for any non-existing property on the path. Paths are\n * validated against the object type to provide stronger type safety, better\n * compile-time errors, and to enable autocompletion in IDEs.\n *\n * @param key - The key(s) for the property to extract.\n * @signature\n * prop(...keys)(data);\n * @example\n * pipe({ foo: { bar: 'baz' } }, prop('foo')); //=> { bar: 'baz' }\n * pipe({ foo: { bar: 'baz' } }, prop('foo', 'bar')); //=> 'baz'\n * pipe([\"cat\", \"dog\"], prop(1)); //=> 'dog'\n * @dataLast\n * @category Object\n */\nexport function prop>(\n key: Key,\n): (data: T) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n>(key0: Key0, key1: Key1): (data: T) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n): (data: T) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n): (data: T) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n): (data: T) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n): (data: T) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n): (\n data: T,\n) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n Key7 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n key7: Key7,\n): (\n data: T,\n) => NoInfer>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n Key7 extends KeysDeep,\n Key8 extends KeysDeep,\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n key7: Key7,\n key8: Key8,\n): (\n data: T,\n) => NoInfer<\n PropDeep\n>;\nexport function prop<\n T extends NonPropertyKey,\n Key0 extends KeysDeep,\n Key1 extends KeysDeep,\n Key2 extends KeysDeep,\n Key3 extends KeysDeep,\n Key4 extends KeysDeep,\n Key5 extends KeysDeep,\n Key6 extends KeysDeep,\n Key7 extends KeysDeep,\n Key8 extends KeysDeep,\n Key9 extends KeysDeep<\n T,\n [Key0, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8]\n >,\n AdditionalKeys extends readonly PropertyKey[] = [],\n>(\n key0: Key0,\n key1: Key1,\n key2: Key2,\n key3: Key3,\n key4: Key4,\n key5: Key5,\n key6: Key6,\n key7: Key7,\n key8: Key8,\n key9: Key9,\n ...additionalKeys: AdditionalKeys\n): (\n data: T,\n) => NoInfer<\n PropDeep<\n T,\n [\n Key0,\n Key1,\n Key2,\n Key3,\n Key4,\n Key5,\n Key6,\n Key7,\n Key8,\n Key9,\n ...AdditionalKeys,\n ]\n >\n>;\n\nexport function prop(\n key: K,\n): >>(data: T) => T[K];\n\nexport function prop(\n maybeData: NonPropertyKey | PropertyKey,\n ...args: readonly PropertyKey[]\n): unknown {\n return typeof maybeData === \"string\" ||\n typeof maybeData === \"number\" ||\n typeof maybeData === \"symbol\"\n ? (data: NonPropertyKey) => propImplementation(data, maybeData, ...args)\n : propImplementation(maybeData, ...args);\n}\n\nfunction propImplementation(\n data: NonPropertyKey,\n ...keys: readonly PropertyKey[]\n): unknown {\n let output: unknown = data;\n for (const key of keys) {\n if (output === undefined || output === null) {\n return undefined;\n }\n // @ts-expect-error [ts7053] -- This is fine, the types are really dynamic\n // here and TypeScript doesn't have a chance to infer them correctly.\n output = output[key];\n }\n return output;\n}\n", "import type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Creates an object that maps the result of `valueExtractor` with a key\n * resulting from running `keyExtractor` on each item in `data`. Duplicate keys\n * are overwritten, guaranteeing that the extractor functions are run on each\n * item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param data - The items used to pull/extract the keys and values from.\n * @param keyExtractor - Computes the key for item.\n * @param valueExtractor - Computes the value for the item.\n * @signature\n * pullObject(data, keyExtractor, valueExtractor);\n * @example\n * pullObject(\n * [\n * { name: \"john\", email: \"john@remedajs.com\" },\n * { name: \"jane\", email: \"jane@remedajs.com\" }\n * ],\n * prop(\"name\"),\n * prop(\"email\"),\n * ); // => { john: \"john@remedajs.com\", jane: \"jane@remedajs.com\" }\n * @dataFirst\n * @category Object\n */\nexport function pullObject<\n T extends IterableContainer,\n K extends PropertyKey,\n V,\n>(\n data: T,\n keyExtractor: (item: T[number], index: number, data: T) => K,\n valueExtractor: (item: T[number], index: number, data: T) => V,\n): BoundedPartial>;\n\n/**\n * Creates an object that maps the result of `valueExtractor` with a key\n * resulting from running `keyExtractor` on each item in `data`. Duplicate keys\n * are overwritten, guaranteeing that the extractor functions are run on each\n * item in `data`.\n *\n * There are several other functions that could be used to build an object from\n * an array:\n * * `fromKeys` - Builds an object from an array of *keys* and a mapper for values.\n * * `indexBy` - Builds an object from an array of *values* and a mapper for keys.\n * * `fromEntries` - Builds an object from an array of key-value pairs.\n * Refer to the docs for more details.\n *\n * @param keyExtractor - Computes the key for item.\n * @param valueExtractor - Computes the value for the item.\n * @signature\n * pullObject(keyExtractor, valueExtractor)(data);\n * @example\n * pipe(\n * [\n * { name: \"john\", email: \"john@remedajs.com\" },\n * { name: \"jane\", email: \"jane@remedajs.com\" }\n * ],\n * pullObject(prop(\"name\"), prop(\"email\")),\n * ); // => { john: \"john@remedajs.com\", jane: \"jane@remedajs.com\" }\n * @dataLast\n * @category Object\n */\nexport function pullObject<\n T extends IterableContainer,\n K extends PropertyKey,\n V,\n>(\n keyExtractor: (item: T[number], index: number, data: T) => K,\n valueExtractor: (item: T[number], index: number, data: T) => V,\n): (data: T) => BoundedPartial>;\n\nexport function pullObject(...args: readonly unknown[]): unknown {\n return purry(pullObjectImplementation, args);\n}\n\nfunction pullObjectImplementation<\n T extends IterableContainer,\n K extends PropertyKey,\n V,\n>(\n data: T,\n keyExtractor: (item: T[number], index: number, data: T) => K,\n valueExtractor: (item: T[number], index: number, data: T) => V,\n): Partial> {\n const result: Partial> = {};\n\n for (const [index, item] of data.entries()) {\n const key = keyExtractor(item, index, data);\n const value = valueExtractor(item, index, data);\n result[key] = value;\n }\n\n return result;\n}\n", "/* eslint-disable no-bitwise, @typescript-eslint/no-magic-numbers --\n * We randomize the bigint using randomized bitmaps, we have to use bitwise\n * operations to manipulate them.\n */\n\n/**\n * Generate a random `bigint` between `from` and `to` (inclusive).\n *\n * ! Important: In most environments this function uses\n * [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues)\n * under-the-hood which **is** cryptographically strong. When the WebCrypto API\n * isn't available (Node 18) we fallback to an implementation that uses\n * [`Math.random()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)\n * which is **NOT** cryptographically secure.\n *\n * @param from - The minimum value.\n * @param to - The maximum value.\n * @returns The random integer.\n * @signature\n * randomBigInt(from, to)\n * @example\n * randomBigInt(1n, 10n) // => 5n\n * @dataFirst\n * @category Number\n */\nexport function randomBigInt(from: bigint, to: bigint): bigint {\n if (to < from) {\n throw new RangeError(\n `randomBigInt: The range [${from.toString()},${to.toString()}] is empty.`,\n );\n }\n\n const range = to - from;\n\n // Get the max number of bits needed to encode the result. We will generate\n // this number of random bits. A radix of 2 would give us the binary\n // representation of the number.\n const { length: maxBits } = range.toString(2 /* radix */);\n\n // We can only generate random data in bytes, not bits, so we need to generate\n // enough bytes to cover the required number of bits.\n const maxBytes = Math.ceil(maxBits / 8);\n\n // The number of bits we need to ignore in the random bitmap we generate.\n const excessBits = BigInt(8 - (maxBits % 8));\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- It's more readable than using a do..while loop.\n while (true) {\n // We use `crypto` for our RNG, it should be supported in all modern\n // environments we support.\n const randomBytes = random(maxBytes);\n\n const raw = asBigInt(randomBytes);\n\n // Shift the number back to our range, this effectively sets the excess bits\n // to 0.\n const result = raw >> excessBits;\n\n // The generated number might overflow when `range < 2 ** maxBits - 1`, so\n // it can't be returned. To ensure that all possible results have the same\n // probability, we ignore the value entirely and try again (instead of\n // trying to adapt it to the output range somehow).\n if (result <= range) {\n return result + from;\n }\n }\n}\n\nfunction asBigInt(bytes: Iterable): bigint {\n let result = 0n;\n for (const byte of bytes) {\n // We build the bigint by shifting the current value by a byte, and putting\n // the next byte in that \"slot\".\n result = (result << 8n) + BigInt(byte);\n }\n return result;\n}\n\nfunction random(numBytes: number): Uint8Array {\n const output = new Uint8Array(numBytes);\n\n if (typeof crypto === \"undefined\") {\n // Polyfill for environments without `crypto` support. The only env which\n // requires this and we support is Node 18; once we drop support for it we\n // can drop the polyfill.\n for (let index = 0; index < numBytes; index += 1) {\n output[index] = Math.floor(Math.random() * 256);\n }\n } else {\n crypto.getRandomValues(output);\n }\n\n return output;\n}\n", "import type {\n GreaterThan,\n GreaterThanOrEqual,\n IsEqual,\n IsNever,\n NonNegativeInteger,\n Or,\n} from \"type-fest\";\nimport type { IntRangeInclusive } from \"./internal/types/IntRangeInclusive\";\n\n// This limitation is defined by type-fest\ntype MaxLiteral = 1000;\n\ntype RandomInteger =\n Or<\n IsNever>,\n IsNever>\n > extends true\n ? number\n : IsEqual extends true\n ? From\n : GreaterThan extends true\n ? never\n : GreaterThanOrEqual extends true\n ? number\n : IntRangeInclusive;\n\n/**\n * Generate a random integer between `from` and `to` (inclusive).\n *\n * !Important: This function uses [`Math.random()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random) under-the-hood, which has two major limitations:\n * 1. It generates 2^52 possible values, so the bigger the range, the less\n * uniform the distribution of values would be, and at ranges larger than that\n * some values would never come up.\n * 2. It is not cryptographically secure and should not be used for security\n * scenarios.\n *\n * @param from - The minimum value.\n * @param to - The maximum value.\n * @returns The random integer.\n * @signature\n * randomInteger(from, to)\n * @example\n * randomInteger(1, 10) // => 5\n * randomInteger(1.5, 2.6) // => 2\n * @dataFirst\n * @category Number\n */\nexport function randomInteger(\n from: From,\n to: To,\n): RandomInteger {\n const fromCeiled = Math.ceil(from);\n const toFloored = Math.floor(to);\n\n if (toFloored < fromCeiled) {\n throw new RangeError(\n `randomInteger: The range [${from.toString()},${to.toString()}] contains no integer`,\n );\n }\n\n return Math.floor(\n Math.random() * (toFloored - fromCeiled + 1) + fromCeiled,\n ) as RandomInteger;\n}\n", "import { purry } from \"./purry\";\n\nconst ALPHABET =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n/**\n * A [pseudo-random](https://en.wikipedia.org/wiki/Pseudorandom_number_generator) [alpha-numeric](https://en.wikipedia.org/wiki/Alphanumericals)\n * [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String).\n *\n * It is not [cryptographically secure](https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator)!\n *\n * @param length - The length of the random string.\n * @returns The random string.\n * @signature\n * randomString(length)\n * @example\n * randomString(5) // => aB92J\n * @dataFirst\n * @category String\n */\nexport function randomString(length: number): string;\n\n/**\n * A [pseudo-random](https://en.wikipedia.org/wiki/Pseudorandom_number_generator) [alpha-numeric](https://en.wikipedia.org/wiki/Alphanumericals)\n * [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String).\n *\n * It is not [cryptographically secure](https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator)!\n *\n * @returns The random string.\n * @signature\n * randomString()(length)\n * @example\n * pipe(5, randomString()) // => aB92J\n * @dataLast\n * @category String\n */\nexport function randomString(): (length: number) => string;\n\nexport function randomString(...args: readonly unknown[]): unknown {\n return purry(randomStringImplementation, args);\n}\n\nfunction randomStringImplementation(length: number): string {\n const out: string[] = [];\n for (let iteration = 0; iteration < length; iteration++) {\n const randomChar = ALPHABET[Math.floor(Math.random() * ALPHABET.length)]!;\n out.push(randomChar);\n }\n return out.join(\"\");\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Returns a list of numbers from `start` (inclusive) to `end` (exclusive).\n *\n * @param start - The start number.\n * @param end - The end number.\n * @signature range(start, end)\n * @example\n * range(1, 5) // => [1, 2, 3, 4]\n * @dataFirst\n * @category Array\n */\nexport function range(start: number, end: number): number[];\n\n/**\n * Returns a list of numbers from `start` (inclusive) to `end` (exclusive).\n *\n * @param end - The end number.\n * @signature range(end)(start)\n * @example\n * range(5)(1) // => [1, 2, 3, 4]\n * @dataLast\n * @category Array\n */\nexport function range(end: number): (start: number) => number[];\n\nexport function range(...args: readonly unknown[]): unknown {\n return purry(rangeImplementation, args);\n}\n\nfunction rangeImplementation(start: number, end: number): number[] {\n const ret: number[] = [];\n for (let i = start; i < end; i++) {\n ret.push(i);\n }\n return ret;\n}\n", "import {\n purryOrderRulesWithArgument,\n type OrderRule,\n} from \"./internal/purryOrderRules\";\nimport type { CompareFunction } from \"./internal/types/CompareFunction\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\n\n/**\n * Calculates the rank of an item in an array based on `rules`. The rank is the position where the item would appear in the sorted array. This function provides an efficient way to determine the rank in *O(n)* time, compared to *O(nlogn)* for the equivalent `sortedIndex(sortBy(data, ...rules), item)`.\n *\n * @param data - The input array.\n * @param item - The item whose rank is to be determined.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The rank of the item in the sorted array in the range [0..data.length].\n * @signature\n * rankBy(data, item, ...rules)\n * @example\n * const DATA = [{ a: 5 }, { a: 1 }, { a: 3 }] as const;\n * rankBy(DATA, 0, prop('a')) // => 0\n * rankBy(DATA, 1, prop('a')) // => 1\n * rankBy(DATA, 2, prop('a')) // => 1\n * rankBy(DATA, 3, prop('a')) // => 2\n * @dataFirst\n * @category Array\n */\nexport function rankBy(\n data: readonly T[],\n item: T,\n ...rules: Readonly>>\n): number;\n\n/**\n * Calculates the rank of an item in an array based on `rules`. The rank is the position where the item would appear in the sorted array. This function provides an efficient way to determine the rank in *O(n)* time, compared to *O(nlogn)* for the equivalent `sortedIndex(sortBy(data, ...rules), item)`.\n *\n * @param item - The item whose rank is to be determined.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns The rank of the item in the sorted array in the range [0..data.length].\n * @signature\n * rankBy(item, ...rules)(data)\n * @example\n * const DATA = [{ a: 5 }, { a: 1 }, { a: 3 }] as const;\n * pipe(DATA, rankBy(0, prop('a'))) // => 0\n * pipe(DATA, rankBy(1, prop('a'))) // => 1\n * pipe(DATA, rankBy(2, prop('a'))) // => 1\n * pipe(DATA, rankBy(3, prop('a'))) // => 2\n * @dataLast\n * @category Array\n */\nexport function rankBy(\n item: T,\n ...rules: Readonly>>\n): (data: readonly T[]) => number;\n\nexport function rankBy(...args: readonly unknown[]): unknown {\n return purryOrderRulesWithArgument(rankByImplementation, args);\n}\n\nfunction rankByImplementation(\n data: readonly T[],\n compareFn: CompareFunction,\n targetItem: T,\n): number {\n let rank = 0;\n for (const item of data) {\n if (compareFn(targetItem, item) > 0) {\n // The rank of the item is equivalent to the number of items that would\n // come before it if the array was sorted. We assume that the\n rank += 1;\n }\n }\n return rank;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Executes a user-supplied \"reducer\" callback function on each element of the\n * array, in order, passing in the return value from the calculation on the\n * preceding element. The final result of running the reducer across all\n * elements of the array is a single value. Equivalent to\n * `Array.prototype.reduce`.\n *\n * @param data - The items to reduce.\n * @param callbackfn - A function to execute for each element in the array. Its\n * return value becomes the value of the accumulator parameter on the next\n * invocation of callbackFn. For the last invocation, the return value becomes\n * the return value of reduce().\n * @param initialValue - A value to which accumulator is initialized the first\n * time the callback is called. CallbackFn starts executing with the first value\n * in the array as currentValue.\n * @returns The value that results from running the \"reducer\" callback function\n * to completion over the entire array.\n * @signature\n * reduce(data, callbackfn, initialValue)\n * @example\n * reduce([1, 2, 3, 4, 5], (acc, x) => acc + x, 100) // => 115\n * @dataFirst\n * @category Array\n */\nexport function reduce(\n data: readonly T[],\n callbackfn: (\n previousValue: U,\n currentValue: T,\n currentIndex: number,\n data: readonly T[],\n ) => U,\n initialValue: U,\n): U;\n\n/**\n * Executes a user-supplied \"reducer\" callback function on each element of the\n * array, in order, passing in the return value from the calculation on the\n * preceding element. The final result of running the reducer across all\n * elements of the array is a single value. Equivalent to\n * `Array.prototype.reduce`.\n *\n * @param callbackfn - A function to execute for each element in the array. Its\n * return value becomes the value of the accumulator parameter on the next\n * invocation of callbackFn. For the last invocation, the return value becomes\n * the return value of reduce().\n * @param initialValue - A value to which accumulator is initialized the first\n * time the callback is called. CallbackFn starts executing with the first value\n * in the array as currentValue.\n * @returns The value that results from running the \"reducer\" callback function\n * to completion over the entire array.\n * @signature\n * reduce(fn, initialValue)(array)\n * @example\n * pipe([1, 2, 3, 4, 5], reduce((acc, x) => acc + x, 100)) // => 115\n * @dataLast\n * @category Array\n */\nexport function reduce(\n callbackfn: (\n previousValue: U,\n currentValue: T,\n currentIndex: number,\n data: readonly T[],\n ) => U,\n initialValue: U,\n): (data: readonly T[]) => U;\n\nexport function reduce(...args: readonly unknown[]): unknown {\n return purry(reduceImplementation, args);\n}\n\nconst reduceImplementation = (\n data: readonly T[],\n callbackfn: (\n previousValue: U,\n currentValue: T,\n currentIndex: number,\n data: readonly T[],\n ) => U,\n initialValue: U,\n): U =>\n // eslint-disable-next-line unicorn/no-array-reduce -- Our function wraps the built-in reduce.\n data.reduce(callbackfn, initialValue);\n", "import { purry } from \"./purry\";\n\ntype Reverse<\n T extends readonly unknown[],\n R extends readonly unknown[] = [],\n> = ReturnType<\n T extends IsNoTuple\n ? () => [...T, ...R]\n : T extends readonly [infer F, ...infer L]\n ? () => Reverse\n : () => R\n>;\n\ntype IsNoTuple = T extends readonly [unknown, ...unknown[]] ? never : T;\n\n/**\n * Reverses array.\n *\n * @param array - The array.\n * @signature\n * reverse(arr);\n * @example\n * reverse([1, 2, 3]) // [3, 2, 1]\n * @dataFirst\n * @category Array\n */\nexport function reverse(array: T): Reverse;\n\n/**\n * Reverses array.\n *\n * @signature\n * reverse()(array);\n * @example\n * reverse()([1, 2, 3]) // [3, 2, 1]\n * @dataLast\n * @category Array\n */\nexport function reverse(): (\n array: T,\n) => Reverse;\n\nexport function reverse(...args: readonly unknown[]): unknown {\n return purry(reverseImplementation, args);\n}\n\nfunction reverseImplementation(array: readonly T[]): T[] {\n // TODO [>2]: When node 18 reaches end-of-life bump target lib to ES2023+ and use `Array.prototype.toReversed` here.\n // eslint-disable-next-line unicorn/no-array-reverse -- See TODO above.\n return [...array].reverse();\n}\n", "import { withPrecision } from \"./internal/withPrecision\";\nimport { purry } from \"./purry\";\n\n/**\n * Rounds a given number to a specific precision.\n * If you'd like to round to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.round` instead, as it won't incur the additional library overhead.\n *\n * @param value - The number to round.\n * @param precision - The precision to round to. Must be an integer between -15 and 15.\n * @signature\n * round(value, precision);\n * @example\n * round(123.9876, 3) // => 123.988\n * round(483.22243, 1) // => 483.2\n * round(8541, -1) // => 8540\n * round(456789, -3) // => 457000\n * @dataFirst\n * @category Number\n */\nexport function round(value: number, precision: number): number;\n\n/**\n * Rounds a given number to a specific precision.\n * If you'd like to round to an integer (i.e. use this function with constant `precision === 0`),\n * use `Math.round` instead, as it won't incur the additional library overhead.\n *\n * @param precision - The precision to round to. Must be an integer between -15 and 15.\n * @signature\n * round(precision)(value);\n * @example\n * round(3)(123.9876) // => 123.988\n * round(1)(483.22243) // => 483.2\n * round(-1)(8541) // => 8540\n * round(-3)(456789) // => 457000\n * @dataLast\n * @category Number\n */\nexport function round(precision: number): (value: number) => number;\n\nexport function round(...args: readonly unknown[]): unknown {\n return purry(withPrecision(Math.round), args);\n}\n", "import type {\n FixedLengthArray,\n IsEqual,\n IsNever,\n NonNegativeInteger,\n Or,\n Writable,\n} from \"type-fest\";\nimport type { CoercedArray } from \"./internal/types/CoercedArray\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NTuple } from \"./internal/types/NTuple\";\nimport type { PartialArray } from \"./internal/types/PartialArray\";\nimport type { TupleParts } from \"./internal/types/TupleParts\";\nimport { purry } from \"./purry\";\n\ntype Sampled =\n Or, IsEqual> extends true\n ? // Short-circuit on trivial inputs.\n []\n : IsNever> extends true\n ? SampledPrimitive\n : IsLongerThan extends true\n ? SampledLiteral\n : // If our tuple can never fulfil the sample size the only valid sample\n // is the whole input tuple. Because it's a shallow clone we also\n // strip any readonly-ness.\n Writable;\n\n/**\n * When N is not a non-negative integer **literal** we can't use it in our\n * reconstructing logic so we fallback to a simpler definition of the output of\n * sample, which is any sub-tuple shape of T, of **any length**.\n */\ntype SampledPrimitive = [\n ...FixedSubTuples[\"required\"]>,\n // TODO: This might be accurate, but We currently have no tests that check optional elements!\n ...PartialArray[\"optional\"]>>,\n ...CoercedArray[\"item\"]>,\n ...FixedSubTuples[\"suffix\"]>,\n];\n\n/**\n * Knowing N is a non-negative literal integer we can construct all sub-tuples\n * of T that are exactly N elements long.\n */\ntype SampledLiteral =\n | Extract<\n FixedSubTuples<\n [\n ...TupleParts[\"required\"],\n // TODO: This deliberately ignores optional elements which we don't have tests for either. In order to handle optional elements we can treat the \"optional\" tuple-part as more required elements.\n // We add N elements of the `item` type to the tuple so that we\n // consider any combination possible of elements of the prefix items,\n // any amount of rest items, and suffix items.\n ...(IsNever[\"item\"]> extends true\n ? []\n : NTuple[\"item\"], N>),\n ...TupleParts[\"suffix\"],\n ]\n >,\n // This is just [unknown, unknown, ..., unknown] with N elements.\n FixedLengthArray\n >\n // In addition to all sub-tuples of length N, we also need to consider all\n // tuples where the input is shorter than N. This will contribute exactly\n // one sub-tuple at each length from the minimum length of T and up to N-1.\n | SubSampled<\n TupleParts[\"required\"],\n // TODO: This deliberately ignores optional elements which we don't have tests for either. In order to handle optional elements we can treat the \"optional\" tuple-part as more required elements.\n TupleParts[\"item\"],\n TupleParts[\"suffix\"],\n N\n >;\n\n// We want to create a union of all sub-tuples where we incrementally add an\n// additional element of the type of the rest element in the middle between the\n// prefix and suffix until we \"fill\" the tuple to size N.\ntype SubSampled<\n Prefix extends readonly unknown[],\n Item,\n Suffix extends readonly unknown[],\n N extends number,\n> =\n IsLongerThan<[...Prefix, ...Suffix], N> extends true\n ? // We need to prevent overflows in case Prefix and Suffix are already long\n // enough\n never\n : [...Prefix, ...Suffix][\"length\"] extends N\n ? never\n : [...Prefix, ...Suffix] | SubSampled<[...Prefix, Item], Item, Suffix, N>;\n\ntype IsLongerThan =\n // Checking for `undefined` is a neat trick to avoid needing to compare\n // integer literals because if N overflows the tuple then the type for that\n // element will be `undefined`. This only works for fixed tuples!\n IsEqual extends true ? false : true;\n\n// Assuming T is a fixed tuple we build all it's possible sub-tuples.\ntype FixedSubTuples = T extends readonly [infer Head, ...infer Rest]\n ? // For each element we either take it or skip it, and recurse over the rest.\n FixedSubTuples | [Head, ...FixedSubTuples]\n : [];\n\n/**\n * Returns a random subset of size `sampleSize` from `array`.\n *\n * Maintains and infers most of the typing information that could be passed\n * along to the output. This means that when using tuples, the output will be\n * a tuple too, and when using literals, those literals would be preserved.\n *\n * The items in the result are kept in the same order as they are in the input.\n * If you need to get a shuffled response you can pipe the shuffle function\n * after this one.\n *\n * @param data - The array.\n * @param sampleSize - The number of elements to take.\n * @signature\n * sample(array, sampleSize)\n * @example\n * sample([\"hello\", \"world\"], 1); // => [\"hello\"] // typed string[]\n * sample([\"hello\", \"world\"] as const, 1); // => [\"world\"] // typed [\"hello\" | \"world\"]\n * @dataFirst\n * @category Array\n */\nexport function sample(\n data: T,\n sampleSize: N,\n): Sampled;\n\n/**\n * Returns a random subset of size `sampleSize` from `array`.\n *\n * Maintains and infers most of the typing information that could be passed\n * along to the output. This means that when using tuples, the output will be\n * a tuple too, and when using literals, those literals would be preserved.\n *\n * The items in the result are kept in the same order as they are in the input.\n * If you need to get a shuffled response you can pipe the shuffle function\n * after this one.\n *\n * @param sampleSize - The number of elements to take.\n * @signature\n * sample(sampleSize)(array)\n * @example\n * sample(1)([\"hello\", \"world\"]); // => [\"hello\"] // typed string[]\n * sample(1)([\"hello\", \"world\"] as const); // => [\"world\"] // typed [\"hello\" | \"world\"]\n * @dataLast\n * @category Array\n */\nexport function sample(\n sampleSize: N,\n): (data: T) => Sampled;\n\nexport function sample(...args: readonly unknown[]): unknown {\n return purry(sampleImplementation, args);\n}\n\nfunction sampleImplementation(data: readonly T[], sampleSize: number): T[] {\n if (sampleSize <= 0) {\n // Trivial\n return [];\n }\n\n if (sampleSize >= data.length) {\n // Trivial\n return [...data];\n }\n\n // We have 2 modes of sampling, depending on the size of the sample requested.\n // 1. If sampleSize is _small_, we generate indices that we then use to\n // *EXTRACT* individual elements from the array.\n // 2. If sampleSize is _large_, we instead generate indices to *EXCLUDE* from\n // a full scan of the input array (via filtering).\n //\n // This allows us 2 optimizations that are the core of how this function\n // works:\n // 1. It is hard to generate a large number of unique indices, as the more\n // indices we generate the more likely we are to generate one that is already\n // in the set, which would require more iterations of the generation loop.\n // Capping our effective sampleSize at n/2 would put an upper limit to the\n // average number of iterations required (as a function of n).\n // 2. If sample size is small enough, we never need to actually iterate over\n // the full input array at all; instead we simply project the values we need\n // via random access into the array. This means that for sampleSize (K) less\n // than n/2, we run at O(klogk). For large sampleSize we need to iterate over\n // the full input array, but we don't need to sort the indices because we can\n // use the Set's 'has' method, so we effectively run at O(n).\n const actualSampleSize = Math.min(sampleSize, data.length - sampleSize);\n\n const sampleIndices = new Set();\n while (sampleIndices.size < actualSampleSize) {\n const randomIndex = Math.floor(Math.random() * data.length);\n sampleIndices.add(randomIndex);\n }\n\n if (sampleSize === actualSampleSize) {\n return [...sampleIndices]\n .sort((a, b) => a - b)\n .map((index) => data[index]!);\n }\n\n return data.filter((_, index) => !sampleIndices.has(index));\n}\n", "import type { UpsertProp } from \"./internal/types/UpsertProp\";\nimport { purry } from \"./purry\";\n\n/**\n * Sets the `value` at `prop` of `object`.\n *\n * To add a new property to an object, or to override its type, use `addProp`\n * instead, and to set a property within a nested object use `setPath`.\n *\n * @param obj - The target method.\n * @param prop - The property name.\n * @param value - The value to set.\n * @signature\n * set(obj, prop, value)\n * @example\n * set({ a: 1 }, 'a', 2) // => { a: 2 }\n * @dataFirst\n * @category Object\n */\nexport function set[K]>(\n obj: T,\n prop: K,\n value: V,\n): UpsertProp;\n\n/**\n * Sets the `value` at `prop` of `object`.\n *\n * To add a new property to an object, or to override it's type use `addProp`\n * instead.\n *\n * @param prop - The property name.\n * @param value - The value to set.\n * @signature\n * set(prop, value)(obj)\n * @example\n * pipe({ a: 1 }, set('a', 2)) // => { a: 2 }\n * @dataLast\n * @category Object\n */\nexport function set[K]>(\n prop: K,\n value: V,\n): (obj: T) => UpsertProp;\n\nexport function set(...args: readonly unknown[]): unknown {\n return purry(setImplementation, args);\n}\n\nconst setImplementation = [K]>(\n obj: T,\n prop: K,\n value: V,\n): UpsertProp =>\n // @ts-expect-error [ts2322] - Hard to type\n ({ ...obj, [prop]: value });\n", "import type { ValueOf } from \"type-fest\";\nimport type { RemedaTypeError } from \"./internal/types/RemedaTypeError\";\nimport { purry } from \"./purry\";\n\ntype Paths =\n | Prefix\n | (T extends object\n ? ValueOf<{\n [K in ProperKeyOf]-?: Paths;\n }>\n : RemedaTypeError<\n \"setPath\",\n \"Can only compute paths objects\",\n { type: never; metadata: T }\n >) extends infer Path\n ? // The Paths type is used to define the path param in `setPath`. In order\n // for both mutable arrays and readonly arrays to be supported we need to\n // make all results `readonly` (because mutable arrays extend readonly\n // arrays, but not the other way around). Because the result of Paths is\n // a union of arrays we need to distribute Result so that the operator is\n // applied to each member separately.\n Readonly\n : never;\n\n/**\n * Array objects have all Array.prototype keys in their \"keyof\" type, which\n * is not what we'd expect from the operator. We only want the numeric keys\n * which represent proper elements of the array.\n */\ntype ProperKeyOf = Extract<\n keyof T,\n T extends readonly unknown[] ? number : keyof T\n>;\n\ntype ValueAtPath = Path extends readonly [\n infer Head extends keyof T,\n ...infer Rest,\n]\n ? ValueAtPath\n : T;\n\n/**\n * Sets the value at `path` of `object`.\n *\n * For simple cases where the path is only one level deep, prefer `set` instead.\n *\n * @param data - The target method.\n * @param path - The array of properties.\n * @param value - The value to set.\n * @signature\n * setPath(obj, path, value)\n * @example\n * setPath({ a: { b: 1 } }, ['a', 'b'], 2) // => { a: { b: 2 } }\n * @dataFirst\n * @category Object\n */\nexport function setPath>(\n data: T,\n path: Path,\n value: ValueAtPath,\n): T;\n\n/**\n * Sets the value at `path` of `object`.\n *\n * @param path - The array of properties.\n * @param value - The value to set.\n * @signature\n * setPath(path, value)(obj)\n * @example\n * pipe({ a: { b: 1 } }, setPath(['a', 'b'], 2)) // { a: { b: 2 } }\n * @dataLast\n * @category Object\n */\nexport function setPath<\n T,\n Path extends Paths,\n // TODO [>2] -- TODO: The following eslint is solvable by inlining Value and wrapping the T parameter with `NoInfer` (e.g. `ValueAtPath, TPath>); to prevent typescript from inferring it as `unknown`. This is only available in TS 5.4, which is above what we currently support (5.1).\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- See TODO above...\n Value extends ValueAtPath,\n>(path: Path, value: Value): (data: T) => T;\n\nexport function setPath(...args: readonly unknown[]): unknown {\n return purry(setPathImplementation, args);\n}\n\nfunction setPathImplementation(\n data: unknown,\n path: readonly PropertyKey[],\n value: unknown,\n): unknown {\n const [pivot, ...rest] = path;\n if (pivot === undefined) {\n return value;\n }\n\n if (Array.isArray(data)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const copy = [...data];\n copy[pivot as number] = setPathImplementation(\n data[pivot as number],\n rest,\n value,\n );\n return copy;\n }\n\n const { [pivot]: currentValue, ...remaining } = data as Record<\n PropertyKey,\n unknown\n >;\n\n return {\n ...remaining,\n [pivot]: setPathImplementation(currentValue, rest, value),\n };\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { ReorderedArray } from \"./internal/types/ReorderedArray\";\nimport { purry } from \"./purry\";\n\n/**\n * Shuffles the input array, returning a new array with the same elements in a random order.\n *\n * @param items - The array to shuffle.\n * @signature\n * shuffle(array)\n * @example\n * shuffle([4, 2, 7, 5]) // => [7, 5, 4, 2]\n * @dataFirst\n * @category Array\n */\nexport function shuffle(\n items: T,\n): ReorderedArray;\n\n/**\n * Shuffles the input array, returning a new array with the same elements in a random order.\n *\n * @signature\n * shuffle()(array)\n * @example\n * pipe([4, 2, 7, 5], shuffle()) // => [7, 5, 4, 2]\n * @dataLast\n * @category Array\n */\nexport function shuffle(): (\n items: T,\n) => ReorderedArray;\n\nexport function shuffle(...args: readonly unknown[]): unknown {\n return purry(shuffleImplementation, args);\n}\n\nfunction shuffleImplementation(items: readonly T[]): T[] {\n const result = [...items];\n for (let index = 0; index < items.length; index++) {\n const rand = index + Math.floor(Math.random() * (items.length - index));\n const value = result[rand]!;\n result[rand] = result[index]!;\n result[index] = value;\n }\n return result;\n}\n", "/**\n * Extracts a section of a string between two indices.\n *\n * This function is a wrapper around the built-in [`String.prototype.slice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)\n * method.\n *\n * @param data - The string to extract from.\n * @param indexStart - The index of the first character to include in the\n * returned substring.\n * @param indexEnd - The index of the first character to exclude from the\n * returned substring.\n * @returns A new string containing the extracted section of the string.\n * @signature\n * sliceString(data, indexStart, indexEnd)\n * @example\n * sliceString(\"abcdefghijkl\", 1) // => `bcdefghijkl`\n * sliceString(\"abcdefghijkl\", 4, 7) // => `efg`\n * @dataFirst\n * @category String\n */\nexport function sliceString(\n data: string,\n indexStart: number,\n indexEnd?: number,\n): string;\n\n/**\n * Extracts a section of a string between two indices.\n *\n * This function is a wrapper around the built-in [`String.prototype.slice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)\n * method.\n *\n * @param indexStart - The index of the first character to include in the\n * returned substring.\n * @param indexEnd - The index of the first character to exclude from the\n * returned substring, or `undefined` for the rest of the string.\n * @returns A new string containing the extracted section of the string.\n * @signature\n * sliceString(indexStart, indexEnd)(string)\n * @example\n * sliceString(1)(\"abcdefghijkl\") // => `bcdefghijkl`\n * sliceString(4, 7)(\"abcdefghijkl\") // => `efg`\n * @dataLast\n * @category String\n */\nexport function sliceString(\n indexStart: number,\n indexEnd?: number,\n): (data: string) => string;\n\nexport function sliceString(\n dataOrIndexStart: number | string,\n indexStartOrIndexEnd?: number,\n indexEnd?: number,\n): unknown {\n return typeof dataOrIndexStart === \"string\"\n ? dataOrIndexStart.slice(indexStartOrIndexEnd, indexEnd)\n : (data: string) => data.slice(dataOrIndexStart, indexStartOrIndexEnd);\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { ReorderedArray } from \"./internal/types/ReorderedArray\";\nimport { purry } from \"./purry\";\n\n/**\n * Sorts an array. The comparator function should accept two values at a time\n * and return a negative number if the first value is smaller, a positive number\n * if it's larger, and zero if they are equal. Sorting is based on a native\n * `sort` function.\n *\n * @param items - The array to sort.\n * @param cmp - The comparator function.\n * @signature\n * sort(items, cmp)\n * @example\n * sort([4, 2, 7, 5], (a, b) => a - b); // => [2, 4, 5, 7]\n * @dataFirst\n * @category Array\n */\nexport function sort(\n items: T,\n cmp: (a: T[number], b: T[number]) => number,\n): ReorderedArray;\n\n/**\n * Sorts an array. The comparator function should accept two values at a time\n * and return a negative number if the first value is smaller, a positive number\n * if it's larger, and zero if they are equal. Sorting is based on a native\n * `sort` function.\n *\n * @param cmp - The comparator function.\n * @signature\n * sort(cmp)(items)\n * @example\n * pipe([4, 2, 7, 5], sort((a, b) => a - b)) // => [2, 4, 5, 7]\n * @dataLast\n * @category Array\n */\nexport function sort(\n cmp: (a: T[number], b: T[number]) => number,\n): (items: T) => ReorderedArray;\n\nexport function sort(...args: readonly unknown[]): unknown {\n return purry(sortImplementation, args);\n}\n\nfunction sortImplementation(\n items: T,\n cmp: (a: T[number], b: T[number]) => number,\n): ReorderedArray {\n const ret = [...items];\n ret.sort(cmp);\n return ret as ReorderedArray;\n}\n", "import { purryOrderRules, type OrderRule } from \"./internal/purryOrderRules\";\nimport type { CompareFunction } from \"./internal/types/CompareFunction\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\nimport type { ReorderedArray } from \"./internal/types/ReorderedArray\";\n\n/**\n * Sorts `data` using the provided ordering rules. The `sort` is done via the\n * native `Array.prototype.sort` but is performed on a shallow copy of the array\n * to avoid mutating the original data.\n *\n * There are several other functions that take order rules and **bypass** the\n * need to sort the array first (in *O(nlogn)* time):\n * * `firstBy` === `first(sortBy(data, ...rules))`, O(n).\n * * `takeFirstBy` === `take(sortBy(data, ...rules), k)`, O(nlogk).\n * * `dropFirstBy` === `drop(sortBy(data, ...rules), k)`, O(nlogk).\n * * `nthBy` === `sortBy(data, ...rules).at(k)`, O(n).\n * * `rankBy` === `sortedIndex(sortBy(data, ...rules), item)`, O(n).\n * Refer to the docs for more details.\n *\n * @param sortRules - A variadic array of order rules defining the sorting\n * criteria. Each order rule is a projection function that extracts a comparable\n * value from the data. Sorting is based on these extracted values using the\n * native `<` and `>` operators. Earlier rules take precedence over later ones.\n * Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns A shallow copy of the input array sorted by the provided rules.\n * @signature\n * sortBy(...rules)(data)\n * @example\n * pipe(\n * [{ a: 1 }, { a: 3 }, { a: 7 }, { a: 2 }],\n * sortBy(prop('a')),\n * ); // => [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 7 }]\n * @dataLast\n * @category Array\n */\nexport function sortBy(\n ...sortRules: Readonly>>\n): (array: T) => ReorderedArray;\n\n/**\n * Sorts `data` using the provided ordering rules. The `sort` is done via the\n * native `Array.prototype.sort` but is performed on a shallow copy of the array\n * to avoid mutating the original data.\n *\n * There are several other functions that take order rules and **bypass** the\n * need to sort the array first (in *O(nlogn)* time):\n * * `firstBy` === `first(sortBy(data, ...rules))`, O(n).\n * * `takeFirstBy` === `take(sortBy(data, ...rules), k)`, O(nlogk).\n * * `dropFirstBy` === `drop(sortBy(data, ...rules), k)`, O(nlogk).\n * * `nthBy` === `sortBy(data, ...rules).at(k)`, O(n).\n * * `rankBy` === `sortedIndex(sortBy(data, ...rules), item)`, O(n).\n * Refer to the docs for more details.\n *\n * @param array - The input array.\n * @param sortRules - A variadic array of order rules defining the sorting\n * criteria. Each order rule is a projection function that extracts a comparable\n * value from the data. Sorting is based on these extracted values using the\n * native `<` and `>` operators. Earlier rules take precedence over later ones.\n * Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns A shallow copy of the input array sorted by the provided rules.\n * @signature\n * sortBy(data, ...rules)\n * @example\n * sortBy(\n * [{ a: 1 }, { a: 3 }, { a: 7 }, { a: 2 }],\n * prop('a'),\n * ); // => [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 7 }]\n * sortBy(\n * [\n * {color: 'red', weight: 2},\n * {color: 'blue', weight: 3},\n * {color: 'green', weight: 1},\n * {color: 'purple', weight: 1},\n * ],\n * [prop('weight'), 'asc'],\n * prop('color'),\n * ); // => [\n * // {color: 'green', weight: 1},\n * // {color: 'purple', weight: 1},\n * // {color: 'red', weight: 2},\n * // {color: 'blue', weight: 3},\n * // ]\n * @dataFirst\n * @category Array\n */\nexport function sortBy(\n array: T,\n ...sortRules: Readonly>>\n): ReorderedArray;\n\nexport function sortBy(...args: readonly unknown[]): unknown {\n return purryOrderRules(sortByImplementation, args);\n}\n\nconst sortByImplementation = (\n data: readonly T[],\n compareFn: CompareFunction,\n): T[] =>\n // TODO [>2]: When node 18 reaches end-of-life bump target lib to ES2023+ and use `Array.prototype.toSorted` here.\n [...data].sort(compareFn);\n", "/**\n * A binary search implementation that finds the index at which `predicate`\n * stops returning `true` and starts returning `false` (consistently) when run\n * on the items of the array. It **assumes** that mapping the array via the\n * predicate results in the shape `[...true[], ...false[]]`. *For any other case\n * the result is unpredictable*.\n *\n * This is the base implementation of the `sortedIndex` functions which define\n * the predicate for the user, for common use-cases.\n *\n * It is similar to `findIndex`, but runs at O(logN), whereas the latter is\n * general purpose function which runs on any array and predicate, but runs at\n * O(N) time.\n */\nexport function binarySearchCutoffIndex(\n array: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): number {\n let lowIndex = 0;\n let highIndex = array.length;\n\n while (lowIndex < highIndex) {\n // eslint-disable-next-line no-bitwise -- We use bitwise operator here as a way to find the mid-point and round it down using the same operation.\n const pivotIndex = (lowIndex + highIndex) >>> 1;\n const pivot = array[pivotIndex]!;\n\n if (predicate(pivot, pivotIndex, array)) {\n lowIndex = pivotIndex + 1;\n } else {\n highIndex = pivotIndex;\n }\n }\n\n return highIndex;\n}\n", "import { purry } from \"./purry\";\nimport { binarySearchCutoffIndex } from \"./internal/binarySearchCutoffIndex\";\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order; so that `splice(sortedIndex, 0, item)` would result in\n * maintaining the array's sort-ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *first*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @returns Insertion index (In the range 0..array.length).\n * @signature\n * sortedIndex(data, item)\n * @example\n * sortedIndex(['a','a','b','c','c'], 'c') // => 3\n * @dataFirst\n * @category Array\n * @see sortedIndexBy, sortedIndexWith, sortedLastIndex, sortedLastIndexBy\n */\nexport function sortedIndex(data: readonly T[], item: T): number;\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order; so that `splice(sortedIndex, 0, item)` would result in\n * maintaining the array's sort-ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *first*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * @param item - The item to insert.\n * @returns Insertion index (In the range 0..array.length).\n * @signature\n * sortedIndex(item)(data)\n * @example\n * pipe(['a','a','b','c','c'], sortedIndex('c')) // => 3\n * @dataLast\n * @category Array\n * @see sortedIndexBy, sortedIndexWith, sortedLastIndex, sortedLastIndexBy\n */\nexport function sortedIndex(item: T): (data: readonly T[]) => number;\n\nexport function sortedIndex(...args: readonly unknown[]): unknown {\n return purry(sortedIndexImplementation, args);\n}\n\nconst sortedIndexImplementation = (array: readonly T[], item: T): number =>\n binarySearchCutoffIndex(array, (pivot) => pivot < item);\n", "import { purry } from \"./purry\";\nimport { binarySearchCutoffIndex } from \"./internal/binarySearchCutoffIndex\";\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *first*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedIndex` - like this function, but doesn't take a callbackfn.\n * * `sortedLastIndexBy` - like this function, but finds the last suitable index.\n * * `sortedLastIndex` - like `sortedIndex`, but finds the last suitable index.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * sortedIndexBy(data, item, valueFunction)\n * @example\n * sortedIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n * @dataFirst\n * @category Array\n */\nexport function sortedIndexBy(\n data: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => NonNullable,\n): number;\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *first*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedIndex` - like this function, but doesn't take a callbackfn.\n * * `sortedLastIndexBy` - like this function, but finds the last suitable index.\n * * `sortedLastIndex` - like `sortedIndex`, but finds the last suitable index.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @signature\n * sortedIndexBy(data, item, valueFunction)\n * @example\n * sortedIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n * @dataLast\n * @category Array\n */\nexport function sortedIndexBy(\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => NonNullable,\n): (data: readonly T[]) => number;\n\nexport function sortedIndexBy(...args: readonly unknown[]): unknown {\n return purry(sortedIndexByImplementation, args);\n}\n\nfunction sortedIndexByImplementation(\n data: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => NonNullable,\n): number {\n const value = valueFunction(item, undefined /* index */, data);\n return binarySearchCutoffIndex(\n data,\n (pivot, index) => valueFunction(pivot, index, data) < value,\n );\n}\n", "import { purry } from \"./purry\";\nimport { binarySearchCutoffIndex } from \"./internal/binarySearchCutoffIndex\";\n\n/**\n * Performs a **binary search** for the index of the item at which the predicate\n * stops returning `true`. This function assumes that the array is \"sorted\" in\n * regards to the predicate, meaning that running the predicate as a mapper on\n * it would result in an array `[...true[], ...false[]]`.\n * This stricter requirement from the predicate provides us 2 benefits over\n * `findIndex` which does a similar thing:\n * 1. It would run at O(logN) time instead of O(N) time.\n * 2. It always returns a value (it would return `data.length` if the\n * predicate returns `true` for all items).\n *\n * This function is the basis for all other sortedIndex functions which search\n * for a specific item in a sorted array, and it could be used to perform\n * similar efficient searches.\n * * `sortedIndex` - scans a sorted array with a binary search, find the first suitable index.\n * * `sortedIndexBy` - like `sortedIndex`, but assumes sorting is based on a callbackfn.\n * * `sortedLastIndex` - scans a sorted array with a binary search, finding the last suitable index.\n * * `sortedLastIndexBy` - like `sortedLastIndex`, but assumes sorting is based on a callbackfn.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - Array, \"sorted\" by `predicate`.\n * @param predicate - A predicate which also defines the array's order.\n * @returns Index (In the range 0..data.length).\n * @signature\n * sortedIndexWith(data, predicate)\n * @example\n * sortedIndexWith(['a','ab','abc'], (item) => item.length < 2) // => 1\n * @dataFirst\n * @category Array\n * @see findIndex, sortedIndex, sortedIndexBy, sortedLastIndex, sortedLastIndexBy\n */\nexport function sortedIndexWith(\n data: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): number;\n\n/**\n * Performs a **binary search** for the index of the item at which the predicate\n * stops returning `true`. This function assumes that the array is \"sorted\" in\n * regards to the predicate, meaning that running the predicate as a mapper on\n * it would result in an array `[...true[], ...false[]]`.\n * This stricter requirement from the predicate provides us 2 benefits over\n * `findIndex` which does a similar thing:\n * 1. It would run at O(logN) time instead of O(N) time.\n * 2. It always returns a value (it would return `data.length` if the\n * predicate returns `true` for all items).\n *\n * This function is the basis for all other sortedIndex functions which search\n * for a specific item in a sorted array, and it could be used to perform\n * similar efficient searches.\n * * `sortedIndex` - scans a sorted array with a binary search, find the first suitable index.\n * * `sortedIndexBy` - like `sortedIndex`, but assumes sorting is based on a callbackfn.\n * * `sortedLastIndex` - scans a sorted array with a binary search, finding the last suitable index.\n * * `sortedLastIndexBy` - like `sortedLastIndex`, but assumes sorting is based on a callbackfn.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param predicate - A predicate which also defines the array's order.\n * @returns Index (In the range 0..data.length).\n * @signature\n * sortedIndexWith(predicate)(data)\n * @example\n * pipe(['a','ab','abc'], sortedIndexWith((item) => item.length < 2)) // => 1\n * @dataLast\n * @category Array\n */\nexport function sortedIndexWith(\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): (data: readonly T[]) => number;\n\nexport function sortedIndexWith(...args: readonly unknown[]): unknown {\n return purry(binarySearchCutoffIndex, args);\n}\n", "import { purry } from \"./purry\";\nimport { binarySearchCutoffIndex } from \"./internal/binarySearchCutoffIndex\";\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order; so that `splice(sortedIndex, 0, item)` would result in\n * maintaining the array's sort-ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * sortedLastIndex(data, item)\n * @example\n * sortedLastIndex(['a','a','b','c','c'], 'c') // => 5\n * @dataFirst\n * @category Array\n * @see sortedIndex, sortedIndexBy, sortedIndexWith, sortedLastIndexBy\n */\nexport function sortedLastIndex(data: readonly T[], item: T): number;\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order; so that `splice(sortedIndex, 0, item)` would result in\n * maintaining the array's sort-ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * @param item - The item to insert.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * sortedLastIndex(item)(data)\n * @example\n * pipe(['a','a','b','c','c'], sortedLastIndex('c')) // => 5\n * @dataLast\n * @category Array\n * @see sortedIndex, sortedIndexBy, sortedIndexWith, sortedLastIndexBy\n */\nexport function sortedLastIndex(item: T): (data: readonly T[]) => number;\n\nexport function sortedLastIndex(...args: readonly unknown[]): unknown {\n return purry(sortedLastIndexImplementation, args);\n}\n\nconst sortedLastIndexImplementation = (\n array: readonly T[],\n item: T,\n): number =>\n binarySearchCutoffIndex(\n array,\n // The only difference between the regular implementation and the \"last\"\n // variation is that we consider the pivot with equality too, so that we\n // skip all equal values in addition to the lower ones.\n (pivot) => pivot <= item,\n );\n", "import { purry } from \"./purry\";\nimport { binarySearchCutoffIndex } from \"./internal/binarySearchCutoffIndex\";\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedLastIndex` - a simplified version of this function, without a callbackfn.\n * * `sortedIndexBy` - like this function, but returns the first suitable index.\n * * `sortedIndex` - like `sortedLastIndex` but without a callbackfn.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * sortedLastIndexBy(data, item, valueFunction)\n * @example\n * sortedLastIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n * @dataFirst\n * @category Array\n */\nexport function sortedLastIndexBy(\n data: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => NonNullable,\n): number;\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedLastIndex` - a simplified version of this function, without a callbackfn.\n * * `sortedIndexBy` - like this function, but returns the first suitable index.\n * * `sortedIndex` - like `sortedLastIndex` but without a callbackfn.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * sortedLastIndexBy(item, valueFunction)(data)\n * @example\n * pipe([{age:20},{age:22}],sortedLastIndexBy({age:21},prop('age'))) // => 1\n * @dataLast\n * @category Array\n * @see sortedIndex, sortedIndexBy, sortedIndexWith, sortedLastIndex\n */\nexport function sortedLastIndexBy(\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => NonNullable,\n): (data: readonly T[]) => number;\n\nexport function sortedLastIndexBy(...args: readonly unknown[]): unknown {\n return purry(sortedLastIndexByImplementation, args);\n}\n\nfunction sortedLastIndexByImplementation(\n array: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => NonNullable,\n): number {\n const value = valueFunction(item, undefined /* index */, array);\n return binarySearchCutoffIndex(\n array,\n // The only difference between the regular implementation and the \"last\"\n // variation is that we consider the pivot with equality too, so that we\n // skip all equal values in addition to the lower ones.\n (pivot, index) => valueFunction(pivot, index, array) <= value,\n );\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Removes elements from an array and, inserts new elements in their place.\n *\n * @param items - The array to splice.\n * @param start - The index from which to start removing elements.\n * @param deleteCount - The number of elements to remove.\n * @param replacement - The elements to insert into the array in place of the deleted elements.\n * @signature\n * splice(items, start, deleteCount, replacement)\n * @example\n * splice([1,2,3,4,5,6,7,8], 2, 3, []); //=> [1,2,6,7,8]\n * splice([1,2,3,4,5,6,7,8], 2, 3, [9, 10]); //=> [1,2,9,10,6,7,8]\n * @dataFirst\n * @category Array\n */\nexport function splice(\n items: readonly T[],\n start: number,\n deleteCount: number,\n replacement: readonly T[],\n): T[];\n\n/**\n * Removes elements from an array and, inserts new elements in their place.\n *\n * @param start - The index from which to start removing elements.\n * @param deleteCount - The number of elements to remove.\n * @param replacement - The elements to insert into the array in place of the deleted elements.\n * @signature\n * splice(start, deleteCount, replacement)(items)\n * @example\n * pipe([1,2,3,4,5,6,7,8], splice(2, 3, [])) // => [1,2,6,7,8]\n * pipe([1,2,3,4,5,6,7,8], splice(2, 3, [9, 10])) // => [1,2,9,10,6,7,8]\n * @dataLast\n * @category Array\n */\nexport function splice(\n start: number,\n deleteCount: number,\n replacement: readonly T[],\n): (items: readonly T[]) => T[];\n\nexport function splice(...args: readonly unknown[]): unknown {\n return purry(spliceImplementation, args);\n}\n\nfunction spliceImplementation(\n items: readonly T[],\n start: number,\n deleteCount: number,\n replacement: readonly T[],\n): T[] {\n // TODO [>2]: When node 18 reaches end-of-life bump target lib to ES2023+ and use `Array.prototype.toSpliced` here.\n const result = [...items];\n result.splice(start, deleteCount, ...replacement);\n return result;\n}\n", "import type {\n ArraySlice,\n IsFloat,\n NonNegative,\n Split as SplitBase,\n} from \"type-fest\";\n\n// We can use the type-fest's split **only** if all the params are literals.\n// For all other cases it would return the wrong type so we use\n// `Array.prototype.split`s return type instead.\ntype BuiltInReturnType = ReturnType;\n\ntype Split<\n S extends string,\n Separator extends string,\n N extends number | undefined = undefined,\n> = string extends S\n ? BuiltInReturnType\n : string extends Separator\n ? BuiltInReturnType\n : number extends N\n ? BuiltInReturnType\n : // TODO: We need a way to \"floor\" non-integer numbers, until then we return a lower fidelity type instead.\n IsFloat extends true\n ? BuiltInReturnType\n : N extends number\n ? ArraySlice, 0, NonNegative>\n : SplitBase;\n\n/**\n * Splits a string into an array of substrings using a separator pattern.\n *\n * This function is a wrapper around the built-in [`String.prototype.split`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)\n * method.\n *\n * @param data - The string to split.\n * @param separator - The pattern describing where each split should occur. Can\n * be a string, or a regular expression.\n * @param limit - A non-negative integer specifying a limit on the number of\n * substrings to be included in the array. If provided, splits the string at\n * each occurrence of the specified separator, but stops when limit entries have\n * been placed in the array. Any leftover text is not included in the array at\n * all. The array may contain fewer entries than limit if the end of the string\n * is reached before the limit is reached. If limit is 0, [] is returned.\n * @returns An array of strings, split at each point where the separator occurs\n * in the given string.\n * @signature\n * split(data, separator, limit);\n * @example\n * split(\"a,b,c\", \",\"); //=> [\"a\", \"b\", \"c\"]\n * split(\"a,b,c\", \",\", 2); //=> [\"a\", \"b\"]\n * split(\"a1b2c3d\", /\\d/u); //=> [\"a\", \"b\", \"c\", \"d\"]\n * @dataFirst\n * @category String\n */\nexport function split(\n data: string,\n separator: RegExp,\n limit?: number,\n): string[];\nexport function split<\n S extends string,\n Separator extends string,\n N extends number | undefined = undefined,\n>(data: S, separator: Separator, limit?: N): Split;\n\n/**\n * Splits a string into an array of substrings using a separator pattern.\n *\n * This function is a wrapper around the built-in [`String.prototype.split`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)\n * method.\n *\n * @param separator - The pattern describing where each split should occur. Can\n * be a string, or a regular expression.\n * @param limit - A non-negative integer specifying a limit on the number of\n * substrings to be included in the array. If provided, splits the string at\n * each occurrence of the specified separator, but stops when limit entries have\n * been placed in the array. Any leftover text is not included in the array at\n * all. The array may contain fewer entries than limit if the end of the string\n * is reached before the limit is reached. If limit is 0, [] is returned.\n * @returns An array of strings, split at each point where the separator occurs\n * in the given string.\n * @signature\n * split(separator, limit)(data);\n * @example\n * pipe(\"a,b,c\", split(\",\")); //=> [\"a\", \"b\", \"c\"]\n * pipe(\"a,b,c\", split(\",\", 2)); //=> [\"a\", \"b\"]\n * pipe(\"a1b2c3d\", split(/\\d/u)); //=> [\"a\", \"b\", \"c\", \"d\"]\n * @dataLast\n * @category String\n */\nexport function split(\n separator: RegExp,\n limit?: number,\n): (data: string) => string[];\nexport function split<\n S extends string,\n Separator extends string,\n N extends number | undefined = undefined,\n>(separator: Separator, limit?: N): (data: S) => Split;\n\nexport function split(\n dataOrSeparator: RegExp | string,\n separatorOrLimit?: RegExp | number | string,\n limit?: number,\n): unknown {\n return typeof separatorOrLimit === \"number\" || separatorOrLimit === undefined\n ? // dataLast\n (data: string) => data.split(dataOrSeparator, separatorOrLimit)\n : // dataFirst\n (dataOrSeparator as string).split(separatorOrLimit, limit);\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Splits a given array at a given index.\n *\n * @param array - The array to split.\n * @param index - The index to split at.\n * @signature\n * splitAt(array, index)\n * @example\n * splitAt([1, 2, 3], 1) // => [[1], [2, 3]]\n * splitAt([1, 2, 3, 4, 5], -1) // => [[1, 2, 3, 4], [5]]\n * @dataFirst\n * @category Array\n */\nexport function splitAt(array: readonly T[], index: number): [T[], T[]];\n\n/**\n * Splits a given array at a given index.\n *\n * @param index - The index to split at.\n * @signature\n * splitAt(index)(array)\n * @example\n * splitAt(1)([1, 2, 3]) // => [[1], [2, 3]]\n * splitAt(-1)([1, 2, 3, 4, 5]) // => [[1, 2, 3, 4], [5]]\n * @dataLast\n * @category Array\n */\nexport function splitAt(index: number): (array: readonly T[]) => [T[], T[]];\n\nexport function splitAt(...args: readonly unknown[]): unknown {\n return purry(splitAtImplementation, args);\n}\n\nfunction splitAtImplementation(\n array: readonly T[],\n index: number,\n): [T[], T[]] {\n const effectiveIndex = Math.max(\n Math.min(index < 0 ? array.length + index : index, array.length),\n 0,\n );\n return [array.slice(0, effectiveIndex), array.slice(effectiveIndex)];\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Splits a given array at the first index where the given predicate returns true.\n *\n * @param data - The array to split.\n * @param predicate - The predicate.\n * @signature\n * splitWhen(array, fn)\n * @example\n * splitWhen([1, 2, 3], x => x === 2) // => [[1], [2, 3]]\n * @dataFirst\n * @category Array\n */\nexport function splitWhen(\n data: readonly T[],\n predicate: (item: T, index: number, data: readonly T[]) => boolean,\n): [T[], T[]];\n\n/**\n * Splits a given array at an index where the given predicate returns true.\n *\n * @param predicate - The predicate.\n * @signature\n * splitWhen(fn)(array)\n * @example\n * splitWhen(x => x === 2)([1, 2, 3]) // => [[1], [2, 3]]\n * @dataLast\n * @category Array\n */\nexport function splitWhen(\n predicate: (item: T, index: number, data: readonly T[]) => boolean,\n): (array: readonly T[]) => [T[], T[]];\n\nexport function splitWhen(...args: readonly unknown[]): unknown {\n return purry(splitWhenImplementation, args);\n}\n\nfunction splitWhenImplementation(\n data: readonly T[],\n predicate: (item: T, index: number, data: readonly T[]) => boolean,\n): [T[], T[]] {\n const index = data.findIndex(predicate);\n return index === -1\n ? [[...data], []]\n : [data.slice(0, index), data.slice(index)];\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Determines whether a string begins with the provided prefix, and refines the\n * output type if possible.\n *\n * This function is a wrapper around the built-in [`String.prototype.startsWith`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith)\n * method, but doesn't expose the `startPosition` parameter. To check from a\n * specific position, use\n * `startsWith(sliceString(data, startPosition), prefix)`.\n *\n * @param data - The input string.\n * @param prefix - The string to check for at the beginning.\n * @signature\n * startsWith(data, prefix);\n * @example\n * startsWith(\"hello world\", \"hello\"); // true\n * startsWith(\"hello world\", \"world\"); // false\n * @dataFirst\n * @category String\n */\nexport function startsWith(\n data: T,\n prefix: string extends Prefix ? never : Prefix,\n): data is T & `${Prefix}${string}`;\nexport function startsWith(data: string, prefix: string): boolean;\n\n/**\n * Determines whether a string begins with the provided prefix, and refines the\n * output type if possible.\n *\n * This function is a wrapper around the built-in [`String.prototype.startsWith`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith)\n * method, but doesn't expose the `startPosition` parameter. To check from a\n * specific position, use\n * `startsWith(sliceString(data, startPosition), prefix)`.\n *\n * @param prefix - The string to check for at the beginning.\n * @signature\n * startsWith(prefix)(data);\n * @example\n * pipe(\"hello world\", startsWith(\"hello\")); // true\n * pipe(\"hello world\", startsWith(\"world\")); // false\n * @dataLast\n * @category String\n */\nexport function startsWith(\n prefix: string extends Prefix ? never : Prefix,\n): (data: T) => data is T & `${Prefix}${string}`;\nexport function startsWith(prefix: string): (data: string) => boolean;\n\nexport function startsWith(...args: readonly unknown[]): unknown {\n return purry(startsWithImplementation, args);\n}\n\nconst startsWithImplementation = (data: string, prefix: string): boolean =>\n data.startsWith(prefix);\n", "import type { IsNumericLiteral, IsStringLiteral } from \"type-fest\";\n\n// This is the most efficient way to check an arbitrary string if it is a simple\n// non-negative integer. We use character ranges instead of the `\\d` character\n// class to avoid matching non-ascii digits (e.g. Arabic-Indic digits), while\n// maintaining that the regular expression supports unicode.\nconst NON_NEGATIVE_INTEGER_RE = /^(?:0|[1-9][0-9]*)$/u;\n\ntype StringToPath =\n // We can only compute the path type for literals that TypeScript can\n // break down further into parts.\n IsStringLiteral extends true ? StringToPathImpl : (string | number)[];\n\ntype StringToPathImpl =\n // We start by checking the 2 quoted variants of the square bracket access\n // syntax. We do this in a single check and not in a subsequent check that\n // would only extract the quoted part so that we can catch cases where the\n // quoted part itself contains square brackets. This allows TypeScript to be\n // \"greedy\" about what it infers into Quoted and DoubleQuoted.\n S extends `${infer Head}['${infer Quoted}']${infer Tail}`\n ? [...StringToPath, Quoted, ...StringToPath]\n : S extends `${infer Head}[\"${infer DoubleQuoted}\"]${infer Tail}`\n ? [...StringToPath, DoubleQuoted, ...StringToPath]\n : // If we have an unquoted property access we also need to run the\n // contents recursively too (unlike the quoted variants above).\n S extends `${infer Head}[${infer Unquoted}]${infer Tail}`\n ? [\n ...StringToPath,\n ...StringToPath,\n ...StringToPath,\n ]\n : // Finally, we process any dots one after the other from left to\n // right. TypeScript will be non-greedy here, putting *everything*\n // after the first dot into the Tail.\n S extends `${infer Head}.${infer Tail}`\n ? [...StringToPath, ...StringToPath]\n : // Finally we need to handle the few cases of simple literals.\n \"\" extends S\n ? // There are some edge-cases where Lodash will try to access an\n // empty property, but those seem nonsensical in practice so we\n // prefer just skipping these cases.\n []\n : // We differ from Lodash in the way we handle numbers. Lodash\n // returns everything in the path as a string, and relies on JS to\n // coerce array accessors to numbers (or the other way around in\n // practice, e.g., `myArray[123] === myArray['123']`), but from a\n // typing perspective the two are not the same and we need the\n // path to be accurate about it.\n S extends `${infer N extends number}`\n ? [\n // TypeScript considers \" 123 \" to still extend `${number}`,\n // but would type is as `string` instead of a literal. We\n // can use that fact to make sure we only consider simple\n // number literals as numbers, and take the rest as strings.\n IsNumericLiteral extends true ? N : S,\n ]\n : // This simplest form of a path is just a single string literal.\n [S];\n\n/**\n * A utility to allow JSONPath-like strings to be used in other utilities which\n * take an array of path segments as input (e.g. `prop`, `setPath`, etc...).\n * The main purpose of this utility is to act as a bridge between the runtime\n * implementation that converts the path to an array, and the type-system that\n * parses the path string **type** into an array **type**. This type allows us\n * to return fine-grained types and to enforce correctness at the type-level.\n *\n * We **discourage** using this utility for new code. This utility is for legacy\n * code that already contains path strings (which are accepted by Lodash). We\n * strongly recommend using *path arrays* instead as they provide better\n * developer experience via significantly faster type-checking, fine-grained\n * error messages, and automatic typeahead suggestions for each segment of the\n * path.\n *\n * *There are a bunch of limitations to this utility derived from the\n * limitations of the type itself, these are usually edge-cases around deeply\n * nested paths, escaping, whitespaces, and empty segments. This is true even\n * in cases where the runtime implementation can better handle them, this is\n * intentional. See the tests for this utility for more details and the\n * expected outputs*.\n *\n * @param path - A string path.\n * @signature\n * stringToPath(path)\n * @example\n * stringToPath('a.b[0].c') // => ['a', 'b', 0, 'c']\n * @dataFirst\n * @category Utility\n */\nexport function stringToPath(\n path: Path,\n): StringToPath {\n const result: (string | number)[] = [];\n\n // There are four possible ways to define a path segment::\n // - `propName`: is used to parse dot-notation paths, e.g. 'foo.bar.baz', we\n // allow multiple sequential dots because our type allows them, but they are\n // semantically meaningless. Note that this would also allow strings starting\n // with a dot, e.g. `.foo`, this is fine because the dot itself is just used\n // as a separator and is ignored in the final path.\n // - `quoted`, `doubleQuoted`: used within square bracket notation to prevent\n // any recursive parsing of their contents. As for the type itself, we only\n // allow quote symbols to appear immediately after the opening square bracket\n // and immediately before the closing square bracket, this allows us to handle\n // more gracefully cases where a quote symbol might appear within the quoted\n // part.\n // - `unquoted`: If the contents of the square brackets are not quoted they\n // will match this group (this is why the order is important here!). Contents\n // of this group get parsed *recursively*.\n //\n // NOTE: We limit all repeats to 4096 characters to avoid a possible attack\n // vector when the input to this function is controlled by the user. This is\n // due to a DoS timing attack because regex backtracking is non-linear.\n // @see: https://codeql.github.com/codeql-query-help/javascript/js-polynomial-redos/\n const pathSegmentRe =\n /\\.{0,4096}(?[^.[\\]]+)|\\['(?.{0,4096}?)'\\]|\\[\"(?.{0,4096}?)\"\\]|\\[(?.{0,4096}?)\\]/uy;\n\n let match: RegExpExecArray | null;\n while ((match = pathSegmentRe.exec(path)) !== null) {\n const { propName, quoted, doubleQuoted, unquoted } = match.groups!;\n\n if (unquoted !== undefined) {\n result.push(...stringToPath(unquoted));\n continue;\n }\n\n result.push(\n propName === undefined\n ? (quoted ?? doubleQuoted!)\n : // The only way to differentiate between array indices and properties\n // is to check if the property is a non-negative integer. In those\n // cases we perform the conversion (unlike Lodash).\n NON_NEGATIVE_INTEGER_RE.test(propName)\n ? Number(propName)\n : propName,\n );\n }\n\n return result;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Subtracts two numbers.\n *\n * @param value - The number.\n * @param subtrahend - The number to subtract from the value.\n * @signature\n * subtract(value, subtrahend);\n * @example\n * subtract(10, 5) // => 5\n * subtract(10, -5) // => 15\n * reduce([1, 2, 3, 4], subtract, 20) // => 10\n * @dataFirst\n * @category Number\n */\nexport function subtract(value: bigint, subtrahend: bigint): bigint;\nexport function subtract(value: number, subtrahend: number): number;\n\n/**\n * Subtracts two numbers.\n *\n * @param subtrahend - The number to subtract from the value.\n * @signature\n * subtract(subtrahend)(value);\n * @example\n * subtract(5)(10) // => 5\n * subtract(-5)(10) // => 15\n * map([1, 2, 3, 4], subtract(1)) // => [0, 1, 2, 3]\n * @dataLast\n * @category Number\n */\nexport function subtract(subtrahend: bigint): (value: bigint) => bigint;\nexport function subtract(subtrahend: number): (value: number) => number;\n\nexport function subtract(...args: readonly unknown[]): unknown {\n return purry(subtractImplementation, args);\n}\n\n// The implementation only uses `number` types, but that's just because it's\n// hard to tell typescript that both value and subtrahend would be of the same\n// type.\nconst subtractImplementation = (value: number, subtrahend: number): number =>\n value - subtrahend;\n", "import { purry } from \"./purry\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\n\ntype SumBy<\n T extends IterableContainer,\n U extends bigint | number,\n> = T extends readonly []\n ? 0\n : T extends readonly [unknown, ...(readonly unknown[])]\n ? U\n : U | 0;\n\n/**\n * Returns the sum of the elements of an array using the provided mapper.\n *\n * Works for both `number` and `bigint` mappers, but not mappers that return both\n * types.\n *\n * IMPORTANT: The result for empty arrays would be 0 (`number`) regardless of\n * the type of the mapper; to avoid adding this to the return type for cases\n * where the array is known to be non-empty you can use `hasAtLeast` or\n * `isEmpty` to guard against this case.\n *\n * @param callbackfn - Predicate function.\n * @signature\n * sumBy(fn)(array)\n * @example\n * pipe(\n * [{a: 5}, {a: 1}, {a: 3}],\n * sumBy(x => x.a)\n * ) // 9\n *\n * pipe(\n * [{a: 5n}, {a: 1n}, {a: 3n}],\n * sumBy(x => x.a)\n * ) // 9n\n * @dataLast\n * @category Array\n */\nexport function sumBy(\n callbackfn: (value: T[number], index: number, data: T) => number,\n): (items: T) => SumBy;\nexport function sumBy(\n callbackfn: (value: T[number], index: number, data: T) => bigint,\n): (items: T) => SumBy;\n\n/**\n * Returns the sum of the elements of an array using the provided mapper.\n *\n * Works for both `number` and `bigint` mappers, but not mappers that can return both\n * types.\n *\n * IMPORTANT: The result for empty arrays would be 0 (`number`) regardless of\n * the type of the mapper; to avoid adding this to the return type for cases\n * where the array is known to be non-empty you can use `hasAtLeast` or\n * `isEmpty` to guard against this case.\n *\n * @param data - The array.\n * @param callbackfn - Predicate function.\n * @signature\n * sumBy(array, fn)\n * @example\n * sumBy(\n * [{a: 5}, {a: 1}, {a: 3}],\n * x => x.a\n * ) // 9\n * sumBy(\n * [{a: 5n}, {a: 1n}, {a: 3n}],\n * x => x.a\n * ) // 9n\n * @dataFirst\n * @category Array\n */\nexport function sumBy(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => number,\n): SumBy;\nexport function sumBy(\n data: T,\n callbackfn: (value: T[number], index: number, data: T) => bigint,\n): SumBy;\n\nexport function sumBy(...args: readonly unknown[]): unknown {\n return purry(sumByImplementation, args);\n}\n\nconst sumByImplementation = (\n array: readonly T[],\n callbackfn: (value: T, index: number, data: readonly T[]) => bigint | number,\n): bigint | number => {\n const iter = array.entries();\n\n const firstEntry = iter.next();\n if (\"done\" in firstEntry && firstEntry.done) {\n return 0;\n }\n\n const {\n value: [, firstValue],\n } = firstEntry;\n let sum = callbackfn(firstValue, 0, array);\n for (const [index, item] of iter) {\n const summand = callbackfn(item, index, array);\n\n // @ts-expect-error [ts2365] -- Typescript can't infer that all elements will be a number of the same type.\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n sum += summand;\n }\n return sum;\n};\n", "import type { And, IsEqual, Join } from \"type-fest\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Difference =\n TupleOfLength extends [...infer U, ...TupleOfLength]\n ? U[\"length\"]\n : never;\n\ntype isLessThan =\n IsEqual extends true\n ? false\n : 0 extends A\n ? true\n : 0 extends B\n ? false\n : isLessThan, Difference>;\n\ntype TupleOfLength<\n L extends number,\n T extends IterableContainer = [],\n> = T[\"length\"] extends L ? T : TupleOfLength;\n\ntype IsNonNegative = number extends T\n ? false\n : `${T}` extends `-${string}`\n ? false\n : true;\n\ntype CharactersTuple = string extends T\n ? string[]\n : T extends `${infer C}${infer R}`\n ? [C, ...CharactersTuple]\n : [];\n\ntype SwapArrayInternal<\n T extends IterableContainer,\n Index1 extends number,\n Index2 extends number,\n Position extends readonly unknown[] = [],\n Original extends IterableContainer = T,\n> = T extends readonly [infer AtPosition, ...infer Rest]\n ? [\n Position[\"length\"] extends Index1\n ? Original[Index2]\n : Position[\"length\"] extends Index2\n ? Original[Index1]\n : AtPosition,\n ...SwapArrayInternal<\n Rest,\n Index1,\n Index2,\n [unknown, ...Position],\n Original\n >,\n ]\n : T;\n\ntype SwapString = Join<\n SwapArray, K1, K2>,\n \"\"\n>;\n\ntype SwapArray<\n T extends IterableContainer,\n K1 extends number,\n K2 extends number,\n> =\n And, IsNonNegative> extends true\n ? And, isLessThan> extends true\n ? SwapArrayInternal\n : // If the indices are not within the input arrays range the result would\n // be trivially the same as the input array.\n T\n : // TODO [>3]: Because of limitations on the typescript version used in Remeda we can't build a proper Absolute number type so we can't implement proper typing for negative indices and have to opt for a less-strict type instead. Check out the history for the PR that introduced this TODO to see how it could be implemented.\n T[number][];\n\ntype SwappedIndices<\n T extends IterableContainer | string,\n K1 extends number,\n K2 extends number,\n> = T extends string\n ? SwapString\n : T extends IterableContainer\n ? SwapArray\n : never;\n\n/**\n * Swaps the positions of two elements in an array or string at the provided indices.\n *\n * Negative indices are supported and would be treated as an offset from the end of the array. The resulting type thought would be less strict than when using positive indices.\n *\n * If either index is out of bounds the result would be a shallow copy of the input, as-is.\n *\n * @param data - The item to be manipulated. This can be an array, or a string.\n * @param index1 - The first index.\n * @param index2 - The second index.\n * @returns Returns the manipulated array or string.\n * @signature\n * swapIndices(data, index1, index2)\n * @example\n * swapIndices(['a', 'b', 'c'], 0, 1) // => ['b', 'a', 'c']\n * swapIndices(['a', 'b', 'c'], 1, -1) // => ['a', 'c', 'b']\n * swapIndices('abc', 0, 1) // => 'bac'\n * @dataFirst\n * @category Array\n */\nexport function swapIndices<\n T extends IterableContainer | string,\n K1 extends number,\n K2 extends number,\n>(data: T, index1: K1, index2: K2): SwappedIndices;\n\n/**\n * Swaps the positions of two elements in an array or string at the provided indices.\n *\n * Negative indices are supported and would be treated as an offset from the end of the array. The resulting type thought would be less strict than when using positive indices.\n *\n * If either index is out of bounds the result would be a shallow copy of the input, as-is.\n *\n * @param index1 - The first index.\n * @param index2 - The second index.\n * @returns Returns the manipulated array or string.\n * @signature\n * swapIndices(index1, index2)(data)\n * @example\n * swapIndices(0, 1)(['a', 'b', 'c']) // => ['b', 'a', 'c']\n * swapIndices(0, -1)('abc') // => 'cba'\n * @dataLast\n * @category Array\n */\nexport function swapIndices(\n index1: K1,\n index2: K2,\n): (data: T) => SwappedIndices;\n\nexport function swapIndices(...args: readonly unknown[]): unknown {\n return purry(swapIndicesImplementation, args);\n}\n\nconst swapIndicesImplementation = (\n data: IterableContainer | string,\n index1: number,\n index2: number,\n): unknown =>\n typeof data === \"string\"\n ? // eslint-disable-next-line @typescript-eslint/no-misused-spread -- TODO: I'm not sure what the right way to split the string here, there are multiple \"correct\" answers and each one is meaningfully different: https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2521\n swapArray([...data], index1, index2).join(\"\")\n : swapArray(data, index1, index2);\n\nfunction swapArray(\n data: readonly unknown[],\n index1: number,\n index2: number,\n): unknown[] {\n const result = [...data];\n\n if (Number.isNaN(index1) || Number.isNaN(index2)) {\n return result;\n }\n\n const positiveIndexA = index1 < 0 ? data.length + index1 : index1;\n const positiveIndexB = index2 < 0 ? data.length + index2 : index2;\n\n if (positiveIndexA < 0 || positiveIndexA > data.length) {\n return result;\n }\n\n if (positiveIndexB < 0 || positiveIndexB > data.length) {\n return result;\n }\n\n result[positiveIndexA] = data[positiveIndexB];\n result[positiveIndexB] = data[positiveIndexA];\n\n return result;\n}\n", "import { purry } from \"./purry\";\n\ntype SwappedProps = {\n [K in keyof T]: T[K1 extends K ? K2 : K2 extends K ? K1 : K];\n};\n\n/**\n * Swaps the values of two properties in an object based on the provided keys.\n *\n * @param data - The object to be manipulated.\n * @param key1 - The first property key.\n * @param key2 - The second property key.\n * @returns Returns the manipulated object.\n * @signature\n * swapProps(data, key1, key2)\n * @example\n * swapProps({a: 1, b: 2, c: 3}, 'a', 'b') // => {a: 2, b: 1, c: 3}\n * @dataFirst\n * @category Object\n */\nexport function swapProps<\n T extends object,\n K1 extends keyof T,\n K2 extends keyof T,\n>(data: T, key1: K1, key2: K2): SwappedProps;\n\n/**\n * Swaps the values of two properties in an object based on the provided keys.\n *\n * @param key1 - The first property key.\n * @param key2 - The second property key.\n * @returns Returns the manipulated object.\n * @signature\n * swapProps(key1, key2)(data)\n * @example\n * swapProps('a', 'b')({a: 1, b: 2, c: 3}) // => {a: 2, b: 1, c: 3}\n * @dataLast\n * @category Object\n */\nexport function swapProps<\n T extends object,\n K1 extends keyof T,\n K2 extends keyof T,\n>(key1: K1, key2: K2): (data: T) => SwappedProps;\n\nexport function swapProps(...args: readonly unknown[]): unknown {\n return purry(swapPropsImplementation, args);\n}\n\nfunction swapPropsImplementation(\n obj: T,\n key1: keyof T,\n key2: keyof T,\n): Record {\n const { [key1]: value1, [key2]: value2 } = obj;\n return {\n ...obj,\n [key1]: value2,\n [key2]: value1,\n };\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { lazyEmptyEvaluator } from \"./internal/utilityEvaluators\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns the first `n` elements of `array`.\n *\n * @param array - The array.\n * @param n - The number of elements to take.\n * @signature\n * take(array, n)\n * @example\n * take([1, 2, 3, 4, 3, 2, 1], 3) // => [1, 2, 3]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function take(\n array: T,\n n: number,\n): T[number][];\n\n/**\n * Returns the first `n` elements of `array`.\n *\n * @param n - The number of elements to take.\n * @signature\n * take(n)(array)\n * @example\n * pipe([1, 2, 3, 4, 3, 2, 1], take(3)) // => [1, 2, 3]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function take(\n n: number,\n): (array: T) => T[number][];\n\nexport function take(...args: readonly unknown[]): unknown {\n return purry(takeImplementation, args, lazyImplementation);\n}\n\nconst takeImplementation = (\n array: T,\n n: number,\n): T[number][] => (n < 0 ? [] : array.slice(0, n));\n\nfunction lazyImplementation(n: number): LazyEvaluator {\n if (n <= 0) {\n return lazyEmptyEvaluator;\n }\n\n let remaining = n;\n return (value) => {\n remaining -= 1;\n return { done: remaining <= 0, hasNext: true, next: value };\n };\n}\n", "import { heapify, heapMaybeInsert } from \"./internal/heap\";\nimport {\n purryOrderRulesWithArgument,\n type OrderRule,\n} from \"./internal/purryOrderRules\";\nimport type { CompareFunction } from \"./internal/types/CompareFunction\";\nimport type { NonEmptyArray } from \"./internal/types/NonEmptyArray\";\n\n/**\n * Take the first `n` items from `data` based on the provided ordering criteria. This allows you to avoid sorting the array before taking the items. The complexity of this function is *O(Nlogn)* where `N` is the length of the array.\n *\n * For the opposite operation (to drop `n` elements) see `dropFirstBy`.\n *\n * @param data - The input array.\n * @param n - The number of items to take. If `n` is non-positive no items would be returned, if `n` is bigger then data.length a *clone* of `data` would be returned.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns A subset of the input array.\n * @signature\n * takeFirstBy(data, n, ...rules);\n * @example\n * takeFirstBy(['aa', 'aaaa', 'a', 'aaa'], 2, x => x.length); // => ['a', 'aa']\n * @dataFirst\n * @category Array\n */\nexport function takeFirstBy(\n data: readonly T[],\n n: number,\n ...rules: Readonly>>\n): T[];\n\n/**\n * Take the first `n` items from `data` based on the provided ordering criteria. This allows you to avoid sorting the array before taking the items. The complexity of this function is *O(Nlogn)* where `N` is the length of the array.\n *\n * For the opposite operation (to drop `n` elements) see `dropFirstBy`.\n *\n * @param n - The number of items to take. If `n` is non-positive no items would be returned, if `n` is bigger then data.length a *clone* of `data` would be returned.\n * @param rules - A variadic array of order rules defining the sorting criteria. Each order rule is a projection function that extracts a comparable value from the data. Sorting is based on these extracted values using the native `<` and `>` operators. Earlier rules take precedence over later ones. Use the syntax `[projection, \"desc\"]` for descending order.\n * @returns A subset of the input array.\n * @signature\n * takeFirstBy(n, ...rules)(data);\n * @example\n * pipe(['aa', 'aaaa', 'a', 'aaa'], takeFirstBy(2, x => x.length)); // => ['a', 'aa']\n * @dataLast\n * @category Array\n */\nexport function takeFirstBy(\n n: number,\n ...rules: Readonly>>\n): (data: readonly T[]) => T[];\n\nexport function takeFirstBy(...args: readonly unknown[]): unknown {\n return purryOrderRulesWithArgument(takeFirstByImplementation, args);\n}\n\nfunction takeFirstByImplementation(\n data: readonly T[],\n compareFn: CompareFunction,\n n: number,\n): T[] {\n if (n <= 0) {\n return [];\n }\n\n if (n >= data.length) {\n return [...data];\n }\n\n const heap = data.slice(0, n);\n heapify(heap, compareFn);\n\n const rest = data.slice(n);\n for (const item of rest) {\n heapMaybeInsert(heap, compareFn, item);\n }\n\n return heap;\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Takes the last `n` elements from the `array`.\n *\n * @param array - The target array.\n * @param n - The number of elements to take.\n * @signature\n * takeLast(array, n)\n * @example\n * takeLast([1, 2, 3, 4, 5], 2) // => [4, 5]\n * @dataFirst\n * @category Array\n */\nexport function takeLast(\n array: T,\n n: number,\n): T[number][];\n\n/**\n * Take the last `n` elements from the `array`.\n *\n * @param n - The number of elements to take.\n * @signature\n * takeLast(n)(array)\n * @example\n * takeLast(2)([1, 2, 3, 4, 5]) // => [4, 5]\n * @dataLast\n * @category Array\n */\nexport function takeLast(\n n: number,\n): (array: T) => T[number][];\n\nexport function takeLast(...args: readonly unknown[]): unknown {\n return purry(takeLastImplementation, args);\n}\n\nconst takeLastImplementation = (\n array: T,\n n: number,\n): T[number][] => (n > 0 ? array.slice(Math.max(0, array.length - n)) : []);\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns elements from the end of the array until the predicate returns false.\n * The returned elements will be in the same order as in the original array.\n *\n * @param data - The array.\n * @param predicate - The predicate.\n * @signature\n * takeLastWhile(data, predicate)\n * @example\n * takeLastWhile([1, 2, 10, 3, 4, 5], x => x < 10) // => [3, 4, 5]\n * @dataFirst\n * @category Array\n */\nexport function takeLastWhile(\n data: T,\n predicate: (item: T[number], index: number, data: T) => item is S,\n): S[];\nexport function takeLastWhile(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][];\n\n/**\n * Returns elements from the end of the array until the predicate returns false.\n * The returned elements will be in the same order as in the original array.\n *\n * @param predicate - The predicate.\n * @signature\n * takeLastWhile(predicate)(data)\n * @example\n * pipe([1, 2, 10, 3, 4, 5], takeLastWhile(x => x < 10)) // => [3, 4, 5]\n * @dataLast\n * @category Array\n */\nexport function takeLastWhile(\n predicate: (item: T[number], index: number, data: T) => item is S,\n): (array: T) => S[];\nexport function takeLastWhile(\n predicate: (item: T[number], index: number, data: T) => boolean,\n): (data: T) => T[number][];\n\nexport function takeLastWhile(...args: readonly unknown[]): unknown {\n return purry(takeLastWhileImplementation, args);\n}\n\nfunction takeLastWhileImplementation(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][] {\n for (let i = data.length - 1; i >= 0; i--) {\n if (!predicate(data[i], i, data)) {\n return data.slice(i + 1);\n }\n }\n return [...data];\n}\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns elements from the array until predicate returns false.\n *\n * @param data - The array.\n * @param predicate - The predicate.\n * @signature\n * takeWhile(data, predicate)\n * @example\n * takeWhile([1, 2, 3, 4, 3, 2, 1], x => x !== 4) // => [1, 2, 3]\n * @dataFirst\n * @category Array\n */\nexport function takeWhile(\n data: T,\n predicate: (item: T[number], index: number, data: T) => item is S,\n): S[];\nexport function takeWhile(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][];\n\n/**\n * Returns elements from the array until predicate returns false.\n *\n * @param predicate - The predicate.\n * @signature\n * takeWhile(predicate)(data)\n * @example\n * pipe([1, 2, 3, 4, 3, 2, 1], takeWhile(x => x !== 4)) // => [1, 2, 3]\n * @dataLast\n * @category Array\n */\nexport function takeWhile(\n predicate: (item: T[number], index: number, data: T) => item is S,\n): (array: T) => S[];\nexport function takeWhile(\n predicate: (item: T[number], index: number, data: T) => boolean,\n): (array: T) => T[number][];\n\nexport function takeWhile(...args: readonly unknown[]): unknown {\n return purry(takeWhileImplementation, args);\n}\n\nfunction takeWhileImplementation(\n data: T,\n predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][] {\n const ret: T[number][] = [];\n for (const [index, item] of data.entries()) {\n if (!predicate(item, index, data)) {\n break;\n }\n ret.push(item);\n }\n return ret;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Calls the given function with the given value, then returns the given value.\n * The return value of the provided function is ignored.\n *\n * This allows \"tapping into\" a function sequence in a pipe, to perform side\n * effects on intermediate results.\n *\n * @param value - The value to pass into the function.\n * @param fn - The function to call.\n * @signature\n * tap(value, fn)\n * @example\n * tap(\"foo\", console.log) // => \"foo\"\n * @dataFirst\n * @category Other\n */\nexport function tap(value: T, fn: (value: T) => void): T;\n\n/**\n * Calls the given function with the given value, then returns the given value.\n * The return value of the provided function is ignored.\n *\n * This allows \"tapping into\" a function sequence in a pipe, to perform side\n * effects on intermediate results.\n *\n * @param fn - The function to call.\n * @signature\n * tap(fn)(value)\n * @example\n * pipe(\n * [-5, -1, 2, 3],\n * filter(n => n > 0),\n * tap(console.log), // prints [2, 3]\n * map(n => n * 2)\n * ) // => [4, 6]\n * @dataLast\n * @category Other\n */\nexport function tap<\n T,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- TODO: This is solvable by inlining F and wrapping the T parameter with `NoInfer` (e.g. `(value: NoInfer) => unknown`); to prevent typescript from inferring it as `unknown`. This is only available in TS 5.4, which is above what we currently support (5.1).\n F extends (value: T) => unknown,\n>(fn: F): (value: T) => T;\n\nexport function tap(...args: readonly unknown[]): unknown {\n return purry(tapImplementation, args);\n}\n\nfunction tapImplementation(value: T, fn: (value: T) => void): T {\n fn(value);\n return value;\n}\n", "import type { GreaterThan } from \"type-fest\";\nimport { purry } from \"./purry\";\n\n// This number was picked by trial-and-error until typescript stops failing with\n// \"Type instantiation is excessively deep and possibly infinite. (ts2589)\".\n// See the type tests for more information.\ntype MAX_LITERAL_SIZE = 46;\n\ntype TimesArray<\n T,\n N extends number,\n Iteration extends readonly unknown[] = [],\n> = number extends N\n ? // N is not a literal number, we can't deduce the type\n T[]\n : `${N}` extends `-${number}`\n ? // N is non-positive, the mapper will never run\n []\n : `${N}` extends `${infer K extends number}.${number}`\n ? // N is not an integer, we \"floor\" the number.\n TimesArray\n : GreaterThan extends true\n ? // We can't build a literal tuple beyond this size, after that we\n // can't add more items to the tuple so we add a rest element instead.\n [...TimesArray, ...T[]]\n : N extends Iteration[\"length\"]\n ? // We finished building the output tuple\n []\n : // Add another item to the tuple and recurse.\n [T, ...TimesArray];\n\n/**\n * Calls an input function `n` times, returning an array containing the results\n * of those function calls.\n *\n * `fn` is passed one argument: The current value of `n`, which begins at `0`\n * and is gradually incremented to `n - 1`.\n *\n * @param count - A value between `0` and `n - 1`. Increments after each\n * function call.\n * @param fn - The function to invoke. Passed one argument, the current value of\n * `n`.\n * @returns An array containing the return values of all calls to `fn`.\n * @signature\n * times(count, fn)\n * @example\n * times(5, identity()); //=> [0, 1, 2, 3, 4]\n * @dataFirst\n * @category Array\n */\nexport function times(\n count: N,\n fn: (index: number) => T,\n): TimesArray;\n\n/**\n * Calls an input function `n` times, returning an array containing the results\n * of those function calls.\n *\n * `fn` is passed one argument: The current value of `n`, which begins at `0`\n * and is gradually incremented to `n - 1`.\n *\n * @param fn - The function to invoke. Passed one argument, the current value of\n * `n`.\n * @returns An array containing the return values of all calls to `fn`.\n * @signature\n * times(fn)(count)\n * @example\n * times(identity())(5); //=> [0, 1, 2, 3, 4]\n * @dataLast\n * @category Array\n */\nexport function times(\n fn: (index: number) => T,\n): (count: N) => TimesArray;\n\nexport function times(...args: readonly unknown[]): unknown {\n return purry(timesImplementation, args);\n}\n\nfunction timesImplementation(count: number, fn: (index: number) => T): T[] {\n if (count < 1) {\n // We prefer to return trivial results on trivial inputs vs throwing errors.\n return [];\n }\n\n // Non-integer numbers would cause `new Array` to throw, but it makes more\n // sense to simply round them down to the nearest integer instead; but\n // rounding has some performance implications so we only do it when we have to\n const length = Number.isInteger(count) ? count : Math.floor(count);\n\n // eslint-disable-next-line unicorn/no-new-array -- This is the most efficient way to create the array, check out the benchmarks in the PR that added this comment.\n const res = new Array(length);\n\n for (let i = 0; i < length; i++) {\n res[i] = fn(i);\n }\n\n return res;\n}\n", "import type { Words } from \"type-fest\";\n\n// @see https://github.com/sindresorhus/type-fest/blob/main/source/internal/characters.d.ts#L5-L31\nconst WHITESPACE = [\n \"\\u{9}\", // '\\t'\n \"\\u{A}\", // '\\n'\n \"\\u{B}\", // '\\v'\n \"\\u{C}\", // '\\f'\n \"\\u{D}\", // '\\r'\n \"\\u{20}\", // ' '\n \"\\u{85}\",\n \"\\u{A0}\",\n \"\\u{1680}\",\n \"\\u{2000}\",\n \"\\u{2001}\",\n \"\\u{2002}\",\n \"\\u{2003}\",\n \"\\u{2004}\",\n \"\\u{2005}\",\n \"\\u{2006}\",\n \"\\u{2007}\",\n \"\\u{2008}\",\n \"\\u{2009}\",\n \"\\u{200A}\",\n \"\\u{2028}\",\n \"\\u{2029}\",\n \"\\u{202F}\",\n \"\\u{205F}\",\n \"\\u{3000}\",\n \"\\u{FEFF}\",\n] as const;\n\n// @see https://github.com/sindresorhus/type-fest/blob/main/source/internal/characters.d.ts#L33\nconst WORD_SEPARATORS = new Set([\"-\", \"_\", ...WHITESPACE]);\n\nexport const words = (\n data: S,\n): string extends S ? string[] : Words => {\n const results: string[] = [];\n let word = \"\";\n\n const flush = (): void => {\n if (word.length > 0) {\n results.push(word);\n word = \"\";\n }\n };\n\n for (const character of data) {\n if (WORD_SEPARATORS.has(character)) {\n // Separator encountered; flush the current word & exclude the separator.\n flush();\n continue;\n }\n\n // Detect transitions:\n // 1. Lowercase to uppercase (e.g., \"helloWorld\")\n if (/[a-z]$/u.test(word) && /[A-Z]/u.test(character)) {\n flush();\n }\n // 2. Uppercase to lowercase following multiple uppercase letters (e.g., \"HELLOWorld\")\n // When the text transitions from 2 upper case letters to a lower case\n // letter. (one upper case letter is considered part of the word, e.g.\n // \"Dog\").\n else if (/[A-Z][A-Z]$/u.test(word) && /[a-z]/u.test(character)) {\n const lastCharacter = word.slice(-1);\n word = word.slice(0, -1);\n flush();\n word = lastCharacter;\n }\n // 3. Digit to non-digit or non-digit to digit (e.g., \"123abc\" or \"abc123\")\n else if (/\\d$/u.test(word) !== /\\d/u.test(character)) {\n flush();\n }\n\n // Add the current character to the current word.\n word += character;\n }\n\n // Flush any remaining word.\n flush();\n\n // @ts-expect-error [ts2322] -- TypeScript can't infer this type...\n return results;\n};\n", "import type {\n CamelCase,\n CamelCaseOptions as BaseCamelCaseOptions,\n} from \"type-fest\";\nimport type { OptionalOptionsWithDefaults } from \"./internal/types/OptionalOptionsWithDefaults\";\nimport { words } from \"./internal/words\";\n\nconst LOWER_CASE_CHARACTER_RE = /[a-z]/u;\n\nconst DEFAULT_PRESERVE_CONSECUTIVE_UPPERCASE = true;\n\ntype CamelCaseOptions = {\n readonly preserveConsecutiveUppercase?: boolean;\n};\n\ntype CamelCaseOptionsWithDefaults =\n OptionalOptionsWithDefaults<\n CamelCaseOptions,\n Options,\n {\n // We use the runtime const for the default type so they stay coupled.\n preserveConsecutiveUppercase: typeof DEFAULT_PRESERVE_CONSECUTIVE_UPPERCASE;\n }\n >;\n\n/**\n * Converts text to **camelCase** by splitting it into words, lowercasing the\n * first word, capitalizing the rest, then joining them back together.\n *\n * Because it uses the built-in case conversion methods, the function shares\n * their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_\n * too, making it best suited for simple strings like identifiers and internal\n * keys. For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters),\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * and [`toLocaleUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase)\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toKebabCase`, `toSnakeCase`, and `toTitleCase`.\n *\n * For *PascalCase* use `capitalize(toCamelCase(data))`.\n *\n * @param data - A string.\n * @param options - An _optional_ object with the _optional_ property\n * `preserveConsecutiveUppercase` that can be used to change the way consecutive\n * uppercase characters are handled. Defaults to `true`.\n * @signature\n * toCamelCase(data);\n * toCamelCase(data, { preserveConsecutiveUppercase });\n * @example\n * toCamelCase(\"hello world\"); // \"helloWorld\"\n * toCamelCase(\"__HELLO_WORLD__\"); // \"helloWorld\"\n * toCamelCase(\"HasHTML\"); // \"hasHTML\"\n * toCamelCase(\"HasHTML\", { preserveConsecutiveUppercase: false }); // \"hasHtml\"\n * @dataFirst\n * @category String\n */\nexport function toCamelCase(\n data: T,\n options?: Options,\n): CamelCase & BaseCamelCaseOptions>;\n\n/**\n * Converts text to **camelCase** by splitting it into words, lowercasing the\n * first word, capitalizing the rest, then joining them back together.\n *\n * Because it uses the built-in case conversion methods, the function shares\n * their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_\n * too, making it best suited for simple strings like identifiers and internal\n * keys. For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters),\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * and [`toLocaleUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase)\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toKebabCase`, `toSnakeCase`, and `toTitleCase`.\n *\n * For *PascalCase* use `capitalize(toCamelCase(data))`.\n *\n * @param options - An _optional_ object with the _optional_ property\n * `preserveConsecutiveUppercase` that can be used to change the way consecutive\n * uppercase characters are handled. Defaults to `true`.\n * @signature\n * toCamelCase()(data);\n * toCamelCase({ preserveConsecutiveUppercase })(data);\n * @example\n * pipe(\"hello world\", toCamelCase()); // \"helloWorld\"\n * pipe(\"__HELLO_WORLD__\", toCamelCase()); // \"helloWorld\"\n * pipe(\"HasHTML\", toCamelCase()); // \"hasHTML\"\n * pipe(\n * \"HasHTML\",\n * toCamelCase({ preserveConsecutiveUppercase: false }),\n * ); // \"hasHtml\"\n * @dataLast\n * @category String\n */\nexport function toCamelCase(\n options?: Options,\n): (\n data: T,\n) => CamelCase & BaseCamelCaseOptions>;\n\nexport function toCamelCase(\n dataOrOptions: CamelCaseOptions | string,\n options?: CamelCaseOptions,\n): unknown {\n return typeof dataOrOptions === \"string\"\n ? toCamelCaseImplementation(dataOrOptions, options)\n : (data: string) => toCamelCaseImplementation(data, dataOrOptions);\n}\n\n// Based on the type definition from type-fest.\n// @see https://github.com/sindresorhus/type-fest/blob/main/source/camel-case.d.ts#L76-L80\nconst toCamelCaseImplementation = (\n data: string,\n {\n preserveConsecutiveUppercase = DEFAULT_PRESERVE_CONSECUTIVE_UPPERCASE,\n }: CamelCaseOptions = {},\n): string =>\n words(\n LOWER_CASE_CHARACTER_RE.test(data)\n ? data\n : // If the text doesn't have **any** lower case characters we also lower\n // case everything, but if it does we need to maintain them as it\n // affects the word boundaries.\n data.toLowerCase(),\n )\n .map(\n (word, index) =>\n `${\n // The first word is uncapitalized, the rest are capitalized\n index === 0 ? word[0]!.toLowerCase() : word[0]!.toUpperCase()\n }${preserveConsecutiveUppercase ? word.slice(1) : word.slice(1).toLowerCase()}`,\n )\n .join(\"\");\n", "import type { Join, Words } from \"type-fest\";\nimport { words } from \"./internal/words\";\nimport { purry } from \"./purry\";\n\ntype KebabCase = string extends S\n ? string\n : Lowercase, \"-\">>;\n\n/**\n * Converts text to **kebab-case** by splitting it into words and joining them\n * back together with hyphens (`-`), then lowercasing the result.\n *\n * Because it uses [`toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase),\n * the function shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_\n * too, making it best suited for simple strings like identifiers and internal\n * keys. For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters), and\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toSnakeCase`, and `toTitleCase`.\n *\n * For *COBOL-CASE* use `toUpperCase(toKebabCase(data))`.\n *\n * @param data - A string.\n * @signature\n * toKebabCase(data);\n * @example\n * toKebabCase(\"hello world\"); // \"hello-world\"\n * toKebabCase(\"__HELLO_WORLD__\"); // \"hello-world\"\n * @dataFirst\n * @category String\n */\nexport function toKebabCase(data: S): KebabCase;\n\n/**\n * Converts text to **kebab-case** by splitting it into words and joining them\n * back together with hyphens (`-`), then lowercasing the result.\n *\n * Because it uses [`toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase),\n * the function shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_\n * too, making it best suited for simple strings like identifiers and internal\n * keys. For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters), and\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toSnakeCase`, and `toTitleCase`.\n *\n * For *COBOL-CASE* use `toUpperCase(toKebabCase(data))`.\n *\n * @signature\n * toKebabCase()(data);\n * @example\n * pipe(\"hello world\", toKebabCase()); // \"hello-world\"\n * pipe(\"__HELLO_WORLD__\", toKebabCase()); // \"hello-world\"\n * @dataLast\n * @category String\n */\nexport function toKebabCase(): (data: S) => KebabCase;\n\nexport function toKebabCase(...args: readonly unknown[]): unknown {\n return purry(toKebabCaseImplementation, args);\n}\n\nconst toKebabCaseImplementation = (data: S): KebabCase =>\n // @ts-expect-error [ts2322] -- To avoid importing our own utilities for this\n // we are using the built-in `join` and `toLowerCase` functions which aren't\n // typed as well. This is equivalent to `toLowerCase(join(words(data), \"-\"))`\n // which TypeScript infers correctly as KebabCase.\n words(data).join(\"-\").toLowerCase();\n", "import { purry } from \"./purry\";\n\n/**\n * Replaces all uppercase characters with their lowercase equivalents.\n *\n * This function is a wrapper around the built-in\n * [`String.prototype.toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)\n * method and shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_.\n *\n * For a more linguistically accurate transformation use [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * and for display purposes use CSS [`text-transform: lowercase;`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform)\n * which *is* locale-aware.\n *\n * For other case manipulations see: `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, `toSnakeCase`, and\n * `toTitleCase`.\n *\n * @param data - A string.\n * @signature\n * toLowerCase(data);\n * @example\n * toLowerCase(\"Hello World\"); // \"hello world\"\n * @dataFirst\n * @category String\n */\nexport function toLowerCase(data: T): Lowercase;\n\n/**\n * Replaces all uppercase characters with their lowercase equivalents.\n *\n * This function is a wrapper around the built-in\n * [`String.prototype.toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)\n * method and shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_.\n *\n * For a more linguistically accurate transformation use [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * and for display purposes use CSS [`text-transform: lowercase;`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform)\n * which *is* locale-aware.\n *\n * For other case manipulations see: `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, `toSnakeCase`, and\n * `toTitleCase`.\n *\n * @signature\n * toLowerCase()(data);\n * @example\n * pipe(\"Hello World\", toLowerCase()); // \"hello world\"\n * @dataLast\n * @category String\n */\nexport function toLowerCase(): (data: T) => Lowercase;\n\nexport function toLowerCase(...args: readonly unknown[]): unknown {\n return purry(toLowerCaseImplementation, args);\n}\n\nconst toLowerCaseImplementation = (data: T): Lowercase =>\n // @ts-expect-error [ts2322] -- TypeScript can't infer this from the code...\n data.toLowerCase();\n", "import type { Join, Words } from \"type-fest\";\nimport { words } from \"./internal/words\";\nimport { purry } from \"./purry\";\n\ntype SnakeCase = string extends S\n ? string\n : Lowercase, \"_\">>;\n\n/**\n * Converts text to **snake_case** by splitting it into words and joining them\n * back together with underscores (`_`), then lowercasing the result.\n *\n * Because it uses [`toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase),\n * the function shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_\n * too, making it best suited for simple strings like identifiers and internal\n * keys. For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters), and\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, and `toTitleCase`.\n *\n * For *CONSTANT_CASE* use `toUpperCase(toSnakeCase(data))`.\n *\n * @param data - A string.\n * @signature\n * toSnakeCase(data);\n * @example\n * toSnakeCase(\"hello world\"); // \"hello_world\"\n * toSnakeCase(\"__HELLO_WORLD__\"); // \"hello_world\"\n * @dataFirst\n * @category String\n */\nexport function toSnakeCase(data: S): SnakeCase;\n\n/**\n * Converts text to **snake_case** by splitting it into words and joining them\n * back together with underscores (`_`), then lowercasing the result.\n *\n * Because it uses [`toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase),\n * the function shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_\n * too, making it best suited for simple strings like identifiers and internal\n * keys. For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters), and\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, and `toTitleCase`.\n *\n * For *CONSTANT_CASE* use `toUpperCase(toSnakeCase(data))`.\n *\n * @signature\n * toSnakeCase()(data);\n * @example\n * pipe(\"hello world\", toSnakeCase()); // \"hello_world\"\n * pipe(\"__HELLO_WORLD__\", toSnakeCase()); // \"hello_world\"\n * @dataLast\n * @category String\n */\nexport function toSnakeCase(): (data: S) => SnakeCase;\n\nexport function toSnakeCase(...args: readonly unknown[]): unknown {\n return purry(toSnakeCaseImplementation, args);\n}\n\nconst toSnakeCaseImplementation = (data: S): SnakeCase =>\n // @ts-expect-error [ts2322] -- To avoid importing our own utilities for this\n // we are using the built-in `join` and `toLowerCase` functions which aren't\n // typed as well. This is equivalent to `toLowerCase(join(words(data), \"_\"))`\n // which TypeScript infers correctly as SnakeCase.\n words(data).join(\"_\").toLowerCase();\n", "import type { IsEqual, IsLiteral, Join, Words } from \"type-fest\";\nimport type { OptionalOptionsWithDefaults } from \"./internal/types/OptionalOptionsWithDefaults\";\nimport { words } from \"./internal/words\";\n\nconst LOWER_CASE_CHARACTER_RE = /[a-z]/u;\n\nconst DEFAULT_PRESERVE_CONSECUTIVE_UPPERCASE = true;\n\ntype TitleCaseOptions = {\n readonly preserveConsecutiveUppercase?: boolean;\n};\n\ntype TitleCaseOptionsWithDefaults =\n OptionalOptionsWithDefaults<\n TitleCaseOptions,\n Options,\n {\n // We use the runtime const for the default type so they stay coupled.\n preserveConsecutiveUppercase: typeof DEFAULT_PRESERVE_CONSECUTIVE_UPPERCASE;\n }\n >;\n\ntype TitleCase =\n IsLiteral extends true\n ? Join<\n TitleCasedArray<\n Words> extends true ? Lowercase : S>,\n TitleCaseOptionsWithDefaults\n >,\n \" \"\n >\n : string;\n\ntype TitleCasedArray<\n T extends readonly string[],\n Options extends TitleCaseOptions,\n> = {\n [I in keyof T]: Capitalize<\n Options[\"preserveConsecutiveUppercase\"] extends true\n ? T[I]\n : Lowercase\n >;\n};\n\n/**\n * Converts text to **Title Case** by splitting it into words, capitalizing the\n * first letter of each word, then joining them back together with spaces.\n *\n * Because it uses the built-in case conversion methods, the function shares\n * their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_,\n * making it best suited for simple strings like identifiers and internal keys.\n * For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters),\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * and [`toLocaleUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase)\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, and `toSnakeCase`.\n *\n * @param data - A string.\n * @param options - An _optional_ object with the _optional_ property\n * `preserveConsecutiveUppercase` that can be used to change the way consecutive\n * uppercase characters are handled. Defaults to `true`.\n * @signature\n * toTitleCase(data);\n * toTitleCase(data, { preserveConsecutiveUppercase });\n * @example\n * toTitleCase(\"hello world\"); // \"Hello World\"\n * toTitleCase(\"--foo-bar--\"); // \"Foo Bar\"\n * toTitleCase(\"fooBar\"); // \"Foo Bar\"\n * toTitleCase(\"__FOO_BAR__\"); // \"Foo Bar\"\n * toTitleCase(\"XMLHttpRequest\"); // \"XML Http Request\"\n * toTitleCase(\"XMLHttpRequest\", { preserveConsecutiveUppercase: false }); // \"Xml Http Request\"\n * @dataFirst\n * @category String\n */\nexport function toTitleCase(\n data: S,\n options?: Options,\n): TitleCase;\n\n/**\n * Converts text to **Title Case** by splitting it into words, capitalizing the\n * first letter of each word, then joining them back together with spaces.\n *\n * Because it uses the built-in case conversion methods, the function shares\n * their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_,\n * making it best suited for simple strings like identifiers and internal keys.\n * For linguistic text processing, use [`Intl.Segmenter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter)\n * with [`granularity: \"word\"`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter#parameters),\n * [`toLocaleLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase),\n * and [`toLocaleUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase)\n * which are purpose-built to handle nuances in languages and locales.\n *\n * For other case manipulations see: `toLowerCase`, `toUpperCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, and `toSnakeCase`.\n *\n * @param options - An _optional_ object with the _optional_ property\n * `preserveConsecutiveUppercase` that can be used to change the way consecutive\n * uppercase characters are handled. Defaults to `true`.\n * @signature\n * toTitleCase()(data);\n * toTitleCase({ preserveConsecutiveUppercase })(data);\n * @example\n * pipe(\"hello world\", toTitleCase()); // \"Hello World\"\n * pipe(\"--foo-bar--\", toTitleCase()); // \"Foo Bar\"\n * pipe(\"fooBar\", toTitleCase()); // \"Foo Bar\"\n * pipe(\"__FOO_BAR__\", toTitleCase()); // \"Foo Bar\"\n * pipe(\"XMLHttpRequest\", toTitleCase()); // \"XML Http Request\"\n * pipe(\n * \"XMLHttpRequest\",\n * toTitleCase({ preserveConsecutiveUppercase: false }),\n * ); // \"Xml Http Request\"\n * @dataLast\n * @category String\n */\nexport function toTitleCase(\n options?: Options,\n): (data: S) => TitleCase;\n\nexport function toTitleCase(\n dataOrOptions?: TitleCaseOptions | string,\n options?: TitleCaseOptions,\n): unknown {\n return typeof dataOrOptions === \"string\"\n ? toTitleCaseImplementation(dataOrOptions, options)\n : (data: string) => toTitleCaseImplementation(data, dataOrOptions);\n}\n\n// Similar to the implementation used in toCamelCase\nconst toTitleCaseImplementation = (\n data: string,\n {\n preserveConsecutiveUppercase = DEFAULT_PRESERVE_CONSECUTIVE_UPPERCASE,\n }: TitleCaseOptions = {},\n): string =>\n words(\n LOWER_CASE_CHARACTER_RE.test(data)\n ? data\n : // If the text doesn't have **any** lowercase characters, we lowercase\n // everything; otherwise we maintain existing case as it affects word\n // boundaries.\n data.toLowerCase(),\n )\n .map(\n (word) =>\n `${word[0]!.toUpperCase()}${\n preserveConsecutiveUppercase\n ? word.slice(1)\n : word.slice(1).toLowerCase()\n }`,\n )\n .join(\" \");\n", "import { purry } from \"./purry\";\n\n/**\n * Replaces all lowercase characters with their uppercase equivalents.\n *\n * This function is a wrapper around the built-in\n * [`String.prototype.toUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase)\n * method and shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase#description)_.\n *\n * For a more linguistically accurate transformation use [`toLocaleUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase),\n * and for display purposes use CSS [`text-transform: uppercase;`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform)\n * which *is* locale-aware.\n *\n * For other case manipulations see: `toLowerCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, `toSnakeCase`, and\n * `toTitleCase`.\n *\n * @param data - A string.\n * @signature\n * toUpperCase(data);\n * @example\n * toUpperCase(\"Hello World\"); // \"HELLO WORLD\"\n * @dataFirst\n * @category String\n */\nexport function toUpperCase(data: T): Uppercase;\n\n/**\n * Replaces all lowercase characters with their uppercase equivalents.\n *\n * This function is a wrapper around the built-in\n * [`String.prototype.toUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase)\n * method and shares its _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase#description)_.\n *\n * For a more linguistically accurate transformation use [`toLocaleUpperCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase),\n * and for display purposes use CSS [`text-transform: uppercase;`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform)\n * which *is* locale-aware.\n *\n * For other case manipulations see: `toLowerCase`, `capitalize`,\n * `uncapitalize`, `toCamelCase`, `toKebabCase`, `toSnakeCase`, and\n * `toTitleCase`.\n *\n * @signature\n * toUpperCase()(data);\n * @example\n * pipe(\"Hello World\", toUpperCase()); // \"HELLO WORLD\"\n * @dataLast\n * @category String\n */\nexport function toUpperCase(): (data: T) => Uppercase;\n\nexport function toUpperCase(...args: readonly unknown[]): unknown {\n return purry(toUpperCaseImplementation, args);\n}\n\nconst toUpperCaseImplementation = (data: T): Uppercase =>\n // @ts-expect-error [ts2322] -- TypeScript can't infer this from the code...\n data.toUpperCase();\n", "import type {\n And,\n IsEqual,\n IsNever,\n IsStringLiteral,\n NonNegativeInteger,\n} from \"type-fest\";\nimport type { ClampedIntegerSubtract } from \"./internal/types/ClampedIntegerSubtract\";\nimport type { StringLength } from \"./internal/types/StringLength\";\n\ntype TruncateOptions = {\n readonly omission?: string;\n readonly separator?: string | RegExp;\n};\n\nconst DEFAULT_OMISSION = \"...\";\n\ntype Truncate<\n S extends string,\n N extends number,\n Options extends TruncateOptions,\n> =\n IsNever> extends true\n ? // There's nothing we can say about the output without a literal, valid,\n // truncation length `N`.\n string\n : IsStringLiteral extends true\n ? TruncateWithOptions<\n S,\n N,\n // TODO: I don't like how I handled the default options object; I want to have everything coupled between the runtime and the type system, but this feels both brittle to changes, and over-verbose.\n Options extends Pick, \"omission\">\n ? Options[\"omission\"]\n : typeof DEFAULT_OMISSION,\n Options extends Pick, \"separator\">\n ? Options[\"separator\"]\n : undefined\n >\n : // There's nothing we can say about the output without a literal input\n // string `S`, the result would always be, at best, just a `string`.\n string;\n\ntype TruncateWithOptions<\n S extends string,\n N extends number,\n Omission extends string,\n Separator extends string | RegExp | undefined,\n> =\n // Distribute the result over unions.\n N extends unknown\n ? // We can short-circuit most of our logic when N is a literal 0.\n IsEqual extends true\n ? \"\"\n : // Distribute the result over unions.\n Omission extends unknown\n ? // When Omission isn't literal we don't know how long it is.\n IsStringLiteral extends true\n ? // This mirrors the runtime logic where if `n - omission.length`\n // is not positive then what we end up truncating is Omission\n // itself and not S.\n IsEqual<\n ClampedIntegerSubtract>,\n 0\n > extends true\n ? TruncateLiterals\n : And<\n // When S isn't literal the output wouldn't be literal\n // either.\n IsStringLiteral,\n // TODO: Handling non-trivial separators would add a ton of complexity to this type! It's possible (but hard!) to support string literals so I'm leaving this as a TODO; regular expressions are impossible because we can't get the type checker to run them.\n IsEqual\n > extends true\n ? TruncateLiterals\n : string\n : string\n : never\n : never;\n\n/**\n * This is the actual implementation of the truncation logic. It assumes all\n * its params are literals and valid.\n */\ntype TruncateLiterals<\n S extends string,\n N extends number,\n Omission extends string,\n Iteration extends readonly unknown[] = [],\n> = S extends `${infer Character}${infer Rest}`\n ? // The cutoff point N - omission.length leaves room for the omission.\n Iteration[\"length\"] extends ClampedIntegerSubtract<\n N,\n StringLength\n >\n ? // The string is only truncated if its total length is longer than N; at\n // the cutoff point this is simplified to comparing the remaining suffix\n // length to the omission length.\n IsLongerThan extends true\n ? Omission\n : S\n : // Reconstruct string character by character until cutoff.\n `${Character}${TruncateLiterals}`\n : // Empty input string results in empty output.\n \"\";\n\n/**\n * An optimized check that efficiently checks if the string A is longer than B.\n */\ntype IsLongerThan<\n A extends string,\n B extends string,\n> = A extends `${string}${infer RestA}`\n ? B extends `${string}${infer RestB}`\n ? IsLongerThan\n : // B is empty and A isn't!\n true\n : // A is empty, even if B is empty, A wouldn't be (strictly) longer.\n false;\n\n/**\n * Truncates strings to a maximum length, adding an ellipsis when truncated.\n *\n * Shorter strings are returned unchanged. If the omission marker is longer than\n * the maximum length, it will be truncated as well.\n *\n * The `separator` argument provides more control by optimistically searching\n * for a matching cutoff point, which could be used to avoid truncating in the\n * middle of a word or other semantic boundary.\n *\n * If you just need to limit the total length of the string, without adding an\n * `omission` or optimizing the cutoff point via `separator`, prefer\n * `sliceString` instead, which runs more efficiently.\n *\n * The function counts Unicode characters, not visual graphemes, and may split\n * emojis, denormalized diacritics, or combining characters, in the middle. For\n * display purposes, prefer CSS [`text-overflow: ellipsis`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow#ellipsis)\n * which is locale-aware and purpose-built for this task.\n *\n * @param data - The input string.\n * @param n - The maximum length of the output string. The output will **never**\n * exceed this length.\n * @param options - An optional options object.\n * @param options.omission - The string that is appended to the end of the\n * output *whenever the input string is truncated*. Default: '...'.\n * @param options.separator - A string or regular expression that defines a\n * cutoff point for the truncation. If multiple cutoff points are found, the one\n * closest to `n` will be used, and if no cutoff point is found then the\n * function will fallback to the trivial cutoff point. Regular expressions are\n * also supported. Default: (which is equivalent to `\"\"` or the regular\n * expression `/./`).\n * @signature\n * truncate(data, n, { omission, separator });\n * @example\n * truncate(\"Hello, world!\", 8); //=> \"Hello...\"\n * truncate(\n * \"cat, dog, mouse\",\n * 12,\n * { omission: \"__\", separator: \",\"},\n * ); //=> \"cat, dog__\"\n * @dataFirst\n * @category String\n */\nexport function truncate<\n S extends string,\n N extends number,\n const Options extends TruncateOptions,\n>(data: S, n: N, options?: Options): Truncate;\n\n/**\n * Truncates strings to a maximum length, adding an ellipsis when truncated.\n *\n * Shorter strings are returned unchanged. If the omission marker is longer than\n * the maximum length, it will be truncated as well.\n *\n * The `separator` argument provides more control by optimistically searching\n * for a matching cutoff point, which could be used to avoid truncating in the\n * middle of a word or other semantic boundary.\n *\n * If you just need to limit the total length of the string, without adding an\n * `omission` or optimizing the cutoff point via `separator`, prefer\n * `sliceString` instead, which runs more efficiently.\n *\n * The function counts Unicode characters, not visual graphemes, and may split\n * emojis, denormalized diacritics, or combining characters, in the middle. For\n * display purposes, prefer CSS [`text-overflow: ellipsis`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow#ellipsis)\n * which is locale-aware and purpose-built for this task.\n *\n * @param n - The maximum length of the output string. The output will **never**\n * exceed this length.\n * @param options - An optional options object.\n * @param options.omission - The string that is appended to the end of the\n * output *whenever the input string is truncated*. Default: '...'.\n * @param options.separator - A string or regular expression that defines a\n * cutoff point for the truncation. If multiple cutoff points are found, the one\n * closest to `n` will be used, and if no cutoff point is found then the\n * function will fallback to the trivial cutoff point. Regular expressions are\n * also supported. Default: (which is equivalent to `\"\"` or the regular\n * expression `/./`).\n * @signature\n * truncate(n, { omission, separator })(data);\n * @example\n * pipe(\"Hello, world!\" as const, truncate(8)); //=> \"Hello...\"\n * pipe(\n * \"cat, dog, mouse\" as const,\n * truncate(12, { omission: \"__\", separator: \",\"}),\n * ); //=> \"cat, dog__\"\n * @dataLast\n * @category String\n */\nexport function truncate<\n N extends number,\n const Options extends TruncateOptions,\n>(\n n: N,\n options?: Options,\n): (data: S) => Truncate;\n\nexport function truncate(\n dataOrN: string | number,\n nOrOptions?: number | TruncateOptions,\n options?: TruncateOptions,\n): unknown {\n return typeof dataOrN === \"string\"\n ? truncateImplementation(\n dataOrN,\n // @ts-expect-error [ts2345] -- We want to reduce runtime checks to a\n // minimum, and there's no (easy) way to couple params so that when we\n // check one, the others are inferred accordingly.\n nOrOptions,\n options,\n )\n : (data: string) =>\n truncateImplementation(\n data,\n dataOrN,\n // @ts-expect-error [ts2345] -- We want to reduce runtime checks to a\n // minimum, and there's no (easy) way to couple params so that when we\n // check one, the others are inferred accordingly.\n nOrOptions,\n );\n}\n\nfunction truncateImplementation(\n data: string,\n n: number,\n { omission = DEFAULT_OMISSION, separator }: TruncateOptions = {},\n): string {\n if (data.length <= n) {\n // No truncation needed.\n return data;\n }\n\n if (n <= 0) {\n // Avoid weirdness when n isn't positive.\n return \"\";\n }\n\n if (n < omission.length) {\n // TODO [>3]: This was an oversight, there's no value in returning just parts of the omission string itself, with no actual content. Instead, we should truncate the input without adding the omission at all in cases where the omission would completely eclipse the content.\n // Handle cases where the omission itself is too long.\n return omission.slice(0, n);\n }\n\n // Our trivial cutoff is the point where we can add the omission and reach\n // n exactly, this is what we'll use when no separator is provided.\n let cutoff = n - omission.length;\n\n if (typeof separator === \"string\") {\n const lastSeparator = data.lastIndexOf(separator, cutoff);\n if (lastSeparator !== -1) {\n // If we find the separator within the part of the string that would be\n // returned we move the cutoff further so that we also remove it.\n cutoff = lastSeparator;\n }\n } else if (separator !== undefined) {\n const globalSeparator = separator.flags.includes(\"g\")\n ? separator\n : new RegExp(separator.source, `${separator.flags}g`);\n\n let lastSeparator;\n for (const { index } of data.matchAll(globalSeparator)) {\n if (index > cutoff) {\n // We only care about separators within the part of the string that\n // would be returned anyway, once we are past that point we don't care\n // about any further separators.\n break;\n }\n lastSeparator = index;\n }\n if (lastSeparator !== undefined) {\n cutoff = lastSeparator;\n }\n }\n\n // Build the output.\n return `${data.slice(0, cutoff)}${omission}`;\n}\n", "import { purry } from \"./purry\";\n\n/**\n * Makes the first character of a string lowercase while leaving the rest\n * unchanged.\n *\n * It uses the built-in [`String.prototype.toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)\n * for the runtime and the built-in [`Uncapitalize`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#Uncapitalizestringtype)\n * utility type for typing and thus shares their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_.\n *\n * For display purposes, prefer using the CSS pseudo-element [`::first-letter`](https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter) to target\n * just the first letter of the word, and [`text-transform: lowercase`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform#lowercase)\n * to lowercase it. This transformation **is** locale-aware.\n *\n * For other case manipulations see: `toUpperCase`, `toLowerCase`, `capitalize`,\n * `toCamelCase`, `toKebabCase`, `toSnakeCase`, and `toTitleCase`.\n *\n * @param data - A string.\n * @signature\n * uncapitalize(data);\n * @example\n * uncapitalize(\"HELLO WORLD\"); // \"hELLO WORLD\"\n * @dataFirst\n * @category String\n */\nexport function uncapitalize(data: T): Uncapitalize;\n\n/**\n * Makes the first character of a string lowercase while leaving the rest\n * unchanged.\n *\n * It uses the built-in [`String.prototype.toLowerCase`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)\n * for the runtime and the built-in [`Uncapitalize`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#Uncapitalizestringtype)\n * utility type for typing and thus shares their _[locale inaccuracies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase#description)_.\n *\n * For display purposes, prefer using the CSS pseudo-element [`::first-letter`](https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter) to target\n * just the first letter of the word, and [`text-transform: lowercase`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform#lowercase)\n * to lowercase it. This transformation **is** locale-aware.\n *\n * For other case manipulations see: `toUpperCase`, `toLowerCase`, `capitalize`,\n * `toCamelCase`, `toKebabCase`, `toSnakeCase`, and `toTitleCase`.\n *\n * @signature\n * uncapitalize()(data);\n * @example\n * pipe(\"HELLO WORLD\", uncapitalize()); // \"hELLO WORLD\"\n * @dataLast\n * @category String\n */\nexport function uncapitalize(): (data: T) => Uncapitalize;\n\nexport function uncapitalize(...args: readonly unknown[]): unknown {\n return purry(uncapitalizeImplementation, args);\n}\n\nconst uncapitalizeImplementation = (\n data: T,\n): Uncapitalize =>\n `${data[0]?.toLowerCase() ?? \"\"}${data.slice(1)}` as Uncapitalize;\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { Deduped } from \"./internal/types/Deduped\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\n\n/**\n * Returns a new array containing only one copy of each element in the original\n * list. Elements are compared by reference using Set.\n *\n * @param data - The array to filter.\n * @signature\n * unique(array)\n * @example\n * unique([1, 2, 2, 5, 1, 6, 7]) // => [1, 2, 5, 6, 7]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function unique(data: T): Deduped;\n\n/**\n * Returns a new array containing only one copy of each element in the original\n * list. Elements are compared by reference using Set.\n *\n * @signature\n * unique()(array)\n * @example\n * pipe(\n * [1, 2, 2, 5, 1, 6, 7], // only 4 iterations\n * unique(),\n * take(3)\n * ) // => [1, 2, 5]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function unique(): (data: T) => Deduped;\n\nexport function unique(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nfunction lazyImplementation(): LazyEvaluator {\n const set = new Set();\n return (value) => {\n if (set.has(value)) {\n return SKIP_ITEM;\n }\n set.add(value);\n return { done: false, hasNext: true, next: value };\n };\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { BrandedReturn } from \"./internal/types/BrandedReturn\";\nimport type { Deduped } from \"./internal/types/Deduped\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\n\n/**\n * Returns a new array containing only one copy of each element in the original\n * list transformed by a function. Elements are compared by reference using Set.\n *\n * @param data - The array to filter.\n * @param keyFunction - Extracts a value that would be used to compare elements.\n * @signature\n * uniqueBy(data, keyFunction)\n * @example\n * uniqueBy(\n * [{ n: 1 }, { n: 2 }, { n: 2 }, { n: 5 }, { n: 1 }, { n: 6 }, { n: 7 }],\n * (obj) => obj.n,\n * ) // => [{n: 1}, {n: 2}, {n: 5}, {n: 6}, {n: 7}]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function uniqueBy(\n data: T,\n keyFunction: (item: T[number], index: number, data: T) => unknown,\n): Deduped;\n\n/**\n * Returns a new array containing only one copy of each element in the original\n * list transformed by a function. Elements are compared by reference using Set.\n *\n * @param keyFunction - Extracts a value that would be used to compare elements.\n * @signature\n * uniqueBy(keyFunction)(data)\n * @example\n * pipe(\n * [{n: 1}, {n: 2}, {n: 2}, {n: 5}, {n: 1}, {n: 6}, {n: 7}], // only 4 iterations\n * uniqueBy(obj => obj.n),\n * take(3)\n * ) // => [{n: 1}, {n: 2}, {n: 5}]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function uniqueBy(\n keyFunction: (item: T[number], index: number, data: T) => unknown,\n): (data: T) => Deduped;\n\nexport function uniqueBy(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nfunction lazyImplementation(\n keyFunction: (item: T, index: number, data: readonly T[]) => unknown,\n): LazyEvaluator {\n // @see https://github.com/typescript-eslint/typescript-eslint/issues/9885\n const brandedKeyFunction = keyFunction as BrandedReturn;\n\n const set = new Set>();\n return (value, index, data) => {\n const key = brandedKeyFunction(value, index, data);\n if (set.has(key)) {\n return SKIP_ITEM;\n }\n\n set.add(key);\n return { done: false, hasNext: true, next: value };\n };\n}\n", "import { purryFromLazy } from \"./internal/purryFromLazy\";\nimport type { Deduped } from \"./internal/types/Deduped\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { SKIP_ITEM } from \"./internal/utilityEvaluators\";\n\ntype IsEquals = (a: T, b: T) => boolean;\n\n/**\n * Returns a new array containing only one copy of each element in the original\n * list. Elements are compared by custom comparator isEquals.\n *\n * @param data - The array to filter.\n * @param isEquals - The comparator.\n * @signature\n * uniqueWith(array, isEquals)\n * @example\n * uniqueWith(\n * [{a: 1}, {a: 2}, {a: 2}, {a: 5}, {a: 1}, {a: 6}, {a: 7}],\n * equals,\n * ) // => [{a: 1}, {a: 2}, {a: 5}, {a: 6}, {a: 7}]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function uniqueWith(\n data: T,\n isEquals: IsEquals,\n): Deduped;\n\n/**\n * Returns a new array containing only one copy of each element in the original\n * list. Elements are compared by custom comparator isEquals.\n *\n * @param isEquals - The comparator.\n * @signature uniqueWith(isEquals)(array)\n * @example\n * uniqueWith(equals)(\n * [{a: 1}, {a: 2}, {a: 2}, {a: 5}, {a: 1}, {a: 6}, {a: 7}],\n * ) // => [{a: 1}, {a: 2}, {a: 5}, {a: 6}, {a: 7}]\n * pipe(\n * [{a: 1}, {a: 2}, {a: 2}, {a: 5}, {a: 1}, {a: 6}, {a: 7}], // only 4 iterations\n * uniqueWith(equals),\n * take(3)\n * ) // => [{a: 1}, {a: 2}, {a: 5}]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function uniqueWith(\n isEquals: IsEquals,\n): (data: T) => Deduped;\n\nexport function uniqueWith(...args: readonly unknown[]): unknown {\n return purryFromLazy(lazyImplementation, args);\n}\n\nconst lazyImplementation =\n (isEquals: IsEquals): LazyEvaluator =>\n (value, index, data) => {\n const firstEqualIndex = data.findIndex(\n (otherValue, otherIndex) =>\n index === otherIndex || isEquals(value, otherValue),\n );\n\n // skip items that aren't at the first equal index.\n return firstEqualIndex === index\n ? { done: false, hasNext: true, next: value }\n : SKIP_ITEM;\n };\n", "import type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport { purry } from \"./purry\";\n\ntype Values = T extends IterableContainer\n ? T[number][]\n : EnumerableStringKeyedValueOf[];\n\n/**\n * Returns a new array containing the values of the array or object.\n *\n * @param data - Either an array or an object.\n * @signature\n * values(source)\n * @example\n * values(['x', 'y', 'z']) // => ['x', 'y', 'z']\n * values({ a: 'x', b: 'y', c: 'z' }) // => ['x', 'y', 'z']\n * @dataFirst\n * @category Object\n */\nexport function values(data: T): Values;\n\n/**\n * Returns a new array containing the values of the array or object.\n *\n * @signature\n * values()(source)\n * @example\n * pipe(['x', 'y', 'z'], values()) // => ['x', 'y', 'z']\n * pipe({ a: 'x', b: 'y', c: 'z' }, values()) // => ['x', 'y', 'z']\n * pipe(\n * { a: 'x', b: 'y', c: 'z' },\n * values(),\n * first(),\n * ) // => 'x'\n * @dataLast\n * @category Object\n */\nexport function values(): (data: T) => Values;\n\nexport function values(...args: readonly unknown[]): unknown {\n return purry(Object.values, args);\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any --\n * function inference is stricter and doesn't work well when the arguments\n * aren't typed as `any` in the generic type declaration.\n */\n\nimport type { GuardType } from \"./internal/types/GuardType\";\n\n/**\n * Conditionally run a function based on a predicate, returning its result (similar to\n * the [`?:` (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_operator).)\n * If the optional `onFalse` function is not provided, the data will be passed\n * through in those cases.\n *\n * Supports type predicates to refine the types for both branches and the return\n * value.\n *\n * Additional arguments are passed to all functions. In data-first calls, they\n * are taken as variadic arguments; but in data-last calls, they are when the\n * curried function itself is called.\n *\n * For more complex cases check out `conditional`.\n *\n * @param predicate - Decides if the `onTrue` mapper should run or not. If it's\n * a type predicate it also narrows types for the mappers and the return value.\n * @param onTrue - Function to run when the predicate returns `true`.\n * @signature\n * when(predicate, onTrue)(data, ...extraArgs)\n * when(predicate, { onTrue, onFalse })(data, ...extraArgs)\n * @example\n * pipe(data, when(isNullish, constant(42)));\n * pipe(data, when((x) => x > 3, { onTrue: add(1), onFalse: multiply(2) }));\n * map(data, when(isNullish, (x, index) => x + index));\n * @dataLast\n * @category Function\n */\nexport function when<\n T,\n ExtraArgs extends any[],\n Predicate extends (data: T, ...extraArgs: ExtraArgs) => boolean,\n OnTrue extends (\n data: GuardType,\n ...extraArgs: ExtraArgs\n ) => unknown,\n>(\n predicate: Predicate,\n onTrue: OnTrue,\n): (\n data: T,\n ...extraArgs: ExtraArgs\n) => Exclude> | ReturnType;\nexport function when<\n T,\n ExtraArgs extends any[],\n Predicate extends (data: T, ...extraArgs: ExtraArgs) => boolean,\n OnTrue extends (\n data: GuardType,\n ...extraArgs: ExtraArgs\n ) => unknown,\n OnFalse extends (\n data: Exclude>,\n ...extraArgs: ExtraArgs\n ) => unknown,\n>(\n predicate: Predicate,\n branches: {\n readonly onTrue: OnTrue;\n readonly onFalse: OnFalse;\n },\n): (\n data: T,\n ...extraArgs: ExtraArgs\n) => ReturnType | ReturnType;\n\n/**\n * Conditionally run a function based on a predicate, returning its result (similar to\n * the [`?:` (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_operator).)\n * If the optional `onFalse` function is not provided, the data will be passed\n * through in those cases.\n *\n * Supports type predicates to refine the types for both branches and the return\n * value.\n *\n * Additional arguments are passed to all functions. In data-first calls, they\n * are taken as variadic arguments; but in data-last calls, they are when the\n * curried function itself is called.\n *\n * For more complex cases check out `conditional`.\n *\n * @param data - The data to be passed to all functions, as the first param.\n * @param predicate - Decides if the `onTrue` mapper should run or not. If it's\n * a type predicate it also narrows types for the mappers and the return value.\n * @param onTrue - The function that would run when the predicate returns\n * `true`.\n * @param extraArgs - Additional arguments. These would be passed as is to the\n * `predicate`, `onTrue`, and `onFalse` functions.\n * @signature\n * when(data, predicate, onTrue, ...extraArgs)\n * when(data, predicate, { onTrue, onFalse }, ...extraArgs)\n * @example\n * when(data, isNullish, constant(42));\n * when(data, (x) => x > 3, { onTrue: add(1), onFalse: multiply(2) });\n * when(data, isString, (x, radix) => parseInt(x, radix), 10);\n * @dataFirst\n * @category Function\n */\nexport function when<\n T,\n ExtraArgs extends any[],\n Predicate extends (data: T, ...extraArgs: ExtraArgs) => boolean,\n OnTrue extends (\n data: GuardType,\n ...extraArgs: ExtraArgs\n ) => unknown,\n>(\n data: T,\n predicate: Predicate,\n onTrue: OnTrue,\n ...extraArgs: ExtraArgs\n): Exclude> | ReturnType;\nexport function when<\n T,\n ExtraArgs extends any[],\n Predicate extends (data: T, ...extraArgs: ExtraArgs) => boolean,\n OnTrue extends (\n data: GuardType,\n ...extraArgs: ExtraArgs\n ) => unknown,\n OnFalse extends (\n data: Exclude>,\n ...extraArgs: ExtraArgs\n ) => unknown,\n>(\n data: T,\n predicate: Predicate,\n branches: {\n readonly onTrue: OnTrue;\n readonly onFalse: OnFalse;\n },\n ...extraArgs: ExtraArgs\n): ReturnType | ReturnType;\n\nexport function when(...args: readonly unknown[]): unknown {\n return args.length === 2\n ? (data: unknown, ...extraArgs: readonly unknown[]) =>\n // @ts-expect-error [ts2556] -- This is OK, we trust our typing of the overloaded functions\n whenImplementation(data, ...args, ...extraArgs)\n : // @ts-expect-error [ts2556] -- This is OK, we trust our typing of the overloaded functions\n whenImplementation(...args);\n}\n\nconst whenImplementation = (\n data: T,\n predicate: (data: T, ...extraArgs: ExtraArgs) => boolean,\n onTrueOrBranches:\n | ((data: T, ...extraArgs: ExtraArgs) => WhenTrue)\n | {\n readonly onTrue: (data: T, ...extraArgs: ExtraArgs) => WhenTrue;\n readonly onFalse: (data: T, ...extraArgs: ExtraArgs) => WhenFalse;\n },\n ...extraArgs: ExtraArgs\n): T | WhenFalse | WhenTrue =>\n predicate(data, ...extraArgs)\n ? typeof onTrueOrBranches === \"function\"\n ? onTrueOrBranches(data, ...extraArgs)\n : onTrueOrBranches.onTrue(data, ...extraArgs)\n : typeof onTrueOrBranches === \"function\"\n ? data\n : onTrueOrBranches.onFalse(data, ...extraArgs);\n", "import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\nimport { purry } from \"./purry\";\n\ntype Zipped =\n // If the array is empty the output is empty, no surprises\n Left extends readonly []\n ? []\n : Right extends readonly []\n ? []\n : // Are the two inputs both tuples with a non-rest first item?\n Left extends readonly [infer LeftHead, ...infer LeftRest]\n ? Right extends readonly [infer RightHead, ...infer RightRest]\n ? // ...Then take that first item from both and recurse\n [[LeftHead, RightHead], ...Zipped]\n : // Is only one of the inputs a tuple (with a non-rest first item)?\n // Then take that item, and match it with whatever the type of the other *array's* items are.\n [[LeftHead, Right[number]], ...Zipped]\n : Right extends readonly [infer RightHead, ...infer RightRest]\n ? [[Left[number], RightHead], ...Zipped]\n : // Both inputs are not tuples (with a non-rest first item, they might be tuples with non-rest last item(s))\n // So the output is just the \"trivial\" zip result.\n [Left[number], Right[number]][];\n\n/**\n * Creates a new list from two supplied lists by pairing up equally-positioned\n * items. The length of the returned list will match the shortest of the two\n * inputs.\n *\n * @param first - The first input list.\n * @param second - The second input list.\n * @signature\n * zip(first, second)\n * @example\n * zip([1, 2], ['a', 'b']) // => [[1, 'a'], [2, 'b']]\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function zip(\n first: F,\n second: S,\n): Zipped;\n\n/**\n * Creates a new list from two supplied lists by pairing up equally-positioned\n * items. The length of the returned list will match the shortest of the two\n * inputs.\n *\n * @param second - The second input list.\n * @signature\n * zip(second)(first)\n * @example\n * zip(['a', 'b'])([1, 2]) // => [[1, 'a'], [2, 'b']]\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function zip(\n second: S,\n): (first: F) => Zipped;\n\nexport function zip(...args: readonly unknown[]): unknown {\n return purry(zipImplementation, args, lazyImplementation);\n}\n\nconst zipImplementation = <\n F extends IterableContainer,\n S extends IterableContainer,\n>(\n first: F,\n second: S,\n): Zipped =>\n (first.length < second.length\n ? first.map((item, index) => [item, second[index]])\n : second.map((item, index) => [first[index], item])) as Zipped;\n\nconst lazyImplementation =\n (\n second: S,\n ): LazyEvaluator =>\n (value, index) => ({\n hasNext: true,\n next: [value, second[index]],\n done: index >= second.length - 1,\n });\n", "import { lazyDataLastImpl } from \"./internal/lazyDataLastImpl\";\nimport type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { LazyEvaluator } from \"./internal/types/LazyEvaluator\";\n\ntype ZippingFunction<\n T1 extends IterableContainer = IterableContainer,\n T2 extends IterableContainer = IterableContainer,\n Value = unknown,\n> = (\n first: T1[number],\n second: T2[number],\n index: number,\n data: readonly [first: T1, second: T2],\n) => Value;\n\n/**\n * Creates a new list from two supplied lists by calling the supplied function\n * with the same-positioned element from each list.\n *\n * @param fn - The function applied to each position of the list.\n * @signature\n * zipWith(fn)(first, second)\n * @example\n * zipWith((a: string, b: string) => a + b)(['1', '2', '3'], ['a', 'b', 'c']) // => ['1a', '2b', '3c']\n * @category Array\n */\nexport function zipWith(\n fn: ZippingFunction,\n): (first: readonly TItem1[], second: readonly TItem2[]) => Value[];\n\n/**\n * Creates a new list from two supplied lists by calling the supplied function\n * with the same-positioned element from each list.\n *\n * @param second - The second input list.\n * @param fn - The function applied to each position of the list.\n * @signature\n * zipWith(second, fn)(first)\n * @example\n * pipe(['1', '2', '3'], zipWith(['a', 'b', 'c'], (a, b) => a + b)) // => ['1a', '2b', '3c']\n * @dataLast\n * @lazy\n * @category Array\n */\nexport function zipWith<\n T1 extends IterableContainer,\n T2 extends IterableContainer,\n Value,\n>(second: T2, fn: ZippingFunction): (first: T1) => Value[];\n\n/**\n * Creates a new list from two supplied lists by calling the supplied function\n * with the same-positioned element from each list.\n *\n * @param first - The first input list.\n * @param second - The second input list.\n * @param fn - The function applied to each position of the list.\n * @signature\n * zipWith(first, second, fn)\n * @example\n * zipWith(['1', '2', '3'], ['a', 'b', 'c'], (a, b) => a + b) // => ['1a', '2b', '3c']\n * @dataFirst\n * @lazy\n * @category Array\n */\nexport function zipWith<\n T1 extends IterableContainer,\n T2 extends IterableContainer,\n Value,\n>(first: T1, second: T2, fn: ZippingFunction): Value[];\n\nexport function zipWith(\n arg0: IterableContainer | ZippingFunction,\n arg1?: IterableContainer | ZippingFunction,\n arg2?: ZippingFunction,\n): unknown {\n if (typeof arg0 === \"function\") {\n // Both datum's last\n return (data1: IterableContainer, data2: IterableContainer) =>\n zipWithImplementation(data1, data2, arg0);\n }\n\n if (typeof arg1 === \"function\") {\n // dataLast\n return lazyDataLastImpl(\n zipWithImplementation,\n [arg0, arg1],\n lazyImplementation,\n );\n }\n\n // dataFirst. Notice that we assert that the arguments are defined to reduce\n // the number of runtime checks that would otherwise be needed to make\n // TypeScript happy here. Because this is an internal implementation and we\n // are protected by the function typing itself this is fine!\n return zipWithImplementation(arg0, arg1!, arg2!);\n}\n\nfunction zipWithImplementation<\n T1 extends IterableContainer,\n T2 extends IterableContainer,\n Value,\n>(first: T1, second: T2, fn: ZippingFunction): Value[] {\n const datum = [first, second] as const;\n return first.length < second.length\n ? first.map((item, index) => fn(item, second[index], index, datum))\n : second.map((item, index) => fn(first[index], item, index, datum));\n}\n\nconst lazyImplementation =\n (\n second: T2,\n fn: ZippingFunction,\n ): LazyEvaluator =>\n (value, index, data) => ({\n next: fn(value, second[index], index, [data, second]),\n hasNext: true,\n done: index >= second.length - 1,\n });\n", "import * as z from \"./v4/classic/external.js\";\nexport * from \"./v4/classic/external.js\";\nexport { z };\nexport default z;\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", "export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n * \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`\u2716 ${issue.message}`);\n if (issue.path?.length)\n lines.push(` \u2192 at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n", "import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n", "export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n", "export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n", "export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0645\u062F\u062E\u0644\",\n email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n url: \"\u0631\u0627\u0628\u0637\",\n emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0645\u062F\u062E\u0644\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n }\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n }\n case \"not_multiple_of\":\n return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n case \"invalid_key\":\n return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n case \"invalid_element\":\n return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n default:\n return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n instanceof ${issue.expected}, daxil olan ${received}`;\n }\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n if (_issue.format === \"ends_with\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n if (_issue.format === \"includes\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n if (_issue.format === \"regex\")\n return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n case \"invalid_union\":\n return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n case \"invalid_element\":\n return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n default:\n return `Yanl\u0131\u015F d\u0259y\u0259r`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n const absCount = Math.abs(count);\n const lastDigit = absCount % 10;\n const lastTwoDigits = absCount % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n return many;\n }\n if (lastDigit === 1) {\n return one;\n }\n if (lastDigit >= 2 && lastDigit <= 4) {\n return few;\n }\n return many;\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n array: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n set: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n file: {\n unit: {\n one: \"\u0431\u0430\u0439\u0442\",\n few: \"\u0431\u0430\u0439\u0442\u044B\",\n many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0443\u0432\u043E\u0434\",\n email: \"email \u0430\u0434\u0440\u0430\u0441\",\n url: \"URL\",\n emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0447\u0430\u0441\",\n duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0443\u0432\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u043B\u0456\u043A\",\n array: \"\u043C\u0430\u0441\u0456\u045E\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n }\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n case \"invalid_element\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n default:\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n file: { unit: \"\u0431\u0430\u0439\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0445\u043E\u0434\",\n email: \"\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u0434\u0436\u0438\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n duration: \"ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n base64: \"base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n base64url: \"base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n json_string: \"JSON \u043D\u0438\u0437\",\n e164: \"E.164 \u043D\u043E\u043C\u0435\u0440\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0445\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n }\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\"}`;\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;\n let invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D\";\n if (_issue.format === \"emoji\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"datetime\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"date\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n if (_issue.format === \"time\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"duration\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue.keys.length > 1 ? \"\u0438\" : \"\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u043E\u0432\u0435\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434\";\n case \"invalid_element\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue.origin}`;\n default:\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n file: { unit: \"bytes\", verb: \"contenir\" },\n array: { unit: \"elements\", verb: \"contenir\" },\n set: { unit: \"elements\", verb: \"contenir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entrada\",\n email: \"adre\u00E7a electr\u00F2nica\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data i hora ISO\",\n date: \"data ISO\",\n time: \"hora ISO\",\n duration: \"durada ISO\",\n ipv4: \"adre\u00E7a IPv4\",\n ipv6: \"adre\u00E7a IPv6\",\n cidrv4: \"rang IPv4\",\n cidrv6: \"rang IPv6\",\n base64: \"cadena codificada en base64\",\n base64url: \"cadena codificada en base64url\",\n json_string: \"cadena JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Tipus inv\u00E0lid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n }\n return `Tipus inv\u00E0lid: s'esperava ${expected}, s'ha rebut ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n return `Format inv\u00E0lid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Clau inv\u00E0lida a ${issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n case \"invalid_element\":\n return `Element inv\u00E0lid a ${issue.origin}`;\n default:\n return `Entrada inv\u00E0lida`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n email: \"e-mailov\u00E1 adresa\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"datum a \u010Das ve form\u00E1tu ISO\",\n date: \"datum ve form\u00E1tu ISO\",\n time: \"\u010Das ve form\u00E1tu ISO\",\n duration: \"doba trv\u00E1n\u00ED ISO\",\n ipv4: \"IPv4 adresa\",\n ipv6: \"IPv6 adresa\",\n cidrv4: \"rozsah IPv4\",\n cidrv6: \"rozsah IPv6\",\n base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n e164: \"\u010D\u00EDslo E.164\",\n jwt: \"JWT\",\n template_literal: \"vstup\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u010D\u00EDslo\",\n string: \"\u0159et\u011Bzec\",\n function: \"funkce\",\n array: \"pole\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no instanceof ${issue.expected}, obdr\u017Eeno ${received}`;\n }\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${expected}, obdr\u017Eeno ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n }\n return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n }\n return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n return `Neplatn\u00FD form\u00E1t ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n case \"invalid_union\":\n return \"Neplatn\u00FD vstup\";\n case \"invalid_element\":\n return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n default:\n return `Neplatn\u00FD vstup`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tegn\", verb: \"havde\" },\n file: { unit: \"bytes\", verb: \"havde\" },\n array: { unit: \"elementer\", verb: \"indeholdt\" },\n set: { unit: \"elementer\", verb: \"indeholdt\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"e-mailadresse\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO dato- og klokkesl\u00E6t\",\n date: \"ISO-dato\",\n time: \"ISO-klokkesl\u00E6t\",\n duration: \"ISO-varighed\",\n ipv4: \"IPv4-omr\u00E5de\",\n ipv6: \"IPv6-omr\u00E5de\",\n cidrv4: \"IPv4-spektrum\",\n cidrv6: \"IPv6-spektrum\",\n base64: \"base64-kodet streng\",\n base64url: \"base64url-kodet streng\",\n json_string: \"JSON-streng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"streng\",\n number: \"tal\",\n boolean: \"boolean\",\n array: \"liste\",\n object: \"objekt\",\n set: \"s\u00E6t\",\n file: \"fil\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n }\n return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ugyldig v\u00E6rdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ugyldigt valg: forventede en af f\u00F8lgende ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ugyldig streng: skal matche m\u00F8nsteret ${_issue.pattern}`;\n return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ugyldigt tal: skal v\u00E6re deleligt med ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ukendte n\u00F8gler\" : \"Ukendt n\u00F8gle\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ugyldig n\u00F8gle i ${issue.origin}`;\n case \"invalid_union\":\n return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n case \"invalid_element\":\n return `Ugyldig v\u00E6rdi i ${issue.origin}`;\n default:\n return `Ugyldigt input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"Zeichen\", verb: \"zu haben\" },\n file: { unit: \"Bytes\", verb: \"zu haben\" },\n array: { unit: \"Elemente\", verb: \"zu haben\" },\n set: { unit: \"Elemente\", verb: \"zu haben\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"Eingabe\",\n email: \"E-Mail-Adresse\",\n url: \"URL\",\n emoji: \"Emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-Datum und -Uhrzeit\",\n date: \"ISO-Datum\",\n time: \"ISO-Uhrzeit\",\n duration: \"ISO-Dauer\",\n ipv4: \"IPv4-Adresse\",\n ipv6: \"IPv6-Adresse\",\n cidrv4: \"IPv4-Bereich\",\n cidrv6: \"IPv6-Bereich\",\n base64: \"Base64-codierter String\",\n base64url: \"Base64-URL-codierter String\",\n json_string: \"JSON-String\",\n e164: \"E.164-Nummer\",\n jwt: \"JWT\",\n template_literal: \"Eingabe\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"Zahl\",\n array: \"Array\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ung\u00FCltige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n }\n return `Ung\u00FCltige Eingabe: erwartet ${expected}, erhalten ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n }\n return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n if (_issue.format === \"ends_with\")\n return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n if (_issue.format === \"includes\")\n return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n if (_issue.format === \"regex\")\n return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n return `Ung\u00FCltig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n case \"invalid_union\":\n return \"Ung\u00FCltige Eingabe\";\n case \"invalid_element\":\n return `Ung\u00FCltiger Wert in ${issue.origin}`;\n default:\n return `Ung\u00FCltige Eingabe`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"characters\", verb: \"to have\" },\n file: { unit: \"bytes\", verb: \"to have\" },\n array: { unit: \"items\", verb: \"to have\" },\n set: { unit: \"items\", verb: \"to have\" },\n map: { unit: \"entries\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n mac: \"MAC address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n // type names: missing keys = do not translate (use raw value via ?? fallback)\n const TypeDictionary = {\n // Compatibility: \"nan\" -> \"NaN\" for display\n nan: \"NaN\",\n // All other type names omitted - they fall back to raw values via ?? operator\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n return `Invalid input: expected ${expected}, received ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Invalid key in ${issue.origin}`;\n case \"invalid_union\":\n return \"Invalid input\";\n case \"invalid_element\":\n return `Invalid value in ${issue.origin}`;\n default:\n return `Invalid input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karaktrojn\", verb: \"havi\" },\n file: { unit: \"bajtojn\", verb: \"havi\" },\n array: { unit: \"elementojn\", verb: \"havi\" },\n set: { unit: \"elementojn\", verb: \"havi\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"enigo\",\n email: \"retadreso\",\n url: \"URL\",\n emoji: \"emo\u011Dio\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-datotempo\",\n date: \"ISO-dato\",\n time: \"ISO-tempo\",\n duration: \"ISO-da\u016Dro\",\n ipv4: \"IPv4-adreso\",\n ipv6: \"IPv6-adreso\",\n cidrv4: \"IPv4-rango\",\n cidrv6: \"IPv6-rango\",\n base64: \"64-ume kodita karaktraro\",\n base64url: \"URL-64-ume kodita karaktraro\",\n json_string: \"JSON-karaktraro\",\n e164: \"E.164-nombro\",\n jwt: \"JWT\",\n template_literal: \"enigo\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombro\",\n array: \"tabelo\",\n null: \"senvalora\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Nevalida enigo: atendi\u011Dis instanceof ${issue.expected}, ricevi\u011Dis ${received}`;\n }\n return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Nevalida \u015Dlosilo en ${issue.origin}`;\n case \"invalid_union\":\n return \"Nevalida enigo\";\n case \"invalid_element\":\n return `Nevalida valoro en ${issue.origin}`;\n default:\n return `Nevalida enigo`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caracteres\", verb: \"tener\" },\n file: { unit: \"bytes\", verb: \"tener\" },\n array: { unit: \"elementos\", verb: \"tener\" },\n set: { unit: \"elementos\", verb: \"tener\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entrada\",\n email: \"direcci\u00F3n de correo electr\u00F3nico\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"fecha y hora ISO\",\n date: \"fecha ISO\",\n time: \"hora ISO\",\n duration: \"duraci\u00F3n ISO\",\n ipv4: \"direcci\u00F3n IPv4\",\n ipv6: \"direcci\u00F3n IPv6\",\n cidrv4: \"rango IPv4\",\n cidrv6: \"rango IPv6\",\n base64: \"cadena codificada en base64\",\n base64url: \"URL codificada en base64\",\n json_string: \"cadena JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"texto\",\n number: \"n\u00FAmero\",\n boolean: \"booleano\",\n array: \"arreglo\",\n object: \"objeto\",\n set: \"conjunto\",\n file: \"archivo\",\n date: \"fecha\",\n bigint: \"n\u00FAmero grande\",\n symbol: \"s\u00EDmbolo\",\n undefined: \"indefinido\",\n null: \"nulo\",\n function: \"funci\u00F3n\",\n map: \"mapa\",\n record: \"registro\",\n tuple: \"tupla\",\n enum: \"enumeraci\u00F3n\",\n union: \"uni\u00F3n\",\n literal: \"literal\",\n promise: \"promesa\",\n void: \"vac\u00EDo\",\n never: \"nunca\",\n unknown: \"desconocido\",\n any: \"cualquiera\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entrada inv\u00E1lida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n }\n return `Entrada inv\u00E1lida: se esperaba ${expected}, recibido ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `Demasiado peque\u00F1o: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Demasiado peque\u00F1o: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n return `Inv\u00E1lido ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Llave inv\u00E1lida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E1lida\";\n case \"invalid_element\":\n return `Valor inv\u00E1lido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n default:\n return `Entrada inv\u00E1lida`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n url: \"URL\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n json_string: \"JSON \u0631\u0634\u062A\u0647\",\n e164: \"E.164 \u0639\u062F\u062F\",\n jwt: \"JWT\",\n template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0639\u062F\u062F\",\n array: \"\u0622\u0631\u0627\u06CC\u0647\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n }\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1) {\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n }\n return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n }\n return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n }\n return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n }\n if (_issue.format === \"ends_with\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n }\n if (_issue.format === \"includes\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n }\n if (_issue.format === \"regex\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n }\n return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n }\n case \"not_multiple_of\":\n return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n case \"unrecognized_keys\":\n return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n case \"invalid_union\":\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n case \"invalid_element\":\n return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n default:\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n file: { unit: \"tavua\", subject: \"tiedoston\" },\n array: { unit: \"alkiota\", subject: \"listan\" },\n set: { unit: \"alkiota\", subject: \"joukon\" },\n number: { unit: \"\", subject: \"luvun\" },\n bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n int: { unit: \"\", subject: \"kokonaisluvun\" },\n date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n email: \"s\u00E4hk\u00F6postiosoite\",\n url: \"URL-osoite\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-aikaleima\",\n date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n time: \"ISO-aika\",\n duration: \"ISO-kesto\",\n ipv4: \"IPv4-osoite\",\n ipv6: \"IPv6-osoite\",\n cidrv4: \"IPv4-alue\",\n cidrv6: \"IPv6-alue\",\n base64: \"base64-koodattu merkkijono\",\n base64url: \"base64url-koodattu merkkijono\",\n json_string: \"JSON-merkkijono\",\n e164: \"E.164-luku\",\n jwt: \"JWT\",\n template_literal: \"templaattimerkkijono\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n }\n return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n }\n return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n }\n return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\") {\n return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n }\n return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return \"Virheellinen avain tietueessa\";\n case \"invalid_union\":\n return \"Virheellinen unioni\";\n case \"invalid_element\":\n return \"Virheellinen arvo joukossa\";\n default:\n return `Virheellinen sy\u00F6te`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n file: { unit: \"octets\", verb: \"avoir\" },\n array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entr\u00E9e\",\n email: \"adresse e-mail\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"date et heure ISO\",\n date: \"date ISO\",\n time: \"heure ISO\",\n duration: \"dur\u00E9e ISO\",\n ipv4: \"adresse IPv4\",\n ipv6: \"adresse IPv6\",\n cidrv4: \"plage IPv4\",\n cidrv6: \"plage IPv6\",\n base64: \"cha\u00EEne encod\u00E9e en base64\",\n base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n json_string: \"cha\u00EEne JSON\",\n e164: \"num\u00E9ro E.164\",\n jwt: \"JWT\",\n template_literal: \"entr\u00E9e\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombre\",\n array: \"tableau\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entr\u00E9e invalide : instanceof ${issue.expected} attendu, ${received} re\u00E7u`;\n }\n return `Entr\u00E9e invalide : ${expected} attendu, ${received} re\u00E7u`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop grand : ${issue.origin ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n return `Trop grand : ${issue.origin ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Trop petit : ${issue.origin} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Trop petit : ${issue.origin} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n }\n case \"not_multiple_of\":\n return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cl\u00E9 invalide dans ${issue.origin}`;\n case \"invalid_union\":\n return \"Entr\u00E9e invalide\";\n case \"invalid_element\":\n return `Valeur invalide dans ${issue.origin}`;\n default:\n return `Entr\u00E9e invalide`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n file: { unit: \"octets\", verb: \"avoir\" },\n array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entr\u00E9e\",\n email: \"adresse courriel\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"date-heure ISO\",\n date: \"date ISO\",\n time: \"heure ISO\",\n duration: \"dur\u00E9e ISO\",\n ipv4: \"adresse IPv4\",\n ipv6: \"adresse IPv6\",\n cidrv4: \"plage IPv4\",\n cidrv6: \"plage IPv6\",\n base64: \"cha\u00EEne encod\u00E9e en base64\",\n base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n json_string: \"cha\u00EEne JSON\",\n e164: \"num\u00E9ro E.164\",\n jwt: \"JWT\",\n template_literal: \"entr\u00E9e\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entr\u00E9e invalide : attendu instanceof ${issue.expected}, re\u00E7u ${received}`;\n }\n return `Entr\u00E9e invalide : attendu ${expected}, re\u00E7u ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u2264\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u2265\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n }\n case \"not_multiple_of\":\n return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cl\u00E9 invalide dans ${issue.origin}`;\n case \"invalid_union\":\n return \"Entr\u00E9e invalide\";\n case \"invalid_element\":\n return `Valeur invalide dans ${issue.origin}`;\n default:\n return `Entr\u00E9e invalide`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n // Hebrew labels + grammatical gender\n const TypeNames = {\n string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA\", gender: \"f\" },\n number: { label: \"\u05DE\u05E1\u05E4\u05E8\", gender: \"m\" },\n boolean: { label: \"\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9\", gender: \"m\" },\n bigint: { label: \"BigInt\", gender: \"m\" },\n date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA\", gender: \"m\" },\n array: { label: \"\u05DE\u05E2\u05E8\u05DA\", gender: \"m\" },\n object: { label: \"\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8\", gender: \"m\" },\n null: { label: \"\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)\", gender: \"m\" },\n undefined: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)\", gender: \"m\" },\n symbol: { label: \"\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)\", gender: \"m\" },\n function: { label: \"\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4\", gender: \"f\" },\n map: { label: \"\u05DE\u05E4\u05D4 (Map)\", gender: \"f\" },\n set: { label: \"\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)\", gender: \"f\" },\n file: { label: \"\u05E7\u05D5\u05D1\u05E5\", gender: \"m\" },\n promise: { label: \"Promise\", gender: \"m\" },\n NaN: { label: \"NaN\", gender: \"m\" },\n unknown: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2\", gender: \"m\" },\n value: { label: \"\u05E2\u05E8\u05DA\", gender: \"m\" },\n };\n // Sizing units for size-related messages + localized origin labels\n const Sizable = {\n string: { unit: \"\u05EA\u05D5\u05D5\u05D9\u05DD\", shortLabel: \"\u05E7\u05E6\u05E8\", longLabel: \"\u05D0\u05E8\u05D5\u05DA\" },\n file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n number: { unit: \"\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" }, // no unit\n };\n // Helpers \u2014 labels, articles, and verbs\n const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n const typeLabel = (t) => {\n const e = typeEntry(t);\n if (e)\n return e.label;\n // fallback: show raw string if unknown\n return t ?? TypeNames.unknown.label;\n };\n const withDefinite = (t) => `\u05D4${typeLabel(t)}`;\n const verbFor = (t) => {\n const e = typeEntry(t);\n const gender = e?.gender ?? \"m\";\n return gender === \"f\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA\" : \"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA\";\n };\n const getSizing = (origin) => {\n if (!origin)\n return null;\n return Sizable[origin] ?? null;\n };\n const FormatDictionary = {\n regex: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n email: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\", gender: \"f\" },\n url: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n emoji: { label: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\", gender: \"m\" },\n uuid: { label: \"UUID\", gender: \"m\" },\n nanoid: { label: \"nanoid\", gender: \"m\" },\n guid: { label: \"GUID\", gender: \"m\" },\n cuid: { label: \"cuid\", gender: \"m\" },\n cuid2: { label: \"cuid2\", gender: \"m\" },\n ulid: { label: \"ULID\", gender: \"m\" },\n xid: { label: \"XID\", gender: \"m\" },\n ksuid: { label: \"KSUID\", gender: \"m\" },\n datetime: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\", gender: \"m\" },\n time: { label: \"\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n duration: { label: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n ipv4: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\", gender: \"f\" },\n ipv6: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\", gender: \"f\" },\n cidrv4: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv4\", gender: \"m\" },\n cidrv6: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv6\", gender: \"m\" },\n base64: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\", gender: \"f\" },\n base64url: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n json_string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\", gender: \"f\" },\n e164: { label: \"\u05DE\u05E1\u05E4\u05E8 E.164\", gender: \"m\" },\n jwt: { label: \"JWT\", gender: \"m\" },\n ends_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n includes: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n lowercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n starts_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n uppercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n // Expected type: show without definite article for clearer Hebrew\n const expectedKey = issue.expected;\n const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n // Received: show localized label if known, otherwise constructor/raw\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n }\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n }\n case \"invalid_value\": {\n if (issue.values.length === 1) {\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${util.stringifyPrimitive(issue.values[0])}`;\n }\n // Join values with proper Hebrew formatting\n const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n if (issue.values.length === 2) {\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;\n }\n // For 3+ values: \"a\", \"b\" \u05D0\u05D5 \"c\"\n const lastValue = stringified[stringified.length - 1];\n const restValues = stringified.slice(0, -1).join(\", \");\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;\n }\n case \"too_big\": {\n const sizing = getSizing(issue.origin);\n const subject = withDefinite(issue.origin ?? \"value\");\n if (issue.origin === \"string\") {\n // Special handling for strings - more natural Hebrew\n return `${sizing?.longLabel ?? \"\u05D0\u05E8\u05D5\u05DA\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA\" : \"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8\"}`.trim();\n }\n if (issue.origin === \"number\") {\n // Natural Hebrew for numbers\n const comparison = issue.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue.maximum}`;\n return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n }\n if (issue.origin === \"array\" || issue.origin === \"set\") {\n // Natural Hebrew for arrays and sets\n const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n const comparison = issue.inclusive\n ? `${issue.maximum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`\n : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n }\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const be = verbFor(issue.origin ?? \"value\");\n if (sizing?.unit) {\n return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n }\n return `${sizing?.longLabel ?? \"\u05D2\u05D3\u05D5\u05DC\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const sizing = getSizing(issue.origin);\n const subject = withDefinite(issue.origin ?? \"value\");\n if (issue.origin === \"string\") {\n // Special handling for strings - more natural Hebrew\n return `${sizing?.shortLabel ?? \"\u05E7\u05E6\u05E8\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA\"}`.trim();\n }\n if (issue.origin === \"number\") {\n // Natural Hebrew for numbers\n const comparison = issue.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue.minimum}`;\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n }\n if (issue.origin === \"array\" || issue.origin === \"set\") {\n // Natural Hebrew for arrays and sets\n const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n // Special case for singular (minimum === 1)\n if (issue.minimum === 1 && issue.inclusive) {\n const singularPhrase = issue.origin === \"set\" ? \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\";\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;\n }\n const comparison = issue.inclusive\n ? `${issue.minimum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`\n : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n }\n const adj = issue.inclusive ? \">=\" : \">\";\n const be = verbFor(issue.origin ?? \"value\");\n if (sizing?.unit) {\n return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `${sizing?.shortLabel ?? \"\u05E7\u05D8\u05DF\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n // These apply to strings \u2014 use feminine grammar + \u05D4\u05F3 \u05D4\u05D9\u05D3\u05D9\u05E2\u05D4\n if (_issue.format === \"starts_with\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n // Handle gender agreement for formats\n const nounEntry = FormatDictionary[_issue.format];\n const noun = nounEntry?.label ?? _issue.format;\n const gender = nounEntry?.gender ?? \"m\";\n const adjective = gender === \"f\" ? \"\u05EA\u05E7\u05D9\u05E0\u05D4\" : \"\u05EA\u05E7\u05D9\u05DF\";\n return `${noun} \u05DC\u05D0 ${adjective}`;\n }\n case \"not_multiple_of\":\n return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\": {\n return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;\n }\n case \"invalid_union\":\n return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n case \"invalid_element\": {\n const place = withDefinite(issue.origin ?? \"array\");\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;\n }\n default:\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"legyen\" },\n file: { unit: \"byte\", verb: \"legyen\" },\n array: { unit: \"elem\", verb: \"legyen\" },\n set: { unit: \"elem\", verb: \"legyen\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"bemenet\",\n email: \"email c\u00EDm\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO id\u0151b\u00E9lyeg\",\n date: \"ISO d\u00E1tum\",\n time: \"ISO id\u0151\",\n duration: \"ISO id\u0151intervallum\",\n ipv4: \"IPv4 c\u00EDm\",\n ipv6: \"IPv6 c\u00EDm\",\n cidrv4: \"IPv4 tartom\u00E1ny\",\n cidrv6: \"IPv6 tartom\u00E1ny\",\n base64: \"base64-k\u00F3dolt string\",\n base64url: \"base64url-k\u00F3dolt string\",\n json_string: \"JSON string\",\n e164: \"E.164 sz\u00E1m\",\n jwt: \"JWT\",\n template_literal: \"bemenet\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"sz\u00E1m\",\n array: \"t\u00F6mb\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k instanceof ${issue.expected}, a kapott \u00E9rt\u00E9k ${received}`;\n }\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${expected}, a kapott \u00E9rt\u00E9k ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n if (_issue.format === \"ends_with\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n if (_issue.format === \"includes\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n if (_issue.format === \"regex\")\n return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n return `\u00C9rv\u00E9nytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n case \"unrecognized_keys\":\n return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n case \"invalid_union\":\n return \"\u00C9rv\u00E9nytelen bemenet\";\n case \"invalid_element\":\n return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n default:\n return `\u00C9rv\u00E9nytelen bemenet`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n if (!word)\n return \"\";\n const vowels = [\"\u0561\", \"\u0565\", \"\u0568\", \"\u056B\", \"\u0578\", \"\u0578\u0582\", \"\u0585\"];\n const lastChar = word[word.length - 1];\n return word + (vowels.includes(lastChar) ? \"\u0576\" : \"\u0568\");\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0576\u0577\u0561\u0576\",\n many: \"\u0576\u0577\u0561\u0576\u0576\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n file: {\n unit: {\n one: \"\u0562\u0561\u0575\u0569\",\n many: \"\u0562\u0561\u0575\u0569\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n array: {\n unit: {\n one: \"\u057F\u0561\u0580\u0580\",\n many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n set: {\n unit: {\n one: \"\u057F\u0561\u0580\u0580\",\n many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0574\u0578\u0582\u057F\u0584\",\n email: \"\u0567\u056C. \u0570\u0561\u057D\u0581\u0565\",\n url: \"URL\",\n emoji: \"\u0567\u0574\u0578\u057B\u056B\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574\",\n date: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E\",\n time: \"ISO \u056A\u0561\u0574\",\n duration: \"ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\",\n ipv4: \"IPv4 \u0570\u0561\u057D\u0581\u0565\",\n ipv6: \"IPv6 \u0570\u0561\u057D\u0581\u0565\",\n cidrv4: \"IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n cidrv6: \"IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n base64: \"base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n base64url: \"base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n json_string: \"JSON \u057F\u0578\u0572\",\n e164: \"E.164 \u0570\u0561\u0574\u0561\u0580\",\n jwt: \"JWT\",\n template_literal: \"\u0574\u0578\u0582\u057F\u0584\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0569\u056B\u057E\",\n array: \"\u0566\u0561\u0576\u0563\u057E\u0561\u056E\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n }\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${util.stringifyPrimitive(issue.values[1])}`;\n return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056C\u056B\u0576\u056B ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056C\u056B\u0576\u056B ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B \"${_issue.prefix}\"-\u0578\u057E`;\n if (_issue.format === \"ends_with\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B \"${_issue.suffix}\"-\u0578\u057E`;\n if (_issue.format === \"includes\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;\n return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue.divisor}-\u056B`;\n case \"unrecognized_keys\":\n return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue.keys.length > 1 ? \"\u0576\u0565\u0580\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n case \"invalid_union\":\n return \"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\";\n case \"invalid_element\":\n return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n default:\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"memiliki\" },\n file: { unit: \"byte\", verb: \"memiliki\" },\n array: { unit: \"item\", verb: \"memiliki\" },\n set: { unit: \"item\", verb: \"memiliki\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"alamat email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"tanggal dan waktu format ISO\",\n date: \"tanggal format ISO\",\n time: \"jam format ISO\",\n duration: \"durasi format ISO\",\n ipv4: \"alamat IPv4\",\n ipv6: \"alamat IPv6\",\n cidrv4: \"rentang alamat IPv4\",\n cidrv6: \"rentang alamat IPv6\",\n base64: \"string dengan enkode base64\",\n base64url: \"string dengan enkode base64url\",\n json_string: \"string JSON\",\n e164: \"angka E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n }\n return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n }\n case \"not_multiple_of\":\n return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kunci tidak valid di ${issue.origin}`;\n case \"invalid_union\":\n return \"Input tidak valid\";\n case \"invalid_element\":\n return `Nilai tidak valid di ${issue.origin}`;\n default:\n return `Input tidak valid`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"stafi\", verb: \"a\u00F0 hafa\" },\n file: { unit: \"b\u00E6ti\", verb: \"a\u00F0 hafa\" },\n array: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n set: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"gildi\",\n email: \"netfang\",\n url: \"vefsl\u00F3\u00F0\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO dagsetning og t\u00EDmi\",\n date: \"ISO dagsetning\",\n time: \"ISO t\u00EDmi\",\n duration: \"ISO t\u00EDmalengd\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded strengur\",\n base64url: \"base64url-encoded strengur\",\n json_string: \"JSON strengur\",\n e164: \"E.164 t\u00F6lugildi\",\n jwt: \"JWT\",\n template_literal: \"gildi\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u00FAmer\",\n array: \"fylki\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera instanceof ${issue.expected}`;\n }\n return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera ${expected}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Rangt gildi: gert r\u00E1\u00F0 fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00D3gilt val: m\u00E1 vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} s\u00E9 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} s\u00E9 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 byrja \u00E1 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 enda \u00E1 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 innihalda \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 fylgja mynstri ${_issue.pattern}`;\n return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `R\u00F6ng tala: ver\u00F0ur a\u00F0 vera margfeldi af ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u00D3\u00FEekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Rangur lykill \u00ED ${issue.origin}`;\n case \"invalid_union\":\n return \"Rangt gildi\";\n case \"invalid_element\":\n return `Rangt gildi \u00ED ${issue.origin}`;\n default:\n return `Rangt gildi`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caratteri\", verb: \"avere\" },\n file: { unit: \"byte\", verb: \"avere\" },\n array: { unit: \"elementi\", verb: \"avere\" },\n set: { unit: \"elementi\", verb: \"avere\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"indirizzo email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data e ora ISO\",\n date: \"data ISO\",\n time: \"ora ISO\",\n duration: \"durata ISO\",\n ipv4: \"indirizzo IPv4\",\n ipv6: \"indirizzo IPv6\",\n cidrv4: \"intervallo IPv4\",\n cidrv6: \"intervallo IPv6\",\n base64: \"stringa codificata in base64\",\n base64url: \"URL codificata in base64\",\n json_string: \"stringa JSON\",\n e164: \"numero E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"numero\",\n array: \"vettore\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n }\n return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Chiave non valida in ${issue.origin}`;\n case \"invalid_union\":\n return \"Input non valido\";\n case \"invalid_element\":\n return `Valore non valido in ${issue.origin}`;\n default:\n return `Input non valido`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u5165\u529B\u5024\",\n email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n url: \"URL\",\n emoji: \"\u7D75\u6587\u5B57\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO\u65E5\u6642\",\n date: \"ISO\u65E5\u4ED8\",\n time: \"ISO\u6642\u523B\",\n duration: \"ISO\u671F\u9593\",\n ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n cidrv4: \"IPv4\u7BC4\u56F2\",\n cidrv6: \"IPv6\u7BC4\u56F2\",\n base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n json_string: \"JSON\u6587\u5B57\u5217\",\n e164: \"E.164\u756A\u53F7\",\n jwt: \"JWT\",\n template_literal: \"\u5165\u529B\u5024\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u6570\u5024\",\n array: \"\u914D\u5217\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n }\n return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"ends_with\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"includes\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"regex\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n case \"unrecognized_keys\":\n return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n case \"invalid_key\":\n return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n case \"invalid_union\":\n return \"\u7121\u52B9\u306A\u5165\u529B\";\n case \"invalid_element\":\n return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n default:\n return `\u7121\u52B9\u306A\u5165\u529B`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n file: { unit: \"\u10D1\u10D0\u10D8\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n array: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n set: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n email: \"\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n url: \"URL\",\n emoji: \"\u10D4\u10DB\u10DD\u10EF\u10D8\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD\",\n date: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8\",\n time: \"\u10D3\u10E0\u10DD\",\n duration: \"\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0\",\n ipv4: \"IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n ipv6: \"IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n cidrv4: \"IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n cidrv6: \"IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n base64: \"base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n base64url: \"base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n json_string: \"JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n e164: \"E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8\",\n jwt: \"JWT\",\n template_literal: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8\",\n string: \"\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n boolean: \"\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8\",\n function: \"\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0\",\n array: \"\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n }\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${util.joinValues(issue.values, \"|\")}-\u10D3\u10D0\u10DC`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.prefix}\"-\u10D8\u10D7`;\n }\n if (_issue.format === \"ends_with\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.suffix}\"-\u10D8\u10D7`;\n if (_issue.format === \"includes\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 \"${_issue.includes}\"-\u10E1`;\n if (_issue.format === \"regex\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;\n case \"unrecognized_keys\":\n return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue.keys.length > 1 ? \"\u10D4\u10D1\u10D8\" : \"\u10D8\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue.origin}-\u10E8\u10D8`;\n case \"invalid_union\":\n return \"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\";\n case \"invalid_element\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue.origin}-\u10E8\u10D8`;\n default:\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n url: \"URL\",\n emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n e164: \"\u179B\u17C1\u1781 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u179B\u17C1\u1781\",\n array: \"\u17A2\u17B6\u179A\u17C1 (Array)\",\n null: \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n }\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n case \"invalid_union\":\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n case \"invalid_element\":\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n default:\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n return km();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n array: { unit: \"\uAC1C\", verb: \"to have\" },\n set: { unit: \"\uAC1C\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\uC785\uB825\",\n email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n url: \"URL\",\n emoji: \"\uC774\uBAA8\uC9C0\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \uB0A0\uC9DC\uC2DC\uAC04\",\n date: \"ISO \uB0A0\uC9DC\",\n time: \"ISO \uC2DC\uAC04\",\n duration: \"ISO \uAE30\uAC04\",\n ipv4: \"IPv4 \uC8FC\uC18C\",\n ipv6: \"IPv6 \uC8FC\uC18C\",\n cidrv4: \"IPv4 \uBC94\uC704\",\n cidrv6: \"IPv6 \uBC94\uC704\",\n base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n json_string: \"JSON \uBB38\uC790\uC5F4\",\n e164: \"E.164 \uBC88\uD638\",\n jwt: \"JWT\",\n template_literal: \"\uC785\uB825\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n }\n return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n const sizing = getSizing(issue.origin);\n const unit = sizing?.unit ?? \"\uC694\uC18C\";\n if (sizing)\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n const sizing = getSizing(issue.origin);\n const unit = sizing?.unit ?? \"\uC694\uC18C\";\n if (sizing) {\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n }\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n }\n if (_issue.format === \"ends_with\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n if (_issue.format === \"includes\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n if (_issue.format === \"regex\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n case \"unrecognized_keys\":\n return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n case \"invalid_union\":\n return `\uC798\uBABB\uB41C \uC785\uB825`;\n case \"invalid_element\":\n return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n default:\n return `\uC798\uBABB\uB41C \uC785\uB825`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n const abs = Math.abs(number);\n const last = abs % 10;\n const last2 = abs % 100;\n if ((last2 >= 11 && last2 <= 19) || last === 0)\n return \"many\";\n if (last === 1)\n return \"one\";\n return \"few\";\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"simbolis\",\n few: \"simboliai\",\n many: \"simboli\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi b\u016Bti ne ilgesn\u0117 kaip\",\n notInclusive: \"turi b\u016Bti trumpesn\u0117 kaip\",\n },\n bigger: {\n inclusive: \"turi b\u016Bti ne trumpesn\u0117 kaip\",\n notInclusive: \"turi b\u016Bti ilgesn\u0117 kaip\",\n },\n },\n },\n file: {\n unit: {\n one: \"baitas\",\n few: \"baitai\",\n many: \"bait\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi b\u016Bti ne didesnis kaip\",\n notInclusive: \"turi b\u016Bti ma\u017Eesnis kaip\",\n },\n bigger: {\n inclusive: \"turi b\u016Bti ne ma\u017Eesnis kaip\",\n notInclusive: \"turi b\u016Bti didesnis kaip\",\n },\n },\n },\n array: {\n unit: {\n one: \"element\u0105\",\n few: \"elementus\",\n many: \"element\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n },\n bigger: {\n inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n notInclusive: \"turi tur\u0117ti daugiau kaip\",\n },\n },\n },\n set: {\n unit: {\n one: \"element\u0105\",\n few: \"elementus\",\n many: \"element\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n },\n bigger: {\n inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n notInclusive: \"turi tur\u0117ti daugiau kaip\",\n },\n },\n },\n };\n function getSizing(origin, unitType, inclusive, targetShouldBe) {\n const result = Sizable[origin] ?? null;\n if (result === null)\n return result;\n return {\n unit: result.unit[unitType],\n verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n };\n }\n const FormatDictionary = {\n regex: \"\u012Fvestis\",\n email: \"el. pa\u0161to adresas\",\n url: \"URL\",\n emoji: \"jaustukas\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO data ir laikas\",\n date: \"ISO data\",\n time: \"ISO laikas\",\n duration: \"ISO trukm\u0117\",\n ipv4: \"IPv4 adresas\",\n ipv6: \"IPv6 adresas\",\n cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n base64: \"base64 u\u017Ekoduota eilut\u0117\",\n base64url: \"base64url u\u017Ekoduota eilut\u0117\",\n json_string: \"JSON eilut\u0117\",\n e164: \"E.164 numeris\",\n jwt: \"JWT\",\n template_literal: \"\u012Fvestis\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"skai\u010Dius\",\n bigint: \"sveikasis skai\u010Dius\",\n string: \"eilut\u0117\",\n boolean: \"login\u0117 reik\u0161m\u0117\",\n undefined: \"neapibr\u0117\u017Eta reik\u0161m\u0117\",\n function: \"funkcija\",\n symbol: \"simbolis\",\n array: \"masyvas\",\n object: \"objektas\",\n null: \"nulin\u0117 reik\u0161m\u0117\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue.expected}`;\n }\n return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Privalo b\u016Bti ${util.stringifyPrimitive(issue.values[0])}`;\n return `Privalo b\u016Bti vienas i\u0161 ${util.joinValues(issue.values, \"|\")} pasirinkim\u0173`;\n case \"too_big\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n if (sizing?.verb)\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n const adj = issue.inclusive ? \"ne didesnis kaip\" : \"ma\u017Eesnis kaip\";\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n }\n case \"too_small\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n if (sizing?.verb)\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n const adj = issue.inclusive ? \"ne ma\u017Eesnis kaip\" : \"didesnis kaip\";\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Eilut\u0117 privalo prasid\u0117ti \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Eilut\u0117 privalo pasibaigti \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Eilut\u0117 privalo \u012Ftraukti \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;\n return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Skai\u010Dius privalo b\u016Bti ${issue.divisor} kartotinis.`;\n case \"unrecognized_keys\":\n return `Neatpa\u017Eint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return \"Rastas klaidingas raktas\";\n case \"invalid_union\":\n return \"Klaidinga \u012Fvestis\";\n case \"invalid_element\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi klaiding\u0105 \u012Fvest\u012F`;\n }\n default:\n return \"Klaidinga \u012Fvestis\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u043D\u0435\u0441\",\n email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u045F\u0438\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n json_string: \"JSON \u043D\u0438\u0437\u0430\",\n e164: \"E.164 \u0431\u0440\u043E\u0458\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u043D\u0435\u0441\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0431\u0440\u043E\u0458\",\n array: \"\u043D\u0438\u0437\u0430\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n }\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n case \"invalid_element\":\n return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n default:\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"aksara\", verb: \"mempunyai\" },\n file: { unit: \"bait\", verb: \"mempunyai\" },\n array: { unit: \"elemen\", verb: \"mempunyai\" },\n set: { unit: \"elemen\", verb: \"mempunyai\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"alamat e-mel\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"tarikh masa ISO\",\n date: \"tarikh ISO\",\n time: \"masa ISO\",\n duration: \"tempoh ISO\",\n ipv4: \"alamat IPv4\",\n ipv6: \"alamat IPv6\",\n cidrv4: \"julat IPv4\",\n cidrv6: \"julat IPv6\",\n base64: \"string dikodkan base64\",\n base64url: \"string dikodkan base64url\",\n json_string: \"string JSON\",\n e164: \"nombor E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombor\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n }\n return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n }\n case \"not_multiple_of\":\n return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kunci tidak sah dalam ${issue.origin}`;\n case \"invalid_union\":\n return \"Input tidak sah\";\n case \"invalid_element\":\n return `Nilai tidak sah dalam ${issue.origin}`;\n default:\n return `Input tidak sah`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tekens\", verb: \"heeft\" },\n file: { unit: \"bytes\", verb: \"heeft\" },\n array: { unit: \"elementen\", verb: \"heeft\" },\n set: { unit: \"elementen\", verb: \"heeft\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"invoer\",\n email: \"emailadres\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datum en tijd\",\n date: \"ISO datum\",\n time: \"ISO tijd\",\n duration: \"ISO duur\",\n ipv4: \"IPv4-adres\",\n ipv6: \"IPv6-adres\",\n cidrv4: \"IPv4-bereik\",\n cidrv6: \"IPv6-bereik\",\n base64: \"base64-gecodeerde tekst\",\n base64url: \"base64 URL-gecodeerde tekst\",\n json_string: \"JSON string\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"invoer\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"getal\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n }\n return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n if (sizing)\n return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n if (sizing) {\n return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n }\n return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n }\n if (_issue.format === \"ends_with\")\n return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n if (_issue.format === \"includes\")\n return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n if (_issue.format === \"regex\")\n return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n case \"unrecognized_keys\":\n return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ongeldige key in ${issue.origin}`;\n case \"invalid_union\":\n return \"Ongeldige invoer\";\n case \"invalid_element\":\n return `Ongeldige waarde in ${issue.origin}`;\n default:\n return `Ongeldige invoer`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"e-postadresse\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO dato- og klokkeslett\",\n date: \"ISO-dato\",\n time: \"ISO-klokkeslett\",\n duration: \"ISO-varighet\",\n ipv4: \"IPv4-omr\u00E5de\",\n ipv6: \"IPv6-omr\u00E5de\",\n cidrv4: \"IPv4-spekter\",\n cidrv6: \"IPv6-spekter\",\n base64: \"base64-enkodet streng\",\n base64url: \"base64url-enkodet streng\",\n json_string: \"JSON-streng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"tall\",\n array: \"liste\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n }\n return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n case \"invalid_union\":\n return \"Ugyldig input\";\n case \"invalid_element\":\n return `Ugyldig verdi i ${issue.origin}`;\n default:\n return `Ugyldig input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"giren\",\n email: \"epostag\u00E2h\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO heng\u00E2m\u0131\",\n date: \"ISO tarihi\",\n time: \"ISO zaman\u0131\",\n duration: \"ISO m\u00FCddeti\",\n ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n cidrv4: \"IPv4 menzili\",\n cidrv6: \"IPv6 menzili\",\n base64: \"base64-\u015Fifreli metin\",\n base64url: \"base64url-\u015Fifreli metin\",\n json_string: \"JSON metin\",\n e164: \"E.164 say\u0131s\u0131\",\n jwt: \"JWT\",\n template_literal: \"giren\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"numara\",\n array: \"saf\",\n null: \"gayb\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `F\u00E2sit giren: umulan instanceof ${issue.expected}, al\u0131nan ${received}`;\n }\n return `F\u00E2sit giren: umulan ${expected}, al\u0131nan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n }\n return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n if (_issue.format === \"ends_with\")\n return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n if (_issue.format === \"includes\")\n return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n if (_issue.format === \"regex\")\n return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n return `F\u00E2sit ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n case \"invalid_union\":\n return \"Giren tan\u0131namad\u0131.\";\n case \"invalid_element\":\n return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n default:\n return `K\u0131ymet tan\u0131namad\u0131.`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0648\u0631\u0648\u062F\u064A\",\n email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n date: \"\u0646\u06D0\u067C\u0647\",\n time: \"\u0648\u062E\u062A\",\n duration: \"\u0645\u0648\u062F\u0647\",\n ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n base64: \"base64-encoded \u0645\u062A\u0646\",\n base64url: \"base64url-encoded \u0645\u062A\u0646\",\n json_string: \"JSON \u0645\u062A\u0646\",\n e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n jwt: \"JWT\",\n template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0639\u062F\u062F\",\n array: \"\u0627\u0631\u06D0\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n }\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1) {\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n }\n return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n }\n return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n }\n return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n }\n if (_issue.format === \"ends_with\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n }\n if (_issue.format === \"includes\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n }\n if (_issue.format === \"regex\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n }\n return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n }\n case \"not_multiple_of\":\n return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n case \"unrecognized_keys\":\n return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n case \"invalid_union\":\n return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n case \"invalid_element\":\n return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n default:\n return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"wyra\u017Cenie\",\n email: \"adres email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data i godzina w formacie ISO\",\n date: \"data w formacie ISO\",\n time: \"godzina w formacie ISO\",\n duration: \"czas trwania ISO\",\n ipv4: \"adres IPv4\",\n ipv6: \"adres IPv6\",\n cidrv4: \"zakres IPv4\",\n cidrv6: \"zakres IPv6\",\n base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n e164: \"liczba E.164\",\n jwt: \"JWT\",\n template_literal: \"wej\u015Bcie\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"liczba\",\n array: \"tablica\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n }\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n }\n return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n }\n return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n case \"invalid_union\":\n return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n case \"invalid_element\":\n return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n default:\n return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caracteres\", verb: \"ter\" },\n file: { unit: \"bytes\", verb: \"ter\" },\n array: { unit: \"itens\", verb: \"ter\" },\n set: { unit: \"itens\", verb: \"ter\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"padr\u00E3o\",\n email: \"endere\u00E7o de e-mail\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data e hora ISO\",\n date: \"data ISO\",\n time: \"hora ISO\",\n duration: \"dura\u00E7\u00E3o ISO\",\n ipv4: \"endere\u00E7o IPv4\",\n ipv6: \"endere\u00E7o IPv6\",\n cidrv4: \"faixa de IPv4\",\n cidrv6: \"faixa de IPv6\",\n base64: \"texto codificado em base64\",\n base64url: \"URL codificada em base64\",\n json_string: \"texto JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u00FAmero\",\n null: \"nulo\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Tipo inv\u00E1lido: esperado instanceof ${issue.expected}, recebido ${received}`;\n }\n return `Tipo inv\u00E1lido: esperado ${expected}, recebido ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} inv\u00E1lido`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Chave inv\u00E1lida em ${issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E1lida\";\n case \"invalid_element\":\n return `Valor inv\u00E1lido em ${issue.origin}`;\n default:\n return `Campo inv\u00E1lido`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n const absCount = Math.abs(count);\n const lastDigit = absCount % 10;\n const lastTwoDigits = absCount % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n return many;\n }\n if (lastDigit === 1) {\n return one;\n }\n if (lastDigit >= 2 && lastDigit <= 4) {\n return few;\n }\n return many;\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n file: {\n unit: {\n one: \"\u0431\u0430\u0439\u0442\",\n few: \"\u0431\u0430\u0439\u0442\u0430\",\n many: \"\u0431\u0430\u0439\u0442\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n array: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n set: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0432\u043E\u0434\",\n email: \"email \u0430\u0434\u0440\u0435\u0441\",\n url: \"URL\",\n emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0432\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n }\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n case \"invalid_element\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n default:\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znakov\", verb: \"imeti\" },\n file: { unit: \"bajtov\", verb: \"imeti\" },\n array: { unit: \"elementov\", verb: \"imeti\" },\n set: { unit: \"elementov\", verb: \"imeti\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"vnos\",\n email: \"e-po\u0161tni naslov\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datum in \u010Das\",\n date: \"ISO datum\",\n time: \"ISO \u010Das\",\n duration: \"ISO trajanje\",\n ipv4: \"IPv4 naslov\",\n ipv6: \"IPv6 naslov\",\n cidrv4: \"obseg IPv4\",\n cidrv6: \"obseg IPv6\",\n base64: \"base64 kodiran niz\",\n base64url: \"base64url kodiran niz\",\n json_string: \"JSON niz\",\n e164: \"E.164 \u0161tevilka\",\n jwt: \"JWT\",\n template_literal: \"vnos\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0161tevilo\",\n array: \"tabela\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue.expected}, prejeto ${received}`;\n }\n return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neveljaven klju\u010D v ${issue.origin}`;\n case \"invalid_union\":\n return \"Neveljaven vnos\";\n case \"invalid_element\":\n return `Neveljavna vrednost v ${issue.origin}`;\n default:\n return \"Neveljaven vnos\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tecken\", verb: \"att ha\" },\n file: { unit: \"bytes\", verb: \"att ha\" },\n array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"regulj\u00E4rt uttryck\",\n email: \"e-postadress\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-datum och tid\",\n date: \"ISO-datum\",\n time: \"ISO-tid\",\n duration: \"ISO-varaktighet\",\n ipv4: \"IPv4-intervall\",\n ipv6: \"IPv6-intervall\",\n cidrv4: \"IPv4-spektrum\",\n cidrv6: \"IPv6-spektrum\",\n base64: \"base64-kodad str\u00E4ng\",\n base64url: \"base64url-kodad str\u00E4ng\",\n json_string: \"JSON-str\u00E4ng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"mall-literal\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"antal\",\n array: \"lista\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat instanceof ${issue.expected}, fick ${received}`;\n }\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${expected}, fick ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n }\n return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n case \"invalid_union\":\n return \"Ogiltig input\";\n case \"invalid_element\":\n return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n default:\n return `Ogiltig input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0B8E\u0BA3\u0BCD\",\n array: \"\u0B85\u0BA3\u0BBF\",\n null: \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n }\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n }\n return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"ends_with\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"includes\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"regex\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n case \"unrecognized_keys\":\n return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n case \"invalid_union\":\n return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n case \"invalid_element\":\n return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n default:\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n url: \"URL\",\n emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\",\n array: \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\",\n null: \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n }\n return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n if (_issue.format === \"regex\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n case \"unrecognized_keys\":\n return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n case \"invalid_element\":\n return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n default:\n return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"girdi\",\n email: \"e-posta adresi\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO tarih ve saat\",\n date: \"ISO tarih\",\n time: \"ISO saat\",\n duration: \"ISO s\u00FCre\",\n ipv4: \"IPv4 adresi\",\n ipv6: \"IPv6 adresi\",\n cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n json_string: \"JSON dizesi\",\n e164: \"E.164 say\u0131s\u0131\",\n jwt: \"JWT\",\n template_literal: \"\u015Eablon dizesi\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ge\u00E7ersiz de\u011Fer: beklenen instanceof ${issue.expected}, al\u0131nan ${received}`;\n }\n return `Ge\u00E7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n if (_issue.format === \"ends_with\")\n return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n if (_issue.format === \"includes\")\n return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n if (_issue.format === \"regex\")\n return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n return `Ge\u00E7ersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n case \"invalid_union\":\n return \"Ge\u00E7ersiz de\u011Fer\";\n case \"invalid_element\":\n return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n default:\n return `Ge\u00E7ersiz de\u011Fer`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n date: \"\u0434\u0430\u0442\u0430 ISO\",\n time: \"\u0447\u0430\u0441 ISO\",\n duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n }\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n case \"invalid_element\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n default:\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n return uk();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0627\u0646 \u067E\u0679\",\n email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n template_literal: \"\u0627\u0646 \u067E\u0679\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0646\u0645\u0628\u0631\",\n array: \"\u0622\u0631\u06D2\",\n null: \"\u0646\u0644\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n }\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n }\n return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n }\n if (_issue.format === \"ends_with\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n if (_issue.format === \"includes\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n if (_issue.format === \"regex\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n case \"unrecognized_keys\":\n return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n case \"invalid_union\":\n return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n case \"invalid_element\":\n return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n default:\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"belgi\", verb: \"bo\u2018lishi kerak\" },\n file: { unit: \"bayt\", verb: \"bo\u2018lishi kerak\" },\n array: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n set: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"kirish\",\n email: \"elektron pochta manzili\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO sana va vaqti\",\n date: \"ISO sana\",\n time: \"ISO vaqt\",\n duration: \"ISO davomiylik\",\n ipv4: \"IPv4 manzil\",\n ipv6: \"IPv6 manzil\",\n mac: \"MAC manzil\",\n cidrv4: \"IPv4 diapazon\",\n cidrv6: \"IPv6 diapazon\",\n base64: \"base64 kodlangan satr\",\n base64url: \"base64url kodlangan satr\",\n json_string: \"JSON satr\",\n e164: \"E.164 raqam\",\n jwt: \"JWT\",\n template_literal: \"kirish\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"raqam\",\n array: \"massiv\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n }\n return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Noto\u2018g\u2018ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n }\n return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n if (_issue.format === \"ends_with\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n if (_issue.format === \"includes\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.includes}\" ni o\u2018z ichiga olishi kerak`;\n if (_issue.format === \"regex\")\n return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Noto\u2018g\u2018ri raqam: ${issue.divisor} ning karralisi bo\u2018lishi kerak`;\n case \"unrecognized_keys\":\n return `Noma\u2019lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} dagi kalit noto\u2018g\u2018ri`;\n case \"invalid_union\":\n return \"Noto\u2018g\u2018ri kirish\";\n case \"invalid_element\":\n return `${issue.origin} da noto\u2018g\u2018ri qiymat`;\n default:\n return `Noto\u2018g\u2018ri kirish`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n file: { unit: \"byte\", verb: \"c\u00F3\" },\n array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0111\u1EA7u v\u00E0o\",\n email: \"\u0111\u1ECBa ch\u1EC9 email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ng\u00E0y gi\u1EDD ISO\",\n date: \"ng\u00E0y ISO\",\n time: \"gi\u1EDD ISO\",\n duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n cidrv4: \"d\u1EA3i IPv4\",\n cidrv6: \"d\u1EA3i IPv6\",\n base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n json_string: \"chu\u1ED7i JSON\",\n e164: \"s\u1ED1 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0111\u1EA7u v\u00E0o\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"s\u1ED1\",\n array: \"m\u1EA3ng\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n }\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n }\n case \"not_multiple_of\":\n return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n case \"invalid_element\":\n return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n default:\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u8F93\u5165\",\n email: \"\u7535\u5B50\u90AE\u4EF6\",\n url: \"URL\",\n emoji: \"\u8868\u60C5\u7B26\u53F7\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO\u65E5\u671F\u65F6\u95F4\",\n date: \"ISO\u65E5\u671F\",\n time: \"ISO\u65F6\u95F4\",\n duration: \"ISO\u65F6\u957F\",\n ipv4: \"IPv4\u5730\u5740\",\n ipv6: \"IPv6\u5730\u5740\",\n cidrv4: \"IPv4\u7F51\u6BB5\",\n cidrv6: \"IPv6\u7F51\u6BB5\",\n base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n json_string: \"JSON\u5B57\u7B26\u4E32\",\n e164: \"E.164\u53F7\u7801\",\n jwt: \"JWT\",\n template_literal: \"\u8F93\u5165\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u6570\u5B57\",\n array: \"\u6570\u7EC4\",\n null: \"\u7A7A\u503C(null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n }\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n if (_issue.format === \"ends_with\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n if (_issue.format === \"includes\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n case \"unrecognized_keys\":\n return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n case \"invalid_union\":\n return \"\u65E0\u6548\u8F93\u5165\";\n case \"invalid_element\":\n return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n default:\n return `\u65E0\u6548\u8F93\u5165`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u8F38\u5165\",\n email: \"\u90F5\u4EF6\u5730\u5740\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u65E5\u671F\u6642\u9593\",\n date: \"ISO \u65E5\u671F\",\n time: \"ISO \u6642\u9593\",\n duration: \"ISO \u671F\u9593\",\n ipv4: \"IPv4 \u4F4D\u5740\",\n ipv6: \"IPv6 \u4F4D\u5740\",\n cidrv4: \"IPv4 \u7BC4\u570D\",\n cidrv6: \"IPv6 \u7BC4\u570D\",\n base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n json_string: \"JSON \u5B57\u4E32\",\n e164: \"E.164 \u6578\u503C\",\n jwt: \"JWT\",\n template_literal: \"\u8F38\u5165\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n }\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n }\n if (_issue.format === \"ends_with\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n if (_issue.format === \"includes\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n case \"unrecognized_keys\":\n return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n case \"invalid_key\":\n return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n case \"invalid_union\":\n return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n case \"invalid_element\":\n return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n default:\n return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u00E0mi\", verb: \"n\u00ED\" },\n file: { unit: \"bytes\", verb: \"n\u00ED\" },\n array: { unit: \"nkan\", verb: \"n\u00ED\" },\n set: { unit: \"nkan\", verb: \"n\u00ED\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n email: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC \u00ECm\u1EB9\u0301l\u00EC\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u00E0k\u00F3k\u00F2 ISO\",\n date: \"\u1ECDj\u1ECD\u0301 ISO\",\n time: \"\u00E0k\u00F3k\u00F2 ISO\",\n duration: \"\u00E0k\u00F3k\u00F2 t\u00F3 p\u00E9 ISO\",\n ipv4: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv4\",\n ipv6: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv6\",\n cidrv4: \"\u00E0gb\u00E8gb\u00E8 IPv4\",\n cidrv6: \"\u00E0gb\u00E8gb\u00E8 IPv6\",\n base64: \"\u1ECD\u0300r\u1ECD\u0300 t\u00ED a k\u1ECD\u0301 n\u00ED base64\",\n base64url: \"\u1ECD\u0300r\u1ECD\u0300 base64url\",\n json_string: \"\u1ECD\u0300r\u1ECD\u0300 JSON\",\n e164: \"n\u1ECD\u0301mb\u00E0 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u1ECD\u0301mb\u00E0\",\n array: \"akop\u1ECD\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi instanceof ${issue.expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n }\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00C0\u1E63\u00E0y\u00E0n a\u1E63\u00EC\u1E63e: yan \u1ECD\u0300kan l\u00E1ra ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.maximum}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.minimum}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\u00FA \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\u00ED p\u1EB9\u0300l\u00FA \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\u00ED \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u00E1 \u00E0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;\n return `A\u1E63\u00EC\u1E63e: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u1ECD\u0301mb\u00E0 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \u00E8y\u00E0 p\u00EDp\u00EDn ti ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `B\u1ECDt\u00ECn\u00EC \u00E0\u00ECm\u1ECD\u0300: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `B\u1ECDt\u00ECn\u00EC a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n case \"invalid_union\":\n return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n case \"invalid_element\":\n return `Iye a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n default:\n return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n", "import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n", "import { globalRegistry } from \"./registries.js\";\n// function initializeContext(inputs: JSONSchemaGeneratorParams): ToJSONSchemaContext {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n", "import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n", "import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n /** @deprecated Access via ctx instead */\n get metadataRegistry() {\n return this.ctx.metadataRegistry;\n }\n /** @deprecated Access via ctx instead */\n get target() {\n return this.ctx.target;\n }\n /** @deprecated Access via ctx instead */\n get unrepresentable() {\n return this.ctx.unrepresentable;\n }\n /** @deprecated Access via ctx instead */\n get override() {\n return this.ctx.override;\n }\n /** @deprecated Access via ctx instead */\n get io() {\n return this.ctx.io;\n }\n /** @deprecated Access via ctx instead */\n get counter() {\n return this.ctx.counter;\n }\n set counter(value) {\n this.ctx.counter = value;\n }\n /** @deprecated Access via ctx instead */\n get seen() {\n return this.ctx.seen;\n }\n constructor(params) {\n // Normalize target for internal context\n let normalizedTarget = params?.target ?? \"draft-2020-12\";\n if (normalizedTarget === \"draft-4\")\n normalizedTarget = \"draft-04\";\n if (normalizedTarget === \"draft-7\")\n normalizedTarget = \"draft-07\";\n this.ctx = initializeContext({\n processors: allProcessors,\n target: normalizedTarget,\n ...(params?.metadata && { metadata: params.metadata }),\n ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n ...(params?.override && { override: params.override }),\n ...(params?.io && { io: params.io }),\n });\n }\n /**\n * Process a schema to prepare it for JSON Schema generation.\n * This must be called before emit().\n */\n process(schema, _params = { path: [], schemaPath: [] }) {\n return process(schema, this.ctx, _params);\n }\n /**\n * Emit the final JSON Schema after processing.\n * Must call process() first.\n */\n emit(schema, _params) {\n // Apply emit params to the context\n if (_params) {\n if (_params.cycles)\n this.ctx.cycles = _params.cycles;\n if (_params.reused)\n this.ctx.reused = _params.reused;\n if (_params.external)\n this.ctx.external = _params.external;\n }\n extractDefs(this.ctx, schema);\n const result = finalize(this.ctx, schema);\n // Strip ~standard property to match old implementation's return type\n const { \"~standard\": _, ...plainResult } = result;\n return plainResult;\n }\n}\n", "export {};\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n", "export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n invalid_type: \"invalid_type\",\n too_big: \"too_big\",\n too_small: \"too_small\",\n invalid_format: \"invalid_format\",\n not_multiple_of: \"not_multiple_of\",\n unrecognized_keys: \"unrecognized_keys\",\n invalid_union: \"invalid_union\",\n invalid_key: \"invalid_key\",\n invalid_element: \"invalid_element\",\n invalid_value: \"invalid_value\",\n custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n core.config({\n customError: map,\n });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n", "import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n ..._schemas,\n ..._checks,\n iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = new Set([\n // Schema identification\n \"$schema\",\n \"$ref\",\n \"$defs\",\n \"definitions\",\n // Core schema keywords\n \"$id\",\n \"id\",\n \"$comment\",\n \"$anchor\",\n \"$vocabulary\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n // Type\n \"type\",\n \"enum\",\n \"const\",\n // Composition\n \"anyOf\",\n \"oneOf\",\n \"allOf\",\n \"not\",\n // Object\n \"properties\",\n \"required\",\n \"additionalProperties\",\n \"patternProperties\",\n \"propertyNames\",\n \"minProperties\",\n \"maxProperties\",\n // Array\n \"items\",\n \"prefixItems\",\n \"additionalItems\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"contains\",\n \"minContains\",\n \"maxContains\",\n // String\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n // Number\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"multipleOf\",\n // Already handled metadata\n \"description\",\n \"default\",\n // Content\n \"contentEncoding\",\n \"contentMediaType\",\n \"contentSchema\",\n // Unsupported (error-throwing)\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n \"if\",\n \"then\",\n \"else\",\n \"dependentSchemas\",\n \"dependentRequired\",\n // OpenAPI\n \"nullable\",\n \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n const $schema = schema.$schema;\n if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n return \"draft-2020-12\";\n }\n if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n return \"draft-7\";\n }\n if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n return \"draft-4\";\n }\n // Use defaultTarget if provided, otherwise default to draft-2020-12\n return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n if (!ref.startsWith(\"#\")) {\n throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n }\n const path = ref.slice(1).split(\"/\").filter(Boolean);\n // Handle root reference \"#\"\n if (path.length === 0) {\n return ctx.rootSchema;\n }\n const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (path[0] === defsKey) {\n const key = path[1];\n if (!key || !ctx.defs[key]) {\n throw new Error(`Reference not found: ${ref}`);\n }\n return ctx.defs[key];\n }\n throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n // Handle unsupported features\n if (schema.not !== undefined) {\n // Special case: { not: {} } represents never\n if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n return z.never();\n }\n throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n }\n if (schema.unevaluatedItems !== undefined) {\n throw new Error(\"unevaluatedItems is not supported\");\n }\n if (schema.unevaluatedProperties !== undefined) {\n throw new Error(\"unevaluatedProperties is not supported\");\n }\n if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n }\n if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n }\n // Handle $ref\n if (schema.$ref) {\n const refPath = schema.$ref;\n if (ctx.refs.has(refPath)) {\n return ctx.refs.get(refPath);\n }\n if (ctx.processing.has(refPath)) {\n // Circular reference - use lazy\n return z.lazy(() => {\n if (!ctx.refs.has(refPath)) {\n throw new Error(`Circular reference not resolved: ${refPath}`);\n }\n return ctx.refs.get(refPath);\n });\n }\n ctx.processing.add(refPath);\n const resolved = resolveRef(refPath, ctx);\n const zodSchema = convertSchema(resolved, ctx);\n ctx.refs.set(refPath, zodSchema);\n ctx.processing.delete(refPath);\n return zodSchema;\n }\n // Handle enum\n if (schema.enum !== undefined) {\n const enumValues = schema.enum;\n // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n if (ctx.version === \"openapi-3.0\" &&\n schema.nullable === true &&\n enumValues.length === 1 &&\n enumValues[0] === null) {\n return z.null();\n }\n if (enumValues.length === 0) {\n return z.never();\n }\n if (enumValues.length === 1) {\n return z.literal(enumValues[0]);\n }\n // Check if all values are strings\n if (enumValues.every((v) => typeof v === \"string\")) {\n return z.enum(enumValues);\n }\n // Mixed types - use union of literals\n const literalSchemas = enumValues.map((v) => z.literal(v));\n if (literalSchemas.length < 2) {\n return literalSchemas[0];\n }\n return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n }\n // Handle const\n if (schema.const !== undefined) {\n return z.literal(schema.const);\n }\n // Handle type\n const type = schema.type;\n if (Array.isArray(type)) {\n // Expand type array into anyOf union\n const typeSchemas = type.map((t) => {\n const typeSchema = { ...schema, type: t };\n return convertBaseSchema(typeSchema, ctx);\n });\n if (typeSchemas.length === 0) {\n return z.never();\n }\n if (typeSchemas.length === 1) {\n return typeSchemas[0];\n }\n return z.union(typeSchemas);\n }\n if (!type) {\n // No type specified - empty schema (any)\n return z.any();\n }\n let zodSchema;\n switch (type) {\n case \"string\": {\n let stringSchema = z.string();\n // Apply format using .check() with Zod format functions\n if (schema.format) {\n const format = schema.format;\n // Map common formats to Zod check functions\n if (format === \"email\") {\n stringSchema = stringSchema.check(z.email());\n }\n else if (format === \"uri\" || format === \"uri-reference\") {\n stringSchema = stringSchema.check(z.url());\n }\n else if (format === \"uuid\" || format === \"guid\") {\n stringSchema = stringSchema.check(z.uuid());\n }\n else if (format === \"date-time\") {\n stringSchema = stringSchema.check(z.iso.datetime());\n }\n else if (format === \"date\") {\n stringSchema = stringSchema.check(z.iso.date());\n }\n else if (format === \"time\") {\n stringSchema = stringSchema.check(z.iso.time());\n }\n else if (format === \"duration\") {\n stringSchema = stringSchema.check(z.iso.duration());\n }\n else if (format === \"ipv4\") {\n stringSchema = stringSchema.check(z.ipv4());\n }\n else if (format === \"ipv6\") {\n stringSchema = stringSchema.check(z.ipv6());\n }\n else if (format === \"mac\") {\n stringSchema = stringSchema.check(z.mac());\n }\n else if (format === \"cidr\") {\n stringSchema = stringSchema.check(z.cidrv4());\n }\n else if (format === \"cidr-v6\") {\n stringSchema = stringSchema.check(z.cidrv6());\n }\n else if (format === \"base64\") {\n stringSchema = stringSchema.check(z.base64());\n }\n else if (format === \"base64url\") {\n stringSchema = stringSchema.check(z.base64url());\n }\n else if (format === \"e164\") {\n stringSchema = stringSchema.check(z.e164());\n }\n else if (format === \"jwt\") {\n stringSchema = stringSchema.check(z.jwt());\n }\n else if (format === \"emoji\") {\n stringSchema = stringSchema.check(z.emoji());\n }\n else if (format === \"nanoid\") {\n stringSchema = stringSchema.check(z.nanoid());\n }\n else if (format === \"cuid\") {\n stringSchema = stringSchema.check(z.cuid());\n }\n else if (format === \"cuid2\") {\n stringSchema = stringSchema.check(z.cuid2());\n }\n else if (format === \"ulid\") {\n stringSchema = stringSchema.check(z.ulid());\n }\n else if (format === \"xid\") {\n stringSchema = stringSchema.check(z.xid());\n }\n else if (format === \"ksuid\") {\n stringSchema = stringSchema.check(z.ksuid());\n }\n // Note: json-string format is not currently supported by Zod\n // Custom formats are ignored - keep as plain string\n }\n // Apply constraints\n if (typeof schema.minLength === \"number\") {\n stringSchema = stringSchema.min(schema.minLength);\n }\n if (typeof schema.maxLength === \"number\") {\n stringSchema = stringSchema.max(schema.maxLength);\n }\n if (schema.pattern) {\n // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n }\n zodSchema = stringSchema;\n break;\n }\n case \"number\":\n case \"integer\": {\n let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n // Apply constraints\n if (typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.min(schema.minimum);\n }\n if (typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.max(schema.maximum);\n }\n if (typeof schema.exclusiveMinimum === \"number\") {\n numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n }\n else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.gt(schema.minimum);\n }\n if (typeof schema.exclusiveMaximum === \"number\") {\n numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n }\n else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.lt(schema.maximum);\n }\n if (typeof schema.multipleOf === \"number\") {\n numberSchema = numberSchema.multipleOf(schema.multipleOf);\n }\n zodSchema = numberSchema;\n break;\n }\n case \"boolean\": {\n zodSchema = z.boolean();\n break;\n }\n case \"null\": {\n zodSchema = z.null();\n break;\n }\n case \"object\": {\n const shape = {};\n const properties = schema.properties || {};\n const requiredSet = new Set(schema.required || []);\n // Convert properties - mark optional ones\n for (const [key, propSchema] of Object.entries(properties)) {\n const propZodSchema = convertSchema(propSchema, ctx);\n // If not in required array, make it optional\n shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n }\n // Handle propertyNames\n if (schema.propertyNames) {\n const keySchema = convertSchema(schema.propertyNames, ctx);\n const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n ? convertSchema(schema.additionalProperties, ctx)\n : z.any();\n // Case A: No properties (pure record)\n if (Object.keys(shape).length === 0) {\n zodSchema = z.record(keySchema, valueSchema);\n break;\n }\n // Case B: With properties (intersection of object and looseRecord)\n const objectSchema = z.object(shape).passthrough();\n const recordSchema = z.looseRecord(keySchema, valueSchema);\n zodSchema = z.intersection(objectSchema, recordSchema);\n break;\n }\n // Handle patternProperties\n if (schema.patternProperties) {\n // patternProperties: keys matching pattern must satisfy corresponding schema\n // Use loose records so non-matching keys pass through\n const patternProps = schema.patternProperties;\n const patternKeys = Object.keys(patternProps);\n const looseRecords = [];\n for (const pattern of patternKeys) {\n const patternValue = convertSchema(patternProps[pattern], ctx);\n const keySchema = z.string().regex(new RegExp(pattern));\n looseRecords.push(z.looseRecord(keySchema, patternValue));\n }\n // Build intersection: object schema + all pattern property records\n const schemasToIntersect = [];\n if (Object.keys(shape).length > 0) {\n // Use passthrough so patternProperties can validate additional keys\n schemasToIntersect.push(z.object(shape).passthrough());\n }\n schemasToIntersect.push(...looseRecords);\n if (schemasToIntersect.length === 0) {\n zodSchema = z.object({}).passthrough();\n }\n else if (schemasToIntersect.length === 1) {\n zodSchema = schemasToIntersect[0];\n }\n else {\n // Chain intersections: (A & B) & C & D ...\n let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n for (let i = 2; i < schemasToIntersect.length; i++) {\n result = z.intersection(result, schemasToIntersect[i]);\n }\n zodSchema = result;\n }\n break;\n }\n // Handle additionalProperties\n // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n const objectSchema = z.object(shape);\n if (schema.additionalProperties === false) {\n // Strict mode - no extra properties allowed\n zodSchema = objectSchema.strict();\n }\n else if (typeof schema.additionalProperties === \"object\") {\n // Extra properties must match the specified schema\n zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n }\n else {\n // additionalProperties is true or undefined - allow any extra properties (passthrough)\n zodSchema = objectSchema.passthrough();\n }\n break;\n }\n case \"array\": {\n // TODO: uniqueItems is not supported\n // TODO: contains/minContains/maxContains are not supported\n // Check if this is a tuple (prefixItems or items as array)\n const prefixItems = schema.prefixItems;\n const items = schema.items;\n if (prefixItems && Array.isArray(prefixItems)) {\n // Tuple with prefixItems (draft-2020-12)\n const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n const rest = items && typeof items === \"object\" && !Array.isArray(items)\n ? convertSchema(items, ctx)\n : undefined;\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (Array.isArray(items)) {\n // Tuple with items array (draft-7)\n const tupleItems = items.map((item) => convertSchema(item, ctx));\n const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n ? convertSchema(schema.additionalItems, ctx)\n : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (items !== undefined) {\n // Regular array\n const element = convertSchema(items, ctx);\n let arraySchema = z.array(element);\n // Apply constraints\n if (typeof schema.minItems === \"number\") {\n arraySchema = arraySchema.min(schema.minItems);\n }\n if (typeof schema.maxItems === \"number\") {\n arraySchema = arraySchema.max(schema.maxItems);\n }\n zodSchema = arraySchema;\n }\n else {\n // No items specified - array of any\n zodSchema = z.array(z.any());\n }\n break;\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n // Apply metadata\n if (schema.description) {\n zodSchema = zodSchema.describe(schema.description);\n }\n if (schema.default !== undefined) {\n zodSchema = zodSchema.default(schema.default);\n }\n return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n // Convert base schema first (ignoring composition keywords)\n let baseSchema = convertBaseSchema(schema, ctx);\n const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n // Process composition keywords LAST (they can appear together)\n // Handle anyOf - wrap base schema with union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n const anyOfUnion = z.union(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n }\n // Handle oneOf - exclusive union (exactly one must match)\n if (schema.oneOf && Array.isArray(schema.oneOf)) {\n const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n const oneOfUnion = z.xor(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n }\n // Handle allOf - wrap base schema with intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n if (schema.allOf.length === 0) {\n baseSchema = hasExplicitType ? baseSchema : z.any();\n }\n else {\n let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n const startIdx = hasExplicitType ? 0 : 1;\n for (let i = startIdx; i < schema.allOf.length; i++) {\n result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n }\n baseSchema = result;\n }\n }\n // Handle nullable (OpenAPI 3.0)\n if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n baseSchema = z.nullable(baseSchema);\n }\n // Handle readOnly\n if (schema.readOnly === true) {\n baseSchema = z.readonly(baseSchema);\n }\n // Collect metadata: core schema keywords and unrecognized keys\n const extraMeta = {};\n // Core schema keywords that should be captured as metadata\n const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n for (const key of coreMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n // Content keywords - store as metadata\n const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n for (const key of contentMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n // Unrecognized keys (custom metadata)\n for (const key of Object.keys(schema)) {\n if (!RECOGNIZED_KEYS.has(key)) {\n extraMeta[key] = schema[key];\n }\n }\n if (Object.keys(extraMeta).length > 0) {\n ctx.registry.add(baseSchema, extraMeta);\n }\n return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n // Handle boolean schemas\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n const version = detectVersion(schema, params?.defaultTarget);\n const defs = (schema.$defs || schema.definitions || {});\n const ctx = {\n version,\n defs,\n refs: new Map(),\n processing: new Set(),\n rootSchema: schema,\n registry: params?.registry ?? globalRegistry,\n };\n return convertSchema(schema, ctx);\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n", "import z from \"zod\";\nfunction zDocumentId(strict = false) {\n const core = z.string().trim().refine(foundry.data.validators.isValidId);\n return strict ? core.readonly() : core.default(foundry.utils.randomID).readonly();\n}\nfunction zSpellcastingEntryId() {\n return z\n .string()\n .trim()\n .refine((value) => {\n const id = value.endsWith(\"-casting\") ? value.slice(0, -8) : value;\n return foundry.data.validators.isValidId(id);\n })\n .readonly();\n}\nexport { zDocumentId, zSpellcastingEntryId };\n", "import z from \"zod\";\nimport { R } from \"..\";\nvar validators = foundry.data.validators;\nfunction zDocumentUUID(options) {\n const { embedded, type } = R.isObjectType(options) ? options : { embedded: undefined, type: options };\n if (type && !R.isIncludedIn(type, CONST.ALL_DOCUMENT_TYPES)) {\n throw new Error(\"The type of a zDocumentUUID must be keys in CONST.ALL_DOCUMENT_TYPES\");\n }\n return z.custom((value) => {\n const resolvedUUID = R.isString(value) ? foundry.utils.parseUuid(value) : null;\n if (!resolvedUUID)\n return false;\n if (type && resolvedUUID.type !== type)\n return false;\n if (embedded === true && !resolvedUUID.embedded.length)\n return false;\n if (embedded === false && resolvedUUID.embedded.length)\n return false;\n if (!resolvedUUID.documentId || !validators.isValidId(resolvedUUID.documentId))\n return false;\n return true;\n });\n}\nexport { zDocumentUUID };\n", "import z from \"zod\";\nimport { R } from \"..\";\nconst _cached = {};\nfunction zAttribute() {\n const attribute = (_cached.attributes ??= R.keys(CONFIG.PF2E.abilities));\n return z.enum(attribute);\n}\nfunction zTradition() {\n const traditions = (_cached.traditions ??= R.keys(CONFIG.PF2E.magicTraditions));\n return z.enum(traditions);\n}\nfunction zSpellRank() {\n return z.custom((value) => {\n return R.isNumber(value) && value >= 1 && value <= 10;\n });\n}\nexport { zAttribute, zSpellRank, zTradition };\n", "import { R } from \".\";\nclass SYSTEM {\n static get id() {\n return game.system.id;\n }\n static get oppositeId() {\n return this.id === \"pf2e\" ? \"sf2e\" : \"pf2e\";\n }\n static get anachronismId() {\n return `${this.oppositeId}-anachronism`;\n }\n static get isPF2e() {\n return this.id === \"pf2e\";\n }\n static get isSF2e() {\n return this.id === \"sf2e\";\n }\n static get isPathfinder() {\n return R.isIncludedIn(this.id, [\"pf2e\", \"sf2e\"]);\n }\n static relativePath(...path) {\n const tail = R.join(path, \"/\");\n return `systems/${this.id}/${tail}`;\n }\n static path(...path) {\n return () => this.relativePath(...path);\n }\n static uuid(pf2e, sf2e) {\n return () => {\n return this.isSF2e ? sf2e : pf2e;\n };\n }\n static itemUuid(pf2e, sf2e) {\n return () => {\n return this.isSF2e ? sf2e : pf2e;\n };\n }\n static uuids(entries) {\n return () => {\n const index = this.isSF2e ? 1 : 0;\n return entries.map((entry) => entry[index]);\n };\n }\n static fromUuid(uuid) {\n const singleUuid = uuid();\n return fromUuid(singleUuid);\n }\n static pack(pf2e, sf2e) {\n return () => {\n return this.getPack(pf2e, sf2e);\n };\n }\n static sluggify(text, options) {\n return game.pf2e.system.sluggify(text, options);\n }\n static getPack(pf2e, sf2e) {\n const name = this.isSF2e ? sf2e : pf2e;\n return game.packs.get(name);\n }\n static getSystemPack(name) {\n return game.packs.get(`${this.id}.${name}`);\n }\n static getAnachronismPack(name) {\n return game.packs.get(`${this.anachronismId}.${name}`);\n }\n}\nexport { SYSTEM };\n", "import { getSetting, localize, R } from \".\";\nclass CustomModule {\n #api = {};\n #current;\n #debug = {};\n #globalName = \"\";\n #group = false;\n #id;\n get id() {\n if (!this.#id) {\n throw new Error(\"Module needs to be registered.\");\n }\n return this.#id;\n }\n get current() {\n return (this.#current ??= game.modules.get(this.id));\n }\n get name() {\n return this.current.title;\n }\n get isDebug() {\n return foundry.utils.getProperty(CONFIG, `debug.${this.id}`) === true;\n }\n register(id, globalName) {\n if (this.#id) {\n throw new Error(\"Module was already registered.\");\n }\n this.#id = id;\n this.#globalName = globalName || id.replace(/^pf2e-/, \"\").replace(/-(\\w)/g, (_, c) => c.toUpperCase());\n Hooks.once(\"init\", () => {\n const self = this;\n const context = {};\n Object.defineProperties(context, {\n active: {\n get() {\n return self.current.active;\n },\n configurable: false,\n enumerable: false,\n },\n api: {\n get() {\n return self.#api;\n },\n configurable: false,\n enumerable: false,\n },\n debug: {\n get() {\n return self.isDebug ? self.#debug : undefined;\n },\n configurable: false,\n enumerable: false,\n },\n getSetting: {\n value: function (setting) {\n return getSetting(setting);\n },\n writable: false,\n configurable: false,\n enumerable: false,\n },\n localize: {\n value: localize.sub(id),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n });\n Object.defineProperty(game, this.#globalName, {\n value: context,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n });\n }\n group(label) {\n this.groupEnd();\n this.#group = label;\n }\n groupEnd() {\n console.groupEnd();\n this.#group = false;\n }\n log(...args) {\n if (R.isString(this.#group)) {\n console.group(`[${this.name}] ${this.#group}`);\n this.#group = true;\n }\n if (this.#group) {\n console.log(...args);\n }\n else {\n console.log(`[${this.name}]`, ...args);\n }\n }\n debug(...args) {\n if (this.isDebug) {\n this.log(...args);\n }\n }\n globalPath(...path) {\n const joined = R.join(path, \".\");\n return joined ? `${this.#globalName}.${joined}` : `${this.#globalName}`;\n }\n path(...path) {\n const joined = R.join(path, \".\");\n return joined ? `${this.id}.${joined}` : `${this.id}`;\n }\n relativePath(...path) {\n const tail = R.join(path, \"/\");\n return `modules/${this.id}/${tail}`;\n }\n imagePath(...path) {\n const ext = path.pop();\n const root = this.relativePath(\"images\", ...path);\n return `${root}.${ext}`;\n }\n templatePath(...path) {\n const root = this.relativePath(\"templates\", ...path);\n return `${root}.hbs`;\n }\n Error(str) {\n return new Error(`\\n[${this.name}] ${str}`);\n }\n error(str, error) {\n let message = `[${this.name}] ${str}`;\n if (error instanceof Error) {\n message += `\\n${error.message}`;\n }\n else if (typeof error === \"string\") {\n message += `\\n${error}`;\n }\n console.error(message);\n }\n apiExpose(key, toExpose) {\n if (foundry.utils.hasProperty(this.#api, key)) {\n throw this.Error(`the api key was already defined: ${key}`);\n }\n const exposed = R.isObjectType(toExpose) ? foundry.utils.deepClone(toExpose) : toExpose;\n Object.freeze(exposed);\n Object.defineProperty(this.#api, key, {\n value: exposed,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n }\n debugExpose(key, toExpose) {\n if (foundry.utils.hasProperty(this.#debug, key)) {\n throw this.Error(`the debug key was already defined: ${key}`);\n }\n const exposed = foundry.utils.deepClone(toExpose);\n Object.freeze(exposed);\n Object.defineProperty(this.#debug, key, {\n value: exposed,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n }\n}\nfunction getActiveModule(key) {\n const module = game.modules.get(key);\n if (!module?.active)\n return;\n return {\n ...module,\n getSetting(...path) {\n return game.settings.get(module.id, R.join(path, \".\"));\n },\n };\n}\nconst MODULE = new CustomModule();\nexport { getActiveModule, MODULE };\n", "import { R, SYSTEM } from \".\";\n/**\n * https://github.com/foundryvtt/pf2e/blob/37b0dcab08141b3e9e4e0f44e51df9f4dfd52a71/src/util/misc.ts#L160C1-L171C3\n */\nconst actionImgMap = R.mapValues({\n 0: \"icons/actions/FreeAction.webp\",\n free: \"icons/actions/FreeAction.webp\",\n 1: \"icons/actions/OneAction.webp\",\n 2: \"icons/actions/TwoActions.webp\",\n 3: \"icons/actions/ThreeActions.webp\",\n \"1 or 2\": \"icons/actions/OneTwoActions.webp\",\n \"1 to 3\": \"icons/actions/OneThreeActions.webp\",\n \"2 or 3\": \"icons/actions/TwoThreeActions.webp\",\n reaction: \"icons/actions/Reaction.webp\",\n passive: \"icons/actions/Passive.webp\",\n}, (tail) => SYSTEM.path(tail));\n/**\n * https://github.com/foundryvtt/pf2e/blob/89892b6fafec1456a0358de8c6d7b102e3fe2da2/src/util/misc.ts#L188C1-L199C3\n */\nconst actionGlyphMap = {\n 0: \"F\",\n free: \"F\",\n 1: \"1\",\n 2: \"2\",\n 3: \"3\",\n \"1 or 2\": \"1/2\",\n \"1 to 3\": \"1 - 3\",\n \"2 or 3\": \"2/3\",\n \"2 rounds\": \"3,3\",\n reaction: \"R\",\n};\nfunction getActionIcon(action, fallback = SYSTEM.relativePath(\"icons/actions/Empty.webp\")) {\n if (action === null)\n return actionImgMap.passive();\n const value = typeof action !== \"object\" ? action : action.type === \"action\" ? action.value : action.type;\n const sanitized = String(value ?? \"\")\n .toLowerCase()\n .trim();\n return actionImgMap[sanitized]?.() ?? fallback;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/89892b6fafec1456a0358de8c6d7b102e3fe2da2/src/util/misc.ts#L205\n */\nfunction getActionGlyph(action) {\n if (!action && action !== 0)\n return \"\";\n const value = typeof action !== \"object\" ? action : action.type === \"action\" ? action.value : action.type;\n const sanitized = String(value ?? \"\")\n .toLowerCase()\n .trim();\n return actionGlyphMap[sanitized]?.replace(\"-\", \"\u2013\") ?? \"\";\n}\nfunction updateActionFrequency(event, item, virtualData) {\n const target = event.target;\n const frequency = item.frequency;\n if (!frequency || !(target instanceof HTMLInputElement))\n return;\n const value = Math.clamp(target.valueAsNumber, 0, frequency.max);\n if (value === frequency.value)\n return;\n if (virtualData) {\n const { parent, ruleIndex } = virtualData;\n const rule = parent.rules[ruleIndex];\n return rule.updateData({ frequency: value });\n }\n else {\n return item.update({ \"system.frequency.value\": value });\n }\n}\nasync function useAction(event, item, virtualData) {\n const macro = game.toolbelt?.getToolSetting(\"actionable\", \"action\")\n ? await game.toolbelt?.api.actionable.getActionMacro(item)\n : undefined;\n const use = async () => {\n if (item.crafting) {\n return game.pf2e.rollItemMacro(item.uuid, event);\n }\n if (item.system.frequency && item.system.frequency.value > 0) {\n const newValue = item.system.frequency.value - 1;\n if (virtualData) {\n const { parent, ruleIndex } = virtualData;\n const rule = parent.rules[ruleIndex];\n await rule.updateData({ frequency: newValue });\n }\n else {\n await item.update({ \"system.frequency.value\": newValue });\n }\n }\n if (item.system.selfEffect) {\n await applySelfEffect(item);\n }\n return item.toMessage(event);\n };\n if (!macro) {\n return use();\n }\n // we let the macro handle the action usage or cancelation\n return macro.execute({\n actor: item.actor,\n item,\n use,\n cancel: () => {\n const msg = game.toolbelt.localize(\"actionable.action.cancel\", item);\n return ui.notifications.warn(msg, { localize: false });\n },\n });\n}\nasync function applySelfEffect(item) {\n const effect = item.system.selfEffect && (await fromUuid(item.system.selfEffect.uuid));\n if (!effect)\n return;\n const actor = item.actor;\n const token = actor.getActiveTokens(true, true).shift() ?? null;\n const traits = item.system.traits.value?.filter((trait) => trait in CONFIG.PF2E.Item.documentClasses.effect.validTraits);\n const effectSource = foundry.utils.mergeObject(effect.toObject(), {\n _id: null,\n system: {\n context: {\n origin: {\n actor: actor.uuid,\n token: token?.uuid ?? null,\n item: item.uuid,\n spellcasting: null,\n rollOptions: item.getOriginData().rollOptions,\n },\n target: {\n actor: actor.uuid,\n token: token?.uuid ?? null,\n },\n roll: null,\n },\n traits: { value: traits },\n },\n });\n await actor.createEmbeddedDocuments(\"Item\", [effectSource]);\n}\nfunction isDefaultActionIcon(img, action) {\n return img === getActionIcon(action);\n}\nexport { applySelfEffect, getActionGlyph, getActionIcon, isDefaultActionIcon, updateActionFrequency, useAction };\n", "const PARTY_ACTOR_ID = \"xxxPF2ExPARTYxxx\";\nfunction getDispositionColor(actor) {\n const alliance = actor?.alliance;\n const colorValue = !actor\n ? CONFIG.Canvas.dispositionColors.NEUTRAL\n : alliance === \"party\"\n ? actor.hasPlayerOwner\n ? CONFIG.Canvas.dispositionColors.PARTY\n : CONFIG.Canvas.dispositionColors.FRIENDLY\n : alliance === \"opposition\"\n ? CONFIG.Canvas.dispositionColors.HOSTILE\n : CONFIG.Canvas.dispositionColors.NEUTRAL;\n return new Color(colorValue);\n}\nfunction actorsRespectAlliance(origin, target, alliance = \"all\") {\n return alliance === \"allies\" ? target.isAllyOf(origin) : alliance === \"enemies\" ? target.isEnemyOf(origin) : true;\n}\nfunction belongToPartyAlliance(actor) {\n return actor.system.details.alliance === \"party\";\n}\nfunction oppositeAlliance(alliance) {\n return alliance === \"party\" ? \"opposition\" : alliance === \"opposition\" ? \"party\" : null;\n}\nfunction isAllyActor(actor) {\n return actor.alliance === \"party\" || actor.testUserPermission(game.user, \"OBSERVER\");\n}\nfunction isMerchant(actor) {\n return !!actor?.isOfType(\"loot\") && actor.isMerchant;\n}\nfunction getMythicOrHeroPoints(actor) {\n const slug = actor.system.resources.mythicPoints.max ? \"mythic-points\" : \"hero-points\";\n const resource = actor.getResource(slug);\n return {\n slug,\n name: slug === \"hero-points\" ? \"heroPoints\" : \"mythicPoints\",\n max: resource.max,\n value: resource.value,\n };\n}\nfunction getActorMaster(actor) {\n if (!actor)\n return null;\n return (actor.master ?? game.toolbelt?.api.shareData.getMasterInMemory(actor) ?? null);\n}\nfunction getActorSize(actor) {\n const ActorSizeCls = actor.system.traits.size.constructor;\n return new ActorSizeCls({\n value: actor.system.traits.naturalSize ?? actor.size,\n smallIsMedium: true,\n });\n}\nexport { actorsRespectAlliance, belongToPartyAlliance, getActorMaster, getActorSize, getDispositionColor, getMythicOrHeroPoints, isAllyActor, isMerchant, oppositeAlliance, PARTY_ACTOR_ID, };\n", "import { isInstanceOf, R } from \".\";\nfunction renderApplications(type) {\n const types = Array.isArray(type) ? type : [type];\n const apps = [...R.values(ui.windows), ...foundry.applications.instances.values()].filter((app) => types.some((x) => isInstanceOf(app, x)));\n for (const app of apps) {\n app.render();\n }\n}\nfunction renderCharacterSheets() {\n renderApplications(\"CharacterSheetPF2e\");\n}\nfunction renderActorSheets(type = [\"ActorSheetPF2e\"]) {\n renderApplications(type);\n}\nfunction renderItemSheets(type = [\"ItemSheetPF2e\"]) {\n renderApplications(type);\n}\nfunction enrichHTML(content, options) {\n return foundry.applications.ux.TextEditor.implementation.enrichHTML(content, options);\n}\nexport { enrichHTML, renderActorSheets, renderCharacterSheets, renderItemSheets };\n", "import { enrichHTML, R, SYSTEM } from \".\";\nfunction* latestChatMessages(nb, fromMessage) {\n if (!ui.chat)\n return;\n const messages = game.messages.contents;\n const startMessageIndex = fromMessage\n ? messages.findLastIndex((message) => message === fromMessage)\n : messages.length;\n const startIndex = startMessageIndex - 1;\n for (let i = startIndex; i >= startIndex - nb; i--) {\n const message = messages[i];\n if (message) {\n yield message;\n }\n }\n}\nasync function refreshLatestMessages(nb) {\n const chat = ui.chat?.element;\n if (!chat)\n return;\n const messages = game.messages.contents;\n const startIndex = messages.length - 1;\n for (let i = startIndex; i >= startIndex - nb; i--) {\n const message = messages[i];\n if (message) {\n ui.chat.updateMessage(message, { notify: false });\n }\n }\n}\nfunction createChatLink(docOrUuid, { label, html } = {}) {\n const isDocument = docOrUuid instanceof foundry.abstract.Document;\n if (!label && isDocument) {\n label = docOrUuid.name ?? undefined;\n }\n let link = `@UUID[${isDocument ? docOrUuid.uuid : docOrUuid}]`;\n if (label) {\n link = `${link}{${label}}`;\n }\n return html ? enrichHTML(link) : link;\n}\nfunction isActionMessage(message) {\n const { origin, context } = message.flags[SYSTEM.id];\n return R.isIncludedIn(origin?.type, [\"feat\", \"action\"]) && !message.isCheckRoll && context?.type !== \"damage-taken\";\n}\nfunction isSpellMessage(message) {\n return R.isString(message.flags[SYSTEM.id].casting?.id);\n}\nexport { createChatLink, isActionMessage, isSpellMessage, latestChatMessages, refreshLatestMessages };\n", "import { createHTMLElement, htmlQuery } from \".\";\n/**\n * old system method that no longer exist\n */\nfunction filterTraits(traits, selected, condition) {\n const selectedTraits = selected.filter((s) => !s.not).map((s) => s.value);\n const notTraits = selected.filter((t) => t.not).map((s) => s.value);\n if (notTraits.some((t) => traits.includes(t))) {\n return false;\n }\n if (selectedTraits.length) {\n return condition === \"and\"\n ? selectedTraits.every((t) => traits.includes(t))\n : selectedTraits.some((t) => traits.includes(t));\n }\n return true;\n}\nasync function openBrowserTab(tab, data, filters) {\n const browser = game.pf2e.compendiumBrowser;\n if (browser.rendered) {\n await browser.close();\n }\n if (data) {\n Hooks.once(\"renderCompendiumBrowser\", (_tab, html) => {\n const controls = htmlQuery(html, \".window-header [data-action='toggleControls']\");\n const btn = createHTMLElement(\"button\", {\n content: data.label,\n });\n btn.addEventListener(\"click\", async (event) => {\n data.callback(event);\n browser.close();\n }, { once: true });\n requestAnimationFrame(() => {\n data.onRender?.(html);\n });\n controls?.replaceWith(btn);\n });\n }\n browser.openTab(tab, {\n filter: filters ?? (await browser.tabs[tab].getFilterData()),\n hideNavigation: true,\n });\n}\nexport { filterTraits, openBrowserTab };\n", "import { createFormData, htmlQuery, localize, MODULE, R, render } from \".\";\nasync function waitDialog({ classes = [], content, data, expand, i18n, no, onRender, position = {}, title, yes, }) {\n if (data) {\n data.i18n = i18n;\n }\n classes.push(MODULE.id);\n const dialogOptions = {\n buttons: [\n {\n action: \"yes\",\n icon: yes?.icon ?? \"fa-solid fa-check\",\n label: yes?.label ?? localize(i18n, \"yes\"),\n default: !no?.default,\n callback: yes?.callback ?? (async (_event, _btn, dialog) => createFormData(dialog.element, expand)),\n },\n {\n action: \"no\",\n icon: no?.icon ?? \"fa-solid fa-xmark\",\n label: no?.label ?? localize.ifExist(i18n, \"no\") ?? \"Cancel\",\n default: !!no?.default,\n callback: no?.callback ?? (() => false),\n },\n ],\n classes,\n content: await generateDialogContent(content, data),\n position,\n render: (event, dialog) => {\n requestAnimationFrame(() => {\n htmlQuery(dialog.element, `input[type=\"text\"]`)?.focus();\n });\n if (onRender) {\n onRender(event, dialog);\n }\n },\n window: {\n title: generateDialogTitle(i18n, title, data),\n },\n };\n return foundry.applications.api.DialogV2.wait(dialogOptions);\n}\nasync function confirmDialog(i18n, { classes = [], content, data = {}, no, title, yes } = {}) {\n const dialogOptions = {\n classes,\n content: content ?? localize.ifExist(i18n, \"content\", data) ?? (await generateDialogContent(i18n, data)),\n no: {\n default: !yes?.default,\n label: no ?? localize.ifExist(i18n, \"no\") ?? \"No\",\n },\n window: {\n title: generateDialogTitle(i18n, title, data),\n },\n yes: {\n default: !!yes?.default,\n label: yes?.label ?? localize.ifExist(i18n, \"yes\") ?? \"Yes\",\n },\n };\n return foundry.applications.api.DialogV2.confirm(dialogOptions);\n}\nfunction generateDialogTitle(i18n, title, data) {\n return R.isString(title) ? title : localize(i18n, \"title\", R.isObjectType(title) ? title : (data ?? {}));\n}\nasync function generateDialogContent(content, data) {\n if (R.isObjectType(data)) {\n return render(content, data);\n }\n else {\n return content.startsWith(\"<\") ? content : `

`;\n }\n}\nexport { confirmDialog, generateDialogContent, waitDialog };\n", "import { MODULE, R } from \".\";\nfunction flagPath(...path) {\n return `flags.${MODULE.path(...path)}`;\n}\nfunction getFlag(doc, ...path) {\n return doc.getFlag(MODULE.id, R.join(path, \".\"));\n}\nfunction setFlag(doc, ...args) {\n const value = args.pop();\n return doc.setFlag(MODULE.id, R.join(args, \".\"), value);\n}\nfunction unsetFlag(doc, ...path) {\n return doc.unsetFlag(MODULE.id, R.join(path, \".\"));\n}\nfunction updateFlag(doc, updates, operation) {\n return doc.update({ flags: { [MODULE.id]: updates } }, operation);\n}\nfunction getFlagProperty(obj, ...path) {\n return foundry.utils.getProperty(obj, flagPath(...path));\n}\nfunction setFlagProperty(obj, ...args) {\n const value = args.pop();\n foundry.utils.setProperty(obj, flagPath(...args), value);\n return obj;\n}\nfunction setFlagProperties(obj, ...args) {\n const properties = args.pop();\n foundry.utils.setProperty(obj, flagPath(...args), properties);\n return obj;\n}\nfunction unsetFlagProperty(obj, ...path) {\n foundry.utils.setProperty(obj, flagPath(...path), _del);\n return obj;\n}\nfunction deleteFlagProperty(obj, ...path) {\n foundry.utils.deleteProperty(obj, flagPath(...path));\n return obj;\n}\nfunction updateSourceFlag(doc, ...args) {\n const value = args.pop();\n return doc.updateSource({ [flagPath(...args)]: value });\n}\nexport { deleteFlagProperty, getFlag, getFlagProperty, setFlag, setFlagProperties, setFlagProperty, unsetFlag, unsetFlagProperty, updateFlag, updateSourceFlag, };\n", "import { htmlQuery, localize, MODULE, R, SYSTEM } from \".\";\nfunction render(...args) {\n const data = args.at(-1);\n const template = args.slice(0, -1).join();\n const path = MODULE.templatePath(template);\n data.i18n = localize.i18n(R.isString(data.i18n) ? data.i18n : template.replace(/\\//, \".\"));\n data.isSF2e = SYSTEM.isSF2e;\n return foundry.applications.handlebars.renderTemplate(path, data);\n}\nfunction preSyncElement(newElement, priorElement, ...scrollable) {\n const state = { focus: undefined, scrollPositions: [] };\n if (!priorElement) {\n return state;\n }\n const focus = priorElement.querySelector(\":focus\");\n if (focus?.name) {\n state.focus = `${focus.tagName}[name=\"${focus.name}\"]`;\n }\n else if (focus?.dataset.itemId) {\n state.focus = `${focus.tagName}[data-item-id=\"${focus.dataset.itemId}\"]`;\n }\n if (scrollable.length === 0) {\n scrollable.push(\"\");\n }\n for (const selector of scrollable) {\n const el0 = selector === \"\" ? priorElement : htmlQuery(priorElement, selector);\n if (el0) {\n const el1 = selector === \"\" ? newElement : htmlQuery(newElement, selector);\n if (el1) {\n state.scrollPositions.push([el1, el0.scrollTop]);\n }\n }\n }\n return state;\n}\nfunction postSyncElement(newElement, state) {\n if (state.focus) {\n const newFocus = htmlQuery(newElement, state.focus);\n newFocus?.focus();\n }\n for (const [el, scrollTop] of state.scrollPositions) {\n el.scrollTop = scrollTop;\n }\n}\nexport { postSyncElement, preSyncElement, render };\n", "import { MODULE, R } from \".\";\nfunction htmlQuery(parent, selectors) {\n if (!(parent instanceof Element))\n return null;\n return parent.querySelector(selectors);\n}\nfunction htmlQueryAll(parent, selectors) {\n if (!(parent instanceof Element || parent instanceof Document))\n return [];\n return Array.from(parent.querySelectorAll(selectors));\n}\nfunction htmlClosest(child, selectors) {\n if (!(child instanceof Element))\n return null;\n return child.closest(selectors);\n}\nfunction htmlQueryIn(child, parentSelector, siblingSelector) {\n const parent = htmlClosest(child, parentSelector);\n return htmlQuery(parent, siblingSelector);\n}\nfunction firstElementWithText(el, skipEmpty = true) {\n if (!(el instanceof HTMLElement))\n return null;\n const childNodes = el.childNodes;\n if (!childNodes.length)\n return null;\n for (const child of childNodes) {\n if (child.nodeType === Node.TEXT_NODE && (!skipEmpty || child.textContent?.trim())) {\n return el;\n }\n }\n for (const child of el.children) {\n const withText = firstElementWithText(child);\n if (withText) {\n return withText;\n }\n }\n return null;\n}\nfunction createHTMLElement(nodeName, { classes = [], dataset = {}, content, id, style } = {}) {\n const element = document.createElement(nodeName);\n if (element instanceof HTMLButtonElement) {\n element.type = \"button\";\n }\n if (style) {\n assignStyle(element, style);\n }\n if (id) {\n element.id = id;\n }\n if (classes.length > 0) {\n element.classList.add(...classes);\n }\n for (const [key, value] of Object.entries(dataset)) {\n if (R.isNullish(value) || value === false)\n continue;\n element.dataset[key] = value === true ? \"\" : String(value);\n }\n if (R.isString(content)) {\n element.innerHTML = content;\n }\n else if (content instanceof Element) {\n element.append(content);\n }\n else if (content) {\n element.append(...content);\n }\n return element;\n}\nfunction createHTMLElementContent(options) {\n return createHTMLElement(\"div\", options).firstChild;\n}\nfunction createButtonElement(options) {\n let content = \"\";\n if (options.icon) {\n content += ` `;\n }\n if (options.label) {\n content += options.label;\n }\n return createHTMLElement(\"button\", { ...options, content });\n}\nfunction createInputElement(type, name, value, options) {\n const input = createHTMLElement(\"input\", options);\n input.type = type;\n input.name = name;\n if (type === \"text\") {\n input.value = String(value);\n }\n else if (type === \"number\") {\n input.valueAsNumber = Number(value) || 0;\n }\n else if (type === \"checkbox\") {\n input.checked = Boolean(value);\n }\n else {\n input.value = String(value);\n input.checked = !!options?.checked;\n }\n return input;\n}\nfunction createToggleEvent(event, selector, listener, options) {\n let enabled = false;\n const getElement = () => {\n return selector ? document.querySelector(selector) : document;\n };\n return {\n activate() {\n if (enabled)\n return;\n requestAnimationFrame(() => {\n getElement()?.addEventListener(event, listener, options);\n });\n enabled = true;\n },\n disable() {\n if (!enabled)\n return;\n getElement()?.removeEventListener(event, listener, options);\n enabled = false;\n },\n toggle(enabled) {\n if (enabled)\n this.activate();\n else\n this.disable();\n },\n };\n}\nfunction addListener(parent, selectors, ...args) {\n if (!(parent instanceof Element || parent instanceof Document))\n return;\n const element = parent.querySelector(selectors);\n if (!(element instanceof HTMLElement))\n return;\n const event = typeof args[0] === \"string\" ? args[0] : \"click\";\n const listener = typeof args[0] === \"function\" ? args[0] : args[1];\n const useCapture = typeof args[1] === \"boolean\" ? args[1] : args[2];\n element.addEventListener(event, (e) => listener(element, e), useCapture);\n}\nfunction addListenerAll(parent, selectors, ...args) {\n if (!(parent instanceof Element || parent instanceof Document))\n return;\n const elements = parent.querySelectorAll(selectors);\n const event = typeof args[0] === \"string\" ? args[0] : \"click\";\n const listener = typeof args[0] === \"function\" ? args[0] : args[1];\n const useCapture = typeof args[1] === \"boolean\" ? args[1] : args[2];\n for (const element of elements) {\n if (!(element instanceof HTMLElement))\n continue;\n element.addEventListener(event, (e) => listener(element, e), useCapture);\n }\n}\nfunction addEnterKeyListeners(html, inputType = \"all\") {\n const types = inputType === \"all\" ? [\"text\", \"number\"] : [inputType];\n const selector = types.map((type) => `input[type=\"${type}\"]`).join(\", \");\n addListenerAll(html, selector, \"keypress\", (el, event) => {\n if (event.key === \"Enter\") {\n event.stopPropagation();\n event.preventDefault();\n el.blur();\n }\n });\n}\nfunction getInputValue(el) {\n if (el instanceof HTMLSelectElement) {\n return el.value;\n }\n return el.nodeName === \"RANGE-PICKER\" || [\"number\", \"range\"].includes(el.type)\n ? el.valueAsNumber\n : el.type === \"checkbox\"\n ? el.checked\n : el.value;\n}\n/**\n * repurposed version of\n * https://github.com/foundryvtt/pf2e/blob/c0cfa1f4c266d7d843966b50a9fd1a34d42b2051/src/module/actor/sheet/item-summary-renderer.ts#L25\n */\nasync function toggleSummary(summaryElem) {\n const duration = 0.4;\n if (summaryElem.hidden) {\n await gsap.fromTo(summaryElem, { height: 0, opacity: 0, hidden: false }, { height: \"auto\", opacity: 1, duration });\n }\n else {\n await gsap.to(summaryElem, {\n height: 0,\n duration,\n opacity: 0,\n paddingTop: 0,\n paddingBottom: 0,\n margin: 0,\n clearProps: \"all\",\n onComplete: () => {\n summaryElem.hidden = true;\n },\n });\n }\n}\nfunction createFormData(html, expand = false) {\n const form = html instanceof HTMLFormElement ? html : htmlQuery(html, \"form\");\n if (!form)\n return null;\n const formData = new foundry.applications.ux.FormDataExtended(form, { disabled: true, readonly: true });\n const data = R.mapValues(formData.object, (value) => {\n return typeof value === \"string\" ? value.trim() : value;\n });\n for (const element of form.elements) {\n if (!(element instanceof HTMLInputElement) || element.type !== \"file\")\n continue;\n data[element.name] = element.files?.[0];\n }\n return (expand ? foundry.utils.expandObject(data) : data);\n}\nfunction dataToDatasetString(data) {\n return R.pipe(!R.isArray(data) ? R.entries(data) : data, R.map(([key, value]) => {\n if (R.isNullish(value))\n return;\n const sluggifiedKey = key.replace(/\\B([A-Z])/g, \"-$1\").toLowerCase();\n const stringified = R.isObjectType(value) ? foundry.utils.escapeHTML(JSON.stringify(value)) : value;\n return `data-${sluggifiedKey}='${stringified}'`;\n }), R.filter(R.isTruthy), R.join(\" \"));\n}\nfunction assignStyle(el, style) {\n Object.assign(el.style, style);\n}\nfunction styleValue(value) {\n return `${value}px`;\n}\nfunction setStyleProperty(html, property, value) {\n html?.style.setProperty(property, styleValue(value));\n}\nfunction setStyleProperties(el, properties) {\n for (const [property, value] of R.entries(properties)) {\n el.style.setProperty(property, String(value));\n }\n}\nfunction registerCustomElement(tag, element) {\n try {\n if (window.customElements.get(tag))\n return;\n window.customElements.define(tag, element);\n }\n catch (error) {\n MODULE.error(`an error occurred while registering a custom element: ${tag}`, error);\n }\n}\nexport { addEnterKeyListeners, addListener, addListenerAll, assignStyle, createButtonElement, createFormData, createHTMLElement, createHTMLElementContent, createInputElement, createToggleEvent, dataToDatasetString, firstElementWithText, getInputValue, htmlClosest, htmlQuery, htmlQueryAll, htmlQueryIn, registerCustomElement, setStyleProperties, setStyleProperty, styleValue, toggleSummary, };\n", "import { createHTMLElementContent, getActionGlyph, getDamageRollClass, htmlQuery, includesAny, R, setHasElement, SYSTEM, traitSlugToObject, } from \".\";\n/**\n * https://github.com/foundryvtt/pf2e/blob/1465f7190b2b8454094c50fa6d06e9902e0a3c41/src/module/item/base/data/values.ts#L23-L31\n */\nconst ITEM_CARRY_TYPES = Object.freeze([\n \"attached\",\n \"dropped\",\n \"held\",\n \"implanted\",\n \"installed\",\n \"stowed\",\n \"worn\",\n]);\n/**\n * https://github.com/foundryvtt/pf2e/blob/95e941aecaf1fa6082825b206b0ac02345d10538/src/module/item/physical/values.ts#L1\n */\nconst PHYSICAL_ITEM_TYPES = new Set([\n \"ammo\",\n \"armor\",\n \"backpack\",\n \"book\",\n \"consumable\",\n \"equipment\",\n \"shield\",\n \"treasure\",\n \"weapon\",\n]);\nconst ATTACHABLE_TYPES = {\n ammo: [\"weapon\"],\n equipment: [\"weapon\", \"armor\", \"shield\"],\n weapon: [\"shield\"],\n};\nfunction itemIsOfType(item, ...types) {\n return (typeof item.name === \"string\" &&\n types.some((t) => (t === \"physical\" ? setHasElement(PHYSICAL_ITEM_TYPES, item.type) : item.type === t)));\n}\nfunction getItemSource(item, clearId) {\n const source = item.toObject();\n source._stats.compendiumSource ??= item.uuid;\n if (clearId) {\n // @ts-expect-error\n delete source._id;\n }\n return source;\n}\nasync function getItemFromUuid(uuid, type) {\n if (!uuid)\n return null;\n const item = await fromUuid(uuid);\n return item instanceof Item && (!type || item.isOfType(type)) ? item : null;\n}\nasync function getItemSourceFromUuid(uuid, type) {\n const item = await getItemFromUuid(uuid, type);\n return !!item ? getItemSource(item) : null;\n}\nfunction* actorItems(actor, type) {\n const types = R.isArray(type) ? type : type ? [type] : R.keys(CONFIG.PF2E.Item.documentClasses);\n // we must add parent types for subitems lookup\n const attachables = type && types.filter((t) => t in ATTACHABLE_TYPES);\n if (attachables?.length) {\n for (const attachType of attachables) {\n for (const attachToType of ATTACHABLE_TYPES[attachType]) {\n if (!types.includes(attachToType)) {\n types.push(attachToType);\n }\n }\n }\n }\n for (const itemType of types) {\n for (const item of actor.itemTypes[itemType]) {\n yield item;\n // we also yield subitems because they are unnaccessible otherwise\n if (\"subitems\" in item) {\n for (const subitem of item.subitems) {\n yield subitem;\n }\n }\n }\n }\n}\nfunction findItemWithSourceId(actor, uuid, type) {\n for (const item of actorItems(actor, type)) {\n if (isSupressedFeat(item))\n continue;\n const sourceId = getItemSourceId(item);\n if (sourceId === uuid) {\n return item;\n }\n }\n return null;\n}\nfunction findItemWithSlug(actor, slug, type) {\n for (const item of actorItems(actor, type)) {\n if (isSupressedFeat(item))\n continue;\n const itemSlug = getItemSlug(item);\n if (itemSlug === slug) {\n return item;\n }\n }\n return null;\n}\nfunction hasAnyItemWithSourceId(actor, uuids, type) {\n for (const item of actorItems(actor, type)) {\n if (isSupressedFeat(item))\n continue;\n const sourceId = getItemSourceId(item);\n if (sourceId && uuids.includes(sourceId)) {\n return true;\n }\n }\n return false;\n}\nfunction getItemSourceId(item) {\n const isCompendiumItem = item._id && item.pack && !item.isEmbedded;\n return isCompendiumItem ? item.uuid : (item._stats.compendiumSource ?? item._stats.duplicateSource ?? item.uuid);\n}\nfunction getItemSlug(item) {\n return item instanceof Item ? item.slug || SYSTEM.sluggify(item._source.name) : SYSTEM.sluggify(item.name);\n}\nfunction getActorWeapons(actor) {\n return [\n ...actor.itemTypes.weapon,\n ...actor.itemTypes.shield.flatMap((shield) => shield.subitems.filter((item) => item.isOfType(\"weapon\"))),\n ];\n}\nfunction itemWithActor(actor, item) {\n return (item.parent ? item : new (getDocumentClass(\"Item\"))(item.toObject(), { parent: actor }));\n}\nasync function usePhysicalItem(event, item) {\n const isConsumable = item.isOfType(\"consumable\");\n if (isConsumable && isCastConsumable(item)) {\n return item.consume();\n }\n const macro = game.toolbelt?.getToolSetting(\"actionable\", \"item\")\n ? await game.toolbelt.api.actionable.getItemMacro(item)\n : undefined;\n const use = isConsumable ? () => consumeItem(event, item) : () => game.pf2e.rollItemMacro(item.uuid, event);\n if (macro) {\n // we let the macro handle item consumption\n return macro.execute({\n actor: item.actor,\n item,\n use,\n cancel: () => {\n const msg = game.toolbelt.localize(\"actionable.item.cancel\", item);\n return ui.notifications.warn(msg, { localize: false });\n },\n });\n }\n return use();\n}\n/**\n * upgraded version of\n * https://github.com/foundryvtt/pf2e/blob/eecf53f37490cbd228d8c74b290748b0188768b4/src/module/item/consumable/document.ts#L156\n * though stripped of scrolls & wands\n */\nasync function consumeItem(event, item) {\n const actor = item.actor;\n const speaker = ChatMessage.getSpeaker({ actor });\n const flags = {\n [SYSTEM.id]: {\n origin: {\n sourceId: item.sourceId,\n uuid: item.uuid,\n type: item.type,\n },\n },\n };\n const contentHTML = createHTMLElementContent({\n content: (await item.toMessage(event, { create: false }))?.content,\n });\n htmlQuery(contentHTML, \"footer\")?.remove();\n htmlQuery(contentHTML, \"button[data-action='consume']\")?.remove();\n const uses = item.uses;\n const content = contentHTML.outerHTML;\n if (item.system.damage) {\n const DamageRoll = getDamageRollClass();\n const { formula, type, kind } = item.system.damage;\n const roll = new DamageRoll(`(${formula})[${type},${kind}]`);\n roll.toMessage({ speaker, flavor: content, flags });\n }\n else {\n const key = uses.max > 1 && uses.value > 1 ? \"UseMulti\" : \"UseSingle\";\n const use = game.i18n.format(`PF2E.ConsumableMessage.${key}`, {\n name: item.name,\n current: uses.value - 1,\n });\n const flavor = `

${use}

`;\n ChatMessage.create({ speaker, content: `${flavor}${content}`, flags });\n }\n if (item.system.uses.autoDestroy && uses.value <= 1) {\n const newQuantity = Math.max(item.quantity - 1, 0);\n if (newQuantity <= 0) {\n await item.delete();\n }\n else {\n await item.update({\n \"system.quantity\": newQuantity,\n \"system.uses.value\": uses.max,\n });\n }\n }\n else {\n await item.update({\n \"system.uses.value\": Math.max(uses.value - 1, 0),\n });\n }\n}\nfunction getEquipAnnotation(item) {\n if (!item || item.isEquipped)\n return;\n const { type, hands = 0 } = item.system.usage;\n const annotation = item.carryType === \"dropped\" ? \"pick-up\" : item.isStowed ? \"retrieve\" : \"draw\";\n const fullAnnotation = `${annotation}${hands}H`;\n const purposeKey = SYSTEM.sluggify(fullAnnotation, { camel: \"bactrian\" });\n return {\n annotation,\n cost: annotation === \"retrieve\" ? 2 : 1,\n fullAnnotation,\n handsHeld: hands,\n label: `PF2E.Actions.Interact.${purposeKey}.Title`,\n carryType: type === \"worn\" ? \"worn\" : \"held\",\n };\n}\nfunction itemIsEquipped(item) {\n const equipableItem = item.parentItem ?? item;\n const isInvested = equipableItem.isInvested;\n return isInvested === true || (isInvested === null && equipableItem.isEquipped);\n}\n/**\n * repurposed version of\n * https://github.com/foundryvtt/pf2e/blob/6ff777170c93618f234929c6d483a98a37cbe363/src/module/actor/character/helpers.ts#L210\n */\nasync function equipItemToUse(actor, item, { carryType, handsHeld, fullAnnotation, cost, }) {\n await actor.changeCarryType(item, { carryType, handsHeld });\n if (!game.combat)\n return;\n const templates = {\n flavor: SYSTEM.relativePath(\"templates/chat/action/flavor.hbs\"),\n content: SYSTEM.relativePath(\"templates/chat/action/content.hbs\"),\n };\n const fullAnnotationKey = SYSTEM.sluggify(fullAnnotation, { camel: \"bactrian\" });\n const flavorAction = {\n title: `PF2E.Actions.Interact.Title`,\n subtitle: fullAnnotationKey ? `PF2E.Actions.Interact.${fullAnnotationKey}.Title` : null,\n glyph: getActionGlyph(cost),\n };\n const [traits, message] = [\n [traitSlugToObject(\"manipulate\", CONFIG.PF2E.actionTraits)],\n `PF2E.Actions.Interact.${fullAnnotationKey}.Description`,\n ];\n const flavor = await foundry.applications.handlebars.renderTemplate(templates.flavor, {\n action: flavorAction,\n traits,\n });\n const content = await foundry.applications.handlebars.renderTemplate(templates.content, {\n imgPath: item.img,\n message: game.i18n.format(message, {\n actor: actor.name,\n weapon: item.name,\n }),\n });\n const token = actor.getActiveTokens(false, true).shift();\n await getDocumentClass(\"ChatMessage\").create({\n content,\n speaker: ChatMessage.getSpeaker({ actor, token }),\n flavor,\n style: CONST.CHAT_MESSAGE_STYLES.EMOTE,\n });\n}\nfunction simulateDropItem(item, target, fromInventory) {\n const event = new DragEvent(\"dragstart\", {\n dataTransfer: new DataTransfer(),\n });\n const data = {\n fromInventory,\n itemType: item.type,\n type: \"Item\",\n uuid: item.uuid,\n };\n event.dataTransfer?.setData(\"text/plain\", JSON.stringify(data));\n target.sheet._onDrop(event);\n}\nfunction isSupressedFeat(item) {\n return item.isOfType(\"feat\") && item.suppressed;\n}\nfunction isCastConsumable(item) {\n return R.isIncludedIn(item.category, [\"scroll\", \"spell-gem\", \"wand\"]) && !!item.system.spell;\n}\nfunction isSF2eItem(item) {\n return includesAny(item._source.system.traits.value, [\"tech\", \"analog\"]);\n}\nfunction isAreaOrAutoFireType(type) {\n return R.isIncludedIn(type, [\"area-fire\", \"auto-fire\"]);\n}\nexport { actorItems, consumeItem, equipItemToUse, findItemWithSlug, findItemWithSourceId, getActorWeapons, getEquipAnnotation, getItemFromUuid, getItemSlug, getItemSource, getItemSourceFromUuid, getItemSourceId, hasAnyItemWithSourceId, isAreaOrAutoFireType, isCastConsumable, isSF2eItem, isSupressedFeat, ITEM_CARRY_TYPES, itemIsEquipped, itemIsOfType, itemWithActor, PHYSICAL_ITEM_TYPES, simulateDropItem, usePhysicalItem, };\n", "import { MODULE, R } from \".\";\nfunction registerWrapper(type, path, callback, context) {\n const ids = [];\n const paths = R.isArray(path) ? path : [path];\n const wrapped = context\n ? function (...args) {\n args.unshift(this);\n return callback.apply(context, args);\n }\n : callback;\n for (const key of paths) {\n const id = libWrapper.register(MODULE.id, key, wrapped, type);\n ids.push(id);\n }\n return ids;\n}\nfunction unregisterWrapper(id) {\n const ids = R.isArray(id) ? id : [id];\n for (const id of ids) {\n libWrapper.unregister(MODULE.id, id);\n }\n}\nfunction createSharedWrapper(type, path, sharedCallback) {\n let sharedId = null;\n const _registered = new Collection();\n function wrapper(wrapped, ...wrapperArgs) {\n const registered = R.pipe(_registered.contents, R.sortBy(R.prop(\"priority\")), R.filter(({ active }) => active), R.map(({ listener, context }) => {\n if (context) {\n return ((...args) => listener.call(context, this, ...args));\n }\n else {\n return ((...args) => listener.call(this, ...args));\n }\n }));\n return sharedCallback.call(this, registered, () => wrapped(...wrapperArgs), wrapperArgs);\n }\n const wrapperIsEnabled = () => {\n return _registered.some((x) => x.active);\n };\n const activateWrapper = (id) => {\n const registered = _registered.get(id);\n if (!registered)\n return;\n if (!sharedId) {\n sharedId = registerWrapper(type, path, wrapper);\n }\n registered.active = true;\n };\n const disableWrapper = (id) => {\n const registered = _registered.get(id);\n if (!registered)\n return;\n registered.active = false;\n if (sharedId && !wrapperIsEnabled()) {\n unregisterWrapper(sharedId);\n sharedId = null;\n }\n };\n function register(listener, { context, priority = 0 } = {}) {\n const registerId = foundry.utils.randomID();\n _registered.set(registerId, {\n listener,\n context,\n priority,\n active: false,\n });\n return {\n get enabled() {\n return !!_registered.get(registerId)?.active;\n },\n activate() {\n activateWrapper(registerId);\n },\n disable() {\n disableWrapper(registerId);\n },\n toggle(enabled) {\n enabled ??= !this.enabled;\n if (enabled) {\n this.activate();\n }\n else {\n this.disable();\n }\n },\n };\n }\n return {\n register,\n };\n}\nfunction createToggleWrapper(type, path, callback, options = {}) {\n let wrapperIds = null;\n return {\n get enabled() {\n return !!wrapperIds;\n },\n activate() {\n if (this.enabled)\n return;\n wrapperIds = registerWrapper(type, path, callback, options.context);\n options.onActivate?.();\n },\n disable() {\n if (!wrapperIds)\n return;\n unregisterWrapper(wrapperIds);\n wrapperIds = null;\n options.onDisable?.();\n },\n toggle(enabled) {\n enabled ??= !this.enabled;\n if (enabled) {\n this.activate();\n }\n else {\n this.disable();\n }\n },\n };\n}\nfunction createCreatureSheetWrapper(type, partialPath, callback, options = {}) {\n const partials = R.isArray(partialPath) ? partialPath : [partialPath];\n const paths = partials.flatMap((partial) => [\n `CONFIG.Actor.sheetClasses.character['pf2e.CharacterSheetPF2e'].cls.prototype.${partial}`,\n `CONFIG.Actor.sheetClasses.npc['pf2e.NPCSheetPF2e'].cls.prototype.${partial}`,\n `CONFIG.Actor.sheetClasses.familiar['pf2e.FamiliarSheetPF2e'].cls.prototype.${partial}`,\n ]);\n return createToggleWrapper(type, paths, callback, options);\n}\nexport { createCreatureSheetWrapper, createSharedWrapper, createToggleWrapper, registerWrapper, unregisterWrapper };\n", "import { MODULE, R } from \".\";\nclass Localize extends Function {\n constructor(...subkeys) {\n super();\n this.subkeys = subkeys;\n const self = this;\n function localize(...args) {\n const { data, path } = self.getLocalizeData(...args);\n return self.localizeOrFormat(path, data);\n }\n Object.assign(localize, this);\n Object.setPrototypeOf(localize, Object.getPrototypeOf(this));\n return localize;\n }\n path(...path) {\n return MODULE.path(...this.subkeys, ...path);\n }\n getLocalizeData(...args) {\n const data = R.isObjectType(args.at(-1)) ? args.pop() : undefined;\n const path = this.path(...args);\n return { path, data };\n }\n localizeOrFormat(path, data) {\n return typeof data === \"object\" ? game.i18n.format(path, data) : game.i18n.localize(path);\n }\n ifExist(...args) {\n const { data, path } = this.getLocalizeData(...args);\n if (game.i18n.has(path, true)) {\n return this.localizeOrFormat(path, data);\n }\n }\n notify(type, ...args) {\n const permanent = R.isBoolean(args.at(-1)) ? args.pop() : false;\n const str = this(...args);\n return ui.notifications.notify(str, type, { permanent });\n }\n success(...args) {\n return this.notify(\"success\", ...args);\n }\n info(...args) {\n return this.notify(\"info\", ...args);\n }\n warning(...args) {\n return this.notify(\"warning\", ...args);\n }\n error(...args) {\n return this.notify(\"error\", ...args);\n }\n sub(...subkeys) {\n return new Localize(...this.subkeys, ...subkeys);\n }\n shared(key) {\n return game.i18n.localize(`LEVIKTIMES.${key}`);\n }\n i18n(...subkeys) {\n const self = this;\n const getTemplateData = (...args) => {\n const data = R.isObjectType(args.at(-1)) ? args.pop() : undefined;\n const path = this.path(...subkeys, ...args);\n return { path, data: data?.hash };\n };\n function i18n(...args) {\n const { path, data } = getTemplateData(...args);\n return self.localizeOrFormat(path, data);\n }\n Object.defineProperties(i18n, {\n tooltip: {\n value: (...args) => {\n const tooltip = i18n(...args);\n return `data-tooltip=\"${tooltip}\"`;\n },\n enumerable: false,\n configurable: false,\n },\n root: {\n value: (...args) => {\n const data = R.isObjectType(args.at(-1)) ? args.pop() : undefined;\n const path = MODULE.path(...args);\n return self.localizeOrFormat(path, data?.hash);\n },\n enumerable: false,\n configurable: false,\n },\n });\n return i18n;\n }\n}\nfunction foundryLocalizeIfExist(key) {\n if (game.i18n.has(key, true)) {\n return game.i18n.localize(key);\n }\n}\nconst localize = new Localize();\nexport { localize, foundryLocalizeIfExist };\n", "import { R } from \".\";\nclass MapOfArrays extends Map {\n constructor(entries) {\n if (entries && !(Symbol.iterator in entries)) {\n super(Object.entries(entries));\n }\n else {\n super(entries);\n }\n }\n add(key, entry, create = true) {\n const entries = R.isArray(entry) ? entry : [entry];\n const arr = this.get(key, create);\n arr?.push(...entries);\n }\n get(key, create = false) {\n const exist = super.get(key);\n if (exist || !create) {\n return exist;\n }\n else {\n const arr = [];\n this.set(key, arr);\n return arr;\n }\n }\n remove(key, entry) {\n const arr = this.get(key);\n return arr?.findSplice((x) => x === entry) ?? null;\n }\n removeBy(key, fn) {\n const arr = this.get(key);\n return arr?.findSplice(fn) ?? null;\n }\n map(fn) {\n let index = 0;\n const transformed = [];\n for (const [key, value] of this.entries()) {\n transformed.push(fn(value, key, index, this));\n index++;\n }\n return transformed;\n }\n toObject() {\n return Object.fromEntries(this);\n }\n toJSON() {\n return this.toObject();\n }\n}\nfunction isInstanceOf(obj, cls) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let cursor = Reflect.getPrototypeOf(obj);\n while (cursor) {\n if (cursor.constructor.name === cls)\n return true;\n cursor = Reflect.getPrototypeOf(cursor);\n }\n return false;\n}\nfunction addToObjectIfNonNullish(obj, extra) {\n for (const [key, value] of R.entries(extra)) {\n if (value != null) {\n obj[key] = value;\n }\n }\n return obj;\n}\nfunction purgeObject(obj) {\n if (R.isArray(obj)) {\n const newObj = R.pipe(obj, R.map(purgeObject), R.filter(R.isNonNullish));\n return newObj.length ? newObj : undefined;\n }\n else if (R.isObjectType(obj)) {\n const newObj = R.pipe(obj, R.mapValues(purgeObject), R.pickBy(R.isNonNullish));\n return foundry.utils.isEmpty(newObj) ? undefined : newObj;\n }\n else {\n return obj === \"\" ? undefined : obj;\n }\n}\nexport { addToObjectIfNonNullish, isInstanceOf, MapOfArrays, purgeObject };\n", "const dcAdjustments = new Map([\n [\"incredibly-easy\", -10],\n [\"very-easy\", -5],\n [\"easy\", -2],\n [\"normal\", 0],\n [\"hard\", 2],\n [\"very-hard\", 5],\n [\"incredibly-hard\", 10],\n]);\nconst dcByLevel = new Map([\n [-1, 13],\n [0, 14],\n [1, 15],\n [2, 16],\n [3, 18],\n [4, 19],\n [5, 20],\n [6, 22],\n [7, 23],\n [8, 24],\n [9, 26],\n [10, 27],\n [11, 28],\n [12, 30],\n [13, 31],\n [14, 32],\n [15, 34],\n [16, 35],\n [17, 36],\n [18, 38],\n [19, 39],\n [20, 40],\n [21, 42],\n [22, 44],\n [23, 46],\n [24, 48],\n [25, 50],\n]);\nconst simpleDCs = new Map([\n [\"untrained\", 10],\n [\"trained\", 15],\n [\"expert\", 20],\n [\"master\", 30],\n [\"legendary\", 40],\n]);\nconst simpleDCsWithoutLevel = new Map([\n [\"untrained\", 10],\n [\"trained\", 15],\n [\"expert\", 20],\n [\"master\", 25],\n [\"legendary\", 30],\n]);\nfunction rarityToDCAdjustment(rarity = \"common\") {\n switch (rarity) {\n case \"uncommon\":\n return \"hard\";\n case \"rare\":\n return \"very-hard\";\n case \"unique\":\n return \"incredibly-hard\";\n default:\n return \"normal\";\n }\n}\nfunction adjustDC(dc, adjustment = \"normal\") {\n return dc + (dcAdjustments.get(adjustment) ?? 0);\n}\nfunction adjustDCByRarity(dc, rarity = \"common\") {\n return adjustDC(dc, rarityToDCAdjustment(rarity));\n}\nfunction calculateDC(level, { pwol, rarity = \"common\" } = {}) {\n pwol ??= game.pf2e.settings.variants.pwol.enabled;\n // assume level 0 if garbage comes in. We cast level to number because the backing data may actually have it\n // stored as a string, which we can't catch at compile time\n const dc = dcByLevel.get(level) ?? 14;\n if (pwol) {\n // -1 shouldn't be subtracted since it's just\n // a creature level and not related to PC levels\n return adjustDCByRarity(dc - Math.max(level, 0), rarity);\n }\n else {\n return adjustDCByRarity(dc, rarity);\n }\n}\nfunction calculateSimpleDC(rank, { pwol = false } = {}) {\n if (pwol) {\n return simpleDCsWithoutLevel.get(rank) ?? 10;\n }\n else {\n return simpleDCs.get(rank) ?? 10;\n }\n}\nfunction calculateSpellDC(spellLevel, { pwol = false } = {}) {\n return calculateDC(spellLevel * 2 - 1, { pwol });\n}\nfunction calculateCreatureDC(actor, pwol) {\n return calculateDC(actor.level, { pwol, rarity: actor.rarity });\n}\nexport { adjustDCByRarity, calculateCreatureDC, calculateDC, calculateSimpleDC, calculateSpellDC };\n", "import { adjustDCByRarity, calculateDC, MAGIC_TRADITIONS, setHasElement } from \".\";\nimport { R, SYSTEM } from \"..\";\n/**\n * https://github.com/foundryvtt/pf2e/blob/578620c2a35a76d904938fb3d4984ad0e14be241/src/module/item/identification.ts#L30\n */\nfunction getDcRarity(item) {\n return item.traits.has(\"cursed\") ? \"unique\" : item.rarity;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/578620c2a35a76d904938fb3d4984ad0e14be241/src/module/item/identification.ts#L63\n * with option fallback\n */\nfunction getItemIdentificationDCs(item, { pwol = false, notMatchingTraditionModifier } = {\n pwol: game.pf2e.settings.variants.pwol.enabled,\n notMatchingTraditionModifier: game.settings.get(SYSTEM.id, \"identifyMagicNotMatchingTraditionModifier\"),\n}) {\n const baseDC = calculateDC(item.level, { pwol });\n const rarity = getDcRarity(item);\n const dc = adjustDCByRarity(baseDC, rarity);\n if (item.isMagical) {\n return getIdentifyMagicDCs(item, dc, notMatchingTraditionModifier);\n }\n else {\n return { crafting: dc };\n }\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/578620c2a35a76d904938fb3d4984ad0e14be241/src/module/item/identification.ts#L22\n */\nfunction getMagicTraditions(item) {\n const traits = item.system.traits.value;\n return new Set(traits.filter((t) => setHasElement(MAGIC_TRADITIONS, t)));\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/578620c2a35a76d904938fb3d4984ad0e14be241/src/module/item/identification.ts#L37\n */\nfunction getIdentifyMagicDCs(item, baseDC, notMatchingTraditionModifier) {\n const result = {\n occult: baseDC,\n primal: baseDC,\n divine: baseDC,\n arcane: baseDC,\n };\n const traditions = getMagicTraditions(item);\n for (const key of MAGIC_TRADITIONS) {\n // once an item has a magic tradition, all skills\n // that don't match the tradition are hard\n if (traditions.size > 0 && !traditions.has(key)) {\n result[key] = baseDC + notMatchingTraditionModifier;\n }\n }\n return { arcana: result.arcane, nature: result.primal, religion: result.divine, occultism: result.occult };\n}\n/**\n * modified version of\n * https://github.com/foundryvtt/pf2e/blob/578620c2a35a76d904938fb3d4984ad0e14be241/src/module/actor/sheet/popups/identify-popup.ts#L7\n */\nclass IdentifyItemPopup extends foundry.appv1.api.FormApplication {\n static get defaultOptions() {\n return {\n ...super.defaultOptions,\n id: \"identify-item\",\n title: game.i18n.localize(\"PF2E.identification.Identify\"),\n template: `systems/${SYSTEM.id}/templates/actors/identify-item.hbs`,\n width: \"auto\",\n classes: [\"identify-popup\"],\n };\n }\n dcs = getItemIdentificationDCs(this.object);\n async getData() {\n const item = this.object;\n return {\n ...(await super.getData()),\n isMagic: item.isMagical,\n isAlchemical: item.isAlchemical,\n dcs: this.dcs,\n };\n }\n // we extracted that part from activateListeners so it can be called from third party\n async postSkillChecks() {\n const item = this.object;\n const identifiedName = item.system.identification.identified.name;\n const dcs = this.dcs;\n const action = item.isMagical ? \"identify-magic\" : item.isAlchemical ? \"identify-alchemy\" : \"recall-knowledge\";\n const path = `systems/${SYSTEM.id}/templates/actors/identify-item-chat-skill-checks.hbs`;\n const content = await foundry.applications.handlebars.renderTemplate(path, {\n identifiedName,\n action,\n skills: R.omit(dcs, [\"dc\"]),\n unidentified: item.system.identification.unidentified,\n uuid: item.uuid,\n });\n await getDocumentClass(\"ChatMessage\").create({ author: game.user.id, content });\n }\n activateListeners($html) {\n const html = $html[0];\n const updateButton = html.querySelector(\"button.update-identification\");\n updateButton?.addEventListener(\"click\", () => {\n this.submit({ updateData: { status: updateButton.value } });\n });\n // Add listener on Post skill checks to chat button that posts item unidentified img and name and skill checks\n html.querySelector(\"button.post-skill-checks\")?.addEventListener(\"click\", async () => {\n await this.postSkillChecks();\n });\n }\n async _updateObject(_event, formData) {\n const status = formData[\"status\"];\n if (status === \"identified\") {\n return this.object.setIdentificationStatus(status);\n }\n }\n}\nexport { getItemIdentificationDCs, IdentifyItemPopup };\n", "import { R, SYSTEM } from \"..\";\nconst COIN_DENOMINATIONS = [\"pp\", \"gp\", \"sp\", \"cp\"];\nconst COIN_COMPENDIUM_UUIDS = {\n pp: SYSTEM.itemUuid(\"Compendium.pf2e.equipment-srd.Item.JuNPeK5Qm1w6wpb4\", \"Compendium.pf2e-anachronism.equipment.Item.JuNPeK5Qm1w6wpb4\"),\n gp: SYSTEM.itemUuid(\"Compendium.pf2e.equipment-srd.Item.B6B7tBWJSqOBz5zz\", \"Compendium.pf2e-anachronism.equipment.Item.B6B7tBWJSqOBz5zz\"),\n sp: SYSTEM.itemUuid(\"Compendium.pf2e.equipment-srd.Item.5Ew82vBF9YfaiY9f\", \"Compendium.pf2e-anachronism.equipment.Item.5Ew82vBF9YfaiY9f\"),\n cp: SYSTEM.itemUuid(\"Compendium.pf2e.equipment-srd.Item.lzJ8AVhRcbFul5fh\", \"Compendium.pf2e-anachronism.equipment.Item.lzJ8AVhRcbFul5fh\"),\n};\nlet _physicalItemTypes;\nfunction getPhysicalItemTypes() {\n return (_physicalItemTypes ??= R.pipe(R.entries(CONFIG.PF2E.Item.documentClasses), R.filter(([_, x]) => Reflect.getPrototypeOf(x).name === \"PhysicalItemPF2e\"), R.map(([type]) => type)));\n}\nexport { COIN_COMPENDIUM_UUIDS, COIN_DENOMINATIONS, getPhysicalItemTypes };\n", "import { R } from \"..\";\n/**\n * https://github.com/foundryvtt/pf2e/blob/f7d7441acbf856b490a4e0c0d799809cd6e3dc5d/src/util/misc.ts#L259\n */\nfunction splitListString(str, { delimiter = \",\", unique = true } = {}) {\n const list = str\n .split(delimiter)\n .map((el) => el.trim())\n .filter((el) => el !== \"\");\n return unique ? R.unique(list) : list;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/95e941aecaf1fa6082825b206b0ac02345d10538/src/util/misc.ts#L58\n */\nfunction setHasElement(set, value) {\n return set.has(value);\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/78e7f116221c6138e4f3d7e03177bd85936c6939/src/util/misc.ts#L216\n */\nfunction ErrorPF2e(message) {\n return Error(`PF2e System | ${message}`);\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/07c666035850e084835e0c8c3ca365b06dcd0a75/src/util/tags.ts#L8\n */\nfunction traitSlugToObject(trait, dictionary) {\n // Look up trait labels from `npcAttackTraits` instead of `weaponTraits` in case a battle form attack is\n // in use, which can include what are normally NPC-only traits\n const traitObject = {\n name: trait,\n label: game.i18n.localize(dictionary[trait] ?? trait),\n description: null,\n };\n if (objectHasKey(CONFIG.PF2E.traitsDescriptions, trait)) {\n traitObject.description = CONFIG.PF2E.traitsDescriptions[trait];\n }\n return traitObject;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/002ba0bf6d15dfc0d87a96009f02fb0743fb000b/src/module/sheet/helpers.ts#L158-L161\n */\nfunction isControlDown(event) {\n return foundry.helpers.interaction.KeyboardManager.CONTROL_KEY_STRING === \"\u2318\" ? event.metaKey : event.ctrlKey;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/07c666035850e084835e0c8c3ca365b06dcd0a75/src/util/misc.ts#L48\n */\nfunction objectHasKey(obj, key) {\n return (typeof key === \"string\" || typeof key === \"number\") && key in obj;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/07c666035850e084835e0c8c3ca365b06dcd0a75/src/module/sheet/helpers.ts#L125\n */\nfunction isRelevantEvent(event) {\n return !!event && \"ctrlKey\" in event && \"metaKey\" in event && \"shiftKey\" in event;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/07c666035850e084835e0c8c3ca365b06dcd0a75/src/module/sheet/helpers.ts#L149\n */\nfunction eventToRollMode(event) {\n if (!isRelevantEvent(event) || !(event.ctrlKey || event.metaKey))\n return \"roll\";\n return game.user.isGM ? \"gmroll\" : \"blindroll\";\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/5967df95d2645162d06d6ee317e99cf9aa03477e/src/module/sheet/helpers.ts#L132\n */\nfunction eventToRollParams(event, rollType) {\n const key = rollType.type === \"check\" ? \"showCheckDialogs\" : \"showDamageDialogs\";\n const skipDefault = !game.user.settings[key];\n if (!isRelevantEvent(event))\n return { skipDialog: skipDefault };\n const params = { skipDialog: event.shiftKey ? !skipDefault : skipDefault };\n if (event.ctrlKey || event.metaKey) {\n params.rollMode = game.user.isGM ? \"gmroll\" : \"blindroll\";\n }\n return params;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/f7d7441acbf856b490a4e0c0d799809cd6e3dc5d/src/module/system/text-editor.ts#L344\n */\nfunction parseInlineParams(paramString, options = {}) {\n const parts = splitListString(paramString, { delimiter: \"|\" });\n const result = parts.reduce((result, part, idx) => {\n if (idx === 0 && options.first && !part.includes(\":\")) {\n result[options.first] = part.trim();\n return result;\n }\n const colonIdx = part.indexOf(\":\");\n const portions = colonIdx >= 0 ? [part.slice(0, colonIdx), part.slice(colonIdx + 1)] : [part, \"\"];\n result[portions[0]] = portions[1];\n return result;\n }, {});\n return result;\n}\nlet pluralRules;\n/**\n * https://github.com/foundryvtt/pf2e/blob/5ebcd0359d1358bb00b76c47e7b84289239234b9/src/util/misc.ts#L226\n */\nfunction ordinalString(value) {\n pluralRules ??= new Intl.PluralRules(game.i18n.lang, { type: \"ordinal\" });\n const suffix = game.i18n.localize(`PF2E.OrdinalSuffixes.${pluralRules.select(value)}`);\n return game.i18n.format(\"PF2E.OrdinalNumber\", { value, suffix });\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/895e512a3346ae9e7eeafbc59fdbac1b68651afa/src/util/misc.ts#L352\n */\nfunction localizer(prefix) {\n return (...[suffix, formatArgs]) => formatArgs ? game.i18n.format(`${prefix}.${suffix}`, formatArgs) : game.i18n.localize(`${prefix}.${suffix}`);\n}\nlet intlNumberFormat;\n/**\n * https://github.com/foundryvtt/pf2e/blob/142b2ce5524f3f331298f97f0b759dcb842731ad/src/util/misc.ts#L72\n */\nfunction signedInteger(value, { emptyStringZero = false, zeroIsNegative = false } = {}) {\n if (value === 0 && emptyStringZero)\n return \"\";\n const nf = (intlNumberFormat ??= new Intl.NumberFormat(game.i18n.lang, {\n maximumFractionDigits: 0,\n signDisplay: \"always\",\n }));\n const maybeNegativeZero = zeroIsNegative && value === 0 ? -0 : value;\n return nf.format(maybeNegativeZero);\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/0191f1fdac24c3903a939757a315043d1fcbfa59/src/util/misc.ts#L56\n */\nfunction tupleHasValue(array, value) {\n return array.includes(value);\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/f26bfcc353ebd58efd6d1140cdb8e20688acaea8/src/module/item/spell/helpers.ts#L16\n */\nfunction createSpellAreaLabel(areaData) {\n const formatString = \"PF2E.Item.Spell.Area\";\n const shape = game.i18n.localize(`PF2E.Area.Shape.${areaData.type}`);\n // Handle special cases of very large areas\n const largeAreaLabel = {\n 1320: \"PF2E.Area.Size.Quarter\",\n 2640: \"PF2E.Area.Size.Half\",\n 5280: \"1\",\n }[areaData.value];\n if (largeAreaLabel) {\n const size = game.i18n.localize(largeAreaLabel);\n const unit = game.i18n.localize(\"PF2E.Area.Size.Mile\");\n return game.i18n.format(formatString, { shape, size, unit, units: unit });\n }\n const size = Number(areaData.value);\n const unit = game.i18n.localize(\"PF2E.Foot.Label\");\n const units = game.i18n.localize(\"PF2E.Foot.Plural\");\n return game.i18n.format(formatString, { shape, size, unit, units });\n}\nfunction sluggify(text, options) {\n return game.pf2e.system.sluggify(text, options);\n}\nexport { createSpellAreaLabel, ErrorPF2e, eventToRollMode, eventToRollParams, isControlDown, localizer, objectHasKey, ordinalString, parseInlineParams, setHasElement, signedInteger, sluggify, splitListString, traitSlugToObject, tupleHasValue, };\n", "import { ordinalString } from \".\";\nconst MAGIC_TRADITIONS = new Set([\"arcane\", \"divine\", \"occult\", \"primal\"]);\n/**\n * https://github.com/foundryvtt/pf2e/blob/5ebcd0359d1358bb00b76c47e7b84289239234b9/src/module/item/spellcasting-entry/helpers.ts#L43\n */\nfunction getSpellRankLabel(group) {\n return group === 0 || group === \"cantrips\"\n ? game.i18n.localize(\"PF2E.Actor.Creature.Spellcasting.Cantrips\")\n : game.i18n.format(\"PF2E.Item.Spell.Rank.Ordinal\", { rank: ordinalString(group) });\n}\nexport { getSpellRankLabel, MAGIC_TRADITIONS };\n", "import { ErrorPF2e, MAGIC_TRADITIONS, objectHasKey, setHasElement } from \".\";\nimport { R, SYSTEM } from \"..\";\nconst CANTRIP_DECK_UUID = SYSTEM.itemUuid(\"Compendium.pf2e.equipment-srd.Item.tLa4bewBhyqzi6Ow\", \"Compendium.pf2e-anachronism.equipment.Item.tLa4bewBhyqzi6Ow\");\n/**\n * slightly modified version of\n * https://github.com/reonZ/pf2e/blob/6e5481af7bb1e1b9d28d35fb3ad324511c5170d1/src/module/item/consumable/spell-consumables.ts#L21\n */\nasync function createConsumableFromSpell(spell, { type, heightenedLevel: rank = spell.baseRank, mystified = false, itemImg, itemName, temp, }) {\n const data = objectHasKey(CONFIG.PF2E.spellcastingItems, type) ? CONFIG.PF2E.spellcastingItems[type] : null;\n const uuids = data?.compendiumUuids ?? [];\n const uuid = uuids?.[rank] ?? (type === \"cantripDeck5\" ? CANTRIP_DECK_UUID() : null);\n const consumable = uuid ? await fromUuid(uuid) : null;\n if (!consumable?.isOfType(\"consumable\")) {\n throw ErrorPF2e(\"Failed to retrieve consumable item\");\n }\n const consumableSource = { ...consumable.toObject(), _id: null }; // Clear _id\n const traits = consumableSource.system.traits;\n traits.value = R.unique([...traits.value, ...spell.system.traits.value]);\n traits.rarity = spell.rarity;\n if (traits.value.includes(\"magical\") && traits.value.some((t) => setHasElement(MAGIC_TRADITIONS, t))) {\n traits.value.splice(traits.value.indexOf(\"magical\"), 1);\n }\n traits.value.sort();\n const nameTemplate = type === \"cantripDeck5\" ? \"PF2E.Item.Physical.FromSpell.CantripDeck5\" : data?.nameTemplate;\n consumableSource.name =\n nameTemplate && !itemName\n ? game.i18n.format(nameTemplate, { name: spell.name, level: rank })\n : `${itemName ?? type} of ${spell.name} (Rank ${rank})`;\n const description = consumableSource.system.description.value;\n consumableSource.system.description.value = (() => {\n const paragraphElement = document.createElement(\"p\");\n paragraphElement.append(spell.sourceId ? `@UUID[${spell.sourceId}]{${spell.name}}` : spell.description);\n const containerElement = document.createElement(\"div\");\n const hrElement = document.createElement(\"hr\");\n containerElement.append(paragraphElement, hrElement);\n hrElement.insertAdjacentHTML(\"afterend\", description);\n return containerElement.innerHTML;\n })();\n // Cantrip deck casts at level 1\n if (type !== \"cantripDeck5\") {\n consumableSource.system.spell = foundry.utils.mergeObject(spell._source, { _id: foundry.utils.randomID(), system: { location: { value: null, heightenedLevel: rank } } }, { inplace: false });\n }\n if (mystified) {\n consumableSource.system.identification.status = \"unidentified\";\n }\n if (typeof itemImg === \"string\") {\n consumableSource.img = itemImg;\n }\n if (temp) {\n consumableSource.system.temporary = true;\n }\n return consumableSource;\n}\nexport { createConsumableFromSpell };\n", "import { getSpellRankLabel, localizer } from \".\";\nimport { R } from \"..\";\nconst SPELLCASTING_CATEGORIES = [\"prepared\", \"spontaneous\", \"innate\", \"focus\", \"items\", \"ritual\"];\nfunction spellSlotGroupIdToNumber(groupId) {\n if (groupId === \"cantrips\")\n return 0;\n const numericValue = Number(groupId ?? NaN);\n return numericValue.between(0, 10) ? numericValue : null;\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/895e512a3346ae9e7eeafbc59fdbac1b68651afa/src/module/item/spellcasting-entry/collection.ts#L343\n */\nfunction warnInvalidDrop(warning, { spell, groupId }) {\n const localize = localizer(\"PF2E.Item.Spell.Warning\");\n if (warning === \"invalid-rank\" && typeof groupId === \"number\") {\n const spellRank = getSpellRankLabel(spell.baseRank);\n const targetRank = getSpellRankLabel(groupId);\n ui.notifications.warn(localize(\"InvalidRank\", { spell: spell.name, spellRank, targetRank }));\n }\n else if (warning === \"cantrip-mismatch\") {\n const locKey = spell.isCantrip ? \"CantripToRankedSlots\" : \"NonCantripToCantrips\";\n ui.notifications.warn(localize(locKey, { spell: spell.name }));\n }\n else if (warning === \"invalid-spell\") {\n const type = game.i18n.format(\"PF2E.TraitFocus\");\n ui.notifications.warn(localize(\"WrongSpellType\", { type }));\n }\n}\n/**\n * https://github.com/foundryvtt/pf2e/blob/49dc6d70c7e7bb26d8039c97361e638bdef6a3bd/src/module/item/spellcasting-entry/helpers.ts#L10\n */\nfunction createCounteractStatistic(ability) {\n const actor = ability.actor;\n // NPCs have neither a proficiency bonus nor specified attribute modifier: use their base attack roll modifier\n const baseModifier = actor.isOfType(\"npc\")\n ? ability.statistic.check.modifiers.find((m) => m.type === \"untyped\" && m.slug === \"base\")?.clone()\n : null;\n const StatisticCls = actor.skills.acrobatics.constructor;\n return new StatisticCls(actor, {\n slug: \"counteract\",\n label: \"PF2E.Item.Spell.Counteract.Label\",\n attribute: ability.statistic.attribute,\n rank: ability.statistic.rank || 1,\n check: { type: \"check\", modifiers: [baseModifier].filter(R.isTruthy) },\n });\n}\nexport { createCounteractStatistic, SPELLCASTING_CATEGORIES, spellSlotGroupIdToNumber, warnInvalidDrop };\n", "function getRuleElementCls() {\n return game.pf2e.RuleElement;\n}\nfunction ruleElementResolveField(options, context) {\n const BaseSpeedCls = game.pf2e.RuleElements.builtin.BaseSpeed;\n const ResolveFieldCls = BaseSpeedCls.defineSchema().value.constructor;\n return new ResolveFieldCls(options, context);\n}\nfunction getChoiceSetSelection(item, { option, flag } = {}) {\n const rules = item._source.system.rules;\n const rule = rules.find((rule) => {\n return rule.key === \"ChoiceSet\" && (!option || rule.rollOption === option) && (!flag || rule.flag === flag);\n });\n return rule?.selection;\n}\nexport { getChoiceSetSelection, getRuleElementCls, ruleElementResolveField };\n", "import { createHTMLElement, htmlClosest, htmlQuery, localize, MODULE, R, userIsGM, } from \".\";\nfunction settingPath(...path) {\n return MODULE.path(\"settings\", ...path);\n}\nfunction getSetting(key) {\n return game.settings.get(MODULE.id, key);\n}\nfunction setSetting(key, value) {\n return game.settings.set(MODULE.id, key, value);\n}\nfunction registerSetting(key, options) {\n const isGM = userIsGM();\n if ((options.gmOnly && !isGM) || (options.playerOnly && isGM))\n return;\n if (\"choices\" in options && Array.isArray(options.choices)) {\n options.choices = R.fromKeys(options.choices, (choice) => settingPath(key, \"choices\", choice));\n }\n options.name ??= settingPath(key, \"name\");\n options.hint ??= settingPath(key, \"hint\");\n options.config ??= true;\n if (options.scope === \"user\" && !options.broadcast && options.onChange) {\n const _onChange = options.onChange;\n options.onChange = (value, operation, userId) => {\n if (userId !== game.userId)\n return;\n _onChange(value, operation, userId);\n };\n }\n game.settings.register(MODULE.id, key, options);\n}\nfunction registerSettingMenu(key, options) {\n options.name ??= settingPath(\"menus\", key, \"name\");\n options.label ??= settingPath(\"menus\", key, \"label\");\n options.hint ??= settingPath(\"menus\", key, \"hint\");\n options.icon ??= \"fas fa-cogs\";\n game.settings.registerMenu(MODULE.id, key, options);\n}\nfunction registerModuleSettings(settings) {\n for (const [group, entries] of R.entries(settings)) {\n for (const setting of entries) {\n setting.key = group ? `${group}.${setting.key}` : setting.key;\n registerSetting(setting.key, setting);\n }\n }\n Hooks.on(\"renderSettingsConfig\", (_, html, options) => onRenderSettingsConfig(html, options, settings));\n}\nfunction getUserSetting(key, userId) {\n const moduleKey = MODULE.path(key);\n const storage = game.settings.storage.get(\"user\");\n return userId\n ? storage.find((setting) => setting.user === userId && setting.key === moduleKey)\n : storage.filter((setting) => !!setting.user && setting.key === moduleKey);\n}\n/**\n * modified version of\n * client/helpers/client-settings.mjs#266\n */\nasync function setUserSetting(user, key, value) {\n if (!game.ready) {\n throw new Error(\"You may not set a World-level Setting before the Game is ready.\");\n }\n const setting = assertSetting(MODULE.id, key);\n if (!setting.id)\n return;\n const userId = user instanceof User ? user.id : user;\n const json = cleanJSON(setting, value);\n const current = game.settings.storage.get(\"user\").getSetting(setting.id, userId);\n if (current?._id) {\n await current.update({ value: json });\n return current;\n }\n return getDocumentClass(\"Setting\").create({ key: setting.id, user: userId, value: json });\n}\n/**\n * client/helpers/client-settings.mjs#247\n */\nfunction assertSetting(namespace, key) {\n const id = `${namespace}.${key}`;\n if (!namespace || !key) {\n throw new Error(`You must specify both namespace and key portions of the setting, you provided \"${id}\"`);\n }\n const setting = game.settings.settings.get(id);\n if (!setting)\n throw new Error(`\"${id}\" is not a registered game setting`);\n return setting;\n}\n/**\n * client/helpers/client-settings.mjs#315\n */\nfunction cleanJSON(setting, value) {\n // Assign using DataField\n if (setting.type instanceof foundry.data.fields.DataField) {\n value = setting.type.clean(value);\n const err = setting.type.validate(value, { fallback: false });\n if (err instanceof foundry.data.validation.DataModelValidationFailure)\n throw err.asError();\n }\n // Assign using DataModel\n if (foundry.utils.isSubclass(setting.type, foundry.abstract.DataModel)) {\n value = setting.type.fromSource(value || {}, { strict: true });\n }\n // Plain default value\n else if (value === undefined)\n value = setting.default;\n return JSON.stringify(value);\n}\nfunction onRenderSettingsConfig(html, options, settings) {\n const id = MODULE.id;\n const category = options.categories[id];\n if (!category)\n return;\n const tab = htmlQuery(html, `[data-application-part=\"main\"] [data-group=\"categories\"][data-tab=\"${id}\"][data-category=\"${id}\"]`);\n if (!tab)\n return;\n const gmOnlyLabel = localize.shared(\"gmOnly\");\n const playerOnlyLabel = localize.shared(\"playerOnly\");\n const reloadLabel = localize.shared(\"reloadRequired\");\n const gmOnly = ``;\n const player = ``;\n const reload = ``;\n for (const entry of category.entries) {\n if (entry.menu)\n continue;\n const name = entry.field.name;\n const extras = [];\n const setting = game.settings.settings.get(name);\n if (!setting)\n continue;\n if (setting.gmOnly) {\n extras.push(gmOnly);\n }\n if (setting.playerOnly) {\n extras.push(player);\n }\n if (setting.requiresReload) {\n extras.push(reload);\n }\n if (!extras.length)\n continue;\n const input = htmlQuery(tab, `[name=\"${name}\"]`);\n const group = htmlClosest(input, \".form-group\");\n const label = htmlQuery(group, \"label\");\n const span = createHTMLElement(\"span\", {\n content: ` ${extras.join(\", \")}`,\n });\n label?.append(span);\n }\n const settingKeys = R.keys(settings);\n for (let i = 0; i < settingKeys.length; i++) {\n const key = settingKeys[i];\n if (!key)\n continue;\n const input = htmlQuery(tab, `[name^=\"${MODULE.id}.${key}\"]`);\n const group = htmlClosest(input, \".form-group\");\n const title = createHTMLElement(\"h4\", {\n content: localize(\"settings\", key, \"title\"),\n });\n title.style.marginBlock = i === 0 ? \"0\" : \"0.5em 0em\";\n group?.before(title);\n }\n}\nexport { getSetting, getUserSetting, registerModuleSettings, registerSetting, registerSettingMenu, setSetting, settingPath, setUserSetting, };\n", "import { R } from \".\";\nlet TRANSLATED_SKILL;\nlet TRANSLATED_SKILL_LOWER;\nfunction getTranslatedSkills(lowercase = false) {\n TRANSLATED_SKILL ??= R.mapValues(CONFIG.PF2E.skills, ({ label }) => game.i18n.localize(label));\n if (lowercase) {\n TRANSLATED_SKILL_LOWER ??= R.mapValues(TRANSLATED_SKILL, (value) => value.toLocaleLowerCase(game.i18n.lang));\n return foundry.utils.deepClone(TRANSLATED_SKILL_LOWER);\n }\n return foundry.utils.deepClone(TRANSLATED_SKILL);\n}\nfunction getSkillLabel(skill, localize = true) {\n const label = CONFIG.PF2E.skills[skill].label;\n return localize ? game.i18n.localize(label) : label;\n}\nexport { getSkillLabel, getTranslatedSkills };\n", "const ROMAN_RANKS = [\"\", \"\u2160\", \"\u2161\", \"\u2162\", \"\u2163\", \"\u2164\", \"\u2165\", \"\u2166\", \"\u2167\", \"\u2168\", \"\u2169\"];\nfunction getSpellCollectionCls(actor) {\n return actor.spellcasting.get(\"rituals\").spells.constructor;\n}\nfunction getActorMaxRank(actor) {\n return Math.max(1, Math.ceil(actor.level / 2));\n}\nfunction createSpellcastingSource({ name, category, attribute, flags, proficiencyRank, proficiencySlug, showSlotlessRanks, sort, tradition, }) {\n return {\n type: \"spellcastingEntry\",\n name,\n sort: sort ?? 0,\n system: {\n ability: {\n value: (!proficiencySlug && attribute) || \"\",\n },\n prepared: {\n value: category ?? \"innate\",\n },\n showSlotlessLevels: {\n value: showSlotlessRanks ?? false,\n },\n proficiency: {\n value: proficiencyRank ?? 1,\n slug: proficiencySlug ?? \"\",\n },\n tradition: {\n value: tradition ?? \"arcane\",\n },\n },\n flags: flags ?? {},\n };\n}\nexport { getSpellCollectionCls, createSpellcastingSource, getActorMaxRank, ROMAN_RANKS };\n", "import { DateTime } from \"luxon\";\nimport { R } from \".\";\nvar TimeChangeMode;\n(function (TimeChangeMode) {\n TimeChangeMode[TimeChangeMode[\"ADVANCE\"] = 0] = \"ADVANCE\";\n TimeChangeMode[TimeChangeMode[\"RETRACT\"] = 1] = \"RETRACT\";\n})(TimeChangeMode || (TimeChangeMode = {}));\n/**\n * https://github.com/foundryvtt/pf2e/blob/e215ebfbb287190d313fe0441e0362439766786d/src/module/apps/world-clock/time-of-day.ts#L8\n */\nclass TimeOfDay {\n hour;\n minute;\n second;\n constructor(hour, minute, second) {\n this.hour = hour;\n this.minute = minute;\n this.second = second;\n }\n /** Point in morning twilight where dim light begins */\n static DAWN = new TimeOfDay(4, 58, 54);\n static NOON = new TimeOfDay(12, 0, 0);\n /** Point in evening twilight where dim light begins */\n static DUSK = new TimeOfDay(18, 34, 6);\n static MIDNIGHT = new TimeOfDay(0, 0, 0);\n /**\n * Returns positive or negative number of seconds to add to current\n * game time advance function https://foundryvtt.com/api/GameTime.hbs#advance\n * @param worldTime the current time as luxon DateTime\n * @param mode whether to go back to that point in time or to advance\n */\n diffSeconds(worldTime, mode) {\n const targetTime = worldTime.set(this);\n const targetDayDifference = TimeOfDay.diffDays(worldTime, targetTime, mode);\n const targetDay = worldTime.plus({ day: targetDayDifference });\n return targetDay.set(this).diff(worldTime, \"seconds\").seconds;\n }\n static diffDays(currentTime, targetTime, mode) {\n // if we have the same point in time, we always want to either skip or rewind a full day\n if (currentTime >= targetTime && mode === TimeChangeMode.ADVANCE) {\n // case: now: 12:01 and advance to 12:00 -> we need to add 1 day to calculate the difference\n return 1;\n }\n else if (currentTime <= targetTime && mode === TimeChangeMode.RETRACT) {\n // case: now: 12:00 and retract to 12:01 -> we need to subtract 1 day to calculate the difference\n return -1;\n }\n else {\n return 0;\n }\n }\n}\nfunction createTimeout(callback, options) {\n let timeoutId = null;\n const usedOptions = R.isNumber(options) ? { defaultDelay: options } : options;\n const minDelay = Math.max(usedOptions?.minDelay ?? 0, 0);\n const defaultDelay = Math.max(usedOptions?.defaultDelay ?? 1, minDelay);\n return {\n start(...args) {\n if (timeoutId !== null) {\n this.stop();\n }\n if (defaultDelay < 1) {\n callback(...args);\n }\n else {\n timeoutId = setTimeout(callback, defaultDelay, ...args);\n }\n },\n startWithDelay(delay, ...args) {\n if (timeoutId !== null) {\n this.stop();\n }\n const usedDelay = Math.max(delay, minDelay);\n if (usedDelay < 1) {\n callback(...args);\n }\n else {\n timeoutId = setTimeout(callback, usedDelay, ...args);\n }\n },\n stop() {\n if (timeoutId === null)\n return;\n clearTimeout(timeoutId);\n timeoutId = null;\n },\n };\n}\n/**\n * slightly modified (also fixed the typo)\n * https://github.com/foundryvtt/pf2e/blob/e215ebfbb287190d313fe0441e0362439766786d/src/module/apps/world-clock/app.ts#L237\n */\nfunction calculateTimeIncrement(interval, intervalMode) {\n const worldTime = game.pf2e.worldClock.worldTime;\n const mode = intervalMode === \"+\" ? TimeChangeMode.ADVANCE : TimeChangeMode.RETRACT;\n switch (interval) {\n case \"dawn\":\n return TimeOfDay.DAWN.diffSeconds(worldTime, mode);\n case \"noon\":\n return TimeOfDay.NOON.diffSeconds(worldTime, mode);\n case \"dusk\":\n return TimeOfDay.DUSK.diffSeconds(worldTime, mode);\n case \"midnight\":\n return TimeOfDay.MIDNIGHT.diffSeconds(worldTime, mode);\n default: {\n const sign = mode === TimeChangeMode.ADVANCE ? 1 : -1;\n return Number(interval) * sign;\n }\n }\n}\nfunction getWorldTime() {\n return game.settings.get(\"core\", \"time\");\n}\nfunction getTimeWithSeconds(time) {\n return game.pf2e.worldClock.timeConvention === 24\n ? time.toFormat(\"HH:mm:ss\")\n : time.toLocaleString(DateTime.TIME_WITH_SECONDS);\n}\nfunction waitTimeout(time = 1) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n}\nasync function advanceTime(interval, direction) {\n const sign = direction === \"+\" ? 1 : -1;\n const increment = Number(interval) * sign;\n if (increment !== 0) {\n return game.time.advance(increment);\n }\n}\nfunction getShortTime(time) {\n return game.pf2e.worldClock.timeConvention === 24\n ? time.toFormat(\"HH:mm\")\n : time.toLocaleString(DateTime.TIME_SIMPLE);\n}\nfunction getShortDateTime() {\n const worldClock = game.pf2e.worldClock;\n const worldTime = worldClock.worldTime;\n const time = getShortTime(worldTime);\n const date = worldClock.dateTheme === \"CE\"\n ? worldTime.toLocaleString(DateTime.DATE_SHORT)\n : DateTime.local(worldClock[\"year\"], worldTime.month, worldTime.day).toLocaleString(DateTime.DATE_SHORT);\n return {\n worldClock,\n worldTime,\n time,\n date,\n };\n}\nfunction timestampToLocalTime(time) {\n return new Date(time).toLocaleString();\n}\nexport { advanceTime, calculateTimeIncrement, createTimeout, getShortDateTime, getShortTime, getTimeWithSeconds, getWorldTime, timestampToLocalTime, waitTimeout, };\n", "import { R } from \".\";\nfunction getCurrentUser() {\n return game.user ?? game.data.users.find((x) => x._id === game.userId);\n}\nfunction getSelectedActor(fn = (actor) => true) {\n const selected = R.only(canvas.tokens.controlled)?.actor;\n if (selected && fn(selected)) {\n return selected;\n }\n const assigned = game.user.character;\n return assigned && fn(assigned) ? assigned : null;\n}\nfunction userIsGM(user = getCurrentUser()) {\n return user && user.role >= CONST.USER_ROLES.ASSISTANT;\n}\nfunction isPrimaryUpdater(actor) {\n return actor.primaryUpdater === game.user;\n}\nfunction primaryPlayerOwner(actor) {\n // even though we want a player, assigned users take priority\n const assigned = game.users.getDesignatedUser((user) => user.active && user.character === actor);\n return (assigned ??\n game.users.getDesignatedUser((user) => user.active && !user.isGM && actor.testUserPermission(user, \"OWNER\")));\n}\nfunction isPrimaryOwner(actor, user = game.user) {\n return user.isGM || primaryPlayerOwner(actor) === user;\n}\nfunction canObserveActor(actor, withParty = true) {\n if (!actor)\n return false;\n const user = game.user;\n if (actor.testUserPermission(user, \"OBSERVER\"))\n return true;\n return (!!withParty &&\n game.pf2e.settings.metagame.partyStats &&\n actor.parties?.some((party) => party.testUserPermission(user, \"LIMITED\")));\n}\nexport { canObserveActor, getCurrentUser, getSelectedActor, isPrimaryOwner, isPrimaryUpdater, primaryPlayerOwner, userIsGM, };\n", "import { R } from \".\";\nfunction activateHooksAndWrappers(entries) {\n for (const entry of entries) {\n entry.activate();\n }\n}\nfunction disableHooksAndWrappers(entries) {\n for (const entry of entries) {\n entry.disable();\n }\n}\nfunction toggleHooksAndWrappers(entries, enabled) {\n for (const entry of entries) {\n entry.toggle(enabled);\n }\n}\nfunction localeCompare(a, b) {\n return a.localeCompare(b, game.i18n.lang);\n}\nfunction sortByLocaleCompare(list, key) {\n list.sort((a, b) => localeCompare(a[key], b[key]));\n}\nfunction recordToSelectOptions(record) {\n return R.pipe(record, R.entries(), R.map(([value, label]) => {\n return { value, label };\n }));\n}\nfunction getDragEventData(event) {\n return foundry.applications.ux.TextEditor.implementation.getDragEventData(event);\n}\nfunction stringNumber(value) {\n return String(value);\n}\nfunction stringBoolean(value) {\n return String(value);\n}\nfunction createDuplicateMap(raw) {\n const duplicated = raw.flatMap(([_keys, entry]) => {\n const keys = R.isArray(_keys) ? _keys : [_keys];\n return keys.map((key) => [key, entry]);\n });\n return new Map(duplicated);\n}\nfunction createTargetDocuments(source) {\n const actor = source.actor ?? source.token?.actor;\n if (!actor)\n return;\n const token = source.token instanceof TokenDocument ? source.token : source.token?.document;\n return { actor, token };\n}\nexport { activateHooksAndWrappers, createDuplicateMap, createTargetDocuments, disableHooksAndWrappers, getDragEventData, localeCompare, recordToSelectOptions, sortByLocaleCompare, stringBoolean, stringNumber, toggleHooksAndWrappers, };\n", "import {\n CharacterPF2e,\n FeatOrFeatureCategory,\n FeatPF2e,\n FeatSource,\n ItemPF2e,\n ItemSourcePF2e,\n ItemUUID,\n localize,\n MagicTradition,\n Rarity,\n RuleElementSource,\n SkillSlug,\n SpellPF2e,\n} from \"foundry-helpers\";\n\nfunction createDaily<\n TItemSlug extends string = string,\n TCustom extends DailyCustom = {},\n TRowSlug extends string = string,\n TItems extends DailyItem[] = DailyItem[],\n TRows extends DailyRow[] = DailyRow[],\n>(config: Daily): Daily {\n return config as unknown as Daily;\n}\n\nfunction rowIsOfType(row: DailyRow, ...types: T[]): row is DailyRows[T] {\n return types.some((type) => row.type === type);\n}\n\nasync function getDailyLabel(\n daily: Daily,\n actor: CharacterPF2e,\n items: Record,\n): Promise {\n return typeof daily.label === \"function\"\n ? daily.label(actor, items)\n : typeof daily.label === \"string\"\n ? game.i18n.localize(daily.label)\n : (localize.ifExist(\"builtin\", daily.key) ?? daily.key);\n}\n\ntype Daily<\n TItemSlug extends string = string,\n TCustom extends DailyCustom = DailyCustom,\n TRowSlug extends string = string,\n TItems extends DailyItem[] = DailyItem[],\n TRows extends DailyRow[] | ReadonlyArray = DailyRow[],\n> = {\n key: string;\n prepare?: (actor: CharacterPF2e, items: ExtractItems) => Promisable;\n label?: string | ((actor: CharacterPF2e, items: ExtractItems) => Promisable);\n rows: (actor: CharacterPF2e, items: ExtractItems, custom: TCustom) => Promisable;\n process: (options: DailyProcessOptions) => Promisable;\n afterItemAdded?: (\n options: DailyAfterItemAddedOptions,\n ) => Promisable;\n rest?: (options: DailyRestOptions) => Promisable;\n config?: (actor: CharacterPF2e) => Promisable;\n} & RequireAtLeastOne<\n {\n condition?: (actor: CharacterPF2e) => Promisable;\n items?: TItems;\n },\n \"condition\" | \"items\"\n>;\n\ntype ExtractItems[]> = TItems[number] extends {\n slug: infer S extends TItemSlug;\n}\n ? {\n [k in S]: Extract extends { required: true } ? ItemPF2e : ItemPF2e | undefined;\n }\n : never;\n\ntype ExtractRows<\n TRowSlug extends string,\n TRows extends DailyRow[] | ReadonlyArray,\n> = TRows[number] extends {\n slug: infer S extends TRowSlug;\n}\n ? {\n [k in S]: Extract extends { type: \"combo\" }\n ? Extract extends { condition: boolean }\n ? DailyRowComboData | undefined\n : DailyRowComboData\n : Extract extends { type: \"drop\" }\n ? Extract extends { condition: boolean }\n ? DailyRowDropData | undefined\n : DailyRowDropData\n : Extract extends { type: \"select\" | \"input\" | \"random\" }\n ? Extract extends { condition: boolean }\n ? string | undefined\n : string\n : Extract extends { type: \"notify\" }\n ? Extract extends { condition: boolean }\n ? true | undefined\n : true\n : never;\n }\n : never;\n\ntype DailyAfterItemAddedOptions<\n TItemSlug extends string = string,\n TCustom extends DailyCustom = DailyCustom,\n TRowSlug extends string = string,\n TItems extends DailyItem[] = DailyItem[],\n TRows extends DailyRow[] | ReadonlyArray = DailyRow[],\n TRowMap = ExtractRows,\n> = Omit<\n DailyProcessOptions,\n \"addItem\" | \"addFeat\" | \"addRule\"\n> & {\n addedItems: ItemPF2e[];\n};\n\ntype DailyProcessOptions<\n TItemSlug extends string = string,\n TCustom extends DailyCustom = DailyCustom,\n TRowSlug extends string = string,\n TItems extends DailyItem[] = DailyItem[],\n TRows extends DailyRow[] | ReadonlyArray = DailyRow[],\n TRowMap = ExtractRows,\n> = {\n actor: CharacterPF2e;\n items: ExtractItems;\n rows: TRowMap;\n custom: TCustom;\n messages: {\n add: ((group: DailyMessageGroupType, message: DailyMessageOptions) => void) &\n ((group: string, message: DailyMessageOptions) => void);\n addGroup: (name: string, label?: string, order?: number) => void;\n addRaw: (message: string, order?: number) => void;\n };\n addItem: (source: PreCreate | ItemSourcePF2e, temporary?: boolean) => void;\n addFeat: (source: PreCreate | FeatSource, parent?: ItemPF2e, temporary?: boolean) => void;\n addRule: (item: ItemPF2e, source: DailyRuleElement) => void;\n replaceFeat: (original: FeatPF2e, source: PreCreate | FeatSource) => void;\n updateItem: (data: EmbeddedDocumentUpdateData) => void;\n removeRule: (item: ItemPF2e, signature: (rule: DailyRuleElement) => boolean) => void;\n flagItem: (item: ItemPF2e, label?: string) => void;\n deleteItem: (item: ItemPF2e, temporary?: boolean) => void;\n setExtraFlags: (data: Record) => void;\n};\n\ntype DailyRestOptions = {\n actor: CharacterPF2e;\n updateItem: (data: EmbeddedDocumentUpdateData) => void;\n removeItem: (id: string) => void;\n};\n\ntype DailyMessageGroupType = \"languages\" | \"skills\" | \"resistances\" | \"feats\" | \"spells\" | \"scrolls\";\n\ntype DailyMessageOptions =\n | { uuid: string | ItemPF2e; label?: string; selected?: string; random?: boolean }\n | { sourceId: string; label?: string; selected?: string; random?: boolean }\n | { label: string; selected?: string; random?: boolean };\n\ntype DailyRuleElement = RuleElementSource & { [k: string]: any };\n\ntype DailyRowType = \"select\" | \"combo\" | \"random\" | \"alert\" | \"input\" | \"notify\" | \"drop\";\n\ntype DailyRow = DailyRows[DailyRowType];\n\ntype DailyRows = {\n select: DailyRowSelect;\n combo: DailyRowCombo;\n random: DailyRowRandom;\n alert: DailyRowAlert;\n input: DailyRowInput;\n notify: DailyRowNotify;\n drop: DailyRowDrop;\n};\n\ntype DailyCustom = Record;\n\ntype DailyItem = {\n slug: TItemSlug;\n uuid: ItemUUID | (() => ItemUUID);\n required?: boolean;\n condition?: (actor: CharacterPF2e, item: ItemPF2e) => Promisable;\n};\n\ninterface DailyRowBase {\n type: TType;\n slug: TRowSlug;\n label?: string;\n save?: boolean;\n empty?: boolean;\n order?: number;\n condition?: boolean;\n}\n\ntype DailyRowSelectOptionGroup = { group: string };\n\ntype DailyRowSelectOptionValue = {\n value: string;\n label: string;\n unique?: string;\n skipUnique?: boolean;\n};\n\ntype DailyRowSelectOption = DailyRowSelectOptionGroup | DailyRowSelectOptionValue;\n\ntype DailyRowSelect = DailyRowBase & {\n options: DailyRowSelectOption[];\n unique?: string;\n};\n\ntype DailyRowComboData = {\n selected: string;\n input: boolean;\n};\n\ntype DailyRowCombo = DailyRowBase & {\n options: DailyRowSelectOption[];\n unique?: string;\n};\n\ntype DailyRowRandom = DailyRowBase & {\n options: DailyRowSelectOptionValue[];\n};\n\ntype DailyRowAlert = DailyRowBase & {\n message: string;\n resolve: () => Promisable;\n};\n\ntype DailyRowInput = DailyRowBase;\n\ntype DailyRowNotify = DailyRowBase & {\n message: string;\n color?: boolean | string;\n};\n\ntype DailyRowDropData = {\n uuid: string;\n name: string;\n};\n\ninterface DailyRowDropBase<\n TRowSlug extends string,\n TType extends DailyRowDropType,\n TSearch extends DailyRowDropSearch,\n> extends DailyRowBase {\n note?: string;\n onDrop?: (item: TType extends \"feat\" ? FeatPF2e : SpellPF2e, actor: CharacterPF2e) => Promisable;\n filter: {\n type: TType;\n search: TSearch;\n };\n value?: {\n name: string;\n uuid: string;\n };\n}\n\ntype DailyRowDropFeat = DailyRowDropBase;\n\ntype DailyRowDropSpell = DailyRowDropBase;\n\ntype DailyRowDrops = {\n feat: DailyRowDropFeat;\n spell: DailyRowDropSpell;\n};\n\ntype DailyRowDrop = DailyRowDrops[DailyRowDropType];\n\ninterface DailyRowDropSearchBase {\n category?: TCategory[];\n rarity?: Rarity[];\n source?: string[];\n traits?:\n | (string | { value: string; not?: boolean })[]\n | { selected: (string | { value: string; not?: boolean })[]; conjunction?: \"or\" | \"and\" };\n}\n\ntype DailyRowDropFeatSearch = DailyRowDropSearchBase & {\n level?: number | { min?: number; max?: number } | \"level\" | \"half\";\n skills?: SkillSlug[];\n};\n\ntype DailyRowSpellSearch = DailyRowDropSearchBase & {\n rank?: `${number}`[] | \"level\" | \"half\" | `${number}` | number | number[];\n traditions?: MagicTradition[];\n};\n\ntype DailyRowDropSearch = DailyRowDropFeatSearch | DailyRowSpellSearch;\n\ntype DailyRowDropType = \"feat\" | \"spell\";\n\ntype SpellCategory = \"cantrip\" | \"focus\" | \"ritual\" | \"spell\";\n\ntype DailyConfigRow = DailyConfigRowRange | DailyConfigCheckbox;\n\ntype DailyConfigRowType = \"range\" | \"checkbox\";\n\ntype DailyConfigRowValue = boolean | number;\n\ntype DailyConfigRowBase = {\n type: TInput;\n name: string;\n value?: TValue;\n label?: string;\n dispatchUpdateEvent?: boolean;\n};\n\ntype DailyConfigCheckbox = DailyConfigRowBase<\"checkbox\", boolean>;\n\ntype DailyConfigRowRange = DailyConfigRowBase<\"range\", number> & {\n min?: number;\n max?: number;\n step?: number;\n saveMaxValue?: boolean;\n};\n\ntype DailyRowData = DailyRowComboData | DailyRowDropData | string | true;\n\nexport { createDaily, getDailyLabel, rowIsOfType };\nexport type {\n Daily,\n DailyConfigCheckbox,\n DailyConfigRow,\n DailyConfigRowValue,\n DailyCustom,\n DailyItem,\n DailyMessageOptions,\n DailyProcessOptions,\n DailyRow,\n DailyRowAlert,\n DailyRowComboData,\n DailyRowData,\n DailyRowDrop,\n DailyRowDropData,\n DailyRowDropFeat,\n DailyRowDropSpell,\n DailyRowDropType,\n DailyRowSelect,\n DailyRowSelectOption,\n DailyRowSelectOptionValue,\n DailyRowType,\n DailyRuleElement,\n};\n", "import {\n ActorPF2e,\n CharacterPF2e,\n CreateSpellcastingSource,\n createSpellcastingSource,\n CreaturePF2e,\n isInstanceOf,\n ItemSystemData,\n localize,\n MODULE,\n NPCPF2e,\n OneToTen,\n R,\n SlotKey,\n SpellcastingCategory,\n SpellcastingEntry,\n SpellcastingEntryPF2e,\n SpellcastingEntrySystemSource,\n SpellcastingSheetData,\n SpellCollection,\n SpellPF2e,\n SpellSlotGroupId,\n spellSlotGroupIdToNumber,\n ValueAndMax,\n warnInvalidDrop,\n ZeroToTen,\n} from \"foundry-helpers\";\nimport { getSpellRankLabel } from \"foundry-helpers/dist\";\n\nfunction createSpellcastingWithHighestStatisticSource(\n actor: NPCPF2e | CharacterPF2e,\n { name, category, flags, showSlotlessRanks, sort, withClassDcs }: CreateSpellcastingSourceWithHighestStatistic,\n) {\n const highestEntry = getHighestSpellcastingStatistic(actor);\n const highestSynthetic = getHighestSyntheticStatistic(actor, withClassDcs);\n\n const [tradition, statistic] =\n highestEntry && (!highestSynthetic || highestEntry.statistic.mod >= highestSynthetic.mod)\n ? [highestEntry.tradition, highestEntry.statistic]\n : highestSynthetic\n ? [null, highestSynthetic]\n : [null, null];\n\n if (!statistic) return;\n\n return createSpellcastingSource({\n name,\n sort,\n flags,\n category,\n showSlotlessRanks,\n tradition: tradition ?? \"arcane\",\n attribute: statistic.attribute,\n proficiencyRank: statistic.rank ?? 1,\n proficiencySlug: statistic === highestSynthetic ? statistic.slug : undefined,\n });\n}\n\nfunction getSpellcastingMaxRank(entry: SpellcastingEntryPF2e, rankLimit: OneToTen = 10) {\n const slots = entry.system.slots;\n const limit = Math.clamp(rankLimit, 1, 10) as OneToTen;\n\n let maxRank = 0;\n\n for (let rank = 1; rank <= limit; rank++) {\n const slotKey = `slot${rank}` as SlotKey;\n const slot = slots[slotKey];\n\n if (slot.max > 0) {\n maxRank = rank;\n }\n }\n\n return maxRank as ZeroToTen;\n}\n\nfunction getHighestSyntheticStatistic(actor: NPCPF2e | CharacterPF2e, withClassDcs = true) {\n const isCharacter = actor.isOfType(\"character\");\n const synthetics = Array.from(actor.synthetics.statistics.values());\n const statistics = withClassDcs && isCharacter ? [...synthetics, ...Object.values(actor.classDCs)] : synthetics;\n\n if (!statistics.length) return;\n\n const classStatistic = isCharacter ? actor.classDC : null;\n const groupedStatistics = R.groupBy(statistics, R.prop(\"mod\"));\n const highestMod = R.pipe(R.keys(groupedStatistics), R.firstBy([R.identity(), \"desc\"])) as unknown as number;\n\n if (classStatistic && highestMod && classStatistic.mod === highestMod) {\n return classStatistic;\n }\n\n return groupedStatistics[highestMod][0];\n}\n\nfunction getHighestSpellcastingStatistic(actor: NPCPF2e | CharacterPF2e) {\n const entries = (actor as CreaturePF2e).spellcasting?.spellcastingFeatures;\n if (!entries?.length) return;\n\n const classAttribute = actor.isOfType(\"character\") ? actor.classDC?.attribute : null;\n const groupedEntries = R.groupBy(entries, (entry) => entry.statistic.mod);\n\n const highestMod = R.pipe(groupedEntries, R.keys(), R.sortBy([(x) => Number(x), \"desc\"]), R.first());\n\n const highestResults = groupedEntries[Number(highestMod)].map((entry) => ({\n tradition: entry.tradition,\n statistic: entry.statistic,\n }));\n\n if (highestResults.length === 1 || !classAttribute) {\n return highestResults[0];\n }\n\n return highestResults.find((entry) => entry.statistic.attribute === classAttribute) || highestResults[0];\n}\n\nfunction spellcastingEntryPrepareSiblingData(\n this: SpellcastingEntryPF2eWithCharges,\n wrapped: libWrapper.RegisterCallback,\n): void {\n const actor = this.actor;\n\n if (!actor.isOfType(\"creature\") || !actor.spellcasting || this.system.prepared.value !== \"charges\") {\n wrapped();\n return;\n }\n\n try {\n const SpellCollectionCls = actor.spellcasting.get(\"rituals\")!.spells!.constructor as unknown as {\n prototype: SpellCollection;\n new (entry: SpellcastingEntryPF2eWithCharges, name?: string): SpellCollection;\n };\n\n class ChargesSpellCollection extends SpellCollectionCls {\n async addSpell(\n spell: SpellPF2e,\n options?: { groupId?: Maybe } | undefined,\n ): Promise | null> {\n const actor = this.actor;\n const groupId = options?.groupId;\n const heightenedRank = spellSlotGroupIdToNumber(groupId) ?? spell.rank;\n\n const spellcastingEntryId = spell.system.location.value;\n if (spellcastingEntryId === this.id && spell.rank === heightenedRank) {\n return null;\n }\n\n if (spell.isFocusSpell) {\n warnInvalidDrop(\"invalid-spell\", { spell });\n return null;\n }\n\n if (spell.baseRank > heightenedRank && this.id === spell.system.location?.value) {\n warnInvalidDrop(\"invalid-rank\", { spell, groupId });\n return null;\n }\n\n const heightenedUpdate =\n heightenedRank >= spell.baseRank ? { \"system.location.heightenedLevel\": heightenedRank } : {};\n\n if (spell.actor === actor) {\n return spell.update({\n \"system.location.value\": this.id,\n ...heightenedUpdate,\n }) as Promise | null>;\n } else {\n const source = spell\n .clone({ sort: 0, \"system.location.value\": this.id, ...heightenedUpdate })\n .toObject();\n const created = (await actor.createEmbeddedDocuments(\"Item\", [source])).shift();\n\n return isInstanceOf>(created, \"SpellPF2e\") ? created : null;\n }\n }\n\n async getSpellData(options?: { prepList?: boolean }) {\n const spellData = await super.getSpellData(options);\n const charges = this.entry.system?.slots.slot1.value || 0;\n\n for (const group of spellData.groups) {\n if (group.id === \"cantrips\" || charges >= group.id) continue;\n\n for (const active of group.active) {\n if (!active) continue;\n active.expended = true;\n }\n }\n\n return spellData;\n }\n }\n\n this.spells = new ChargesSpellCollection(this);\n\n const spells = actor.itemTypes.spell.filter((spell) => spell.system.location.value === this.id);\n\n for (const spell of spells) {\n this.spells.set(spell.id, spell);\n }\n\n actor.spellcasting.collections.set(this.spells.id, this.spells);\n } catch (error: any) {\n MODULE.error(\"SpPellcastingEntryPF2e#prepareSiblingData\", error);\n }\n}\n\nasync function spellcastingEntryConsume(\n this: SpellcastingEntryPF2eWithCharges>,\n wrapped: libWrapper.RegisterCallback,\n spell: SpellPF2e,\n rank: ZeroToTen,\n slotIndex?: number,\n): Promise {\n const actor = this.actor;\n\n if (!actor.isOfType(\"npc\", \"character\") || !actor.spellcasting || this.system.prepared.value !== \"charges\") {\n return wrapped(spell, rank, slotIndex);\n }\n\n try {\n const charges = this.system.slots.slot1.value;\n\n if (charges < rank) {\n localize.warning(\"charges.error.notEnough\", {\n spell: spell.name,\n rank: getSpellRankLabel(rank),\n });\n return false;\n }\n\n await this.update({ \"system.slots.slot1.value\": charges - rank });\n return true;\n } catch (error: any) {\n MODULE.error(\"SpPellcastingEntryPF2e#consume\", error);\n return false;\n }\n}\n\nasync function spellcastingEntryGetSheetData(\n this: SpellcastingEntryPF2eWithCharges>,\n wrapped: libWrapper.RegisterCallback,\n options: { spells?: SpellCollection } = {},\n): Promise {\n const actor = this.actor;\n const data: ChargesSpellcastingSheetData = await wrapped(options);\n\n if (!actor.isOfType(\"npc\", \"character\") || !actor.spellcasting || this.system.prepared.value !== \"charges\") {\n return data;\n }\n\n data.isCharges = true;\n data.isStaff = false;\n data.uses = {\n value: this.system.slots.slot1.value,\n max: this.system.slots.slot1.max,\n };\n\n return data;\n}\n\ntype WithCharges = {\n category: SpellcastingCategory | \"charges\";\n isStaff?: boolean;\n uses?: ValueAndMax;\n};\n\ntype SpellcastingEntryPF2eWithCharges = Omit<\n SpellcastingEntryPF2e,\n \"system\" | \"category\"\n> &\n WithCharges & {\n system: Omit &\n Omit & {\n prepared: {\n value: SpellcastingCategory | \"charges\";\n flexible: boolean;\n validItems: \"scroll\" | null;\n };\n };\n };\n\ntype CreateSpellcastingSourceWithHighestStatistic = Omit<\n CreateSpellcastingSource,\n \"attribute\" | \"proficiencyRank\" | \"proficiencySlug\" | \"tradition\"\n> & {\n withClassDcs?: boolean;\n};\n\ntype SpellcastingSheetDataWithCharges = Omit & WithCharges;\n\ntype ChargesSpellcastingSheetData = SpellcastingSheetDataWithCharges & {\n isStaff: boolean;\n isCharges: boolean;\n uses: { value: number; max: number };\n};\n\ntype SpellcastingEntryWithCharges = Omit<\n SpellcastingEntry,\n \"category\" | \"getSheetData\"\n> &\n WithCharges & {\n getSheetData(options?: {\n spells?: SpellCollection;\n prepList?: boolean;\n }): Promise;\n };\n\nexport {\n createSpellcastingWithHighestStatisticSource,\n getHighestSpellcastingStatistic,\n getSpellcastingMaxRank,\n spellcastingEntryConsume,\n spellcastingEntryGetSheetData,\n spellcastingEntryPrepareSiblingData,\n};\nexport type { ChargesSpellcastingSheetData, SpellcastingEntryPF2eWithCharges, SpellcastingEntryWithCharges };\n", "import {\n ActorPF2e,\n ArmorPF2e,\n CharacterPF2e,\n ConsumableSource,\n createChatLink,\n CreatedSpellcastingEntrySource,\n createSpellcastingSource,\n CreateSpellcastingSource,\n CreaturePF2e,\n DamageType,\n FeatOrFeatureCategory,\n FeatSource,\n FeatTrait,\n findItemWithSourceId,\n getActorWeapons,\n getChoiceSetSelection,\n getItemSourceFromUuid,\n getItemSourceId,\n getSetting,\n getSkillLabel,\n getSpellRankLabel,\n ImageFilePath,\n ItemInstances,\n ItemPF2e,\n ItemSourcePF2e,\n ItemType,\n ItemUUID,\n Language,\n LoreSource,\n MagicTradition,\n OneToFour,\n OneToTen,\n PhysicalItemPF2e,\n PreciousMaterialType,\n R,\n ResistanceType,\n setFlagProperty,\n ShieldPF2e,\n SkillSlug,\n SpellConsumableItemType,\n SpellPF2e,\n SpellSource,\n SYSTEM,\n WeaponGroup,\n WeaponPF2e,\n WeaponPropertyRuneType,\n WeaponTrait,\n ZeroToFour,\n ZeroToTen,\n} from \"foundry-helpers\";\nimport { createConsumableFromSpell } from \"foundry-helpers/dist\";\nimport { getSpellcastingMaxRank } from \"spellcasting\";\n\nconst utils = {\n createExcludeFeatList: (\n actor: CharacterPF2e,\n categories: FeatOrFeatureCategory[],\n traits: FeatTrait[],\n ): ItemUUID[] => {\n return R.pipe(\n actor.itemTypes.feat,\n R.filter((feat) => categories.some((category) => feat.category === category)),\n R.filter((feat) => traits.every((trait) => feat.traits.has(trait))),\n R.map((feat) => feat.sourceId),\n R.filter(R.isTruthy),\n );\n },\n createFeatSource: async (uuid: string): Promise => {\n const source = await getItemSourceFromUuid(uuid, \"feat\");\n\n if (!source) {\n throw new Error(`An error occured while trying to create a feat source with uuid: ${uuid}`);\n }\n\n return source;\n },\n createSpellScrollSource: (options: CreateSpellConsumableSourceOptions): Promise => {\n return createSpellConsumableSource(\"scroll\", options);\n },\n createWandSource: (options: CreateSpellConsumableSourceOptions): Promise => {\n return createSpellConsumableSource(\"wand\", options);\n },\n createSkillRuleElement: ({\n skill,\n mode = \"upgrade\",\n value,\n predicate,\n }: {\n skill: SkillSlug;\n mode?: \"upgrade\";\n value: number;\n predicate?: any[];\n }) => {\n const rule = {\n key: \"ActiveEffectLike\",\n mode,\n path: `system.skills.${skill}.rank`,\n value,\n predicate,\n };\n\n return rule;\n },\n createLoreSource: ({ name, rank }: { name: string; rank: ZeroToFour }): PreCreate => {\n return {\n type: \"lore\",\n img: SYSTEM.relativePath(\"icons/default-icons/lore.svg\"),\n name,\n system: { proficient: { value: rank } },\n };\n },\n createResistanceRuleElement: ({\n type,\n value,\n predicate,\n }: {\n type: ResistanceType;\n value: SimplifiableRuleValue;\n predicate?: any[];\n }) => {\n const rule = {\n key: \"Resistance\",\n type,\n value: simplifyRuleValue(value),\n predicate,\n };\n\n return rule;\n },\n createLanguageRuleElement: ({\n language,\n mode = \"add\",\n predicate,\n }: {\n language: string;\n mode?: \"add\";\n predicate?: any[];\n }) => {\n const rule = {\n key: \"ActiveEffectLike\",\n mode,\n path: \"system.build.languages.granted\",\n value: {\n slug: language,\n source: \"{item|name}\",\n },\n predicate,\n };\n\n return rule;\n },\n createChatLink: (itemOrUuid: ItemPF2e | string, label?: string): string => {\n const uuid = itemOrUuid instanceof Item ? (itemOrUuid.sourceId ?? itemOrUuid.uuid) : itemOrUuid;\n return createChatLink(uuid, { label });\n },\n getSkillLabel: (skill: SkillSlug, localize?: boolean): string => {\n return getSkillLabel(skill, localize);\n },\n getActorWeapons: (actor: TActor): WeaponPF2e[] => {\n return getActorWeapons(actor);\n },\n getSourceId: (item: ItemPF2e): ItemUUID => {\n return getItemSourceId(item);\n },\n getItemSource: (\n uuid: string,\n type?: T,\n ): T extends ItemType\n ? Promise[T][\"_source\"] | null>\n : T extends \"physical\"\n ? Promise\n : Promise => {\n return getItemSourceFromUuid(uuid, type) as any;\n },\n getActorMaxRank: (actor: CreaturePF2e): OneToTen => {\n return Math.max(1, Math.ceil(actor.level / 2)) as OneToTen;\n },\n getItemTypeLabel: (type: ItemType): string => {\n return game.i18n.localize(`TYPES.Item.${type}`);\n },\n getChoiSetRuleSelection: (\n item: ItemPF2e,\n option?: string | { option?: string; flag?: string },\n ): string | undefined => {\n const options = typeof option === \"string\" ? { option } : option;\n return getChoiceSetSelection(item, options);\n },\n getResistanceLabel: (resistance: ResistanceType, localize = true): string => {\n const label = CONFIG.PF2E.resistanceTypes[resistance];\n return localize ? game.i18n.localize(label).capitalize() : label;\n },\n getResistances: (): { value: ResistanceType; label: string }[] => {\n return R.pipe(\n CONFIG.PF2E.resistanceTypes,\n R.entries(),\n R.map(([value, label]) => ({ value, label: label.capitalize() })),\n );\n },\n getLanguageLabel: (language: Language, localize = true): string => {\n const label = CONFIG.PF2E.languages[language];\n return localize ? game.i18n.localize(label) : label;\n },\n getLanguages: (): { value: Language; label: string }[] => {\n return R.pipe(\n CONFIG.PF2E.languages,\n R.entries(),\n R.map(([value, label]) => ({ value, label })),\n );\n },\n getSkills: (): { value: SkillSlug; label: string }[] => {\n return R.pipe(\n CONFIG.PF2E.skills,\n R.entries(),\n R.map(([value, { label }]) => ({ value, label })),\n );\n },\n getSpellRankLabel: (rank: ZeroToTen): string => {\n return getSpellRankLabel(rank);\n },\n getSpellcastingMaxRank: (\n actor: CharacterPF2e,\n { tradition, rankLimit }: { tradition?: MagicTradition; rankLimit?: OneToTen } = {},\n ): ZeroToTen => {\n const maxRank = R.pipe(\n actor.spellcasting.spellcastingFeatures,\n tradition ? R.filter((entry) => entry.tradition === tradition) : R.identity(),\n R.map((entry) => getSpellcastingMaxRank(entry, rankLimit)),\n R.firstBy([R.identity(), \"desc\"]),\n );\n return maxRank ?? 0;\n },\n getActors: (actor?: CharacterPF2e): ActorPF2e[] => {\n const list =\n actor && getSetting(\"partyMembers\") && actor.parties.size\n ? Array.from(actor.parties).flatMap((party) => party.members)\n : game.actors.filter((a) => a.hasPlayerOwner);\n return actor ? list.filter((a) => a !== actor) : list;\n },\n getProficiencyLabel: (rank: OneToFour): string => {\n return game.i18n.localize(CONFIG.PF2E.proficiencyLevels[rank]);\n },\n getWeaponPropertyRuneLabel: (rune: WeaponPropertyRuneType): string => {\n return game.i18n.localize(`PF2E.WeaponPropertyRune.${rune}.Name`);\n },\n getWeaponPotencyRuneLabel: (potency: ZeroToFour): string => {\n return game.i18n.localize(`PF2E.WeaponPotencyRune${potency}`);\n },\n getWeaponTraitLabel: (trait: WeaponTrait): string => {\n return game.i18n.localize(CONFIG.PF2E.weaponTraits[trait]);\n },\n getWeaponDamageLabel: (damage: DamageType): string => {\n return game.i18n.localize(CONFIG.PF2E.damageTypes[damage]);\n },\n getWeaponGroupLabel: (group: WeaponGroup): string => {\n return game.i18n.localize(CONFIG.PF2E.weaponGroups[group]);\n },\n getPreciousMaterialLabel(material: PreciousMaterialType): string {\n return game.i18n.localize(CONFIG.PF2E.preciousMaterials[material]);\n },\n hasFreePropertySlot: (item: WeaponPF2e): boolean => {\n const potency = item.system.runes.potency;\n return potency > 0 && item.system.runes.property.length < potency;\n },\n hasItemWithSourceId: (actor: ActorPF2e, uuid: string, type?: ItemType) => {\n return !!findItemWithSourceId(actor, uuid, type);\n },\n selectRandomOption: (\n options: (string | { value: string })[] | HTMLSelectElement | HTMLOptionsCollection,\n ): string => {\n options = options instanceof HTMLSelectElement ? options.options : options;\n options =\n options instanceof HTMLOptionsCollection ? Array.from(options).map((option) => option.value) : options;\n\n if (options.length === 0) return \"\";\n\n const roll = rollDie(options.length);\n const result = options[roll - 1];\n\n return typeof result === \"object\" ? result.value : result;\n },\n createSpellcastingEntrySource: (\n options: CreateSpellcastingSource & { identifier?: string },\n ): CreatedSpellcastingEntrySource => {\n const source = createSpellcastingSource(options);\n\n if (options.identifier) {\n setFlagProperty(source, \"identifier\", options.identifier);\n }\n\n return source;\n },\n createSpellSource: async (\n uuid: string,\n { identifier, signature, rank }: { identifier?: string; signature?: boolean; rank?: ZeroToTen } = {},\n ): Promise => {\n const source = await getItemSourceFromUuid(uuid, \"spell\");\n\n if (!source) {\n throw new Error(`An error occured while trying to create a spell source with uuid: ${uuid}`);\n }\n\n if (identifier) {\n setFlagProperty(source, \"identifier\", identifier);\n }\n\n if (signature && !source.system.traits.value.includes(\"cantrip\")) {\n setFlagProperty(source, \"signature\", true);\n }\n\n if (R.isNumber(rank)) {\n setFlagProperty(source, \"rank\", rank);\n }\n\n return source;\n },\n getSpellWithRankLabel: (uuid: string, rank: OneToTen): string => {\n const name = fromUuidSync(uuid, { strict: false })?.name ?? \"\";\n return `${name} (${getSpellRankLabel(rank)})`;\n },\n getRunedItemName: (item: WeaponPF2e | ArmorPF2e | ShieldPF2e): string => {\n return item.name !== item._source.name ? `... ${item._source.name}` : item.name;\n },\n};\n\nasync function createSpellConsumableSource(\n type: SpellConsumableItemType,\n { uuid, level, itemName, itemImg }: CreateSpellConsumableSourceOptions,\n): Promise {\n const spell = await fromUuid(uuid);\n\n if (!spell?.isOfType(\"spell\")) {\n throw new Error(`An error occured while trying to create a spell scroll source with uuid: ${uuid}`);\n }\n\n return createConsumableFromSpell(spell, {\n type,\n heightenedLevel: level,\n temp: true,\n itemName,\n itemImg,\n });\n}\n\nfunction simplifyRuleValue(value: SimplifiableRuleValue): string | number {\n return value === \"half\" ? \"max(1,floor(@actor.level/2))\" : value === \"level\" ? \"max(1,@actor.level)\" : value;\n}\n\nfunction rollDie(faces: number, nb = 1) {\n let total = 0;\n for (let i = 0; i < nb; i++) {\n total += Math.floor(Math.random() * faces) + 1;\n }\n return total;\n}\n\nfunction createUpdateCollection(): [Collection, (data: T) => void] {\n const collection = new Collection();\n\n return [\n collection,\n (data: T) => {\n if (data._id) {\n const update = collection.get(data._id) ?? {};\n collection.set(data._id, foundry.utils.mergeObject(update, data));\n }\n },\n ];\n}\n\nfunction getUuidFromInlineMatch(match: RegExpExecArray | RegExpMatchArray) {\n return match[1] === \"Compendium\" ? `Compendium.${match[2]}` : match[2];\n}\n\ntype CreateSpellConsumableSourceOptions = {\n uuid: string;\n level?: number;\n itemName?: string;\n itemImg?: ImageFilePath;\n};\n\ntype SimplifiableRuleValue = \"half\" | \"level\" | (string & {}) | (number & {});\n\nexport { createUpdateCollection, getUuidFromInlineMatch, utils };\nexport type { SimplifiableRuleValue };\n", "import { Daily } from \"daily\";\r\n\r\nfunction isValidDaily(daily: Daily): boolean {\r\n return (\r\n typeof daily.key === \"string\" &&\r\n daily.key.trim().length > 0 &&\r\n typeof daily.rows === \"function\" &&\r\n typeof daily.process === \"function\" &&\r\n (typeof daily.condition === \"function\" || Array.isArray(daily.items))\r\n );\r\n}\r\n\r\nexport { isValidDaily };\r\n", "import { CustomDaily, parseCustomDaily } from \"custom\";\nimport { DAILY_SCHEMA } from \"dailies\";\nimport {\n addListener,\n addListenerAll,\n confirmDialog,\n getSetting,\n htmlQuery,\n localize,\n setSetting,\n TemplateLocalize,\n} from \"foundry-helpers\";\nimport apps = foundry.applications.api;\n\nclass CustomsMenu extends apps.HandlebarsApplicationMixin(apps.ApplicationV2) {\n #selected: string | undefined;\n\n static DEFAULT_OPTIONS: DeepPartial = {\n classes: [\"category-browser\"],\n id: \"pf2e-dailies-customs-menu\",\n window: {\n positioned: true,\n resizable: true,\n minimizable: true,\n frame: true,\n },\n position: {\n width: 900,\n height: 700,\n },\n };\n\n static PARTS: Record = {\n sidebar: {\n template: \"modules/pf2e-dailies/templates/customs/sidebar.hbs\",\n scrollable: [\"nav\"],\n },\n main: {\n template: \"modules/pf2e-dailies/templates/customs/main.hbs\",\n scrollable: [\".scrollable\"],\n },\n };\n\n get title(): string {\n return localize(\"customs.title\");\n }\n\n get dailies(): CustomDaily[] {\n return getSetting(\"customDailies\");\n }\n\n get code(): string {\n return htmlQuery(this.element, \"code-mirror\")?.value ?? \"\";\n }\n\n async _prepareContext(_options: fa.ApplicationRenderOptions): Promise {\n const selected = this.#selected;\n const dailies = this.dailies;\n const daily = dailies.find(({ key }) => key === selected);\n const readonly = daily && foundry.utils.isNewerVersion(DAILY_SCHEMA, daily?.schema ?? \"\");\n\n const list = dailies.map(({ key, schema }) => ({\n key,\n readonly: foundry.utils.isNewerVersion(DAILY_SCHEMA, schema ?? \"\"),\n selected: key === selected,\n }));\n\n return {\n code: daily?.code,\n disabled: !daily || readonly,\n i18n: localize.i18n(\"customs\"),\n list,\n readonly,\n };\n }\n\n _attachPartListeners(partId: CustomsMenuPart, html: HTMLElement, _options: apps.HandlebarsRenderOptions) {\n if (partId === \"main\") {\n this.#attachMainListeners(html);\n } else if (partId === \"sidebar\") {\n this.#attachSidebarListeners(html);\n }\n }\n\n #attachMainListeners(html: HTMLElement) {\n type EventAction = \"delete-daily\" | \"save-daily\";\n\n addListenerAll(html, `[data-action]`, (el) => {\n const action = el.dataset.action as EventAction;\n\n if (action === \"delete-daily\") {\n this.#deleteDaily();\n } else if (action === \"save-daily\") {\n this.#saveDaily();\n }\n });\n\n addListener(html, \".readonly a\", this.#onUnlockDaily.bind(this));\n }\n\n #onUnlockDaily() {\n const html = this.element;\n const readonlyEl = html.querySelector(\".readonly\");\n\n readonlyEl?.remove();\n\n const disabled = this.element.querySelectorAll(\"form [disabled]\");\n\n for (const el of disabled) {\n el.disabled = false;\n }\n }\n\n #attachSidebarListeners(html: HTMLElement) {\n type EventAction = \"create-daily\" | \"select-daily\";\n\n addListenerAll(html, `[data-action]`, (el) => {\n const action = el.dataset.action as EventAction;\n\n if (action === \"create-daily\") {\n this.#createDaily();\n } else if (action === \"select-daily\") {\n this.#selected = el.dataset.tab;\n this.render();\n }\n });\n }\n\n async #saveDaily() {\n const key = this.#selected;\n if (!key) return;\n\n const code = this.code;\n const daily = await parseCustomDaily({ code, key });\n if (!daily) return;\n\n const dailies = this.dailies.slice();\n const custom: CustomDaily = { key: daily.key, code, schema: DAILY_SCHEMA };\n\n if (!dailies.findSplice((x) => x.key === key, custom)) {\n dailies.push(custom);\n }\n\n await setSetting(`customDailies`, dailies);\n\n localize.info(\"customs.code.saved\");\n\n this.#selected = daily.key;\n this.render();\n }\n\n async #deleteDaily() {\n const key = this.#selected;\n if (!key) return;\n\n const accept = await confirmDialog(\"customs.delete\");\n if (!accept) return;\n\n const dailies = this.dailies.slice();\n\n if (dailies.findSplice((x) => x.key === key)) {\n await setSetting(`customDailies`, dailies);\n this.render();\n }\n }\n\n async #createDaily() {\n const key = foundry.utils.randomID();\n const dailies = this.dailies.slice();\n\n dailies.push({\n key,\n code: defaultTemplate(key),\n schema: DAILY_SCHEMA,\n });\n\n await setSetting(\"customDailies\", dailies);\n\n this.#selected = key;\n this.render();\n }\n}\n\nfunction defaultTemplate(key: string) {\n return `return {\n key: \"${key}\",\n items: [],\n label: \"\",\n rows: (actor, items) => {\n return []\n },\n process: ({actor, rows, messages}) => {\n\n }\n}`;\n}\n\ntype CustomsMenuPart = \"main\" | \"sidebar\";\n\ntype CustomsMenuContext = fa.ApplicationRenderContext & {\n code: string | undefined;\n disabled: boolean | undefined;\n i18n: TemplateLocalize;\n list: {\n key: string;\n readonly: boolean;\n selected: boolean;\n }[];\n readonly: boolean | undefined;\n};\n\nexport { CustomsMenu };\n", "import { createDaily } from \"daily\";\nimport { localize, R, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst adaptiveTalent = createDaily({\n key: \"adaptive-talent\",\n items: [\n {\n slug: \"talent\", // Adaptive Talent\n uuid: SYSTEM.itemUuid(\n \"Compendium.sf2e-anachronism.class-features.Item.9nO9EkhE1TiS0Yh6\",\n \"Compendium.sf2e.class-features.Item.9nO9EkhE1TiS0Yh6\",\n ),\n required: true,\n },\n {\n slug: \"endless\", // Endlessly Adaptive\n uuid: SYSTEM.itemUuid(\n \"Compendium.sf2e-anachronism.feats.Item.kTmHzD83BRz8bvmg\",\n \"Compendium.sf2e.feats.Item.kTmHzD83BRz8bvmg\",\n ),\n },\n ],\n label: (_actor, items) => items.talent.name,\n rows: (actor, items) => {\n const level = actor.level;\n const nbFeats = (level >= 15 ? 3 : level >= 9 ? 2 : 1) + (items.endless ? 2 : 0);\n\n return R.range(1, nbFeats + 1).map((i) => {\n return {\n type: \"drop\",\n slug: `feat${i}`,\n label: localize(\"label.feat\", { nb: i }),\n filter: {\n type: \"feat\",\n search: {\n category: [\"skill\"],\n level,\n },\n },\n };\n });\n },\n process: async ({ items, rows, messages, addFeat }) => {\n const promises = R.values(rows).map(async ({ uuid }) => {\n try {\n const source = await utils.createFeatSource(uuid);\n addFeat(source, items.talent);\n messages.add(\"feats\", { uuid });\n } catch {}\n });\n\n await Promise.all(promises);\n },\n});\n\nexport { adaptiveTalent };\n", "import { createDaily, DailyRowComboData } from \"daily\";\nimport { SkillSlug, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst ancestralUUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.WoLh16gyDp8y9WOZ\",\n \"Compendium.pf2e-anachronism.feats.Item.WoLh16gyDp8y9WOZ\",\n);\nconst expertUUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.vfuHVSuExvtyajkW\",\n \"Compendium.pf2e-anachronism.feats.Item.vfuHVSuExvtyajkW\",\n);\n\nconst ancestralLongevity = createDaily({\n key: \"ancestral-longevity\",\n items: [\n {\n slug: \"trained\", // Ancestral Longevity\n uuid: ancestralUUID,\n required: true,\n },\n {\n slug: \"expert\", // Expert Longevity\n uuid: expertUUID,\n },\n ],\n label: (_actor, items) => items.trained.name,\n rows: (actor, items) => {\n const skillList = utils.getSkills();\n const actorSkills = actor.skills;\n\n return [\n {\n slug: \"trained\",\n type: \"combo\",\n label: \"PF2E.ProficiencyLevel1\",\n unique: \"skill-1\",\n options: skillList.filter(({ value }) => actorSkills[value].rank === 0),\n },\n {\n slug: \"expert\",\n type: \"combo\",\n label: \"PF2E.ProficiencyLevel2\",\n unique: \"skill-2\",\n options: skillList.filter(({ value }) => actorSkills[value].rank === 1),\n condition: !!items.expert,\n },\n ];\n },\n process: ({ items, rows, messages, addItem, addRule, removeRule }) => {\n const data = [\n [\"trained\", 1, ancestralUUID()],\n [\"expert\", 2, expertUUID()],\n ] as const;\n\n for (const [slug, rank, uuid] of data) {\n const row: DailyRowComboData | undefined = rows[slug];\n const item = items[slug];\n\n if (!row || !item) continue;\n\n removeRule(item, () => true);\n\n let selected = row.selected;\n\n if (row.input) {\n const source = utils.createLoreSource({ name: selected, rank });\n addItem(source);\n } else {\n const skill = selected as SkillSlug;\n const source = utils.createSkillRuleElement({\n skill,\n value: rank,\n });\n\n selected = utils.getSkillLabel(skill);\n addRule(item, source);\n }\n\n messages.add(\"skills\", { uuid, selected });\n }\n },\n});\n\nexport { ancestralLongevity };\n", "import {\n addListenerAll,\n CompendiumCollection,\n CompendiumIndexData,\n getSetting,\n htmlClosest,\n htmlQuery,\n ItemType,\n localize,\n R,\n setSetting,\n TemplateLocalize,\n} from \"foundry-helpers\";\nimport { utils } from \"utils\";\nimport apps = foundry.applications.api;\n\nconst INDEX = [\"familiar\", \"animist\"] as const;\n\nconst INDEX_TYPE: Record = {\n familiar: \"action\",\n animist: \"feat\",\n};\n\nclass HomebrewsMenu extends apps.HandlebarsApplicationMixin(apps.ApplicationV2) {\n #selected: HomebrewIndex | undefined;\n\n static DEFAULT_OPTIONS: DeepPartial = {\n classes: [\"category-browser\"],\n id: \"pf2e-dailies-homebrews-menu\",\n window: {\n positioned: true,\n resizable: true,\n minimizable: true,\n frame: true,\n },\n position: {\n width: 700,\n height: 600,\n },\n };\n\n static PARTS: Record = {\n sidebar: {\n template: \"modules/pf2e-dailies/templates/homebrew/sidebar.hbs\",\n scrollable: [\"nav\"],\n },\n main: {\n template: \"modules/pf2e-dailies/templates/homebrew/main.hbs\",\n scrollable: [\".scrollable\"],\n },\n };\n\n static get homebrews() {\n return getSetting>(\"homebrewEntries\");\n }\n\n get title(): string {\n return localize(\"homebrew.title\");\n }\n\n get selected(): HomebrewIndex | undefined {\n return this.#selected && INDEX.includes(this.#selected) ? this.#selected : undefined;\n }\n\n static getEntries(index: HomebrewIndex) {\n if (!INDEX.includes(index)) return [];\n\n return R.pipe(\n HomebrewsMenu.homebrews[index] ?? [],\n R.map((id) => {\n const result = HomebrewsMenu.getEntryData(index, id);\n if (!result) return;\n\n if (!result.isPack) return [result];\n\n return R.pipe(\n result.entry.index.contents,\n R.filter((entry) => entry.type === INDEX_TYPE[index]),\n R.map((entry) => ({ isPack: true, entry })),\n );\n }),\n R.flat(),\n R.filter(R.isTruthy),\n );\n }\n\n static getEntryData(index: Maybe, id: string): PackHomebrew | ItemHomebrew | undefined {\n if (!index || !INDEX.includes(index)) return;\n\n const pack = game.packs.get(id);\n if (pack) {\n return pack.metadata.type === \"Item\" ? { entry: pack, isPack: true } : undefined;\n }\n\n const entry = fromUuidSync(id, { strict: false });\n return entry?.type === INDEX_TYPE[index] ? { entry, isPack: false } : undefined;\n }\n\n async _prepareContext(_options: fa.ApplicationRenderOptions): Promise {\n const homebrewsSettings = HomebrewsMenu.homebrews;\n const selected = this.selected;\n\n const entries = R.pipe(\n (selected && homebrewsSettings[selected]) ?? [],\n R.map((id): HomebrewEntry | undefined => {\n const result = HomebrewsMenu.getEntryData(selected, id);\n if (!result) return;\n\n const { entry, isPack } = result;\n const [img, name] = isPack\n ? [null, entry.metadata.label]\n : [entry.img.trim() || \"icons/sundries/books/book-red-exclamation.webp\", entry.name];\n\n return { id, img, name, isPack };\n }),\n R.filter(R.isTruthy),\n R.sortBy([R.prop(\"isPack\"), \"desc\"], R.prop(\"name\")),\n );\n\n const index: HomebrewsMenuContext[\"index\"] = R.pipe(\n INDEX,\n R.map((id) => {\n return {\n id,\n label: localize(\"homebrew.index\", id),\n selected: selected === id,\n };\n }),\n R.sortBy(R.prop(\"label\")),\n );\n\n return {\n disabled: !selected,\n entries,\n i18n: localize.i18n(\"homebrew\"),\n index,\n };\n }\n\n _attachPartListeners(partId: HomebrewsMenuPart, html: HTMLElement, _options: apps.HandlebarsRenderOptions) {\n if (partId === \"main\") {\n this.#attachMainListeners(html);\n } else if (partId === \"sidebar\") {\n this.#attachSidebarListeners(html);\n }\n }\n\n async #addHomebrew(html: HTMLElement) {\n const index = this.selected;\n const input = htmlQuery(html, \"[name='entry']\");\n if (!index || !input) return;\n\n const entry = input.value.trim();\n const type = utils.getItemTypeLabel(INDEX_TYPE[index]);\n\n if (entry && HomebrewsMenu.getEntryData(index, entry)) {\n const homebrew = HomebrewsMenu.homebrews[index]?.slice() ?? [];\n\n if (!homebrew.includes(entry)) {\n homebrew.push(entry);\n await setSetting(`homebrewEntries`, { [index]: homebrew });\n this.render();\n } else {\n input.value = \"\";\n }\n\n return;\n }\n\n localize.warning(\"homebrew\", entry ? \"invalid\" : \"empty\", { entry, type });\n input.value = \"\";\n }\n\n async #deleteHomebrew(id: string) {\n const index = this.selected;\n if (!index) return;\n\n const homebrew = HomebrewsMenu.homebrews[index]?.slice();\n\n if (homebrew?.findSplice((entry) => entry === id)) {\n await setSetting(`homebrewEntries`, { [index]: homebrew });\n this.render();\n }\n }\n\n async #openHomebrew(id: string) {\n const data = HomebrewsMenu.getEntryData(this.selected, id);\n\n if (data?.isPack) {\n data.entry.render(true);\n } else if (data) {\n const entry = await fromUuid(data.entry.uuid);\n entry?.sheet.render(true);\n }\n }\n\n #attachMainListeners(html: HTMLElement) {\n type EventAction = \"add-homebrew\" | \"open-entry\" | \"delete-entry\";\n\n const getHomebrewId = (el: HTMLElement): string => {\n return htmlClosest(el, \"[data-id]\")?.dataset.id ?? \"\";\n };\n\n addListenerAll(html, \"[data-action]\", async (el) => {\n const action = el.dataset.action as EventAction;\n\n if (action === \"add-homebrew\") {\n this.#addHomebrew(html);\n } else if (action === \"delete-entry\") {\n this.#deleteHomebrew(getHomebrewId(el));\n } else if (action === \"open-entry\") {\n this.#openHomebrew(getHomebrewId(el));\n }\n });\n }\n\n #attachSidebarListeners(html: HTMLElement) {\n addListenerAll(html, `[data-tab]`, (el) => {\n this.#selected = el.dataset.tab as HomebrewIndex;\n this.render();\n });\n }\n}\n\ntype PackHomebrew = {\n isPack: true;\n entry: CompendiumCollection;\n};\n\ntype ItemHomebrew = {\n isPack: false;\n entry: CompendiumIndexData;\n};\n\ntype HomebrewsMenuPart = \"sidebar\" | \"main\";\n\ntype HomebrewsMenuContext = fa.ApplicationRenderContext & {\n disabled: boolean;\n entries: HomebrewEntry[];\n i18n: TemplateLocalize;\n index: {\n id: HomebrewIndex;\n label: string;\n selected: boolean;\n }[];\n};\n\ntype HomebrewEntry = {\n id: string;\n img: string | null;\n name: string;\n isPack: boolean;\n};\n\ntype HomebrewIndex = (typeof INDEX)[number];\n\nexport { HomebrewsMenu };\n", "import { createDaily, DailyConfigCheckbox } from \"daily\";\nimport { HomebrewsMenu } from \"homebrew\";\nimport {\n ActorPF2e,\n CharacterPF2e,\n createHTMLElement,\n getActorMaxRank,\n getFlag,\n getFlagProperty,\n getItemSource,\n htmlQuery,\n isInstanceOf,\n ItemPF2e,\n localize,\n R,\n setFlagProperty,\n SpellSource,\n splitListString,\n SYSTEM,\n} from \"foundry-helpers\";\nimport { getUuidFromInlineMatch, utils } from \"utils\";\n\nconst ANIMIST_VESSELS_PATH = \"extra.dailies.animist.primaryVessels\";\n\nconst LORE_STRIP_REGEX = /^(.+?) Lore$/;\n\nconst UUID_REGEX = /@(uuid|compendium)\\[([a-z0-9\\._-]+)\\]/gi;\n\nconst AVATAR_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.spells-srd.Item.ckUOoqOM7Kg7VqxB\",\n \"Compendium.sf2e.spells.Item.ckUOoqOM7Kg7VqxB\",\n);\nconst HEAL_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.spells-srd.Item.rfZpqmj0AIIdkVIs\",\n \"Compendium.sf2e.spells.Item.rfZpqmj0AIIdkVIs\",\n);\nconst HARM_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.spells-srd.Item.wdA52JJnsuQWeyqz\",\n \"Compendium.sf2e.spells.Item.wdA52JJnsuQWeyqz\",\n);\nconst ANIMAL_FORM_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.spells-srd.Item.wp09USMB3GIW1qbp\",\n \"Compendium.sf2e.spells.Item.wp09USMB3GIW1qbp\",\n);\nconst AERIAL_FORM_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.spells-srd.Item.NzXpEzcZAjuDTZjK\",\n \"Compendium.sf2e.spells.Item.NzXpEzcZAjuDTZjK\",\n);\nconst MONSTROSITY_FORM_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.spells-srd.Item.8AMvNVOUEtxBCDvJ\",\n \"Compendium.sf2e.spells.Item.8AMvNVOUEtxBCDvJ\",\n);\n\n// level 1 to 20 / rank 1 to 9\nconst SPELLS_SLOTS = [\n [1, 0, 0, 0, 0, 0, 0, 0, 0],\n [1, 0, 0, 0, 0, 0, 0, 0, 0],\n [1, 1, 0, 0, 0, 0, 0, 0, 0],\n [1, 1, 0, 0, 0, 0, 0, 0, 0],\n [1, 1, 1, 0, 0, 0, 0, 0, 0],\n [1, 1, 1, 0, 0, 0, 0, 0, 0],\n [1, 1, 1, 1, 0, 0, 0, 0, 0],\n [1, 1, 1, 1, 0, 0, 0, 0, 0],\n [1, 1, 1, 1, 1, 0, 0, 0, 0],\n [2, 2, 2, 1, 1, 0, 0, 0, 0],\n [2, 2, 2, 2, 1, 1, 0, 0, 0],\n [2, 2, 2, 2, 1, 1, 0, 0, 0],\n [2, 2, 2, 2, 2, 1, 1, 0, 0],\n [2, 2, 2, 2, 2, 1, 1, 0, 0],\n [2, 2, 2, 2, 2, 2, 1, 1, 0],\n [2, 2, 2, 2, 2, 2, 1, 1, 0],\n [2, 2, 2, 2, 2, 2, 2, 1, 1],\n [2, 2, 2, 2, 2, 2, 2, 1, 1],\n [2, 2, 2, 2, 2, 2, 2, 2, 1],\n [2, 2, 2, 2, 2, 2, 2, 2, 1],\n] as const;\n\nconst animist = createDaily({\n key: \"animist\",\n items: [\n {\n slug: \"attunement\", // Apparition Attunement\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.AHMjKkIx21AoMc9W\",\n \"Compendium.pf2e-anachronism.class-features.Item.AHMjKkIx21AoMc9W\",\n ),\n },\n {\n slug: \"dedication\", // Animist Dedication\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.5hFFM5TmhKYSQwtG\",\n \"Compendium.pf2e-anachronism.feats.Item.5hFFM5TmhKYSQwtG\",\n ),\n },\n {\n slug: \"third\", // Third Apparition\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.bRAjde9LlavcOUuM\",\n \"Compendium.pf2e-anachronism.class-features.Item.bRAjde9LlavcOUuM\",\n ),\n },\n {\n slug: \"fourth\", // Fourth Apparition\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.avLo2Jl3mNWssp0W\",\n \"Compendium.pf2e-anachronism.class-features.Item.avLo2Jl3mNWssp0W\",\n ),\n },\n {\n slug: \"supreme\", // Supreme Incarnation\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.1MHXjNczVZfVvDP6\",\n \"Compendium.pf2e-anachronism.class-features.Item.1MHXjNczVZfVvDP6\",\n ),\n },\n {\n slug: \"balance\", // Embodiment of the Balance\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.8Y9DCalsSnXHDCeV\",\n \"Compendium.pf2e-anachronism.feats.Item.8Y9DCalsSnXHDCeV\",\n ),\n },\n {\n slug: \"walk\", // Walk the Wilds\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.zKUtZxlQw5jWnX9z\",\n \"Compendium.pf2e-anachronism.feats.Item.zKUtZxlQw5jWnX9z\",\n ),\n },\n {\n slug: \"medium\", // Medium\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.k6c2gesVQ8QuEWGm\",\n \"Compendium.pf2e-anachronism.class-features.Item.k6c2gesVQ8QuEWGm\",\n ),\n },\n {\n slug: \"spirit\", // Circle of Spirits\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.M8jbV0il124Ve5oV\",\n \"Compendium.pf2e-anachronism.feats.Item.M8jbV0il124Ve5oV\",\n ),\n },\n {\n slug: \"wind\", // Wind Seeker\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.LoK6iI2f8ziSxFaU\",\n \"Compendium.pf2e-anachronism.feats.Item.LoK6iI2f8ziSxFaU\",\n ),\n },\n {\n slug: \"monstrous\", // Monstrous Inclinations\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.VO2uOVrjIr7ZAjkX\",\n \"Compendium.pf2e-anachronism.feats.Item.VO2uOVrjIr7ZAjkX\",\n ),\n },\n ],\n label: (_actor, items) => items.attunement?.name ?? items.dedication?.name ?? \"\",\n rows: async (actor, items) => {\n if (!items.attunement && !items.dedication) return [];\n\n const pack = SYSTEM.getPack(\"pf2e.classfeatures\", \"pf2e-anachronism.class-features\");\n if (!pack) return [];\n\n const uniqueId = foundry.utils.randomID();\n const nbPrimary = items.medium && actor.level >= 9 ? 2 : 1;\n const index = await pack.getIndex({ fields: [\"system.traits.otherTags\"] });\n const apparitions = index.filter((entry) => entry.system.traits.otherTags?.includes(\"animist-apparition\"));\n const options = R.pipe(\n apparitions,\n R.map(({ name, uuid }) => ({ value: uuid, label: name })),\n R.sortBy(R.prop(\"label\")),\n );\n\n for (const { entry } of HomebrewsMenu.getEntries(\"animist\")) {\n options.push({\n value: entry.uuid,\n label: entry.name,\n });\n }\n\n let nbApparitions = items.attunement ? 2 : 1;\n if (items.third) nbApparitions += 1;\n if (items.fourth) nbApparitions += 1;\n\n return R.range(1, nbApparitions + 1).map((i) => {\n const labelKey = i <= nbPrimary ? (nbPrimary > 1 ? \"primary\" : \"first\") : \"other\";\n\n return {\n type: \"select\",\n slug: `apparition${i}`,\n label: localize(`label.apparition.${labelKey}`, { nb: i }),\n unique: uniqueId,\n options: options,\n };\n });\n },\n process: async ({ actor, rows, messages, items, addItem, addFeat, addRule }) => {\n const parent = items.attunement ?? items.dedication;\n if (!parent) return;\n\n const actorLevel = actor.level;\n const maxRank = getActorMaxRank(actor);\n const loreRank = actorLevel >= 16 ? 3 : actorLevel >= 8 ? 2 : 1;\n const spellsToAdd: { source: SpellSource; uuid: string }[] = [];\n const vesselsToAdd: { source: SpellSource; uuid: string }[] = [];\n const spellsIdentifier = \"animist-spontaneous\";\n const vesselsIdentifier = \"animist-focus\";\n const animistConfig = getAnimistConfigs(actor);\n const nbPrimary = items.medium && actor.level >= 9 ? 2 : 1;\n\n messages.addGroup(\"apparition\", undefined, 100);\n\n const addSpell = async (uuid: string, signature: boolean) => {\n const source = await utils.createSpellSource(uuid, {\n identifier: spellsIdentifier,\n signature: animistConfig.signatures || signature,\n });\n\n if (source.system.level.value <= maxRank) {\n spellsToAdd.push({ source, uuid });\n }\n };\n\n let nbApparitions = 0;\n let nbActualPrimary = 0;\n\n await Promise.all(\n Object.values(rows).map(async (value, index) => {\n const item = await fromUuid(value);\n if (!item?.isOfType(\"feat\")) return;\n\n nbApparitions++;\n\n messages.add(\"apparition\", { uuid: item });\n\n const isPrimary = index < nbPrimary;\n\n if (isPrimary) {\n nbActualPrimary++;\n }\n\n const itemSource = getItemSource(item);\n addFeat(itemSource, parent);\n\n const descriptionEl = createHTMLElement(\"div\", { content: item.description });\n\n const loresEl = htmlQuery(descriptionEl, \"hr + p\");\n const lores = splitListString(loresEl?.childNodes[1].textContent?.trim() ?? \"\");\n const filteredLores = R.filter(lores, R.isTruthy);\n for (const lore of filteredLores) {\n const name = animistConfig.lore ? lore.replace(LORE_STRIP_REGEX, \"$1\") : lore;\n const loreSource = utils.createLoreSource({ name, rank: loreRank });\n\n addItem(loreSource);\n\n if (animistConfig.lores) {\n messages.add(\"skills\", { label: name });\n }\n }\n\n if (!items.attunement) return;\n\n const spellsEl = htmlQuery(descriptionEl, \"ul\");\n if (spellsEl) {\n UUID_REGEX.lastIndex = 0;\n\n const text = spellsEl.textContent ?? \"\";\n const uuids = Array.from(text.matchAll(UUID_REGEX)).map(getUuidFromInlineMatch);\n\n await Promise.all(uuids.map((uuid) => addSpell(uuid, false)));\n }\n\n const vesselEl = spellsEl?.nextElementSibling as HTMLElement | undefined;\n if (items.attunement && vesselEl) {\n UUID_REGEX.lastIndex = 0;\n\n const match = UUID_REGEX.exec(vesselEl.textContent ?? \"\");\n const uuid = match ? getUuidFromInlineMatch(match) : null;\n\n if (uuid) {\n const source = await utils.createSpellSource(uuid, {\n identifier: vesselsIdentifier,\n });\n\n setFlagProperty(source, \"isPrimary\", isPrimary);\n\n vesselsToAdd.push({ source, uuid });\n }\n }\n }),\n );\n\n if (!items.attunement) return;\n\n const extraSpells: string[] = R.pipe(\n [\n items.supreme && AVATAR_UUID(),\n items.balance && [HEAL_UUID(), HARM_UUID()],\n items.walk && ANIMAL_FORM_UUID(),\n items.wind && AERIAL_FORM_UUID(),\n items.monstrous && MONSTROSITY_FORM_UUID(),\n ],\n R.flat(),\n R.filter(R.isTruthy),\n );\n\n // add extraSpells\n await Promise.all(extraSpells.map((uuid) => addSpell(uuid, uuid !== AVATAR_UUID())));\n\n const attribute = actor.classDC?.attribute ?? \"wis\";\n\n const vessels = R.uniqueBy(vesselsToAdd, R.prop(\"uuid\"));\n if (vessels.length) {\n const spellsEntry = utils.createSpellcastingEntrySource({\n category: \"focus\",\n identifier: vesselsIdentifier,\n name: localize(\"animist.spellcasting.focus\"),\n tradition: \"divine\",\n attribute,\n showSlotlessRanks: false,\n });\n\n addItem(spellsEntry);\n\n for (const { source, uuid } of vessels) {\n addItem(source);\n\n if (animistConfig.spells) {\n messages.add(\"spells\", { uuid });\n }\n }\n }\n\n const spells = R.uniqueBy(spellsToAdd, R.prop(\"uuid\"));\n if (spells.length) {\n const spellsEntry = utils.createSpellcastingEntrySource({\n category: \"spontaneous\",\n identifier: spellsIdentifier,\n name: parent.name,\n tradition: \"divine\",\n attribute,\n showSlotlessRanks: false,\n });\n\n const maxSlotsRank = Math.min(maxRank, 9);\n const levelSlots = SPELLS_SLOTS[actorLevel - 1];\n\n for (let i = 1; i <= maxSlotsRank; i++) {\n const slots = levelSlots[i - 1];\n\n foundry.utils.setProperty(spellsEntry, `system.slots.slot${i}`, {\n value: slots,\n max: slots,\n });\n }\n\n if (items.supreme && actorLevel >= 19) {\n foundry.utils.setProperty(spellsEntry, \"system.slots.slot10\", {\n value: 1,\n max: 1,\n });\n }\n\n addItem(spellsEntry);\n\n for (const { source, uuid } of spells) {\n addItem(source);\n\n if (animistConfig.spells) {\n messages.add(\"spells\", { uuid });\n }\n }\n }\n\n const focusPoints = items.spirit ? nbApparitions : items.medium ? nbActualPrimary : 1;\n\n if (vessels.length > focusPoints) {\n addRule(parent, {\n key: \"ActiveEffectLike\",\n mode: \"subtract\",\n path: \"system.resources.focus.max\",\n priority: 9,\n value: vessels.length - focusPoints,\n });\n }\n },\n afterItemAdded: async ({ addedItems, setExtraFlags }) => {\n const primaryVessels = R.pipe(\n addedItems,\n R.filter((item) => item.isOfType(\"spell\") && !!getFlag(item, \"isPrimary\")),\n R.map((item) => item.id),\n );\n\n setExtraFlags({ primaryVessels });\n },\n config: (actor) => {\n return R.pipe(\n R.entries(getAnimistConfigs(actor)),\n R.map(([name, value]): DailyConfigCheckbox => {\n return {\n type: \"checkbox\",\n name,\n value,\n label: localize(\"config.animist\", name),\n };\n }),\n );\n },\n});\n\nfunction getAnimistConfigs(actor: CharacterPF2e) {\n return foundry.utils.mergeObject(\n { lore: true, lores: true, spells: true, signatures: true },\n getFlag(actor, \"config.dailies.animist\") ?? {},\n );\n}\n\nfunction getAnimistVesselsData(actor: Maybe) {\n if (!(actor instanceof Actor) || !actor.isOfType(\"character\")) return;\n\n const primaryVessels = getFlag(actor, ANIMIST_VESSELS_PATH);\n if (!primaryVessels) return;\n\n const vesselsEntry = actor.spellcasting.find((entry) => getFlagProperty(entry, \"identifier\") === \"animist-focus\");\n if (!isInstanceOf(vesselsEntry, \"SpellcastingEntryPF2e\")) return;\n\n return { entry: vesselsEntry, primary: primaryVessels.slice() };\n}\n\nexport { animist, ANIMIST_VESSELS_PATH, getAnimistConfigs, getAnimistVesselsData };\n", "import { createDaily } from \"daily\";\nimport { getItemFromUuid, MODULE, R, SYSTEM, WeaponPropertyRuneType } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst bladeAlly = createDaily({\n key: \"blade-ally\",\n items: [\n {\n slug: \"blade\", // Blessed Armament\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.EtltLdiy9kNfHU0c\",\n \"Compendium.pf2e-anachronism.class-features.Item.EtltLdiy9kNfHU0c\",\n ),\n required: true,\n },\n {\n slug: \"radiant\", // Radiant Armament\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.h5ksUZlrVGBjq6p4\",\n \"Compendium.pf2e-anachronism.feats.Item.h5ksUZlrVGBjq6p4\",\n ),\n },\n {\n slug: \"paragon\", // Armament Paragon\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.jYEMVfrXJLpXS6aC\",\n \"Compendium.pf2e-anachronism.feats.Item.jYEMVfrXJLpXS6aC\",\n ),\n },\n ],\n label: (_actor, items) => items.blade.name,\n rows: (actor, items) => {\n const weapons = utils.getActorWeapons(actor).filter((weapon) => !weapon.isAlchemical);\n if (!weapons.length) return [];\n\n const runes: WeaponPropertyRuneType[] = [\n \"fearsome\",\n \"ghostTouch\",\n \"returning\",\n \"shifting\",\n \"disrupting\", // disrupting = vitalizing\n ];\n\n if (items.radiant) {\n runes.push(\"astral\", \"brilliant\");\n\n if (actor.traits.has(\"holy\")) {\n runes.push(\"holy\");\n } else if (actor.traits.has(\"unholy\")) {\n runes.push(\"unholy\");\n }\n }\n\n if (items.paragon) {\n runes.push(\n \"dancing\", // dancing = animated\n \"greaterFearsome\",\n \"grievous\",\n \"keen\",\n \"greaterDisrupting\", // greaterDisrupting = greaterVitalizing\n );\n\n if (items.radiant) {\n runes.push(\"greaterAstral\", \"greaterBrilliant\");\n }\n }\n\n return [\n {\n type: \"select\",\n slug: \"weapon\",\n label: \"TYPES.Item.weapon\",\n options: weapons.map((weapon) => ({ value: weapon.uuid, label: weapon.name })),\n },\n {\n type: \"select\",\n slug: \"rune\",\n label: MODULE.path(\"label.rune\"),\n options: R.pipe(\n runes,\n R.map((rune) => ({\n value: rune,\n label: utils.getWeaponPropertyRuneLabel(rune),\n })),\n R.sortBy([R.prop(\"label\"), \"asc\"]),\n ),\n },\n ];\n },\n process: async ({ rows, messages, addRule, flagItem }) => {\n const weapon = await getItemFromUuid(rows.weapon, \"weapon\");\n if (!weapon) return;\n\n flagItem(weapon);\n\n const rune = rows.rune as WeaponPropertyRuneType;\n\n addRule(weapon, {\n key: \"AdjustStrike\",\n definition: [\"item:id:{item|_id}\"],\n mode: \"add\",\n property: \"property-runes\",\n value: rune,\n });\n\n addRule(weapon, {\n key: \"CriticalSpecialization\",\n predicate: [\"item:id:{item|_id}\"],\n });\n\n messages.add(\"blade\", {\n uuid: weapon.uuid,\n label: utils.getRunedItemName(weapon),\n selected: utils.getWeaponPropertyRuneLabel(rune),\n });\n },\n});\n\nexport { bladeAlly };\n", "import { createDaily } from \"daily\";\nimport { OneToTen, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst ICON = SYSTEM.path(\"icons/equipment/weapons/wish-knife.webp\");\n\nconst ceremonialKnife = createDaily({\n key: \"ceremonial-knife\",\n condition: (actor) => actor.itemTypes.weapon.some((weapon) => weapon.group === \"knife\"),\n items: [\n {\n slug: \"ceremonial\", // Ceremonial Knife\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.78pkCdFaY8hI07Lj\",\n \"Compendium.pf2e-anachronism.feats.Item.78pkCdFaY8hI07Lj\",\n ),\n required: true,\n },\n ],\n label: (_actor, items) => items.ceremonial.name,\n prepare: (actor) => {\n const rank = Math.ceil((actor.level - 5) / 2);\n return {\n rank: Math.max(rank, 1) as OneToTen,\n };\n },\n rows: (_actor, _items, custom) => {\n return [\n {\n type: \"drop\",\n slug: \"spell\",\n filter: {\n type: \"spell\",\n search: {\n category: [\"spell\"],\n rank: custom.rank,\n },\n },\n },\n ];\n },\n process: async ({ items, rows, custom, messages, addItem }) => {\n const uuid = rows.spell.uuid;\n const rank = custom.rank;\n const label = utils.getSpellWithRankLabel(uuid, rank);\n const source = await utils.createWandSource({\n uuid,\n level: rank,\n itemImg: ICON(),\n itemName: items.ceremonial.name,\n });\n\n addItem(source);\n messages.add(\"ceremonial\", { uuid, label });\n },\n});\n\nexport { ceremonialKnife };\n", "import { createDaily } from \"daily\";\nimport { SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst combatFlexibility = createDaily({\n key: \"combat-flexibility\",\n items: [\n {\n slug: \"combat\", // Combat Flexibility\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.8g6HzARbhfcgilP8\",\n \"Compendium.pf2e-anachronism.class-features.Item.8g6HzARbhfcgilP8\",\n ),\n required: true,\n },\n {\n slug: \"improved\", // Improved Flexibility\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.W2rwudMNcAxs8VoX\",\n \"Compendium.pf2e-anachronism.class-features.Item.W2rwudMNcAxs8VoX\",\n ),\n },\n ],\n label: (_actor, items) => items.combat.name,\n rows: (_actor, items) => {\n return [\n {\n type: \"drop\",\n slug: \"combat\",\n label: `PF2E.Level8`,\n filter: {\n type: \"feat\",\n search: {\n category: [\"class\"],\n traits: [\"fighter\"],\n level: 8,\n },\n },\n },\n {\n type: \"drop\",\n slug: \"improved\",\n label: `PF2E.Level14`,\n filter: {\n type: \"feat\",\n search: {\n category: [\"class\"],\n traits: [\"fighter\"],\n level: 14,\n },\n },\n condition: !!items.improved,\n },\n ];\n },\n process: async ({ items, rows, messages, addFeat }) => {\n const source = await utils.createFeatSource(rows.combat.uuid);\n addFeat(source, items.combat);\n messages.add(\"feats\", { uuid: rows.combat.uuid });\n\n if (rows.improved) {\n const source = await utils.createFeatSource(rows.improved.uuid);\n addFeat(source, items.improved);\n messages.add(\"feats\", { uuid: rows.improved.uuid });\n }\n },\n});\n\nexport { combatFlexibility };\n", "import { createDaily, DailyMessageOptions, DailyRowSelectOption } from \"daily\";\nimport { ActorPF2e, getFlag, ItemPF2e, localize, R, SYSTEM } from \"foundry-helpers\";\n\nconst TACTICAL_EXCELLENCE_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.a7sCZ2ehfsLQutvO\",\n \"Compendium.pf2e-anachronism.feats.Item.a7sCZ2ehfsLQutvO\",\n);\n\nconst COMMANDER_TACTIC_PATH = \"extra.dailies.commander-tactics.tactics\";\n\nconst commanderTactics = createDaily({\n key: \"commander-tactics\",\n items: [\n {\n slug: \"tactics\", // Tactics\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.2IysodKQuf62jmd7\",\n \"Compendium.pf2e-anachronism.class-features.Item.2IysodKQuf62jmd7\",\n ),\n required: true,\n },\n {\n slug: \"commander\", // Commander,\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classes.Item.Oyee5Ds9uwYLEkD0\",\n \"Compendium.pf2e-anachronism.classes.Item.Oyee5Ds9uwYLEkD0\",\n ),\n },\n {\n slug: \"expert\", // Expert Tactician\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.ZvsiPWL9mVZk5Tz1\",\n \"Compendium.pf2e-anachronism.class-features.Item.ZvsiPWL9mVZk5Tz1\",\n ),\n },\n {\n slug: \"master\", // Master Tactician\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.wHVfwjs6LJOgDERO\",\n \"Compendium.pf2e-anachronism.class-features.Item.wHVfwjs6LJOgDERO\",\n ),\n },\n {\n slug: \"legendary\", // Legendary Tactician\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.jMxFu2vsw9ZOw61O\",\n \"Compendium.pf2e-anachronism.class-features.Item.jMxFu2vsw9ZOw61O\",\n ),\n },\n {\n slug: \"efficient\", // Efficient Preparation\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.UvQjCHNAQVhKvTWb\",\n \"Compendium.pf2e-anachronism.feats.Item.UvQjCHNAQVhKvTWb\",\n ),\n },\n {\n slug: \"tactical\", // Tactical Excellence\n uuid: TACTICAL_EXCELLENCE_UUID,\n },\n ],\n label: (_actor, items) => items.tactics.name,\n rows: (actor, { commander, efficient, expert, legendary, master, tactical }) => {\n const uniqueId = foundry.utils.randomID();\n\n const options: DailyRowSelectOption[] = R.pipe(\n actor.itemTypes.action,\n R.filter(isTacticAbility),\n R.map(({ id, name }): DailyRowSelectOption => {\n return { value: id, label: name };\n }),\n );\n\n let extraNbTactics = efficient ? 1 : 0;\n const baseNbTactics = !commander ? 1 : legendary ? 6 : master ? 5 : expert ? 4 : 3;\n\n if (tactical) {\n const sourceId = TACTICAL_EXCELLENCE_UUID();\n const tactics = actor.itemTypes.feat.filter((item) => item.sourceId === sourceId);\n extraNbTactics += tactics.length;\n }\n\n const nbTactics = Math.min(baseNbTactics + extraNbTactics, options.length);\n\n return R.range(1, nbTactics + 1).map((i) => ({\n type: \"select\",\n slug: `ability${i}`,\n label: localize(\"label.ability\", { nb: i }),\n unique: uniqueId,\n order: 100,\n options,\n }));\n },\n process: ({ actor, messages, rows, setExtraFlags }) => {\n const tactics: string[] = [];\n const messageList: DailyMessageOptions[] = [];\n\n for (const id of R.values(rows)) {\n const ability = actor.items.get(id);\n if (!ability) continue;\n\n tactics.push(id);\n messageList.push({ uuid: ability.uuid });\n }\n\n if (tactics.length) {\n setExtraFlags({ tactics });\n\n for (const message of messageList) {\n messages.add(\"tactics\", message);\n }\n }\n },\n});\n\nfunction getCommanderTactics(actor: ActorPF2e) {\n return getFlag(actor, COMMANDER_TACTIC_PATH) ?? [];\n}\n\nfunction isTacticAbility(item: Maybe): item is ItemPF2e {\n return item instanceof Item && item.isOfType(\"action\") && R.isIncludedIn(\"tactic\", item.system.traits.value);\n}\n\nexport { COMMANDER_TACTIC_PATH, commanderTactics, getCommanderTactics, isTacticAbility };\n", "import { createDaily } from \"daily\";\nimport { ChoiceSetRuleElement, FeatPF2e, R, SkillSlug, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst ASSURANCE_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.W6Gl9ePmItfDHji0\",\n \"Compendium.sf2e.feats.Item.W6Gl9ePmItfDHji0\",\n);\n\nconst AUTOMATIC_KNOWLEDGE_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.H3I2X0f7v4EzwxuN\",\n \"Compendium.sf2e.feats.Item.H3I2X0f7v4EzwxuN\",\n);\n\nconst RK_SKILLS = [\"arcana\", \"computers\", \"crafting\", \"nature\", \"occultism\", \"religion\", \"society\"] as SkillSlug[];\n\nconst coreMemories = createDaily({\n key: \"core-memories\",\n items: [\n {\n slug: \"core\", // Core Memories\n uuid: SYSTEM.itemUuid(\n \"Compendium.sf2e-anachronism.class-features.Item.ENxkQJEIkz35yuMT\",\n \"Compendium.sf2e.class-features.Item.ENxkQJEIkz35yuMT\",\n ),\n required: true,\n },\n ],\n label: (_actor, items) => items.core.name,\n rows: (actor) => {\n const skillList = utils.getSkills();\n const actorSkills = actor.skills;\n\n return [\n {\n slug: \"skill\",\n type: \"select\",\n options: skillList.filter(({ value }) => actorSkills[value].rank >= 1),\n },\n ];\n },\n process: async ({ actor, items, messages, rows, addFeat }) => {\n const assuranceUUID = ASSURANCE_UUID();\n const automaticKnowledgeUUID = AUTOMATIC_KNOWLEDGE_UUID();\n const slug = rows.skill as SkillSlug;\n const skill = actor.skills[slug];\n const assurance = (await fromUuid(assuranceUUID))?.toObject();\n if (!assurance) return;\n\n const rule = (assurance.system.rules as ChoiceSetRuleElement[]).find((rule) => rule.flag === \"assurance\");\n\n if (rule) {\n rule.selection = slug;\n }\n\n addFeat(assurance, items.core);\n messages.add(\"memories\", { sourceId: assuranceUUID });\n\n if (skill.rank > 1 && R.isIncludedIn(slug, RK_SKILLS)) {\n const knowledge = (await fromUuid(automaticKnowledgeUUID))?.toObject();\n\n if (knowledge) {\n const label = game.i18n.localize(CONFIG.PF2E.skills[slug].label);\n knowledge.name += ` (${label})`;\n\n knowledge.system.actionType.value = \"free\";\n\n addFeat(knowledge, items.core);\n messages.add(\"memories\", { sourceId: automaticKnowledgeUUID });\n }\n }\n },\n});\n\nexport { coreMemories };\n", "import { createDaily } from \"daily\";\nimport { SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst experimentalSpellshaping = createDaily({\n key: \"experimental-spellshaping\",\n items: [\n {\n slug: \"experimental\", // Experimental Spellshaping\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.89zWKD2CN7nRu2xp\",\n \"Compendium.pf2e-anachronism.class-features.Item.89zWKD2CN7nRu2xp\",\n ),\n required: true,\n condition: (actor) => actor.level >= 4,\n },\n ],\n label: (_actor, items) => items.experimental.name,\n rows: () => {\n return [\n {\n slug: \"feat\",\n type: \"drop\",\n filter: {\n type: \"feat\",\n search: {\n category: [\"class\"],\n traits: [\"spellshape\", \"wizard\"],\n level: \"half\",\n },\n },\n },\n ];\n },\n process: async ({ rows, items, messages, addFeat }) => {\n const uuid = rows.feat.uuid;\n const source = await utils.createFeatSource(uuid);\n\n addFeat(source, items.experimental);\n messages.add(\"feats\", { uuid });\n },\n});\n\nexport { experimentalSpellshaping };\n", "import { createDaily, DailyMessageOptions } from \"daily\";\nimport { HomebrewsMenu } from \"homebrew\";\nimport {\n AbilitySource,\n CharacterPF2e,\n getFlag,\n getItemSource,\n ItemPF2e,\n localize,\n R,\n setFlagProperty,\n sortByLocaleCompare,\n SYSTEM,\n ValueAndMax,\n} from \"foundry-helpers\";\n\nconst SKIP_UNIQUES = [\n \"jevzf9JbJJibpqaI\", // skilled\n \"BXssJhTJjKrfojwG\", // fast movement\n];\n\nfunction getFamiliarAbilityCount(actor: CharacterPF2e) {\n const max = actor.attributes.familiarAbilities.value;\n const flag = getFlag(actor, \"config.dailies.familiar.familiar-range\");\n\n if (!flag) return max;\n if (flag.max === max) return flag.value;\n\n const newValue = flag.value - (flag.max - max);\n return Math.clamp(newValue, 0, max);\n}\n\nconst familiar = createDaily({\n key: \"familiar\",\n condition: (actor) => !!actor.familiar?.isOwner,\n rows: async (actor) => {\n const nbAbilities = getFamiliarAbilityCount(actor);\n const pack = SYSTEM.getPack(\"pf2e.familiar-abilities\", \"pf2e-anachronism.familiar-abilities\");\n if (!nbAbilities || !pack) return [];\n\n const uniqueId = foundry.utils.randomID();\n const options = pack.index.map(({ _id, uuid, name }) => ({\n value: uuid,\n label: name,\n skipUnique: SKIP_UNIQUES.includes(_id),\n }));\n\n for (const { entry } of HomebrewsMenu.getEntries(\"familiar\")) {\n options.push({\n value: entry.uuid,\n label: entry.name,\n skipUnique: false,\n });\n }\n\n sortByLocaleCompare(options, \"label\");\n\n return R.range(1, nbAbilities + 1).map((i) => ({\n type: \"select\",\n slug: `ability${i}`,\n label: localize(\"label.ability\", { nb: i }),\n unique: uniqueId,\n order: 100,\n options,\n }));\n },\n process: async ({ actor, rows, messages }) => {\n const familiar = actor.familiar;\n if (!familiar) return;\n\n const abilities: AbilitySource[] = [];\n const messageList: DailyMessageOptions[] = [];\n\n await Promise.all(\n Object.values(rows).map(async (value) => {\n const item = await fromUuid(value);\n if (!item?.isOfType(\"action\")) return;\n\n const source = getItemSource(item);\n setFlagProperty(source, \"temporary\", true);\n\n abilities.push(source);\n messageList.push({ uuid: item });\n }),\n );\n\n if (abilities.length) {\n for (const ability of abilities) {\n await familiar.createEmbeddedDocuments(\"Item\", [ability]);\n }\n\n for (const message of messageList) {\n messages.add(\"familiar\", message);\n }\n }\n },\n rest: async ({ actor }) => {\n const familiar = actor.familiar;\n if (!familiar?.isOwner) return;\n\n const ids = familiar.itemTypes.action.filter((item) => getFlag(item, \"temporary\")).map((item) => item.id);\n\n if (ids.length) {\n await familiar.deleteEmbeddedDocuments(\"Item\", ids);\n }\n },\n config: (actor) => {\n if (!actor.familiar?.isOwner) return;\n\n return [\n {\n type: \"range\",\n name: \"familiar-range\",\n value: getFamiliarAbilityCount(actor),\n max: actor.attributes.familiarAbilities.value,\n dispatchUpdateEvent: true,\n saveMaxValue: true,\n },\n ];\n },\n});\n\nexport { familiar, getFamiliarAbilityCount };\n", "import { createDaily } from \"daily\";\nimport { ItemUUID, Language } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nfunction createLanguageDaily(key: string, uuid: ItemUUID | (() => ItemUUID)) {\n return createDaily({\n key,\n items: [\n {\n slug: \"item\",\n uuid,\n required: true,\n },\n ],\n label: (_actor, items) => items.item.name,\n rows: (actor) => {\n const languageList = utils.getLanguages();\n const actorLanguages = actor.system.details.languages.value;\n const options = languageList.filter(({ value }) => !actorLanguages.includes(value));\n\n return [\n {\n type: \"select\",\n slug: \"language\",\n options,\n },\n ];\n },\n process: ({ rows, items, messages, addRule }) => {\n const language = rows.language as Language;\n const source = utils.createLanguageRuleElement({ language });\n\n addRule(items.item, source);\n messages.add(\"languages\", {\n uuid: items.item,\n selected: utils.getLanguageLabel(language),\n });\n },\n });\n}\n\nexport { createLanguageDaily };\n", "import { createDaily, DailyRowSelectOption } from \"daily\";\nimport { utils } from \"utils\";\nimport {\n CharacterPF2e,\n DamageDieSize,\n getActorSize,\n localize,\n MODULE,\n PreciousMaterialType,\n R,\n SYSTEM,\n waitDialog,\n WeaponPropertyRuneType,\n WeaponSource,\n WeaponTrait,\n ZeroToFour,\n} from \"foundry-helpers\";\n\nconst metallicUUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.8KUvJuAWCoxWg5FH\",\n \"Compendium.pf2e-anachronism.feats.Item.8KUvJuAWCoxWg5FH\",\n);\n\nconst weaponSlug = \"mind-weapon\";\n\nconst weaponBases: { die: DamageDieSize; traits: WeaponTrait[]; usage: WeaponUsage }[] = [\n { die: \"d4\", traits: [\"finesse\", \"agile\"], usage: \"held-in-one-hand\" },\n { die: \"d6\", traits: [\"finesse\"], usage: \"held-in-one-hand\" },\n { die: \"d8\", traits: [], usage: \"held-in-one-hand\" },\n { die: \"d10\", traits: [\"reach\"], usage: \"held-in-two-hands\" },\n];\n\nconst weaponDamages = {\n slashing: \"sword\",\n bludgeoning: \"club\",\n piercing: \"spear\",\n} as const;\n\nconst mentalForgeTraits = [\"grapple\", \"modular\", \"nonlethal\", \"shove\", \"trip\"] as const;\n\nconst metallicMaterials = [\"cold-iron\", \"silver\"] as const;\n\n// disrupting = vitalizing\nconst runicRunes = [\"corrosive\", \"disrupting\", \"flaming\", \"frost\", \"shock\", \"thundering\"] as const;\n\n// greaterDisrupting = greaterVitalizing\nconst advancedRunes = [\n \"greaterCorrosive\",\n \"greaterDisrupting\",\n \"greaterFlaming\",\n \"greaterFrost\",\n \"greaterShock\",\n \"greaterThundering\",\n \"holy\",\n \"unholy\",\n] as const;\n\nconst mindSmith = createDaily({\n key: \"mind-smith\",\n items: [\n {\n slug: \"mind\", // Mind Smith Dedication\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.juikoiIA0Jy8PboY\",\n \"Compendium.pf2e-anachronism.feats.Item.juikoiIA0Jy8PboY\",\n ),\n required: true,\n },\n {\n slug: \"mental\", // Malleable Mental Forge\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.PccekOihIbRWdDky\",\n \"Compendium.pf2e-anachronism.feats.Item.PccekOihIbRWdDky\",\n ),\n },\n {\n slug: \"metallic\", // Metallic Envisionment\n uuid: metallicUUID,\n },\n {\n slug: \"runic\", // Runic Mind Smithing\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.2uQbQgz1AbjzcFSp\",\n \"Compendium.pf2e-anachronism.feats.Item.2uQbQgz1AbjzcFSp\",\n ),\n },\n {\n slug: \"advanced\", // Advanced Runic Mind Smithing\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.fgnfXwFcn9jZlXGD\",\n \"Compendium.pf2e-anachronism.feats.Item.fgnfXwFcn9jZlXGD\",\n ),\n },\n ],\n label: (_actor, items) => items.mind.name,\n rows: (actor, items) => {\n const weapon = actor.itemTypes.weapon.find((weapon) => weapon.slug === weaponSlug);\n\n if (!weapon) {\n return [\n {\n type: \"alert\",\n slug: \"alert\",\n message: localize(\"interface.mindsmith.missing\"),\n resolve: () => createMindWeapon(actor),\n },\n ];\n }\n\n const selectThat = (that: string) => {\n return localize(\"label.select\", {\n that: game.i18n.localize(that),\n });\n };\n\n const arrayToOptions = (\n truthy: boolean,\n arr: ReadonlyArray,\n labelizer: (value: T) => string,\n ): DailyRowSelectOption[] => {\n return truthy\n ? R.pipe(\n arr,\n R.map((value) => ({\n value,\n label: labelizer(value),\n })),\n R.sortBy([R.prop(\"label\"), \"asc\"]),\n )\n : [];\n };\n\n const mentalUniqueId = foundry.utils.randomID();\n const mentalOptions = arrayToOptions(!!items.mental, mentalForgeTraits, utils.getWeaponTraitLabel);\n const canHaveRune = (!!items.runic || !!items.advanced) && utils.hasFreePropertySlot(weapon);\n\n return [\n {\n type: \"select\",\n slug: \"damage\",\n label: selectThat(\"PF2E.WeaponGroupLabel\"),\n options: R.pipe(\n R.keys(weaponDamages),\n R.map((damage) => ({\n value: damage,\n label: damageLabel(damage),\n })),\n R.sortBy([R.prop(\"label\"), \"asc\"]),\n ),\n },\n {\n type: \"select\",\n slug: `trait1`,\n label: \"PF2E.NPC.AddTrait\",\n options: mentalOptions,\n unique: mentalUniqueId,\n condition: !!items.mental,\n },\n {\n type: \"select\",\n slug: `trait2`,\n label: \"PF2E.NPC.AddTrait\",\n options: mentalOptions,\n unique: mentalUniqueId,\n condition: !!items.mental,\n },\n {\n type: \"select\",\n slug: \"material\",\n label: \"PF2E.PreciousMaterialLabel\",\n options: arrayToOptions(!!items.metallic, metallicMaterials, utils.getPreciousMaterialLabel),\n condition: !!items.metallic,\n },\n {\n type: \"select\",\n slug: \"rune\",\n label: MODULE.path(\"label.rune\"),\n options: arrayToOptions(\n canHaveRune,\n items.advanced ? advancedRunes : runicRunes,\n utils.getWeaponPropertyRuneLabel,\n ),\n condition: canHaveRune,\n },\n ];\n },\n process: ({ actor, items, rows, messages, updateItem, addRule }) => {\n const weapon = actor.itemTypes.weapon.find((weapon) => weapon.slug === weaponSlug);\n if (!weapon) return;\n\n const damage = rows.damage as keyof typeof weaponDamages;\n\n updateItem({\n _id: weapon.id,\n \"system.damage.damageType\": damage,\n \"system.group\": weaponDamages[damage],\n });\n\n messages.add(\"mindsmith\", {\n uuid: items.mind,\n label: localize(\"label.mind-smith\"),\n selected: damageLabel(damage),\n });\n\n const itemPredicate = [{ or: [\"item:category:{item|_id}\", \"item:id:{item|_id}\"] }];\n\n const traits = R.pipe(\n [1, 2] as const,\n R.map((i) => rows[`trait${i}`] as WeaponTrait),\n R.filter(R.isTruthy),\n );\n\n for (const trait of traits) {\n addRule(weapon, {\n key: \"ItemAlteration\",\n itemType: \"weapon\",\n mode: \"add\",\n property: \"traits\",\n predicate: itemPredicate,\n value: trait,\n });\n }\n\n if (traits.length) {\n messages.add(\"mindsmith\", {\n uuid: items.mental,\n label: localize(\"label.mind-mental\"),\n selected: traits.map(utils.getWeaponTraitLabel).join(\" & \"),\n });\n }\n\n if (rows.material) {\n const material = rows.material as PreciousMaterialType;\n\n addRule(weapon, {\n key: \"ItemAlteration\",\n itemType: \"weapon\",\n mode: \"override\",\n property: \"material-type\",\n predicate: itemPredicate,\n value: material,\n });\n\n messages.add(\"mindsmith\", {\n uuid: items.metallic ?? metallicUUID(),\n selected: utils.getPreciousMaterialLabel(material),\n });\n }\n\n if (rows.rune && utils.hasFreePropertySlot(weapon)) {\n const rune = rows.rune as WeaponPropertyRuneType;\n\n addRule(weapon, {\n key: \"AdjustStrike\",\n definition: itemPredicate,\n mode: \"add\",\n property: \"property-runes\",\n value: rows.rune,\n });\n\n messages.add(\"mindsmith\", {\n uuid: items.advanced ?? items.runic,\n label: localize(\"label.mind-runic\"),\n selected: utils.getWeaponPropertyRuneLabel(rune),\n });\n }\n },\n});\n\nasync function createMindWeapon(actor: CharacterPF2e) {\n const weaponRows = weaponBases.map(({ die, traits, usage }, i) => {\n const checked = i === 1 ? \"checked\" : \"\";\n const label = localize(\"dialog.mind-weapon.label\", {\n die,\n hand: localize(\"dialog.mind-weapon\", usage),\n hasTrait: traits.length\n ? localize(\"dialog.mind-weapon\", traits.length === 1 ? \"oneTrait\" : \"twoTraits\", {\n trait1: utils.getWeaponTraitLabel(traits[0]),\n trait2: traits[1] ? utils.getWeaponTraitLabel(traits[1]) : \"\",\n })\n : \"\",\n });\n\n return ``;\n });\n\n const flavor = `
${localize(\"dialog.mind-weapon.flavor\")}
`;\n\n const potencyRunes = R.pipe(\n R.range(0, 5) as ZeroToFour[],\n R.map((i) => {\n const label = i ? utils.getWeaponPotencyRuneLabel(i) : \"\";\n return ``;\n }),\n );\n\n const runeSelect = `
\n \n
\n \n
\n
`;\n\n const selection = await waitDialog({\n classes: [\"pf2e-dailies-mind-weapon\"],\n content: flavor + weaponRows.join(\"\") + runeSelect,\n i18n: \"dialog.mind-weapon\",\n position: {\n width: 600,\n },\n yes: {\n icon: \"fa-solid fa-save\",\n },\n });\n\n if (!selection) return false;\n\n const { die, traits, usage } = weaponBases[Number(selection.type)];\n\n const source: PreCreate = {\n type: \"weapon\",\n name: localize(\"mindsmith.weapon.name\"),\n img: SYSTEM.relativePath(\"icons/spells/disrupting-weapons.webp\"),\n system: {\n slug: weaponSlug,\n level: { value: actor.level },\n category: \"martial\",\n damage: {\n damageType: \"slashing\",\n die: die,\n dice: 1,\n },\n size: getActorSize(actor).value,\n traits: {\n value: traits,\n },\n usage: {\n value: usage,\n },\n runes: {\n potency: Number(selection.rune) as ZeroToFour,\n },\n },\n };\n\n await actor.createEmbeddedDocuments(\"Item\", [source]);\n\n return true;\n}\n\nfunction damageLabel(damage: keyof typeof weaponDamages) {\n const damageLabel = utils.getWeaponDamageLabel(damage);\n const groupLabel = utils.getWeaponGroupLabel(weaponDamages[damage]);\n return `${groupLabel} (${damageLabel})`;\n}\n\ntype WeaponUsage = \"worngloves\" | \"held-in-one-hand\" | \"held-in-one-plus-hands\" | \"held-in-two-hands\";\n\nexport { mindSmith };\n", "import { createDaily } from \"daily\";\nimport { ConsumablePF2e, localize, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst rationsUUID = SYSTEM.itemUuid(\"Compendium.pf2e.equipment-srd.Item.L9ZV076913otGtiB\");\n\nconst rations = createDaily({\n key: \"rations\",\n items: [\n {\n slug: \"rations\",\n uuid: rationsUUID, // Rations\n required: true,\n },\n ],\n label: (_actor, items) => items.rations.name,\n rows: (_actor, items) => {\n const rations = items.rations as ConsumablePF2e;\n const { value, max } = rations.uses;\n const remaining = (rations.quantity - 1) * max + value;\n const last = remaining <= 1;\n\n return [\n {\n slug: \"rations\",\n type: \"select\",\n order: 200,\n save: false,\n options: [\n {\n value: \"false\",\n label: localize(\"interface.rations.no\"),\n },\n {\n value: \"true\",\n label: last\n ? localize(\"interface.rations.last\")\n : localize(\"interface.rations.yes\", { nb: remaining }),\n },\n ],\n },\n ];\n },\n process: ({ rows, items, messages, updateItem, deleteItem }) => {\n if (rows.rations !== \"true\") return;\n\n const rations = items.rations as ConsumablePF2e;\n let { value, max } = rations.uses;\n let quantity = rations.quantity;\n\n if (value > 1) {\n updateItem({\n _id: rations.id,\n \"system.uses.value\": --value,\n });\n } else if (quantity > 1) {\n updateItem({\n _id: rations.id,\n \"system.quantity\": --quantity,\n \"system.uses.value\": (value = max),\n });\n } else {\n deleteItem(rations);\n quantity = 0;\n value = 0;\n }\n\n const remaining = (quantity - 1) * max + value;\n const name = utils.createChatLink(rationsUUID(), rations.name);\n const message =\n remaining < 1\n ? localize(\"message.rations.last\", { name })\n : remaining < 3\n ? localize(\"message.rations.almost\", { name, nb: remaining })\n : localize(\"message.rations.used\", { name, nb: remaining });\n\n messages.addRaw(message, 200);\n },\n});\n\nexport { rations };\n", "import { createDaily } from \"daily\";\nimport { ItemUUID, ResistanceType, sortByLocaleCompare } from \"foundry-helpers\";\nimport { SimplifiableRuleValue, utils } from \"utils\";\n\nfunction createResistanceDaily(\n key: string,\n uuid: ItemUUID | (() => ItemUUID),\n resistances: ResistanceType[],\n resistance: SimplifiableRuleValue,\n isRandom = false,\n) {\n return createDaily({\n key,\n items: [\n {\n slug: \"item\",\n uuid,\n required: true,\n },\n ],\n label: (_actor, items) => items.item.name,\n rows: () => {\n const options = resistances.map((value) => ({\n value,\n label: utils.getResistanceLabel(value, true),\n }));\n\n sortByLocaleCompare(options, \"label\");\n\n return [\n {\n type: isRandom ? \"random\" : \"select\",\n slug: \"resistance\",\n options,\n },\n ];\n },\n process: ({ rows, items, messages, addRule, removeRule }) => {\n const type = rows.resistance as ResistanceType;\n const source = utils.createResistanceRuleElement({\n type,\n value: resistance,\n });\n\n removeRule(items.item, (rule) => rule.key !== \"FlatModifier\");\n addRule(items.item, source);\n\n messages.add(\"resistances\", {\n uuid: items.item,\n selected: utils.getResistanceLabel(type),\n random: isRandom,\n });\n },\n });\n}\n\nexport { createResistanceDaily };\n", "import { createDaily } from \"daily\";\nimport { SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst effectUUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feat-effects.Item.jO7wMhnjT7yoAtQg\",\n \"Compendium.pf2e-anachronism.feat-effects.Item.jO7wMhnjT7yoAtQg\",\n);\n\nconst rootMagic = createDaily({\n key: \"root-magic\",\n items: [\n {\n slug: \"root\", // Root Magic\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.22P7IFyhrF7Fbw8B\",\n \"Compendium.pf2e-anachronism.feats.Item.22P7IFyhrF7Fbw8B\",\n ),\n required: true,\n },\n ],\n label: (_actor, items) => items.root.name,\n rows: (actor) => {\n return [\n {\n type: \"select\",\n slug: \"target\",\n options: utils.getActors(actor).map((a) => ({ value: a.id, label: a.name })),\n },\n ];\n },\n process: ({ rows, messages }) => {\n const actor = game.actors.get(rows.target);\n if (actor) {\n messages.add(\"root\", { uuid: effectUUID(), selected: actor.name });\n }\n },\n});\n\nexport { rootMagic };\n", "import { createDaily, DailyRowDropSpell } from \"daily\";\nimport { ItemUUID, OneToSix, R } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\ntype OneToSeven = OneToSix | 7;\n\nfunction createScrollChainDaily(\n key: string,\n uuids: [ItemUUID | (() => ItemUUID), ItemUUID | (() => ItemUUID), ItemUUID | (() => ItemUUID)],\n) {\n return createDaily({\n key,\n items: [\n {\n slug: \"trained\",\n uuid: uuids[0],\n required: true,\n },\n {\n slug: \"expert\",\n uuid: uuids[1],\n },\n {\n slug: \"master\",\n uuid: uuids[2],\n },\n ],\n label: (_actor, items) => items.trained.name,\n rows: (actor, items) => {\n const level = actor.level;\n const ranks: OneToSeven[] = [1];\n\n if (level >= 8) ranks.push(2);\n\n if (items.expert) {\n ranks.push(3);\n if (level >= 14) ranks.push(4);\n if (level >= 16) ranks.push(5);\n }\n\n if (items.master) {\n ranks.push(6);\n if (level >= 20) ranks.push(7);\n }\n\n return ranks.map(\n (rank): DailyRowDropSpell => ({\n type: \"drop\",\n slug: `rank${rank}`,\n label: utils.getSpellRankLabel(rank),\n filter: {\n type: \"spell\",\n search: {\n category: [\"spell\"],\n rank,\n rarity: [\"common\"],\n },\n },\n }),\n );\n },\n process: async ({ rows, messages, addItem }) => {\n for (const rank of R.range(1, 8) as OneToSeven[]) {\n const { uuid } = rows[`rank${rank}`] ?? {};\n if (!uuid) continue;\n\n const label = utils.getSpellWithRankLabel(uuid, rank);\n const source = await utils.createSpellScrollSource({\n uuid,\n level: rank,\n });\n\n addItem(source);\n messages.add(\"scrolls\", { uuid, label });\n }\n },\n });\n}\n\nexport { createScrollChainDaily };\n", "import { createDaily, DailyRowDropSpell } from \"daily\";\nimport { OneToTen, R, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst scrollAdept = createDaily({\n key: \"scroll-adept\",\n items: [\n {\n slug: \"adept\", // Scroll Adept\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.u5DBg0LrBUKP0JsJ\",\n \"Compendium.pf2e-anachronism.feats.Item.u5DBg0LrBUKP0JsJ\",\n ),\n required: true,\n },\n ],\n label: (_actor, items) => items.adept.name,\n prepare: (actor) => {\n const maxRank = utils.getSpellcastingMaxRank(actor, { tradition: \"arcane\" });\n const proficiency = actor.system.proficiencies.spellcasting.rank;\n\n const ranks = R.pipe(\n R.range(2, Math.clamp(proficiency, 2, 4) + 2),\n R.map((r): { rank: OneToTen; row: `rank${OneToTen}` } => {\n const rank = (maxRank - r) as OneToTen;\n return {\n rank,\n row: `rank${rank}`,\n };\n }),\n R.filter(({ rank }) => rank > 0),\n );\n\n return { ranks };\n },\n rows: (_actor, _items, custom) => {\n return custom.ranks.map(\n ({ rank, row }): DailyRowDropSpell => ({\n slug: row,\n type: \"drop\",\n label: utils.getSpellRankLabel(rank),\n filter: {\n type: \"spell\",\n search: {\n category: [\"spell\"],\n traditions: [\"arcane\"],\n rank,\n },\n },\n }),\n );\n },\n process: async ({ rows, custom, messages, addItem }) => {\n for (const data of custom.ranks) {\n const { uuid } = rows[data.row];\n if (!uuid) continue;\n\n const label = utils.getSpellWithRankLabel(uuid, data.rank);\n const source = await utils.createSpellScrollSource({\n uuid,\n level: data.rank,\n });\n\n addItem(source);\n messages.add(\"scrolls\", { uuid, label });\n }\n },\n});\n\nexport { scrollAdept };\n", "import { createDaily } from \"daily\";\nimport { ItemUUID, OneToFour, SkillSlug, ZeroToFour } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nfunction createComboSkillDaily(\n key: string,\n uuid: ItemUUID | (() => ItemUUID),\n { rank = 1, removeRules = true, label }: { label?: string; rank?: OneToFour; removeRules?: boolean } = {},\n) {\n return createDaily({\n key,\n items: [\n {\n slug: \"item\",\n uuid,\n required: true,\n },\n ],\n label: (_actor, items) => label ?? items.item.name,\n rows: (actor) => {\n const skillList = utils.getSkills();\n const actorSkills = actor.skills;\n const options = skillList.filter(({ value }) => actorSkills[value].rank === rank - 1);\n\n return [\n {\n slug: \"skill\",\n type: \"combo\",\n label: \"PF2E.ProficiencyLevel1\",\n unique: `skill-${rank}`,\n options,\n },\n ];\n },\n process: ({ rows, items, messages, addItem, addRule, removeRule }) => {\n let selected = rows.skill.selected;\n\n if (removeRules) {\n removeRule(items.item, () => true);\n }\n\n if (rows.skill.input) {\n const source = utils.createLoreSource({ name: selected, rank });\n addItem(source);\n } else {\n const skill = selected as SkillSlug;\n const source = utils.createSkillRuleElement({\n skill,\n value: rank,\n });\n\n selected = utils.getSkillLabel(skill);\n addRule(items.item, source);\n }\n\n messages.add(\"skills\", { uuid: items.item, selected });\n },\n });\n}\n\nfunction createLoreSkillDaily(\n key: string,\n uuid: ItemUUID | (() => ItemUUID),\n { label, rank = 1 }: { label?: string; rank?: ZeroToFour } = {},\n) {\n return createDaily({\n key,\n items: [\n {\n slug: \"item\",\n uuid,\n required: true,\n },\n ],\n label: (_actor, items) => label ?? items.item.name,\n rows: () => {\n return [\n {\n type: \"input\",\n slug: \"lore\",\n },\n ];\n },\n process: ({ items, rows, messages, addItem }) => {\n const source = utils.createLoreSource({ name: rows.lore, rank });\n addItem(source);\n messages.add(\"skills\", { uuid: items.item, selected: rows.lore });\n },\n });\n}\n\nexport { createComboSkillDaily, createLoreSkillDaily };\n", "import { z, zDocumentId, zTradition } from \"foundry-helpers\";\n\nfunction zStatistic() {\n return z.object({\n slug: z.string().nonempty(),\n tradition: zTradition(),\n });\n}\n\nfunction zStaffData() {\n return z.object({\n staffId: zDocumentId(true),\n charges: z.object({\n value: z.number(),\n max: z.number(),\n }),\n expended: z.boolean(),\n spells: z.array(z.record(z.string(), z.any())),\n statistic: zStatistic().optional(),\n });\n}\n\nexport { zStaffData };\n", "import {\n CharacterPF2e,\n createHTMLElement,\n EquipmentPF2e,\n getActorMaxRank,\n getFlag,\n htmlQueryAll,\n ItemPF2e,\n NPCPF2e,\n OneToTen,\n R,\n setFlag,\n SpellcastingEntryPF2e,\n SpellSource,\n WeaponPF2e,\n ZeroToTen,\n} from \"foundry-helpers\";\nimport { getUuidFromInlineMatch } from \"utils\";\nimport { zStaffData } from \".\";\n\nconst LABEL_REGEX = /\\d+/;\nconst UUID_REGEX = /@(uuid|compendium)\\[([a-z0-9\\._-]+)\\]/gi;\n\nlet _staffData: ReturnType | undefined;\n\nfunction getStaffData(actor: CharacterPF2e): dailies.StaffFlags | undefined {\n const flag = getFlag(actor, \"extra.dailies.staves\");\n return (_staffData ??= zStaffData()).safeParse(flag).data as dailies.StaffFlags | undefined;\n}\n\nfunction canCastRank(actor: TPArent, rank: number) {\n const staffFlags = getStaffData(actor);\n if (!staffFlags) return null;\n\n const staff = actor.inventory.get(staffFlags.staffId);\n if (!staff) return null;\n\n if (rank === 0) return true;\n\n const maxRank = getActorMaxRank(actor);\n if (rank > maxRank) return false;\n\n const charges = staffFlags.charges.value;\n\n if (charges < 1) return false;\n if (charges >= rank) return true;\n\n if (staffFlags.expended && charges < rank) return false;\n\n const range = R.range(rank, maxRank + 1) as OneToTen[];\n const entries = actor.spellcasting.filter(\n (entry): entry is SpellcastingEntryPF2e => entry.category === \"spontaneous\",\n );\n\n const nbSlots = R.pipe(\n entries,\n R.flatMap((e) => range.map((r) => e.system.slots[`slot${r}`])),\n R.filter((d) => d.max > 0),\n R.sumBy(R.prop(\"value\")),\n );\n\n return nbSlots >= 1;\n}\n\nfunction setStaffChargesValue(actor: CharacterPF2e, value?: number) {\n const charges = getStaffData(actor)?.charges;\n if (!charges || (value != null && charges.value === value)) return;\n\n return setFlag(actor, \"extra.dailies.staves.charges.value\", Math.clamp(value ?? charges.max, 0, charges.max));\n}\n\nfunction isStaff(item: ItemPF2e) {\n const traits = item.system.traits?.value;\n\n return (\n traits?.includes(\"staff\") &&\n (item.isOfType(\"weapon\") || (item.isOfType(\"equipment\") && traits.includes(\"coda\"))) &&\n item.isMagical\n );\n}\n\nfunction getStaves(actor: TActor): ActorStaff[] {\n return [\n ...actor.itemTypes.weapon.filter(isStaff),\n ...actor.itemTypes.equipment.filter(isStaff),\n ] as ActorStaff[];\n}\n\nasync function getSpells(\n item: Maybe,\n maxRank: number,\n entryId: string | null = null,\n): Promise {\n if (!item) return [];\n\n const descriptionEl = createHTMLElement(\"div\", { content: item.description });\n const spellLists = descriptionEl.querySelectorAll(\"ul\");\n const spellList = spellLists[spellLists.length - 1];\n if (!spellList) return [];\n\n const spellsData = R.pipe(\n htmlQueryAll(spellList, \"li\"),\n R.flatMap((SpellRankEL) => {\n const label = (SpellRankEL.firstChild as HTMLElement).textContent.split(\"@\")[0];\n const rank = Number(label.match(LABEL_REGEX)?.[0] || \"0\") as ZeroToTen;\n const text = SpellRankEL.textContent ?? \"\";\n const uuids = Array.from(text.matchAll(UUID_REGEX)).map(getUuidFromInlineMatch);\n\n return uuids.map((uuid) => ({ rank, uuid }));\n }),\n R.filter(({ rank }) => rank <= maxRank),\n );\n\n const spells = await Promise.all(\n spellsData.map(async ({ rank, uuid }) => {\n const spell = await fromUuid(uuid);\n if (!(spell instanceof Item) || !spell.isOfType(\"spell\")) return;\n\n const source = spell.toObject();\n\n source._id = foundry.utils.randomID();\n source.system.location.value = entryId;\n\n if (!spell.isCantrip && rank !== spell.baseRank) {\n source.system.location.heightenedLevel = rank;\n }\n\n return source;\n }),\n );\n\n return R.filter(spells, R.isTruthy);\n}\n\ntype ActorStaff =\n EquipmentPF2e | WeaponPF2e;\n\nexport { canCastRank, getSpells, getStaffData, getStaves, isStaff, setStaffChargesValue };\nexport type { ActorStaff };\n", "import { createDaily, DailyRowSelect, DailyRowSelectOption, DailyRowSelectOptionValue } from \"daily\";\nimport {\n CharacterPF2e,\n FeatPF2e,\n findItemWithSourceId,\n localize,\n R,\n SlotKey,\n SpellcastingEntryPF2e,\n SYSTEM,\n WeaponPF2e,\n ZeroToTen,\n} from \"foundry-helpers\";\nimport { utils } from \"utils\";\nimport { getSpells, getStaves, isStaff } from \".\";\n\nconst STAFF_NEXUS = SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.Klb35AwlkNrq1gpB\",\n \"Compendium.pf2e-anachronism.class-features.Item.Klb35AwlkNrq1gpB\",\n);\n\nconst RUNELORD_SINS = SYSTEM.uuids([\n [\n \"Compendium.pf2e.classfeatures.Item.Fh5Khtx5bgGpBeOu\",\n \"Compendium.pf2e-anachronism.class-features.Item.Fh5Khtx5bgGpBeOu\",\n ], // envy\n [\n \"Compendium.pf2e.classfeatures.Item.hzATJ1FV3lTPgeG9\",\n \"Compendium.pf2e-anachronism.class-features.Item.hzATJ1FV3lTPgeG9\",\n ], // gluttony\n [\n \"Compendium.pf2e.classfeatures.Item.COMhWWNBJOdaJqp7\",\n \"Compendium.pf2e-anachronism.class-features.Item.COMhWWNBJOdaJqp7\",\n ], // greed\n [\n \"Compendium.pf2e.classfeatures.Item.MpZ0sdwMJ8fdZmtR\",\n \"Compendium.pf2e-anachronism.class-features.Item.MpZ0sdwMJ8fdZmtR\",\n ], // lust\n [\n \"Compendium.pf2e.classfeatures.Item.GI09dKNZVCPdSGZC\",\n \"Compendium.pf2e-anachronism.class-features.Item.GI09dKNZVCPdSGZC\",\n ], // pride\n [\n \"Compendium.pf2e.classfeatures.Item.cz9fwc6KSkqxD3Nn\",\n \"Compendium.pf2e-anachronism.class-features.Item.cz9fwc6KSkqxD3Nn\",\n ], // sloth\n [\n \"Compendium.pf2e.classfeatures.Item.wtPywk3wqEg3iYOP\",\n \"Compendium.pf2e-anachronism.class-features.Item.wtPywk3wqEg3iYOP\",\n ], // wrath\n]);\n\nconst staves = createDaily({\n key: \"staves\",\n condition: (actor) => {\n return (\n actor.itemTypes.weapon.some(isStaff) ||\n actor.itemTypes.equipment.some(isStaff) ||\n (!!getRunelordSin(actor) && getPotentialBonds(actor).length > 0)\n );\n },\n prepare: (actor) => {\n const entries = actor.spellcasting.spellcastingFeatures;\n\n let maxCharges = 0;\n const actorCharges = utils.getActorMaxRank(actor);\n const specialStatistic = actor.getStatistic(\"kinetic-activation\");\n\n if (specialStatistic) {\n maxCharges = Math.max(maxCharges, actorCharges);\n } else {\n maxCharges = utils.getSpellcastingMaxRank(actor, { rankLimit: actorCharges });\n }\n\n if (!maxCharges) {\n return {};\n }\n\n const preparedEntries: Record = {};\n\n for (const entry of entries.filter((entry) => entry.isPrepared)) {\n if (entry.flags[\"pf2e-team-plus-magic\"]?.isEssence) continue;\n\n const entryId = entry.id;\n const isFlexible = entry.isFlexible;\n\n for (let rank = 1; rank <= 10; rank++) {\n const slotKey = `slot${rank}` as SlotKey;\n const data = entry.system.slots[slotKey];\n\n if (data.max < 1) continue;\n\n if (isFlexible) {\n if (data.value < 1) continue;\n\n preparedEntries[entryId] ??= {\n id: entryId,\n name: entry.name,\n slots: [],\n };\n\n (preparedEntries[entryId] as FlexiblePreparedEntryGroup).slots.push({\n rank: rank as ZeroToTen,\n value: data.value,\n max: data.max,\n });\n } else {\n for (const [index, { id, expended }] of Object.entries(data.prepared)) {\n if (expended) continue;\n\n const spell = id ? entry.spells?.get(id) : undefined;\n\n preparedEntries[entryId] ??= {\n id: entryId,\n name: entry.name,\n spells: [],\n };\n\n (preparedEntries[entryId] as PreparedEntryGroup).spells.push({\n name: spell?.name,\n rank: rank as ZeroToTen,\n index: Number(index),\n });\n }\n }\n }\n\n (preparedEntries[entryId] as PreparedEntryGroup | undefined)?.spells?.sort((a, b) => a.rank - b.rank);\n }\n\n const runelordSin = getRunelordSin(actor);\n\n return { entries, maxCharges, preparedEntries, runelordSin, specialStatistic };\n },\n rows: (actor, _items, custom) => {\n if (!custom.entries) {\n return [];\n }\n\n const rows = [] as (\n | DailyRowSelect<`expend${number}`>\n | DailyRowSelect<\"nexus\">\n | DailyRowSelect<\"staff\">\n | DailyRowSelect<\"bond\">\n )[];\n\n const isRunelord = !!custom.runelordSin;\n const hasStaffNexus = !!findItemWithSourceId(actor, STAFF_NEXUS(), \"feat\");\n\n const weapons = isRunelord\n ? getPotentialBonds(actor).map((weapon) => {\n return { value: weapon.id, label: weapon.name };\n })\n : [];\n\n const hasBond = weapons.length > 0;\n\n if (hasBond) {\n rows.push({\n type: \"select\",\n slug: \"bond\",\n label: localize(\"staves.bond\"),\n options: weapons,\n });\n }\n\n const staves = getStaves(actor).map((staff) => {\n return { value: staff.id, label: staff.name };\n });\n\n if (staves.length) {\n const stavesRow = {\n type: \"select\",\n slug: \"staff\",\n label: \"PF2E.Weapon.Base.staff\",\n empty: true,\n unique: \"staff\",\n options: hasBond || hasStaffNexus ? [{ value: \"\", label: \"\" }, ...staves] : staves,\n } as const satisfies DailyRowSelect;\n\n if (hasStaffNexus) {\n rows.push(\n {\n ...stavesRow,\n slug: \"nexus\",\n label: localize(\"interface.staves.makeshift\"),\n },\n {\n ...stavesRow,\n label: localize(\"interface.staves.regular\"),\n },\n );\n } else {\n rows.push(stavesRow);\n }\n }\n\n const preparedEntries = Object.values(custom.preparedEntries);\n\n if (!preparedEntries.length) {\n return rows;\n }\n\n const level = actor.level;\n const options: DailyRowSelectOption[] = [{ value: \"\", label: \"\" }];\n const flexibleLabel = localize(\"interface.staves.flexible\");\n const emptyLabel = localize(\"interface.staves.empty\");\n const nbExpends = hasStaffNexus && level >= 8 ? (level >= 16 ? 3 : 2) : 1;\n\n for (const entry of Object.values(preparedEntries)) {\n options.push({ group: entry.name });\n\n if (\"slots\" in entry) {\n for (let index = 0; index < entry.slots.length; index++) {\n const slot = entry.slots[index];\n const rankLabel = utils.getSpellRankLabel(slot.rank);\n const uniqueKey = `${entry.id}.slots.${index}`;\n const option: DailyRowSelectOptionValue = {\n value: uniqueKey,\n label: `${flexibleLabel} ${slot.value}/${slot.max} (${rankLabel})`,\n };\n\n if (slot.value >= nbExpends) {\n option.skipUnique = true;\n } else {\n option.unique = uniqueKey;\n }\n\n options.push(option);\n }\n } else {\n for (let index = 0; index < entry.spells.length; index++) {\n const spell = entry.spells[index];\n const name = spell.name ?? emptyLabel;\n const uniqueKey = `${entry.id}.spells.${index}`;\n const rankLabel = utils.getSpellRankLabel(spell.rank);\n\n options.push({\n value: uniqueKey,\n label: `${name} (${rankLabel})`,\n unique: uniqueKey,\n });\n }\n }\n }\n\n const uniqueId = foundry.utils.randomID();\n\n rows.push(\n ...R.range(1, nbExpends + 1).map((i) => {\n return {\n type: \"select\",\n slug: `expend${i}`,\n save: false,\n empty: true,\n label: localize(\"label.expend\", { nb: i }),\n unique: uniqueId,\n options,\n } as const;\n }),\n );\n\n return rows;\n },\n process: async ({ actor, rows, custom, messages, flagItem, updateItem, setExtraFlags }) => {\n const sin = custom.runelordSin;\n const bond = sin && rows.bond ? actor.inventory.get(rows.bond) : null;\n const nexus = rows.nexus ? actor.inventory.get(rows.nexus) : null;\n const staff = rows.staff ? actor.inventory.get(rows.staff) : null;\n if (!custom.entries || (!staff && !bond && !nexus)) return;\n\n const maxCharges = custom.maxCharges;\n const nexusSpells = await getSpells(nexus, maxCharges);\n const sinSpells = await getSpells(sin, maxCharges);\n const staffSpells = await getSpells(staff, maxCharges);\n if (!sinSpells.length && !staffSpells.length && !nexusSpells.length) return;\n\n let overcharge = 0;\n const spellcasting = actor.spellcasting;\n const preparedEntries = custom.preparedEntries;\n const flexibleLabel = localize(\"interface.staves.flexible\");\n const emptyLabel = localize(\"interface.staves.empty\");\n const expendedSpells: { name: string; rank: ZeroToTen; uuid?: string }[] = [];\n const slotsUpdates: Record> = {};\n\n const expendedRows = R.pipe(rows, R.omit([\"staff\", \"nexus\", \"bond\"]), R.values(), R.filter(R.isTruthy));\n\n const preparedUpdates: Record<\n string,\n Partial>\n > = {};\n\n for (const preparedPath of expendedRows) {\n const entryId = preparedPath?.split(\".\")[0];\n const entry = spellcasting.get(entryId) as SpellcastingEntryPF2e;\n const preparedData = foundry.utils.getProperty(preparedEntries, preparedPath) as\n FlexiblePreparedEntryGroup[\"slots\"][number] | PreparedEntryGroup[\"spells\"][number];\n\n if (!entry || !preparedData) continue;\n\n const rank = preparedData.rank;\n const slot = entry.system.slots[`slot${rank}`];\n\n if (\"max\" in preparedData) {\n if (slot.max < 1 || slot.value < 1) continue;\n\n slotsUpdates[entryId] ??= {};\n slotsUpdates[entryId][rank] ??= slot.value;\n\n const currentValue = slotsUpdates[entryId][rank];\n\n if (currentValue < 1) continue;\n\n overcharge += rank;\n slotsUpdates[entryId][rank] -= 1;\n\n updateItem({\n _id: entryId,\n [`system.slots.slot${rank}.value`]: currentValue - 1,\n });\n\n expendedSpells.push({\n name: flexibleLabel,\n rank,\n });\n } else {\n const entryUpdates = (preparedUpdates[entryId] ??= {});\n const prepared = (entryUpdates[rank] ??= foundry.utils.deepClone(slot.prepared));\n const preparedSlot = prepared[preparedData.index];\n\n if (slot.max < 1 || preparedSlot.expended) continue;\n\n overcharge += rank;\n preparedSlot.expended = true;\n\n const spell = preparedSlot.id ? actor.items.get(preparedSlot.id) : undefined;\n\n expendedSpells.push({\n uuid: spell?.uuid,\n name: spell?.name ?? emptyLabel,\n rank,\n });\n }\n }\n\n for (const [entryId, slots] of R.entries(preparedUpdates)) {\n for (const [rank, prepared] of R.entries(slots)) {\n updateItem({\n _id: entryId,\n [`system.slots.slot${rank}.prepared`]: prepared,\n });\n }\n }\n\n const isMakeshift = !!nexus && !staff;\n const charges = (isMakeshift ? 0 : maxCharges) + overcharge;\n\n const staffData: dailies.StaffFlags = {\n staffId: bond?.id ?? nexus?.id ?? staff!.id,\n charges: {\n value: charges,\n max: charges,\n },\n expended: expendedSpells.length > 0,\n spells: [...nexusSpells, ...sinSpells, ...staffSpells],\n };\n\n // we only handle kineticist activation for now\n if (custom.specialStatistic?.slug === \"kinetic-activation\") {\n staffData.statistic = { slug: custom.specialStatistic.slug, tradition: \"primal\" };\n }\n\n setExtraFlags(staffData);\n\n const staffType = localize(\"interface.staves\", isMakeshift ? \"makeshift\" : \"staff\");\n const groupLabel = bond && staff ? \"merged\" : staff && nexus ? \"shifted\" : bond ? \"bond\" : \"prepared\";\n\n messages.addGroup(\"staff\", localize(\"interface.staves.group\", groupLabel, { type: staffType }), 45);\n\n if (bond) {\n flagItem(bond, localize(\"staves.bond\"));\n messages.add(\"staff\", { uuid: bond.uuid });\n }\n\n if (nexus) {\n flagItem(nexus, localize(\"interface.staves.makeshift\"));\n messages.add(\"staff\", { uuid: nexus.uuid });\n }\n\n if (staff) {\n messages.add(\"staff\", { uuid: staff.uuid });\n }\n\n for (const { name, rank, uuid } of expendedSpells) {\n const rankLabel = utils.getSpellRankLabel(rank);\n const label = `${name} (${rankLabel})`;\n\n messages.add(\"staff\", {\n uuid,\n label: uuid\n ? label\n : `\n \n ${label}\n `,\n });\n }\n },\n});\n\nfunction getRunelordSin(actor: CharacterPF2e): FeatPF2e | undefined {\n for (const item of actor.itemTypes.feat) {\n if (item.suppressed) continue;\n\n const sourceId = item.sourceId;\n if (sourceId && R.isIncludedIn(sourceId, RUNELORD_SINS())) {\n return item;\n }\n }\n}\n\nfunction getPotentialBonds(actor: CharacterPF2e): WeaponPF2e[] {\n return actor.itemTypes.weapon.filter((weapon) => !isStaff(weapon));\n}\n\ntype PreparedEntryGroup = {\n id: string;\n name: string;\n spells: {\n name?: string;\n rank: ZeroToTen;\n index: number;\n }[];\n};\n\ntype FlexiblePreparedEntryGroup = {\n id: string;\n name: string;\n slots: {\n rank: ZeroToTen;\n value: number;\n max: number;\n }[];\n};\n\nexport { staves };\n", "import {\n AttributeString,\n CastOptions,\n CharacterPF2e,\n CreaturePF2e,\n ErrorPF2e,\n getActorMaxRank,\n getSpellRankLabel,\n htmlQuery,\n localize,\n MagicTradition,\n OneToFour,\n OneToTen,\n Predicate,\n PredicateStatement,\n R,\n SlotKey,\n SpellcastingEntryPF2e,\n SpellcastingSlotGroup,\n SpellCollection,\n SpellPF2e,\n Statistic,\n waitDialog,\n ZeroToTen,\n} from \"foundry-helpers\";\nimport { ChargesSpellcastingSheetData, SpellcastingEntryWithCharges } from \"spellcasting\";\nimport { canCastRank, getStaffData, setStaffChargesValue } from \".\";\nimport { createCounteractStatistic } from \"foundry-helpers/dist\";\n\nclass StaffSpellcasting implements SpellcastingEntryWithCharges {\n id: string;\n name: string;\n actor: CharacterPF2e;\n statistic: Statistic;\n tradition: MagicTradition | null;\n castPredicate: Predicate;\n staff: dailies.StaffPF2e;\n\n constructor(\n { id, name, actor, statistic, tradition, castPredicate }: StaffSpellcastingConstructorParams,\n staff: dailies.StaffPF2e,\n ) {\n this.id = id;\n this.name = name;\n this.actor = actor;\n this.statistic = statistic;\n this.tradition = tradition ?? null;\n this.castPredicate = new game.pf2e.Predicate(castPredicate);\n this.staff = staff;\n }\n\n get counteraction(): Statistic {\n return createCounteractStatistic(this as any);\n }\n\n get attribute(): AttributeString {\n return this.statistic.attribute ?? \"cha\";\n }\n\n get category(): \"charges\" {\n return \"charges\";\n }\n\n get sort(): number {\n return Math.max(0, ...this.actor.itemTypes.spellcastingEntry.map((e) => e.sort)) + 10;\n }\n\n get spells(): null {\n return null;\n }\n\n get isFlexible(): false {\n return false;\n }\n\n get isFocusPool(): false {\n return false;\n }\n\n get isInnate(): false {\n return false;\n }\n\n get isPrepared(): false {\n return false;\n }\n\n get isSpontaneous(): false {\n return false;\n }\n\n get isRitual(): false {\n return false;\n }\n\n get isEphemeral(): true {\n return true;\n }\n\n canCast(spell: SpellPF2e): boolean {\n if (this.actor !== spell.actor) {\n return false;\n }\n\n const rollOptions = new Set([\n ...this.staff.getRollOptions(\"item\"),\n ...spell.getRollOptions(\"spell\", { includeVariants: true }),\n ]);\n\n return this.castPredicate.test(rollOptions);\n }\n\n async cast(\n spell: SpellPF2e,\n options: CastOptions & { spontaneous?: { entryId: string; rank?: OneToFour } } = {},\n ): Promise {\n const actor = this.actor;\n const castRank = spell.rank;\n const canCast = spell.isCantrip || canCastRank(actor, castRank);\n const staffData = getStaffData(this.actor);\n\n if (!staffData || canCast === null) {\n localize.error(\"staves.error.missing\");\n return;\n }\n\n const staff = actor.inventory.get(staffData.staffId)!;\n\n if (!staff.isEquipped) {\n localize.warning(\"staves.error.notEquipped\", { staff: staff.name });\n return;\n }\n\n if (!canCast) {\n localize.warning(\"charges.error.notEnough\", {\n spell: spell.name,\n rank: getSpellRankLabel(castRank),\n });\n return;\n }\n\n if (!staffData || options.message === false || !this.canCast(spell)) {\n return;\n }\n\n if (spell.isCantrip) {\n spell.toMessage(null, {\n rollMode: options.rollMode,\n data: { castRank: spell.rank },\n });\n return;\n }\n\n let charges = staffData.charges.value;\n let mustUseSpontaneous = charges < castRank;\n let useSpontaneous: null | false | { entry: string; slot: SlotKey } = false;\n\n if (!staffData.expended) {\n const minRank = Math.min(options.spontaneous?.rank ?? castRank, castRank);\n const maxRank = getActorMaxRank(actor);\n const range = R.range(minRank, maxRank + 1) as OneToTen[];\n const entries = R.pipe(\n actor.spellcasting.filter((entry): entry is SpellcastingEntryPF2e => {\n return (\n entry.category === \"spontaneous\" &&\n (!options.spontaneous || options.spontaneous.entryId === entry.id)\n );\n }),\n R.map((e) => ({\n id: e.id,\n name: e.name,\n slots: R.pipe(\n range,\n R.filter((r) => {\n const slot = e.system.slots[`slot${r}`];\n return slot.max > 0 && slot.value > 0;\n }),\n R.map((r) => {\n const key = `slot${r}` as SlotKey;\n return {\n key,\n rank: getSpellRankLabel(r),\n value: e.system.slots[key].value,\n };\n }),\n ),\n })),\n R.filter((e) => e.slots.length > 0),\n );\n\n if (entries.length && options.spontaneous) {\n useSpontaneous = {\n entry: entries[0].id,\n slot: entries[0].slots[0].key,\n };\n } else if (entries.length) {\n const multiEntries = entries.length > 1;\n const hint = localize(\"staves.spontaneous\", mustUseSpontaneous ? \"must\" : \"would\", {\n rank: getSpellRankLabel(castRank),\n higher: entries.some((e) => e.slots.length > 1) ? localize(\"staves.spontaneous.higher\") : \"\",\n from: localize(\"staves.spontaneous\", multiEntries ? \"multi\" : \"one\", {\n entry: entries[0].name,\n }),\n });\n\n useSpontaneous = await waitDialog<{ entry: string; slot: SlotKey }>({\n content: \"staves/spontaneous\",\n classes: [\"pf2e-dailies-spontaneous\"],\n i18n: \"staves.spontaneous\",\n data: {\n hint,\n entries,\n multiEntries,\n },\n position: {\n width: 500,\n },\n yes: {\n callback: async (_event, _btn, dialog) => {\n const selected = htmlQuery(dialog.element, \"[name=entry]:checked\");\n return selected?.dataset;\n },\n },\n });\n\n if (useSpontaneous === null) return;\n }\n\n if (useSpontaneous) {\n charges = getStaffData(actor)?.charges.value ?? 0;\n mustUseSpontaneous = charges < castRank;\n }\n }\n\n const spontaneousValue = useSpontaneous\n ? actor.spellcasting.get(useSpontaneous.entry)?.system?.slots[useSpontaneous.slot].value\n : undefined;\n\n if (charges < 1 || (mustUseSpontaneous && !spontaneousValue)) {\n return;\n }\n\n if (spontaneousValue && useSpontaneous) {\n await actor.updateEmbeddedDocuments(\"Item\", [\n {\n _id: useSpontaneous.entry,\n [`system.slots.${useSpontaneous.slot}.value`]: spontaneousValue - 1,\n },\n ]);\n }\n\n await setStaffChargesValue(actor, spontaneousValue ? charges - 1 : charges - castRank);\n\n spell.toMessage(null, {\n rollMode: options.rollMode,\n data: { castRank: spell.rank },\n });\n }\n\n async getSheetData({ spells }: { spells?: SpellCollection } = {}) {\n const actor = this.actor;\n\n if (!actor?.isOfType(\"character\", \"npc\")) {\n throw ErrorPF2e(\"Spellcasting entries can only exist on characters and npcs\");\n }\n\n const maxCantripRank = Math.max(1, Math.ceil(actor.level / 2)) as OneToTen;\n const groups = R.pipe(\n Array.from(spells?.values() ?? []),\n R.groupBy((s) => (s.isCantrip ? 0 : s.rank)),\n R.entries(),\n R.sortBy((x) => x[0]),\n R.map(([_rank, spells]): SpellcastingSlotGroup => {\n const rank = Number(_rank) as ZeroToTen;\n return {\n id: rank === 0 ? \"cantrips\" : rank,\n label: rank === 0 ? \"PF2E.Actor.Creature.Spellcasting.Cantrips\" : getSpellRankLabel(rank),\n maxRank: rank === 0 ? maxCantripRank : rank,\n number: rank,\n active: spells.map((spell) => ({\n spell,\n expended: !canCastRank(actor, rank),\n })),\n };\n }),\n );\n\n return {\n ...R.pick(this, [\n \"category\",\n \"tradition\",\n \"sort\",\n \"isFlexible\",\n \"isFocusPool\",\n \"isInnate\",\n \"isPrepared\",\n \"isRitual\",\n \"isSpontaneous\",\n \"isEphemeral\",\n ]),\n groups,\n prepList: null,\n id: spells?.id ?? this.id,\n name: spells?.name ?? this.name,\n statistic: this.statistic.getChatData(),\n attribute: this.statistic.attribute,\n hasCollection: !!spells?.size,\n usesSpellProficiency: false,\n isCharges: true,\n isStaff: true,\n uses: getStaffData(actor)?.charges ?? { value: 0, max: 0 },\n } satisfies ChargesSpellcastingSheetData;\n }\n}\n\ninterface StaffSpellcastingConstructorParams {\n id: string;\n name: string;\n actor: TActor;\n statistic: Statistic;\n tradition?: Maybe;\n castPredicate: PredicateStatement[];\n}\n\nexport { StaffSpellcasting };\n", "import { createDaily } from \"daily\";\nimport { OneToFour, SkillSlug, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\ntype CustomRow = {\n rank: OneToFour;\n label: string;\n options: {\n value: SkillSlug;\n label: string;\n }[];\n};\n\nconst thaumaturgeTome = createDaily({\n key: \"thaumaturge-tome\",\n items: [\n {\n slug: \"tome\", // Initiate Benefit (Tome)\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.oADE2kM43wpF7MT5\",\n \"Compendium.pf2e-anachronism.class-features.Item.oADE2kM43wpF7MT5\",\n ),\n required: true,\n },\n {\n slug: \"adept\", // Adept Benefit (Tome)\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.gR8ODlO6au0laXo4\",\n \"Compendium.pf2e-anachronism.class-features.Item.gR8ODlO6au0laXo4\",\n ),\n },\n {\n slug: \"intense\", // Intense Implement\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.yRRM1dsY6jakEMaC\",\n \"Compendium.pf2e-anachronism.feats.Item.yRRM1dsY6jakEMaC\",\n ),\n },\n {\n slug: \"paragon\", // Paragon Benefit (Tome)\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.classfeatures.Item.IGv5wS17AAi0U87W\",\n \"Compendium.pf2e-anachronism.class-features.Item.IGv5wS17AAi0U87W\",\n ),\n },\n ],\n prepare: (actor, items) => {\n const actorLevel = actor.level;\n const actorSkills = actor.skills;\n const skillList = utils.getSkills();\n\n const custom: { first: CustomRow; second: CustomRow } = {\n first: { options: [], label: \"\", rank: 1 },\n second: { options: [], label: \"\", rank: 1 },\n } as const;\n\n const setCustom = (firstRank: OneToFour, secondRank: OneToFour) => {\n const options = skillList.filter(({ value }) => actorSkills[value].rank < firstRank);\n\n custom.first = {\n rank: firstRank,\n label: utils.getProficiencyLabel(firstRank),\n options: options,\n };\n\n custom.second = {\n rank: secondRank,\n label: utils.getProficiencyLabel(secondRank),\n options:\n firstRank === secondRank\n ? options\n : skillList.filter(({ value }) => actorSkills[value].rank < secondRank),\n };\n };\n\n // Implement Paragon\n if (items.paragon) {\n setCustom(4, 4);\n }\n // Intense Implement or Second Adept or Implement Adept\n else if (items.intense || items.adept) {\n if (actorLevel >= 9) {\n setCustom(3, 3);\n } else {\n setCustom(2, 3);\n }\n }\n // Tome\n else {\n if (actorLevel >= 5) {\n setCustom(2, 2);\n } else if (actorLevel >= 3) {\n setCustom(1, 2);\n } else {\n setCustom(1, 1);\n }\n }\n\n return custom;\n },\n rows: (_actor, _items, custom) => {\n return [\n {\n type: \"combo\",\n slug: \"first\",\n label: utils.getProficiencyLabel(custom.first.rank),\n unique: `skill-${custom.first.rank}`,\n options: custom.first.options,\n },\n {\n type: \"combo\",\n slug: \"second\",\n label: utils.getProficiencyLabel(custom.second.rank),\n unique: `skill-${custom.second.rank}`,\n options: custom.second.options,\n },\n ];\n },\n process: ({ items, rows, custom, messages, addItem, addRule, removeRule }) => {\n messages.addGroup(\"tome\", undefined, 65);\n\n removeRule(items.tome, (rule) => rule.key !== \"FlatModifier\");\n\n for (const slug of [\"first\", \"second\"] as const) {\n const rank = custom[slug].rank;\n let selected = rows[slug].selected;\n\n if (rows[slug].input) {\n const source = utils.createLoreSource({ name: selected, rank });\n addItem(source);\n } else {\n const skill = selected as SkillSlug;\n const source = utils.createSkillRuleElement({\n skill,\n value: rank,\n });\n\n selected = utils.getSkillLabel(skill);\n addRule(items.tome, source);\n }\n\n messages.add(\"tome\", {\n label: custom[slug].label,\n selected,\n });\n }\n },\n});\n\nexport { thaumaturgeTome };\n", "import { createDaily } from \"daily\";\nimport { localize, SpellPF2e, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst tricksterAce = createDaily({\n key: \"trickster-ace\",\n items: [\n {\n slug: \"ace\", // Trickster Ace\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.POrE3ZgBRdBL9MsW\",\n \"Compendium.pf2e-anachronism.feats.Item.POrE3ZgBRdBL9MsW\",\n ),\n required: true,\n },\n ],\n label: (_actor, items) => items.ace.name,\n rows: () => {\n return [\n {\n type: \"drop\",\n slug: \"spell\",\n note: localize(\"interface.drop.notes.ace\"),\n onDrop: (item: SpellPF2e) => {\n return true;\n },\n filter: {\n type: \"spell\",\n search: {\n rank: 4,\n },\n },\n },\n ];\n },\n process: async ({ actor, items, rows, messages, addItem }) => {\n const identifier = foundry.utils.randomID();\n const uuid = rows.spell.uuid;\n const statistic = actor.classDC;\n const spellSource = await utils.createSpellSource(uuid, { identifier });\n const entrySource = utils.createSpellcastingEntrySource({\n category: \"innate\",\n identifier,\n name: items.ace.name,\n tradition: spellSource.system.traits.traditions[0],\n proficiencyRank: statistic?.rank,\n attribute: statistic?.attribute,\n proficiencySlug: statistic?.slug,\n });\n\n addItem(entrySource);\n addItem(spellSource);\n messages.add(\"spells\", { uuid });\n },\n});\n\nexport { tricksterAce };\n", "import { createDaily, DailyRowDropFeat } from \"daily\";\nimport { getItemSourceId, R, SYSTEM } from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\nconst ANIMIST_CLASS = SYSTEM.itemUuid(\n \"Compendium.pf2e.classes.Item.9KiqZVG9r5g8mC4V\",\n \"Compendium.pf2e-anachronism.classes.Item.9KiqZVG9r5g8mC4V\",\n);\n\nconst wandering = createDaily({\n key: \"wandering\",\n condition: (actor) => {\n return actor.class?.sourceId === ANIMIST_CLASS();\n },\n prepare: (actor) => {\n const feats = R.pipe(\n actor.itemTypes.feat,\n R.filter((feat) => feat.traits.has(\"wandering\")),\n R.map((feat) => {\n const level = feat.system.level.taken ?? feat.system.level.value;\n return [level, feat] as const;\n }),\n );\n\n return { feats };\n },\n rows: (_actor, _items, custom) => {\n return R.pipe(\n custom.feats,\n R.sortBy(([level]) => level),\n R.map(([level, feat]) => {\n return {\n type: \"drop\",\n slug: `feat-${level}`,\n label: `PF2E.Level${level}`,\n filter: {\n type: \"feat\",\n search: {\n category: [\"class\"],\n traits: { selected: [\"animist\", \"wandering\"], conjunction: \"and\" },\n level: level,\n },\n },\n order: level,\n save: false,\n value: {\n name: feat.name,\n uuid: getItemSourceId(feat),\n },\n } satisfies DailyRowDropFeat;\n }),\n );\n },\n process: async ({ custom: { feats }, messages, rows, replaceFeat }) => {\n for (const [level, feat] of feats) {\n const row = rows[`feat-${level}`];\n const uuid = utils.getSourceId(feat);\n\n if (row && row.uuid !== uuid) {\n const source = await utils.getItemSource(row.uuid, \"feat\");\n if (!source) continue;\n\n replaceFeat(feat, source);\n messages.add(\"wandering\", { uuid });\n }\n }\n },\n});\n\nexport { wandering };\n", "import { createDaily } from \"daily\";\nimport {\n CharacterPF2e,\n getFlag,\n getItemFromUuid,\n localize,\n MartialProficiency,\n R,\n setFlagProperty,\n SYSTEM,\n unsetFlagProperty,\n WeaponMaterialSource,\n WeaponMaterialType,\n WeaponPF2e,\n WeaponPropertyRuneType,\n ZeroToFour,\n} from \"foundry-helpers\";\nimport { utils } from \"utils\";\n\n/**\n * generated from\n * https://github.com/foundryvtt/pf2e/blob/5d94764870656060475c57ad9ccb3803d3b528f1/src/module/item/physical/runes.ts#L912\n */\nconst COMMON_WEAPON_RUNES = [\n {\n name: \"PF2E.WeaponPropertyRune.ashen.Name\",\n level: 9,\n slug: \"ashen\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.astral.Name\",\n level: 8,\n slug: \"astral\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.authorized.Name\",\n level: 3,\n slug: \"authorized\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.brilliant.Name\",\n level: 12,\n slug: \"brilliant\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.called.Name\",\n level: 7,\n slug: \"called\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.coating.Name\",\n level: 9,\n slug: \"coating\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.conducting.Name\",\n level: 7,\n slug: \"conducting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.corrosive.Name\",\n level: 8,\n slug: \"corrosive\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.cunning.Name\",\n level: 5,\n slug: \"cunning\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.decaying.Name\",\n level: 8,\n slug: \"decaying\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.disrupting.Name\",\n level: 5,\n slug: \"disrupting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.earthbinding.Name\",\n level: 5,\n slug: \"earthbinding\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.extending.Name\",\n level: 7,\n slug: \"extending\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.fearsome.Name\",\n level: 5,\n slug: \"fearsome\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.flaming.Name\",\n level: 8,\n slug: \"flaming\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.flurrying.Name\",\n level: 7,\n slug: \"flurrying\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.frost.Name\",\n level: 8,\n slug: \"frost\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.ghostTouch.Name\",\n level: 4,\n slug: \"ghostTouch\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterAshen.Name\",\n level: 16,\n slug: \"greaterAshen\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterAstral.Name\",\n level: 15,\n slug: \"greaterAstral\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterBrilliant.Name\",\n level: 18,\n slug: \"greaterBrilliant\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterCorrosive.Name\",\n level: 15,\n slug: \"greaterCorrosive\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterDecaying.Name\",\n level: 15,\n slug: \"greaterDecaying\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterExtending.Name\",\n level: 13,\n slug: \"greaterExtending\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterFearsome.Name\",\n level: 12,\n slug: \"greaterFearsome\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterFlaming.Name\",\n level: 15,\n slug: \"greaterFlaming\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterFrost.Name\",\n level: 15,\n slug: \"greaterFrost\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterImpactful.Name\",\n level: 17,\n slug: \"greaterImpactful\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterRooting.Name\",\n level: 11,\n slug: \"greaterRooting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterShock.Name\",\n level: 15,\n slug: \"greaterShock\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.greaterThundering.Name\",\n level: 15,\n slug: \"greaterThundering\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.grievous.Name\",\n level: 9,\n slug: \"grievous\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.holy.Name\",\n level: 11,\n slug: \"holy\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.impactful.Name\",\n level: 10,\n slug: \"impactful\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.impossible.Name\",\n level: 20,\n slug: \"impossible\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.majorRooting.Name\",\n level: 15,\n slug: \"majorRooting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.merciful.Name\",\n level: 4,\n slug: \"merciful\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.returning.Name\",\n level: 3,\n slug: \"returning\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.rooting.Name\",\n level: 7,\n slug: \"rooting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.shifting.Name\",\n level: 6,\n slug: \"shifting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.shock.Name\",\n level: 8,\n slug: \"shock\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.shockwave.Name\",\n level: 13,\n slug: \"shockwave\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.swarming.Name\",\n level: 9,\n slug: \"swarming\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.thundering.Name\",\n level: 8,\n slug: \"thundering\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.trueRooting.Name\",\n level: 19,\n slug: \"trueRooting\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.underwater.Name\",\n level: 3,\n slug: \"underwater\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.unholy.Name\",\n level: 11,\n slug: \"unholy\",\n },\n {\n name: \"PF2E.WeaponPropertyRune.wounding.Name\",\n level: 7,\n slug: \"wounding\",\n },\n];\n\n/**\n * generated from\n * https://github.com/foundryvtt/pf2e/blob/1465f7190b2b8454094c50fa6d06e9902e0a3c41/src/module/item/physical/materials.ts#L39\n */\nconst WEAPON_MATERIALS: PartialRecord = {\n abysium: {\n standard: 12,\n high: 18,\n },\n adamantine: {\n standard: 11,\n high: 17,\n },\n \"cold-iron\": {\n low: 2,\n standard: 10,\n high: 16,\n },\n dawnsilver: {\n standard: 11,\n high: 17,\n },\n djezet: {\n standard: 12,\n high: 18,\n },\n duskwood: {\n standard: 11,\n high: 17,\n },\n inubrix: {\n standard: 11,\n high: 17,\n },\n \"keep-stone\": {\n high: 18,\n },\n noqual: {\n standard: 12,\n high: 18,\n },\n peachwood: {\n standard: 12,\n high: 18,\n },\n orichalcum: {\n high: 18,\n },\n siccatite: {\n standard: 11,\n high: 17,\n },\n silver: {\n low: 2,\n standard: 10,\n high: 16,\n },\n \"sisterstone-dusk\": {\n low: 3,\n standard: 11,\n high: 19,\n },\n \"sisterstone-scarlet\": {\n low: 3,\n standard: 11,\n high: 19,\n },\n sloughstone: {\n standard: 8,\n high: 16,\n },\n \"sovereign-steel\": {\n standard: 12,\n high: 19,\n },\n warpglass: {\n high: 17,\n },\n};\n\nconst TRANSMUTE_WEAPON_UUID = SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.n7a7ltuY9C4qcAiT\",\n \"Compendium.pf2e-anachronism.feats.Item.n7a7ltuY9C4qcAiT\",\n);\n\nconst warshard = createDaily({\n key: \"warshard\",\n items: [\n {\n slug: \"dedication\", // Warshard Warrior Dedication\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.GtohZQvFVZaIQD0S\",\n \"Compendium.pf2e-anachronism.feats.Item.GtohZQvFVZaIQD0S\",\n ),\n required: true,\n },\n {\n slug: \"rune\", // Warshard Rune\n uuid: SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.MsNPLqPsWgOO0dqh\",\n \"Compendium.pf2e-anachronism.feats.Item.MsNPLqPsWgOO0dqh\",\n ),\n },\n {\n slug: \"transmute\", // Transmute Weapon\n uuid: TRANSMUTE_WEAPON_UUID,\n },\n ],\n rows: (actor, items) => {\n const weapons = utils.getActorWeapons(actor).filter((weapon) => {\n const options = new Set(weapon.getRollOptions(\"item\"));\n const rank = getWeaponProficiencyRank(actor, weapon, options);\n\n return rank >= 2;\n });\n\n if (!weapons.length) return [];\n\n const actorLevel = actor.level;\n\n const weaponOptions = weapons.map((weapon) => ({ value: weapon.uuid, label: weapon.name }));\n\n const runeOptions = R.pipe(\n COMMON_WEAPON_RUNES,\n R.filter(({ level }) => level <= actorLevel),\n R.map(({ name, slug }) => ({ value: slug, label: name })),\n R.sortBy(R.prop(\"label\")),\n );\n\n const materialOptions = R.pipe(\n WEAPON_MATERIALS,\n R.entries(),\n R.filter(([_, { low = Infinity, standard = Infinity, high = Infinity }]) => {\n const lowest = Math.min(low, standard, high);\n return lowest <= actorLevel;\n }),\n R.map(([slug]) => ({\n value: slug,\n label: CONFIG.PF2E.preciousMaterials[slug],\n })),\n );\n\n return [\n {\n type: \"select\",\n slug: \"weapon\",\n label: \"TYPES.Item.weapon\",\n options: weaponOptions,\n },\n {\n type: \"select\",\n slug: \"rune\",\n label: items.rune?.name,\n options: runeOptions,\n condition: !!items.rune,\n },\n {\n type: \"select\",\n slug: \"material\",\n label: items.transmute?.name,\n options: [{ value: \"\", label: \"\" }, ...materialOptions],\n empty: true,\n condition: !!items.transmute,\n },\n ];\n },\n process: async ({ actor, items, rows, messages, addRule, flagItem, updateItem }) => {\n const weapon = await getItemFromUuid(rows.weapon, \"weapon\");\n if (!weapon) return;\n\n flagItem(weapon, localize(\"warshard.weapon\"));\n\n const rune = rows.rune as WeaponPropertyRuneType | undefined;\n const material = rows.material as WeaponMaterialType | undefined;\n\n messages.add(\"warshard\", {\n uuid: weapon.uuid,\n label: utils.getRunedItemName(weapon),\n });\n\n if (rune) {\n addRule(weapon, {\n key: \"AdjustStrike\",\n mode: \"add\",\n property: \"property-runes\",\n value: rune,\n definition: [\"item:id:{item|_id}\"],\n predicate: [{ gte: [\"{actor|system.resources.mythicPoints.value}\", 1] }],\n });\n\n messages.add(\"warshard\", {\n label: items.rune?.name ?? localize(\"label.rune\"),\n selected: utils.getWeaponPropertyRuneLabel(rune),\n });\n }\n\n if (material) {\n const actorLevel = actor.level;\n const weaponLevel = weapon.level;\n const { low, standard, high } = WEAPON_MATERIALS[material] ?? {};\n\n const grade =\n high && high <= actorLevel && weaponLevel >= 15\n ? \"high\"\n : standard && standard <= actorLevel && weaponLevel >= 9\n ? \"standard\"\n : low && low <= actorLevel\n ? \"low\"\n : undefined;\n\n if (grade) {\n const updates = {\n _id: weapon.id,\n \"system.material\": { type: material, grade } satisfies WeaponMaterialSource,\n };\n\n setFlagProperty(updates, \"material\", weapon._source.system.material);\n updateItem(updates);\n\n messages.add(\"warshard\", {\n label: items.transmute?.name ?? localize(\"label.material\"),\n selected: game.i18n.localize(CONFIG.PF2E.preciousMaterials[material]),\n });\n }\n }\n },\n rest: ({ actor, updateItem }) => {\n if (!utils.hasItemWithSourceId(actor, TRANSMUTE_WEAPON_UUID(), \"feat\")) return;\n\n for (const item of utils.getActorWeapons(actor)) {\n const data = getFlag(item, \"material\");\n if (!data) continue;\n\n const updates = {\n _id: item.id,\n \"system.material\": data,\n };\n\n unsetFlagProperty(updates, \"material\");\n updateItem(updates);\n }\n },\n});\n\n/**\n * https://github.com/foundryvtt/pf2e/blob/5d94764870656060475c57ad9ccb3803d3b528f1/src/module/actor/character/helpers.ts#L137-L153\n */\nfunction getWeaponProficiencyRank(actor: CharacterPF2e, weapon: WeaponPF2e, itemOptions: Set): ZeroToFour {\n // If the character has an ancestral weapon familiarity or similar feature, it will make weapons that meet\n // certain criteria also count as weapon of different category\n const proficiencies = actor.system.proficiencies;\n const categoryRank = proficiencies.attacks[weapon.category]?.rank ?? 0;\n const groupRank = proficiencies.attacks[`weapon-group-${weapon.group}`]?.rank ?? 0;\n\n // Weapons that are interchangeable for all rules purposes (e.g., longbow and composite longbow)\n const equivalentWeapons: Record = CONFIG.PF2E.equivalentWeapons;\n const baseWeapon = equivalentWeapons[weapon.baseType ?? \"\"] ?? weapon.baseType;\n const baseWeaponRank = proficiencies.attacks[`weapon-base-${baseWeapon}`]?.rank ?? 0;\n const syntheticRanks = Object.values(proficiencies.attacks)\n .filter((p): p is MartialProficiency => !!p?.definition?.test(itemOptions))\n .map((p) => p.rank);\n\n return Math.max(categoryRank, groupRank, baseWeaponRank, ...syntheticRanks) as ZeroToFour;\n}\n\nexport { warshard };\n", "import { MODULE_DAILIES, parseDailies } from \"dailies\";\nimport { createDaily, Daily } from \"daily\";\nimport { utils } from \"utils\";\nimport { isValidDaily } from \".\";\nimport {\n createComboSkillDaily,\n createLanguageDaily,\n createLoreSkillDaily,\n createResistanceDaily,\n createScrollChainDaily,\n} from \"data\";\nimport { localize } from \"foundry-helpers\";\n\nasync function parseCustomDaily(custom: CustomDaily): Promise {\n try {\n const fn = new foundry.utils.AsyncFunction(\n \"utils\",\n \"createDaily\",\n \"createComboSkillDaily\",\n \"createLoreSkillDaily\",\n \"createLanguageDaily\",\n \"createResistanceDaily\",\n \"createScrollChainDaily\",\n custom.code,\n );\n const daily = await fn(\n utils,\n createDaily,\n createComboSkillDaily,\n createLoreSkillDaily,\n createLanguageDaily,\n createResistanceDaily,\n createScrollChainDaily,\n );\n\n if (isValidDaily(daily)) {\n return daily;\n }\n } catch (err: any) {\n localize.error(\"error.unexpected\");\n console.error(err);\n console.error(`The error occured during creation of custom daily for ${custom.key}`);\n }\n}\n\nfunction registerCustomDailies(dailies: Daily[]) {\n const incompatible: Set = new Set();\n const duplicates: Set = new Set();\n\n for (const daily of dailies) {\n if (!isValidDaily(daily)) {\n incompatible.add(daily.key ?? \"unknown\");\n continue;\n }\n\n if (MODULE_DAILIES.has(daily.key)) {\n duplicates.add(daily.key);\n continue;\n }\n\n MODULE_DAILIES.set(daily.key, daily);\n }\n\n parseDailies();\n}\n\ntype CustomDaily = {\n key: string;\n code: string;\n schema?: string;\n};\n\nexport { parseCustomDaily, registerCustomDailies };\nexport type { CustomDaily };\n", "import { CustomDaily, parseCustomDaily } from \"custom/custom\";\nimport { Daily, DailyCustom, DailyItem, DailyRow } from \"daily\";\nimport {\n adaptiveTalent,\n ancestralLongevity,\n animist,\n bladeAlly,\n ceremonialKnife,\n combatFlexibility,\n commanderTactics,\n coreMemories,\n createComboSkillDaily,\n createLanguageDaily,\n createLoreSkillDaily,\n createResistanceDaily,\n createScrollChainDaily,\n experimentalSpellshaping,\n familiar,\n mindSmith,\n rations,\n rootMagic,\n scrollAdept,\n staves,\n thaumaturgeTome,\n tricksterAce,\n wandering,\n warshard,\n} from \"data\";\nimport {\n CharacterPF2e,\n getItemSourceId,\n getSetting,\n isSupressedFeat,\n ItemPF2e,\n ItemUUID,\n localize,\n MapOfArrays,\n MODULE,\n R,\n SYSTEM,\n} from \"foundry-helpers\";\n\nconst DAILY_SCHEMA = \"3.0.0\";\nconst MODULE_DAILIES: Map = new Map();\n\nconst PREFIXES = {\n dailies: \"dailies\",\n custom: \"custom\",\n module: \"module\",\n} as const;\n\nconst BUILTINS_DAILIES: Daily[] = [\n adaptiveTalent, // Adaptive Talent\n ancestralLongevity, // Ancestral Longevity\n animist, // Animist\n bladeAlly, // Blessed Armament\n ceremonialKnife, // Ceremonial Knife\n combatFlexibility, // Combat Flexibility\n commanderTactics, // Commander Tactics\n coreMemories, // Core Memories\n experimentalSpellshaping, // Experimental Spellshaping\n familiar, // Familiar\n mindSmith, // Mind Smith\n rations, // Rations\n rootMagic, // Root Magic\n scrollAdept, // Scroll Adept\n staves, // Staves\n thaumaturgeTome, //Thaumaturge Tome\n tricksterAce, // Trickster Ace\n wandering, // Animist Wandering Feats\n warshard, // Warshard Warrior Dedication\n createLoreSkillDaily(\n \"quick-study\", // Quick Study\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.aLJsBBZzlUK3G8MW\",\n \"Compendium.pf2e-anachronism.feats.Item.aLJsBBZzlUK3G8MW\",\n ),\n ),\n createComboSkillDaily(\n \"ageless-spirit\", // Ageless Spirit\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.wylnETwIz32Au46y\",\n \"Compendium.pf2e-anachronism.feats.Item.wylnETwIz32Au46y\",\n ),\n ),\n createComboSkillDaily(\n \"ancient-memories\", // Ancient Memories\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.ptEOt3lqjxUnAW62\",\n \"Compendium.pf2e-anachronism.feats.Item.ptEOt3lqjxUnAW62\",\n ),\n ),\n createComboSkillDaily(\n \"flexible-studies\", // Flexible Studies\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.9bgl6qYWKHzqWZj0\",\n \"Compendium.pf2e-anachronism.feats.Item.9bgl6qYWKHzqWZj0\",\n ),\n ),\n createLanguageDaily(\n \"ancestral-linguistics\", // Ancestral Linguistics\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.eCWQU16hRLfN1KaX\",\n \"Compendium.pf2e-anachronism.feats.Item.eCWQU16hRLfN1KaX\",\n ),\n ),\n createLanguageDaily(\n \"borts-blesing\", // Bort's Blessing\n SYSTEM.itemUuid(\n \"Compendium.pf2e.equipment-srd.Item.iS7hAQMAaThHYE8g\",\n \"Compendium.pf2e-anachronism.equipment.Item.iS7hAQMAaThHYE8g\",\n ),\n ),\n createResistanceDaily(\n \"elementalist\", // Elementalist Dedication\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.tx9pkrpmtqe4FnvS\",\n \"Compendium.pf2e-anachronism.feats.Item.tx9pkrpmtqe4FnvS\",\n ),\n [\"air\", \"earth\", \"fire\", \"water\", \"metal\", \"wood\"],\n \"half\",\n ),\n createResistanceDaily(\n \"proteankin\", // Proteankin\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.gNFPwTHDygxdf9pw\",\n \"Compendium.pf2e-anachronism.feats.Item.gNFPwTHDygxdf9pw\",\n ),\n [\"acid\", \"electricity\", \"sonic\"],\n \"half\",\n true,\n ),\n createScrollChainDaily(\"esoterica\", [\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.OqObuRB8oVSAEKFR\",\n \"Compendium.pf2e-anachronism.feats.Item.OqObuRB8oVSAEKFR\",\n ), // Scroll Esoterica\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.nWd7m0yRcIEVUy7O\",\n \"Compendium.pf2e-anachronism.feats.Item.nWd7m0yRcIEVUy7O\",\n ), // Elaborate Scroll Esoterica\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.LHjPTV5vP3MOsPPJ\",\n \"Compendium.pf2e-anachronism.feats.Item.LHjPTV5vP3MOsPPJ\",\n ), // Grand Scroll Esoterica\n ]),\n createScrollChainDaily(\"trickster\", [\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.ROAUR1GhC19Pjk9C\",\n \"Compendium.pf2e-anachronism.feats.Item.ROAUR1GhC19Pjk9C\",\n ), // Basic Scroll Cache\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.UrOj9TROtn8nuxPf\",\n \"Compendium.pf2e-anachronism.feats.Item.UrOj9TROtn8nuxPf\",\n ), // Expert Scroll Cache\n SYSTEM.itemUuid(\n \"Compendium.pf2e.feats-srd.Item.lIg5Gzz7W70jfbk1\",\n \"Compendium.pf2e-anachronism.feats.Item.lIg5Gzz7W70jfbk1\",\n ), // Master Scroll Cache\n ]),\n];\n\nconst ALL_DAILIES: Map = new Map();\n\nconst BUILTINS_UUIDS = new MapOfArrays();\nconst BUILTINS_ALWAYS: AlwaysDaily[] = [];\n\nconst UUIDS = new MapOfArrays();\nconst ALWAYS: AlwaysDaily[] = [];\n\nfunction prepareDailies(\n dailies: Daily[],\n prefix: DailyPrefix,\n): {\n uuids: Map;\n always: AlwaysDaily[];\n} {\n const uuids = new Map();\n const always: AlwaysDaily[] = [];\n\n for (const original of dailies) {\n const originalKey = original.key;\n\n try {\n const keyWithPrefix = `${prefix}.${originalKey}`;\n const daily = foundry.utils.deepClone(original) as PreparedDaily;\n\n daily.key = keyWithPrefix;\n daily.items ??= [];\n\n if (daily.condition && (!daily.items.length || !daily.items.some((x) => x.required))) {\n always.push(daily as AlwaysDaily);\n }\n\n for (let i = 0; i < daily.items.length; i++) {\n const { uuid, condition } = daily.items[i];\n uuids.set(R.isFunction(uuid) ? uuid() : uuid, { daily, index: i, condition });\n }\n } catch (err) {\n localize.error(\"error.unexpected\");\n console.error(err);\n console.error(`The error occured during data gathering of ${prefix}.${originalKey}`);\n }\n }\n\n return { uuids, always };\n}\n\nasync function initializeDailies() {\n BUILTINS_UUIDS.clear();\n BUILTINS_ALWAYS.length = 0;\n\n const { uuids, always } = prepareDailies(BUILTINS_DAILIES, PREFIXES.dailies);\n\n for (const [uuid, daily] of uuids) {\n BUILTINS_UUIDS.add(uuid, daily);\n }\n\n BUILTINS_ALWAYS.push(...always);\n\n parseDailies();\n}\n\nasync function parseDailies() {\n ALL_DAILIES.clear();\n UUIDS.clear();\n ALWAYS.length = 0;\n\n const customDailies: Daily[] = [];\n const customs = getSetting(\"customDailies\");\n\n for (const custom of customs) {\n if (foundry.utils.isNewerVersion(DAILY_SCHEMA, custom.schema ?? \"\")) {\n continue;\n }\n\n const daily = await parseCustomDaily(custom);\n\n if (daily) {\n customDailies.push(daily);\n }\n }\n\n for (const [uuid, dailies] of BUILTINS_UUIDS) {\n UUIDS.add(uuid, dailies);\n }\n\n const modulesDailies = Array.from(MODULE_DAILIES.values());\n const preparedCustoms = prepareDailies(customDailies, PREFIXES.custom);\n const preparedModules = prepareDailies(modulesDailies, PREFIXES.module);\n\n for (const [uuid, daily] of [...preparedCustoms.uuids, ...preparedModules.uuids]) {\n UUIDS.add(uuid, daily);\n }\n\n ALWAYS.push(...BUILTINS_ALWAYS, ...preparedCustoms.always, ...preparedModules.always);\n\n for (const [dailies, prefix] of [\n [BUILTINS_DAILIES, PREFIXES.dailies],\n [customDailies, PREFIXES.custom],\n [modulesDailies, PREFIXES.module],\n ] as const) {\n for (const daily of dailies) {\n const key = `${prefix}.${daily.key}`;\n ALL_DAILIES.set(key, daily);\n }\n }\n\n MODULE.debug(\"Dailies\", ALL_DAILIES);\n MODULE.debug(\"Dailies UUIDS\", UUIDS);\n MODULE.debug(\"Dailies ALWAYS\", ALWAYS);\n}\n\nasync function getDailies(actor: CharacterPF2e): Promise {\n const dailies: PreparedDailies = {};\n\n const getDaily = async (\n daily: Daily,\n precondition?: { index: number; item: ItemPF2e; condition: DailyItem[\"condition\"] },\n ) => {\n if (dailies[daily.key] === null) return;\n\n try {\n if (precondition) {\n const { condition, item } = precondition;\n if (condition && !(await condition(actor, item))) {\n return;\n }\n }\n\n if (daily.condition && !(await daily.condition(actor))) {\n dailies[daily.key] = null;\n return;\n }\n\n if (!(daily.key in dailies)) {\n dailies[daily.key] = foundry.utils.deepClone(daily) as PreparedDaily;\n }\n\n const tmpDaily = dailies[daily.key]!;\n tmpDaily.prepared ??= { items: {}, custom: {}, rows: {} };\n\n if (precondition) {\n const { index, item } = precondition;\n const itemSlug = daily.items![index].slug;\n tmpDaily.prepared.items[itemSlug] = item;\n }\n } catch (err) {\n localize.error(\"error.unexpected\");\n console.error(err);\n console.error(`The error occured during data gathering of ${daily.key}`);\n }\n };\n\n await Promise.all(ALWAYS.map((daily) => getDaily(daily)));\n\n await Promise.all(\n actor.items.map(async (item) => {\n if (isSupressedFeat(item)) {\n return;\n }\n\n const sourceId = getItemSourceId(item);\n if (!sourceId || (item.isOfType(\"physical\") && item.isInvested === false)) {\n return;\n }\n\n const dailies = UUIDS.get(sourceId);\n if (!dailies?.length) return;\n\n return dailies.map(({ daily, index, condition }) => {\n return getDaily(daily, { condition, index, item });\n });\n }),\n );\n\n return dailies;\n}\n\nfunction filterDailies(dailies: PreparedDailies): PreparedDaily[] {\n return Object.values(dailies).filter((daily): daily is PreparedDaily => {\n return (\n R.isNonNull(daily) &&\n Array.isArray(daily.items) &&\n !daily.items.some((item) => item.required === true && !daily.prepared.items[item.slug])\n );\n });\n}\n\nfunction getRawDaily(key: string): Daily | undefined {\n return ALL_DAILIES.get(key) ?? ALL_DAILIES.get(`${PREFIXES.dailies}.${key}`);\n}\n\ntype DailyPrefix = keyof typeof PREFIXES;\n\ntype PreparedDaily = Daily & {\n prepared: PreparedDailyData;\n};\n\ntype PreparedDailyData = {\n items: DailyOptionsItems;\n custom: DailyCustom;\n rows: Record;\n};\n\ntype DailyOptionsItems = Record;\n\ntype AlwaysDaily = Omit & Required>;\n\ntype PreConditionDaily = {\n daily: Daily;\n condition?: DailyItem[\"condition\"];\n index: number;\n};\n\ntype PreparedDailies = Record;\n\nexport { DAILY_SCHEMA, filterDailies, getDailies, getRawDaily, initializeDailies, MODULE_DAILIES, parseDailies };\nexport type { PreparedDailies, PreparedDaily };\n", "import { getDisabledDailies } from \"actor\";\nimport { filterDailies, PreparedDailies, PreparedDaily } from \"dailies\";\nimport {\n DailyRow,\n DailyRowAlert,\n DailyRowComboData,\n DailyRowData,\n DailyRowDrop,\n DailyRowDropData,\n DailyRowDropFeat,\n DailyRowDropSpell,\n DailyRowDropType,\n DailyRowSelectOption,\n DailyRowSelectOptionValue,\n DailyRowType,\n getDailyLabel,\n rowIsOfType,\n} from \"daily\";\nimport {\n ActorPF2e,\n addListenerAll,\n CharacterPF2e,\n CheckboxData,\n dataToDatasetString,\n FeatFilters,\n getFlag,\n htmlClosest,\n htmlQuery,\n htmlQueryAll,\n localize,\n R,\n render,\n SpellFilters,\n stringBoolean,\n stringNumber,\n} from \"foundry-helpers\";\nimport { DailyConfig, onInterfaceDrop, processDailies } from \".\";\n\nclass DailyInterface extends foundry.applications.api.ApplicationV2 {\n #actor: CharacterPF2e;\n #dailies: PreparedDailies;\n #dailiesArray: PreparedDaily[];\n #featUuids: string[] = [];\n #settingsApp?: DailyConfig;\n #randomInterval?: NodeJS.Timeout;\n #dropFilters: Record = {};\n\n static DEFAULT_OPTIONS: DeepPartial = {\n window: {\n positioned: true,\n resizable: false,\n minimizable: true,\n frame: true,\n },\n };\n\n static TEMPLATE_ORDER = {\n select: 100,\n combo: 80,\n random: 60,\n alert: 40,\n input: 20,\n notify: 20,\n drop: 0,\n };\n\n constructor(actor: CharacterPF2e, dailies: PreparedDailies, options: Partial = {}) {\n options.id = `pf2e-dailies-interface-${actor.uuid}`;\n super(options);\n\n this.#actor = actor;\n this.#dailies = dailies;\n this.#dailiesArray = filterDailies(dailies);\n }\n\n get title(): string {\n return localize(\"interface.title\", { actor: this.actor.name });\n }\n\n get actor(): CharacterPF2e {\n return this.#actor;\n }\n\n get dropFilters(): Record {\n return this.#dropFilters;\n }\n\n get dailies(): PreparedDailies {\n return this.#dailies;\n }\n\n getDailyRow(daily: string, row: string): T | undefined {\n return this.dailies[daily]?.prepared.rows[row] as T | undefined;\n }\n\n async compendiumFilterFromElement(el: HTMLElement): Promise {\n try {\n const data = el.dataset as RowElementDataset;\n const dailyRow = this.getDailyRow(data.daily, data.row);\n if (!dailyRow) return;\n\n const filterKey = `${data.daily}.${data.row}`;\n\n const dropFilter = (this.dropFilters[filterKey] ??= await (async () => {\n const filter = foundry.utils.deepClone(dailyRow.filter);\n return {\n daily: data.daily,\n row: data.row,\n type: filter.type,\n filter: await this.#convertToCompendiumFilter(filter),\n };\n })());\n\n return foundry.utils.deepClone(dropFilter);\n } catch (err: any) {\n localize.error(\"error.unexpected\");\n console.error(err);\n console.error(`The error occured when trying to open a drop filter.`);\n }\n }\n\n _onClose() {\n this.#settingsApp?.close();\n clearInterval(this.#randomInterval);\n }\n\n async _renderFrame(options: fa.ApplicationRenderOptions) {\n const frame = await super._renderFrame(options);\n\n const configLabel = localize(\"interface.config\");\n const configBtn = ``;\n\n this.window.close.insertAdjacentHTML(\"beforebegin\", configBtn);\n\n return frame;\n }\n\n async _prepareContext(_options: fa.ApplicationRenderOptions): Promise {\n const actor = this.actor;\n\n let hasAlert = false;\n const dailies = this.#dailiesArray;\n const templates: DailyTemplate[] = [];\n const disabled = getDisabledDailies(actor);\n\n await Promise.all(\n dailies.map(async (daily) => {\n const items = daily.prepared.items;\n\n daily.label = await getDailyLabel(daily, actor, items);\n\n if (disabled[daily.key]) return;\n\n const custom = typeof daily.prepare === \"function\" ? await daily.prepare(actor, items) : {};\n const rows = await daily.rows(actor, items, custom);\n\n const dailyTemplate: DailyTemplate = {\n label: daily.label,\n rows: [],\n };\n\n daily.prepared.custom = custom;\n daily.prepared.rows = R.mapToObj(rows, (row) => [row.slug, row]);\n\n for (const row of rows) {\n if (typeof row.condition === \"boolean\" && !row.condition) {\n continue;\n }\n\n const rowLabel = typeof row.label === \"string\" ? game.i18n.localize(row.label) : row.slug;\n\n const rowTemplate: RowTemplate = {\n type: row.type,\n row: row.slug,\n daily: daily.key,\n label: rowLabel,\n order: row.order ?? DailyInterface.TEMPLATE_ORDER[row.type],\n data: \"\",\n };\n\n const isSavedRow = row.save !== false;\n\n const getSavedFlag = () => {\n return isSavedRow ? getFlag(actor, daily.key, row.slug) : undefined;\n };\n\n const rowData: Partial = {\n daily: daily.key,\n type: row.type,\n row: row.slug,\n save: stringBoolean(isSavedRow),\n empty: stringBoolean(!!row.empty),\n };\n\n if (rowIsOfType(row, \"select\", \"combo\", \"random\")) {\n const openedGroups: string[] = [];\n\n rowTemplate.options = [];\n\n for (const option of row.options) {\n if (\"group\" in option) {\n if (openedGroups.pop()) {\n rowTemplate.options.push({ groupEnd: true });\n }\n\n openedGroups.push(option.group);\n option.group = game.i18n.localize(option.group);\n } else {\n option.label = game.i18n.localize(option.label);\n }\n\n rowTemplate.options.push(option);\n }\n\n for (const _ of openedGroups) {\n rowTemplate.options.push({ groupEnd: true });\n }\n\n if (rowIsOfType(row, \"combo\", \"select\") && row.unique && rowTemplate.options.length > 1) {\n rowTemplate.unique = row.unique;\n }\n\n if (rowIsOfType(row, \"combo\")) {\n const { input, selected } = getSavedFlag() ?? {};\n const isInput = input ?? true;\n const option = isInput\n ? undefined\n : rowTemplate.options.find(\n (option): option is DailyRowSelectOptionValue =>\n \"value\" in option && option.value === selected,\n );\n\n rowTemplate.value = (isInput ? selected : option?.label) ?? \"\";\n rowTemplate.selected = (!isInput && option?.value) || \"\";\n\n rowData.input = stringBoolean(isInput);\n } else if (!row.options.length) {\n continue;\n } else {\n rowTemplate.selected = getSavedFlag() ?? \"\";\n }\n } else if (rowIsOfType(row, \"drop\")) {\n const { name, uuid } = R.isPlainObject(row.value)\n ? row.value\n : (getSavedFlag() ?? {});\n\n if (row.filter.type === \"feat\") {\n this.#featUuids ??= R.pipe(\n this.actor.itemTypes.feat,\n R.map((feat) => feat.sourceId),\n R.filter(R.isTruthy),\n );\n }\n\n rowTemplate.note = row.note;\n rowTemplate.value = name ?? \"\";\n\n rowData.uuid = uuid ?? \"\";\n rowData.droptype = row.filter.type;\n } else if (rowIsOfType(row, \"alert\", \"notify\")) {\n rowData.save = \"false\";\n rowData.empty = \"false\";\n\n delete rowTemplate.unique;\n rowTemplate.value = row.message;\n\n if (rowIsOfType(row, \"alert\")) {\n hasAlert ||= true;\n } else {\n rowTemplate.color =\n row.color === true\n ? \"var(--notify-color)\"\n : typeof row.color === \"string\"\n ? row.color\n : \"var(--color-text-primary)\";\n }\n } else if (rowIsOfType(row, \"input\")) {\n rowTemplate.value = getSavedFlag() ?? \"\";\n }\n\n rowTemplate.data = dataToDatasetString(rowData);\n\n dailyTemplate.rows.push(rowTemplate);\n }\n\n if (dailyTemplate.rows.length) {\n templates.push(dailyTemplate);\n }\n }),\n );\n\n const rows: RowTemplate[] = [];\n const groups: DailyTemplate[] = [];\n\n for (const template of templates) {\n if (template.rows.length === 1 && ![\"alert\", \"notify\"].includes(template.rows[0].type)) {\n const row = template.rows[0];\n row.label = template.label;\n rows.push(row);\n } else if (template.rows.length) {\n groups.push(template);\n }\n }\n\n rows.sort((a, b) => b.order - a.order);\n groups.sort((a, b) => a.rows.length - b.rows.length);\n\n const hasDailies = !!rows.length || !!groups.length;\n\n return {\n rows,\n groups,\n hasDailies,\n hasAlert,\n canAccept: hasDailies && !hasAlert,\n };\n }\n\n async _renderHTML(context: DailyContext, _options: fa.ApplicationRenderOptions): Promise {\n return render(\"interface\", context);\n }\n\n _replaceHTML(result: string, content: HTMLElement, _options: fa.ApplicationRenderOptions) {\n content.innerHTML = result;\n this.#addEventListeners(content);\n }\n\n _onClickAction(_event: PointerEvent, el: HTMLElement) {\n const action = el.dataset.action as EventAction;\n\n if (action === \"accept\") {\n this.#accepDailies();\n } else if (action === \"cancel\") {\n this.close();\n } else if (action === \"clear-field\") {\n this.#clearField(el);\n } else if (action === \"configs\") {\n this.#openConfigs();\n } else if (action === \"open-browser\") {\n this.#openBrowser(el);\n } else if (action === \"resolve-alert\") {\n this.#resolveAlert(el);\n }\n }\n\n async #accepDailies() {\n const html = this.element;\n const labelElements = html.querySelectorAll(\"label.empty\");\n\n for (const labelEl of labelElements) {\n labelEl.classList.remove(\"empty\");\n }\n\n const emptyRows = htmlQueryAll(html, \"[data-empty='false']\").filter(\n (el) => el.value.trim() === \"\",\n );\n\n if (emptyRows.length) {\n localize.warning(\"interface.error.empty\");\n\n for (const inputEl of emptyRows) {\n const { row } = inputEl.dataset as RowElementDataset;\n const labelEl = htmlQuery(htmlClosest(inputEl, \".group\"), `label[data-row=\"${row}\"]`);\n\n labelEl?.classList.add(\"empty\");\n }\n\n return;\n }\n\n this.element.classList.add(\"disabled\");\n await processDailies.call(this);\n this.close();\n }\n\n async #openBrowser(el: HTMLElement) {\n const inputEl = htmlQuery(htmlClosest(el, \".drop\"), \"input\");\n if (!inputEl) return;\n\n const compendium = await this.compendiumFilterFromElement(inputEl);\n\n if (compendium) {\n game.pf2e.compendiumBrowser.openTab(compendium.type, { filter: compendium.filter });\n }\n }\n\n async #convertToCompendiumFilter(dropFilter: DailyRowDropFilters[T]) {\n const type = dropFilter.type;\n const browserTab = game.pf2e.compendiumBrowser.tabs[type];\n const compendiumFilter = await browserTab.getFilterData();\n\n if (filterIsOfType(dropFilter, \"spell\")) {\n const rank = Array.isArray(dropFilter.search.rank)\n ? dropFilter.search.rank.map(stringNumber)\n : typeof dropFilter.search.rank === \"string\"\n ? simplifyValue(this.actor, dropFilter.search.rank)\n : dropFilter.search.rank;\n\n dropFilter.search.rank = Array.isArray(rank)\n ? rank\n : typeof rank === \"number\"\n ? R.range(1, rank + 1).map(stringNumber)\n : undefined;\n }\n\n const checkboxes = Object.entries(compendiumFilter.checkboxes).concat([[\"source\", compendiumFilter.source]]);\n for (const checkboxEntry of checkboxes) {\n const [checkboxName, filterCheckbox] = checkboxEntry as [\n keyof typeof compendiumFilter.checkboxes,\n CheckboxData,\n ];\n const searchCheckbox = dropFilter.search[checkboxName];\n\n if (!searchCheckbox) {\n filterCheckbox.isExpanded = false;\n continue;\n }\n\n filterCheckbox.selected = searchCheckbox;\n filterCheckbox.isExpanded = true;\n\n for (const x of searchCheckbox) {\n const filterCheckboxOption = filterCheckbox.options[x];\n\n if (filterCheckboxOption) {\n filterCheckboxOption.selected = true;\n }\n }\n }\n\n if (\"traits\" in dropFilter.search) {\n const traitsFilter = compendiumFilter.traits;\n const searchTraits = Array.isArray(dropFilter.search.traits)\n ? { selected: dropFilter.search.traits }\n : dropFilter.search.traits;\n\n if (searchTraits) {\n traitsFilter.conjunction = searchTraits.conjunction ?? \"and\";\n\n for (const select of searchTraits.selected) {\n const selection = typeof select === \"string\" ? { value: select, not: undefined } : select;\n traitsFilter.selected.push(selection as any);\n }\n }\n }\n\n if (\"level\" in compendiumFilter && \"level\" in dropFilter.search) {\n const levelFilter = compendiumFilter.level;\n const searchLevel = isSimplifiableValue(dropFilter.search.level)\n ? { min: 0, max: simplifyValue(this.actor, dropFilter.search.level) ?? 20 }\n : dropFilter.search.level;\n\n if (searchLevel) {\n levelFilter.from = searchLevel.min ?? 0;\n levelFilter.to = searchLevel.max ?? 20;\n levelFilter.isExpanded = true;\n }\n }\n\n return compendiumFilter;\n }\n\n #clearField(btnEl: HTMLElement) {\n const inputEl = htmlQuery(btnEl.parentElement, \"input\");\n if (!inputEl) return;\n\n inputEl.dataset.tooltip = \"\";\n inputEl.classList.remove(\"exists\");\n inputEl.value = \"\";\n inputEl.dataset.uuid = \"\";\n\n btnEl.classList.add(\"disabled\");\n }\n\n async #resolveAlert(el: HTMLElement) {\n const data = el.dataset as RowElementDataset;\n const row = this.getDailyRow(data.daily, data.row);\n\n if (await row?.resolve()) {\n this.render({ position: { height: \"auto\" } });\n }\n }\n\n async #openConfigs() {\n if (this.#settingsApp) {\n this.#settingsApp.bringToFront();\n return;\n }\n\n const actor = this.actor;\n const id = `pf2e-dailies-settings-${actor.uuid}`;\n\n this.#settingsApp = new DailyConfig(actor, this.#dailiesArray, { id });\n this.#settingsApp.addEventListener(\"update\", () => {\n this.render({ position: { height: \"auto\" } });\n });\n this.#settingsApp.addEventListener(\n \"close\",\n () => {\n this.#settingsApp = undefined;\n },\n { once: true },\n );\n this.#settingsApp.render(true);\n }\n\n #onUniqueChange(el: HTMLSelectElement) {\n const uniqueTag = el.dataset.unique as string;\n const uniqueOptions = new Set();\n const selectElements = htmlClosest(el, \".dailies\")?.querySelectorAll(\n `select[data-unique=\"${uniqueTag}\"]`,\n );\n\n for (const selectEl of selectElements ?? []) {\n let index = selectEl.selectedIndex;\n const selectOptions = selectEl.options;\n const maxIndex = selectEl.options.length - 1;\n\n const optionUniqueValue = () => {\n const option = selectOptions[index];\n return option.dataset.skipUnique === \"true\" ? undefined : (option.dataset.unique ?? option.value);\n };\n\n const optionExists = () => {\n const value = optionUniqueValue();\n return value && uniqueOptions.has(value);\n };\n\n while (optionExists() && index > 0) {\n index -= 1;\n }\n\n while (optionExists() && index < maxIndex) {\n index += 1;\n }\n\n if (optionExists()) continue;\n\n const finalValue = optionUniqueValue();\n\n if (finalValue) {\n uniqueOptions.add(finalValue);\n }\n\n if (selectEl.selectedIndex !== index) {\n selectEl.selectedIndex = index;\n }\n }\n\n for (const selectEl of selectElements ?? []) {\n const index = selectEl.selectedIndex;\n const selectOptions = selectEl.options;\n\n for (let i = 0; i < selectOptions.length; i++) {\n if (i === index) continue;\n\n const option = selectOptions[i];\n\n option.disabled = uniqueOptions.has(option.dataset.unique ?? option.value);\n }\n }\n }\n\n #onInputChange(el: HTMLInputElement) {\n const clear = htmlQuery(htmlClosest(el, \".input\"), \".clear\");\n clear?.classList.toggle(\"disabled\", !el.value.trim());\n }\n\n #onComboInputChange(inputEl: HTMLInputElement) {\n const value = inputEl.value.trim().toLowerCase();\n const selectEl = htmlQuery(htmlClosest(inputEl, \".combo\"), \"select\");\n if (!selectEl) return;\n\n const option = value\n ? Array.from(selectEl.options).find(\n (option) => option.value === value || option.text.toLowerCase() === value,\n )\n : undefined;\n\n if (option) {\n selectEl.value = option.value;\n inputEl.value = option.text;\n inputEl.dataset.input = \"false\";\n } else {\n selectEl.value = \"\";\n inputEl.dataset.input = \"true\";\n }\n }\n\n #onComboSelectChange(selectEl: HTMLSelectElement) {\n const inputEl = htmlQuery(htmlClosest(selectEl, \".combo\"), \"input\");\n if (!inputEl) return;\n\n inputEl.dataset.input = \"false\";\n inputEl.value = selectEl.options[selectEl.selectedIndex].text;\n }\n\n #addEventListeners(html: HTMLElement) {\n addListenerAll(html, \".group > .drop\", \"drop\", onInterfaceDrop.bind(this));\n addListenerAll(html, \"[data-unique]\", \"change\", this.#onUniqueChange.bind(this));\n addListenerAll(html, \".combo input\", \"change\", this.#onComboInputChange.bind(this));\n addListenerAll(html, \".combo select\", \"change\", this.#onComboSelectChange.bind(this));\n addListenerAll(html, \".input input[type='text']\", \"change\", this.#onInputChange.bind(this));\n\n addListenerAll(html, \"input[type='text']\", \"keyup\", (el, event) => event.key === \"Enter\" && el.blur());\n\n const randomElements = html.querySelectorAll(\"select.random\");\n if (randomElements.length) {\n this.#randomInterval = setInterval(() => {\n for (const randomElement of randomElements) {\n randomElement.selectedIndex = (randomElement.selectedIndex + 1) % randomElement.options.length;\n }\n }, 1000);\n }\n\n const dropFeatInputs = html.querySelectorAll(\"input[data-droptype='feat']\");\n for (const dropFeatInput of dropFeatInputs) {\n const uuid = dropFeatInput.dataset.uuid;\n if (uuid && this.#featUuids.includes(uuid)) {\n dropFeatInput.classList.add(\"exists\");\n dropFeatInput.dataset.tooltip = dropFeatInput.dataset.cacheTooltip;\n }\n }\n\n const processedUniques: string[] = [];\n const uniqueSelects = html.querySelectorAll(\"[data-unique]\");\n for (const selectEl of uniqueSelects) {\n const { unique, dailykey } = selectEl.dataset as RowElementDataset;\n const uniqueTag = `${dailykey}.${unique}`;\n\n if (processedUniques.includes(uniqueTag)) continue;\n\n this.#onUniqueChange(selectEl);\n processedUniques.push(uniqueTag);\n }\n }\n}\n\nfunction filterIsOfType(\n filter: DailyRowDropFilter,\n type: T,\n): filter is DailyRowDropFilters[T] {\n return filter.type === type;\n}\n\nfunction simplifyValue(actor: ActorPF2e, value: SimplifiableValue): number | undefined {\n if (typeof value === \"number\") {\n return value;\n }\n\n if (value === \"level\") {\n return actor.level;\n }\n\n if (value === \"half\") {\n return Math.max(1, Math.floor(actor.level / 2));\n }\n\n const numbered = Number(value) || 0;\n return Number.isNaN(numbered) ? undefined : numbered;\n}\n\nfunction isSimplifiableValue(value: any): value is SimplifiableValue {\n return (\n typeof value === \"number\" ||\n value === \"level\" ||\n value === \"half\" ||\n (typeof value === \"string\" && !Number.isNaN(Number(value)))\n );\n}\n\ntype EventAction = \"accept\" | \"cancel\" | \"clear-field\" | \"configs\" | \"open-browser\" | \"resolve-alert\";\n\ntype SimplifiableValue = number | `${number}` | \"level\" | \"half\";\n\ntype DailyRowDropFilter = DailyRowDropFilters[DailyRowDropType];\n\ntype DailyRowDropFilters = {\n feat: DailyRowDropFeatFilter;\n spell: DailyRowDropSpellFilter;\n};\n\ntype DailyRowDropFeatFilter = DailyRowDropFeat[\"filter\"];\n\ntype DailyRowDropSpellFilter = DailyRowDropSpell[\"filter\"];\n\ntype RowElementDatasetBase = {\n daily: string;\n row: string;\n save: `${boolean}`;\n};\n\ntype RowElementDataset = RowElementDatasetBase & {\n type: DailyRowType;\n dailykey: string;\n droptype: DailyRowDropType;\n unique: string;\n input: `${boolean}`;\n uuid: string;\n empty: `${boolean}`;\n};\n\ntype DailyContext = fa.ApplicationRenderContext & {\n rows: RowTemplate[];\n groups: DailyTemplate[];\n hasDailies: boolean;\n hasAlert: boolean;\n canAccept: boolean;\n};\n\ntype DailyTemplate = {\n label: string;\n rows: RowTemplate[];\n};\n\ntype RowTemplate = {\n type: DailyRowType;\n label: string;\n daily: string;\n row: string;\n value?: string;\n note?: string;\n selected?: string;\n unique?: string;\n order: number;\n data: string;\n options?: (DailyRowSelectOption | { groupEnd: true })[];\n color?: string;\n};\n\ntype DropFilter = {\n daily: string;\n row: string;\n type: DailyRowDropType;\n filter: FeatFilters | SpellFilters;\n};\n\nexport { DailyInterface };\nexport type { DropFilter, RowElementDataset };\n", "import { getDisabledDailies } from \"actor\";\nimport { PreparedDaily } from \"dailies\";\nimport { DailyConfigRow, DailyConfigRowValue } from \"daily\";\nimport {\n addListenerAll,\n CharacterPF2e,\n getFlag,\n getInputValue,\n localize,\n R,\n render,\n setFlag,\n unsetFlag,\n} from \"foundry-helpers\";\n\nconst ApplicationV2 = foundry.applications.api.ApplicationV2;\n\nclass DailyConfig extends ApplicationV2 {\n #actor: CharacterPF2e;\n #dailies: PreparedDaily[];\n\n constructor(actor: CharacterPF2e, dailies: PreparedDaily[], options?: DeepPartial) {\n super(options);\n this.#actor = actor;\n this.#dailies = dailies;\n }\n\n static emittedEvents = Object.freeze([...ApplicationV2.emittedEvents, \"update\"]);\n\n static DEFAULT_OPTIONS: DeepPartial = {\n window: {\n positioned: true,\n resizable: false,\n minimizable: false,\n frame: true,\n },\n };\n\n get title() {\n return localize(\"config.title\", { actor: this.actor.name });\n }\n\n get actor() {\n return this.#actor;\n }\n\n async _prepareContext(_options: fa.ApplicationRenderOptions): Promise {\n const actor = this.actor;\n const disabled = getDisabledDailies(actor);\n\n const dailies = R.pipe(\n await Promise.all(\n this.#dailies.map(async (daily): Promise => {\n const configs = R.pipe(\n (R.isFunction(daily.config) && (await daily.config(actor))) || [],\n R.map((config) => {\n config.value ??= getFlag(actor, \"config\", daily.key, config.name);\n\n if (config.type === \"range\") {\n config.min ??= 0;\n config.step ??= 1;\n }\n\n return config;\n }),\n );\n\n return {\n key: daily.key,\n label: daily.label as string,\n enabled: disabled[daily.key] !== true,\n configs: configs?.length ? configs : undefined,\n };\n }),\n ),\n R.sortBy(R.prop(\"label\")),\n );\n\n return {\n dailies,\n };\n }\n\n _renderHTML(context: ConfigContext, _options: fa.ApplicationRenderOptions): Promise {\n return render(\"config\", context);\n }\n\n _replaceHTML(result: string, content: HTMLElement, _options: fa.ApplicationRenderOptions) {\n content.innerHTML = result;\n this.#activateListeners(content);\n }\n\n async _onRender() {\n const familiarInput = this.element.querySelector(\n \".window-content .familiar [name='familiar-range'] input[type='number']\",\n );\n\n if (familiarInput) {\n familiarInput.disabled = true;\n }\n }\n\n #activateListeners(html: HTMLElement) {\n const actor = this.actor;\n\n addListenerAll(html, \".daily [name]\", \"change\", async (el: HTMLInputElement) => {\n const dailyKey = el.dataset.dailyKey as string;\n\n if (el.checked) {\n await unsetFlag(this.actor, \"disabled\", dailyKey);\n } else {\n await setFlag(this.actor, \"disabled\", dailyKey, true);\n }\n\n this.dispatchEvent(new Event(\"update\", { bubbles: true, cancelable: true }));\n });\n\n addListenerAll(html, \".config [name]\", \"change\", async (el: HTMLInputElement) => {\n const dailyKey = el.dataset.dailyKey as string;\n const value = getInputValue(el);\n const saveValue =\n el.dataset.saveMaxValue === \"true\" ? { value, max: Number(el.getAttribute(\"max\")) } : value;\n\n await setFlag(actor, \"config\", dailyKey, el.name, saveValue);\n\n if (el.dataset.dispatchUpdateEvent === \"true\") {\n this.dispatchEvent(new Event(\"update\", { bubbles: true, cancelable: true }));\n }\n });\n }\n}\n\ntype ConfigContextDaily = {\n key: string;\n label: string;\n enabled: boolean;\n configs: DailyConfigRow[] | undefined;\n};\n\ntype ConfigContext = fa.ApplicationRenderContext & {\n dailies: ConfigContextDaily[];\n};\n\nexport { DailyConfig };\n", "import { DailyRowDrop } from \"daily\";\nimport {\n FeatFilters,\n FeatOrFeatureCategory,\n FeatPF2e,\n filterTraits,\n getDragEventData,\n getTranslatedSkills,\n htmlClosest,\n htmlQuery,\n localize,\n MagicTradition,\n R,\n Rarity,\n SkillSlug,\n SpellFilters,\n SpellPF2e,\n SpellTrait,\n} from \"foundry-helpers\";\nimport { DailyInterface } from \"./application\";\n\nasync function onInterfaceDrop(this: DailyInterface, el: HTMLElement, event: DragEvent) {\n const target = htmlQuery(el, \"input\");\n if (!target) return;\n\n const data = getDragEventData(event);\n\n if (data?.type !== \"Item\" || typeof data.uuid !== \"string\") {\n return localize.error(\"interface.drop.error.wrongDataType\");\n }\n\n const item = await fromUuid(data.uuid);\n const compendium = await this.compendiumFilterFromElement(target);\n\n if (!item || !compendium) {\n return localize.error(\"interface.drop.error.wrongDataType\");\n }\n\n if (item.parent) {\n return localize.error(\"interface.drop.error.wrongSource\");\n }\n\n if (item.type !== compendium.type) {\n return dropDataWarning(\n \"type\",\n game.i18n.localize(`TYPES.Item.${compendium.type}`),\n game.i18n.localize(`TYPES.Item.${item.type}`),\n );\n }\n\n const dailyRow = this.getDailyRow(compendium.daily, compendium.row);\n if (dailyRow?.onDrop && typeof dailyRow.onDrop === \"function\") {\n const result = await dailyRow.onDrop(item as any, this.actor);\n\n if (result === false) {\n return localize.warning(\"interface.drop.error.exclude\", { item: item.name });\n }\n if (typeof result === \"string\") {\n return ui.notifications.warn(result);\n }\n }\n\n const isFeat = item.isOfType(\"feat\");\n const isValid = isFeat\n ? validateFeat(item, compendium.filter as FeatFilters)\n : validateSpell(item, compendium.filter as SpellFilters);\n\n if (!isValid) return;\n\n target.value = item.name;\n target.dataset.uuid = item.uuid;\n\n const clear = htmlQuery(htmlClosest(target, \".drop\"), \".clear\");\n clear?.classList.remove(\"disabled\");\n\n if (isFeat) {\n const exists = !!this.actor.itemTypes.feat.find((feat) => feat.sourceId === data.uuid);\n target.classList.toggle(\"exists\", exists);\n target.dataset.tooltip = exists ? target.dataset.cacheTooltip : \"\";\n }\n}\n\nfunction dropDataWarning(type: string, need?: string | string[], has?: string | string[]) {\n const localizedType = localize(\"interface.drop.error.type\", type);\n const formattedNeed = Array.isArray(need) ? (need.length === 1 ? need[0] : `[${need.join(\", \")}]`) : need;\n const formattedHas = Array.isArray(has) ? (has.length === 1 ? has[0] : `[${has.join(\", \")}]`) : has;\n const localizedHas = formattedHas || localize(\"interface.drop.error.none\");\n const localizedRequire =\n need && has\n ? localize(\"interface.drop.error.require\", {\n need: formattedNeed,\n has: localizedHas,\n })\n : need\n ? localize(\"interface.drop.error.missing\", { need: formattedNeed })\n : localize(\"interface.drop.error.invalid\", { has: localizedHas });\n\n localize.warning(\"interface.drop.error.wrongData\", {\n type: localizedType,\n require: localizedRequire,\n });\n}\n\nfunction validateSpell(item: SpellPF2e, filter: SpellFilters): boolean {\n const { checkboxes } = filter;\n\n const itemRank = String(item.rank);\n const filterRanks = checkboxes.rank.selected;\n if (filterRanks.length && !filterRanks.includes(itemRank)) {\n dropDataWarning(\"rank\", filterRanks, itemRank);\n return false;\n }\n\n const filterCategories = checkboxes.category.selected as SpellTrait[];\n if (filterCategories.length) {\n const isCantrip = item.isCantrip;\n const isFocusSpell = item.isFocusSpell;\n const isRitual = item.isRitual;\n const isSpell = !isCantrip && !isFocusSpell && !isRitual;\n const categories = R.filter(\n [\n isSpell ? \"spell\" : null,\n isCantrip ? \"cantrip\" : null,\n isFocusSpell ? \"focus\" : null,\n isRitual ? \"ritual\" : null,\n ] as SpellTrait[],\n R.isTruthy,\n );\n\n const sortedFilterCategories = filterCategories.sort();\n const sortedItemCategories = categories.sort();\n\n if (!R.isDeepEqual(sortedFilterCategories, sortedItemCategories)) {\n dropDataWarning(\n \"categories\",\n sortedFilterCategories.map((x) => game.i18n.localize(CONFIG.PF2E.spellTraits[x])),\n sortedItemCategories.map((x) => game.i18n.localize(CONFIG.PF2E.spellTraits[x] ?? \"TYPES.Item.spell\")),\n );\n return false;\n }\n }\n\n const filterTraditions = checkboxes.traditions.selected as MagicTradition[];\n const itemTraditions = item.system.traits.traditions as MagicTradition[];\n if (filterTraditions.length && !R.intersection(filterTraditions, itemTraditions).length) {\n dropDataWarning(\n \"traditions\",\n filterTraditions.map((x) => game.i18n.localize(CONFIG.PF2E.magicTraditions[x])),\n itemTraditions.map((x) => game.i18n.localize(CONFIG.PF2E.magicTraditions[x])),\n );\n return false;\n }\n\n if (!validateDefault(item, filter)) {\n return false;\n }\n\n return true;\n}\n\nfunction validateFeat(item: FeatPF2e, filter: FeatFilters): boolean {\n const { checkboxes, level } = filter;\n\n if (!item.level.between(level.from, level.to)) {\n dropDataWarning(\"level\", `${level.from}-${level.to}`, String(item.level));\n return false;\n }\n\n const filterCategory = checkboxes.category.selected as FeatOrFeatureCategory[];\n if (filterCategory.length && !filterCategory.includes(item.category)) {\n dropDataWarning(\n \"category\",\n filterCategory.map((x) => game.i18n.localize(CONFIG.PF2E.featCategories[x])),\n game.i18n.localize(CONFIG.PF2E.featCategories[item.category]),\n );\n return false;\n }\n\n const filterSkills = checkboxes.skills.selected as SkillSlug[];\n if (filterSkills.length) {\n const prereqs: { value: string }[] = item.system.prerequisites.value;\n const prerequisitesArr = prereqs.map((prerequisite) =>\n prerequisite?.value ? prerequisite.value.toLowerCase() : \"\",\n );\n const translatedSkills = getTranslatedSkills(true);\n const skillList = Object.entries(translatedSkills);\n const skills: Set = new Set();\n\n for (const prereq of prerequisitesArr) {\n for (const [key, value] of skillList) {\n if (prereq.includes(key) || prereq.includes(value)) {\n skills.add(key as SkillSlug);\n }\n }\n }\n\n const itemSkills = [...skills];\n const missingSkills = R.difference(filterSkills, itemSkills);\n\n if (missingSkills.length) {\n dropDataWarning(\n \"skills\",\n missingSkills.map((x) => translatedSkills[x]),\n );\n return false;\n }\n }\n\n if (!validateDefault(item, filter)) {\n return false;\n }\n\n return true;\n}\n\nfunction validateDefault(item: FeatPF2e | SpellPF2e, filter: FeatFilters | SpellFilters): boolean {\n const { checkboxes, source, traits } = filter;\n const itemTraits = item.system.traits.value.map((t: string) => t.replace(/^hb_/, \"\"));\n\n if (!filterTraits(itemTraits, traits.selected, traits.conjunction)) {\n localize.warning(\"interface.drop.error.wrongTraits\");\n return false;\n }\n\n const filterRarity = checkboxes.rarity.selected as Rarity[];\n if (filterRarity.length && !filterRarity.includes(item.rarity)) {\n dropDataWarning(\n \"rarity\",\n filterRarity.map((x) => game.i18n.localize(CONFIG.PF2E.rarityTraits[x])),\n game.i18n.localize(CONFIG.PF2E.rarityTraits[item.rarity]),\n );\n return false;\n }\n\n const filterSource = source.selected;\n if (filterSource.length) {\n const { system } = item._source as {\n system: { source?: { value: string }; publication?: { title: string } };\n };\n const pubSource = String(system.publication?.title ?? system.source?.value ?? \"\").trim();\n const sourceSlug = game.pf2e.system.sluggify(pubSource);\n\n if (!filterSource.includes(sourceSlug)) {\n dropDataWarning(\"source\", \"\", pubSource);\n return false;\n }\n }\n\n return true;\n}\n\nexport { onInterfaceDrop };\n", "import { DailyActorFlags } from \"actor\";\nimport { PreparedDaily } from \"dailies\";\nimport { DailyMessageOptions, DailyProcessOptions, DailyRowData, DailyRowType, DailyRuleElement } from \"daily\";\nimport {\n CharacterPF2e,\n createChatLink,\n FeatPF2e,\n FeatSource,\n getActorSize,\n getFlag,\n getFlagProperty,\n htmlClosest,\n htmlQuery,\n ItemPF2e,\n ItemSourcePF2e,\n localize,\n MapOfArrays,\n MODULE,\n OneToTen,\n PhysicalItemSource,\n R,\n setFlagProperty,\n setHasElement,\n SpellPF2e,\n SYSTEM,\n} from \"foundry-helpers\";\nimport { enrichHTML, PHYSICAL_ITEM_TYPES } from \"foundry-helpers/dist\";\nimport { createSpellcastingWithHighestStatisticSource } from \"spellcasting\";\nimport { createUpdateCollection, utils } from \"utils\";\nimport { DailyInterface } from \".\";\nimport fu = foundry.utils;\n\nasync function processDailies(this: DailyInterface) {\n const rowElements = this.element.querySelectorAll(\"[data-daily]\");\n\n const flags: Record> = {};\n const extraFlags: Record = {};\n const dailies: Record<\n string,\n {\n daily: PreparedDaily;\n rows: Record;\n }\n > = {};\n\n for (const rowElement of rowElements) {\n let row: DailyRowData;\n\n if (rowElementIsOFType(rowElement, \"drop\")) {\n row = {\n uuid: rowElement.dataset.uuid,\n name: rowElement.value,\n };\n } else if (rowElementIsOFType(rowElement, \"combo\")) {\n const isInput = rowElement.dataset.input === \"true\";\n const selected = isInput\n ? rowElement.value.trim()\n : (htmlQuery(htmlClosest(rowElement, \".combo\"), \"select\")?.value ?? \"\");\n\n row = {\n selected,\n input: isInput,\n };\n } else if (rowElementIsOFType(rowElement, \"select\", \"input\")) {\n row = rowElement.value.trim();\n } else if (rowElementIsOFType(rowElement, \"random\")) {\n row = utils.selectRandomOption(rowElement);\n } else if (rowElementIsOFType(rowElement, \"notify\")) {\n row = true;\n } else {\n continue;\n }\n\n const data = rowElement.dataset as RowElementDatasetBase;\n\n dailies[data.daily] ??= {\n daily: this.dailies[data.daily]!,\n rows: {},\n };\n\n dailies[data.daily].rows[data.row] = row;\n\n if (data.save === \"true\") {\n flags[data.daily] ??= {};\n flags[data.daily][data.row] = row;\n }\n }\n\n const actor = this.actor;\n const deletedItems: string[] = [];\n const addedItems: (PreCreate | ItemSourcePF2e)[] = [];\n const flaggedItems = new MapOfArrays();\n const itemsRules = new Map();\n const [updatedItems, updateItem] = createUpdateCollection();\n const rawMessages: { message: string; order: number }[] = [];\n const addedItemIds: string[] = [];\n const temporaryDeleted: Record = {};\n\n const messageGroups: Record = {\n languages: { order: 80, messages: [] },\n skills: { order: 70, messages: [] },\n resistances: { order: 60, messages: [] },\n feats: { order: 50, messages: [] },\n spells: { order: 40, messages: [] },\n scrolls: { order: 30, messages: [] },\n };\n\n const getRules = (item: ItemPF2e) => {\n const id = item.id;\n const existing = itemsRules.get(id);\n\n if (existing) {\n return existing;\n }\n\n const rules = fu.deepClone(item._source.system.rules);\n\n for (let i = rules.length - 1; i >= 0; i--) {\n if (MODULE.id in rules[i]) {\n rules.splice(i, 1);\n }\n }\n\n itemsRules.set(id, rules);\n return rules;\n };\n\n const processOptions = (\n daily: PreparedDaily,\n rows: Record,\n ): Omit => {\n const items = daily.prepared.items;\n const custom = daily.prepared.custom;\n\n return {\n actor,\n items,\n custom,\n // @ts-ignore\n rows,\n messages: {\n add: (group, message) => {\n messageGroups[group] ??= { order: 0, messages: [] };\n messageGroups[group].messages.push(message);\n },\n addGroup: (name, label, order = 0) => {\n if (name in messageGroups) {\n messageGroups[name].label ??= label;\n messageGroups[name].order ??= order;\n } else {\n messageGroups[name] = {\n label,\n order,\n messages: [],\n };\n }\n },\n addRaw: (message, order: number = 1) => {\n rawMessages.push({ message, order });\n },\n },\n updateItem,\n flagItem: (item, label) => {\n if (item.actor !== actor) return;\n flaggedItems.add(item.id, label?.trim() || (daily.label as string));\n },\n deleteItem: (item, temporary = false) => {\n if (temporary) {\n temporaryDeleted[item.id] = item.toObject();\n }\n\n deletedItems.push(item.id);\n },\n removeRule: (item: ItemPF2e, signature: (rule: DailyRuleElement) => boolean) => {\n const rules = getRules(item);\n\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n\n if (signature(rule)) {\n rules.splice(i, 1);\n }\n }\n },\n setExtraFlags: (data: Record) => {\n fu.mergeObject((extraFlags[daily.key] ??= {}), data);\n },\n };\n };\n\n await Promise.all(\n Object.values(dailies).map(({ daily, rows }) => {\n const addItem = (source: PreCreate | ItemSourcePF2e, temporary: boolean = true) => {\n if (temporary) {\n setFlagProperty(source, \"temporary\", true);\n }\n if (setHasElement(PHYSICAL_ITEM_TYPES, source.type)) {\n const actorSize = getActorSize(actor);\n foundry.utils.setProperty(source, \"system.size\", actorSize.value);\n }\n setFlagProperty(source, \"daily\", daily.key);\n addedItems.push(source);\n };\n\n const addFeat = (\n source: PreCreate | FeatSource,\n parent?: ItemPF2e | null,\n temporary = true,\n ) => {\n if (parent?.isOfType(\"feat\")) {\n const parentId = parent.id;\n fu.setProperty(source, `flags.${SYSTEM.id}.grantedBy`, {\n id: parentId,\n onDelete: \"cascade\",\n });\n setFlagProperty(source, \"grantedBy\", parentId);\n }\n addItem(source, temporary);\n };\n\n try {\n const globalOptions = processOptions(daily, rows);\n const options = R.merge(globalOptions, {\n addItem,\n addFeat,\n addRule: (item: ItemPF2e, source: DailyRuleElement) => {\n source[MODULE.id] = daily.key;\n getRules(item).push(source);\n },\n replaceFeat: (original: FeatPF2e, source: PreCreate | FeatSource) => {\n fu.setProperty(source, \"system.location\", original.system.location);\n fu.setProperty(source, \"system.level.taken\", original.system.level.taken);\n\n addFeat(source, original.grantedBy, false);\n globalOptions.deleteItem(original);\n },\n });\n\n return daily.process(options);\n } catch (err: any) {\n localize.error(\"error.unexpected\");\n console.error(err);\n console.error(`The error occured during processing of ${daily.key}`);\n }\n }),\n );\n\n let hasOrphanSpells = false;\n const entryIdentifier = fu.randomID();\n\n for (const source of addedItems) {\n if (\n source.type === \"spell\" &&\n !fu.getProperty(source, \"system.location.value\") &&\n !getFlagProperty(source, \"identifier\")\n ) {\n hasOrphanSpells = true;\n setFlagProperty(source, \"identifier\", entryIdentifier);\n }\n }\n\n if (hasOrphanSpells) {\n const source = createSpellcastingWithHighestStatisticSource(actor, {\n name: localize(\"spellEntry.name\"),\n });\n\n if (source) {\n setFlagProperty(source, \"temporary\", true);\n setFlagProperty(source, \"identifier\", entryIdentifier);\n addedItems.push(source);\n }\n }\n\n const currentFocus = actor.system.resources.focus;\n const currentMaxFocus = Math.clamp(currentFocus.max, 0, currentFocus.cap);\n\n let hasFocusSpells = currentMaxFocus;\n\n const actualAddedItems = addedItems.length ? await actor.createEmbeddedDocuments(\"Item\", addedItems) : [];\n\n if (actualAddedItems.length) {\n for (const item of actualAddedItems) {\n if (getFlag(item, \"temporary\")) {\n addedItemIds.push(item.id);\n }\n }\n\n for (const item of actualAddedItems) {\n if (item.isOfType(\"feat\")) {\n const parentId = getFlag(item, \"grantedBy\");\n\n if (parentId) {\n const slug = game.pf2e.system.sluggify(item.name, { camel: \"dromedary\" });\n const path = `flags.${SYSTEM.id}.itemGrants.${slug}`;\n\n updateItem({\n _id: parentId,\n [path]: { id: item.id, onDelete: \"detach\" },\n });\n }\n } else if (item.isOfType(\"spellcastingEntry\")) {\n const identifier = getFlag(item, \"identifier\");\n if (!identifier) continue;\n\n const spells = actualAddedItems.filter(\n (spell): spell is SpellPF2e =>\n spell.isOfType(\"spell\") && getFlag(spell, \"identifier\") === identifier,\n );\n\n for (const spell of spells) {\n const rank = getFlag(spell, \"rank\");\n const update: EmbeddedDocumentUpdateData = {\n _id: spell.id,\n \"system.location.value\": item.id,\n \"system.location.heightenedLevel\": rank,\n };\n\n if (getFlag(spell, \"signature\")) {\n update[\"system.location.signature\"] = true;\n }\n\n updateItem(update);\n }\n } else if (\n hasFocusSpells < currentFocus.cap &&\n item.isOfType(\"spell\") &&\n item.system.traits.value.includes(\"focus\")\n ) {\n hasFocusSpells += 1;\n }\n }\n\n await Promise.all(\n Object.values(dailies).map(({ daily, rows }) => {\n if (!R.isFunction(daily.afterItemAdded)) return;\n\n try {\n const options = R.merge(processOptions(daily, rows), {\n addedItems: actualAddedItems.filter((item) => getFlag(item, \"daily\") === daily.key),\n });\n\n return daily.afterItemAdded(options);\n } catch (err: any) {\n localize.error(\"error.unexpected\");\n console.error(err);\n console.error(`The error occured during processing of ${daily.key}`);\n }\n }),\n );\n }\n\n for (const [_id, rules] of itemsRules) {\n updateItem({ _id, \"system.rules\": rules });\n }\n\n if (updatedItems.size) {\n processUpdatedItemsData(actor, updatedItems);\n await actor.updateEmbeddedDocuments(\"Item\", updatedItems.contents);\n }\n\n if (deletedItems.length) {\n await actor.deleteEmbeddedDocuments(\"Item\", deletedItems);\n }\n\n const messages = Object.entries(messageGroups);\n const chatGroups = rawMessages.map(({ message, order }) => ({\n message: `

${message}

`,\n order,\n }));\n\n for (const [type, group] of messages) {\n if (!group.messages.length) continue;\n\n const groupLabel = group.label\n ? game.i18n.localize(group.label)\n : (localize.ifExist(\"message.groups\", type) ?? localize(\"message.gained\", { type }));\n\n let message = `

${groupLabel}

`;\n\n for (const messageOptions of group.messages) {\n message += \"

\";\n\n const label = messageOptions.label?.trim();\n\n if (\"sourceId\" in messageOptions && messageOptions.sourceId) {\n const item = actualAddedItems.find((x) => x.sourceId === messageOptions.sourceId);\n message += createChatLink(item?.uuid ?? messageOptions.sourceId, { label });\n } else if (\"uuid\" in messageOptions && messageOptions.uuid) {\n message += createChatLink(messageOptions.uuid, { label });\n } else if (label) {\n message += ` ${label}`;\n }\n\n if (messageOptions.selected) {\n message += `${messageOptions.selected}`;\n }\n\n if (messageOptions.random) {\n message += '';\n }\n\n message += \"

\";\n }\n\n chatGroups.push({ message, order: group.order });\n }\n\n const preface = localize(chatGroups.length ? \"message.changes\" : \"message.noChanges\");\n\n chatGroups.unshift({ message: preface, order: Infinity });\n chatGroups.sort((a, b) => b.order - a.order);\n\n const ChatMessagePF2e = getDocumentClass(\"ChatMessage\");\n const chatContent = chatGroups.map((group) => group.message).join(\"
\");\n\n await ChatMessagePF2e.create({\n content: `
${chatContent}
`,\n speaker: ChatMessagePF2e.getSpeaker({ actor }),\n });\n\n const actorUpdates: Record = {};\n\n if (currentMaxFocus !== hasFocusSpells) {\n const newMaxValue = Math.min(hasFocusSpells, currentFocus.cap);\n const newValue = currentFocus.value + (newMaxValue - currentMaxFocus);\n\n actorUpdates[\"system.resources.focus.max\"] = newMaxValue;\n\n if (newValue !== currentFocus.value) {\n actorUpdates[\"system.resources.focus.value\"] = newValue;\n }\n }\n\n setFlagProperty(actorUpdates, {\n ...flags,\n extra: extraFlags,\n rested: false,\n addedItems: addedItemIds,\n flaggedItems: flaggedItems.toObject(),\n temporaryDeleted,\n tooltip: await enrichHTML(chatContent),\n } satisfies DailyActorFlags);\n\n await actor.update(actorUpdates);\n}\n\nfunction processUpdatedItemsData(actor: CharacterPF2e, updatedItems: Collection) {\n for (const data of updatedItems) {\n const rootItem = actor.items.get(data._id);\n if (rootItem) continue;\n\n // we remove the subitem update, it will be processed by its parent below\n updatedItems.delete(data._id);\n\n const parent = actor.inventory.find((parent) => parent.subitems.some((item) => item._id === data._id));\n if (!parent) continue;\n\n // if the parent doesn't already have updates planned, we create a new one\n const parentUpdates = updatedItems.get(parent.id) ?? { _id: parent.id };\n // we recover the current state of subitems updates\n const subitemsUpdates =\n (parentUpdates.system as PhysicalItemSource[\"system\"] | undefined)?.subitems ??\n parent._source.system.subitems;\n\n const newSubitemsUpdates = subitemsUpdates?.map((item) =>\n item._id === data._id ? fu.mergeObject(item, data, { inplace: false }) : item,\n );\n\n foundry.utils.setProperty(parentUpdates, \"system.subitems\", newSubitemsUpdates);\n updatedItems.set(parent.id, parentUpdates);\n }\n}\n\nfunction rowElementIsOFType(\n el: HTMLSelectElement | HTMLInputElement,\n ...types: T[]\n): el is RowElementTypes[T] {\n return types.some((type) => el.dataset.type === type);\n}\n\ntype DailyMessageGroup = {\n order: number;\n label?: string;\n messages: DailyMessageOptions[];\n};\n\ntype RowElementDatasetBase = {\n daily: string;\n row: string;\n save: `${boolean}`;\n};\n\ntype RowElementTypes = {\n select: HTMLSelectElement & { dataset: RowElementDatasetBase };\n random: HTMLSelectElement & { dataset: RowElementDatasetBase };\n combo: HTMLInputElement & { dataset: RowElementDatasetBase & { input: `${boolean}` } };\n alert: HTMLInputElement & { dataset: RowElementDatasetBase };\n input: HTMLInputElement & { dataset: RowElementDatasetBase };\n notify: HTMLInputElement & { dataset: RowElementDatasetBase };\n drop: HTMLInputElement & { dataset: RowElementDatasetBase & { uuid: string } };\n};\n\nexport { processDailies, processUpdatedItemsData };\n", "import { getDailies } from \"dailies\";\nimport { DailyConfigRowValue, DailyRowData } from \"daily\";\nimport { DailyInterface } from \"interface\";\nimport { ActorPF2e, CharacterPF2e, getFlag, ItemSourcePF2e, localize } from \"foundry-helpers\";\n\nfunction canPrepareDailies(actor: ActorPF2e): boolean {\n return isValidCharacter(actor) && getActorFlag(actor, \"rested\") !== false;\n}\n\nfunction isValidCharacter(actor: Maybe): actor is CharacterPF2e {\n return actor instanceof Actor && actor.isOfType(\"character\");\n}\n\nfunction getActorFlag(actor: CharacterPF2e, key: K): DailyActorFlags[K] | undefined {\n return getFlag(actor, key);\n}\n\nfunction getDailiesSummary(actor: Maybe): string {\n return (isValidCharacter(actor) && getFlag(actor, \"tooltip\")) || localize(\"sheet.unrested\");\n}\n\nfunction getDisabledDailies(actor: CharacterPF2e) {\n const flag = getActorFlag(actor, \"disabled\") ?? {};\n return foundry.utils.flattenObject(flag) as Record;\n}\n\nasync function openDailiesInterface(actor: Maybe) {\n if (!isValidCharacter(actor) || !actor.isOwner || !canPrepareDailies(actor)) {\n return;\n }\n\n const dailies = await getDailies(actor);\n new DailyInterface(actor, dailies).render(true);\n}\n\ntype DailyActorFlags = {\n rested?: boolean;\n addedItems?: string[];\n flaggedItems?: Record;\n config?: Record;\n extra?: Record;\n disabled?: Record>;\n dailies?: Record>;\n custom?: Record>;\n tooltip?: string;\n temporaryDeleted?: Record;\n};\n\nexport { canPrepareDailies, getActorFlag, getDailiesSummary, getDisabledDailies, openDailiesInterface };\nexport type { DailyActorFlags };\n", "import { ActorInventory, ActorPF2e, DatabaseDeleteOperation, getFlag, MODULE, PhysicalItemPF2e } from \"foundry-helpers\";\n\nfunction onActorPrepareEmbeddedDocuments(\n this: TActor,\n wrapped: libWrapper.RegisterCallback,\n): void {\n wrapped();\n\n try {\n Object.defineProperty(this.inventory, \"deleteTemporaryItems\", {\n value: async function (\n this: ActorInventory,\n operation?: Partial>,\n ): Promise[]> {\n const actor = this.actor;\n const specialResourceItems = Object.values(actor.synthetics.resources)\n .map((r) => r.itemUUID)\n .filter((i) => !!i);\n const itemsToDelete = this.actor.inventory\n .filter(\n (i) =>\n i.system.temporary &&\n !getFlag(i, \"temporary\") &&\n (!i.sourceId || !specialResourceItems.includes(i.sourceId)),\n )\n .map((i) => i.id);\n\n if (itemsToDelete.length) {\n const deletedItems = await actor.deleteEmbeddedDocuments(\"Item\", itemsToDelete, operation);\n return deletedItems as PhysicalItemPF2e[];\n }\n\n return [];\n },\n });\n } catch (error: any) {\n MODULE.error(\"ActorPF2e#prepareEmbeddedDocuments\", error);\n }\n}\n\nexport { onActorPrepareEmbeddedDocuments };\n", "import { getStaffData, StaffSpellcasting } from \"data\";\nimport {\n CharacterPF2e,\n ChatMessagePF2e,\n getSpellCollectionCls,\n MODULE,\n SpellcastingEntry,\n SpellSource,\n SpellToMessageOptions,\n SYSTEM,\n} from \"foundry-helpers\";\nimport { getHighestSpellcastingStatistic } from \"spellcasting\";\n\nfunction onCharacterPrepareData(this: CharacterPF2e, wrapped: libWrapper.RegisterCallback): void {\n wrapped();\n\n try {\n const staffFlags = getStaffData(this);\n if (!staffFlags) return;\n\n const staff = this.items.get(staffFlags.staffId);\n if (!staff) return;\n\n const staffStatistic = (() => {\n if (staffFlags.statistic) {\n const statistic = this.getStatistic(staffFlags.statistic.slug);\n return statistic\n ? {\n statistic,\n tradition: staffFlags.statistic.tradition,\n }\n : undefined;\n }\n return getHighestSpellcastingStatistic(this);\n })();\n\n if (!staffStatistic) return;\n\n const collectionId = `${staff.id}-casting`;\n const staffEntry = new StaffSpellcasting(\n {\n ...staffStatistic,\n id: collectionId,\n name: staff.name,\n actor: this,\n castPredicate: [`item:id:${staff.id}`, { or: staffFlags.spells.map((s) => `spell:id:${s._id}`) }],\n },\n staff,\n ) as unknown as SpellcastingEntry;\n\n class StaffSpell extends CONFIG.PF2E.Item.documentClasses.spell {\n override async toMessage(\n event?: Maybe,\n { create = true, data, rollMode }: SpellToMessageOptions = {},\n ): Promise {\n const message = await super.toMessage(event, { rollMode, data, create: false });\n if (!message) return undefined;\n\n const messageSource = message.toObject();\n\n foundry.utils.setProperty(messageSource, `flags.${SYSTEM.id}.casting.embeddedSpell`, this.toObject());\n\n if (!create) {\n message.updateSource(messageSource);\n return message;\n }\n\n return getDocumentClass(\"ChatMessage\").create(messageSource, { renderSheet: false });\n }\n }\n\n const SpellCollection = getSpellCollectionCls(this);\n const collection = new SpellCollection(staffEntry);\n\n for (const spellSource of staffFlags.spells) {\n const source: SpellSource = foundry.utils.mergeObject(\n spellSource,\n { \"system.location.value\": collectionId },\n { inplace: false },\n );\n\n const spell = new StaffSpell(source, { parent: this });\n collection.set(spell.id, spell);\n }\n\n this.spellcasting.set(staffEntry.id, staffEntry);\n this.spellcasting.collections.set(collectionId, collection);\n } catch (error: any) {\n MODULE.error(\"CharacterPF2e#prepareData\", error);\n }\n}\n\nexport { onCharacterPrepareData };\n", "import { ANIMIST_VESSELS_PATH, COMMANDER_TACTIC_PATH } from \"data\";\nimport {\n ActorPF2e,\n addListener,\n CharacterPF2e,\n createHTMLElement,\n EquipAnnotationData,\n getFlag,\n htmlQuery,\n localize,\n NPCPF2e,\n R,\n render,\n setFlag,\n waitDialog,\n} from \"foundry-helpers\";\nimport { SpellcastingEntryPF2eWithCharges } from \"spellcasting\";\n\nconst RETRAIN_PATH = {\n vessel: ANIMIST_VESSELS_PATH,\n tactic: COMMANDER_TACTIC_PATH,\n};\n\nasync function renderChargesEntries(\n actor: CharacterPF2e | NPCPF2e,\n parentElement: HTMLElement,\n callback: (entryContainer: HTMLElement, chargesElement: HTMLElement, toggleElement: HTMLElement) => void,\n) {\n const entries = actor.spellcasting.regular as SpellcastingEntryPF2eWithCharges[];\n const chargesEntries = entries.filter((entry) => entry.system.prepared.value === \"charges\");\n\n for (const entry of chargesEntries) {\n const entryContainer = htmlQuery(parentElement, `[data-container-id=\"${entry.id}\"]`);\n if (!entryContainer) continue;\n\n const charges = entry.system.slots.slot1;\n const chargesElement = await createChargesElement(actor, charges, true);\n\n addListener(chargesElement, \"[data-action='change-charges']\", \"change\", (el: HTMLInputElement) => {\n const value = Math.clamp(el.valueAsNumber, 0, charges.max);\n entry.update({ \"system.slots.slot1.value\": value });\n });\n\n addListener(chargesElement, \"[data-action='change-max-charges']\", \"change\", (el: HTMLInputElement) => {\n const value = Math.max(el.valueAsNumber, 0);\n entry.update({\n \"system.slots.slot1.max\": value,\n \"system.slots.slot1.value\": Math.min(value, charges.value),\n });\n });\n\n addListener(chargesElement, \"[data-action='reset-charges']\", async () => {\n entry.update({ \"system.slots.slot1.value\": charges.max });\n });\n\n const classStr = entry.showSlotlessRanks ? \"fa-solid\" : \"fa-regular\";\n const toggleElement = createHTMLElement(\"a\", {\n content: ``,\n dataset: {\n action: \"toggle-show-slotless-ranks\",\n tooltip: \"PF2E.ToggleSlotlessSpellLevelsTitle\",\n },\n });\n\n callback?.(entryContainer, chargesElement, toggleElement);\n }\n}\n\nasync function createChargesElement(\n actor: ActorPF2e,\n charges: { value: number; max: number },\n withMax: boolean,\n annotation?: EquipAnnotationData,\n) {\n if (annotation) {\n annotation.label = game.i18n.localize(annotation.label).replace(/\\(.+?\\)/, \"\");\n }\n\n const isOwner = actor.isOwner;\n const chargesTemplate = await render(\"charges\", {\n isOwner,\n charges,\n withMax,\n annotation,\n i18n: \"sheet.charges\",\n });\n\n const classes = [\"pf2e-dailies-charges\"];\n\n if (withMax) {\n classes.push(\"double\");\n }\n\n return createHTMLElement(\"div\", {\n classes,\n content: chargesTemplate,\n });\n}\n\nfunction createRetrainBtn(actor: ActorPF2e, selectedId: string, type: RetrainType): HTMLElement {\n const isOwner = actor.isOwner;\n const btn = createHTMLElement(isOwner ? \"a\" : \"span\", {\n content: ``,\n dataset: {\n action: \"dailies-retrain\",\n retrainType: type,\n tooltip: localize(\"sheet.retrain\", { type: localize(\"sheet\", type) }),\n },\n });\n\n if (isOwner) {\n btn.addEventListener(\"click\", async () => {\n await retrain(actor, selectedId, type);\n });\n }\n\n return btn;\n}\n\nasync function retrain(actor: ActorPF2e, selectedId: string, type: string) {\n const selected = actor.items.get(selectedId);\n if (!selected || !(type in RETRAIN_PATH)) return;\n\n const path = RETRAIN_PATH[type as RetrainType];\n const ids = getFlag(actor, path) ?? [];\n if (!ids.length || ids.includes(selectedId)) return;\n\n const options = R.pipe(\n ids,\n R.map((id) => {\n const item = actor.items.get(id);\n if (!item) return;\n\n return {\n label: item.name,\n value: id,\n };\n }),\n R.filter(R.isTruthy),\n R.sortBy(R.prop(\"label\")),\n );\n\n const result = await waitDialog<{ id: string }>({\n classes: [\"pf2e-dailies-retrain\"],\n content: \"retrain\",\n data: {\n name: actor.name,\n selected: selected.name,\n options,\n type,\n },\n i18n: \"retrain\",\n yes: {\n icon: \"fa-solid fa-retweet\",\n },\n });\n\n if (!result || !ids.includes(result.id)) return;\n\n const newIds = ids.map((x) => (x === result.id ? selectedId : x));\n await setFlag(actor, path, newIds);\n\n const previous = actor.items.get(result.id);\n const ChatMessagePF2e = getDocumentClass(\"ChatMessage\");\n\n let content = `
${localize(\"retrain.content\", { type })}`;\n\n if (previous) {\n content += `
${previous.link}
`;\n }\n\n content += `
${selected.link}
`;\n\n return ChatMessagePF2e.create({\n content,\n speaker: ChatMessagePF2e.getSpeaker({ actor }),\n });\n}\n\ntype RetrainType = keyof typeof RETRAIN_PATH;\n\nexport { createChargesElement, createRetrainBtn, renderChargesEntries, retrain, RETRAIN_PATH };\n", "import { getCommanderTactics, isTacticAbility } from \"data\";\nimport { CharacterPF2e, htmlQuery } from \"foundry-helpers\";\nimport { createRetrainBtn } from \"..\";\n\nfunction updateActionsTab(actor: CharacterPF2e, html: HTMLElement) {\n const actionsTab = htmlQuery(html, `.sheet-content .tab[data-tab=\"actions\"]`);\n if (!actionsTab) return;\n\n updateTacticsEntries(actor, actionsTab);\n}\n\nfunction updateTacticsEntries(actor: CharacterPF2e, actionsTab: HTMLElement) {\n const tactics = getCommanderTactics(actor);\n if (!tactics.length) return;\n\n const encounterTab = htmlQuery(actionsTab, `.actions-panels [data-tab=\"encounter\"]`);\n if (!encounterTab) return;\n\n const isOwner = actor.isOwner;\n const actionsElements = encounterTab.querySelectorAll(\".action[data-item-id]\");\n\n for (const el of actionsElements) {\n const itemId = el.dataset.itemId as string;\n if (tactics.includes(itemId) || !isTacticAbility(actor.items.get(itemId))) continue;\n\n el.classList.add(\"inactive\");\n\n if (isOwner) {\n const btn = createRetrainBtn(actor, itemId, \"tactic\");\n htmlQuery(el, \".item-controls\")?.prepend(btn);\n }\n }\n}\n\nexport { updateActionsTab };\n", "import { createRetrainBtn } from \"actor\";\nimport { getAnimistVesselsData } from \"data\";\nimport { CharacterPF2e, htmlQuery } from \"foundry-helpers\";\n\nfunction updateAnimistEntries(actor: CharacterPF2e, spellsTab: HTMLElement, isOwner: boolean) {\n const vesselsData = getAnimistVesselsData(actor);\n if (!vesselsData) return;\n\n const { entry, primary } = vesselsData;\n const entryEl = htmlQuery(spellsTab, `[data-item-id=\"${entry.id}\"]`);\n const spellElements = entryEl?.querySelectorAll(\".spell\") ?? [];\n\n for (const spellEl of spellElements) {\n const itemId = spellEl.dataset.itemId ?? \"\";\n if (primary.includes(itemId)) continue;\n\n if (isOwner) {\n const btn = createRetrainBtn(actor, itemId, \"vessel\");\n\n htmlQuery(spellEl, \".item-controls\")?.prepend(btn);\n htmlQuery(spellEl, \"button.cast-spell\")?.classList.add(\"inactive\");\n }\n\n const nameEl = htmlQuery(spellEl, \".name\");\n if (nameEl) {\n nameEl.style.color = \"var(--color-disabled)\";\n nameEl.style.textDecoration = \"line-through\";\n }\n }\n}\n\nexport { updateAnimistEntries };\n", "import { createChargesElement } from \"actor\";\nimport { getStaffData, setStaffChargesValue } from \"data\";\nimport { addListener, CharacterPF2e, equipItemToUse, getEquipAnnotation, htmlQuery } from \"foundry-helpers\";\n\nasync function updateStavesEntries(actor: CharacterPF2e, spellsTab: HTMLElement, highlightItems: boolean) {\n const staffData = getStaffData(actor);\n const staff = staffData ? actor.inventory.get(staffData.staffId) : undefined;\n const staffId = staffData?.staffId;\n const staffContainer = staffId ? htmlQuery(spellsTab, `[data-container-id=\"${staffId}-casting\"]`) : undefined;\n\n if (!staffContainer || !staffData || !staff) return;\n\n const rowControls = staffContainer.querySelectorAll(\".item-controls\");\n const handles = staffContainer.querySelectorAll(\".item-name\");\n\n if (highlightItems) {\n staffContainer.classList.add(\"dailies-temporary\");\n }\n\n for (const controls of rowControls ?? []) {\n controls.innerHTML = \"\";\n }\n\n for (const handle of handles ?? []) {\n handle.classList.remove(\"drag-handle\");\n handle.draggable = false;\n delete handle.dataset.dragHandle;\n }\n\n const charges = staffData.charges;\n\n const annotationData = getEquipAnnotation(staff);\n const chargesElement = await createChargesElement(actor, charges, false, annotationData);\n\n addListener(chargesElement, \"[data-action='change-charges']\", \"change\", (el: HTMLInputElement) => {\n const value = Math.clamp(el.valueAsNumber, 0, charges.max);\n setStaffChargesValue(actor, value);\n });\n\n addListener(chargesElement, \"[data-action='reset-charges']\", async () => {\n setStaffChargesValue(actor, charges.max);\n });\n\n if (annotationData) {\n addListener(chargesElement, \"button\", () => {\n equipItemToUse(actor, staff, annotationData);\n });\n }\n\n htmlQuery(staffContainer, \".spell-ability-data .statistic-values\")?.after(chargesElement);\n}\n\nexport { updateStavesEntries };\n", "import { createChargesElement } from \"actor\";\nimport { addListener, CharacterPF2e, createHTMLElement, htmlQuery, NPCPF2e } from \"foundry-helpers\";\nimport { updateAnimistEntries, updateStavesEntries } from \".\";\nimport { SpellcastingEntryPF2eWithCharges } from \"spellcasting\";\n\nfunction updateSpellsTab(actor: CharacterPF2e, html: HTMLElement, highlightItems: boolean) {\n const spellsTab = htmlQuery(html, `.sheet-content .tab[data-tab=\"spellcasting\"]`);\n if (!spellsTab) return;\n\n const isOwner = actor.isOwner;\n\n renderChargesEntries(actor, spellsTab, (container, charges, toggle) => {\n htmlQuery(container, \".spell-ability-data .statistic-values\")?.after(charges);\n if (isOwner) {\n htmlQuery(container, \".action-header .item-controls\")?.prepend(toggle);\n }\n });\n\n updateAnimistEntries(actor, spellsTab, isOwner);\n updateStavesEntries(actor, spellsTab, highlightItems);\n}\n\nasync function renderChargesEntries(\n actor: CharacterPF2e | NPCPF2e,\n parentElement: HTMLElement,\n callback: (entryContainer: HTMLElement, chargesElement: HTMLElement, toggleElement: HTMLElement) => void,\n) {\n const entries = actor.spellcasting.regular as SpellcastingEntryPF2eWithCharges[];\n const chargesEntries = entries.filter((entry) => entry.system.prepared.value === \"charges\");\n\n for (const entry of chargesEntries) {\n const entryContainer = htmlQuery(parentElement, `[data-container-id=\"${entry.id}\"]`);\n if (!entryContainer) continue;\n\n const charges = entry.system.slots.slot1;\n const chargesElement = await createChargesElement(actor, charges, true);\n\n addListener(chargesElement, \"[data-action='change-charges']\", \"change\", (el: HTMLInputElement) => {\n const value = Math.clamp(el.valueAsNumber, 0, charges.max);\n entry.update({ \"system.slots.slot1.value\": value });\n });\n\n addListener(chargesElement, \"[data-action='change-max-charges']\", \"change\", (el: HTMLInputElement) => {\n const value = Math.max(el.valueAsNumber, 0);\n entry.update({\n \"system.slots.slot1.max\": value,\n \"system.slots.slot1.value\": Math.min(value, charges.value),\n });\n });\n\n addListener(chargesElement, \"[data-action='reset-charges']\", async () => {\n entry.update({ \"system.slots.slot1.value\": charges.max });\n });\n\n const classStr = entry.showSlotlessRanks ? \"fa-solid\" : \"fa-regular\";\n const toggleElement = createHTMLElement(\"a\", {\n content: ``,\n dataset: {\n action: \"toggle-show-slotless-ranks\",\n tooltip: \"PF2E.ToggleSlotlessSpellLevelsTitle\",\n },\n });\n\n callback?.(entryContainer, chargesElement, toggleElement);\n }\n}\n\nexport { updateSpellsTab };\n", "import { canPrepareDailies, getActorFlag, getDailiesSummary, openDailiesInterface } from \"actor\";\nimport { getStaffData } from \"data\";\nimport {\n ActorSheetOptions,\n CharacterPF2e,\n CharacterSheetData,\n CharacterSheetPF2e,\n createHTMLElement,\n getSetting,\n htmlQuery,\n localize,\n MODULE,\n R,\n} from \"foundry-helpers\";\nimport { updateActionsTab, updateSpellsTab } from \".\";\n\nasync function onCharacterSheetGetData(\n this: CharacterSheetPF2e,\n wrapped: libWrapper.RegisterCallback,\n options?: ActorSheetOptions,\n) {\n const data = (await wrapped(options)) as CharacterSheetData;\n\n try {\n const actor = this.actor;\n const staffId = getStaffData(actor)?.staffId;\n if (!staffId) return data;\n\n const staff = actor.inventory.get(staffId);\n if (!staff) return data;\n\n const collectionId = `${staff.id}-casting`;\n const knownCollections = data.spellCollectionGroups[\"known-spells\"];\n\n const collectionIndex = knownCollections.findIndex((group) => group.id === collectionId);\n if (collectionIndex === -1) return data;\n\n const collectionGroup = knownCollections.splice(collectionIndex, 1)[0];\n data.spellCollectionGroups.activations.unshift(collectionGroup);\n } catch (error: any) {\n MODULE.error(\"CharacterSheetPF2e#getData\", error);\n }\n\n return data;\n}\n\nfunction onRenderCharacterSheetPF2e(sheet: CharacterSheetPF2e, $html: JQuery) {\n const actor = sheet.actor;\n const html = $html[0];\n const highlight = getSetting(\"addedHighlight\");\n const added = (highlight && getActorFlag(actor, \"addedItems\")) || [];\n const flagged = getActorFlag(actor, \"flaggedItems\") ?? {};\n\n addDailiesIcon(actor, html);\n updateActionsTab(actor, html);\n updateSpellsTab(actor, html, highlight);\n\n const content = htmlQuery(html, \".sheet-content\");\n\n const getItemElements = (id: string) => {\n return content?.querySelectorAll(`[data-item-id=\"${id}\"], [data-subitem-id=\"${id}\"]`) ?? [];\n };\n\n for (const id of added) {\n for (const itemElement of getItemElements(id)) {\n itemElement.classList.add(\"dailies-temporary\");\n }\n }\n\n for (const [id, dailies] of R.entries(flagged)) {\n if (!dailies.length) continue;\n\n const flagged = localize(\"sheet.flagged\") + \"
\";\n\n for (const itemElement of getItemElements(id)) {\n const tooltip = dailies.length === 1 ? dailies[0] : dailies.join(\"
- \");\n const nameElement = htmlQuery(itemElement, \".name\");\n const flagEl = createHTMLElement(\"span\", {\n content: ``,\n dataset: {\n tooltip: flagged + tooltip,\n },\n });\n\n nameElement?.insertAdjacentElement(\"afterbegin\", flagEl);\n }\n }\n}\n\nfunction addDailiesIcon(actor: CharacterPF2e, html: HTMLElement) {\n const parent = htmlQuery(html, \"aside .hitpoints .hp-small\");\n if (!parent) return;\n\n const canPrep = canPrepareDailies(actor);\n const classes = [\"roll-icon\", \"dailies\"];\n\n if (!canPrep) {\n classes.push(\"inactive\");\n }\n\n const icon = createHTMLElement(\"a\", {\n content: \"\",\n classes,\n dataset: {\n tooltip: canPrep ? localize(\"sheet.title\") : getDailiesSummary(actor),\n tooltipClass: canPrep ? \"pf2e\" : \"pf2e pf2e-dailies-summary\",\n },\n });\n\n parent.appendChild(icon);\n\n if (canPrep && actor.isOwner) {\n icon.addEventListener(\"click\", () => {\n openDailiesInterface(actor);\n });\n }\n}\n\nexport { onCharacterSheetGetData, onRenderCharacterSheetPF2e };\n", "import { FamiliarPF2e, FamiliarSheetPF2e, getFlag } from \"foundry-helpers\";\n\nfunction onRenderFamiliarSheetPF2e(sheet: FamiliarSheetPF2e, $html: JQuery) {\n const actor = sheet.actor;\n const html = $html[0];\n const itemElements = html.querySelectorAll(\n \".section-container:not(.familiar-section) .actions-list [data-item-id]\",\n );\n\n for (const itemElement of itemElements) {\n const itemId = itemElement.dataset.itemId as string;\n const item = actor.items.get(itemId);\n\n if (item && getFlag(item, \"temporary\")) {\n itemElement.classList.add(\"dailies-temporary\");\n }\n }\n}\n\nexport { onRenderFamiliarSheetPF2e };\n", "import { ActorStaff, getSpells, getStaves } from \"data\";\nimport {\n calculateCreatureDC,\n createHTMLElement,\n createSpellcastingSource,\n getActorMaxRank,\n htmlQuery,\n localize,\n MODULE,\n NPCPF2e,\n NPCSheetPF2e,\n} from \"foundry-helpers\";\nimport { renderChargesEntries } from \".\";\n\nfunction onRenderNPCSheetPF2e(sheet: NPCSheetPF2e, $html: JQuery) {\n const actor = sheet.actor;\n const html = $html[0];\n\n const spellsTab = htmlQuery(html, \".tab[data-tab='spells']\");\n if (spellsTab) {\n renderChargesEntries(actor, spellsTab, (container, charges, toggle) => {\n htmlQuery(container, \":scope > .header\")?.after(charges);\n if (actor.isOwner) {\n htmlQuery(container, \":scope > .header > .item-controls\")?.prepend(toggle);\n }\n });\n }\n\n const inventoryTab = htmlQuery(html, \".tab[data-tab='inventory'] .inventory-list\");\n if (!inventoryTab) return;\n\n for (const staff of getStaves(actor)) {\n const controls = htmlQuery(inventoryTab, `[data-item-id=\"${staff.id}\"] .item-controls`);\n if (!controls) continue;\n\n const staffBtn = createHTMLElement(\"a\", {\n dataset: {\n tooltip: MODULE.path(\"sheet.generate.tooltip\"),\n },\n content: \"\",\n });\n\n staffBtn.addEventListener(\"click\", () => generateNpcStaff(actor, staff));\n\n const generateBtn = htmlQuery(controls, `[data-action=\"generate-attack\"]`);\n if (generateBtn) {\n generateBtn.replaceWith(staffBtn);\n } else {\n const editBtn = htmlQuery(controls, \"[data-action='edit-item']\");\n if (editBtn) {\n editBtn.before(staffBtn);\n } else {\n controls.prepend(staffBtn);\n }\n }\n }\n}\n\nasync function generateNpcStaff(actor: NPCPF2e, item: ActorStaff) {\n const existing = actor.spellcasting.spellcastingFeatures.at(0);\n const maxCharges = getActorMaxRank(actor);\n\n const entrySource = createSpellcastingSource({\n name: item.name,\n category: \"charges\",\n tradition: existing?.tradition ?? \"arcane\",\n attribute: existing?.attribute ?? \"cha\",\n });\n\n const dc = existing?.system.spelldc.dc ?? calculateCreatureDC(actor);\n\n entrySource.system.spelldc = {\n dc,\n value: existing?.system.spelldc.value ?? dc - 10,\n };\n\n entrySource.system.slots = {\n slot1: { value: maxCharges, max: maxCharges },\n };\n\n const [entry] = await actor.createEmbeddedDocuments(\"Item\", [entrySource]);\n if (!entry?.isOfType(\"spellcastingEntry\")) return;\n\n const spellsSources = await getSpells(item, maxCharges, entry.id);\n await actor.createEmbeddedDocuments(\"Item\", spellsSources);\n\n localize.info(\"sheet.generate.confirm\", { name: item.name });\n}\n\nexport { onRenderNPCSheetPF2e };\n", "import { CustomsMenu } from \"custom\";\nimport { parseDailies } from \"dailies\";\nimport { HomebrewsMenu } from \"homebrew\";\nimport { registerSetting, registerSettingMenu, renderCharacterSheets } from \"foundry-helpers\";\n\nfunction registerSettings() {\n registerSettingMenu(\"customs\", {\n type: CustomsMenu,\n restricted: true,\n });\n\n registerSettingMenu(\"homebrew\", {\n type: HomebrewsMenu,\n restricted: true,\n });\n\n registerSetting(\"customDailies\", {\n type: Array,\n default: [],\n scope: \"world\",\n config: false,\n onChange: () => {\n parseDailies();\n },\n });\n\n registerSetting(\"homebrewEntries\", {\n type: new foundry.data.fields.TypedObjectField(\n new foundry.data.fields.ArrayField(new foundry.data.fields.StringField()),\n ),\n default: {},\n scope: \"world\",\n config: false,\n });\n\n registerSetting(\"partyMembers\", {\n type: Boolean,\n default: true,\n scope: \"world\",\n });\n\n registerSetting(\"addedHighlight\", {\n type: Boolean,\n default: true,\n scope: \"user\",\n onChange: () => {\n renderCharacterSheets();\n },\n });\n}\n\nexport { registerSettings };\n", "import { DailyActorFlags } from \"actor\";\nimport { filterDailies, getDailies } from \"dailies\";\nimport { processUpdatedItemsData } from \"interface\";\nimport {\n ActionDefaultOptions,\n actorItems,\n CharacterPF2e,\n ChatMessagePF2e,\n getFlag,\n MODULE,\n R,\n SYSTEM,\n updateFlag,\n} from \"foundry-helpers\";\nimport { createUpdateCollection } from \"utils\";\n\nasync function restForTheNight(\n wrapped: libWrapper.RegisterCallback,\n options: ActionDefaultOptions,\n): Promise {\n const result = await wrapped(options);\n\n try {\n if (!result?.length) {\n return result;\n }\n\n const characters = R.pipe(\n Array.isArray(options.actors) ? options.actors : [options.actors],\n R.filter((actor): actor is CharacterPF2e => !!actor?.isOfType(\"character\")),\n );\n\n await Promise.all(characters.map(cleanup));\n } catch (error: any) {\n MODULE.error(\"game.pf2e.actions.restForTheNight\", error);\n }\n\n return result;\n}\n\nasync function cleanup(actor: CharacterPF2e) {\n const removedItems: string[] = [];\n const [updatedItems, updateItem] = createUpdateCollection();\n const dailies = filterDailies(await getDailies(actor));\n\n await Promise.all(\n dailies.map((daily) => {\n return daily.rest?.({\n actor,\n updateItem,\n removeItem: (id) => {\n removedItems.push(id);\n },\n });\n }),\n );\n\n await Promise.all(\n [...actorItems(actor)].map(async (item) => {\n if (getFlag(item, \"temporary\")) {\n removedItems.push(item.id);\n\n if (item.isOfType(\"feat\")) {\n const parentId = getFlag(item, \"grantedBy\");\n if (parentId) {\n const slug = game.pf2e.system.sluggify(item.name, { camel: \"dromedary\" });\n updateItem({\n _id: parentId,\n [`flags.${SYSTEM.id}.itemGrants.${slug}`]: _del,\n });\n }\n }\n\n return;\n }\n\n const rules = foundry.utils.deepClone(item._source.system.rules);\n let modifiedRules = false;\n\n for (let i = rules.length - 1; i >= 0; i--) {\n if (MODULE.id in rules[i]) {\n rules.splice(i, 1);\n modifiedRules = true;\n }\n }\n\n if (modifiedRules) {\n updateItem({\n _id: item.id,\n \"system.rules\": rules,\n });\n }\n }),\n );\n\n const temporaryDeleted = Object.values(\n getFlag(actor, \"temporaryDeleted\") ?? {},\n );\n\n if (temporaryDeleted.length) {\n await actor.createEmbeddedDocuments(\"Item\", temporaryDeleted, { keepId: true });\n }\n\n if (updatedItems.size) {\n processUpdatedItemsData(actor, updatedItems);\n await actor.updateEmbeddedDocuments(\"Item\", updatedItems.contents);\n }\n\n if (removedItems.length) {\n await actor.deleteEmbeddedDocuments(\"Item\", removedItems);\n }\n\n await updateFlag(actor, {\n rested: true,\n addedItems: _del,\n flaggedItems: _del,\n extra: _del,\n tooltip: _del,\n temporaryDeleted: _del,\n });\n}\n\nexport { restForTheNight };\n", "import { onActorPrepareEmbeddedDocuments, onCharacterPrepareData, onCharacterSheetGetData } from \"actor\";\nimport { registerWrapper } from \"foundry-helpers\";\nimport { restForTheNight } from \"rest\";\nimport {\n spellcastingEntryConsume,\n spellcastingEntryGetSheetData,\n spellcastingEntryPrepareSiblingData,\n} from \"spellcasting\";\n\nfunction registerInitWrappers() {\n registerWrapper(\n \"WRAPPER\",\n \"CONFIG.PF2E.Actor.documentClasses.character.prototype.prepareData\",\n onCharacterPrepareData,\n );\n\n registerWrapper(\n \"MIXED\",\n \"CONFIG.PF2E.Item.documentClasses.spellcastingEntry.prototype.prepareSiblingData\",\n spellcastingEntryPrepareSiblingData,\n );\n\n registerWrapper(\n \"MIXED\",\n \"CONFIG.PF2E.Item.documentClasses.spellcastingEntry.prototype.consume\",\n spellcastingEntryConsume,\n );\n\n registerWrapper(\n \"WRAPPER\",\n \"CONFIG.PF2E.Item.documentClasses.spellcastingEntry.prototype.getSheetData\",\n spellcastingEntryGetSheetData,\n );\n}\n\nfunction registerReadyWrappers() {\n registerWrapper(\"WRAPPER\", \"game.pf2e.actions.restForTheNight\", restForTheNight);\n registerWrapper(\n \"WRAPPER\",\n \"CONFIG.Actor.documentClass.prototype.prepareEmbeddedDocuments\",\n onActorPrepareEmbeddedDocuments,\n );\n registerWrapper(\n \"WRAPPER\",\n \"CONFIG.Actor.sheetClasses.character['pf2e.CharacterSheetPF2e'].cls.prototype.getData\",\n onCharacterSheetGetData,\n );\n}\n\nexport { registerInitWrappers, registerReadyWrappers };\n", "import {\n canPrepareDailies,\n createRetrainBtn,\n getDailiesSummary,\n getDisabledDailies,\n onRenderCharacterSheetPF2e,\n onRenderFamiliarSheetPF2e,\n onRenderNPCSheetPF2e,\n openDailiesInterface,\n retrain,\n} from \"actor\";\nimport { CustomDaily, registerCustomDailies } from \"custom\";\nimport { DAILY_SCHEMA, initializeDailies } from \"dailies\";\nimport {\n canCastRank,\n createComboSkillDaily,\n createLanguageDaily,\n createLoreSkillDaily,\n createResistanceDaily,\n createScrollChainDaily,\n getAnimistConfigs,\n getAnimistVesselsData,\n getCommanderTactics,\n getSpells,\n getStaffData,\n isTacticAbility,\n setStaffChargesValue,\n StaffSpellcasting,\n} from \"data\";\nimport { ActorPF2e, CharacterPF2e, getSetting, htmlClosest, localize, MODULE } from \"foundry-helpers\";\nimport { registerSettings } from \"settings\";\nimport { utils } from \"utils\";\nimport { registerInitWrappers, registerReadyWrappers } from \"wrappers\";\n\nMODULE.register(\"pf2e-dailies\");\n\nHooks.once(\"init\", () => {\n registerSettings();\n registerInitWrappers();\n\n // @ts-expect-error\n CONFIG.PF2E.preparationType.charges = \"Charges\";\n});\n\nHooks.once(\"ready\", () => {\n initializeDailies();\n registerReadyWrappers();\n\n if (game.user.isGM) {\n const hasIncompatibleDailies = getSetting(\"customDailies\").some((custom) =>\n foundry.utils.isNewerVersion(DAILY_SCHEMA, custom.schema ?? \"\"),\n );\n if (hasIncompatibleDailies) {\n localize.warning(\"error.incompatible\", true);\n }\n }\n});\n\nHooks.on(\"renderCharacterSheetPF2e\", onRenderCharacterSheetPF2e);\nHooks.on(\"renderFamiliarSheetPF2e\", onRenderFamiliarSheetPF2e);\nHooks.on(\"renderNPCSheetPF2e\", onRenderNPCSheetPF2e);\n\nMODULE.apiExpose(\"StaffSpellcasting\", StaffSpellcasting);\nMODULE.apiExpose(\"canCastRank\", canCastRank);\nMODULE.apiExpose(\"canPrepareDailies\", canPrepareDailies);\nMODULE.apiExpose(\"createRetrainBtn\", createRetrainBtn);\nMODULE.apiExpose(\"getAnimistConfigs\", getAnimistConfigs);\nMODULE.apiExpose(\"getAnimistVesselsData\", getAnimistVesselsData);\nMODULE.apiExpose(\"getCommanderTactics\", getCommanderTactics);\nMODULE.apiExpose(\"getDailiesSummary\", getDailiesSummary);\nMODULE.apiExpose(\"getDisabledDailies\", getDisabledDailies);\nMODULE.apiExpose(\"getPhysicalItemSpells\", getSpells);\nMODULE.apiExpose(\"getStaffData\", getStaffData);\nMODULE.apiExpose(\"getStaffItem\", (actor: CharacterPF2e) => {\n const flag = getStaffData(actor);\n return (flag && actor.inventory.get(flag.staffId)) || null;\n});\nMODULE.apiExpose(\"isTacticAbility\", isTacticAbility);\nMODULE.apiExpose(\"openDailiesInterface\", openDailiesInterface);\nMODULE.apiExpose(\"registerCustomDailies\", registerCustomDailies);\nMODULE.apiExpose(\"retrain\", retrain);\nMODULE.apiExpose(\"retrainFromElement\", async (actor: ActorPF2e, target: HTMLElement) => {\n const itemId = htmlClosest(target, \"[data-item-id]\")?.dataset.itemId;\n const retrainType = target.dataset.retrainType;\n return (!!itemId && !!retrainType && retrain(actor, itemId, retrainType)) || undefined;\n});\nMODULE.apiExpose(\"setStaffChargesValue\", setStaffChargesValue);\nMODULE.apiExpose(\"utils\", utils);\nMODULE.apiExpose(\"dailyHelpers\", {\n createComboSkillDaily,\n createLoreSkillDaily,\n createLanguageDaily,\n createResistanceDaily,\n createScrollChainDaily,\n});\n"], "mappings": "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cACV,EACA,CACI,KAAM,yCACN,MAAO,EACP,KAAM,WACV,EACA,CACI,KAAM,wCACN,MAAO,EACP,KAAM,UACV,EACA,CACI,KAAM,uCACN,MAAO,EACP,KAAM,SACV,EACA,CACI,KAAM,yCACN,MAAO,EACP,KAAM,WACV,EACA,CACI,KAAM,qCACN,MAAO,EACP,KAAM,OACV,EACA,CACI,KAAM,0CACN,MAAO,EACP,KAAM,YACV,EACA,CACI,KAAM,4CACN,MAAO,GACP,KAAM,cACV,EACA,CACI,KAAM,6CACN,MAAO,GACP,KAAM,eACV,EACA,CACI,KAAM,gDACN,MAAO,GACP,KAAM,kBACV,EACA,CACI,KAAM,gDACN,MAAO,GACP,KAAM,kBACV,EACA,CACI,KAAM,+CACN,MAAO,GACP,KAAM,iBACV,EACA,CACI,KAAM,gDACN,MAAO,GACP,KAAM,kBACV,EACA,CACI,KAAM,+CACN,MAAO,GACP,KAAM,iBACV,EACA,CACI,KAAM,8CACN,MAAO,GACP,KAAM,gBACV,EACA,CACI,KAAM,4CACN,MAAO,GACP,KAAM,cACV,EACA,CACI,KAAM,gDACN,MAAO,GACP,KAAM,kBACV,EACA,CACI,KAAM,8CACN,MAAO,GACP,KAAM,gBACV,EACA,CACI,KAAM,4CACN,MAAO,GACP,KAAM,cACV,EACA,CACI,KAAM,iDACN,MAAO,GACP,KAAM,mBACV,EACA,CACI,KAAM,wCACN,MAAO,EACP,KAAM,UACV,EACA,CACI,KAAM,oCACN,MAAO,GACP,KAAM,MACV,EACA,CACI,KAAM,yCACN,MAAO,GACP,KAAM,WACV,EACA,CACI,KAAM,0CACN,MAAO,GACP,KAAM,YACV,EACA,CACI,KAAM,4CACN,MAAO,GACP,KAAM,cACV,EACA,CACI,KAAM,wCACN,MAAO,EACP,KAAM,UACV,EACA,CACI,KAAM,yCACN,MAAO,EACP,KAAM,WACV,EACA,CACI,KAAM,uCACN,MAAO,EACP,KAAM,SACV,EACA,CACI,KAAM,wCACN,MAAO,EACP,KAAM,UACV,EACA,CACI,KAAM,qCACN,MAAO,EACP,KAAM,OACV,EACA,CACI,KAAM,yCACN,MAAO,GACP,KAAM,WACV,EACA,CACI,KAAM,wCACN,MAAO,EACP,KAAM,UACV,EACA,CACI,KAAM,0CACN,MAAO,EACP,KAAM,YACV,EACA,CACI,KAAM,2CACN,MAAO,GACP,KAAM,aACV,EACA,CACI,KAAM,0CACN,MAAO,EACP,KAAM,YACV,EACA,CACI,KAAM,sCACN,MAAO,GACP,KAAM,QACV,EACA,CACI,KAAM,wCACN,MAAO,EACP,KAAM,UACV,CACJ,EAMMC,GAA0G,CAC5G,QAAS,CACL,SAAU,GACV,KAAM,EACV,EACA,WAAY,CACR,SAAU,GACV,KAAM,EACV,EACA,YAAa,CACT,IAAK,EACL,SAAU,GACV,KAAM,EACV,EACA,WAAY,CACR,SAAU,GACV,KAAM,EACV,EACA,OAAQ,CACJ,SAAU,GACV,KAAM,EACV,EACA,SAAU,CACN,SAAU,GACV,KAAM,EACV,EACA,QAAS,CACL,SAAU,GACV,KAAM,EACV,EACA,aAAc,CACV,KAAM,EACV,EACA,OAAQ,CACJ,SAAU,GACV,KAAM,EACV,EACA,UAAW,CACP,SAAU,GACV,KAAM,EACV,EACA,WAAY,CACR,KAAM,EACV,EACA,UAAW,CACP,SAAU,GACV,KAAM,EACV,EACA,OAAQ,CACJ,IAAK,EACL,SAAU,GACV,KAAM,EACV,EACA,mBAAoB,CAChB,IAAK,EACL,SAAU,GACV,KAAM,EACV,EACA,sBAAuB,CACnB,IAAK,EACL,SAAU,GACV,KAAM,EACV,EACA,YAAa,CACT,SAAU,EACV,KAAM,EACV,EACA,kBAAmB,CACf,SAAU,GACV,KAAM,EACV,EACA,UAAW,CACP,KAAM,EACV,CACJ,EAEMC,GAAwBC,EAAO,SACjC,kDACA,yDACJ,EAEMC,GAAuB,CACzB,IAAK,WACL,MAAO,CACH,CACI,KAAM,aACN,KAAMD,EAAO,SACT,kDACA,yDACJ,EACA,SAAU,EACd,EACA,CACI,KAAM,OACN,KAAMA,EAAO,SACT,kDACA,yDACJ,CACJ,EACA,CACI,KAAM,YACN,KAAMD,EACV,CACJ,EACA,KAAM,CAACG,EA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", "names": ["dist_exports", "__export", "t", "n", "e", "r", "e", "r", "__name", "n", "t", "n", "r", "e", "__name", "t", "n", "__name", "t", "n", "__name", "t", "n", "__name", "t", "n", "__name", "t", "n", "__name", "e", "__name", "n", "r", "t", "i", "n", "t", "e", "__name", "t", "n", "__name", "r", "i", "t", "n", "__name", "t", "n", "__name", "a", "o", "i", "r", "t", "n", "__name", "e", "__name", "t", "e", "r", "n", "__name", "e", "__name", "t", "n", "__name", "r", "i", "a", "e", "e", "r", "i", "a", "o", "s", "__name", "t", "l", "u", "t", "n", "__name", "e", "t", "n", "__name", "r", "t", "a", "o", "e", "r", "s", "i", "n", "c", "__name", "l", "t", "n", "r", "i", "__name", "r", "t", "i", "__name", "n", "e", "n", "t", "r", "__name", "e", "t", "n", "__name", "e", "t", "__name", "r", "t", "i", "a", "__name", "e", "t", "n", "__name", "e", "__name", "n", "i", "__name", "r", "t", "a", "o", "e", "e", "t", "a", "i", "r", "o", "__name", "n", "s", "c", "r", "n", "i", "__name", "a", "o", "s", "e", "t", "n", "__name", "t", "n", "__name", "t", "n", "__name", "r", "t", "n", "__name", "t", "__name", "t", "n", "__name", "r", "e", "i", "n", "t", "r", "i", "__name", "e", "__name", "r", "t", "i", "e", "a", "__name", "n", "t", "n", "__name", "t", "n", "__name", "r", "t", "n", "__name", "n", "t", "r", "e", "i", "__name", "a", "n", "t", "r", "__name", "e", "n", "t", "r", "e", "i", "__name", "a", "t", "n", "r", "__name", "i", "n", "t", "e", "__name", "t", "n", "r", "__name", "t", "n", "__name", "r", "t", "__name", "t", "n", "__name", "r", "i", "e", "t", "__name", "n", "r", "i", "a", "o", "s", "c", "u", "d", "f", "m", "t", "n", "__name", "r", "i", "a", "e", "t", "n", "__name", "r", "e", "t", "n", "__name", "r", "i", "a", "e", "n", "t", "r", "__name", "e", "t", "__name", "t", "n", "__name", "r", "i", "a", "r", "t", "i", "__name", "n", "e", "n", "t", "r", "__name", "e", "t", "n", "__name", "r", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "t", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "e", "__name", "t", "n", "__name", "r", "i", "e", "t", "n", "__name", "e", "__name", "e", "__name", "e", "__name", "t", "n", "__name", "t", "__name", "t", "n", "__name", "t", "n", "__name", "t", "n", "r", "__name", "t", "n", "__name", "r", "i", "a", "t", "n", "__name", "r", "i", "a", "o", "t", "n", "__name", "r", "i", "t", "n", "__name", "i", "t", "n", "__name", "n", "t", "r", "__name", "t", "n", "__name", "r", "i", "t", "r", "__name", "n", "t", "n", "__name", "e", "__name", "n", "t", "r", "__name", "i", "a", "o", "e", "s", "t", "n", "__name", "t", "__name", "r", "n", "i", "a", "o", "s", "e", "n", "t", "r", "__name", "t", "n", "__name", "n", "t", "r", "__name", "e", "t", "n", "__name", "r", "i", "e", "__name", "t", "n", "__name", "e", "__name", "e", "__name", "t", "n", "__name", "r", "i", "t", "n", "__name", "r", "e", "t", "n", "__name", "r", "t", "n", "__name", "r", "i", "t", "n", "__name", "t", "n", "__name", "e", "n", "r", "t", "__name", "t", "n", "__name", "r", "i", "a", "o", "e", "r", "i", "a", "o", "s", "t", "n", "__name", "e", "r", "__name", "t", "n", "__name", "e", "t", "n", "__name", "r", "t", "n", "__name", "r", "i", "t", "n", "__name", "t", "n", "__name", "n", "t", "e", "__name", "t", "n", "__name", "r", "e", "t", "n", "__name", "t", "n", "__name", "r", "a", "t", "n", "__name", "r", "i", "e", "n", "__name", "t", "n", "__name", "t", "n", "__name", "e", "r", "i", "a", "__name", "n", "t", "r", "__name", "e", "n", "t", "r", "__name", "e", "n", "t", "e", "__name", "n", "t", "r", "__name", "e", "n", "t", "r", "__name", "e", "t", "n", "__name", "r", "i", "e", "n", "__name", "t", "n", "__name", "t", "n", "__name", "t", "n", "__name", "e", "t", "n", "r", "i", "a", "o", "s", "__name", "t", "n", "__name", "t", "n", "__name", "r", "i", "a", "t", "n", "__name", "r", "i", "a", "t", "n", "__name", "r", "i", "n", "t", "r", "i", "__name", "e", "r", "n", "i", "__name", "a", "o", "e", "t", "n", "__name", "t", "n", "__name", "t", "n", "__name", "r", "i", "t", "n", "__name", "t", "n", "__name", "r", "e", "e", "t", "__name", "n", "r", "t", "n", "r", "__name", "e", "n", "t", "r", "__name", "t", "n", "__name", "n", "t", "r", "__name", "t", "n", "r", "__name", "e", "t", "n", "__name", "e", "n", "r", "t", "__name", "i", "t", "n", "__name", "n", "t", "r", "__name", "n", "t", "r", "__name", "i", "a", "o", "n", "t", "r", "__name", "e", "i", "t", "__name", "e", "n", "r", "t", "__name", "t", "n", "r", "__name", "e", "t", "i", "a", "e", "n", "r", "__name", "zod_exports", "__export", "$brand", "$input", "$output", "NEVER", "TimePrecision", "ZodAny", "ZodArray", "ZodBase64", "ZodBase64URL", "ZodBigInt", "ZodBigIntFormat", "ZodBoolean", "ZodCIDRv4", "ZodCIDRv6", "ZodCUID", "ZodCUID2", "ZodCatch", "ZodCodec", "ZodCustom", "ZodCustomStringFormat", "ZodDate", "ZodDefault", "ZodDiscriminatedUnion", "ZodE164", "ZodEmail", "ZodEmoji", "ZodEnum", "ZodError", "ZodExactOptional", "ZodFile", "ZodFirstPartyTypeKind", "ZodFunction", "ZodGUID", "ZodIPv4", "ZodIPv6", "ZodISODate", "ZodISODateTime", "ZodISODuration", "ZodISOTime", "ZodIntersection", "ZodIssueCode", "ZodJWT", "ZodKSUID", "ZodLazy", "ZodLiteral", "ZodMAC", "ZodMap", "ZodNaN", "ZodNanoID", "ZodNever", "ZodNonOptional", "ZodNull", "ZodNullable", "ZodNumber", "ZodNumberFormat", "ZodObject", "ZodOptional", "ZodPipe", "ZodPrefault", "ZodPromise", "ZodReadonly", "ZodRealError", "ZodRecord", "ZodSet", "ZodString", "ZodStringFormat", "ZodSuccess", "ZodSymbol", "ZodTemplateLiteral", "ZodTransform", "ZodTuple", "ZodType", "ZodULID", "ZodURL", "ZodUUID", "ZodUndefined", "ZodUnion", "ZodUnknown", "ZodVoid", "ZodXID", "ZodXor", "_ZodString", "_default", "_function", "any", "array", "base64", "base64url", "bigint", "boolean", "_catch", "check", "cidrv4", "cidrv6", "clone", "codec", "coerce_exports", "config", "core_exports", "cuid", "cuid2", "custom", "date", "decode", "decodeAsync", "zod_default", "describe", "discriminatedUnion", "e164", "email", "emoji", "encode", "encodeAsync", "_endsWith", "_enum", "exactOptional", "file", "flattenError", "float32", "float64", "formatError", "fromJSONSchema", "getErrorMap", "globalRegistry", "_gt", "_gte", "guid", "hash", "hex", "hostname", "httpUrl", "_includes", "_instanceof", "int", "int32", "int64", "intersection", "ipv4", "ipv6", "iso_exports", "json", "jwt", "keyof", "ksuid", "lazy", "_length", "literal", "locales_exports", "looseObject", "looseRecord", "_lowercase", "_lt", "_lte", "mac", "map", "_maxLength", "_maxSize", "meta", "_mime", "_minLength", "_minSize", "_multipleOf", "nan", "nanoid", "nativeEnum", "_negative", "never", "_nonnegative", "nonoptional", "_nonpositive", "_normalize", "_null", "nullable", "nullish", "number", "object", "optional", "_overwrite", "parse", "parseAsync", "partialRecord", "pipe", "_positive", "prefault", "preprocess", "prettifyError", "promise", "_property", "readonly", "record", "refine", "_regex", "regexes_exports", "registry", "safeDecode", "safeDecodeAsync", "safeEncode", "safeEncodeAsync", "safeParse", "safeParseAsync", "set", "setErrorMap", "_size", "_slugify", "_startsWith", "strictObject", "string", "stringFormat", "stringbool", "success", "superRefine", "symbol", "templateLiteral", "toJSONSchema", "_toLowerCase", "_toUpperCase", "transform", "treeifyError", "_trim", "tuple", "uint32", "uint64", "ulid", "_undefined", "union", "unknown", "_uppercase", "url", "util_exports", "uuid", "uuidv4", "uuidv6", "uuidv7", "_void", "xid", "xor", "external_exports", "external_exports", "__export", "$brand", "$input", "$output", "NEVER", "TimePrecision", "ZodAny", "ZodArray", "ZodBase64", "ZodBase64URL", "ZodBigInt", "ZodBigIntFormat", "ZodBoolean", "ZodCIDRv4", "ZodCIDRv6", "ZodCUID", "ZodCUID2", "ZodCatch", "ZodCodec", "ZodCustom", "ZodCustomStringFormat", "ZodDate", "ZodDefault", "ZodDiscriminatedUnion", "ZodE164", "ZodEmail", "ZodEmoji", "ZodEnum", "ZodError", "ZodExactOptional", "ZodFile", "ZodFirstPartyTypeKind", "ZodFunction", "ZodGUID", "ZodIPv4", "ZodIPv6", "ZodISODate", "ZodISODateTime", "ZodISODuration", "ZodISOTime", "ZodIntersection", "ZodIssueCode", "ZodJWT", "ZodKSUID", "ZodLazy", "ZodLiteral", "ZodMAC", "ZodMap", "ZodNaN", "ZodNanoID", "ZodNever", "ZodNonOptional", "ZodNull", "ZodNullable", "ZodNumber", "ZodNumberFormat", "ZodObject", "ZodOptional", "ZodPipe", "ZodPrefault", "ZodPromise", "ZodReadonly", "ZodRealError", "ZodRecord", "ZodSet", "ZodString", "ZodStringFormat", "ZodSuccess", "ZodSymbol", "ZodTemplateLiteral", "ZodTransform", "ZodTuple", "ZodType", "ZodULID", "ZodURL", "ZodUUID", "ZodUndefined", "ZodUnion", "ZodUnknown", "ZodVoid", "ZodXID", "ZodXor", "_ZodString", "_default", "_function", "any", "array", "base64", "base64url", "bigint", "boolean", "_catch", "check", "cidrv4", "cidrv6", "clone", "codec", "coerce_exports", "config", "core_exports", "cuid", "cuid2", "custom", "date", "decode", "decodeAsync", "describe", "discriminatedUnion", "e164", "email", "emoji", "encode", "encodeAsync", "_endsWith", "_enum", "exactOptional", "file", "flattenError", "float32", "float64", "formatError", "fromJSONSchema", "getErrorMap", "globalRegistry", "_gt", "_gte", "guid", "hash", "hex", "hostname", "httpUrl", "_includes", "_instanceof", "int", "int32", "int64", "intersection", "ipv4", "ipv6", "iso_exports", "json", "jwt", "keyof", "ksuid", "lazy", "_length", "literal", "locales_exports", "looseObject", "looseRecord", "_lowercase", "_lt", "_lte", "mac", "map", "_maxLength", "_maxSize", "meta", "_mime", "_minLength", "_minSize", "_multipleOf", "nan", "nanoid", "nativeEnum", "_negative", "never", "_nonnegative", "nonoptional", "_nonpositive", "_normalize", "_null", "nullable", "nullish", "number", "object", "optional", "_overwrite", "parse", "parseAsync", "partialRecord", "pipe", "_positive", "prefault", "preprocess", "prettifyError", "promise", "_property", "readonly", "record", "refine", "_regex", "regexes_exports", "registry", "safeDecode", "safeDecodeAsync", "safeEncode", "safeEncodeAsync", "safeParse", "safeParseAsync", "set", "setErrorMap", "_size", "_slugify", "_startsWith", "strictObject", "string", "stringFormat", "stringbool", "success", "superRefine", "symbol", "templateLiteral", "toJSONSchema", "_toLowerCase", "_toUpperCase", "transform", "treeifyError", "_trim", "tuple", "uint32", "uint64", "ulid", "_undefined", "union", "unknown", "_uppercase", "url", "util_exports", "uuid", "uuidv4", "uuidv6", "uuidv7", "_void", "xid", "xor", "core_exports", "__export", "$ZodAny", "$ZodArray", "$ZodAsyncError", "$ZodBase64", "$ZodBase64URL", "$ZodBigInt", "$ZodBigIntFormat", "$ZodBoolean", "$ZodCIDRv4", "$ZodCIDRv6", "$ZodCUID", "$ZodCUID2", "$ZodCatch", "$ZodCheck", "$ZodCheckBigIntFormat", "$ZodCheckEndsWith", "$ZodCheckGreaterThan", "$ZodCheckIncludes", "$ZodCheckLengthEquals", "$ZodCheckLessThan", "$ZodCheckLowerCase", "$ZodCheckMaxLength", "$ZodCheckMaxSize", "$ZodCheckMimeType", "$ZodCheckMinLength", "$ZodCheckMinSize", "$ZodCheckMultipleOf", "$ZodCheckNumberFormat", "$ZodCheckOverwrite", "$ZodCheckProperty", "$ZodCheckRegex", "$ZodCheckSizeEquals", "$ZodCheckStartsWith", "$ZodCheckStringFormat", "$ZodCheckUpperCase", "$ZodCodec", "$ZodCustom", "$ZodCustomStringFormat", "$ZodDate", "$ZodDefault", "$ZodDiscriminatedUnion", "$ZodE164", "$ZodEmail", "$ZodEmoji", "$ZodEncodeError", "$ZodEnum", "$ZodError", "$ZodExactOptional", "$ZodFile", "$ZodFunction", "$ZodGUID", "$ZodIPv4", "$ZodIPv6", "$ZodISODate", "$ZodISODateTime", "$ZodISODuration", "$ZodISOTime", "$ZodIntersection", "$ZodJWT", "$ZodKSUID", "$ZodLazy", "$ZodLiteral", "$ZodMAC", "$ZodMap", "$ZodNaN", "$ZodNanoID", "$ZodNever", "$ZodNonOptional", "$ZodNull", "$ZodNullable", "$ZodNumber", "$ZodNumberFormat", "$ZodObject", "$ZodObjectJIT", "$ZodOptional", "$ZodPipe", "$ZodPrefault", "$ZodPromise", "$ZodReadonly", "$ZodRealError", "$ZodRecord", "$ZodRegistry", "$ZodSet", "$ZodString", "$ZodStringFormat", "$ZodSuccess", "$ZodSymbol", "$ZodTemplateLiteral", "$ZodTransform", "$ZodTuple", "$ZodType", "$ZodULID", "$ZodURL", "$ZodUUID", "$ZodUndefined", "$ZodUnion", "$ZodUnknown", "$ZodVoid", "$ZodXID", "$ZodXor", "$brand", "$constructor", "$input", "$output", "Doc", "json_schema_exports", "JSONSchemaGenerator", "NEVER", "TimePrecision", "_any", "_array", "_base64", "_base64url", "_bigint", "_boolean", "_catch", "_check", "_cidrv4", "_cidrv6", "_coercedBigint", "_coercedBoolean", "_coercedDate", "_coercedNumber", "_coercedString", "_cuid", "_cuid2", "_custom", "_date", "_decode", "_decodeAsync", "_default", "_discriminatedUnion", "_e164", "_email", "_emoji", "_encode", "_encodeAsync", "_endsWith", "_enum", "_file", "_float32", "_float64", "_gt", "_gte", "_guid", "_includes", "_int", "_int32", "_int64", "_intersection", "_ipv4", "_ipv6", "_isoDate", "_isoDateTime", "_isoDuration", "_isoTime", "_jwt", "_ksuid", "_lazy", "_length", "_literal", "_lowercase", "_lt", "_lte", "_mac", "_map", "_maxLength", "_maxSize", "_mime", "_minLength", "_minSize", "_multipleOf", "_nan", "_nanoid", "_nativeEnum", "_negative", "_never", "_nonnegative", "_nonoptional", "_nonpositive", "_normalize", "_null", "_nullable", "_number", "_optional", "_overwrite", "_parse", "_parseAsync", "_pipe", "_positive", "_promise", "_property", "_readonly", "_record", "_refine", "_regex", "_safeDecode", "_safeDecodeAsync", "_safeEncode", "_safeEncodeAsync", "_safeParse", "_safeParseAsync", "_set", "_size", "_slugify", "_startsWith", "_string", "_stringFormat", "_stringbool", "_success", "_superRefine", "_symbol", "_templateLiteral", "_toLowerCase", "_toUpperCase", "_transform", "_trim", "_tuple", "_uint32", "_uint64", "_ulid", "_undefined", "_union", "_unknown", "_uppercase", "_url", "_uuid", "_uuidv4", "_uuidv6", "_uuidv7", "_void", "_xid", "_xor", "clone", "config", "createStandardJSONSchemaMethod", "createToJSONSchemaMethod", "decode", "decodeAsync", "describe", "encode", "encodeAsync", "extractDefs", "finalize", "flattenError", "formatError", "globalConfig", "globalRegistry", "initializeContext", "isValidBase64", "isValidBase64URL", "isValidJWT", "locales_exports", "meta", "parse", "parseAsync", "prettifyError", "process", "regexes_exports", "registry", "safeDecode", "safeDecodeAsync", "safeEncode", "safeEncodeAsync", "safeParse", "safeParseAsync", "toDotPath", "toJSONSchema", "treeifyError", "util_exports", "version", "NEVER", "$constructor", "name", "initializer", "params", "init", "inst", "def", "_", "proto", "keys", "i", "k", "__name", "Parent", "Definition", "_a", "fn", "$brand", "$ZodAsyncError", "$ZodEncodeError", "globalConfig", "config", "newConfig", "util_exports", "__export", "BIGINT_FORMAT_RANGES", "Class", "NUMBER_FORMAT_RANGES", "aborted", "allowsEval", "assert", "assertEqual", "assertIs", "assertNever", "assertNotEqual", "assignProp", "base64ToUint8Array", "base64urlToUint8Array", "cached", "captureStackTrace", "cleanEnum", "cleanRegex", "clone", "cloneDef", "createTransparentProxy", "defineLazy", "esc", "escapeRegex", "extend", "finalizeIssue", "floatSafeRemainder", "getElementAtPath", "getEnumValues", "getLengthableOrigin", "getParsedType", "getSizableOrigin", "hexToUint8Array", "isObject", "isPlainObject", "issue", "joinValues", "jsonStringifyReplacer", "merge", "mergeDefs", "normalizeParams", "nullish", "numKeys", "objectClone", "omit", "optionalKeys", "parsedType", "partial", "pick", "prefixIssues", "primitiveTypes", "promiseAllObject", "propertyKeyTypes", "randomString", "required", "safeExtend", "shallowClone", "slugify", "stringifyPrimitive", "uint8ArrayToBase64", "uint8ArrayToBase64url", "uint8ArrayToHex", "unwrapMessage", "assertEqual", "val", "__name", "assertNotEqual", "assertIs", "_arg", "assertNever", "_x", "assert", "_", "getEnumValues", "entries", "numericValues", "v", "k", "joinValues", "array", "separator", "stringifyPrimitive", "jsonStringifyReplacer", "value", "cached", "getter", "nullish", "input", "cleanRegex", "source", "start", "end", "floatSafeRemainder", "step", "valDecCount", "stepString", "stepDecCount", "match", "decCount", "valInt", "stepInt", "EVALUATING", "defineLazy", "object", "key", "objectClone", "obj", "assignProp", "target", "prop", "mergeDefs", "defs", "mergedDescriptors", "def", "descriptors", "cloneDef", "schema", "getElementAtPath", "path", "acc", "promiseAllObject", "promisesObj", "keys", "promises", "results", "resolvedObj", "i", "randomString", "length", "chars", "str", "esc", "slugify", "captureStackTrace", "_args", "isObject", "data", "allowsEval", "F", "isPlainObject", "o", "ctor", "prot", "shallowClone", "numKeys", "keyCount", "getParsedType", "propertyKeyTypes", "primitiveTypes", "escapeRegex", "clone", "inst", "params", "cl", "normalizeParams", "_params", "createTransparentProxy", "receiver", "descriptor", "optionalKeys", "shape", "NUMBER_FORMAT_RANGES", "BIGINT_FORMAT_RANGES", "pick", "mask", "currDef", "checks", "newShape", "omit", "extend", "existingShape", "_shape", "safeExtend", "merge", "a", "b", "partial", "Class", "oldShape", "required", "aborted", "x", "startIndex", "prefixIssues", "issues", "iss", "_a", "unwrapMessage", "message", "finalizeIssue", "ctx", "config", "full", "getSizableOrigin", "getLengthableOrigin", "parsedType", "issue", "args", "cleanEnum", "el", "base64ToUint8Array", "base64", "binaryString", "bytes", "uint8ArrayToBase64", "base64urlToUint8Array", "base64url", "padding", "uint8ArrayToBase64url", "hexToUint8Array", "hex", "cleanHex", "uint8ArrayToHex", "initializer", "__name", "inst", "def", "jsonStringifyReplacer", "$ZodError", "$constructor", "$ZodRealError", "flattenError", "error", "mapper", "issue", "fieldErrors", "formErrors", "sub", "formatError", "processError", "issues", "curr", "i", "el", "treeifyError", "result", "path", "_a", "_b", "fullpath", "terminal", "toDotPath", "_path", "segs", "seg", "prettifyError", "lines", "a", "b", "_parse", "__name", "_Err", "schema", "value", "_ctx", "_params", "ctx", "result", "$ZodAsyncError", "e", "iss", "finalizeIssue", "config", "captureStackTrace", "parse", "$ZodRealError", "_parseAsync", "params", "parseAsync", "_safeParse", "$ZodError", "safeParse", "_safeParseAsync", "safeParseAsync", "_encode", "encode", "_decode", "decode", "_encodeAsync", "encodeAsync", "_decodeAsync", "decodeAsync", "_safeEncode", "safeEncode", "_safeDecode", "safeDecode", "_safeEncodeAsync", "safeEncodeAsync", "_safeDecodeAsync", "safeDecodeAsync", "regexes_exports", "__export", "base64", "base64url", "bigint", "boolean", "browserEmail", "cidrv4", "cidrv6", "cuid", "cuid2", "date", "datetime", "domain", "duration", "e164", "email", "emoji", "extendedDuration", "guid", "hex", "hostname", "html5Email", "idnEmail", "integer", "ipv4", "ipv6", "ksuid", "lowercase", "mac", "md5_base64", "md5_base64url", "md5_hex", "nanoid", "_null", "number", "rfc5322Email", "sha1_base64", "sha1_base64url", "sha1_hex", "sha256_base64", "sha256_base64url", "sha256_hex", "sha384_base64", "sha384_base64url", "sha384_hex", "sha512_base64", "sha512_base64url", "sha512_hex", "string", "time", "ulid", "_undefined", "unicodeEmail", "uppercase", "uuid", "uuid4", "uuid6", "uuid7", "xid", "cuid", "cuid2", "ulid", "xid", "ksuid", "nanoid", "duration", "extendedDuration", "guid", "uuid", "__name", "version", "uuid4", "uuid6", "uuid7", "email", "html5Email", "rfc5322Email", "unicodeEmail", "idnEmail", "browserEmail", "_emoji", "emoji", "ipv4", "ipv6", "mac", "delimiter", "escapedDelim", "escapeRegex", "cidrv4", "cidrv6", "base64", "base64url", "hostname", "domain", "e164", "dateSource", "date", "timeSource", "args", "hhmm", "time", "datetime", "opts", "timeRegex", "string", "params", "regex", "bigint", "integer", "number", "boolean", "_null", "_undefined", "lowercase", "uppercase", "hex", "fixedBase64", "bodyLength", "padding", "__name", "fixedBase64url", "length", "md5_hex", "md5_base64", "md5_base64url", "sha1_hex", "sha1_base64", "sha1_base64url", "sha256_hex", "sha256_base64", "sha256_base64url", "sha384_hex", "sha384_base64", "sha384_base64url", "sha512_hex", "sha512_base64", "sha512_base64url", "$ZodCheck", "$constructor", "inst", "def", "_a", "numericOriginMap", "$ZodCheckLessThan", "origin", "bag", "curr", "payload", "$ZodCheckGreaterThan", "$ZodCheckMultipleOf", "floatSafeRemainder", "$ZodCheckNumberFormat", "isInt", "minimum", "maximum", "NUMBER_FORMAT_RANGES", "integer", "input", "$ZodCheckBigIntFormat", "BIGINT_FORMAT_RANGES", "$ZodCheckMaxSize", "val", "nullish", "getSizableOrigin", "$ZodCheckMinSize", "$ZodCheckSizeEquals", "size", "tooBig", "$ZodCheckMaxLength", "getLengthableOrigin", "$ZodCheckMinLength", "$ZodCheckLengthEquals", "length", "$ZodCheckStringFormat", "_b", "$ZodCheckRegex", "$ZodCheckLowerCase", "lowercase", "$ZodCheckUpperCase", "uppercase", "$ZodCheckIncludes", "escapedRegex", "escapeRegex", "pattern", "$ZodCheckStartsWith", "$ZodCheckEndsWith", "handleCheckPropertyResult", "result", "property", "prefixIssues", "__name", "$ZodCheckProperty", "$ZodCheckMimeType", "mimeSet", "$ZodCheckOverwrite", "Doc", "__name", "args", "fn", "arg", "lines", "x", "minIndent", "dedented", "line", "F", "version", "$ZodType", "$constructor", "inst", "def", "_a", "version", "checks", "ch", "fn", "runChecks", "__name", "payload", "ctx", "isAborted", "aborted", "asyncResult", "currLen", "_", "$ZodAsyncError", "handleCanaryResult", "canary", "checkResult", "result", "defineLazy", "value", "r", "safeParse", "safeParseAsync", "$ZodString", "string", "$ZodStringFormat", "$ZodCheckStringFormat", "$ZodGUID", "guid", "$ZodUUID", "v", "uuid", "$ZodEmail", "email", "$ZodURL", "trimmed", "url", "$ZodEmoji", "emoji", "$ZodNanoID", "nanoid", "$ZodCUID", "cuid", "$ZodCUID2", "cuid2", "$ZodULID", "ulid", "$ZodXID", "xid", "$ZodKSUID", "ksuid", "$ZodISODateTime", "datetime", "$ZodISODate", "date", "$ZodISOTime", "time", "$ZodISODuration", "duration", "$ZodIPv4", "ipv4", "$ZodIPv6", "ipv6", "$ZodMAC", "mac", "$ZodCIDRv4", "cidrv4", "$ZodCIDRv6", "cidrv6", "parts", "address", "prefix", "prefixNum", "isValidBase64", "data", "$ZodBase64", "base64", "isValidBase64URL", "base64url", "c", "padded", "$ZodBase64URL", "$ZodE164", "e164", "isValidJWT", "token", "algorithm", "tokensParts", "header", "parsedHeader", "$ZodJWT", "$ZodCustomStringFormat", "$ZodNumber", "number", "_ctx", "input", "received", "$ZodNumberFormat", "$ZodCheckNumberFormat", "$ZodBoolean", "boolean", "$ZodBigInt", "bigint", "$ZodBigIntFormat", "$ZodCheckBigIntFormat", "$ZodSymbol", "$ZodUndefined", "_undefined", "$ZodNull", "_null", "$ZodAny", "$ZodUnknown", "$ZodNever", "$ZodVoid", "$ZodDate", "isDate", "handleArrayResult", "final", "index", "prefixIssues", "$ZodArray", "proms", "i", "item", "handlePropertyResult", "key", "isOptionalOut", "normalizeDef", "keys", "k", "okeys", "optionalKeys", "handleCatchall", "unrecognized", "keySet", "_catchall", "t", "$ZodObject", "sh", "newSh", "_normalized", "cached", "shape", "propValues", "field", "isObject", "catchall", "el", "$ZodObjectJIT", "superParse", "generateFastpass", "doc", "Doc", "normalized", "parseStr", "esc", "ids", "counter", "id", "fastpass", "jit", "globalConfig", "fastEnabled", "allowsEval", "handleUnionResults", "results", "nonaborted", "iss", "finalizeIssue", "config", "$ZodUnion", "o", "option", "patterns", "p", "cleanRegex", "single", "first", "async", "handleExclusiveUnionResults", "successes", "$ZodXor", "$ZodDiscriminatedUnion", "_super", "pv", "val", "disc", "opts", "map", "values", "opt", "$ZodIntersection", "left", "right", "handleIntersectionResults", "mergeValues", "a", "b", "isPlainObject", "bKeys", "sharedKeys", "newObj", "sharedValue", "newArray", "itemA", "itemB", "unrecKeys", "unrecIssue", "bothKeys", "f", "merged", "$ZodTuple", "items", "reversedIndex", "optStart", "tooBig", "tooSmall", "handleTupleResult", "rest", "$ZodRecord", "recordKeys", "keyResult", "retryResult", "$ZodMap", "valueResult", "handleMapResult", "propertyKeyTypes", "$ZodSet", "handleSetResult", "$ZodEnum", "getEnumValues", "valuesSet", "escapeRegex", "$ZodLiteral", "$ZodFile", "$ZodTransform", "$ZodEncodeError", "_out", "output", "handleOptionalResult", "$ZodOptional", "pattern", "$ZodExactOptional", "$ZodNullable", "$ZodDefault", "handleDefaultResult", "$ZodPrefault", "$ZodNonOptional", "x", "handleNonOptionalResult", "$ZodSuccess", "$ZodCatch", "$ZodNaN", "$ZodPipe", "handlePipeResult", "next", "$ZodCodec", "handleCodecAResult", "transformed", "handleCodecTxResult", "nextSchema", "$ZodReadonly", "handleReadonlyResult", "$ZodTemplateLiteral", "regexParts", "part", "source", "start", "end", "primitiveTypes", "$ZodFunction", "func", "args", "parsedArgs", "parse", "parseAsync", "F", "$ZodPromise", "inner", "$ZodLazy", "$ZodCustom", "$ZodCheck", "handleRefineResult", "_iss", "issue", "locales_exports", "__export", "ar_default", "az_default", "be_default", "bg_default", "ca_default", "cs_default", "da_default", "de_default", "en_default", "eo_default", "es_default", "fa_default", "fi_default", "fr_default", "fr_CA_default", "he_default", "hu_default", "hy_default", "id_default", "is_default", "it_default", "ja_default", "ka_default", "kh_default", "km_default", "ko_default", "lt_default", "mk_default", "ms_default", "nl_default", "no_default", "ota_default", "pl_default", "ps_default", "pt_default", "ru_default", "sl_default", "sv_default", "ta_default", "th_default", "tr_default", "ua_default", "uk_default", "ur_default", "uz_default", "vi_default", "yo_default", "zh_CN_default", "zh_TW_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ar_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "az_default", "getBelarusianPlural", "count", "one", "few", "many", "absCount", "lastDigit", "lastTwoDigits", "__name", "error", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "maxValue", "unit", "minValue", "_issue", "be_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "invalid_adj", "bg_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ca_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "cs_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "da_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "de_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "en_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "eo_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "es_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "fa_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "fi_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "fr_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "fr_CA_default", "error", "__name", "TypeNames", "Sizable", "typeEntry", "t", "typeLabel", "e", "withDefinite", "verbFor", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expectedKey", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "stringified", "v", "lastValue", "sizing", "subject", "comparison", "verb", "adj", "be", "singularPhrase", "_issue", "nounEntry", "noun", "adjective", "joinValues", "he_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "hu_default", "getArmenianPlural", "count", "one", "many", "__name", "withDefiniteArticle", "word", "vowels", "lastChar", "error", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "maxValue", "unit", "minValue", "_issue", "hy_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "id_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "is_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "it_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ja_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ka_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "km_default", "kh_default", "km_default", "__name", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "suffix", "sizing", "unit", "_issue", "ko_default", "capitalizeFirstCharacter", "__name", "text", "getUnitTypeFromNumber", "number", "abs", "last", "last2", "error", "Sizable", "getSizing", "origin", "unitType", "inclusive", "targetShouldBe", "result", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "sizing", "adj", "_issue", "lt_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "mk_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ms_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "longName", "shortName", "_issue", "nl_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "no_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ota_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ps_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "pl_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "pt_default", "getRussianPlural", "count", "one", "few", "many", "absCount", "lastDigit", "lastTwoDigits", "__name", "error", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "maxValue", "unit", "minValue", "_issue", "ru_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "sl_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "sv_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ta_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "th_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "tr_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "uk_default", "ua_default", "uk_default", "__name", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "ur_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "uz_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "vi_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "zh_CN_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "zh_TW_default", "error", "__name", "Sizable", "getSizing", "origin", "FormatDictionary", "TypeDictionary", "issue", "expected", "receivedType", "parsedType", "received", "stringifyPrimitive", "joinValues", "adj", "sizing", "_issue", "yo_default", "_a", "$output", "$input", "$ZodRegistry", "__name", "schema", "_meta", "meta", "p", "pm", "f", "registry", "globalRegistry", "_string", "Class", "params", "normalizeParams", "__name", "_coercedString", "_email", "_guid", "_uuid", "_uuidv4", "_uuidv6", "_uuidv7", "_url", "_emoji", "_nanoid", "_cuid", "_cuid2", "_ulid", "_xid", "_ksuid", "_ipv4", "_ipv6", "_mac", "_cidrv4", "_cidrv6", "_base64", "_base64url", "_e164", "_jwt", "TimePrecision", "_isoDateTime", "_isoDate", "_isoTime", "_isoDuration", "_number", "_coercedNumber", "_int", "_float32", "_float64", "_int32", "_uint32", "_boolean", "_coercedBoolean", "_bigint", "_coercedBigint", "_int64", "_uint64", "_symbol", "_undefined", "_null", "_any", "_unknown", "_never", "_void", "_date", "_coercedDate", "_nan", "_lt", "value", "$ZodCheckLessThan", "_lte", "_gt", "value", "params", "$ZodCheckGreaterThan", "normalizeParams", "__name", "_gte", "_positive", "params", "_gt", "__name", "_negative", "_lt", "_nonpositive", "_lte", "_nonnegative", "_gte", "_multipleOf", "value", "$ZodCheckMultipleOf", "normalizeParams", "_maxSize", "maximum", "$ZodCheckMaxSize", "_minSize", "minimum", "$ZodCheckMinSize", "_size", "size", "$ZodCheckSizeEquals", "_maxLength", "$ZodCheckMaxLength", "_minLength", "$ZodCheckMinLength", "_length", "length", "$ZodCheckLengthEquals", "_regex", "pattern", "$ZodCheckRegex", "_lowercase", "$ZodCheckLowerCase", "_uppercase", "$ZodCheckUpperCase", "_includes", "includes", "$ZodCheckIncludes", "_startsWith", "prefix", "$ZodCheckStartsWith", "_endsWith", "suffix", "$ZodCheckEndsWith", "_property", "property", "schema", "$ZodCheckProperty", "_mime", "types", "$ZodCheckMimeType", "_overwrite", "tx", "$ZodCheckOverwrite", "_normalize", "form", "input", "_trim", "_toLowerCase", "_toUpperCase", "_slugify", "slugify", "_array", "Class", "element", "_union", "options", "_xor", "_discriminatedUnion", "discriminator", "_intersection", "left", "right", "_tuple", "items", "_paramsOrRest", "_params", "hasRest", "$ZodType", "rest", "_record", "keyType", "valueType", "_map", "_set", "_enum", "values", "entries", "v", "_nativeEnum", "_literal", "_file", "_transform", "fn", "_optional", "innerType", "_nullable", "_default", "defaultValue", "shallowClone", "_nonoptional", "_success", "_catch", "catchValue", "_pipe", "in_", "out", "_readonly", "_templateLiteral", "parts", "_lazy", "getter", "_promise", "_custom", "norm", "_refine", "_superRefine", "ch", "_check", "payload", "issue", "_issue", "$ZodCheck", "describe", "description", "inst", "existing", "globalRegistry", "meta", "metadata", "_stringbool", "Classes", "truthyArray", "falsyArray", "truthySet", "falsySet", "_Codec", "$ZodCodec", "_Boolean", "$ZodBoolean", "_String", "$ZodString", "stringSchema", "booleanSchema", "codec", "data", "_payload", "_stringFormat", "format", "fnOrRegex", "def", "val", "initializeContext", "params", "target", "globalRegistry", "__name", "process", "schema", "ctx", "_params", "_a", "def", "seen", "result", "overrideSchema", "_json", "processor", "parent", "meta", "isTransforming", "extractDefs", "root", "idToSchema", "entry", "id", "existing", "makeURI", "defsSegment", "externalId", "uriGenerator", "defUriPrefix", "defId", "extractToDef", "ref", "key", "ext", "finalize", "flattenRef", "zodSchema", "_cached", "refSeen", "refSchema", "parentSeen", "defs", "finalized", "createStandardJSONSchemaMethod", "_schema", "_ctx", "option", "item", "createToJSONSchemaMethod", "processors", "io", "libraryOptions", "formatMap", "stringProcessor", "__name", "schema", "ctx", "_json", "_params", "json", "minimum", "maximum", "format", "patterns", "contentEncoding", "regexes", "regex", "numberProcessor", "multipleOf", "exclusiveMaximum", "exclusiveMinimum", "booleanProcessor", "_schema", "_ctx", "bigintProcessor", "symbolProcessor", "nullProcessor", "undefinedProcessor", "voidProcessor", "neverProcessor", "anyProcessor", "unknownProcessor", "dateProcessor", "enumProcessor", "def", "values", "getEnumValues", "v", "literalProcessor", "vals", "val", "nanProcessor", "templateLiteralProcessor", "pattern", "fileProcessor", "file", "mime", "m", "successProcessor", "customProcessor", "functionProcessor", "transformProcessor", "mapProcessor", "setProcessor", "arrayProcessor", "params", "process", "objectProcessor", "shape", "key", "allKeys", "requiredKeys", "unionProcessor", "isExclusive", "options", "x", "i", "intersectionProcessor", "a", "b", "isSimpleIntersection", "allOf", "tupleProcessor", "prefixPath", "restPath", "prefixItems", "rest", "recordProcessor", "keyType", "valueSchema", "keyValues", "validKeyValues", "nullableProcessor", "inner", "seen", "nonoptionalProcessor", "defaultProcessor", "prefaultProcessor", "catchProcessor", "catchValue", "pipeProcessor", "innerType", "readonlyProcessor", "promiseProcessor", "optionalProcessor", "lazyProcessor", "allProcessors", "toJSONSchema", "input", "registry", "initializeContext", "defs", "entry", "_", "schemas", "external", "extractDefs", "finalize", "defsSegment", "JSONSchemaGenerator", "__name", "value", "params", "normalizedTarget", "initializeContext", "allProcessors", "schema", "_params", "process", "extractDefs", "result", "finalize", "_", "plainResult", "json_schema_exports", "schemas_exports", "__export", "ZodAny", "ZodArray", "ZodBase64", "ZodBase64URL", "ZodBigInt", "ZodBigIntFormat", "ZodBoolean", "ZodCIDRv4", "ZodCIDRv6", "ZodCUID", "ZodCUID2", "ZodCatch", "ZodCodec", "ZodCustom", "ZodCustomStringFormat", "ZodDate", "ZodDefault", "ZodDiscriminatedUnion", "ZodE164", "ZodEmail", "ZodEmoji", "ZodEnum", "ZodExactOptional", "ZodFile", "ZodFunction", "ZodGUID", "ZodIPv4", "ZodIPv6", "ZodIntersection", "ZodJWT", "ZodKSUID", "ZodLazy", "ZodLiteral", "ZodMAC", "ZodMap", "ZodNaN", "ZodNanoID", "ZodNever", "ZodNonOptional", "ZodNull", "ZodNullable", "ZodNumber", "ZodNumberFormat", "ZodObject", "ZodOptional", "ZodPipe", "ZodPrefault", "ZodPromise", "ZodReadonly", "ZodRecord", "ZodSet", "ZodString", "ZodStringFormat", "ZodSuccess", "ZodSymbol", "ZodTemplateLiteral", "ZodTransform", "ZodTuple", "ZodType", "ZodULID", "ZodURL", "ZodUUID", "ZodUndefined", "ZodUnion", "ZodUnknown", "ZodVoid", "ZodXID", "ZodXor", "_ZodString", "_default", "_function", "any", "array", "base64", "base64url", "bigint", "boolean", "_catch", "check", "cidrv4", "cidrv6", "codec", "cuid", "cuid2", "custom", "date", "describe", "discriminatedUnion", "e164", "email", "emoji", "_enum", "exactOptional", "file", "float32", "float64", "guid", "hash", "hex", "hostname", "httpUrl", "_instanceof", "int", "int32", "int64", "intersection", "ipv4", "ipv6", "json", "jwt", "keyof", "ksuid", "lazy", "literal", "looseObject", "looseRecord", "mac", "map", "meta", "nan", "nanoid", "nativeEnum", "never", "nonoptional", "_null", "nullable", "nullish", "number", "object", "optional", "partialRecord", "pipe", "prefault", "preprocess", "promise", "readonly", "record", "refine", "set", "strictObject", "string", "stringFormat", "stringbool", "success", "superRefine", "symbol", "templateLiteral", "transform", "tuple", "uint32", "uint64", "ulid", "_undefined", "union", "unknown", "url", "uuid", "uuidv4", "uuidv6", "uuidv7", "_void", "xid", "xor", "checks_exports", "__export", "_endsWith", "_gt", "_gte", "_includes", "_length", "_lowercase", "_lt", "_lte", "_maxLength", "_maxSize", "_mime", "_minLength", "_minSize", "_multipleOf", "_negative", "_nonnegative", "_nonpositive", "_normalize", "_overwrite", "_positive", "_property", "_regex", "_size", "_slugify", "_startsWith", "_toLowerCase", "_toUpperCase", "_trim", "_uppercase", "iso_exports", "__export", "ZodISODate", "ZodISODateTime", "ZodISODuration", "ZodISOTime", "date", "datetime", "duration", "time", "ZodISODateTime", "$constructor", "inst", "def", "$ZodISODateTime", "ZodStringFormat", "datetime", "params", "_isoDateTime", "__name", "ZodISODate", "$ZodISODate", "date", "_isoDate", "ZodISOTime", "$ZodISOTime", "time", "_isoTime", "ZodISODuration", "$ZodISODuration", "duration", "_isoDuration", "initializer", "__name", "inst", "issues", "$ZodError", "mapper", "formatError", "flattenError", "issue", "jsonStringifyReplacer", "ZodError", "$constructor", "ZodRealError", "parse", "_parse", "ZodRealError", "parseAsync", "_parseAsync", "safeParse", "_safeParse", "safeParseAsync", "_safeParseAsync", "encode", "_encode", "decode", "_decode", "encodeAsync", "_encodeAsync", "decodeAsync", "_decodeAsync", "safeEncode", "_safeEncode", "safeDecode", "_safeDecode", "safeEncodeAsync", "_safeEncodeAsync", "safeDecodeAsync", "_safeDecodeAsync", "ZodType", "$constructor", "inst", "def", "$ZodType", "createStandardJSONSchemaMethod", "createToJSONSchemaMethod", "checks", "util_exports", "ch", "params", "clone", "reg", "meta", "data", "parse", "safeParse", "parseAsync", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "check", "refine", "refinement", "superRefine", "fn", "_overwrite", "optional", "exactOptional", "nullable", "nonoptional", "array", "arg", "union", "intersection", "tx", "pipe", "transform", "_default", "prefault", "_catch", "target", "readonly", "description", "cl", "globalRegistry", "args", "_ZodString", "$ZodString", "ctx", "json", "stringProcessor", "bag", "_regex", "_includes", "_startsWith", "_endsWith", "_minLength", "_maxLength", "_length", "_lowercase", "_uppercase", "_trim", "_normalize", "_toLowerCase", "_toUpperCase", "_slugify", "ZodString", "_email", "ZodEmail", "_url", "ZodURL", "_jwt", "ZodJWT", "_emoji", "ZodEmoji", "_guid", "ZodGUID", "_uuid", "ZodUUID", "_uuidv4", "_uuidv6", "_uuidv7", "_nanoid", "ZodNanoID", "_cuid", "ZodCUID", "_cuid2", "ZodCUID2", "_ulid", "ZodULID", "_base64", "ZodBase64", "_base64url", "ZodBase64URL", "_xid", "ZodXID", "_ksuid", "ZodKSUID", "_ipv4", "ZodIPv4", "_ipv6", "ZodIPv6", "_cidrv4", "ZodCIDRv4", "_cidrv6", "ZodCIDRv6", "_e164", "ZodE164", "datetime", "date", "time", "duration", "string", "_string", "__name", "ZodStringFormat", "$ZodStringFormat", "$ZodEmail", "email", "$ZodGUID", "guid", "$ZodUUID", "uuid", "uuidv4", "uuidv6", "uuidv7", "$ZodURL", "url", "httpUrl", "regexes_exports", "$ZodEmoji", "emoji", "$ZodNanoID", "nanoid", "$ZodCUID", "cuid", "$ZodCUID2", "cuid2", "$ZodULID", "ulid", "$ZodXID", "xid", "$ZodKSUID", "ksuid", "$ZodIPv4", "ipv4", "ZodMAC", "$ZodMAC", "mac", "_mac", "$ZodIPv6", "ipv6", "$ZodCIDRv4", "cidrv4", "$ZodCIDRv6", "cidrv6", "$ZodBase64", "base64", "$ZodBase64URL", "base64url", "$ZodE164", "e164", "$ZodJWT", "jwt", "ZodCustomStringFormat", "$ZodCustomStringFormat", "stringFormat", "format", "fnOrRegex", "_params", "_stringFormat", "hostname", "hex", "hash", "alg", "enc", "regex", "ZodNumber", "$ZodNumber", "numberProcessor", "value", "_gt", "_gte", "_lt", "_lte", "int", "_multipleOf", "number", "_number", "ZodNumberFormat", "$ZodNumberFormat", "_int", "float32", "_float32", "float64", "_float64", "int32", "_int32", "uint32", "_uint32", "ZodBoolean", "$ZodBoolean", "booleanProcessor", "boolean", "_boolean", "ZodBigInt", "$ZodBigInt", "bigintProcessor", "bigint", "_bigint", "ZodBigIntFormat", "$ZodBigIntFormat", "int64", "_int64", "uint64", "_uint64", "ZodSymbol", "$ZodSymbol", "symbolProcessor", "symbol", "_symbol", "ZodUndefined", "$ZodUndefined", "undefinedProcessor", "_undefined", "ZodNull", "$constructor", "inst", "def", "$ZodNull", "ZodType", "ctx", "json", "params", "nullProcessor", "_null", "__name", "ZodAny", "$constructor", "inst", "def", "$ZodAny", "ZodType", "ctx", "json", "params", "anyProcessor", "any", "_any", "__name", "ZodUnknown", "$ZodUnknown", "unknownProcessor", "unknown", "_unknown", "ZodNever", "$ZodNever", "neverProcessor", "never", "_never", "ZodVoid", "$ZodVoid", "voidProcessor", "_void", "ZodDate", "$constructor", "inst", "def", "$ZodDate", "ZodType", "ctx", "json", "params", "dateProcessor", "value", "_gte", "_lte", "c", "date", "_date", "__name", "ZodArray", "$ZodArray", "arrayProcessor", "minLength", "_minLength", "maxLength", "_maxLength", "len", "_length", "array", "element", "_array", "keyof", "schema", "shape", "_enum", "ZodObject", "$ZodObjectJIT", "objectProcessor", "util_exports", "catchall", "unknown", "never", "incoming", "other", "mask", "args", "ZodOptional", "ZodNonOptional", "object", "strictObject", "looseObject", "ZodUnion", "$ZodUnion", "unionProcessor", "union", "options", "ZodXor", "$ZodXor", "xor", "ZodDiscriminatedUnion", "$ZodDiscriminatedUnion", "discriminatedUnion", "discriminator", "ZodIntersection", "$ZodIntersection", "intersectionProcessor", "intersection", "left", "right", "ZodTuple", "$ZodTuple", "tupleProcessor", "rest", "tuple", "items", "_paramsOrRest", "_params", "hasRest", "$ZodType", "ZodRecord", "$ZodRecord", "recordProcessor", "record", "keyType", "valueType", "partialRecord", "k", "clone", "looseRecord", "ZodMap", "$ZodMap", "mapProcessor", "_minSize", "_maxSize", "_size", "map", "ZodSet", "$ZodSet", "setProcessor", "set", "ZodEnum", "$ZodEnum", "enumProcessor", "keys", "values", "newEntries", "entries", "v", "nativeEnum", "entries", "params", "ZodEnum", "util_exports", "__name", "ZodLiteral", "$constructor", "inst", "def", "$ZodLiteral", "ZodType", "ctx", "json", "literalProcessor", "literal", "value", "ZodFile", "$ZodFile", "fileProcessor", "size", "_minSize", "_maxSize", "types", "_mime", "file", "_file", "ZodTransform", "$ZodTransform", "transformProcessor", "payload", "_ctx", "$ZodEncodeError", "issue", "_issue", "output", "transform", "fn", "ZodOptional", "$ZodOptional", "optionalProcessor", "optional", "innerType", "ZodExactOptional", "$ZodExactOptional", "exactOptional", "ZodNullable", "$ZodNullable", "nullableProcessor", "nullable", "nullish", "ZodDefault", "$ZodDefault", "defaultProcessor", "_default", "defaultValue", "ZodPrefault", "$ZodPrefault", "prefaultProcessor", "prefault", "ZodNonOptional", "$ZodNonOptional", "nonoptionalProcessor", "nonoptional", "ZodSuccess", "$ZodSuccess", "successProcessor", "success", "ZodCatch", "$ZodCatch", "catchProcessor", "_catch", "catchValue", "ZodNaN", "$constructor", "inst", "def", "$ZodNaN", "ZodType", "ctx", "json", "params", "nanProcessor", "nan", "_nan", "__name", "ZodPipe", "$ZodPipe", "pipeProcessor", "pipe", "in_", "out", "ZodCodec", "$ZodCodec", "codec", "ZodReadonly", "$ZodReadonly", "readonlyProcessor", "readonly", "innerType", "ZodTemplateLiteral", "$ZodTemplateLiteral", "templateLiteralProcessor", "templateLiteral", "parts", "util_exports", "ZodLazy", "$ZodLazy", "lazyProcessor", "lazy", "getter", "ZodPromise", "$ZodPromise", "promiseProcessor", "promise", "ZodFunction", "$ZodFunction", "functionProcessor", "_function", "tuple", "array", "unknown", "ZodCustom", "$constructor", "inst", "def", "$ZodCustom", "ZodType", "ctx", "json", "params", "customProcessor", "check", "fn", "ch", "$ZodCheck", "__name", "custom", "_params", "_custom", "refine", "_refine", "superRefine", "_superRefine", "describe", "meta", "_instanceof", "cls", "data", "util_exports", "payload", "stringbool", "__name", "args", "_stringbool", "ZodCodec", "ZodBoolean", "ZodString", "json", "params", "jsonSchema", "lazy", "union", "string", "number", "boolean", "_null", "array", "record", "preprocess", "fn", "schema", "pipe", "transform", "ZodIssueCode", "setErrorMap", "map", "config", "__name", "getErrorMap", "ZodFirstPartyTypeKind", "z", "schemas_exports", "checks_exports", "iso_exports", "RECOGNIZED_KEYS", "detectVersion", "schema", "defaultTarget", "$schema", "__name", "resolveRef", "ref", "ctx", "path", "defsKey", "key", "convertBaseSchema", "refPath", "resolved", "zodSchema", "convertSchema", "enumValues", "v", "literalSchemas", "type", "typeSchemas", "t", "typeSchema", "stringSchema", "format", "numberSchema", "shape", "properties", "requiredSet", "propSchema", "propZodSchema", "keySchema", "valueSchema", "objectSchema", "recordSchema", "patternProps", "patternKeys", "looseRecords", "pattern", "patternValue", "schemasToIntersect", "result", "i", "prefixItems", "items", "tupleItems", "item", "rest", "element", "arraySchema", "baseSchema", "hasExplicitType", "options", "s", "anyOfUnion", "oneOfUnion", "startIdx", "extraMeta", "coreMetadataKeys", "contentMetadataKeys", "fromJSONSchema", "params", "version", "defs", "globalRegistry", "coerce_exports", "__export", "bigint", "boolean", "date", "number", "string", "string", "params", "_coercedString", "ZodString", "__name", "number", "_coercedNumber", "ZodNumber", "boolean", "_coercedBoolean", "ZodBoolean", "bigint", "_coercedBigint", "ZodBigInt", "date", "_coercedDate", "ZodDate", "config", "en_default", "zod_default", "external_exports", "zDocumentId", "strict", "core", "zod_default", "__name", "validators", "_cached", "zTradition", "traditions", "_cached", "dist_exports", "zod_default", "__name", "SYSTEM", "__name", "dist_exports", "path", "tail", "pf2e", "sf2e", "entries", "index", "entry", "uuid", "singleUuid", "text", "options", "name", "CustomModule", "__name", "#api", "#current", "#debug", "#globalName", "#group", "#id", "id", "globalName", "_", "c", "self", "context", "setting", "getSetting", "localize", "label", "args", "dist_exports", "path", "joined", "tail", "ext", "str", "error", "message", "key", "toExpose", "exposed", "MODULE", "CustomModule", "actionImgMap", "dist_exports", "tail", "SYSTEM", "actionGlyphMap", "getActionGlyph", "action", "value", "sanitized", "actionGlyphMap", "__name", "getActorSize", "actor", "ActorSizeCls", "__name", "renderApplications", "type", "types", "apps", "dist_exports", "app", "x", "isInstanceOf", "__name", "renderCharacterSheets", "enrichHTML", "content", "options", "__name", "createChatLink", "docOrUuid", "label", "html", "isDocument", "link", "enrichHTML", "__name", "filterTraits", "traits", "selected", "condition", "selectedTraits", "s", "t", "__name", "waitDialog", "classes", "content", "data", "expand", "i18n", "no", "onRender", "position", "title", "yes", "MODULE", "dialogOptions", "localize", "_event", "_btn", "dialog", "createFormData", "generateDialogContent", "event", "htmlQuery", "generateDialogTitle", "__name", "confirmDialog", "dist_exports", "render", "flagPath", "path", "MODULE", "__name", "getFlag", "doc", "dist_exports", "setFlag", "args", "value", "unsetFlag", "updateFlag", "updates", "operation", "getFlagProperty", "obj", "setFlagProperty", "unsetFlagProperty", "obj", "path", "flagPath", "__name", "render", "args", "data", "template", "path", "MODULE", "localize", "dist_exports", "SYSTEM", "__name", "htmlQuery", "parent", "selectors", "__name", "htmlQueryAll", "htmlClosest", "child", "createHTMLElement", "nodeName", "classes", "dataset", "content", "id", "style", "element", "assignStyle", "key", "value", "dist_exports", "__name", "addListener", "parent", "selectors", "args", "element", "event", "listener", "useCapture", "e", "__name", "addListenerAll", "elements", "getInputValue", "el", "__name", "createFormData", "html", "expand", "form", "htmlQuery", "formData", "data", "dist_exports", "value", "element", "__name", "dataToDatasetString", "key", "sluggifiedKey", "stringified", "assignStyle", "el", "style", "ITEM_CARRY_TYPES", "PHYSICAL_ITEM_TYPES", "ATTACHABLE_TYPES", "getItemSource", "item", "clearId", "source", "__name", "getItemFromUuid", "uuid", "type", "getItemSourceFromUuid", "actorItems", "actor", "types", "dist_exports", "attachables", "t", "ATTACHABLE_TYPES", "attachType", "attachToType", "itemType", "subitem", "findItemWithSourceId", "isSupressedFeat", "getItemSourceId", "getItemSourceId", "item", "__name", "getActorWeapons", "actor", "shield", "item", "__name", "getEquipAnnotation", "item", "type", "hands", "annotation", "fullAnnotation", "purposeKey", "SYSTEM", "__name", "equipItemToUse", "actor", "item", "carryType", "handsHeld", "fullAnnotation", "cost", "templates", "SYSTEM", "fullAnnotationKey", "flavorAction", "getActionGlyph", "traits", "message", "traitSlugToObject", "flavor", "content", "token", "__name", "isSupressedFeat", "item", "__name", "registerWrapper", "type", "path", "callback", "context", "ids", "paths", "dist_exports", "wrapped", "args", "key", "id", "MODULE", "__name", "Localize", "_Localize", "__name", "subkeys", "self", "localize", "args", "data", "path", "MODULE", "dist_exports", "type", "permanent", "str", "key", "getTemplateData", "i18n", "localize", "Localize", "MapOfArrays", "__name", "entries", "key", "entry", "create", "dist_exports", "exist", "arr", "x", "fn", "index", "transformed", "value", "isInstanceOf", "obj", "cls", "cursor", "dcAdjustments", "dcByLevel", "rarityToDCAdjustment", "rarity", "__name", "adjustDC", "dc", "adjustment", "dcAdjustments", "adjustDCByRarity", "calculateDC", "level", "pwol", "dcByLevel", "calculateCreatureDC", "actor", "pwol", "calculateDC", "__name", "getDcRarity", "item", "__name", "getItemIdentificationDCs", "pwol", "notMatchingTraditionModifier", "SYSTEM", "baseDC", "calculateDC", "rarity", "dc", "adjustDCByRarity", "getIdentifyMagicDCs", "getMagicTraditions", "traits", "t", "setHasElement", "MAGIC_TRADITIONS", "result", "traditions", "key", "IdentifyItemPopup", "identifiedName", "dcs", "action", "path", "content", "dist_exports", "$html", "html", "updateButton", "_event", "formData", "status", "COIN_COMPENDIUM_UUIDS", "SYSTEM", "splitListString", "str", "delimiter", "unique", "list", "el", "dist_exports", "__name", "setHasElement", "set", "value", "ErrorPF2e", "message", "traitSlugToObject", "trait", "dictionary", "traitObject", "objectHasKey", "objectHasKey", "obj", "key", "__name", "pluralRules", "ordinalString", "value", "suffix", "__name", "localizer", "prefix", "formatArgs", "MAGIC_TRADITIONS", "getSpellRankLabel", "group", "ordinalString", "__name", "CANTRIP_DECK_UUID", "SYSTEM", "createConsumableFromSpell", "spell", "type", "rank", "mystified", "itemImg", "itemName", "temp", "data", "objectHasKey", "uuid", "consumable", "ErrorPF2e", "consumableSource", "traits", "dist_exports", "t", "setHasElement", "MAGIC_TRADITIONS", "nameTemplate", "description", "paragraphElement", "containerElement", "hrElement", "__name", "spellSlotGroupIdToNumber", "groupId", "numericValue", "__name", "warnInvalidDrop", "warning", "spell", "localize", "localizer", "spellRank", "getSpellRankLabel", "targetRank", "locKey", "type", "createCounteractStatistic", "ability", "actor", "baseModifier", "m", "StatisticCls", "dist_exports", "getChoiceSetSelection", "item", "option", "flag", "rule", "__name", "settingPath", "path", "MODULE", "__name", "getSetting", "key", "setSetting", "value", "registerSetting", "options", "isGM", "userIsGM", "dist_exports", "choice", "_onChange", "operation", "userId", "registerSettingMenu", "TRANSLATED_SKILL", "TRANSLATED_SKILL_LOWER", "getTranslatedSkills", "lowercase", "dist_exports", "label", "value", "__name", "getSkillLabel", "skill", "localize", "getSpellCollectionCls", "actor", "__name", "getActorMaxRank", "createSpellcastingSource", "name", "category", "attribute", "flags", "proficiencyRank", "proficiencySlug", "showSlotlessRanks", "sort", "tradition", "TimeChangeMode", "TimeOfDay", "_TimeOfDay", "__name", "hour", "minute", "second", "worldTime", "mode", "targetTime", "targetDayDifference", "currentTime", "getCurrentUser", "x", "__name", "userIsGM", "user", "getCurrentUser", "__name", "localeCompare", "a", "b", "__name", "sortByLocaleCompare", "list", "key", "getDragEventData", "event", "__name", "stringNumber", "value", "stringBoolean", "createDaily", "config", "__name", "rowIsOfType", "row", "types", "type", "getDailyLabel", "daily", "actor", "items", "localize", "createSpellcastingWithHighestStatisticSource", "actor", "name", "category", "flags", "showSlotlessRanks", "sort", "withClassDcs", "highestEntry", "getHighestSpellcastingStatistic", "highestSynthetic", "getHighestSyntheticStatistic", "tradition", "statistic", "createSpellcastingSource", "__name", "getSpellcastingMaxRank", "entry", "rankLimit", "slots", "limit", "maxRank", "rank", "slotKey", "isCharacter", "synthetics", "statistics", "classStatistic", "groupedStatistics", "dist_exports", "highestMod", "entries", "classAttribute", "groupedEntries", "x", "highestResults", "spellcastingEntryPrepareSiblingData", "wrapped", "SpellCollectionCls", "ChargesSpellCollection", "spell", "options", "groupId", "heightenedRank", "spellSlotGroupIdToNumber", "warnInvalidDrop", "heightenedUpdate", "source", "created", "isInstanceOf", "spellData", "charges", "group", "active", "spells", "error", "MODULE", "spellcastingEntryConsume", "slotIndex", "localize", "getSpellRankLabel", "spellcastingEntryGetSheetData", "data", "utils", "actor", "categories", "traits", "dist_exports", "feat", "category", "trait", "uuid", "source", "getItemSourceFromUuid", "options", "createSpellConsumableSource", "skill", "mode", "value", "predicate", "name", "rank", "SYSTEM", "type", "simplifyRuleValue", "language", "itemOrUuid", "label", "createChatLink", "localize", "getSkillLabel", "getActorWeapons", "item", "getItemSourceId", "option", "getChoiceSetSelection", "resistance", "getSpellRankLabel", "tradition", "rankLimit", "entry", "getSpellcastingMaxRank", "list", "getSetting", "party", "a", "rune", "potency", "damage", "group", "material", "findItemWithSourceId", "roll", "rollDie", "result", "createSpellcastingSource", "setFlagProperty", "identifier", "signature", "level", "itemName", "itemImg", "spell", "createConsumableFromSpell", "__name", "faces", "nb", "total", "createUpdateCollection", "collection", "data", "update", "getUuidFromInlineMatch", "match", "isValidDaily", "daily", "__name", "apps", "CustomsMenu", "__name", "#selected", "localize", "getSetting", "htmlQuery", "_options", "selected", "dailies", "daily", "key", "readonly", "DAILY_SCHEMA", "list", "schema", "partId", "html", "#attachMainListeners", "#attachSidebarListeners", "addListenerAll", "el", "action", "#deleteDaily", "#saveDaily", "addListener", "#onUnlockDaily", "disabled", "#createDaily", "code", "parseCustomDaily", "custom", "x", "setSetting", "confirmDialog", "defaultTemplate", "adaptiveTalent", "SYSTEM", "_actor", "items", "actor", "level", "nbFeats", "dist_exports", "i", "localize", "rows", "messages", "addFeat", "promises", "uuid", "source", "utils", "ancestralUUID", "SYSTEM", "expertUUID", "ancestralLongevity", "_actor", "items", "actor", "skillList", "utils", "actorSkills", "value", "rows", "messages", "addItem", "addRule", "removeRule", "data", "slug", "rank", "uuid", "row", "item", "selected", "source", "skill", "apps", "INDEX", "INDEX_TYPE", "HomebrewsMenu", "_HomebrewsMenu", "__name", "#selected", "getSetting", "localize", "index", "dist_exports", "id", "result", "entry", "pack", "_options", "homebrewsSettings", "selected", "entries", "isPack", "img", "name", "partId", "html", "#attachMainListeners", "#attachSidebarListeners", "#addHomebrew", "input", "htmlQuery", "type", "utils", "homebrew", "setSetting", "#deleteHomebrew", "#openHomebrew", "data", "getHomebrewId", "el", "htmlClosest", "addListenerAll", "action", "ANIMIST_VESSELS_PATH", "LORE_STRIP_REGEX", "UUID_REGEX", "AVATAR_UUID", "SYSTEM", "HEAL_UUID", "HARM_UUID", "ANIMAL_FORM_UUID", "AERIAL_FORM_UUID", "MONSTROSITY_FORM_UUID", "SPELLS_SLOTS", "animist", "_actor", "items", "actor", "pack", "uniqueId", "nbPrimary", "apparitions", "entry", "options", "dist_exports", "name", "uuid", "HomebrewsMenu", "nbApparitions", "i", "labelKey", "localize", "rows", "messages", "addItem", "addFeat", "addRule", "parent", "actorLevel", "maxRank", "getActorMaxRank", "loreRank", "spellsToAdd", "vesselsToAdd", "spellsIdentifier", "vesselsIdentifier", "animistConfig", "getAnimistConfigs", "addSpell", "__name", "signature", "source", "utils", "nbActualPrimary", "value", "index", "item", "isPrimary", "itemSource", "getItemSource", "descriptionEl", "createHTMLElement", "loresEl", "htmlQuery", "lores", "splitListString", "filteredLores", "lore", "loreSource", "spellsEl", "text", "uuids", "getUuidFromInlineMatch", "vesselEl", "match", "setFlagProperty", "extraSpells", "attribute", "vessels", "spellsEntry", "spells", "maxSlotsRank", "levelSlots", "slots", "focusPoints", "addedItems", "setExtraFlags", "primaryVessels", "getFlag", "getAnimistVesselsData", "vesselsEntry", "getFlagProperty", "isInstanceOf", "bladeAlly", "SYSTEM", "_actor", "items", "actor", "weapons", "utils", "weapon", "runes", "MODULE", "dist_exports", "rune", "rows", "messages", "addRule", "flagItem", "getItemFromUuid", "ICON", "SYSTEM", "ceremonialKnife", "actor", "weapon", "_actor", "items", "rank", "_items", "custom", "rows", "messages", "addItem", "uuid", "label", "utils", "source", "combatFlexibility", "SYSTEM", "_actor", "items", "rows", "messages", "addFeat", "source", "utils", "TACTICAL_EXCELLENCE_UUID", "SYSTEM", "COMMANDER_TACTIC_PATH", "commanderTactics", "_actor", "items", "actor", "commander", "efficient", "expert", "legendary", "master", "tactical", "uniqueId", "options", "dist_exports", "isTacticAbility", "id", "name", "extraNbTactics", "baseNbTactics", "sourceId", "tactics", "item", "nbTactics", "i", "localize", "messages", "rows", "setExtraFlags", "messageList", "ability", "message", "getCommanderTactics", "getFlag", "__name", "ASSURANCE_UUID", "SYSTEM", "AUTOMATIC_KNOWLEDGE_UUID", "RK_SKILLS", "coreMemories", "_actor", "items", "actor", "skillList", "utils", "actorSkills", "value", "messages", "rows", "addFeat", "assuranceUUID", "automaticKnowledgeUUID", "slug", "skill", "assurance", "rule", "dist_exports", "knowledge", "label", "experimentalSpellshaping", "SYSTEM", "actor", "_actor", "items", "rows", "messages", "addFeat", "uuid", "source", "utils", "SKIP_UNIQUES", "getFamiliarAbilityCount", "actor", "max", "flag", "getFlag", "newValue", "__name", "familiar", "nbAbilities", "pack", "SYSTEM", "uniqueId", "options", "_id", "uuid", "name", "entry", "HomebrewsMenu", "sortByLocaleCompare", "dist_exports", "i", "localize", "rows", "messages", "abilities", "messageList", "value", "item", "source", "getItemSource", "setFlagProperty", "ability", "message", "ids", "createLanguageDaily", "key", "uuid", "_actor", "items", "actor", "languageList", "utils", "actorLanguages", "value", "rows", "messages", "addRule", "language", "source", "__name", "metallicUUID", "SYSTEM", "weaponSlug", "weaponBases", "weaponDamages", "mentalForgeTraits", "metallicMaterials", "runicRunes", "advancedRunes", "mindSmith", "_actor", "items", "actor", "weapon", "localize", "createMindWeapon", "selectThat", "__name", "that", "arrayToOptions", "truthy", "arr", "labelizer", "dist_exports", "value", "mentalUniqueId", "mentalOptions", "utils", "canHaveRune", "damage", "damageLabel", "MODULE", "rows", "messages", "updateItem", "addRule", "itemPredicate", "traits", "i", "trait", "material", "rune", "weaponRows", "die", "usage", "checked", "label", "flavor", "potencyRunes", "runeSelect", "selection", "waitDialog", "source", "getActorSize", "rationsUUID", "SYSTEM", "rations", "_actor", "items", "value", "max", "remaining", "last", "localize", "rows", "messages", "updateItem", "deleteItem", "quantity", "name", "utils", "message", "createResistanceDaily", "key", "uuid", "resistances", "resistance", "isRandom", "_actor", "items", "options", "value", "utils", "sortByLocaleCompare", "rows", "messages", "addRule", "removeRule", "type", "source", "rule", "__name", "effectUUID", "SYSTEM", "rootMagic", "_actor", "items", "actor", "utils", "a", "rows", "messages", "createScrollChainDaily", "key", "uuids", "_actor", "items", "actor", "level", "ranks", "rank", "utils", "rows", "messages", "addItem", "dist_exports", "uuid", "label", "source", "__name", "scrollAdept", "SYSTEM", "_actor", "items", "actor", "maxRank", "utils", "proficiency", "dist_exports", "rank", "_items", "custom", "row", "rows", "messages", "addItem", "data", "uuid", "label", "source", "createComboSkillDaily", "key", "uuid", "rank", "removeRules", "label", "_actor", "items", "actor", "skillList", "utils", "actorSkills", "options", "value", "rows", "messages", "addItem", "addRule", "removeRule", "selected", "source", "skill", "__name", "createLoreSkillDaily", "zStatistic", "zod_exports", "zTradition", "__name", "zStaffData", "zDocumentId", "LABEL_REGEX", "UUID_REGEX", "_staffData", "getStaffData", "actor", "flag", "getFlag", "zStaffData", "__name", "canCastRank", "rank", "staffFlags", "maxRank", "getActorMaxRank", "charges", "range", "dist_exports", "entries", "entry", "e", "r", "d", "setStaffChargesValue", "value", "setFlag", "isStaff", "item", "traits", "getStaves", "getSpells", "entryId", "spellLists", "createHTMLElement", "spellList", "spellsData", "htmlQueryAll", "SpellRankEL", "label", "text", "getUuidFromInlineMatch", "uuid", "spells", "spell", "source", "STAFF_NEXUS", "SYSTEM", "RUNELORD_SINS", "staves", "actor", "isStaff", "getRunelordSin", "getPotentialBonds", "entries", "maxCharges", "actorCharges", "utils", "specialStatistic", "preparedEntries", "entry", "entryId", "isFlexible", "rank", "slotKey", "data", "index", "id", "expended", "spell", "a", "b", "runelordSin", "_items", "custom", "rows", "isRunelord", "hasStaffNexus", "findItemWithSourceId", "weapons", "weapon", "hasBond", "localize", "getStaves", "staff", "stavesRow", "level", "options", "flexibleLabel", "emptyLabel", "nbExpends", "slot", "rankLabel", "uniqueKey", "option", "name", "uniqueId", "dist_exports", "i", "messages", "flagItem", "updateItem", "setExtraFlags", "sin", "bond", "nexus", "nexusSpells", "getSpells", "sinSpells", "staffSpells", "overcharge", "spellcasting", "expendedSpells", "slotsUpdates", "expendedRows", "preparedUpdates", "preparedPath", "preparedData", "currentValue", "entryUpdates", "preparedSlot", "slots", "prepared", "isMakeshift", "charges", "staffData", "staffType", "groupLabel", "uuid", "label", "item", "sourceId", "__name", "StaffSpellcasting", "__name", "id", "name", "actor", "statistic", "tradition", "castPredicate", "staff", "createCounteractStatistic", "e", "spell", "rollOptions", "options", "castRank", "canCast", "canCastRank", "staffData", "getStaffData", "localize", "getSpellRankLabel", "charges", "mustUseSpontaneous", "useSpontaneous", "minRank", "maxRank", "getActorMaxRank", "range", "dist_exports", "entries", "entry", "r", "slot", "key", "multiEntries", "hint", "waitDialog", "_event", "_btn", "dialog", "htmlQuery", "spontaneousValue", "setStaffChargesValue", "spells", "ErrorPF2e", "maxCantripRank", "groups", "s", "x", "_rank", "rank", "thaumaturgeTome", "SYSTEM", "actor", "items", "actorLevel", "actorSkills", "skillList", "utils", "custom", "setCustom", "__name", "firstRank", "secondRank", "options", "value", "_actor", "_items", "rows", "messages", "addItem", "addRule", "removeRule", "rule", "slug", "rank", "selected", "source", "skill", "tricksterAce", "SYSTEM", "_actor", "items", "localize", "item", "actor", "rows", "messages", "addItem", "identifier", "uuid", "statistic", "spellSource", "utils", "entrySource", "ANIMIST_CLASS", "SYSTEM", "wandering", "actor", "dist_exports", "feat", "_actor", "_items", "custom", "level", "getItemSourceId", "feats", "messages", "rows", "replaceFeat", "row", "uuid", "utils", "source", "COMMON_WEAPON_RUNES", "WEAPON_MATERIALS", "TRANSMUTE_WEAPON_UUID", "SYSTEM", "warshard", "actor", "items", "weapons", "utils", "weapon", "options", "getWeaponProficiencyRank", "actorLevel", "weaponOptions", "runeOptions", "dist_exports", "level", "name", "slug", "materialOptions", "_", "low", "standard", "high", "rows", "messages", "addRule", "flagItem", "updateItem", "getItemFromUuid", "localize", "rune", "material", "weaponLevel", "grade", "updates", "setFlagProperty", "item", "data", "getFlag", "unsetFlagProperty", "itemOptions", "proficiencies", "categoryRank", "groupRank", "baseWeapon", "baseWeaponRank", "syntheticRanks", "p", "__name", "parseCustomDaily", "custom", "daily", "utils", "createDaily", "createComboSkillDaily", "createLoreSkillDaily", "createLanguageDaily", "createResistanceDaily", "createScrollChainDaily", "isValidDaily", "err", "localize", "__name", "registerCustomDailies", "dailies", "incompatible", "duplicates", "MODULE_DAILIES", "parseDailies", "DAILY_SCHEMA", "MODULE_DAILIES", "PREFIXES", "BUILTINS_DAILIES", "adaptiveTalent", "ancestralLongevity", "animist", "bladeAlly", "ceremonialKnife", "combatFlexibility", "commanderTactics", "coreMemories", "experimentalSpellshaping", "familiar", "mindSmith", "rations", "rootMagic", "scrollAdept", "staves", "thaumaturgeTome", "tricksterAce", "wandering", "warshard", "createLoreSkillDaily", "SYSTEM", "createComboSkillDaily", "createLanguageDaily", "createResistanceDaily", "createScrollChainDaily", "ALL_DAILIES", "BUILTINS_UUIDS", "MapOfArrays", "BUILTINS_ALWAYS", "UUIDS", "ALWAYS", "prepareDailies", "dailies", "prefix", "uuids", "always", "original", "originalKey", "keyWithPrefix", "daily", "x", "i", "uuid", "condition", "dist_exports", "err", "localize", "__name", "initializeDailies", "parseDailies", "customDailies", "customs", "getSetting", "custom", "parseCustomDaily", "modulesDailies", "preparedCustoms", "preparedModules", "key", "MODULE", "getDailies", "actor", "getDaily", "precondition", "item", "tmpDaily", "index", "itemSlug", "isSupressedFeat", "sourceId", "getItemSourceId", "filterDailies", "DailyInterface", "_DailyInterface", "__name", "#actor", "#dailies", "#dailiesArray", "#featUuids", "#settingsApp", "#randomInterval", "#dropFilters", "actor", "dailies", "options", "filterDailies", "localize", "daily", "row", "el", "data", "dailyRow", "filterKey", "dropFilter", "filter", "#convertToCompendiumFilter", "err", "frame", "configLabel", "configBtn", "_options", "hasAlert", "templates", "disabled", "getDisabledDailies", "items", "getDailyLabel", "custom", "rows", "dailyTemplate", "dist_exports", "rowLabel", "rowTemplate", "isSavedRow", "getSavedFlag", "getFlag", "rowData", "stringBoolean", "rowIsOfType", "openedGroups", "option", "_", "input", "selected", "isInput", "name", "uuid", "feat", "dataToDatasetString", "groups", "template", "a", "b", "hasDailies", "context", "render", "result", "content", "#addEventListeners", "_event", "action", "#accepDailies", "#clearField", "#openConfigs", "#openBrowser", "#resolveAlert", "html", "labelElements", "labelEl", "emptyRows", "htmlQueryAll", "inputEl", "htmlQuery", "htmlClosest", "processDailies", "compendium", "type", "compendiumFilter", "filterIsOfType", "rank", "stringNumber", "simplifyValue", "checkboxes", "checkboxEntry", "checkboxName", "filterCheckbox", "searchCheckbox", "x", "filterCheckboxOption", "traitsFilter", "searchTraits", "select", "selection", "levelFilter", "searchLevel", "isSimplifiableValue", "btnEl", "id", "DailyConfig", "#onUniqueChange", "uniqueTag", "uniqueOptions", "selectElements", "selectEl", "index", "selectOptions", "maxIndex", "optionUniqueValue", "optionExists", "value", "finalValue", "i", "#onInputChange", "#onComboInputChange", "#onComboSelectChange", "addListenerAll", "onInterfaceDrop", "event", "randomElements", "randomElement", "dropFeatInputs", "dropFeatInput", "processedUniques", "uniqueSelects", "unique", "dailykey", "numbered", "ApplicationV2", "DailyConfig", "__name", "#actor", "#dailies", "actor", "dailies", "options", "localize", "_options", "disabled", "getDisabledDailies", "dist_exports", "daily", "configs", "config", "getFlag", "context", "render", "result", "content", "#activateListeners", "familiarInput", "html", "addListenerAll", "el", "dailyKey", "unsetFlag", "setFlag", "value", "getInputValue", "saveValue", "onInterfaceDrop", "el", "event", "target", "htmlQuery", "data", "getDragEventData", "localize", "item", "compendium", "dropDataWarning", "dailyRow", "result", "isFeat", "validateFeat", "validateSpell", "htmlClosest", "exists", "feat", "__name", "type", "need", "has", "localizedType", "formattedNeed", "localizedHas", "localizedRequire", "filter", "checkboxes", "itemRank", "filterRanks", "filterCategories", "isCantrip", "isFocusSpell", "isRitual", "isSpell", "categories", "dist_exports", "sortedFilterCategories", "sortedItemCategories", "x", "filterTraditions", "itemTraditions", "validateDefault", "level", "filterCategory", "filterSkills", "prerequisitesArr", "prerequisite", "translatedSkills", "getTranslatedSkills", "skillList", "skills", "prereq", "key", "value", "itemSkills", "missingSkills", "source", "traits", "itemTraits", "t", "filterTraits", "filterRarity", "filterSource", "system", "pubSource", "sourceSlug", "fu", "processDailies", "rowElements", "flags", "extraFlags", "dailies", "rowElement", "row", "rowElementIsOFType", "isInput", "htmlQuery", "htmlClosest", "utils", "data", "actor", "deletedItems", "addedItems", "flaggedItems", "MapOfArrays", "itemsRules", "updatedItems", "updateItem", "createUpdateCollection", "rawMessages", "addedItemIds", "temporaryDeleted", "messageGroups", "getRules", "__name", "item", "id", "existing", "rules", "i", "MODULE", "processOptions", "daily", "rows", "items", "custom", "group", "message", "name", "label", "order", "temporary", "signature", "rule", "addItem", "source", "setFlagProperty", "setHasElement", "PHYSICAL_ITEM_TYPES", "actorSize", "getActorSize", "addFeat", "parent", "parentId", "SYSTEM", "globalOptions", "options", "dist_exports", "original", "err", "localize", "hasOrphanSpells", "entryIdentifier", "getFlagProperty", "createSpellcastingWithHighestStatisticSource", "currentFocus", "currentMaxFocus", "hasFocusSpells", "actualAddedItems", "getFlag", "slug", "path", "identifier", "spells", "spell", "rank", "update", "_id", "processUpdatedItemsData", "messages", "chatGroups", "type", "messageOptions", "x", "createChatLink", "preface", "a", "b", "ChatMessagePF2e", "chatContent", "actorUpdates", "newMaxValue", "newValue", "enrichHTML", "parentUpdates", "newSubitemsUpdates", "el", "types", "canPrepareDailies", "actor", "isValidCharacter", "getActorFlag", "__name", "key", "getFlag", "getDailiesSummary", "localize", "getDisabledDailies", "flag", "openDailiesInterface", "dailies", "getDailies", "DailyInterface", "onActorPrepareEmbeddedDocuments", "wrapped", "operation", "actor", "specialResourceItems", "r", "i", "itemsToDelete", "getFlag", "error", "MODULE", "__name", "onCharacterPrepareData", "wrapped", "staffFlags", "getStaffData", "staff", "staffStatistic", "statistic", "getHighestSpellcastingStatistic", "collectionId", "staffEntry", "StaffSpellcasting", "s", "StaffSpell", "__name", "event", "create", "data", "rollMode", "message", "messageSource", "SYSTEM", "SpellCollection", "getSpellCollectionCls", "collection", "spellSource", "source", "spell", "error", "MODULE", "RETRAIN_PATH", "ANIMIST_VESSELS_PATH", "COMMANDER_TACTIC_PATH", "renderChargesEntries", "actor", "parentElement", "callback", "chargesEntries", "entry", "entryContainer", "htmlQuery", "charges", "chargesElement", "createChargesElement", "addListener", "el", "value", "classStr", "toggleElement", "createHTMLElement", "__name", "withMax", "annotation", "isOwner", "chargesTemplate", "render", "classes", "createRetrainBtn", "selectedId", "type", "btn", "localize", "retrain", "selected", "path", "ids", "getFlag", "options", "dist_exports", "id", "item", "result", "waitDialog", "newIds", "x", "setFlag", "previous", "ChatMessagePF2e", "content", "updateActionsTab", "actor", "html", "actionsTab", "htmlQuery", "updateTacticsEntries", "__name", "tactics", "getCommanderTactics", "encounterTab", "isOwner", "actionsElements", "el", "itemId", "isTacticAbility", "btn", "createRetrainBtn", "updateAnimistEntries", "actor", "spellsTab", "isOwner", "vesselsData", "getAnimistVesselsData", "entry", "primary", "spellElements", "htmlQuery", "spellEl", "itemId", "btn", "createRetrainBtn", "nameEl", "__name", "updateStavesEntries", "actor", "spellsTab", "highlightItems", "staffData", "getStaffData", "staff", "staffId", "staffContainer", "htmlQuery", "rowControls", "handles", "controls", "handle", "charges", "annotationData", "getEquipAnnotation", "chargesElement", "createChargesElement", "addListener", "el", "value", "setStaffChargesValue", "equipItemToUse", "__name", "updateSpellsTab", "actor", "html", "highlightItems", "spellsTab", "htmlQuery", "isOwner", "renderChargesEntries", "container", "charges", "toggle", "updateAnimistEntries", "updateStavesEntries", "__name", "parentElement", "callback", "chargesEntries", "entry", "entryContainer", "chargesElement", "createChargesElement", "addListener", "el", "value", "classStr", "toggleElement", "createHTMLElement", "onCharacterSheetGetData", "wrapped", "options", "data", "actor", "staffId", "getStaffData", "staff", "collectionId", "knownCollections", "collectionIndex", "group", "collectionGroup", "error", "MODULE", "__name", "onRenderCharacterSheetPF2e", "sheet", "$html", "html", "highlight", "getSetting", "added", "getActorFlag", "flagged", "addDailiesIcon", "updateActionsTab", "updateSpellsTab", "content", "htmlQuery", "getItemElements", "id", "itemElement", "dailies", "dist_exports", "localize", "tooltip", "nameElement", "flagEl", "createHTMLElement", "parent", "canPrep", "canPrepareDailies", "classes", "icon", "getDailiesSummary", "openDailiesInterface", "onRenderFamiliarSheetPF2e", "sheet", "$html", "actor", "itemElements", "itemElement", "itemId", "item", "getFlag", "__name", "onRenderNPCSheetPF2e", "sheet", "$html", "actor", "html", "spellsTab", "htmlQuery", "renderChargesEntries", "container", "charges", "toggle", "inventoryTab", "staff", "getStaves", "controls", "staffBtn", "createHTMLElement", "MODULE", "generateNpcStaff", "generateBtn", "editBtn", "__name", "item", "existing", "maxCharges", "getActorMaxRank", "entrySource", "createSpellcastingSource", "dc", "calculateCreatureDC", "entry", "spellsSources", "getSpells", "localize", "registerSettings", "registerSettingMenu", "CustomsMenu", "HomebrewsMenu", "registerSetting", "parseDailies", "renderCharacterSheets", "__name", "restForTheNight", "wrapped", "options", "result", "characters", "dist_exports", "actor", "cleanup", "error", "MODULE", "__name", "removedItems", "updatedItems", "updateItem", "createUpdateCollection", "dailies", "filterDailies", "getDailies", "daily", "id", "actorItems", "item", "getFlag", "parentId", "slug", "SYSTEM", "rules", "modifiedRules", "i", "temporaryDeleted", "processUpdatedItemsData", "updateFlag", "registerInitWrappers", "registerWrapper", "onCharacterPrepareData", "spellcastingEntryPrepareSiblingData", "spellcastingEntryConsume", "spellcastingEntryGetSheetData", "__name", "registerReadyWrappers", "restForTheNight", "onActorPrepareEmbeddedDocuments", "onCharacterSheetGetData", "MODULE", "registerSettings", "registerInitWrappers", "initializeDailies", "registerReadyWrappers", "getSetting", "custom", "DAILY_SCHEMA", "localize", "onRenderCharacterSheetPF2e", "onRenderFamiliarSheetPF2e", "onRenderNPCSheetPF2e", "StaffSpellcasting", "canCastRank", "canPrepareDailies", "createRetrainBtn", "getAnimistConfigs", "getAnimistVesselsData", "getCommanderTactics", "getDailiesSummary", "getDisabledDailies", "getSpells", "getStaffData", "actor", "flag", "isTacticAbility", "openDailiesInterface", "registerCustomDailies", "retrain", "target", "itemId", "htmlClosest", "retrainType", "setStaffChargesValue", "utils", "createComboSkillDaily", "createLoreSkillDaily", "createLanguageDaily", "createResistanceDaily", "createScrollChainDaily"] }