@isikk/core 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/index.ts","../src/arrays/index.ts","../src/functions/index.ts","../src/objects/index.ts","../src/strings/index.ts","../src/dates/_format.ts","../src/dates/index.ts","../src/files/index.ts","../src/cookies/index.ts","../src/console/index.ts","../src/colors/index.ts"],"sourcesContent":["export const getKeys = Object.keys as <T extends object>(obj: T) => Array<keyof T>\n\nexport type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]> }\n\nexport type RecursiveRecord = {\n [key: string]: string | number | boolean | RecursiveRecord | Array<RecursiveRecord>\n}\n\nexport function forcedType<T>(obj: unknown): T {\n return obj as unknown as T\n}\n","export function notNone<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n\nfunction combinationsOfSize<T>(items: T[], size: number): T[][] {\n if (size === 0) {\n return [[]]\n }\n if (size > items.length) {\n return []\n }\n const [first, ...rest] = items\n const withFirst = combinationsOfSize(rest, size - 1).map((combination) => [first, ...combination])\n const withoutFirst = combinationsOfSize(rest, size)\n return [...withFirst, ...withoutFirst]\n}\n\nexport function allCombinations<T>(options: T[]): T[][] {\n const result: T[][] = []\n for (let size = 1; size <= options.length; size++) {\n result.push(...combinationsOfSize(options, size))\n }\n return result\n}\n","export function withAttributes<Fn extends (...args: never[]) => unknown, Attrs extends Record<string, unknown>>(\n fn: Fn,\n attributes: Attrs\n): Fn & Attrs {\n for (const key of Object.keys(attributes)) {\n // Object.defineProperty (unlike a plain `fn[key] = value` assignment) always creates/\n // overwrites an own property, even when key is \"__proto__\" - a plain assignment would instead\n // be intercepted by Object.prototype's special __proto__ accessor and reassign fn's own\n // prototype instead of setting a property on it.\n Object.defineProperty(fn, key, {\n value: attributes[key],\n writable: true,\n configurable: true,\n enumerable: true,\n })\n }\n return fn as Fn & Attrs\n}\n\nexport function makeCallable<T, R>(originalCallable: (arg: T) => R) {\n return (data: T) => () => originalCallable(data)\n}\n\nexport function getLazyValue<T>(input: T | (() => T)): T {\n if (typeof input === 'function') {\n return (input as () => T)()\n }\n return input\n}\n\nexport async function getLazyValueAsync<T>(input: T | (() => Promise<T>) | (() => T)): Promise<T> {\n if (typeof input === 'function') {\n const result = (input as () => Promise<T>)()\n if (result instanceof Promise) {\n return await result\n }\n return result as unknown as T\n }\n return input\n}\n\nexport function suppress<T, ERT>(\n exceptions: Array<new (message?: string) => Error>,\n fn: () => T,\n onError?: (error: unknown) => ERT\n): T | ERT | undefined {\n try {\n return fn()\n } catch (error) {\n if (exceptions.some((exception) => error instanceof exception)) {\n return onError ? onError(error) : undefined\n }\n throw error\n }\n}\n\nexport function preventDefault<E extends Event, R>(callable: (event: E) => R): (event: E) => Promise<Awaited<R>> {\n return async function (event: E): Promise<Awaited<R>> {\n event.preventDefault()\n return await callable(event)\n }\n}\n\nexport function isPathMatched(pathname: string, pattern: RegExp, exemptPatterns: RegExp[] = []): boolean {\n if (exemptPatterns.some((exempt) => exempt.test(pathname))) {\n return false\n }\n return pattern.test(pathname)\n}\n\nexport function raises(error: Error): (...args: unknown[]) => never {\n return () => {\n throw error\n }\n}\n\nexport function cloned<Fn extends (...args: never[]) => unknown>(fn: Fn): Fn {\n return ((...args: Parameters<Fn>) => fn(...args)) as Fn\n}\n\nexport function enabledIf<R>(condition: boolean | (() => boolean), options: { ifNotEnabledReturnValue: R }) {\n const enabled = typeof condition === 'function' ? condition() : condition\n\n return function <Fn extends (...args: never[]) => R>(fn: Fn): Fn {\n if (!enabled) {\n return cloned((() => options.ifNotEnabledReturnValue) as Fn)\n }\n return cloned(fn)\n }\n}\n\nexport function transformExceptions<E extends Error>(\n exceptionTypes: Array<new (...args: never[]) => E>,\n transform: (error: E) => Error,\n options: { keepOriginal?: boolean } = {}\n) {\n const { keepOriginal = true } = options\n\n return function <Fn extends (...args: never[]) => unknown>(fn: Fn): Fn {\n return ((...args: Parameters<Fn>) => {\n try {\n return fn(...args)\n } catch (error) {\n if (!exceptionTypes.some((ExceptionType) => error instanceof ExceptionType)) {\n throw error\n }\n const newError = transform(error as E)\n if (keepOriginal) {\n newError.cause = error\n }\n throw newError\n }\n }) as Fn\n }\n}\n","export function checkRequiredKeys<T extends Record<string, unknown>, C extends Record<string, Array<keyof T>>>(\n obj: T,\n conditions: C\n): keyof C {\n const matchingConditions = Object.entries(conditions).filter(\n ([, keys]) =>\n keys.every((key) => obj[key] !== undefined) &&\n Object.keys(obj).every((key) => keys.includes(key as keyof T) || obj[key] === undefined)\n )\n\n if (matchingConditions.length !== 1) {\n throw new Error(`Object keys do not match exactly one required condition. ${JSON.stringify(conditions)}`)\n }\n\n return matchingConditions[0][0] as keyof C\n}\n\nexport function requireExclusiveKeys<T extends Record<string, unknown>, C extends Record<string, Array<keyof T>>>(\n conditions: C,\n options: { allowEmpty?: boolean } = {}\n) {\n const conditionEntries = Object.entries(conditions) as Array<[string, Array<keyof T>]>\n if (conditionEntries.length === 0) {\n throw new Error('At least one condition must be provided.')\n }\n const { allowEmpty = false } = options\n const governedKeys = new Set(conditionEntries.flatMap(([, keys]) => keys))\n\n return function <Fn extends (arg: T) => unknown>(fn: Fn): Fn {\n return ((arg: T) => {\n // Only keys that are actually governed by a condition are considered - unlike\n // checkRequiredKeys, any other key on `arg` is fully unconstrained and ignored here\n // regardless of its value, since this is meant to validate one options object that may\n // legitimately carry other, unrelated fields alongside the mutually-exclusive ones.\n const provided = new Set(\n Object.keys(arg).filter((key) => governedKeys.has(key as keyof T) && arg[key] !== undefined)\n )\n\n if (allowEmpty && provided.size === 0) {\n return fn(arg)\n }\n\n const matches = conditionEntries.filter(\n ([, keys]) => keys.length === provided.size && keys.every((key) => provided.has(key as string))\n )\n if (matches.length !== 1) {\n throw new Error(`Object keys do not match exactly one required condition. ${JSON.stringify(conditions)}`)\n }\n return fn(arg)\n }) as Fn\n }\n}\n\nexport function setKeyValueToObjectIfValue(key: string, value: unknown, object: Record<string, unknown>) {\n if (value) {\n // Object.defineProperty (unlike a plain `object[key] = value` assignment) always creates/\n // overwrites an own property, even when key is \"__proto__\" - a plain assignment would instead\n // be intercepted by Object.prototype's special __proto__ accessor and reassign this object's\n // prototype instead of setting a property on it.\n Object.defineProperty(object, key, { value, writable: true, configurable: true, enumerable: true })\n }\n}\n","export function slugify(value: string, allowUnicode: boolean = false): string {\n if (allowUnicode) {\n value = value.normalize('NFKC').replace(/[^\\p{L}\\p{N}_\\s-]/gu, '')\n } else {\n value = value\n .normalize('NFKD')\n // eslint-disable-next-line no-control-regex\n .replace(/[^\\x00-\\x7F]/g, '')\n .replace(/[\\r\\n]+/g, ' ')\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n }\n\n value = value.toLowerCase()\n\n return value.replace(/[-\\s]+/g, '-').replace(/^[-_]+|[-_]+$/g, '')\n}\n","import { format } from 'date-fns'\n\nexport function formatDate(date: Date, pattern: string): string {\n return format(date, pattern)\n}\n","import { formatDate } from './_format'\n\nexport const LONG_DATE_FORMAT = \"EEEE, MMMM dd, yyyy 'at' hh:mm a\"\nexport const SHORT_DATE_FORMAT = 'dd.MM.yyyy'\nexport const SHORT_DATETIME_FORMAT = 'dd.MM.yyyy HH:mm a'\n\nexport function formattedDate(pattern: string, date: Date = new Date()): string {\n return formatDate(date, pattern)\n}\n\nexport function longFormattedDate(date: Date = new Date()): string {\n return formattedDate(LONG_DATE_FORMAT, date)\n}\n\nexport function shortFormattedDate(date: Date = new Date()): string {\n return formattedDate(SHORT_DATE_FORMAT, date)\n}\n\nexport function shortFormattedDateTime(date: Date = new Date()): string {\n return formattedDate(SHORT_DATETIME_FORMAT, date)\n}\n\nexport function optionalDate(date?: string): Date | undefined {\n return date ? new Date(date) : undefined\n}\n","type MimeType = 'image/png' | 'image/jpeg' | 'image/webp'\n\nexport function guessImageMimeType(filename: string): MimeType {\n const withoutQueryOrHash = filename.split(/[?#]/)[0]\n const extension = withoutQueryOrHash.split('.').pop()?.toLowerCase()\n switch (extension) {\n case 'png':\n return 'image/png'\n case 'jfif':\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg'\n case 'webp':\n return 'image/webp'\n default:\n return 'image/png'\n }\n}\n\nexport function isImageMimeType(mimeType: string): mimeType is MimeType {\n return mimeType === 'image/png' || mimeType === 'image/jpeg' || mimeType === 'image/webp'\n}\n\nexport function escapeName(name: string): string {\n return name.replace(/[^a-zA-Z0-9-_.]/g, '_')\n}\n\nexport function safeFileName(filename: string, maxLength: number = 255): string {\n if (filename.length <= maxLength) return filename\n\n const dotIndex = filename.lastIndexOf('.')\n const hasExtension = dotIndex > 0\n const extension = escapeName(hasExtension ? filename.slice(dotIndex) : '')\n const name = escapeName(hasExtension ? filename.slice(0, dotIndex) : filename)\n\n return name.slice(0, Math.max(0, maxLength - extension.length)) + extension\n}\n\nexport async function downloadAndFormatImage(\n src: string,\n name: string = 'image.png',\n mimeType: MimeType = guessImageMimeType(name),\n quality: number = 1\n): Promise<void> {\n name = safeFileName(name)\n try {\n const img = new Image()\n img.crossOrigin = 'anonymous'\n\n await new Promise((resolve, reject) => {\n img.onload = resolve\n img.onerror = reject\n img.src = src\n })\n\n const canvas = document.createElement('canvas')\n canvas.width = img.width\n canvas.height = img.height\n const ctx = canvas.getContext('2d')\n\n if (!ctx) {\n throw new Error('Could not get canvas context')\n }\n\n ctx.drawImage(img, 0, 0)\n\n const blob = await new Promise<Blob | null>((resolve) => {\n canvas.toBlob(resolve, mimeType, quality)\n })\n\n if (!blob) {\n throw new Error('Could not generate blob')\n }\n\n const link = document.createElement('a')\n const downloadUrl = URL.createObjectURL(blob)\n try {\n link.href = downloadUrl\n link.download = name\n document.body.appendChild(link)\n link.click()\n } finally {\n document.body.removeChild(link)\n URL.revokeObjectURL(downloadUrl)\n }\n } catch (error) {\n console.error('Failed to download image:', error)\n }\n}\n\nexport async function fileToBase64Native(file: File): Promise<string> {\n const result = await new Promise<string | ArrayBuffer | null>((resolve, reject) => {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n reader.onload = () => resolve(reader.result)\n reader.onerror = (error) => reject(error)\n })\n\n if (typeof result === 'string') {\n return result\n } else {\n throw new Error('Failed to read file as Data URL')\n }\n}\n\nexport async function fileToBase64(file: File, quality: number = 1): Promise<string> {\n if (isImageMimeType(file.type)) {\n const img = new Image()\n const url = URL.createObjectURL(file)\n try {\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve()\n img.onerror = () => reject(new Error('Failed to load image for metadata removal'))\n img.src = url\n })\n\n const canvas = document.createElement('canvas')\n canvas.width = img.width\n canvas.height = img.height\n\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n throw new Error('Failed to get canvas context')\n }\n ctx.drawImage(img, 0, 0)\n\n const cleanDataUrl = canvas.toDataURL(file.type, quality)\n if (cleanDataUrl === 'data:,') {\n return await fileToBase64Native(file)\n }\n\n return cleanDataUrl\n } finally {\n URL.revokeObjectURL(url)\n }\n } else {\n return await fileToBase64Native(file)\n }\n}\n","export function getCookie(name: string): string | undefined {\n for (const pair of document.cookie.split('; ')) {\n const separatorIndex = pair.indexOf('=')\n if (separatorIndex === -1) {\n continue\n }\n if (pair.slice(0, separatorIndex) === name) {\n return pair.slice(separatorIndex + 1)\n }\n }\n return undefined\n}\n","type ConsoleMethod = (...args: unknown[]) => void\ntype WindowLike = Window & typeof globalThis\n\nconst patchedWindows = new WeakMap<WindowLike, Set<string>>()\n\nexport function createConsoleDebugSwitch(targetWindow: WindowLike, options: { namespace: string }): void {\n if (!targetWindow) {\n return\n }\n\n const { namespace } = options\n\n let enabledNamespaces = patchedWindows.get(targetWindow)\n if (!enabledNamespaces) {\n enabledNamespaces = new Set<string>()\n patchedWindows.set(targetWindow, enabledNamespaces)\n\n const original = {\n log: targetWindow.console.log.bind(targetWindow.console),\n info: targetWindow.console.info.bind(targetWindow.console),\n warn: targetWindow.console.warn.bind(targetWindow.console),\n error: targetWindow.console.error.bind(targetWindow.console),\n }\n\n const conditional =\n (method: ConsoleMethod): ConsoleMethod =>\n (...args) => {\n if (enabledNamespaces!.size > 0) {\n method(...args)\n }\n }\n\n targetWindow.console.log = conditional(original.log)\n targetWindow.console.info = conditional(original.info)\n targetWindow.console.warn = conditional(original.warn)\n targetWindow.console.error = conditional(original.error)\n }\n\n type Namespace = { debug: (enabled: boolean) => void }\n const globals = targetWindow as unknown as Record<string, Namespace | undefined>\n const existing = Object.prototype.hasOwnProperty.call(globals, namespace)\n ? (Object.getOwnPropertyDescriptor(globals, namespace)?.value as Namespace | undefined)\n : undefined\n const target = existing ?? ({} as Namespace)\n target.debug = (flag: boolean) => {\n if (flag) {\n enabledNamespaces!.add(namespace)\n } else {\n enabledNamespaces!.delete(namespace)\n }\n }\n // Object.defineProperty (unlike a plain `globals[namespace] = target` assignment) always\n // creates/overwrites an own property, even when namespace is a name like \"__proto__\" that\n // would otherwise be intercepted by Object.prototype's special __proto__ accessor and\n // pollute the shared prototype instead of setting a property on this specific object.\n Object.defineProperty(globals, namespace, { value: target, writable: true, configurable: true, enumerable: true })\n}\n","export type TailwindShade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\n\nexport type TailwindColorScale = Record<TailwindShade, string>\n\ninterface Rgb {\n r: number\n g: number\n b: number\n}\n\nconst HEX_PATTERN = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i\n\nfunction hexToRgb(hex: string): Rgb {\n const match = HEX_PATTERN.exec(hex.trim())\n if (!match) {\n throw new Error(`Invalid hex color: \"${hex}\"`)\n }\n\n const digits = match[1]\n const normalized =\n digits.length === 3\n ? digits\n .split('')\n .map((char) => char + char)\n .join('')\n : digits\n\n return {\n r: parseInt(normalized.slice(0, 2), 16),\n g: parseInt(normalized.slice(2, 4), 16),\n b: parseInt(normalized.slice(4, 6), 16),\n }\n}\n\nfunction rgbToHex({ r, g, b }: Rgb): string {\n return `#${[r, g, b].map((channel) => Math.round(channel).toString(16).padStart(2, '0')).join('')}`\n}\n\nfunction mixRgb(base: Rgb, target: Rgb, weight: number): Rgb {\n return {\n r: base.r + (target.r - base.r) * weight,\n g: base.g + (target.g - base.g) * weight,\n b: base.b + (target.b - base.b) * weight,\n }\n}\n\nconst WHITE: Rgb = { r: 255, g: 255, b: 255 }\nconst BLACK: Rgb = { r: 0, g: 0, b: 0 }\n\n// Weight of white/black mixed into the base color at each shade, tuned so 500 is the input\n// color unchanged and the rest approximate the spread of Tailwind's own default palettes.\nconst TINT_WEIGHTS: Record<50 | 100 | 200 | 300 | 400, number> = { 50: 0.95, 100: 0.9, 200: 0.75, 300: 0.6, 400: 0.3 }\nconst SHADE_WEIGHTS: Record<600 | 700 | 800 | 900 | 950, number> = {\n 600: 0.15,\n 700: 0.3,\n 800: 0.45,\n 900: 0.6,\n 950: 0.8,\n}\n\n/**\n * Generates a Tailwind-style 50-950 color scale from a single base hex color, treated as the 500 shade.\n */\nexport function generateTailwindColorScale(baseColor: string): TailwindColorScale {\n const base = hexToRgb(baseColor)\n\n return {\n 50: rgbToHex(mixRgb(base, WHITE, TINT_WEIGHTS[50])),\n 100: rgbToHex(mixRgb(base, WHITE, TINT_WEIGHTS[100])),\n 200: rgbToHex(mixRgb(base, WHITE, TINT_WEIGHTS[200])),\n 300: rgbToHex(mixRgb(base, WHITE, TINT_WEIGHTS[300])),\n 400: rgbToHex(mixRgb(base, WHITE, TINT_WEIGHTS[400])),\n 500: rgbToHex(base),\n 600: rgbToHex(mixRgb(base, BLACK, SHADE_WEIGHTS[600])),\n 700: rgbToHex(mixRgb(base, BLACK, SHADE_WEIGHTS[700])),\n 800: rgbToHex(mixRgb(base, BLACK, SHADE_WEIGHTS[800])),\n 900: rgbToHex(mixRgb(base, BLACK, SHADE_WEIGHTS[900])),\n 950: rgbToHex(mixRgb(base, BLACK, SHADE_WEIGHTS[950])),\n }\n}\n\n/**\n * Like {@link generateTailwindColorScale}, but prefixes each shade with `name` (e.g. `primary500`)\n * so multiple scales can be spread into one flat palette object.\n */\nexport function generateNamedTailwindColorScale<T extends string>(\n baseColor: string,\n name: T\n): Record<`${T}${TailwindShade}`, string> {\n const scale = generateTailwindColorScale(baseColor)\n\n return Object.fromEntries(Object.entries(scale).map(([shade, hex]) => [`${name}${shade}`, hex])) as Record<\n `${T}${TailwindShade}`,\n string\n >\n}\n\nfunction rgbToHsl({ r, g, b }: Rgb): { h: number; s: number; l: number } {\n const rN = r / 255\n const gN = g / 255\n const bN = b / 255\n\n const max = Math.max(rN, gN, bN)\n const min = Math.min(rN, gN, bN)\n const l = (max + min) / 2\n\n if (max === min) {\n return { h: 0, s: 0, l: l * 100 }\n }\n\n const delta = max - min\n const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min)\n\n let h: number\n if (max === rN) {\n h = ((gN - bN) / delta + (gN < bN ? 6 : 0)) * 60\n } else if (max === gN) {\n h = ((bN - rN) / delta + 2) * 60\n } else {\n h = ((rN - gN) / delta + 4) * 60\n }\n\n return { h, s: s * 100, l: l * 100 }\n}\n\n/**\n * Formats a hex color as the \"H S% L%\" triplet shadcn/Tailwind CSS variable themes expect,\n * e.g. for `--primary: 240 5.9% 10%;` consumed as `hsl(var(--primary))`.\n */\nexport function hexToHslTriplet(hex: string, precision: number = 1): string {\n const { h, s, l } = rgbToHsl(hexToRgb(hex))\n const round = (value: number) => Number(value.toFixed(precision))\n\n return `${round(h)} ${round(s)}% ${round(l)}%`\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,5 @@
1
+ declare function setCookie(name: string, value: string): Promise<void>;
2
+ declare function getCookie(name: string): Promise<string | null>;
3
+ declare function removeCookie(name: string): Promise<void>;
4
+
5
+ export { getCookie, removeCookie, setCookie };
@@ -0,0 +1,21 @@
1
+ "use server";
2
+
3
+ // src/next/cookies.ts
4
+ import { cookies } from "next/headers";
5
+ async function setCookie(name, value) {
6
+ ;
7
+ (await cookies()).set(name, value);
8
+ }
9
+ async function getCookie(name) {
10
+ return (await cookies()).get(name)?.value ?? null;
11
+ }
12
+ async function removeCookie(name) {
13
+ ;
14
+ (await cookies()).delete(name);
15
+ }
16
+ export {
17
+ getCookie,
18
+ removeCookie,
19
+ setCookie
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/next/cookies.ts"],"sourcesContent":["'use server'\n\nimport { cookies } from 'next/headers'\n\nexport async function setCookie(name: string, value: string): Promise<void> {\n ;(await cookies()).set(name, value)\n}\n\nexport async function getCookie(name: string): Promise<string | null> {\n return (await cookies()).get(name)?.value ?? null\n}\n\nexport async function removeCookie(name: string): Promise<void> {\n ;(await cookies()).delete(name)\n}\n"],"mappings":";;;AAEA,SAAS,eAAe;AAExB,eAAsB,UAAU,MAAc,OAA8B;AAC1E;AAAC,GAAC,MAAM,QAAQ,GAAG,IAAI,MAAM,KAAK;AACpC;AAEA,eAAsB,UAAU,MAAsC;AACpE,UAAQ,MAAM,QAAQ,GAAG,IAAI,IAAI,GAAG,SAAS;AAC/C;AAEA,eAAsB,aAAa,MAA6B;AAC9D;AAAC,GAAC,MAAM,QAAQ,GAAG,OAAO,IAAI;AAChC;","names":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/next/middleware.ts
21
+ var middleware_exports = {};
22
+ __export(middleware_exports, {
23
+ DEFAULT_EXEMPT_PATTERNS: () => DEFAULT_EXEMPT_PATTERNS,
24
+ runMiddlewareIfPathMatches: () => runMiddlewareIfPathMatches,
25
+ runProxyIfPathMatches: () => runProxyIfPathMatches
26
+ });
27
+ module.exports = __toCommonJS(middleware_exports);
28
+
29
+ // src/functions/index.ts
30
+ function isPathMatched(pathname, pattern, exemptPatterns = []) {
31
+ if (exemptPatterns.some((exempt) => exempt.test(pathname))) {
32
+ return false;
33
+ }
34
+ return pattern.test(pathname);
35
+ }
36
+
37
+ // src/next/middleware.ts
38
+ var DEFAULT_EXEMPT_PATTERNS = [
39
+ /^\/_next/,
40
+ /^\/\.well-known/,
41
+ /^\/apple-icon\.png$/,
42
+ /^\/favicon\.ico$/,
43
+ /^\/icon\.png$/,
44
+ /^\/icon\.svg$/,
45
+ /^\/manifest\.json$/,
46
+ /^\/robots\.txt$/,
47
+ /^\/sitemap\.xml$/
48
+ ];
49
+ function runProxyIfPathMatches(pattern, exemptPatterns = DEFAULT_EXEMPT_PATTERNS) {
50
+ return function(handler) {
51
+ return async function(request) {
52
+ if (isPathMatched(request.nextUrl.pathname, pattern, exemptPatterns)) {
53
+ return await handler(request);
54
+ }
55
+ return void 0;
56
+ };
57
+ };
58
+ }
59
+ var runMiddlewareIfPathMatches = runProxyIfPathMatches;
60
+ // Annotate the CommonJS export names for ESM import in node:
61
+ 0 && (module.exports = {
62
+ DEFAULT_EXEMPT_PATTERNS,
63
+ runMiddlewareIfPathMatches,
64
+ runProxyIfPathMatches
65
+ });
66
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/next/middleware.ts","../../../src/functions/index.ts"],"sourcesContent":["import type { NextRequest, NextResponse } from 'next/server'\n\nimport { isPathMatched } from '../functions'\n\nexport const DEFAULT_EXEMPT_PATTERNS: RegExp[] = [\n /^\\/_next/,\n /^\\/\\.well-known/,\n /^\\/apple-icon\\.png$/,\n /^\\/favicon\\.ico$/,\n /^\\/icon\\.png$/,\n /^\\/icon\\.svg$/,\n /^\\/manifest\\.json$/,\n /^\\/robots\\.txt$/,\n /^\\/sitemap\\.xml$/,\n]\n\nexport function runProxyIfPathMatches(pattern: RegExp, exemptPatterns: RegExp[] = DEFAULT_EXEMPT_PATTERNS) {\n return function (handler: (request: NextRequest) => Promise<NextResponse | void>) {\n return async function (request: NextRequest): Promise<NextResponse | void> {\n if (isPathMatched(request.nextUrl.pathname, pattern, exemptPatterns)) {\n return await handler(request)\n }\n return undefined\n }\n }\n}\n\n// Next.js 16 deprecated the `middleware.ts`/`middleware` file convention in favor of\n// `proxy.ts`/`proxy` (middleware.ts still works today for edge-runtime use cases, but is\n// deprecated and defaults to being phased out). This alias exists so code written against either\n// naming keeps working - the wrapped handler's shape (NextRequest in, NextResponse|void out)\n// hasn't changed between the two, only what Next.js calls the file/export that uses it.\nexport const runMiddlewareIfPathMatches = runProxyIfPathMatches\n","export function withAttributes<Fn extends (...args: never[]) => unknown, Attrs extends Record<string, unknown>>(\n fn: Fn,\n attributes: Attrs\n): Fn & Attrs {\n for (const key of Object.keys(attributes)) {\n // Object.defineProperty (unlike a plain `fn[key] = value` assignment) always creates/\n // overwrites an own property, even when key is \"__proto__\" - a plain assignment would instead\n // be intercepted by Object.prototype's special __proto__ accessor and reassign fn's own\n // prototype instead of setting a property on it.\n Object.defineProperty(fn, key, {\n value: attributes[key],\n writable: true,\n configurable: true,\n enumerable: true,\n })\n }\n return fn as Fn & Attrs\n}\n\nexport function makeCallable<T, R>(originalCallable: (arg: T) => R) {\n return (data: T) => () => originalCallable(data)\n}\n\nexport function getLazyValue<T>(input: T | (() => T)): T {\n if (typeof input === 'function') {\n return (input as () => T)()\n }\n return input\n}\n\nexport async function getLazyValueAsync<T>(input: T | (() => Promise<T>) | (() => T)): Promise<T> {\n if (typeof input === 'function') {\n const result = (input as () => Promise<T>)()\n if (result instanceof Promise) {\n return await result\n }\n return result as unknown as T\n }\n return input\n}\n\nexport function suppress<T, ERT>(\n exceptions: Array<new (message?: string) => Error>,\n fn: () => T,\n onError?: (error: unknown) => ERT\n): T | ERT | undefined {\n try {\n return fn()\n } catch (error) {\n if (exceptions.some((exception) => error instanceof exception)) {\n return onError ? onError(error) : undefined\n }\n throw error\n }\n}\n\nexport function preventDefault<E extends Event, R>(callable: (event: E) => R): (event: E) => Promise<Awaited<R>> {\n return async function (event: E): Promise<Awaited<R>> {\n event.preventDefault()\n return await callable(event)\n }\n}\n\nexport function isPathMatched(pathname: string, pattern: RegExp, exemptPatterns: RegExp[] = []): boolean {\n if (exemptPatterns.some((exempt) => exempt.test(pathname))) {\n return false\n }\n return pattern.test(pathname)\n}\n\nexport function raises(error: Error): (...args: unknown[]) => never {\n return () => {\n throw error\n }\n}\n\nexport function cloned<Fn extends (...args: never[]) => unknown>(fn: Fn): Fn {\n return ((...args: Parameters<Fn>) => fn(...args)) as Fn\n}\n\nexport function enabledIf<R>(condition: boolean | (() => boolean), options: { ifNotEnabledReturnValue: R }) {\n const enabled = typeof condition === 'function' ? condition() : condition\n\n return function <Fn extends (...args: never[]) => R>(fn: Fn): Fn {\n if (!enabled) {\n return cloned((() => options.ifNotEnabledReturnValue) as Fn)\n }\n return cloned(fn)\n }\n}\n\nexport function transformExceptions<E extends Error>(\n exceptionTypes: Array<new (...args: never[]) => E>,\n transform: (error: E) => Error,\n options: { keepOriginal?: boolean } = {}\n) {\n const { keepOriginal = true } = options\n\n return function <Fn extends (...args: never[]) => unknown>(fn: Fn): Fn {\n return ((...args: Parameters<Fn>) => {\n try {\n return fn(...args)\n } catch (error) {\n if (!exceptionTypes.some((ExceptionType) => error instanceof ExceptionType)) {\n throw error\n }\n const newError = transform(error as E)\n if (keepOriginal) {\n newError.cause = error\n }\n throw newError\n }\n }) as Fn\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC+DO,SAAS,cAAc,UAAkB,SAAiB,iBAA2B,CAAC,GAAY;AACvG,MAAI,eAAe,KAAK,CAAC,WAAW,OAAO,KAAK,QAAQ,CAAC,GAAG;AAC1D,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,KAAK,QAAQ;AAC9B;;;ADhEO,IAAM,0BAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,sBAAsB,SAAiB,iBAA2B,yBAAyB;AACzG,SAAO,SAAU,SAAiE;AAChF,WAAO,eAAgB,SAAoD;AACzE,UAAI,cAAc,QAAQ,QAAQ,UAAU,SAAS,cAAc,GAAG;AACpE,eAAO,MAAM,QAAQ,OAAO;AAAA,MAC9B;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAOO,IAAM,6BAA6B;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+
3
+ declare const DEFAULT_EXEMPT_PATTERNS: RegExp[];
4
+ declare function runProxyIfPathMatches(pattern: RegExp, exemptPatterns?: RegExp[]): (handler: (request: NextRequest) => Promise<NextResponse | void>) => (request: NextRequest) => Promise<NextResponse | void>;
5
+ declare const runMiddlewareIfPathMatches: typeof runProxyIfPathMatches;
6
+
7
+ export { DEFAULT_EXEMPT_PATTERNS, runMiddlewareIfPathMatches, runProxyIfPathMatches };
@@ -0,0 +1,7 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+
3
+ declare const DEFAULT_EXEMPT_PATTERNS: RegExp[];
4
+ declare function runProxyIfPathMatches(pattern: RegExp, exemptPatterns?: RegExp[]): (handler: (request: NextRequest) => Promise<NextResponse | void>) => (request: NextRequest) => Promise<NextResponse | void>;
5
+ declare const runMiddlewareIfPathMatches: typeof runProxyIfPathMatches;
6
+
7
+ export { DEFAULT_EXEMPT_PATTERNS, runMiddlewareIfPathMatches, runProxyIfPathMatches };
@@ -0,0 +1,37 @@
1
+ // src/functions/index.ts
2
+ function isPathMatched(pathname, pattern, exemptPatterns = []) {
3
+ if (exemptPatterns.some((exempt) => exempt.test(pathname))) {
4
+ return false;
5
+ }
6
+ return pattern.test(pathname);
7
+ }
8
+
9
+ // src/next/middleware.ts
10
+ var DEFAULT_EXEMPT_PATTERNS = [
11
+ /^\/_next/,
12
+ /^\/\.well-known/,
13
+ /^\/apple-icon\.png$/,
14
+ /^\/favicon\.ico$/,
15
+ /^\/icon\.png$/,
16
+ /^\/icon\.svg$/,
17
+ /^\/manifest\.json$/,
18
+ /^\/robots\.txt$/,
19
+ /^\/sitemap\.xml$/
20
+ ];
21
+ function runProxyIfPathMatches(pattern, exemptPatterns = DEFAULT_EXEMPT_PATTERNS) {
22
+ return function(handler) {
23
+ return async function(request) {
24
+ if (isPathMatched(request.nextUrl.pathname, pattern, exemptPatterns)) {
25
+ return await handler(request);
26
+ }
27
+ return void 0;
28
+ };
29
+ };
30
+ }
31
+ var runMiddlewareIfPathMatches = runProxyIfPathMatches;
32
+ export {
33
+ DEFAULT_EXEMPT_PATTERNS,
34
+ runMiddlewareIfPathMatches,
35
+ runProxyIfPathMatches
36
+ };
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/functions/index.ts","../../../src/next/middleware.ts"],"sourcesContent":["export function withAttributes<Fn extends (...args: never[]) => unknown, Attrs extends Record<string, unknown>>(\n fn: Fn,\n attributes: Attrs\n): Fn & Attrs {\n for (const key of Object.keys(attributes)) {\n // Object.defineProperty (unlike a plain `fn[key] = value` assignment) always creates/\n // overwrites an own property, even when key is \"__proto__\" - a plain assignment would instead\n // be intercepted by Object.prototype's special __proto__ accessor and reassign fn's own\n // prototype instead of setting a property on it.\n Object.defineProperty(fn, key, {\n value: attributes[key],\n writable: true,\n configurable: true,\n enumerable: true,\n })\n }\n return fn as Fn & Attrs\n}\n\nexport function makeCallable<T, R>(originalCallable: (arg: T) => R) {\n return (data: T) => () => originalCallable(data)\n}\n\nexport function getLazyValue<T>(input: T | (() => T)): T {\n if (typeof input === 'function') {\n return (input as () => T)()\n }\n return input\n}\n\nexport async function getLazyValueAsync<T>(input: T | (() => Promise<T>) | (() => T)): Promise<T> {\n if (typeof input === 'function') {\n const result = (input as () => Promise<T>)()\n if (result instanceof Promise) {\n return await result\n }\n return result as unknown as T\n }\n return input\n}\n\nexport function suppress<T, ERT>(\n exceptions: Array<new (message?: string) => Error>,\n fn: () => T,\n onError?: (error: unknown) => ERT\n): T | ERT | undefined {\n try {\n return fn()\n } catch (error) {\n if (exceptions.some((exception) => error instanceof exception)) {\n return onError ? onError(error) : undefined\n }\n throw error\n }\n}\n\nexport function preventDefault<E extends Event, R>(callable: (event: E) => R): (event: E) => Promise<Awaited<R>> {\n return async function (event: E): Promise<Awaited<R>> {\n event.preventDefault()\n return await callable(event)\n }\n}\n\nexport function isPathMatched(pathname: string, pattern: RegExp, exemptPatterns: RegExp[] = []): boolean {\n if (exemptPatterns.some((exempt) => exempt.test(pathname))) {\n return false\n }\n return pattern.test(pathname)\n}\n\nexport function raises(error: Error): (...args: unknown[]) => never {\n return () => {\n throw error\n }\n}\n\nexport function cloned<Fn extends (...args: never[]) => unknown>(fn: Fn): Fn {\n return ((...args: Parameters<Fn>) => fn(...args)) as Fn\n}\n\nexport function enabledIf<R>(condition: boolean | (() => boolean), options: { ifNotEnabledReturnValue: R }) {\n const enabled = typeof condition === 'function' ? condition() : condition\n\n return function <Fn extends (...args: never[]) => R>(fn: Fn): Fn {\n if (!enabled) {\n return cloned((() => options.ifNotEnabledReturnValue) as Fn)\n }\n return cloned(fn)\n }\n}\n\nexport function transformExceptions<E extends Error>(\n exceptionTypes: Array<new (...args: never[]) => E>,\n transform: (error: E) => Error,\n options: { keepOriginal?: boolean } = {}\n) {\n const { keepOriginal = true } = options\n\n return function <Fn extends (...args: never[]) => unknown>(fn: Fn): Fn {\n return ((...args: Parameters<Fn>) => {\n try {\n return fn(...args)\n } catch (error) {\n if (!exceptionTypes.some((ExceptionType) => error instanceof ExceptionType)) {\n throw error\n }\n const newError = transform(error as E)\n if (keepOriginal) {\n newError.cause = error\n }\n throw newError\n }\n }) as Fn\n }\n}\n","import type { NextRequest, NextResponse } from 'next/server'\n\nimport { isPathMatched } from '../functions'\n\nexport const DEFAULT_EXEMPT_PATTERNS: RegExp[] = [\n /^\\/_next/,\n /^\\/\\.well-known/,\n /^\\/apple-icon\\.png$/,\n /^\\/favicon\\.ico$/,\n /^\\/icon\\.png$/,\n /^\\/icon\\.svg$/,\n /^\\/manifest\\.json$/,\n /^\\/robots\\.txt$/,\n /^\\/sitemap\\.xml$/,\n]\n\nexport function runProxyIfPathMatches(pattern: RegExp, exemptPatterns: RegExp[] = DEFAULT_EXEMPT_PATTERNS) {\n return function (handler: (request: NextRequest) => Promise<NextResponse | void>) {\n return async function (request: NextRequest): Promise<NextResponse | void> {\n if (isPathMatched(request.nextUrl.pathname, pattern, exemptPatterns)) {\n return await handler(request)\n }\n return undefined\n }\n }\n}\n\n// Next.js 16 deprecated the `middleware.ts`/`middleware` file convention in favor of\n// `proxy.ts`/`proxy` (middleware.ts still works today for edge-runtime use cases, but is\n// deprecated and defaults to being phased out). This alias exists so code written against either\n// naming keeps working - the wrapped handler's shape (NextRequest in, NextResponse|void out)\n// hasn't changed between the two, only what Next.js calls the file/export that uses it.\nexport const runMiddlewareIfPathMatches = runProxyIfPathMatches\n"],"mappings":";AA+DO,SAAS,cAAc,UAAkB,SAAiB,iBAA2B,CAAC,GAAY;AACvG,MAAI,eAAe,KAAK,CAAC,WAAW,OAAO,KAAK,QAAQ,CAAC,GAAG;AAC1D,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,KAAK,QAAQ;AAC9B;;;AChEO,IAAM,0BAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,sBAAsB,SAAiB,iBAA2B,yBAAyB;AACzG,SAAO,SAAU,SAAiE;AAChF,WAAO,eAAgB,SAAoD;AACzE,UAAI,cAAc,QAAQ,QAAQ,UAAU,SAAS,cAAc,GAAG;AACpE,eAAO,MAAM,QAAQ,OAAO;AAAA,MAC9B;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAOO,IAAM,6BAA6B;","names":[]}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/node/index.ts
31
+ var node_exports = {};
32
+ __export(node_exports, {
33
+ ConfigError: () => ConfigError,
34
+ boolean: () => boolean,
35
+ caster: () => caster,
36
+ commaSeparatedFloatList: () => commaSeparatedFloatList,
37
+ commaSeparatedIntList: () => commaSeparatedIntList,
38
+ commaSeparatedList: () => commaSeparatedList,
39
+ config: () => config,
40
+ contextLocal: () => contextLocal,
41
+ float: () => float,
42
+ getFileAsString: () => getFileAsString,
43
+ integer: () => integer,
44
+ string: () => string
45
+ });
46
+ module.exports = __toCommonJS(node_exports);
47
+
48
+ // src/node/casters.ts
49
+ function caster(fn) {
50
+ return function(options = {}) {
51
+ const clone = ((value) => fn(value));
52
+ if ("missingDefault" in options) {
53
+ clone.missingDefault = options.missingDefault;
54
+ }
55
+ if ("errorDefault" in options) {
56
+ clone.errorDefault = options.errorDefault;
57
+ }
58
+ return clone;
59
+ };
60
+ }
61
+ function parseStrictInteger(value) {
62
+ if (value.trim() === "" || !Number.isInteger(Number(value))) {
63
+ throw new Error(`Value ${JSON.stringify(value)} can not be parsed into an integer.`);
64
+ }
65
+ return Number(value);
66
+ }
67
+ function parseStrictFloat(value) {
68
+ if (value.trim() === "" || Number.isNaN(Number(value))) {
69
+ throw new Error(`Value ${JSON.stringify(value)} can not be parsed into a float.`);
70
+ }
71
+ return Number(value);
72
+ }
73
+ var string = caster((value) => value);
74
+ var integer = caster(parseStrictInteger);
75
+ var float = caster(parseStrictFloat);
76
+ var boolean = caster((value) => {
77
+ const truthy = ["true", "True", "1"];
78
+ const falsy = ["false", "False", "0"];
79
+ if (truthy.includes(value)) {
80
+ return true;
81
+ }
82
+ if (falsy.includes(value)) {
83
+ return false;
84
+ }
85
+ throw new Error(`Value ${JSON.stringify(value)} can not be parsed into a boolean.`);
86
+ });
87
+ var commaSeparatedList = caster((value) => value.split(","));
88
+ var commaSeparatedIntList = caster((value) => value.split(",").map(parseStrictInteger));
89
+ var commaSeparatedFloatList = caster((value) => value.split(",").map(parseStrictFloat));
90
+
91
+ // src/node/config.ts
92
+ var ConfigError = class extends Error {
93
+ };
94
+ function isCaster(value) {
95
+ return typeof value === "function";
96
+ }
97
+ function environmentKey(prefix, path2, sep) {
98
+ return [...prefix ? [prefix] : [], ...path2].join(sep);
99
+ }
100
+ function readLeaf(leafCaster, key) {
101
+ const rawValue = process.env[key];
102
+ if (rawValue === void 0) {
103
+ if ("missingDefault" in leafCaster) {
104
+ return leafCaster.missingDefault;
105
+ }
106
+ throw new ConfigError(
107
+ `Environment variable ${key} not found. Please set it or provide a missingDefault to your caster.`
108
+ );
109
+ }
110
+ try {
111
+ return leafCaster(rawValue);
112
+ } catch (error) {
113
+ if ("errorDefault" in leafCaster) {
114
+ return leafCaster.errorDefault;
115
+ }
116
+ throw new ConfigError(
117
+ `Error while parsing ${key}=${JSON.stringify(rawValue)}: ${error instanceof Error ? error.message : String(error)}. Please check the value and the caster, or provide an errorDefault to your caster.`
118
+ );
119
+ }
120
+ }
121
+ function build(schema, path2, prefix, sep) {
122
+ const result = {};
123
+ for (const [key, value] of Object.entries(schema)) {
124
+ const keyPath = [...path2, key];
125
+ result[key] = isCaster(value) ? readLeaf(value, environmentKey(prefix, keyPath, sep)) : build(value, keyPath, prefix, sep);
126
+ }
127
+ return result;
128
+ }
129
+ function config(schema, options = {}) {
130
+ const { prefix, sep = "__" } = options;
131
+ return build(schema, [], prefix, sep);
132
+ }
133
+
134
+ // src/node/contextLocal.ts
135
+ var import_node_async_hooks = require("async_hooks");
136
+ var registry = /* @__PURE__ */ new Map();
137
+ function contextLocal(name) {
138
+ let storage = registry.get(name);
139
+ if (!storage) {
140
+ storage = new import_node_async_hooks.AsyncLocalStorage();
141
+ registry.set(name, storage);
142
+ }
143
+ return storage;
144
+ }
145
+
146
+ // src/node/getFileAsString.ts
147
+ var import_promises = __toESM(require("fs/promises"), 1);
148
+ var import_path = __toESM(require("path"), 1);
149
+ async function getFileAsString(filename) {
150
+ try {
151
+ const filePath = import_path.default.join(process.cwd(), filename);
152
+ return await import_promises.default.readFile(filePath, "utf8");
153
+ } catch (error) {
154
+ console.error(`Error reading file ${filename}:`, error);
155
+ return `Error reading file: ${error instanceof Error ? error.message : String(error)}`;
156
+ }
157
+ }
158
+ // Annotate the CommonJS export names for ESM import in node:
159
+ 0 && (module.exports = {
160
+ ConfigError,
161
+ boolean,
162
+ caster,
163
+ commaSeparatedFloatList,
164
+ commaSeparatedIntList,
165
+ commaSeparatedList,
166
+ config,
167
+ contextLocal,
168
+ float,
169
+ getFileAsString,
170
+ integer,
171
+ string
172
+ });
173
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/node/index.ts","../../src/node/casters.ts","../../src/node/config.ts","../../src/node/contextLocal.ts","../../src/node/getFileAsString.ts"],"sourcesContent":["export * from './casters'\nexport * from './config'\nexport * from './contextLocal'\nexport * from './getFileAsString'\n","export type Caster<T> = ((value: string) => T) & { missingDefault?: T; errorDefault?: T }\n\nexport function caster<T>(fn: (value: string) => T) {\n return function (options: { missingDefault?: T; errorDefault?: T } = {}): Caster<T> {\n const clone = ((value: string) => fn(value)) as Caster<T>\n if ('missingDefault' in options) {\n clone.missingDefault = options.missingDefault\n }\n if ('errorDefault' in options) {\n clone.errorDefault = options.errorDefault\n }\n return clone\n }\n}\n\n// JS's Number()/parseInt()/parseFloat() don't throw on unparseable input the way Python's int()/\n// float() do (parseInt('123abc') silently returns 123, Number('') silently returns 0) - these\n// helpers add back the \"either it's a clean, fully-parsed number or it throws\" contract the\n// missingDefault/errorDefault fallback system above depends on.\nfunction parseStrictInteger(value: string): number {\n if (value.trim() === '' || !Number.isInteger(Number(value))) {\n throw new Error(`Value ${JSON.stringify(value)} can not be parsed into an integer.`)\n }\n return Number(value)\n}\n\nfunction parseStrictFloat(value: string): number {\n if (value.trim() === '' || Number.isNaN(Number(value))) {\n throw new Error(`Value ${JSON.stringify(value)} can not be parsed into a float.`)\n }\n return Number(value)\n}\n\nexport const string = caster((value: string) => value)\n\nexport const integer = caster(parseStrictInteger)\n\nexport const float = caster(parseStrictFloat)\n\nexport const boolean = caster((value: string) => {\n const truthy = ['true', 'True', '1']\n const falsy = ['false', 'False', '0']\n if (truthy.includes(value)) {\n return true\n }\n if (falsy.includes(value)) {\n return false\n }\n throw new Error(`Value ${JSON.stringify(value)} can not be parsed into a boolean.`)\n})\n\nexport const commaSeparatedList = caster((value: string) => value.split(','))\n\nexport const commaSeparatedIntList = caster((value: string) => value.split(',').map(parseStrictInteger))\n\nexport const commaSeparatedFloatList = caster((value: string) => value.split(',').map(parseStrictFloat))\n","import type { Caster } from './casters'\n\nexport class ConfigError extends Error {}\n\ntype Schema = { [key: string]: Caster<unknown> | Schema }\n\ntype InferConfig<S> = {\n [K in keyof S]: S[K] extends Caster<infer T> ? T : S[K] extends Schema ? InferConfig<S[K]> : never\n}\n\nfunction isCaster(value: unknown): value is Caster<unknown> {\n return typeof value === 'function'\n}\n\nfunction environmentKey(prefix: string | undefined, path: string[], sep: string): string {\n return [...(prefix ? [prefix] : []), ...path].join(sep)\n}\n\nfunction readLeaf<T>(leafCaster: Caster<T>, key: string): T {\n const rawValue = process.env[key]\n\n if (rawValue === undefined) {\n if ('missingDefault' in leafCaster) {\n return leafCaster.missingDefault as T\n }\n throw new ConfigError(\n `Environment variable ${key} not found. Please set it or provide a missingDefault to your caster.`\n )\n }\n\n try {\n return leafCaster(rawValue)\n } catch (error) {\n if ('errorDefault' in leafCaster) {\n return leafCaster.errorDefault as T\n }\n throw new ConfigError(\n `Error while parsing ${key}=${JSON.stringify(rawValue)}: ${error instanceof Error ? error.message : String(error)}. ` +\n 'Please check the value and the caster, or provide an errorDefault to your caster.'\n )\n }\n}\n\nfunction build<S extends Schema>(schema: S, path: string[], prefix: string | undefined, sep: string): InferConfig<S> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(schema)) {\n const keyPath = [...path, key]\n result[key] = isCaster(value)\n ? readLeaf(value, environmentKey(prefix, keyPath, sep))\n : build(value, keyPath, prefix, sep)\n }\n return result as InferConfig<S>\n}\n\nexport function config<S extends Schema>(schema: S, options: { prefix?: string; sep?: string } = {}): InferConfig<S> {\n const { prefix, sep = '__' } = options\n return build(schema, [], prefix, sep)\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nconst registry = new Map<string, AsyncLocalStorage<unknown>>()\n\nexport function contextLocal<T>(name: string): AsyncLocalStorage<T> {\n let storage = registry.get(name)\n if (!storage) {\n storage = new AsyncLocalStorage<T>()\n registry.set(name, storage)\n }\n return storage as AsyncLocalStorage<T>\n}\n","import fs from 'fs/promises'\nimport path from 'path'\n\nexport async function getFileAsString(filename: string): Promise<string> {\n try {\n const filePath = path.join(process.cwd(), filename)\n return await fs.readFile(filePath, 'utf8')\n } catch (error) {\n console.error(`Error reading file ${filename}:`, error)\n return `Error reading file: ${error instanceof Error ? error.message : String(error)}`\n }\n}\n"],"mappings":"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","names":["path","path","fs"]}
@@ -0,0 +1,57 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+
3
+ type Caster<T> = ((value: string) => T) & {
4
+ missingDefault?: T;
5
+ errorDefault?: T;
6
+ };
7
+ declare function caster<T>(fn: (value: string) => T): (options?: {
8
+ missingDefault?: T;
9
+ errorDefault?: T;
10
+ }) => Caster<T>;
11
+ declare const string: (options?: {
12
+ missingDefault?: string | undefined;
13
+ errorDefault?: string | undefined;
14
+ }) => Caster<string>;
15
+ declare const integer: (options?: {
16
+ missingDefault?: number | undefined;
17
+ errorDefault?: number | undefined;
18
+ }) => Caster<number>;
19
+ declare const float: (options?: {
20
+ missingDefault?: number | undefined;
21
+ errorDefault?: number | undefined;
22
+ }) => Caster<number>;
23
+ declare const boolean: (options?: {
24
+ missingDefault?: boolean | undefined;
25
+ errorDefault?: boolean | undefined;
26
+ }) => Caster<boolean>;
27
+ declare const commaSeparatedList: (options?: {
28
+ missingDefault?: string[] | undefined;
29
+ errorDefault?: string[] | undefined;
30
+ }) => Caster<string[]>;
31
+ declare const commaSeparatedIntList: (options?: {
32
+ missingDefault?: number[] | undefined;
33
+ errorDefault?: number[] | undefined;
34
+ }) => Caster<number[]>;
35
+ declare const commaSeparatedFloatList: (options?: {
36
+ missingDefault?: number[] | undefined;
37
+ errorDefault?: number[] | undefined;
38
+ }) => Caster<number[]>;
39
+
40
+ declare class ConfigError extends Error {
41
+ }
42
+ type Schema = {
43
+ [key: string]: Caster<unknown> | Schema;
44
+ };
45
+ type InferConfig<S> = {
46
+ [K in keyof S]: S[K] extends Caster<infer T> ? T : S[K] extends Schema ? InferConfig<S[K]> : never;
47
+ };
48
+ declare function config<S extends Schema>(schema: S, options?: {
49
+ prefix?: string;
50
+ sep?: string;
51
+ }): InferConfig<S>;
52
+
53
+ declare function contextLocal<T>(name: string): AsyncLocalStorage<T>;
54
+
55
+ declare function getFileAsString(filename: string): Promise<string>;
56
+
57
+ export { type Caster, ConfigError, boolean, caster, commaSeparatedFloatList, commaSeparatedIntList, commaSeparatedList, config, contextLocal, float, getFileAsString, integer, string };
@@ -0,0 +1,57 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+
3
+ type Caster<T> = ((value: string) => T) & {
4
+ missingDefault?: T;
5
+ errorDefault?: T;
6
+ };
7
+ declare function caster<T>(fn: (value: string) => T): (options?: {
8
+ missingDefault?: T;
9
+ errorDefault?: T;
10
+ }) => Caster<T>;
11
+ declare const string: (options?: {
12
+ missingDefault?: string | undefined;
13
+ errorDefault?: string | undefined;
14
+ }) => Caster<string>;
15
+ declare const integer: (options?: {
16
+ missingDefault?: number | undefined;
17
+ errorDefault?: number | undefined;
18
+ }) => Caster<number>;
19
+ declare const float: (options?: {
20
+ missingDefault?: number | undefined;
21
+ errorDefault?: number | undefined;
22
+ }) => Caster<number>;
23
+ declare const boolean: (options?: {
24
+ missingDefault?: boolean | undefined;
25
+ errorDefault?: boolean | undefined;
26
+ }) => Caster<boolean>;
27
+ declare const commaSeparatedList: (options?: {
28
+ missingDefault?: string[] | undefined;
29
+ errorDefault?: string[] | undefined;
30
+ }) => Caster<string[]>;
31
+ declare const commaSeparatedIntList: (options?: {
32
+ missingDefault?: number[] | undefined;
33
+ errorDefault?: number[] | undefined;
34
+ }) => Caster<number[]>;
35
+ declare const commaSeparatedFloatList: (options?: {
36
+ missingDefault?: number[] | undefined;
37
+ errorDefault?: number[] | undefined;
38
+ }) => Caster<number[]>;
39
+
40
+ declare class ConfigError extends Error {
41
+ }
42
+ type Schema = {
43
+ [key: string]: Caster<unknown> | Schema;
44
+ };
45
+ type InferConfig<S> = {
46
+ [K in keyof S]: S[K] extends Caster<infer T> ? T : S[K] extends Schema ? InferConfig<S[K]> : never;
47
+ };
48
+ declare function config<S extends Schema>(schema: S, options?: {
49
+ prefix?: string;
50
+ sep?: string;
51
+ }): InferConfig<S>;
52
+
53
+ declare function contextLocal<T>(name: string): AsyncLocalStorage<T>;
54
+
55
+ declare function getFileAsString(filename: string): Promise<string>;
56
+
57
+ export { type Caster, ConfigError, boolean, caster, commaSeparatedFloatList, commaSeparatedIntList, commaSeparatedList, config, contextLocal, float, getFileAsString, integer, string };