bonsai-js 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +4 -4
- package/dist/builtins/index.d.mts +91 -0
- package/dist/builtins/index.mjs +93 -0
- package/dist/builtins/index.mjs.map +1 -0
- package/dist/check/checker.mjs +20 -4
- package/dist/check/checker.mjs.map +1 -1
- package/dist/environment.d.mts +13 -0
- package/dist/environment.mjs +14 -7
- package/dist/environment.mjs.map +1 -1
- package/dist/functions/builtins.mjs +550 -473
- package/dist/functions/builtins.mjs.map +1 -1
- package/dist/functions/define.mjs +41 -6
- package/dist/functions/define.mjs.map +1 -1
- package/dist/functions/descriptions.mjs +110 -0
- package/dist/functions/descriptions.mjs.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/lite/index.d.mts +2 -2
- package/dist/lite/index.mjs.map +1 -1
- package/dist/load.mjs +1 -2
- package/dist/load.mjs.map +1 -1
- package/dist/program.mjs +6 -8
- package/dist/program.mjs.map +1 -1
- package/dist/runtime/core.d.mts +18 -0
- package/dist/runtime/core.mjs +31 -0
- package/dist/runtime/core.mjs.map +1 -0
- package/dist/runtime/create.d.mts +61 -0
- package/dist/runtime/create.mjs +76 -0
- package/dist/runtime/create.mjs.map +1 -0
- package/dist/runtime/index.d.mts +4 -41
- package/dist/runtime/index.mjs +7 -68
- package/dist/runtime/index.mjs.map +1 -1
- package/dist/service/index.mjs +4 -3
- package/dist/service/index.mjs.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/version.mjs.map +1 -1
- package/package.json +17 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.mjs","names":[],"sources":["../../src/functions/builtins.ts"],"sourcesContent":["import { BLOCKED_NAMES } from '../syntax/lexer.js'\nimport {\n RegexSyntaxError,\n compileRegex,\n searchRegex,\n type Program as RegexProgram,\n} from '../runtime/regex.js'\nimport {\n checkDatePattern,\n addDays,\n addMonths,\n formatTimestamp,\n fromWallClock,\n isoWeekday,\n parseTimestamp,\n checked,\n wallClock,\n type WallClock,\n} from '../runtime/time.js'\nimport {\n Duration,\n durationOf,\n chargeIndexKey,\n chargeKey,\n keyListCost,\n mapBuildCost,\n chargeSearch,\n isMap,\n isValidDuration,\n shown,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n MS_PER_WEEK,\n contains,\n dateTime,\n describeKind,\n equals,\n errorText,\n holdsKey,\n isTimestamp,\n kindOf,\n order,\n SCAN_SHIFT,\n sortOrder,\n timeOf,\n toText,\n track,\n} from '../runtime/values.js'\nimport { isExact, t, unionOf, widen, type Type } from '../types.js'\nimport {\n K,\n Out,\n T,\n U,\n define,\n fnType,\n overload,\n type CallSite,\n type FunctionDef,\n type Lambda,\n type Overload,\n} from './define.js'\n\n/** What toNumber accepts: an optional sign, digits with an optional fraction, and an optional exponent. */\nconst DECIMAL_TEXT = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?$/u\nconst MAX_ROUND_DIGITS = 15\nconst MAX_FIXED_DIGITS = 100\n/** 2^53: from here on every double is a whole number. */\nconst MAX_EXACT_INTEGER = Number.MAX_SAFE_INTEGER + 1\n/** Where Number#toFixed switches to exponential notation. */\nconst FIXED_NOTATION_LIMIT = 1e21\nconst MONTHS_PER_YEAR = 12\n\nconst any = t.any()\nconst num = t.number()\nconst str = t.string()\nconst bool = t.boolean()\nconst ts = t.timestamp()\nconst dur = t.duration()\nconst listT = t.list(T)\nconst optT = t.optional(T)\nconst optStr = t.optional(str)\nconst predicate = fnType([T, num], bool)\nconst primitiveText = t.union(str, num, bool, t.null())\n\n// === argument helpers ===\n\nfunction integer(value: unknown, what: string, site: CallSite): number {\n if (typeof value !== 'number' || !Number.isInteger(value)) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `${what} must be an integer, not ${typeof value === 'number' ? String(value) : describeKind(value)}`,\n site.span,\n )\n }\n return value\n}\n\nfunction nonNegativeInteger(value: unknown, what: string, site: CallSite): number {\n const n = integer(value, what, site)\n if (n < 0) throw site.state.error('INVALID_ARGUMENT', `${what} must not be negative`, site.span)\n return n\n}\n\nfunction finite(value: number, site: CallSite): number {\n if (!Number.isFinite(value))\n throw site.state.error('NON_FINITE', 'Result is not a finite number', site.span)\n return value\n}\n\n/** Accounts for a list or map a built-in built (see `track`), and returns it. */\nfunction made<V extends unknown[] | Record<string, unknown>>(out: V, site: CallSite): V {\n track(out, site.state, site.span)\n return out\n}\n\nfunction newList(length: number, site: CallSite): unknown[] {\n site.state.listLimit(length, site.span)\n return new Array<unknown>(length)\n}\n\n/** Appends to a growing list, enforcing the list limit as it grows. */\nfunction push(out: unknown[], value: unknown, site: CallSite): void {\n if (out.length >= site.state.limits.maxListLength) site.state.listLimit(out.length + 1, site.span)\n out.push(value ?? null)\n}\n\nfunction numbersOf(items: readonly unknown[], what: string, site: CallSite): number[] {\n site.state.charge(items.length)\n const out: number[] = []\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const value = items[i]\n if (value === null || value === undefined) continue\n if (typeof value !== 'number') {\n throw site.state.error(\n 'TYPE_ERROR',\n `${what} expects numbers but found ${describeKind(value)}`,\n site.span,\n )\n }\n if (!Number.isFinite(value)) {\n throw site.state.error('NON_FINITE', `${what} found a non-finite number`, site.span)\n }\n out.push(value)\n }\n return out\n}\n\n/** The first item that is not null, or null. */\nfunction firstPresent(items: readonly unknown[]): unknown {\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item !== null && item !== undefined) return item\n }\n return null\n}\n\n/**\n * The total milliseconds and count of a list of durations (nulls are\n * skipped); anything else is a TYPE_ERROR naming `name`.\n */\nfunction durationTotal(\n items: readonly unknown[],\n name: string,\n site: CallSite,\n): { total: number; count: number } {\n site.state.charge(items.length)\n let total = 0\n let count = 0\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const d = items[i]\n if (d === null || d === undefined) continue\n if (!isValidDuration(d)) {\n throw site.state.error(\n 'TYPE_ERROR',\n `${name} expects durations but found ${describeKind(d)}`,\n site.span,\n )\n }\n total += d.ms\n // Checked at each step, as a + b + c is: past 2^53 the total stops being exact.\n if (!Number.isSafeInteger(total)) durationOf(total, site.state, site.span)\n count++\n }\n return { total, count }\n}\n\n/** The total of a list of durations (nulls are skipped). */\nfunction sumDurations(items: readonly unknown[], site: CallSite): Duration {\n return durationOf(durationTotal(items, 'sum', site).total, site.state, site.span)\n}\n\n/** The mean of a list of durations (nulls are skipped), or null for none. */\nfunction averageDuration(items: readonly unknown[], site: CallSite): Duration | null {\n const { total, count } = durationTotal(items, 'avg', site)\n // The total is checked as sum checks it, so avg fails where sum would.\n const sum = durationOf(total, site.state, site.span)\n return count === 0 ? null : durationOf(sum.ms / count, site.state, site.span)\n}\n\n/** Copies a list by index: never runs a host list's iterator, species, or methods. */\nfunction copyOf(items: readonly unknown[], from = 0, to = items.length): unknown[] {\n const out = new Array<unknown>(Math.max(0, to - from))\n // Host `undefined` (or a hole) is null in every list a built-in produces.\n for (let i = from; i < to; i++) out[i - from] = items[i] ?? null\n return out\n}\n\n/** Array.prototype.slice position semantics, without calling the list's own slice. */\nfunction slicePositions(length: number, start: number, end: number | undefined): [number, number] {\n const clamp = (n: number): number => (n < 0 ? Math.max(0, length + n) : Math.min(n, length))\n const from = clamp(start)\n const to = end === undefined ? length : clamp(end)\n return [from, Math.max(from, to)]\n}\n\nfunction textOf(value: unknown, site: CallSite): string {\n return toText(value, site.state, site.span)\n}\n\nfunction asLambda(value: unknown): Lambda {\n return value as Lambda\n}\n\n/** The value an async lambda's run resolved to (see {@link Out}). */\nfunction ran(out: unknown): unknown {\n return (out as Out).v\n}\n\nfunction truthy(value: unknown, site: CallSite): boolean {\n if (value === true) return true\n if (value === false || value === null || value === undefined) return false\n throw site.state.error(\n 'TYPE_ERROR',\n `The lambda must return a boolean, not ${describeKind(value)}`,\n site.span,\n )\n}\n\nfunction list(value: unknown): readonly unknown[] {\n return value as readonly unknown[]\n}\n\n// === patterns and number formats ===\n\nconst MAX_CACHED = 256\nconst MAX_INTL_DIGITS = 20\n/**\n * Total compiled size (instructions plus class ranges, about 50 bytes each)\n * of the patterns kept for reuse, shared by every environment.\n */\nconst REGEX_CACHE_BUDGET = 100_000\n/** Steps charged for creating a number formatter (about 18 microseconds for a new locale, measured). */\nconst NUMBER_FORMAT_COST = 1024\n/** Steps charged for formatting one number with Intl (about half a microsecond). */\nconst FORMAT_COST = 16\n/** Steps charged for parsing a timestamp (a pattern match and calendar arithmetic). */\nconst PARSE_COST = 16\n\n/**\n * Compiled patterns shared by every environment, bounded by total size and\n * least recently used first out. Each evaluation still pays to compile a\n * pattern the first time it uses it (see State.resource), so the cache only\n * saves time: it never changes step counts, and evicting never costs a\n * running evaluation uncharged work.\n */\nconst regexCache = new Map<string, RegexProgram>()\nlet regexCacheSize = 0\n/**\n * Why a pattern does not compile, remembered so a repeated bad pattern is\n * parsed once. Bounded by count and by total characters (pattern and message),\n * as the compiled cache is by size.\n */\nconst badPatterns = new Map<string, string>()\nlet badPatternChars = 0\n/** Characters of bad patterns and their messages kept at most. */\nconst BAD_PATTERN_BUDGET = 100_000\n\n/** The compiled pattern, from the cache when it is there; throws RegexSyntaxError. */\nfunction cachedRegex(pattern: string): RegexProgram {\n const cached = regexCache.get(pattern)\n if (cached !== undefined) {\n regexCache.delete(pattern)\n regexCache.set(pattern, cached)\n return cached\n }\n const bad = badPatterns.get(pattern)\n if (bad !== undefined) throw new RegexSyntaxError(bad)\n let program: RegexProgram\n try {\n program = compileRegex(pattern)\n } catch (error) {\n if (error instanceof RegexSyntaxError) {\n // Starts over when full, so at most one pattern past the budget is kept.\n const chars = pattern.length + error.message.length\n if (badPatterns.size >= MAX_CACHED || (badPatternChars += chars) > BAD_PATTERN_BUDGET) {\n badPatterns.clear()\n badPatternChars = chars\n }\n badPatterns.set(pattern, error.message)\n }\n throw error\n }\n if (program.size > REGEX_CACHE_BUDGET) return program\n for (const [key, old] of regexCache) {\n if (regexCache.size < MAX_CACHED && regexCacheSize + program.size <= REGEX_CACHE_BUDGET) break\n regexCache.delete(key)\n regexCacheSize -= old.size\n }\n regexCache.set(pattern, program)\n regexCacheSize += program.size\n return program\n}\n\nfunction compiledPattern(pattern: string, site: CallSite): RegexProgram {\n try {\n return cachedRegex(pattern)\n } catch (error) {\n if (error instanceof RegexSyntaxError)\n throw site.state.error('INVALID_ARGUMENT', error.message, site.span)\n throw error\n }\n}\n\nfunction regexFor(pattern: string, site: CallSite): RegexProgram {\n const s = site.state\n if (pattern.length > s.limits.maxPatternLength) {\n throw s.limit(\n 'PATTERN_LIMIT',\n `Pattern of length ${pattern.length} exceeds the limit of ${s.limits.maxPatternLength}`,\n site.span,\n )\n }\n // Compiling reads the pattern (charged first, so a failing pattern pays too)\n // and builds the program.\n return s.resource(\n `r${pattern}`,\n 1 + pattern.length,\n () => compiledPattern(pattern, site),\n (program) => program.size,\n )\n}\n\n/** Number formatters shared by every environment (charged per evaluation, as patterns are). */\nconst numberFormats = new Map<string, Intl.NumberFormat>()\n\n/**\n * Longest locale tag accepted. Real tags, even with Unicode extensions\n * (en-US-u-ca-gregory-nu-latn-hc-h23-cu-usd is 41 characters), are far\n * shorter; Intl's work on a tag grows faster than its length, so a longer one\n * is rejected before Intl sees it.\n */\nconst MAX_LOCALE_LENGTH = 64\n/** An ISO 4217 currency code. */\nconst CURRENCY_CODE = /^[A-Za-z]{3}$/u\n\n/**\n * Why a currency code is not one formatCurrency can use. Any three letters\n * are accepted: Intl prints a code it has no symbol for as the code itself,\n * and the list of codes it knows differs between runtimes.\n */\nfunction currencyProblem(code: string): string | undefined {\n return CURRENCY_CODE.test(code)\n ? undefined\n : `Currency codes are three letters (ISO 4217), not ${shown(code)}`\n}\n\n/** What checking found for each literal locale and currency (bounded like the format cache). */\nconst formatProblems = new Map<string, string | null>()\n\n/**\n * Why a literal locale or currency would fail formatNumber or formatCurrency\n * at run time, so the checker reports it (INVALID_ARGUMENT) before anything\n * runs. Non-literal arguments are left to run time.\n */\nfunction formatProblem(locale: unknown, currency: unknown): string | undefined {\n const tag = typeof locale === 'string' ? locale : undefined\n const code = typeof currency === 'string' ? currency : undefined\n if (tag === undefined && code === undefined) return undefined\n const key = `${tag ?? ''}\\u0000${code ?? ''}`\n const known = formatProblems.get(key)\n if (known !== undefined) return known ?? undefined\n let problem: string | undefined\n if (tag !== undefined && tag.length > MAX_LOCALE_LENGTH) {\n problem = `Locale tags are at most ${MAX_LOCALE_LENGTH} characters long`\n } else if (code !== undefined && !CURRENCY_CODE.test(code)) {\n problem = currencyProblem(code)\n } else {\n try {\n const options: Intl.NumberFormatOptions =\n code === undefined ? {} : { style: 'currency', currency: code }\n // A currency alone is checked against the default locale, as it runs.\n new Intl.NumberFormat(tag ?? 'en-US', options).format(0)\n if (tag !== undefined && Intl.NumberFormat.supportedLocalesOf(tag).length === 0)\n problem = `Unsupported locale ${shown(tag)}`\n } catch (error) {\n problem = `Invalid number format: ${errorText(error)}`\n }\n }\n if (formatProblems.size >= MAX_CACHED)\n formatProblems.delete(formatProblems.keys().next().value as string)\n formatProblems.set(key, problem ?? null)\n return problem\n}\n\n/** `signDisplay: 'negative'` (ES2023, Node 20+); the ES2022 lib types do not list it yet. */\nconst NEGATIVE_ONLY = 'negative' as Intl.NumberFormatOptions['signDisplay']\n\nfunction numberFormat(\n locale: string,\n options: Intl.NumberFormatOptions,\n site: CallSite,\n): Intl.NumberFormat {\n if (locale.length > MAX_LOCALE_LENGTH) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Locale tags are at most ${MAX_LOCALE_LENGTH} characters long`,\n site.span,\n )\n }\n const problem = options.currency === undefined ? undefined : currencyProblem(options.currency)\n if (problem !== undefined) throw site.state.error('INVALID_ARGUMENT', problem, site.span)\n const key = `${locale}\\u0000${JSON.stringify(options)}`\n const format = site.state.resource(`n${key}`, NUMBER_FORMAT_COST, () => {\n let created = numberFormats.get(key)\n if (created !== undefined) return created\n let supported: string[]\n try {\n supported = Intl.NumberFormat.supportedLocalesOf(locale)\n // A sign only for a negative amount that does not show as zero: nothing\n // else in the language shows -0, so neither does \"-$0.00\".\n created = new Intl.NumberFormat(locale, { ...options, signDisplay: NEGATIVE_ONLY })\n } catch (error) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Invalid number format: ${errorText(error)}`,\n site.span,\n )\n }\n // Intl falls back to the host's default locale for a tag it has no data\n // for, so the same expression would format differently on each server.\n if (supported.length === 0) {\n throw site.state.error('INVALID_ARGUMENT', `Unsupported locale ${shown(locale)}`, site.span)\n }\n if (numberFormats.size >= MAX_CACHED)\n numberFormats.delete(numberFormats.keys().next().value as string)\n numberFormats.set(key, created)\n return created\n })\n site.state.charge(FORMAT_COST)\n return format\n}\n\n// === strings ===\n\nfunction replaceText(\n text: string,\n find: string,\n replacement: string,\n all: boolean,\n site: CallSite,\n): string {\n if (find === '') {\n if (!all) {\n site.state.stringLimit(text.length + replacement.length, site.span)\n return replacement + text\n }\n site.state.stringLimit(text.length + replacement.length * (text.length + 1), site.span)\n site.state.charge(text.length)\n return text === '' ? replacement : replacement + text.split('').join(replacement) + replacement\n }\n chargeSearch(site.state, text.length, find.length)\n let out = ''\n let from = 0\n for (;;) {\n const at = text.indexOf(find, from)\n if (at === -1) break\n site.state.charge(1)\n out += text.slice(from, at) + replacement\n site.state.stringLimit(out.length + text.length - at - find.length, site.span)\n from = at + find.length\n if (!all) break\n }\n site.state.charge(1 + (text.length >>> SCAN_SHIFT))\n return out + text.slice(from)\n}\n\nfunction pad(\n text: string,\n length: unknown,\n fill: unknown,\n atStart: boolean,\n site: CallSite,\n): string {\n const target = nonNegativeInteger(length, 'Target length', site)\n // Overload dispatch guarantees `fill` is a string, or null/undefined when omitted.\n const filler = typeof fill === 'string' ? fill : ' '\n if (target <= text.length || filler === '') return text\n site.state.stringLimit(target, site.span)\n site.state.charge(1 + (target >>> SCAN_SHIFT))\n return atStart ? text.padStart(target, filler) : text.padEnd(target, filler)\n}\n\nfunction roundTo(value: number, digits: number, site: CallSite): number {\n if (!Number.isInteger(digits) || digits < -MAX_ROUND_DIGITS || digits > MAX_ROUND_DIGITS) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n 'Digits must be an integer between -15 and 15',\n site.span,\n )\n }\n if (value === 0 || !Number.isFinite(value)) return finite(value, site)\n // At 2^53 and beyond every double is a whole number, so there is nothing to\n // round to at zero or more digits (and shifting could overflow).\n if (digits >= 0 && Math.abs(value) >= MAX_EXACT_INTEGER) return value\n // Shift the decimal exponent textually so 1.005 rounds to 1.01, then round\n // half away from zero and shift back.\n const shift = (n: number, by: number): number => {\n const [mantissa, exponent] = n.toExponential().split('e') as [string, string]\n return Number(`${mantissa}e${Number(exponent) + by}`)\n }\n const shifted = Math.round(Math.abs(shift(value, digits)))\n const result = shifted === 0 ? 0 : Math.sign(value) * shift(shifted, -digits)\n return finite(result === 0 ? 0 : result, site)\n}\n\n// === lists ===\n\nfunction sortKeyed(\n items: readonly unknown[],\n keys: readonly unknown[],\n direction: unknown,\n site: CallSite,\n): unknown[] {\n const descending = direction === 'desc'\n if (\n direction !== undefined &&\n direction !== null &&\n direction !== 'asc' &&\n direction !== 'desc'\n ) {\n throw site.state.error('INVALID_ARGUMENT', 'Sort direction must be \"asc\" or \"desc\"', site.span)\n }\n const n = items.length\n const s = site.state\n // The sorted list is as long as the input: checked before anything is allocated.\n s.listLimit(n, site.span)\n s.charge(n === 0 ? 1 : Math.ceil(n * Math.log2(n + 1)))\n // Every key is checked, not only those a comparison happens to reach (a\n // list with one key makes no comparison at all).\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < keys.length; i++) checkOrderable(keys[i], site)\n // Each comparison charges for string length (sortOrder), so a long sort is\n // accounted, and interrupted by the step limit or timeout, as it runs. The\n // merge sort makes the same comparisons on every engine, so steps agree too.\n const indices = mergeSort(n, (a, b) => {\n const result = sortOrder(keys[a], keys[b], s, site.span)\n return descending ? -result : result\n })\n const out = new Array<unknown>(n)\n for (let i = 0; i < n; i++) out[i] = items[indices[i]] ?? null\n return made(out, site)\n}\n\n/** A stable bottom-up merge sort of the indices 0..n-1. */\nfunction mergeSort(n: number, compare: (a: number, b: number) => number): number[] {\n let from = Array.from({ length: n }, (_, i) => i)\n let to = new Array<number>(n)\n for (let width = 1; width < n; width *= 2) {\n for (let low = 0; low < n; low += 2 * width) {\n const middle = Math.min(low + width, n)\n const high = Math.min(low + 2 * width, n)\n let i = low\n let j = middle\n let k = low\n // Take from the right run only when it is strictly smaller: stable.\n while (i < middle && j < high) to[k++] = compare(from[j], from[i]) < 0 ? from[j++] : from[i++]\n while (i < middle) to[k++] = from[i++]\n while (j < high) to[k++] = from[j++]\n }\n ;[from, to] = [to, from]\n }\n return from\n}\n\nfunction groupKey(key: unknown, site: CallSite): string {\n let name: string\n if (typeof key === 'string') {\n chargeKey(site.state, key)\n name = key\n } else if (typeof key === 'number' || typeof key === 'boolean') name = String(key)\n else\n throw site.state.error(\n 'TYPE_ERROR',\n `A group key must be a string, number, or boolean, not ${describeKind(key)}`,\n site.span,\n )\n if (BLOCKED_NAMES.has(name))\n throw site.state.error('BLOCKED_PROPERTY', `\"${name}\" cannot be used as a key`, site.span)\n chargeIndexKey(site.state, name)\n return name\n}\n\n/** The list for `key`, created on first use. Own keys only: \"toString\" is a valid group. */\nfunction bucket(groups: Record<string, unknown[]>, key: string): unknown[] {\n if (Object.hasOwn(groups, key)) return groups[key]\n const created: unknown[] = []\n groups[key] = created\n return created\n}\n\nfunction madeGroups(groups: Record<string, unknown[]>, site: CallSite): Record<string, unknown[]> {\n const keys = Object.keys(groups)\n // Building a map costs per key, and much more once it is large (see mapBuildCost).\n site.state.charge(keyListCost(keys.length) + mapBuildCost(keys.length))\n for (const key of keys) made(groups[key], site)\n return made(groups, site)\n}\n\n/** Identities of the values one canonical-key pass has seen that compare by identity. */\ninterface Identities {\n readonly ids: Map<unknown, number>\n next: number\n}\n\n/**\n * A string that is equal for two values exactly when `equals` says they are:\n * maps by sorted keys, timestamps by time, opaque values (symbols, host\n * objects) by identity, and NaN never. Charged by the size of the value.\n */\nfunction canonicalKey(value: unknown, site: CallSite, depth: number, seen: Identities): string {\n const s = site.state\n if (value === null || value === undefined) return 'n'\n switch (typeof value) {\n case 'boolean':\n return value ? 'T' : 'F'\n case 'number':\n // NaN equals nothing, not even NaN: a key no other value shares.\n if (Number.isNaN(value)) return `N${seen.next++}`\n return `d${value === 0 ? 0 : value}`\n case 'string':\n s.charge(value.length >>> SCAN_SHIFT)\n return `s${value.length}:${value}`\n case 'bigint':\n // Bigints compare by value (1n == 1n).\n return `b${value}`\n case 'function':\n case 'object':\n case 'symbol':\n case 'undefined':\n default:\n break\n }\n // Counted as building counts (see track): the outermost container is level 1.\n if (depth + 1 > s.limits.maxValueDepth) {\n throw s.limit(\n 'VALUE_DEPTH_LIMIT',\n `Values nest deeper than ${s.limits.maxValueDepth} (is the data cyclic?)`,\n site.span,\n )\n }\n s.charge(1)\n if (Array.isArray(value)) {\n s.charge(value.length)\n let key = '['\n for (let i = 0; i < value.length; i++)\n key += (i === 0 ? '' : ',') + canonicalKey(value[i], site, depth + 1, seen)\n return charged(`${key}]`, site)\n }\n if (isTimestamp(value)) return `t${dateTime(value)}`\n if (isValidDuration(value)) return `u${value.ms}`\n if (isMap(value)) {\n const keys = Object.keys(value)\n // Sorting compares keys: about log2(k) comparisons each, linear in the key length.\n let text = 0\n for (const name of keys) text += name.length\n s.charge(keys.length + Math.ceil(Math.log2(keys.length + 1)) * (text >>> SCAN_SHIFT))\n if (keys.length > 1) keys.sort()\n let key = '{'\n let first = true\n for (const name of keys) {\n if (!holdsKey(value, name)) continue\n key += `${first ? '' : ','}${name.length}:${name}=${canonicalKey(value[name], site, depth + 1, seen)}`\n first = false\n }\n return charged(`${key}}`, site)\n }\n let id = seen.ids.get(value)\n if (id === undefined) {\n id = seen.next++\n seen.ids.set(value, id)\n }\n return `o${id}`\n}\n\n/** A key built at each nesting level copies its children's keys: charge the copy. */\nfunction charged(key: string, site: CallSite): string {\n site.state.charge(key.length >>> SCAN_SHIFT)\n return key\n}\n\n/**\n * Steps per item for unique(): building each item's canonical key and hashing\n * it into a set costs about as much as eight ordinary steps even for a number.\n */\nconst UNIQUE_ITEM_COST = 8\n\nfunction uniqueOf(items: readonly unknown[], site: CallSite): unknown[] {\n site.state.charge(items.length * UNIQUE_ITEM_COST)\n const seen = new Set<string>()\n const identities: Identities = { ids: new Map(), next: 0 }\n const out: unknown[] = []\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const value = items[i] ?? null\n // An item is one level inside the list, as building counts it.\n const key = canonicalKey(value, site, 1, identities)\n if (seen.has(key)) continue\n seen.add(key)\n push(out, value, site)\n }\n return made(out, site)\n}\n\nfunction flatten(items: readonly unknown[], site: CallSite): unknown[] {\n site.state.charge(items.length)\n const out: unknown[] = []\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) appendFlat(out, items[i], site)\n return made(out, site)\n}\n\n/** Appends a list's items (or a single value) to `out`, by index. */\nfunction appendFlat(out: unknown[], value: unknown, site: CallSite): void {\n if (Array.isArray(value)) {\n site.state.listLimit(out.length + value.length, site.span)\n site.state.charge(value.length)\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < value.length; i++) out.push(value[i] ?? null)\n } else push(out, value, site)\n}\n\nfunction joinText(items: readonly unknown[], separator: unknown, site: CallSite): string {\n const sep = separator === undefined || separator === null ? ',' : (separator as string)\n site.state.charge(items.length)\n let out = ''\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (\n item !== null &&\n item !== undefined &&\n typeof item === 'object' &&\n !(item instanceof Date) &&\n !isValidDuration(item)\n ) {\n throw site.state.error(\n 'TYPE_ERROR',\n `join needs text-like items but found ${describeKind(item)}`,\n site.span,\n )\n }\n const piece = (i === 0 ? '' : sep) + textOf(item, site)\n site.state.stringLimit(out.length + piece.length, site.span)\n out += piece\n }\n return out\n}\n\n/**\n * A value sort, min, and max can order: a finite number, a string, a valid\n * timestamp, a duration, or null. Checked for every item, so a single item is\n * held to the same rule as many.\n */\nfunction checkOrderable(value: unknown, site: CallSite): void {\n if (value === null || value === undefined || typeof value === 'string') return\n if (typeof value === 'number') {\n if (!Number.isFinite(value))\n throw site.state.error('NON_FINITE', 'Cannot order a non-finite number', site.span)\n return\n }\n if (isValidDuration(value)) return\n if (value instanceof Date) {\n timeOf(value, site.state, site.span)\n return\n }\n throw site.state.error('TYPE_ERROR', `Cannot order ${describeKind(value)}`, site.span)\n}\n\nfunction extreme(items: readonly unknown[], sign: 1 | -1, site: CallSite): unknown {\n site.state.charge(items.length)\n let best: unknown = null\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item === null || item === undefined) continue\n checkOrderable(item, site)\n if (best === null) {\n best = item\n continue\n }\n const result = order(item, best, site.state, site.span) as number\n if (result * sign > 0) best = item\n }\n return best\n}\n\n/**\n * min and max of their arguments, one overload per kind a list can order, so\n * `max(a, b)` takes what `[a, b].max()` does (and, unlike the list, no nulls).\n */\nfunction spreadExtremes(sign: 1 | -1): Overload[] {\n return [num, str, ts, dur].map((kind) =>\n overload([kind], kind, (args, site) => extreme(args, sign, site), { rest: kind }),\n )\n}\n\nfunction entryList(map: Record<string, unknown>, site: CallSite): string[] {\n const listed = Object.keys(map)\n site.state.charge(keyListCost(listed.length))\n const keys = listed.filter((key) => holdsKey(map, key))\n site.state.listLimit(keys.length, site.span)\n return keys\n}\n\n/** Result type of reading values out of a map type. */\nfunction valueTypeOf(type: Type | undefined): Type {\n if (type === undefined || type.kind !== 'map') return any\n // A declared object may hold keys it does not list, of any type.\n if (type.rest === undefined && !isExact(type)) return any\n const members = Object.values(type.fields)\n if (type.rest !== undefined) members.push(type.rest)\n return members.length === 0 ? any : unionOf(members.map(widen))\n}\n\n// === definitions ===\n\nconst STRING_FUNCTIONS: FunctionDef[] = [\n define('toUpperCase', 'Upper-cases text.', [\n overload([str], str, ([s]) => (s as string).toUpperCase()),\n ]),\n define('toLowerCase', 'Lower-cases text.', [\n overload([str], str, ([s]) => (s as string).toLowerCase()),\n ]),\n define('trim', 'Removes leading and trailing whitespace.', [\n overload([str], str, ([s]) => (s as string).trim()),\n ]),\n define('trimStart', 'Removes leading whitespace.', [\n overload([str], str, ([s]) => (s as string).trimStart()),\n ]),\n define('trimEnd', 'Removes trailing whitespace.', [\n overload([str], str, ([s]) => (s as string).trimEnd()),\n ]),\n define('startsWith', 'Whether text starts with a prefix.', [\n overload([str, str], bool, ([s, p]) => (s as string).startsWith(p as string)),\n ]),\n define('endsWith', 'Whether text ends with a suffix.', [\n overload([str, str], bool, ([s, p]) => (s as string).endsWith(p as string)),\n ]),\n define('includes', 'Whether text contains a substring, or a list contains a value.', [\n overload([str, str], bool, ([s, p], site) => {\n chargeSearch(site.state, (s as string).length, (p as string).length)\n return (s as string).includes(p as string)\n }),\n overload([listT, any], bool, ([l, v], site) => contains(l, v, site.state, site.span)),\n ]),\n define('indexOf', 'Position of the first match, or -1.', [\n overload([str, str], num, ([s, p], site) => {\n chargeSearch(site.state, (s as string).length, (p as string).length)\n return (s as string).indexOf(p as string)\n }),\n overload([listT, any], num, ([l, v], site) => {\n const items = list(l)\n site.state.charge(items.length)\n for (let i = 0; i < items.length; i++)\n if (equals(items[i], v, site.state, 0, site.span)) return i\n return -1\n }),\n ]),\n define('lastIndexOf', 'Position of the last match, or -1.', [\n overload([str, str], num, ([s, p], site) => {\n chargeSearch(site.state, (s as string).length, (p as string).length)\n return (s as string).lastIndexOf(p as string)\n }),\n overload([listT, any], num, ([l, v], site) => {\n const items = list(l)\n site.state.charge(items.length)\n for (let i = items.length - 1; i >= 0; i--)\n if (equals(items[i], v, site.state, 0, site.span)) return i\n return -1\n }),\n ]),\n define('slice', 'A section of text or a list; negative positions count from the end.', [\n overload(\n [str, num, num],\n str,\n ([s, a, b], site) =>\n (s as string).slice(\n integer(a, 'Start', site),\n b === undefined || b === null ? undefined : integer(b, 'End', site),\n ),\n { required: 2 },\n ),\n overload(\n [listT, num, num],\n listT,\n ([l, a, b], site) => {\n const items = list(l)\n const [from, to] = slicePositions(\n items.length,\n integer(a, 'Start', site),\n b === undefined || b === null ? undefined : integer(b, 'End', site),\n )\n site.state.charge(to - from)\n site.state.listLimit(to - from, site.span)\n return made(copyOf(items, from, to), site)\n },\n { required: 2 },\n ),\n ]),\n define('split', 'Splits text on a separator.', [\n overload(\n [str, str, num],\n t.list(str),\n ([s, sep, limit], site) => {\n const text = s as string\n site.state.charge(1 + (text.length >>> 4))\n chargeSearch(site.state, text.length, (sep as string).length)\n const max =\n limit === undefined || limit === null\n ? undefined\n : nonNegativeInteger(limit, 'Limit', site)\n // Never materialize more parts than the list limit allows.\n const cap = site.state.limits.maxListLength + 1\n const parts = text.split(sep as string, max === undefined ? cap : Math.min(max, cap))\n site.state.listLimit(parts.length, site.span)\n site.state.charge(parts.length)\n return parts\n },\n { required: 2 },\n ),\n ]),\n define('replace', 'Replaces the first occurrence of some text (no patterns).', [\n overload([str, str, str], str, ([s, f, r], site) =>\n replaceText(s as string, f as string, r as string, false, site),\n ),\n ]),\n define('replaceAll', 'Replaces every occurrence of some text (no patterns).', [\n overload([str, str, str], str, ([s, f, r], site) =>\n replaceText(s as string, f as string, r as string, true, site),\n ),\n ]),\n define('padStart', 'Pads text at the start to a length.', [\n overload([str, num, str], str, ([s, n, f], site) => pad(s as string, n, f, true, site), {\n required: 2,\n }),\n ]),\n define('padEnd', 'Pads text at the end to a length.', [\n overload([str, num, str], str, ([s, n, f], site) => pad(s as string, n, f, false, site), {\n required: 2,\n }),\n ]),\n define('repeat', 'Repeats text a number of times.', [\n overload([str, num], str, ([s, n], site) => {\n const count = nonNegativeInteger(n, 'Count', site)\n const text = s as string\n site.state.stringLimit(text.length * count, site.span)\n site.state.charge(1 + ((text.length * count) >>> SCAN_SHIFT))\n return text.repeat(count)\n }),\n ]),\n define('at', 'The item or character at a position; negative positions count from the end.', [\n overload(\n [str, num],\n optStr,\n ([s, i], site) => (s as string).at(integer(i, 'Index', site)) ?? null,\n ),\n overload([listT, num], optT, ([l, i], site) => {\n const items = list(l)\n const index = integer(i, 'Index', site)\n const position = index < 0 ? items.length + index : index\n return position < 0 || position >= items.length ? null : (items[position] ?? null)\n }),\n ]),\n define(\n 'matches',\n 'Whether text contains a match for a regular expression (JavaScript syntax without backreferences or lookaround, linear time; anchor with ^ and $; prefix (?i) to ignore case).',\n [\n overload(\n [str, str],\n bool,\n ([s, p], site) => {\n const program = regexFor(p as string, site)\n return searchRegex(program, s as string, (n) => {\n site.state.charge(n)\n })\n },\n {\n literals: ([, pattern]) => {\n if (typeof pattern !== 'string') return undefined\n try {\n cachedRegex(pattern)\n return undefined\n } catch (error) {\n return error instanceof Error ? error.message : String(error)\n }\n },\n },\n ),\n ],\n ),\n define('toString', 'Renders a value as text, as a template would.', [\n overload([t.union(primitiveText, ts, dur)], str, ([v], site) => textOf(v, site)),\n ]),\n define(\n 'toNumber',\n 'Parses decimal text as a number, e.g. \"-12.5\" or \"1e3\" (surrounding whitespace is ignored; 0x and other bases are not accepted).',\n [\n overload([t.union(str, num)], num, ([v], site) => {\n if (typeof v === 'number') return v\n const text = (v as string).trim()\n // Decimal only: user data such as \"0x10\" is not read as hexadecimal.\n const value = DECIMAL_TEXT.test(text) ? Number(text) : Number.NaN\n if (!Number.isFinite(value)) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Cannot convert ${shown(v as string)} to a number`,\n site.span,\n )\n }\n return value\n }),\n ],\n ),\n]\n\n/** A built-in applying a number function whose result must be finite. */\nfunction math(name: string, description: string, apply: (n: number) => number): FunctionDef {\n return define(name, description, [\n overload([num], num, ([n], site) => finite(apply(n as number), site)),\n ])\n}\n\nconst NUMBER_FUNCTIONS: FunctionDef[] = [\n define('round', 'Rounds half away from zero, optionally to a number of decimal digits.', [\n overload(\n [num, num],\n num,\n ([n, d], site) =>\n roundTo(n as number, d === undefined || d === null ? 0 : (d as number), site),\n { required: 1 },\n ),\n ]),\n math('floor', 'Rounds down.', Math.floor),\n math('ceil', 'Rounds up.', Math.ceil),\n math('trunc', 'Drops the fractional part.', Math.trunc),\n define('abs', 'Absolute value.', [\n overload([num], num, ([n], site) => finite(Math.abs(n as number), site)),\n overload([dur], dur, ([d]) => new Duration(Math.abs((d as Duration).ms))),\n ]),\n math('sqrt', 'Square root.', Math.sqrt),\n define('clamp', 'Limits a number to a range.', [\n overload([num, num, num], num, ([n, lo, hi], site) => {\n if ((lo as number) > (hi as number))\n throw site.state.error('INVALID_ARGUMENT', 'clamp: min is greater than max', site.span)\n finite(n as number, site)\n finite(lo as number, site)\n finite(hi as number, site)\n return finite(Math.min(Math.max(n as number, lo as number), hi as number), site)\n }),\n ]),\n define('toFixed', 'Formats a number with a fixed number of decimals.', [\n overload([num, num], str, ([n, d], site) => {\n const digits = nonNegativeInteger(d, 'Digits', site)\n if (digits > MAX_FIXED_DIGITS)\n throw site.state.error('INVALID_ARGUMENT', 'Digits must be at most 100', site.span)\n site.state.charge(digits >>> 2)\n // Round half away from zero first, so toFixed(1.005, 2) agrees with round(1.005, 2).\n finite(n as number, site)\n const value = digits <= MAX_ROUND_DIGITS ? roundTo(n as number, digits, site) : (n as number)\n // JavaScript writes 1e21 and beyond in exponent form; such a number is\n // whole, so write its exact digits instead.\n if (Math.abs(value) >= FIXED_NOTATION_LIMIT)\n return `${BigInt(value).toString()}${digits > 0 ? `.${'0'.repeat(digits)}` : ''}`\n return value.toFixed(digits)\n }),\n ]),\n define(\n 'formatNumber',\n 'Formats a number with grouping, e.g. 1,234.5, with optional decimals and locale (default \"en-US\"; an unsupported locale is an error).',\n [\n overload(\n [num, t.optional(num), t.optional(str)],\n str,\n ([n, d, locale], site) => {\n const digits =\n d === undefined || d === null ? undefined : nonNegativeInteger(d, 'Decimals', site)\n if (digits !== undefined && digits > MAX_INTL_DIGITS) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Decimals must be at most ${MAX_INTL_DIGITS}`,\n site.span,\n )\n }\n const options: Intl.NumberFormatOptions =\n digits === undefined\n ? { maximumFractionDigits: MAX_INTL_DIGITS }\n : { minimumFractionDigits: digits, maximumFractionDigits: digits }\n finite(n as number, site)\n const value =\n digits === undefined || digits > MAX_ROUND_DIGITS\n ? (n as number)\n : roundTo(n as number, digits, site)\n return numberFormat(typeof locale === 'string' ? locale : 'en-US', options, site).format(\n value,\n )\n },\n { required: 1, literals: ([, , locale]) => formatProblem(locale, undefined) },\n ),\n ],\n ),\n define(\n 'formatCurrency',\n 'Formats an amount in a currency (ISO 4217 code such as \"EUR\"; a code without a known symbol prints as the code), with an optional locale (default \"en-US\"; an unsupported locale is an error).',\n [\n overload(\n [num, str, t.optional(str)],\n str,\n ([n, currency, locale], site) =>\n numberFormat(\n typeof locale === 'string' ? locale : 'en-US',\n { style: 'currency', currency: currency as string },\n site,\n ).format(finite(n as number, site)),\n { required: 2, literals: ([, currency, locale]) => formatProblem(locale, currency) },\n ),\n ],\n ),\n define('min', 'The smallest value (nulls are skipped); null for an empty list.', [\n overload([listT], optT, ([l], site) => extreme(list(l), -1, site), { ordered: ['T'] }),\n ...spreadExtremes(-1),\n ]),\n define('max', 'The largest value (nulls are skipped); null for an empty list.', [\n overload([listT], optT, ([l], site) => extreme(list(l), 1, site), { ordered: ['T'] }),\n ...spreadExtremes(1),\n ]),\n define(\n 'sum',\n 'The sum of the numbers in a list (nulls are skipped), added left to right as a + b + c is.',\n [\n overload([t.list(t.optional(num))], num, ([l], site) => {\n const items = list(l)\n // A list whose type is unknown statically reaches this overload; its\n // items decide (a list of durations sums as durations).\n if (isValidDuration(firstPresent(items))) return sumDurations(items, site)\n let total = 0\n for (const n of numbersOf(items, 'sum', site)) total += n\n return finite(total, site)\n }),\n overload([t.list(t.optional(dur))], dur, ([l], site) => sumDurations(list(l), site)),\n ],\n ),\n define(\n 'avg',\n 'The mean of the numbers or durations in a list (nulls are skipped, summed as sum does); null for an empty list.',\n [\n overload([t.list(t.optional(num))], t.optional(num), ([l], site) => {\n const items = list(l)\n // As in sum, a list whose type is unknown statically is decided by its items.\n if (isValidDuration(firstPresent(items))) return averageDuration(items, site)\n const values = numbersOf(items, 'avg', site)\n if (values.length === 0) return null\n let total = 0\n for (const n of values) total += n\n return finite(total / values.length, site)\n }),\n overload([t.list(t.optional(dur))], t.optional(dur), ([l], site) =>\n averageDuration(list(l), site),\n ),\n ],\n ),\n]\n\nfunction hof(\n name: string,\n description: string,\n result: Type,\n run: (items: readonly unknown[], fn: Lambda, site: CallSite, extra: unknown[]) => unknown,\n runAsync: (\n items: readonly unknown[],\n fn: Lambda,\n site: CallSite,\n extra: unknown[],\n ) => Promise<Out>,\n {\n lambda = predicate,\n extraParams = [],\n ordered = [],\n }: {\n readonly lambda?: Type\n readonly extraParams?: readonly Type[]\n readonly ordered?: readonly string[]\n } = {},\n): FunctionDef {\n return define(name, description, [\n overload(\n [listT, lambda, ...extraParams],\n result,\n ([l, f, ...extra], site) => run(list(l), asLambda(f), site, extra),\n {\n required: 2,\n runAsync: ([l, f, ...extra], site) => runAsync(list(l), asLambda(f), site, extra),\n ...(ordered.length === 0 ? {} : { ordered }),\n },\n ),\n ])\n}\n\nconst LIST_FUNCTIONS: FunctionDef[] = [\n hof(\n 'map',\n 'Transforms each item.',\n t.list(U),\n (items, fn, site) => {\n const out = newList(items.length, site)\n for (let i = 0; i < items.length; i++) out[i] = fn(items[i], i)\n return made(out, site)\n },\n async (items, fn, site) => {\n const out = newList(items.length, site)\n for (let i = 0; i < items.length; i++) out[i] = ran(await fn(items[i], i))\n return new Out(made(out, site))\n },\n { lambda: fnType([T, num], U) },\n ),\n hof(\n 'filter',\n 'Keeps the items for which the lambda is true.',\n listT,\n (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++)\n if (truthy(fn(items[i], i), site)) push(out, items[i], site)\n return made(out, site)\n },\n async (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) push(out, items[i], site)\n return new Out(made(out, site))\n },\n ),\n hof(\n 'find',\n 'The first item for which the lambda is true, or null.',\n optT,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(fn(items[i], i), site)) return items[i] ?? null\n return null\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(items[i] ?? null)\n return new Out(null)\n },\n ),\n hof(\n 'findIndex',\n 'The position of the first item for which the lambda is true, or -1.',\n num,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) return i\n return -1\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(i)\n return new Out(-1)\n },\n ),\n hof(\n 'some',\n 'Whether the lambda is true for at least one item.',\n bool,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) return true\n return false\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(true)\n return new Out(false)\n },\n ),\n hof(\n 'every',\n 'Whether the lambda is true for every item.',\n bool,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (!truthy(fn(items[i], i), site)) return false\n return true\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (!truthy(ran(await fn(items[i], i)), site)) return new Out(false)\n return new Out(true)\n },\n ),\n hof(\n 'none',\n 'Whether the lambda is false for every item.',\n bool,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) return false\n return true\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(false)\n return new Out(true)\n },\n ),\n hof(\n 'flatMap',\n 'Transforms each item and flattens list results one level.',\n t.list(U),\n (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++) {\n appendFlat(out, fn(items[i], i), site)\n }\n return made(out, site)\n },\n async (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++) {\n appendFlat(out, ran(await fn(items[i], i)), site)\n }\n return new Out(made(out, site))\n },\n { lambda: fnType([T, num], t.union(t.list(U), U)) },\n ),\n hof(\n 'sortBy',\n 'Sorts by a key; pass \"desc\" to reverse. Nulls sort first (\"asc\") or last (\"desc\").',\n listT,\n (items, fn, site, [direction]) => {\n const keys = newList(items.length, site)\n for (let i = 0; i < items.length; i++) keys[i] = fn(items[i], i)\n return sortKeyed(items, keys, direction, site)\n },\n async (items, fn, site, [direction]) => {\n const keys = newList(items.length, site)\n for (let i = 0; i < items.length; i++) keys[i] = ran(await fn(items[i], i))\n return new Out(sortKeyed(items, keys, direction, site))\n },\n { lambda: fnType([T, num], K), extraParams: [t.enum('asc', 'desc')], ordered: ['K'] },\n ),\n hof(\n 'groupBy',\n 'Groups items into a map of lists by a key. Map keys are text, so a key is its text form: 1 and \"1\", or true and \"true\", share a group. A key must be a string, number, or boolean (null is an error). Keys are listed integer-like first, ascending, then in first-seen order.',\n t.record(listT),\n (items, fn, site) => {\n const out: Record<string, unknown[]> = {}\n for (let i = 0; i < items.length; i++)\n push(bucket(out, groupKey(fn(items[i], i), site)), items[i], site)\n return madeGroups(out, site)\n },\n async (items, fn, site) => {\n const out: Record<string, unknown[]> = {}\n for (let i = 0; i < items.length; i++)\n push(bucket(out, groupKey(ran(await fn(items[i], i)), site)), items[i], site)\n return new Out(madeGroups(out, site))\n },\n { lambda: fnType([T, num], t.union(str, num, bool)) },\n ),\n define('count', 'The number of items, or of items for which the lambda is true.', [\n overload([listT], num, ([l]) => list(l).length),\n overload(\n [listT, predicate],\n num,\n ([l, f], site) => {\n const items = list(l)\n const fn = asLambda(f)\n let n = 0\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) n++\n return n\n },\n {\n runAsync: async ([l, f], site) => {\n const items = list(l)\n const fn = asLambda(f)\n let n = 0\n for (let i = 0; i < items.length; i++) if (truthy(ran(await fn(items[i], i)), site)) n++\n return new Out(n)\n },\n },\n ),\n ]),\n define(\n 'reduce',\n 'Folds a list into one value: reduce(list, (acc, item) => ..., initial). Name both parameters; \".\" is not allowed, since the first one is the accumulator.',\n [\n overload(\n [listT, fnType([U, T], U), U],\n U,\n ([l, f, initial]) => {\n const items = list(l)\n const fn = f as (acc: unknown, item: unknown, index: number) => unknown\n let acc = initial\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) acc = fn(acc, items[i], i)\n return acc\n },\n {\n runAsync: async ([l, f, initial]) => {\n const items = list(l)\n const fn = f as (acc: unknown, item: unknown, index: number) => unknown\n let acc = initial\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) acc = ran(await fn(acc, items[i], i))\n return new Out(acc)\n },\n },\n ),\n ],\n ),\n define('sort', 'Sorts numbers, text, timestamps, or durations; pass \"desc\" to reverse.', [\n overload(\n [listT, t.enum('asc', 'desc')],\n listT,\n ([l, d], site) => sortKeyed(list(l), list(l), d, site),\n {\n required: 1,\n ordered: ['T'],\n },\n ),\n ]),\n define('reverse', 'The items in reverse order.', [\n overload([listT], listT, ([l], site) => {\n const items = list(l)\n site.state.charge(items.length)\n const out = newList(items.length, site)\n for (let i = 0; i < items.length; i++) out[i] = items[items.length - 1 - i] ?? null\n return made(out, site)\n }),\n ]),\n define('unique', 'The items without duplicates (by value), in first-seen order.', [\n overload([listT], listT, ([l], site) => uniqueOf(list(l), site)),\n ]),\n define('flat', 'Flattens nested lists one level.', [\n overload([t.list(any)], t.list(any), ([l], site) => flatten(list(l), site)),\n ]),\n define('first', 'The first item, or null.', [\n overload([listT], optT, ([l]) => list(l)[0] ?? null),\n ]),\n define('last', 'The last item, or null.', [\n overload([listT], optT, ([l]) => {\n const items = list(l)\n return items.length === 0 ? null : (items[items.length - 1] ?? null)\n }),\n ]),\n define('join', 'Joins items into text with a separator (default \",\").', [\n overload(\n [t.list(t.union(primitiveText, ts, dur)), str],\n str,\n ([l, sep], site) => joinText(list(l), sep, site),\n {\n required: 1,\n },\n ),\n ]),\n define('isEmpty', 'Whether a list, text, or map has no items; null is empty.', [\n overload([t.union(t.list(any), str, t.record(any), t.null())], bool, ([v], site) => {\n if (v === null || v === undefined) return true\n if (Array.isArray(v) || typeof v === 'string') return v.length === 0\n // Listing a map's keys is linear in how many it has.\n const map = v as Record<string, unknown>\n const keys = Object.keys(map)\n site.state.charge(keyListCost(keys.length))\n return !keys.some((key) => holdsKey(map, key))\n }),\n ]),\n]\n\nconst MAP_FUNCTIONS: FunctionDef[] = [\n define('keys', 'The keys of a map.', [\n overload([t.record(any)], t.list(str), ([m], site) =>\n entryList(m as Record<string, unknown>, site),\n ),\n ]),\n define('values', 'The values of a map.', [\n overload([t.record(T)], listT, ([m], site) => {\n const map = m as Record<string, unknown>\n return made(\n entryList(map, site).map((key) => map[key] ?? null),\n site,\n )\n }),\n ]),\n define(\n 'entries',\n 'The entries of a map, as a list of { key, value } maps (not [key, value] pairs as in JavaScript), e.g. m.entries().map(.key + \"=\" + .value).',\n [\n overload([t.record(T)], t.list(t.object({ key: str, value: T })), ([m], site) => {\n const map = m as Record<string, unknown>\n const keys = entryList(map, site)\n site.state.charge(keys.length)\n return made(\n keys.map((key) => made({ key, value: map[key] ?? null }, site)),\n site,\n )\n }),\n ],\n ),\n define(\n 'type',\n 'The kind of a value: \"null\", \"boolean\", \"number\", \"string\", \"list\", \"map\", \"timestamp\", \"duration\", or \"opaque\".',\n [overload([any], str, ([v]) => kindOf(v))],\n ),\n]\n\nconst optZone = t.optional(str)\n\n/** The position of a built-in's time zone parameter, if it takes one. */\nexport function zoneParameter(def: FunctionDef): number | undefined {\n for (const candidate of def.overloads) {\n const index = candidate.params.indexOf(optZone)\n if (index >= 0) return index\n }\n return undefined\n}\n\nfunction zoneArg(value: unknown): string | null {\n return value === undefined || value === null ? null : (value as string)\n}\n\nfunction field(name: string, description: string, pick: (clock: WallClock) => number): FunctionDef {\n return define(name, description, [\n overload([ts, optZone], num, ([d, z], site) => pick(wallClock(d as Date, zoneArg(z), site)), {\n required: 1,\n }),\n ])\n}\n\n/** Midnight at the start of the day, with `reset` fields of the wall clock set too. */\nfunction startOf(name: string, what: string, reset: Partial<WallClock>): FunctionDef {\n return define(name, `${what}, in a time zone (default UTC).`, [\n overload(\n [ts, optZone],\n ts,\n ([d, z], site) => {\n const clock = wallClock(d as Date, zoneArg(z), site)\n const midnight = { ...clock, ...reset, hour: 0, minute: 0, second: 0, millisecond: 0 }\n return fromWallClock(midnight, zoneArg(z), site)\n },\n { required: 1 },\n ),\n ])\n}\n\n/** Longest duration text duration() reads; longer text is never a valid duration in range. */\nconst MAX_DURATION_TEXT = 64\n/** Weeks, days, hours, minutes, seconds (to the millisecond); every part bounded, so no backtracking blowup. */\nconst ISO_DURATION =\n /^(?<sign>[+-])?P(?:(?<weeks>\\d{1,15})W)?(?:(?<days>\\d{1,15})D)?(?:T(?:(?<hours>\\d{1,15})H)?(?:(?<minutes>\\d{1,15})M)?(?:(?<seconds>\\d{1,15})(?:[.,](?<fraction>\\d{1,3}))?S)?)?$/u\n\n/**\n * The milliseconds in ISO-8601 duration text, or why it is not one. Years and\n * months have no fixed length, so they are refused rather than guessed.\n */\nfunction isoDurationMs(text: string): number | string {\n const bad = `Invalid duration ${shown(text)}: expected ISO-8601 text such as \"PT1H30M\"`\n if (text.length > MAX_DURATION_TEXT) return bad\n const match = ISO_DURATION.exec(text)\n if (match === null) {\n return /^[+-]?P[^T]*[YM]/u.test(text)\n ? `Invalid duration ${shown(text)}: years and months have no fixed length; use days`\n : bad\n }\n const { sign, weeks, days, hours, minutes, seconds, fraction } = match.groups ?? {}\n // \"P\" and \"PT\" alone name no length.\n if (text.endsWith('P') || text.endsWith('T')) return bad\n const part = (digits: string | undefined): number => (digits === undefined ? 0 : Number(digits))\n const ms =\n part(weeks) * MS_PER_WEEK +\n part(days) * MS_PER_DAY +\n part(hours) * MS_PER_HOUR +\n part(minutes) * MS_PER_MINUTE +\n part(seconds) * MS_PER_SECOND +\n (fraction === undefined ? 0 : Number(fraction.padEnd(3, '0')))\n return sign === '-' ? -ms : ms\n}\n\nfunction durationUnit(name: string, unitMs: number, description: string): FunctionDef {\n return define(name, description, [\n overload([num], dur, ([n], site) => durationOf((n as number) * unitMs, site.state, site.span)),\n ])\n}\n\nfunction durationIn(name: string, unitMs: number, description: string): FunctionDef {\n return define(name, description, [overload([dur], num, ([d]) => (d as Duration).ms / unitMs)])\n}\n\nconst TIME_FUNCTIONS: FunctionDef[] = [\n define('now', 'The current time, fixed for one evaluation.', [\n overload([], ts, (_, site) => site.state.now()),\n ]),\n define(\n 'timestamp',\n 'Parses ISO-8601 text (years 0000-9999, or six digits with a sign such as +012345, as a timestamp renders) or epoch milliseconds (a fraction is dropped toward zero, as Date does) into a timestamp.',\n [\n overload([str], ts, ([s], site) => {\n site.state.charge(PARSE_COST)\n return parseTimestamp(s as string, site)\n }),\n overload([num], ts, ([n], site) => checked(n as number, site)),\n overload([ts], ts, ([d], site) => {\n timeOf(d as Date, site.state, site.span)\n return d\n }),\n ],\n ),\n define(\n 'duration',\n 'Parses ISO-8601 duration text in weeks, days, hours, minutes, and seconds (e.g. \"PT1H30M\", \"-P2DT0.5S\"), the text a duration renders as.',\n [\n overload(\n [str],\n dur,\n ([s], site) => {\n site.state.charge(PARSE_COST)\n const ms = isoDurationMs(s as string)\n if (typeof ms === 'string') throw site.state.error('INVALID_ARGUMENT', ms, site.span)\n return durationOf(ms, site.state, site.span)\n },\n {\n literals: ([text]) => {\n if (typeof text !== 'string') return undefined\n const ms = isoDurationMs(text)\n return typeof ms === 'string' ? ms : undefined\n },\n },\n ),\n overload([dur], dur, ([d]) => d),\n ],\n ),\n durationUnit('weeks', MS_PER_WEEK, 'A duration of n weeks.'),\n durationUnit('days', MS_PER_DAY, 'A duration of n days (24 hours each).'),\n durationUnit('hours', MS_PER_HOUR, 'A duration of n hours.'),\n durationUnit('minutes', MS_PER_MINUTE, 'A duration of n minutes.'),\n durationUnit('seconds', MS_PER_SECOND, 'A duration of n seconds.'),\n durationUnit(\n 'milliseconds',\n 1,\n 'A duration of n milliseconds. Durations are whole milliseconds: a fraction rounds to the nearest one, halves away from zero.',\n ),\n durationIn('inDays', MS_PER_DAY, 'A duration as a (fractional) number of days.'),\n durationIn('inHours', MS_PER_HOUR, 'A duration as a number of hours.'),\n durationIn('inMinutes', MS_PER_MINUTE, 'A duration as a number of minutes.'),\n durationIn('inSeconds', MS_PER_SECOND, 'A duration as a number of seconds.'),\n durationIn('inMilliseconds', 1, 'A duration as a number of milliseconds.'),\n field('year', 'The calendar year, in a time zone (default UTC).', (c) => c.year),\n field('month', 'The month 1-12, in a time zone (default UTC).', (c) => c.month),\n field('day', 'The day of the month, in a time zone (default UTC).', (c) => c.day),\n field('hour', 'The hour 0-23, in a time zone (default UTC).', (c) => c.hour),\n field('minute', 'The minute, in a time zone (default UTC).', (c) => c.minute),\n field('second', 'The second, in a time zone (default UTC).', (c) => c.second),\n field(\n 'dayOfWeek',\n 'The ISO weekday (Monday 1 to Sunday 7), in a time zone (default UTC).',\n isoWeekday,\n ),\n startOf('startOfDay', 'Midnight at the start of the day', {}),\n startOf('startOfMonth', 'Midnight on the first of the month', { day: 1 }),\n startOf('startOfYear', 'Midnight on January 1', { month: 1, day: 1 }),\n define('addDays', 'Adds calendar days (keeps the wall-clock time across DST), in a time zone.', [\n overload(\n [ts, num, optZone],\n ts,\n ([d, n, z], site) => addDays(d as Date, n as number, zoneArg(z), site),\n { required: 2 },\n ),\n ]),\n define('addMonths', 'Adds calendar months, clamping the day to the month length.', [\n overload(\n [ts, num, optZone],\n ts,\n ([d, n, z], site) => addMonths(d as Date, n as number, zoneArg(z), site),\n { required: 2 },\n ),\n ]),\n define('addYears', 'Adds calendar years (Feb 29 becomes Feb 28).', [\n overload(\n [ts, num, optZone],\n ts,\n ([d, n, z], site) =>\n addMonths(d as Date, integer(n, 'Years', site) * MONTHS_PER_YEAR, zoneArg(z), site),\n { required: 2 },\n ),\n ]),\n define(\n 'formatDate',\n \"Formats a timestamp in a time zone (default UTC). Tokens: yyyy yy MMMM MMM MM M dd d EEEE EEE HH H hh h a mm m ss s SSS; quote literal text ('at'), and write '' for a quote ('it''s').\",\n [\n overload(\n [ts, str, optZone],\n str,\n ([d, p, z], site) => {\n const text = formatTimestamp(d as Date, p as string, zoneArg(z), site)\n site.state.stringLimit(text.length, site.span)\n return text\n },\n {\n required: 2,\n literals: ([, pattern]) =>\n typeof pattern === 'string' ? checkDatePattern(pattern) : undefined,\n },\n ),\n ],\n ),\n]\n\n/** Result types that depend on argument types beyond simple type variables. */\nexport const RESULT_REFINERS: Readonly<\n Record<string, (args: readonly Type[]) => Type | undefined>\n> = {\n values: (args) => t.list(valueTypeOf(args[0])),\n entries: (args) => t.list(t.object({ key: str, value: valueTypeOf(args[0]) })),\n flat: (args) => {\n const list0 = args[0]\n if (list0?.kind !== 'list') return undefined\n const element = list0.element\n const members = element.kind === 'union' ? element.types : [element]\n return t.list(\n unionOf(members.map((member) => (member.kind === 'list' ? member.element : member))),\n )\n },\n}\n\nexport const BUILTINS: ReadonlyMap<string, FunctionDef> = new Map(\n [\n ...STRING_FUNCTIONS,\n ...NUMBER_FUNCTIONS,\n ...LIST_FUNCTIONS,\n ...MAP_FUNCTIONS,\n ...TIME_FUNCTIONS,\n ].map((def) => [def.name, def]),\n)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builtins.mjs","names":["addDaysIn","addMonthsIn"],"sources":["../../src/functions/builtins.ts"],"sourcesContent":["import { BLOCKED_NAMES } from '../syntax/lexer.js'\nimport {\n RegexSyntaxError,\n compileRegex,\n searchRegex,\n type Program as RegexProgram,\n} from '../runtime/regex.js'\nimport {\n checkDatePattern,\n addDays as addDaysIn,\n addMonths as addMonthsIn,\n formatTimestamp,\n fromWallClock,\n isoWeekday,\n parseTimestamp,\n checked,\n wallClock,\n warmZone,\n type WallClock,\n} from '../runtime/time.js'\nimport {\n Duration,\n durationOf,\n chargeIndexKey,\n chargeKey,\n keyListCost,\n mapBuildCost,\n chargeSearch,\n isMap,\n isValidDuration,\n shown,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n MS_PER_WEEK,\n contains,\n dateTime,\n describeKind,\n equals,\n errorText,\n holdsKey,\n isTimestamp,\n kindOf,\n order,\n SCAN_SHIFT,\n sortOrder,\n timeOf,\n toText,\n track,\n} from '../runtime/values.js'\nimport { isExact, t, unionOf, widen, type Type } from '../types.js'\nimport {\n K,\n Out,\n T,\n U,\n define,\n fnType,\n overload,\n type CallSite,\n type FunctionDef,\n type Lambda,\n type Overload,\n type ZoneParameter,\n} from './define.js'\n\n/** What toNumber accepts: an optional sign, digits with an optional fraction, and an optional exponent. */\nconst DECIMAL_TEXT = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?$/u\nconst MAX_ROUND_DIGITS = 15\nconst MAX_FIXED_DIGITS = 100\n/** 2^53: from here on every double is a whole number. */\nconst MAX_EXACT_INTEGER = Number.MAX_SAFE_INTEGER + 1\n/** Where Number#toFixed switches to exponential notation. */\nconst FIXED_NOTATION_LIMIT = 1e21\nconst MONTHS_PER_YEAR = 12\n\nconst any = /* @__PURE__ */ t.any()\nconst num = /* @__PURE__ */ t.number()\nconst str = /* @__PURE__ */ t.string()\nconst bool = /* @__PURE__ */ t.boolean()\nconst ts = /* @__PURE__ */ t.timestamp()\nconst dur = /* @__PURE__ */ t.duration()\nconst listT = /* @__PURE__ */ t.list(T)\nconst optT = /* @__PURE__ */ t.optional(T)\nconst optStr = /* @__PURE__ */ t.optional(str)\nconst predicate = /* @__PURE__ */ fnType([T, num], bool)\nconst primitiveText = /* @__PURE__ */ t.union(str, num, bool, t.null())\n\n// === argument helpers ===\n\nfunction integer(value: unknown, what: string, site: CallSite): number {\n if (typeof value !== 'number' || !Number.isInteger(value)) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `${what} must be an integer, not ${typeof value === 'number' ? String(value) : describeKind(value)}`,\n site.span,\n )\n }\n return value\n}\n\nfunction nonNegativeInteger(value: unknown, what: string, site: CallSite): number {\n const n = integer(value, what, site)\n if (n < 0) throw site.state.error('INVALID_ARGUMENT', `${what} must not be negative`, site.span)\n return n\n}\n\nfunction finite(value: number, site: CallSite): number {\n if (!Number.isFinite(value))\n throw site.state.error('NON_FINITE', 'Result is not a finite number', site.span)\n return value\n}\n\n/** Accounts for a list or map a built-in built (see `track`), and returns it. */\nfunction made<V extends unknown[] | Record<string, unknown>>(out: V, site: CallSite): V {\n track(out, site.state, site.span)\n return out\n}\n\nfunction newList(length: number, site: CallSite): unknown[] {\n site.state.listLimit(length, site.span)\n return new Array<unknown>(length)\n}\n\n/** Appends to a growing list, enforcing the list limit as it grows. */\nfunction push(out: unknown[], value: unknown, site: CallSite): void {\n if (out.length >= site.state.limits.maxListLength) site.state.listLimit(out.length + 1, site.span)\n out.push(value ?? null)\n}\n\nfunction numbersOf(items: readonly unknown[], what: string, site: CallSite): number[] {\n site.state.charge(items.length)\n const out: number[] = []\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const value = items[i]\n if (value === null || value === undefined) continue\n if (typeof value !== 'number') {\n throw site.state.error(\n 'TYPE_ERROR',\n `${what} expects numbers but found ${describeKind(value)}`,\n site.span,\n )\n }\n if (!Number.isFinite(value)) {\n throw site.state.error('NON_FINITE', `${what} found a non-finite number`, site.span)\n }\n out.push(value)\n }\n return out\n}\n\n/** The first item that is not null, or null. */\nfunction firstPresent(items: readonly unknown[]): unknown {\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item !== null && item !== undefined) return item\n }\n return null\n}\n\n/**\n * The total milliseconds and count of a list of durations (nulls are\n * skipped); anything else is a TYPE_ERROR naming `name`.\n */\nfunction durationTotal(\n items: readonly unknown[],\n name: string,\n site: CallSite,\n): { total: number; count: number } {\n site.state.charge(items.length)\n let total = 0\n let count = 0\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const d = items[i]\n if (d === null || d === undefined) continue\n if (!isValidDuration(d)) {\n throw site.state.error(\n 'TYPE_ERROR',\n `${name} expects durations but found ${describeKind(d)}`,\n site.span,\n )\n }\n total += d.ms\n // Checked at each step, as a + b + c is: past 2^53 the total stops being exact.\n if (!Number.isSafeInteger(total)) durationOf(total, site.state, site.span)\n count++\n }\n return { total, count }\n}\n\n/** The total of a list of durations (nulls are skipped). */\nfunction sumDurations(items: readonly unknown[], site: CallSite): Duration {\n return durationOf(durationTotal(items, 'sum', site).total, site.state, site.span)\n}\n\n/** The mean of a list of durations (nulls are skipped), or null for none. */\nfunction averageDuration(items: readonly unknown[], site: CallSite): Duration | null {\n const { total, count } = durationTotal(items, 'avg', site)\n // The total is checked as sum checks it, so avg fails where sum would.\n const sum = durationOf(total, site.state, site.span)\n return count === 0 ? null : durationOf(sum.ms / count, site.state, site.span)\n}\n\n/** Copies a list by index: never runs a host list's iterator, species, or methods. */\nfunction copyOf(items: readonly unknown[], from = 0, to = items.length): unknown[] {\n const out = new Array<unknown>(Math.max(0, to - from))\n // Host `undefined` (or a hole) is null in every list a built-in produces.\n for (let i = from; i < to; i++) out[i - from] = items[i] ?? null\n return out\n}\n\n/** Array.prototype.slice position semantics, without calling the list's own slice. */\nfunction slicePositions(length: number, start: number, end: number | undefined): [number, number] {\n const clamp = (n: number): number => (n < 0 ? Math.max(0, length + n) : Math.min(n, length))\n const from = clamp(start)\n const to = end === undefined ? length : clamp(end)\n return [from, Math.max(from, to)]\n}\n\nfunction textOf(value: unknown, site: CallSite): string {\n return toText(value, site.state, site.span)\n}\n\nfunction asLambda(value: unknown): Lambda {\n return value as Lambda\n}\n\n/** The value an async lambda's run resolved to (see {@link Out}). */\nfunction ran(out: unknown): unknown {\n return (out as Out).v\n}\n\nfunction truthy(value: unknown, site: CallSite): boolean {\n if (value === true) return true\n if (value === false || value === null || value === undefined) return false\n throw site.state.error(\n 'TYPE_ERROR',\n `The lambda must return a boolean, not ${describeKind(value)}`,\n site.span,\n )\n}\n\nfunction list(value: unknown): readonly unknown[] {\n return value as readonly unknown[]\n}\n\n// === patterns and number formats ===\n\nconst MAX_CACHED = 256\nconst MAX_INTL_DIGITS = 20\n/**\n * Total compiled size (instructions plus class ranges, about 50 bytes each)\n * of the patterns kept for reuse, shared by every environment.\n */\nconst REGEX_CACHE_BUDGET = 100_000\n/** Steps charged for creating a number formatter (about 18 microseconds for a new locale, measured). */\nconst NUMBER_FORMAT_COST = 1024\n/** Steps charged for formatting one number with Intl (about half a microsecond). */\nconst FORMAT_COST = 16\n/** Steps charged for parsing a timestamp (a pattern match and calendar arithmetic). */\nconst PARSE_COST = 16\n\n/**\n * Compiled patterns shared by every environment, bounded by total size and\n * least recently used first out. Each evaluation still pays to compile a\n * pattern the first time it uses it (see State.resource), so the cache only\n * saves time: it never changes step counts, and evicting never costs a\n * running evaluation uncharged work.\n */\nconst regexCache = /* @__PURE__ */ new Map<string, RegexProgram>()\nlet regexCacheSize = 0\n/**\n * Why a pattern does not compile, remembered so a repeated bad pattern is\n * parsed once. Bounded by count and by total characters (pattern and message),\n * as the compiled cache is by size.\n */\nconst badPatterns = /* @__PURE__ */ new Map<string, string>()\nlet badPatternChars = 0\n/** Characters of bad patterns and their messages kept at most. */\nconst BAD_PATTERN_BUDGET = 100_000\n\n/** The compiled pattern, from the cache when it is there; throws RegexSyntaxError. */\nfunction cachedRegex(pattern: string): RegexProgram {\n const cached = regexCache.get(pattern)\n if (cached !== undefined) {\n regexCache.delete(pattern)\n regexCache.set(pattern, cached)\n return cached\n }\n const bad = badPatterns.get(pattern)\n if (bad !== undefined) throw new RegexSyntaxError(bad)\n let program: RegexProgram\n try {\n program = compileRegex(pattern)\n } catch (error) {\n if (error instanceof RegexSyntaxError) {\n // Starts over when full, so at most one pattern past the budget is kept.\n const chars = pattern.length + error.message.length\n if (badPatterns.size >= MAX_CACHED || (badPatternChars += chars) > BAD_PATTERN_BUDGET) {\n badPatterns.clear()\n badPatternChars = chars\n }\n badPatterns.set(pattern, error.message)\n }\n throw error\n }\n if (program.size > REGEX_CACHE_BUDGET) return program\n for (const [key, old] of regexCache) {\n if (regexCache.size < MAX_CACHED && regexCacheSize + program.size <= REGEX_CACHE_BUDGET) break\n regexCache.delete(key)\n regexCacheSize -= old.size\n }\n regexCache.set(pattern, program)\n regexCacheSize += program.size\n return program\n}\n\nfunction compiledPattern(pattern: string, site: CallSite): RegexProgram {\n try {\n return cachedRegex(pattern)\n } catch (error) {\n if (error instanceof RegexSyntaxError)\n throw site.state.error('INVALID_ARGUMENT', error.message, site.span)\n throw error\n }\n}\n\nfunction regexFor(pattern: string, site: CallSite): RegexProgram {\n const s = site.state\n if (pattern.length > s.limits.maxPatternLength) {\n throw s.limit(\n 'PATTERN_LIMIT',\n `Pattern of length ${pattern.length} exceeds the limit of ${s.limits.maxPatternLength}`,\n site.span,\n )\n }\n // Compiling reads the pattern (charged first, so a failing pattern pays too)\n // and builds the program.\n return s.resource(\n `r${pattern}`,\n 1 + pattern.length,\n () => compiledPattern(pattern, site),\n (program) => program.size,\n )\n}\n\n/** Number formatters shared by every environment (charged per evaluation, as patterns are). */\nconst numberFormats = /* @__PURE__ */ new Map<string, Intl.NumberFormat>()\n\n/**\n * Longest locale tag accepted. Real tags, even with Unicode extensions\n * (en-US-u-ca-gregory-nu-latn-hc-h23-cu-usd is 41 characters), are far\n * shorter; Intl's work on a tag grows faster than its length, so a longer one\n * is rejected before Intl sees it.\n */\nconst MAX_LOCALE_LENGTH = 64\n/** An ISO 4217 currency code. */\nconst CURRENCY_CODE = /^[A-Za-z]{3}$/u\n\n/**\n * Why a currency code is not one formatCurrency can use. Any three letters\n * are accepted: Intl prints a code it has no symbol for as the code itself,\n * and the list of codes it knows differs between runtimes.\n */\nfunction currencyProblem(code: string): string | undefined {\n return CURRENCY_CODE.test(code)\n ? undefined\n : `Currency codes are three letters (ISO 4217), not ${shown(code)}`\n}\n\n/** What checking found for each literal locale and currency (bounded like the format cache). */\nconst formatProblems = /* @__PURE__ */ new Map<string, string | null>()\n\n/**\n * Why a literal locale or currency would fail formatNumber or formatCurrency\n * at run time, so the checker reports it (INVALID_ARGUMENT) before anything\n * runs. Non-literal arguments are left to run time.\n */\nfunction formatProblem(locale: unknown, currency: unknown): string | undefined {\n const tag = typeof locale === 'string' ? locale : undefined\n const code = typeof currency === 'string' ? currency : undefined\n if (tag === undefined && code === undefined) return undefined\n const key = `${tag ?? ''}\\u0000${code ?? ''}`\n const known = formatProblems.get(key)\n if (known !== undefined) return known ?? undefined\n let problem: string | undefined\n if (tag !== undefined && tag.length > MAX_LOCALE_LENGTH) {\n problem = `Locale tags are at most ${MAX_LOCALE_LENGTH} characters long`\n } else if (code !== undefined && !CURRENCY_CODE.test(code)) {\n problem = currencyProblem(code)\n } else {\n try {\n const options: Intl.NumberFormatOptions =\n code === undefined ? {} : { style: 'currency', currency: code }\n // A currency alone is checked against the default locale, as it runs.\n new Intl.NumberFormat(tag ?? 'en-US', options).format(0)\n if (tag !== undefined && Intl.NumberFormat.supportedLocalesOf(tag).length === 0)\n problem = `Unsupported locale ${shown(tag)}`\n } catch (error) {\n problem = `Invalid number format: ${errorText(error)}`\n }\n }\n if (formatProblems.size >= MAX_CACHED)\n formatProblems.delete(formatProblems.keys().next().value as string)\n formatProblems.set(key, problem ?? null)\n return problem\n}\n\n/** `signDisplay: 'negative'` (ES2023, Node 20+); the ES2022 lib types do not list it yet. */\nconst NEGATIVE_ONLY = 'negative' as Intl.NumberFormatOptions['signDisplay']\n\nfunction numberFormat(\n locale: string,\n options: Intl.NumberFormatOptions,\n site: CallSite,\n): Intl.NumberFormat {\n if (locale.length > MAX_LOCALE_LENGTH) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Locale tags are at most ${MAX_LOCALE_LENGTH} characters long`,\n site.span,\n )\n }\n const problem = options.currency === undefined ? undefined : currencyProblem(options.currency)\n if (problem !== undefined) throw site.state.error('INVALID_ARGUMENT', problem, site.span)\n const key = `${locale}\\u0000${JSON.stringify(options)}`\n const format = site.state.resource(`n${key}`, NUMBER_FORMAT_COST, () => {\n let created = numberFormats.get(key)\n if (created !== undefined) return created\n let supported: string[]\n try {\n supported = Intl.NumberFormat.supportedLocalesOf(locale)\n // A sign only for a negative amount that does not show as zero: nothing\n // else in the language shows -0, so neither does \"-$0.00\".\n created = new Intl.NumberFormat(locale, { ...options, signDisplay: NEGATIVE_ONLY })\n } catch (error) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Invalid number format: ${errorText(error)}`,\n site.span,\n )\n }\n // Intl falls back to the host's default locale for a tag it has no data\n // for, so the same expression would format differently on each server.\n if (supported.length === 0) {\n throw site.state.error('INVALID_ARGUMENT', `Unsupported locale ${shown(locale)}`, site.span)\n }\n if (numberFormats.size >= MAX_CACHED)\n numberFormats.delete(numberFormats.keys().next().value as string)\n numberFormats.set(key, created)\n return created\n })\n site.state.charge(FORMAT_COST)\n return format\n}\n\n// === strings ===\n\nfunction replaceText(\n text: string,\n find: string,\n replacement: string,\n all: boolean,\n site: CallSite,\n): string {\n if (find === '') {\n if (!all) {\n site.state.stringLimit(text.length + replacement.length, site.span)\n return replacement + text\n }\n site.state.stringLimit(text.length + replacement.length * (text.length + 1), site.span)\n site.state.charge(text.length)\n return text === '' ? replacement : replacement + text.split('').join(replacement) + replacement\n }\n chargeSearch(site.state, text.length, find.length)\n let out = ''\n let from = 0\n for (;;) {\n const at = text.indexOf(find, from)\n if (at === -1) break\n site.state.charge(1)\n out += text.slice(from, at) + replacement\n site.state.stringLimit(out.length + text.length - at - find.length, site.span)\n from = at + find.length\n if (!all) break\n }\n site.state.charge(1 + (text.length >>> SCAN_SHIFT))\n return out + text.slice(from)\n}\n\nfunction pad(\n text: string,\n length: unknown,\n fill: unknown,\n atStart: boolean,\n site: CallSite,\n): string {\n const target = nonNegativeInteger(length, 'Target length', site)\n // Overload dispatch guarantees `fill` is a string, or null/undefined when omitted.\n const filler = typeof fill === 'string' ? fill : ' '\n if (target <= text.length || filler === '') return text\n site.state.stringLimit(target, site.span)\n site.state.charge(1 + (target >>> SCAN_SHIFT))\n return atStart ? text.padStart(target, filler) : text.padEnd(target, filler)\n}\n\nfunction roundTo(value: number, digits: number, site: CallSite): number {\n if (!Number.isInteger(digits) || digits < -MAX_ROUND_DIGITS || digits > MAX_ROUND_DIGITS) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n 'Digits must be an integer between -15 and 15',\n site.span,\n )\n }\n if (value === 0 || !Number.isFinite(value)) return finite(value, site)\n // At 2^53 and beyond every double is a whole number, so there is nothing to\n // round to at zero or more digits (and shifting could overflow).\n if (digits >= 0 && Math.abs(value) >= MAX_EXACT_INTEGER) return value\n // Shift the decimal exponent textually so 1.005 rounds to 1.01, then round\n // half away from zero and shift back.\n const shift = (n: number, by: number): number => {\n const [mantissa, exponent] = n.toExponential().split('e') as [string, string]\n return Number(`${mantissa}e${Number(exponent) + by}`)\n }\n const shifted = Math.round(Math.abs(shift(value, digits)))\n const result = shifted === 0 ? 0 : Math.sign(value) * shift(shifted, -digits)\n return finite(result === 0 ? 0 : result, site)\n}\n\n// === lists ===\n\nfunction sortKeyed(\n items: readonly unknown[],\n keys: readonly unknown[],\n direction: unknown,\n site: CallSite,\n): unknown[] {\n const descending = direction === 'desc'\n if (\n direction !== undefined &&\n direction !== null &&\n direction !== 'asc' &&\n direction !== 'desc'\n ) {\n throw site.state.error('INVALID_ARGUMENT', 'Sort direction must be \"asc\" or \"desc\"', site.span)\n }\n const n = items.length\n const s = site.state\n // The sorted list is as long as the input: checked before anything is allocated.\n s.listLimit(n, site.span)\n s.charge(n === 0 ? 1 : Math.ceil(n * Math.log2(n + 1)))\n // Every key is checked, not only those a comparison happens to reach (a\n // list with one key makes no comparison at all).\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < keys.length; i++) checkOrderable(keys[i], site)\n // Each comparison charges for string length (sortOrder), so a long sort is\n // accounted, and interrupted by the step limit or timeout, as it runs. The\n // merge sort makes the same comparisons on every engine, so steps agree too.\n const indices = mergeSort(n, (a, b) => {\n const result = sortOrder(keys[a], keys[b], s, site.span)\n return descending ? -result : result\n })\n const out = new Array<unknown>(n)\n for (let i = 0; i < n; i++) out[i] = items[indices[i]] ?? null\n return made(out, site)\n}\n\n/** A stable bottom-up merge sort of the indices 0..n-1. */\nfunction mergeSort(n: number, compare: (a: number, b: number) => number): number[] {\n let from = Array.from({ length: n }, (_, i) => i)\n let to = new Array<number>(n)\n for (let width = 1; width < n; width *= 2) {\n for (let low = 0; low < n; low += 2 * width) {\n const middle = Math.min(low + width, n)\n const high = Math.min(low + 2 * width, n)\n let i = low\n let j = middle\n let k = low\n // Take from the right run only when it is strictly smaller: stable.\n while (i < middle && j < high) to[k++] = compare(from[j], from[i]) < 0 ? from[j++] : from[i++]\n while (i < middle) to[k++] = from[i++]\n while (j < high) to[k++] = from[j++]\n }\n ;[from, to] = [to, from]\n }\n return from\n}\n\nfunction groupKey(key: unknown, site: CallSite): string {\n let name: string\n if (typeof key === 'string') {\n chargeKey(site.state, key)\n name = key\n } else if (typeof key === 'number' || typeof key === 'boolean') name = String(key)\n else\n throw site.state.error(\n 'TYPE_ERROR',\n `A group key must be a string, number, or boolean, not ${describeKind(key)}`,\n site.span,\n )\n if (BLOCKED_NAMES.has(name))\n throw site.state.error('BLOCKED_PROPERTY', `\"${name}\" cannot be used as a key`, site.span)\n chargeIndexKey(site.state, name)\n return name\n}\n\n/** The list for `key`, created on first use. Own keys only: \"toString\" is a valid group. */\nfunction bucket(groups: Record<string, unknown[]>, key: string): unknown[] {\n if (Object.hasOwn(groups, key)) return groups[key]\n const created: unknown[] = []\n groups[key] = created\n return created\n}\n\nfunction madeGroups(groups: Record<string, unknown[]>, site: CallSite): Record<string, unknown[]> {\n const keys = Object.keys(groups)\n // Building a map costs per key, and much more once it is large (see mapBuildCost).\n site.state.charge(keyListCost(keys.length) + mapBuildCost(keys.length))\n for (const key of keys) made(groups[key], site)\n return made(groups, site)\n}\n\n/** Identities of the values one canonical-key pass has seen that compare by identity. */\ninterface Identities {\n readonly ids: Map<unknown, number>\n next: number\n}\n\n/**\n * A string that is equal for two values exactly when `equals` says they are:\n * maps by sorted keys, timestamps by time, opaque values (symbols, host\n * objects) by identity, and NaN never. Charged by the size of the value.\n */\nfunction canonicalKey(value: unknown, site: CallSite, depth: number, seen: Identities): string {\n const s = site.state\n if (value === null || value === undefined) return 'n'\n switch (typeof value) {\n case 'boolean':\n return value ? 'T' : 'F'\n case 'number':\n // NaN equals nothing, not even NaN: a key no other value shares.\n if (Number.isNaN(value)) return `N${seen.next++}`\n return `d${value === 0 ? 0 : value}`\n case 'string':\n s.charge(value.length >>> SCAN_SHIFT)\n return `s${value.length}:${value}`\n case 'bigint':\n // Bigints compare by value (1n == 1n).\n return `b${value}`\n case 'function':\n case 'object':\n case 'symbol':\n case 'undefined':\n default:\n break\n }\n // Counted as building counts (see track): the outermost container is level 1.\n if (depth + 1 > s.limits.maxValueDepth) {\n throw s.limit(\n 'VALUE_DEPTH_LIMIT',\n `Values nest deeper than ${s.limits.maxValueDepth} (is the data cyclic?)`,\n site.span,\n )\n }\n s.charge(1)\n if (Array.isArray(value)) {\n s.charge(value.length)\n let key = '['\n for (let i = 0; i < value.length; i++)\n key += (i === 0 ? '' : ',') + canonicalKey(value[i], site, depth + 1, seen)\n return charged(`${key}]`, site)\n }\n if (isTimestamp(value)) return `t${dateTime(value)}`\n if (isValidDuration(value)) return `u${value.ms}`\n if (isMap(value)) {\n const keys = Object.keys(value)\n // Sorting compares keys: about log2(k) comparisons each, linear in the key length.\n let text = 0\n for (const name of keys) text += name.length\n s.charge(keys.length + Math.ceil(Math.log2(keys.length + 1)) * (text >>> SCAN_SHIFT))\n if (keys.length > 1) keys.sort()\n let key = '{'\n let first = true\n for (const name of keys) {\n if (!holdsKey(value, name)) continue\n key += `${first ? '' : ','}${name.length}:${name}=${canonicalKey(value[name], site, depth + 1, seen)}`\n first = false\n }\n return charged(`${key}}`, site)\n }\n let id = seen.ids.get(value)\n if (id === undefined) {\n id = seen.next++\n seen.ids.set(value, id)\n }\n return `o${id}`\n}\n\n/** A key built at each nesting level copies its children's keys: charge the copy. */\nfunction charged(key: string, site: CallSite): string {\n site.state.charge(key.length >>> SCAN_SHIFT)\n return key\n}\n\n/**\n * Steps per item for unique(): building each item's canonical key and hashing\n * it into a set costs about as much as eight ordinary steps even for a number.\n */\nconst UNIQUE_ITEM_COST = 8\n\nfunction uniqueOf(items: readonly unknown[], site: CallSite): unknown[] {\n site.state.charge(items.length * UNIQUE_ITEM_COST)\n const seen = new Set<string>()\n const identities: Identities = { ids: new Map(), next: 0 }\n const out: unknown[] = []\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const value = items[i] ?? null\n // An item is one level inside the list, as building counts it.\n const key = canonicalKey(value, site, 1, identities)\n if (seen.has(key)) continue\n seen.add(key)\n push(out, value, site)\n }\n return made(out, site)\n}\n\nfunction flatten(items: readonly unknown[], site: CallSite): unknown[] {\n site.state.charge(items.length)\n const out: unknown[] = []\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) appendFlat(out, items[i], site)\n return made(out, site)\n}\n\n/** Appends a list's items (or a single value) to `out`, by index. */\nfunction appendFlat(out: unknown[], value: unknown, site: CallSite): void {\n if (Array.isArray(value)) {\n site.state.listLimit(out.length + value.length, site.span)\n site.state.charge(value.length)\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < value.length; i++) out.push(value[i] ?? null)\n } else push(out, value, site)\n}\n\nfunction joinText(items: readonly unknown[], separator: unknown, site: CallSite): string {\n const sep = separator === undefined || separator === null ? ',' : (separator as string)\n site.state.charge(items.length)\n let out = ''\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (\n item !== null &&\n item !== undefined &&\n typeof item === 'object' &&\n !(item instanceof Date) &&\n !isValidDuration(item)\n ) {\n throw site.state.error(\n 'TYPE_ERROR',\n `join needs text-like items but found ${describeKind(item)}`,\n site.span,\n )\n }\n const piece = (i === 0 ? '' : sep) + textOf(item, site)\n site.state.stringLimit(out.length + piece.length, site.span)\n out += piece\n }\n return out\n}\n\n/**\n * A value sort, min, and max can order: a finite number, a string, a valid\n * timestamp, a duration, or null. Checked for every item, so a single item is\n * held to the same rule as many.\n */\nfunction checkOrderable(value: unknown, site: CallSite): void {\n if (value === null || value === undefined || typeof value === 'string') return\n if (typeof value === 'number') {\n if (!Number.isFinite(value))\n throw site.state.error('NON_FINITE', 'Cannot order a non-finite number', site.span)\n return\n }\n if (isValidDuration(value)) return\n if (value instanceof Date) {\n timeOf(value, site.state, site.span)\n return\n }\n throw site.state.error('TYPE_ERROR', `Cannot order ${describeKind(value)}`, site.span)\n}\n\nfunction extreme(items: readonly unknown[], sign: 1 | -1, site: CallSite): unknown {\n site.state.charge(items.length)\n let best: unknown = null\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item === null || item === undefined) continue\n checkOrderable(item, site)\n if (best === null) {\n best = item\n continue\n }\n const result = order(item, best, site.state, site.span) as number\n if (result * sign > 0) best = item\n }\n return best\n}\n\n/**\n * The overloads of min and max: of a list, then of their arguments, one\n * overload per kind a list can order, so `max(a, b)` takes what `[a, b].max()`\n * does (and, unlike the list, no nulls). Built in one call, not spread into a\n * literal, so an unused min or max stays a pure call that bundlers drop.\n */\nfunction extremes(sign: 1 | -1): Overload[] {\n return [\n overload([listT], optT, ([l], site) => extreme(list(l), sign, site), { ordered: ['T'] }),\n ...[num, str, ts, dur].map((kind) =>\n overload([kind], kind, (args, site) => extreme(args, sign, site), { rest: kind }),\n ),\n ]\n}\n\nfunction entryList(map: Record<string, unknown>, site: CallSite): string[] {\n const listed = Object.keys(map)\n site.state.charge(keyListCost(listed.length))\n const keys = listed.filter((key) => holdsKey(map, key))\n site.state.listLimit(keys.length, site.span)\n return keys\n}\n\n/** Result type of reading values out of a map type. */\nfunction valueTypeOf(type: Type | undefined): Type {\n if (type === undefined || type.kind !== 'map') return any\n // A declared object may hold keys it does not list, of any type.\n if (type.rest === undefined && !isExact(type)) return any\n const members = Object.values(type.fields)\n if (type.rest !== undefined) members.push(type.rest)\n return members.length === 0 ? any : unionOf(members.map(widen))\n}\n\n// === definitions ===\n\nexport const toUpperCase: FunctionDef = /* @__PURE__ */ define('toUpperCase', [\n /* @__PURE__ */ overload([str], str, ([s]) => (s as string).toUpperCase()),\n])\n\nexport const toLowerCase: FunctionDef = /* @__PURE__ */ define('toLowerCase', [\n /* @__PURE__ */ overload([str], str, ([s]) => (s as string).toLowerCase()),\n])\n\nexport const trim: FunctionDef = /* @__PURE__ */ define('trim', [\n /* @__PURE__ */ overload([str], str, ([s]) => (s as string).trim()),\n])\n\nexport const trimStart: FunctionDef = /* @__PURE__ */ define('trimStart', [\n /* @__PURE__ */ overload([str], str, ([s]) => (s as string).trimStart()),\n])\n\nexport const trimEnd: FunctionDef = /* @__PURE__ */ define('trimEnd', [\n /* @__PURE__ */ overload([str], str, ([s]) => (s as string).trimEnd()),\n])\n\nexport const startsWith: FunctionDef = /* @__PURE__ */ define('startsWith', [\n /* @__PURE__ */ overload([str, str], bool, ([s, p]) => (s as string).startsWith(p as string)),\n])\n\nexport const endsWith: FunctionDef = /* @__PURE__ */ define('endsWith', [\n /* @__PURE__ */ overload([str, str], bool, ([s, p]) => (s as string).endsWith(p as string)),\n])\n\nexport const includes: FunctionDef = /* @__PURE__ */ define('includes', [\n /* @__PURE__ */ overload([str, str], bool, ([s, p], site) => {\n chargeSearch(site.state, (s as string).length, (p as string).length)\n return (s as string).includes(p as string)\n }),\n /* @__PURE__ */ overload([listT, any], bool, ([l, v], site) =>\n contains(l, v, site.state, site.span),\n ),\n])\n\nexport const indexOf: FunctionDef = /* @__PURE__ */ define('indexOf', [\n /* @__PURE__ */ overload([str, str], num, ([s, p], site) => {\n chargeSearch(site.state, (s as string).length, (p as string).length)\n return (s as string).indexOf(p as string)\n }),\n /* @__PURE__ */ overload([listT, any], num, ([l, v], site) => {\n const items = list(l)\n site.state.charge(items.length)\n for (let i = 0; i < items.length; i++)\n if (equals(items[i], v, site.state, 0, site.span)) return i\n return -1\n }),\n])\n\nexport const lastIndexOf: FunctionDef = /* @__PURE__ */ define('lastIndexOf', [\n /* @__PURE__ */ overload([str, str], num, ([s, p], site) => {\n chargeSearch(site.state, (s as string).length, (p as string).length)\n return (s as string).lastIndexOf(p as string)\n }),\n /* @__PURE__ */ overload([listT, any], num, ([l, v], site) => {\n const items = list(l)\n site.state.charge(items.length)\n for (let i = items.length - 1; i >= 0; i--)\n if (equals(items[i], v, site.state, 0, site.span)) return i\n return -1\n }),\n])\n\nexport const slice: FunctionDef = /* @__PURE__ */ define('slice', [\n /* @__PURE__ */ overload(\n [str, num, num],\n str,\n ([s, a, b], site) =>\n (s as string).slice(\n integer(a, 'Start', site),\n b === undefined || b === null ? undefined : integer(b, 'End', site),\n ),\n { required: 2 },\n ),\n /* @__PURE__ */ overload(\n [listT, num, num],\n listT,\n ([l, a, b], site) => {\n const items = list(l)\n const [from, to] = slicePositions(\n items.length,\n integer(a, 'Start', site),\n b === undefined || b === null ? undefined : integer(b, 'End', site),\n )\n site.state.charge(to - from)\n site.state.listLimit(to - from, site.span)\n return made(copyOf(items, from, to), site)\n },\n { required: 2 },\n ),\n])\n\nexport const split: FunctionDef = /* @__PURE__ */ define('split', [\n /* @__PURE__ */ overload(\n [str, str, num],\n /* @__PURE__ */ t.list(str),\n ([s, sep, limit], site) => {\n const text = s as string\n site.state.charge(1 + (text.length >>> 4))\n chargeSearch(site.state, text.length, (sep as string).length)\n const max =\n limit === undefined || limit === null ? undefined : nonNegativeInteger(limit, 'Limit', site)\n // Never materialize more parts than the list limit allows.\n const cap = site.state.limits.maxListLength + 1\n const parts = text.split(sep as string, max === undefined ? cap : Math.min(max, cap))\n site.state.listLimit(parts.length, site.span)\n site.state.charge(parts.length)\n return parts\n },\n { required: 2 },\n ),\n])\n\nexport const replace: FunctionDef = /* @__PURE__ */ define('replace', [\n /* @__PURE__ */ overload([str, str, str], str, ([s, f, r], site) =>\n replaceText(s as string, f as string, r as string, false, site),\n ),\n])\n\nexport const replaceAll: FunctionDef = /* @__PURE__ */ define('replaceAll', [\n /* @__PURE__ */ overload([str, str, str], str, ([s, f, r], site) =>\n replaceText(s as string, f as string, r as string, true, site),\n ),\n])\n\nexport const padStart: FunctionDef = /* @__PURE__ */ define('padStart', [\n /* @__PURE__ */ overload(\n [str, num, str],\n str,\n ([s, n, f], site) => pad(s as string, n, f, true, site),\n {\n required: 2,\n },\n ),\n])\n\nexport const padEnd: FunctionDef = /* @__PURE__ */ define('padEnd', [\n /* @__PURE__ */ overload(\n [str, num, str],\n str,\n ([s, n, f], site) => pad(s as string, n, f, false, site),\n {\n required: 2,\n },\n ),\n])\n\nexport const repeat: FunctionDef = /* @__PURE__ */ define('repeat', [\n /* @__PURE__ */ overload([str, num], str, ([s, n], site) => {\n const count = nonNegativeInteger(n, 'Count', site)\n const text = s as string\n site.state.stringLimit(text.length * count, site.span)\n site.state.charge(1 + ((text.length * count) >>> SCAN_SHIFT))\n return text.repeat(count)\n }),\n])\n\nexport const at: FunctionDef = /* @__PURE__ */ define('at', [\n /* @__PURE__ */ overload(\n [str, num],\n optStr,\n ([s, i], site) => (s as string).at(integer(i, 'Index', site)) ?? null,\n ),\n /* @__PURE__ */ overload([listT, num], optT, ([l, i], site) => {\n const items = list(l)\n const index = integer(i, 'Index', site)\n const position = index < 0 ? items.length + index : index\n return position < 0 || position >= items.length ? null : (items[position] ?? null)\n }),\n])\n\nexport const matches: FunctionDef = /* @__PURE__ */ define('matches', [\n /* @__PURE__ */ overload(\n [str, str],\n bool,\n ([s, p], site) => {\n const program = regexFor(p as string, site)\n return searchRegex(program, s as string, (n) => {\n site.state.charge(n)\n })\n },\n {\n literals: ([, pattern]) => {\n if (typeof pattern !== 'string') return undefined\n try {\n cachedRegex(pattern)\n return undefined\n } catch (error) {\n return error instanceof Error ? error.message : String(error)\n }\n },\n },\n ),\n])\n\nexport const toString: FunctionDef = /* @__PURE__ */ define('toString', [\n /* @__PURE__ */ overload([/* @__PURE__ */ t.union(primitiveText, ts, dur)], str, ([v], site) =>\n textOf(v, site),\n ),\n])\n\nexport const toNumber: FunctionDef = /* @__PURE__ */ define('toNumber', [\n /* @__PURE__ */ overload([/* @__PURE__ */ t.union(str, num)], num, ([v], site) => {\n if (typeof v === 'number') return v\n const text = (v as string).trim()\n // Decimal only: user data such as \"0x10\" is not read as hexadecimal.\n const value = DECIMAL_TEXT.test(text) ? Number(text) : Number.NaN\n if (!Number.isFinite(value)) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Cannot convert ${shown(v as string)} to a number`,\n site.span,\n )\n }\n return value\n }),\n])\n\n/** A built-in applying a number function whose result must be finite. */\nfunction math(name: string, apply: (n: number) => number): FunctionDef {\n return define(name, [overload([num], num, ([n], site) => finite(apply(n as number), site))])\n}\n\nexport const round: FunctionDef = /* @__PURE__ */ define('round', [\n /* @__PURE__ */ overload(\n [num, num],\n num,\n ([n, d], site) => roundTo(n as number, d === undefined || d === null ? 0 : (d as number), site),\n { required: 1 },\n ),\n])\n\nexport const floor: FunctionDef = /* @__PURE__ */ math('floor', Math.floor)\n\nexport const ceil: FunctionDef = /* @__PURE__ */ math('ceil', Math.ceil)\n\nexport const trunc: FunctionDef = /* @__PURE__ */ math('trunc', Math.trunc)\n\nexport const abs: FunctionDef = /* @__PURE__ */ define('abs', [\n /* @__PURE__ */ overload([num], num, ([n], site) => finite(Math.abs(n as number), site)),\n /* @__PURE__ */ overload([dur], dur, ([d]) => new Duration(Math.abs((d as Duration).ms))),\n])\n\nexport const sqrt: FunctionDef = /* @__PURE__ */ math('sqrt', Math.sqrt)\n\nexport const clamp: FunctionDef = /* @__PURE__ */ define('clamp', [\n /* @__PURE__ */ overload([num, num, num], num, ([n, lo, hi], site) => {\n if ((lo as number) > (hi as number))\n throw site.state.error('INVALID_ARGUMENT', 'clamp: min is greater than max', site.span)\n finite(n as number, site)\n finite(lo as number, site)\n finite(hi as number, site)\n return finite(Math.min(Math.max(n as number, lo as number), hi as number), site)\n }),\n])\n\nexport const toFixed: FunctionDef = /* @__PURE__ */ define('toFixed', [\n /* @__PURE__ */ overload([num, num], str, ([n, d], site) => {\n const digits = nonNegativeInteger(d, 'Digits', site)\n if (digits > MAX_FIXED_DIGITS)\n throw site.state.error('INVALID_ARGUMENT', 'Digits must be at most 100', site.span)\n site.state.charge(digits >>> 2)\n // Round half away from zero first, so toFixed(1.005, 2) agrees with round(1.005, 2).\n finite(n as number, site)\n const value = digits <= MAX_ROUND_DIGITS ? roundTo(n as number, digits, site) : (n as number)\n // JavaScript writes 1e21 and beyond in exponent form; such a number is\n // whole, so write its exact digits instead.\n if (Math.abs(value) >= FIXED_NOTATION_LIMIT)\n return `${BigInt(value).toString()}${digits > 0 ? `.${'0'.repeat(digits)}` : ''}`\n return value.toFixed(digits)\n }),\n])\n\nexport const formatNumber: FunctionDef = /* @__PURE__ */ define('formatNumber', [\n /* @__PURE__ */ overload(\n [num, /* @__PURE__ */ t.optional(num), /* @__PURE__ */ t.optional(str)],\n str,\n ([n, d, locale], site) => {\n const digits =\n d === undefined || d === null ? undefined : nonNegativeInteger(d, 'Decimals', site)\n if (digits !== undefined && digits > MAX_INTL_DIGITS) {\n throw site.state.error(\n 'INVALID_ARGUMENT',\n `Decimals must be at most ${MAX_INTL_DIGITS}`,\n site.span,\n )\n }\n const options: Intl.NumberFormatOptions =\n digits === undefined\n ? { maximumFractionDigits: MAX_INTL_DIGITS }\n : { minimumFractionDigits: digits, maximumFractionDigits: digits }\n finite(n as number, site)\n const value =\n digits === undefined || digits > MAX_ROUND_DIGITS\n ? (n as number)\n : roundTo(n as number, digits, site)\n return numberFormat(typeof locale === 'string' ? locale : 'en-US', options, site).format(\n value,\n )\n },\n { required: 1, literals: ([, , locale]) => formatProblem(locale, undefined) },\n ),\n])\n\nexport const formatCurrency: FunctionDef = /* @__PURE__ */ define('formatCurrency', [\n /* @__PURE__ */ overload(\n [num, str, /* @__PURE__ */ t.optional(str)],\n str,\n ([n, currency, locale], site) =>\n numberFormat(\n typeof locale === 'string' ? locale : 'en-US',\n { style: 'currency', currency: currency as string },\n site,\n ).format(finite(n as number, site)),\n { required: 2, literals: ([, currency, locale]) => formatProblem(locale, currency) },\n ),\n])\n\nexport const min: FunctionDef = /* @__PURE__ */ define('min', /* @__PURE__ */ extremes(-1))\n\nexport const max: FunctionDef = /* @__PURE__ */ define('max', /* @__PURE__ */ extremes(1))\n\nexport const sum: FunctionDef = /* @__PURE__ */ define('sum', [\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.list(/* @__PURE__ */ t.optional(num))],\n num,\n ([l], site) => {\n const items = list(l)\n // A list whose type is unknown statically reaches this overload; its\n // items decide (a list of durations sums as durations).\n if (isValidDuration(firstPresent(items))) return sumDurations(items, site)\n let total = 0\n for (const n of numbersOf(items, 'sum', site)) total += n\n return finite(total, site)\n },\n ),\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.list(/* @__PURE__ */ t.optional(dur))],\n dur,\n ([l], site) => sumDurations(list(l), site),\n ),\n])\n\nexport const avg: FunctionDef = /* @__PURE__ */ define('avg', [\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.list(/* @__PURE__ */ t.optional(num))],\n /* @__PURE__ */ t.optional(num),\n ([l], site) => {\n const items = list(l)\n // As in sum, a list whose type is unknown statically is decided by its items.\n if (isValidDuration(firstPresent(items))) return averageDuration(items, site)\n const values = numbersOf(items, 'avg', site)\n if (values.length === 0) return null\n let total = 0\n for (const n of values) total += n\n return finite(total / values.length, site)\n },\n ),\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.list(/* @__PURE__ */ t.optional(dur))],\n /* @__PURE__ */ t.optional(dur),\n ([l], site) => averageDuration(list(l), site),\n ),\n])\n\nfunction hof(\n name: string,\n result: Type,\n run: (items: readonly unknown[], fn: Lambda, site: CallSite, extra: unknown[]) => unknown,\n runAsync: (\n items: readonly unknown[],\n fn: Lambda,\n site: CallSite,\n extra: unknown[],\n ) => Promise<Out>,\n {\n lambda = predicate,\n extraParams = [],\n ordered = [],\n }: {\n readonly lambda?: Type\n readonly extraParams?: readonly Type[]\n readonly ordered?: readonly string[]\n } = {},\n): FunctionDef {\n return define(name, [\n overload(\n [listT, lambda, ...extraParams],\n result,\n ([l, f, ...extra], site) => run(list(l), asLambda(f), site, extra),\n {\n required: 2,\n runAsync: ([l, f, ...extra], site) => runAsync(list(l), asLambda(f), site, extra),\n ...(ordered.length === 0 ? {} : { ordered }),\n },\n ),\n ])\n}\n\nexport const map: FunctionDef = /* @__PURE__ */ hof(\n 'map',\n /* @__PURE__ */ t.list(U),\n (items, fn, site) => {\n const out = newList(items.length, site)\n for (let i = 0; i < items.length; i++) out[i] = fn(items[i], i)\n return made(out, site)\n },\n async (items, fn, site) => {\n const out = newList(items.length, site)\n for (let i = 0; i < items.length; i++) out[i] = ran(await fn(items[i], i))\n return new Out(made(out, site))\n },\n { lambda: /* @__PURE__ */ fnType([T, num], U) },\n)\n\nexport const filter: FunctionDef = /* @__PURE__ */ hof(\n 'filter',\n listT,\n (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++)\n if (truthy(fn(items[i], i), site)) push(out, items[i], site)\n return made(out, site)\n },\n async (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) push(out, items[i], site)\n return new Out(made(out, site))\n },\n)\n\nexport const find: FunctionDef = /* @__PURE__ */ hof(\n 'find',\n optT,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(fn(items[i], i), site)) return items[i] ?? null\n return null\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(items[i] ?? null)\n return new Out(null)\n },\n)\n\nexport const findIndex: FunctionDef = /* @__PURE__ */ hof(\n 'findIndex',\n num,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) return i\n return -1\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(i)\n return new Out(-1)\n },\n)\n\nexport const some: FunctionDef = /* @__PURE__ */ hof(\n 'some',\n bool,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) return true\n return false\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(true)\n return new Out(false)\n },\n)\n\nexport const every: FunctionDef = /* @__PURE__ */ hof(\n 'every',\n bool,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (!truthy(fn(items[i], i), site)) return false\n return true\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (!truthy(ran(await fn(items[i], i)), site)) return new Out(false)\n return new Out(true)\n },\n)\n\nexport const none: FunctionDef = /* @__PURE__ */ hof(\n 'none',\n bool,\n (items, fn, site) => {\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) return false\n return true\n },\n async (items, fn, site) => {\n for (let i = 0; i < items.length; i++)\n if (truthy(ran(await fn(items[i], i)), site)) return new Out(false)\n return new Out(true)\n },\n)\n\nexport const flatMap: FunctionDef = /* @__PURE__ */ hof(\n 'flatMap',\n /* @__PURE__ */ t.list(U),\n (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++) {\n appendFlat(out, fn(items[i], i), site)\n }\n return made(out, site)\n },\n async (items, fn, site) => {\n const out: unknown[] = []\n for (let i = 0; i < items.length; i++) {\n appendFlat(out, ran(await fn(items[i], i)), site)\n }\n return new Out(made(out, site))\n },\n {\n lambda: /* @__PURE__ */ fnType([T, num], /* @__PURE__ */ t.union(/* @__PURE__ */ t.list(U), U)),\n },\n)\n\nexport const sortBy: FunctionDef = /* @__PURE__ */ hof(\n 'sortBy',\n listT,\n (items, fn, site, [direction]) => {\n const keys = newList(items.length, site)\n for (let i = 0; i < items.length; i++) keys[i] = fn(items[i], i)\n return sortKeyed(items, keys, direction, site)\n },\n async (items, fn, site, [direction]) => {\n const keys = newList(items.length, site)\n for (let i = 0; i < items.length; i++) keys[i] = ran(await fn(items[i], i))\n return new Out(sortKeyed(items, keys, direction, site))\n },\n {\n lambda: /* @__PURE__ */ fnType([T, num], K),\n extraParams: [/* @__PURE__ */ t.enum('asc', 'desc')],\n ordered: ['K'],\n },\n)\n\nexport const groupBy: FunctionDef = /* @__PURE__ */ hof(\n 'groupBy',\n /* @__PURE__ */ t.record(listT),\n (items, fn, site) => {\n const out: Record<string, unknown[]> = {}\n for (let i = 0; i < items.length; i++)\n push(bucket(out, groupKey(fn(items[i], i), site)), items[i], site)\n return madeGroups(out, site)\n },\n async (items, fn, site) => {\n const out: Record<string, unknown[]> = {}\n for (let i = 0; i < items.length; i++)\n push(bucket(out, groupKey(ran(await fn(items[i], i)), site)), items[i], site)\n return new Out(madeGroups(out, site))\n },\n { lambda: /* @__PURE__ */ fnType([T, num], /* @__PURE__ */ t.union(str, num, bool)) },\n)\n\nexport const count: FunctionDef = /* @__PURE__ */ define('count', [\n /* @__PURE__ */ overload([listT], num, ([l]) => list(l).length),\n /* @__PURE__ */ overload(\n [listT, predicate],\n num,\n ([l, f], site) => {\n const items = list(l)\n const fn = asLambda(f)\n let n = 0\n for (let i = 0; i < items.length; i++) if (truthy(fn(items[i], i), site)) n++\n return n\n },\n {\n runAsync: async ([l, f], site) => {\n const items = list(l)\n const fn = asLambda(f)\n let n = 0\n for (let i = 0; i < items.length; i++) if (truthy(ran(await fn(items[i], i)), site)) n++\n return new Out(n)\n },\n },\n ),\n])\n\nexport const reduce: FunctionDef = /* @__PURE__ */ define('reduce', [\n /* @__PURE__ */ overload(\n [listT, /* @__PURE__ */ fnType([U, T], U), U],\n U,\n ([l, f, initial]) => {\n const items = list(l)\n const fn = f as (acc: unknown, item: unknown, index: number) => unknown\n let acc = initial\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) acc = fn(acc, items[i], i)\n return acc\n },\n {\n runAsync: async ([l, f, initial]) => {\n const items = list(l)\n const fn = f as (acc: unknown, item: unknown, index: number) => unknown\n let acc = initial\n // oxlint-disable-next-line typescript/prefer-for-of -- indexing never runs a host list's iterator\n for (let i = 0; i < items.length; i++) acc = ran(await fn(acc, items[i], i))\n return new Out(acc)\n },\n },\n ),\n])\n\nexport const sort: FunctionDef = /* @__PURE__ */ define('sort', [\n /* @__PURE__ */ overload(\n [listT, /* @__PURE__ */ t.enum('asc', 'desc')],\n listT,\n ([l, d], site) => sortKeyed(list(l), list(l), d, site),\n {\n required: 1,\n ordered: ['T'],\n },\n ),\n])\n\nexport const reverse: FunctionDef = /* @__PURE__ */ define('reverse', [\n /* @__PURE__ */ overload([listT], listT, ([l], site) => {\n const items = list(l)\n site.state.charge(items.length)\n const out = newList(items.length, site)\n for (let i = 0; i < items.length; i++) out[i] = items[items.length - 1 - i] ?? null\n return made(out, site)\n }),\n])\n\nexport const unique: FunctionDef = /* @__PURE__ */ define('unique', [\n /* @__PURE__ */ overload([listT], listT, ([l], site) => uniqueOf(list(l), site)),\n])\n\nexport const flat: FunctionDef = /* @__PURE__ */ define('flat', [\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.list(any)],\n /* @__PURE__ */ t.list(any),\n ([l], site) => flatten(list(l), site),\n ),\n])\n\nexport const first: FunctionDef = /* @__PURE__ */ define('first', [\n /* @__PURE__ */ overload([listT], optT, ([l]) => list(l)[0] ?? null),\n])\n\nexport const last: FunctionDef = /* @__PURE__ */ define('last', [\n /* @__PURE__ */ overload([listT], optT, ([l]) => {\n const items = list(l)\n return items.length === 0 ? null : (items[items.length - 1] ?? null)\n }),\n])\n\nexport const join: FunctionDef = /* @__PURE__ */ define('join', [\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.list(/* @__PURE__ */ t.union(primitiveText, ts, dur)), str],\n str,\n ([l, sep], site) => joinText(list(l), sep, site),\n {\n required: 1,\n },\n ),\n])\n\nexport const isEmpty: FunctionDef = /* @__PURE__ */ define('isEmpty', [\n /* @__PURE__ */ overload(\n [\n /* @__PURE__ */ t.union(\n /* @__PURE__ */ t.list(any),\n str,\n /* @__PURE__ */ t.record(any),\n /* @__PURE__ */ t.null(),\n ),\n ],\n bool,\n ([v], site) => {\n if (v === null || v === undefined) return true\n if (Array.isArray(v) || typeof v === 'string') return v.length === 0\n // Listing a map's keys is linear in how many it has.\n const record = v as Record<string, unknown>\n const names = Object.keys(record)\n site.state.charge(keyListCost(names.length))\n return !names.some((key) => holdsKey(record, key))\n },\n ),\n])\n\nexport const keys: FunctionDef = /* @__PURE__ */ define('keys', [\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.record(any)],\n /* @__PURE__ */ t.list(str),\n ([m], site) => entryList(m as Record<string, unknown>, site),\n ),\n])\n\nexport const values: FunctionDef = /* @__PURE__ */ define('values', [\n /* @__PURE__ */ overload([/* @__PURE__ */ t.record(T)], listT, ([m], site) => {\n const record = m as Record<string, unknown>\n return made(\n entryList(record, site).map((key) => record[key] ?? null),\n site,\n )\n }),\n])\n\nexport const entries: FunctionDef = /* @__PURE__ */ define('entries', [\n /* @__PURE__ */ overload(\n [/* @__PURE__ */ t.record(T)],\n /* @__PURE__ */ t.list(/* @__PURE__ */ t.object({ key: str, value: T })),\n ([m], site) => {\n const record = m as Record<string, unknown>\n const names = entryList(record, site)\n site.state.charge(names.length)\n return made(\n names.map((key) => made({ key, value: record[key] ?? null }, site)),\n site,\n )\n },\n ),\n])\n\nexport const type: FunctionDef = /* @__PURE__ */ define('type', [\n /* @__PURE__ */ overload([any], str, ([v]) => kindOf(v)),\n])\n\nconst optZone = /* @__PURE__ */ t.optional(str)\n\n/** Where a built-in's time zone parameter is (see FunctionDef.zone). */\nconst zoneAt = (position: number): ZoneParameter => ({ at: position, warm: warmZone })\n\nfunction zoneArg(value: unknown): string | null {\n return value === undefined || value === null ? null : (value as string)\n}\n\nfunction field(name: string, pick: (clock: WallClock) => number): FunctionDef {\n return define(\n name,\n [\n overload([ts, optZone], num, ([d, z], site) => pick(wallClock(d as Date, zoneArg(z), site)), {\n required: 1,\n }),\n ],\n zoneAt(1),\n )\n}\n\n/** Midnight at the start of the day, with `reset` fields of the wall clock set too. */\nfunction startOf(name: string, reset: Partial<WallClock>): FunctionDef {\n return define(\n name,\n [\n overload(\n [ts, optZone],\n ts,\n ([d, z], site) => {\n const clock = wallClock(d as Date, zoneArg(z), site)\n const midnight = { ...clock, ...reset, hour: 0, minute: 0, second: 0, millisecond: 0 }\n return fromWallClock(midnight, zoneArg(z), site)\n },\n { required: 1 },\n ),\n ],\n zoneAt(1),\n )\n}\n\n/** Longest duration text duration() reads; longer text is never a valid duration in range. */\nconst MAX_DURATION_TEXT = 64\n/** Weeks, days, hours, minutes, seconds (to the millisecond); every part bounded, so no backtracking blowup. */\nconst ISO_DURATION =\n /^(?<sign>[+-])?P(?:(?<weeks>\\d{1,15})W)?(?:(?<days>\\d{1,15})D)?(?:T(?:(?<hours>\\d{1,15})H)?(?:(?<minutes>\\d{1,15})M)?(?:(?<seconds>\\d{1,15})(?:[.,](?<fraction>\\d{1,3}))?S)?)?$/u\n\n/**\n * The milliseconds in ISO-8601 duration text, or why it is not one. Years and\n * months have no fixed length, so they are refused rather than guessed.\n */\nfunction isoDurationMs(text: string): number | string {\n const bad = `Invalid duration ${shown(text)}: expected ISO-8601 text such as \"PT1H30M\"`\n if (text.length > MAX_DURATION_TEXT) return bad\n const match = ISO_DURATION.exec(text)\n if (match === null) {\n return /^[+-]?P[^T]*[YM]/u.test(text)\n ? `Invalid duration ${shown(text)}: years and months have no fixed length; use days`\n : bad\n }\n const { sign, weeks, days, hours, minutes, seconds, fraction } = match.groups ?? {}\n // \"P\" and \"PT\" alone name no length.\n if (text.endsWith('P') || text.endsWith('T')) return bad\n const part = (digits: string | undefined): number => (digits === undefined ? 0 : Number(digits))\n const ms =\n part(weeks) * MS_PER_WEEK +\n part(days) * MS_PER_DAY +\n part(hours) * MS_PER_HOUR +\n part(minutes) * MS_PER_MINUTE +\n part(seconds) * MS_PER_SECOND +\n (fraction === undefined ? 0 : Number(fraction.padEnd(3, '0')))\n return sign === '-' ? -ms : ms\n}\n\nfunction durationUnit(name: string, unitMs: number): FunctionDef {\n return define(name, [\n overload([num], dur, ([n], site) => durationOf((n as number) * unitMs, site.state, site.span)),\n ])\n}\n\nfunction durationIn(name: string, unitMs: number): FunctionDef {\n return define(name, [overload([dur], num, ([d]) => (d as Duration).ms / unitMs)])\n}\n\nexport const now: FunctionDef = /* @__PURE__ */ define('now', [\n /* @__PURE__ */ overload([], ts, (_, site) => site.state.now()),\n])\n\nexport const timestamp: FunctionDef = /* @__PURE__ */ define('timestamp', [\n /* @__PURE__ */ overload([str], ts, ([s], site) => {\n site.state.charge(PARSE_COST)\n return parseTimestamp(s as string, site)\n }),\n /* @__PURE__ */ overload([num], ts, ([n], site) => checked(n as number, site)),\n /* @__PURE__ */ overload([ts], ts, ([d], site) => {\n timeOf(d as Date, site.state, site.span)\n return d\n }),\n])\n\nexport const duration: FunctionDef = /* @__PURE__ */ define('duration', [\n /* @__PURE__ */ overload(\n [str],\n dur,\n ([s], site) => {\n site.state.charge(PARSE_COST)\n const ms = isoDurationMs(s as string)\n if (typeof ms === 'string') throw site.state.error('INVALID_ARGUMENT', ms, site.span)\n return durationOf(ms, site.state, site.span)\n },\n {\n literals: ([text]) => {\n if (typeof text !== 'string') return undefined\n const ms = isoDurationMs(text)\n return typeof ms === 'string' ? ms : undefined\n },\n },\n ),\n /* @__PURE__ */ overload([dur], dur, ([d]) => d),\n])\n\nexport const weeks: FunctionDef = /* @__PURE__ */ durationUnit('weeks', MS_PER_WEEK)\n\nexport const days: FunctionDef = /* @__PURE__ */ durationUnit('days', MS_PER_DAY)\n\nexport const hours: FunctionDef = /* @__PURE__ */ durationUnit('hours', MS_PER_HOUR)\n\nexport const minutes: FunctionDef = /* @__PURE__ */ durationUnit('minutes', MS_PER_MINUTE)\n\nexport const seconds: FunctionDef = /* @__PURE__ */ durationUnit('seconds', MS_PER_SECOND)\n\nexport const milliseconds: FunctionDef = /* @__PURE__ */ durationUnit('milliseconds', 1)\n\nexport const inDays: FunctionDef = /* @__PURE__ */ durationIn('inDays', MS_PER_DAY)\n\nexport const inHours: FunctionDef = /* @__PURE__ */ durationIn('inHours', MS_PER_HOUR)\n\nexport const inMinutes: FunctionDef = /* @__PURE__ */ durationIn('inMinutes', MS_PER_MINUTE)\n\nexport const inSeconds: FunctionDef = /* @__PURE__ */ durationIn('inSeconds', MS_PER_SECOND)\n\nexport const inMilliseconds: FunctionDef = /* @__PURE__ */ durationIn('inMilliseconds', 1)\n\nexport const year: FunctionDef = /* @__PURE__ */ field('year', (c) => c.year)\n\nexport const month: FunctionDef = /* @__PURE__ */ field('month', (c) => c.month)\n\nexport const day: FunctionDef = /* @__PURE__ */ field('day', (c) => c.day)\n\nexport const hour: FunctionDef = /* @__PURE__ */ field('hour', (c) => c.hour)\n\nexport const minute: FunctionDef = /* @__PURE__ */ field('minute', (c) => c.minute)\n\nexport const second: FunctionDef = /* @__PURE__ */ field('second', (c) => c.second)\n\nexport const dayOfWeek: FunctionDef = /* @__PURE__ */ field('dayOfWeek', isoWeekday)\n\nexport const startOfDay: FunctionDef = /* @__PURE__ */ startOf('startOfDay', {})\n\nexport const startOfMonth: FunctionDef = /* @__PURE__ */ startOf('startOfMonth', { day: 1 })\n\nexport const startOfYear: FunctionDef = /* @__PURE__ */ startOf('startOfYear', { month: 1, day: 1 })\n\nexport const addDays: FunctionDef = /* @__PURE__ */ define(\n 'addDays',\n [\n /* @__PURE__ */ overload(\n [ts, num, optZone],\n ts,\n ([d, n, z], site) => addDaysIn(d as Date, n as number, zoneArg(z), site),\n { required: 2 },\n ),\n ],\n /* @__PURE__ */ zoneAt(2),\n)\n\nexport const addMonths: FunctionDef = /* @__PURE__ */ define(\n 'addMonths',\n [\n /* @__PURE__ */ overload(\n [ts, num, optZone],\n ts,\n ([d, n, z], site) => addMonthsIn(d as Date, n as number, zoneArg(z), site),\n { required: 2 },\n ),\n ],\n /* @__PURE__ */ zoneAt(2),\n)\n\nexport const addYears: FunctionDef = /* @__PURE__ */ define(\n 'addYears',\n [\n /* @__PURE__ */ overload(\n [ts, num, optZone],\n ts,\n ([d, n, z], site) =>\n addMonthsIn(d as Date, integer(n, 'Years', site) * MONTHS_PER_YEAR, zoneArg(z), site),\n { required: 2 },\n ),\n ],\n /* @__PURE__ */ zoneAt(2),\n)\n\nexport const formatDate: FunctionDef = /* @__PURE__ */ define(\n 'formatDate',\n [\n /* @__PURE__ */ overload(\n [ts, str, optZone],\n str,\n ([d, p, z], site) => {\n const text = formatTimestamp(d as Date, p as string, zoneArg(z), site)\n site.state.stringLimit(text.length, site.span)\n return text\n },\n {\n required: 2,\n literals: ([, pattern]) =>\n typeof pattern === 'string' ? checkDatePattern(pattern) : undefined,\n },\n ),\n ],\n /* @__PURE__ */ zoneAt(2),\n)\n\n/** Result types that depend on argument types beyond simple type variables. */\nexport const RESULT_REFINERS: Readonly<\n Record<string, (args: readonly Type[]) => Type | undefined>\n> = {\n values: (args) => t.list(valueTypeOf(args[0])),\n entries: (args) => t.list(t.object({ key: str, value: valueTypeOf(args[0]) })),\n flat: (args) => {\n const list0 = args[0]\n if (list0?.kind !== 'list') return undefined\n const element = list0.element\n const members = element.kind === 'union' ? element.types : [element]\n return t.list(\n unionOf(members.map((member) => (member.kind === 'list' ? member.element : member))),\n )\n },\n}\n\n/**\n * Every built-in by name, in the order descriptions.ts lists them. Each\n * built-in is also its own export, so a bundle that never reads this map\n * keeps only the built-ins it imports.\n */\nexport const BUILTINS: ReadonlyMap<string, FunctionDef> = /* @__PURE__ */ (() =>\n new Map(\n [\n toUpperCase,\n toLowerCase,\n trim,\n trimStart,\n trimEnd,\n startsWith,\n endsWith,\n includes,\n indexOf,\n lastIndexOf,\n slice,\n split,\n replace,\n replaceAll,\n padStart,\n padEnd,\n repeat,\n at,\n matches,\n toString,\n toNumber,\n round,\n floor,\n ceil,\n trunc,\n abs,\n sqrt,\n clamp,\n toFixed,\n formatNumber,\n formatCurrency,\n min,\n max,\n sum,\n avg,\n map,\n filter,\n find,\n findIndex,\n some,\n every,\n none,\n flatMap,\n sortBy,\n groupBy,\n count,\n reduce,\n sort,\n reverse,\n unique,\n flat,\n first,\n last,\n join,\n isEmpty,\n keys,\n values,\n entries,\n type,\n now,\n timestamp,\n duration,\n weeks,\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n inDays,\n inHours,\n inMinutes,\n inSeconds,\n inMilliseconds,\n year,\n month,\n day,\n hour,\n minute,\n second,\n dayOfWeek,\n startOfDay,\n startOfMonth,\n startOfYear,\n addDays,\n addMonths,\n addYears,\n formatDate,\n ].map((def) => [def.name, def]),\n ))()\n"],"mappings":"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"}
|
|
@@ -171,12 +171,47 @@ function overload(params, result, run, options = {}) {
|
|
|
171
171
|
...options
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
/** A built-in; its description is in descriptions.ts. */
|
|
175
|
+
function define(name, overloads, zone) {
|
|
176
|
+
const def = {
|
|
176
177
|
name,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
178
|
+
overloads: Object.freeze([...overloads]),
|
|
179
|
+
...zone === void 0 ? {} : { zone }
|
|
180
|
+
};
|
|
181
|
+
Object.defineProperty(def, BUILTIN_BRAND, { value: true });
|
|
182
|
+
DEFINED.add(Object.freeze(def));
|
|
183
|
+
return def;
|
|
184
|
+
}
|
|
185
|
+
/** The built-ins this copy of the package defined (the `builtins` option takes only these). */
|
|
186
|
+
const DEFINED = /* @__PURE__ */ new WeakSet();
|
|
187
|
+
/** Marks a built-in of any copy of the package, so one from another copy is named as such. */
|
|
188
|
+
const BUILTIN_BRAND = Symbol.for("bonsai-js.builtin");
|
|
189
|
+
/**
|
|
190
|
+
* Reads the `builtins` option: built-ins from bonsai-js/builtins, added to
|
|
191
|
+
* `base` (an extended environment's or runtime's own).
|
|
192
|
+
*/
|
|
193
|
+
function builtinsOption(value, base) {
|
|
194
|
+
if (value === void 0) return base;
|
|
195
|
+
if (!Array.isArray(value)) throw new TypeError("builtins must be an array of built-ins from bonsai-js/builtins");
|
|
196
|
+
let items;
|
|
197
|
+
try {
|
|
198
|
+
items = Array.prototype.slice.call(value);
|
|
199
|
+
} catch (error) {
|
|
200
|
+
throw new TypeError("builtins could not be read", { cause: error });
|
|
201
|
+
}
|
|
202
|
+
const out = new Map(base);
|
|
203
|
+
for (const item of items) {
|
|
204
|
+
if (DEFINED.has(item)) {
|
|
205
|
+
out.set(item.name, item);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
let branded = false;
|
|
209
|
+
try {
|
|
210
|
+
branded = typeof item === "object" && item !== null && Object.hasOwn(item, BUILTIN_BRAND);
|
|
211
|
+
} catch {}
|
|
212
|
+
throw new TypeError(branded ? "builtins holds a built-in that is not from this copy of bonsai-js (another installed copy, or a wrapper of one); import built-ins from the copy that runs them" : "builtins must hold built-ins from bonsai-js/builtins");
|
|
213
|
+
}
|
|
214
|
+
return out;
|
|
180
215
|
}
|
|
181
216
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
182
217
|
function describe(value) {
|
|
@@ -267,6 +302,6 @@ function assertHostSpec(spec, label) {
|
|
|
267
302
|
if (typeof spec.run !== "function") throw new TypeError(`${label} needs a run function`);
|
|
268
303
|
}
|
|
269
304
|
//#endregion
|
|
270
|
-
export { K, Out, T, U, assertHostSpec, assertType, conforms, define, describeMismatch, fnType, isItemLambdaPosition, isLambdaPosition, isRecord, matchesKind, overload, signatureText };
|
|
305
|
+
export { K, Out, T, U, assertHostSpec, assertType, builtinsOption, conforms, define, describeMismatch, fnType, isItemLambdaPosition, isLambdaPosition, isRecord, matchesKind, overload, signatureText };
|
|
271
306
|
|
|
272
307
|
//# sourceMappingURL=define.mjs.map
|